AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
gobject_commandscript Class Reference
Inheritance diagram for gobject_commandscript:
CommandScript ScriptObject

Public Member Functions

 gobject_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleGameObjectActivateCommand (ChatHandler *handler, GameObjectSpawnId guidLow)
 
static bool HandleGameObjectAddCommand (ChatHandler *handler, GameObjectEntry objectId, Optional< int32 > spawnTimeSecs)
 
static bool HandleGameObjectLoadCommand (ChatHandler *handler, GameObjectSpawnId spawnId)
 
static bool HandleGameObjectAddTempCommand (ChatHandler *handler, GameObjectEntry objectId, Optional< uint64 > spawntime)
 
static bool HandleGameObjectTargetCommand (ChatHandler *handler, Optional< Variant< GameObjectEntry, std::string_view > > objectId)
 
static bool HandleGameObjectDeleteCommand (ChatHandler *handler, GameObjectSpawnId spawnId)
 
static bool HandleGameObjectTurnCommand (ChatHandler *handler, GameObjectSpawnId guidLow, Optional< float > oz, Optional< float > oy, Optional< float > ox)
 
static bool HandleGameObjectMoveCommand (ChatHandler *handler, GameObjectSpawnId guidLow, Optional< std::array< float, 3 > > xyz)
 
static bool HandleGameObjectSetPhaseCommand (ChatHandler *handler, GameObjectSpawnId guidLow, uint32 phaseMask)
 
static bool HandleGameObjectNearCommand (ChatHandler *handler, Optional< float > dist)
 
static bool HandleGameObjectInfoCommand (ChatHandler *handler, Optional< EXACT_SEQUENCE("guid")> isGuid, Variant< Hyperlink< gameobject_entry >, Hyperlink< gameobject >, uint32 > data)
 
static bool HandleGameObjectSetStateCommand (ChatHandler *handler, GameObjectSpawnId guidLow, int32 objectType, Optional< uint32 > objectState)
 
static bool HandleGameObjectRespawn (ChatHandler *handler, GameObjectSpawnId guidLow)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ gobject_commandscript()

gobject_commandscript::gobject_commandscript ( )
inline
38: CommandScript("gobject_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable gobject_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

41 {
42 static ChatCommandTable gobjectCommandTable =
43 {
44 { "activate", HandleGameObjectActivateCommand, SEC_GAMEMASTER, Console::No },
45 { "delete", HandleGameObjectDeleteCommand, SEC_ADMINISTRATOR, Console::No },
46 { "info", HandleGameObjectInfoCommand, SEC_MODERATOR, Console::No },
47 { "move", HandleGameObjectMoveCommand, SEC_ADMINISTRATOR, Console::No },
48 { "near", HandleGameObjectNearCommand, SEC_MODERATOR, Console::No },
49 { "target", HandleGameObjectTargetCommand, SEC_MODERATOR, Console::No },
50 { "turn", HandleGameObjectTurnCommand, SEC_ADMINISTRATOR, Console::No },
51 { "add temp", HandleGameObjectAddTempCommand, SEC_GAMEMASTER, Console::No },
52 { "add", HandleGameObjectAddCommand, SEC_ADMINISTRATOR, Console::No },
53 { "load", HandleGameObjectLoadCommand, SEC_ADMINISTRATOR, Console::Yes },
54 { "set phase", HandleGameObjectSetPhaseCommand, SEC_ADMINISTRATOR, Console::No },
55 { "set state", HandleGameObjectSetStateCommand, SEC_ADMINISTRATOR, Console::No },
56 { "respawn", HandleGameObjectRespawn, SEC_GAMEMASTER, Console::No }
57 };
58 static ChatCommandTable commandTable =
59 {
60 { "gobject", gobjectCommandTable }
61 };
62 return commandTable;
63 }
@ SEC_ADMINISTRATOR
Definition Common.h:60
@ SEC_GAMEMASTER
Definition Common.h:59
@ SEC_MODERATOR
Definition Common.h:58
static bool HandleGameObjectDeleteCommand(ChatHandler *handler, GameObjectSpawnId spawnId)
Definition cs_gobject.cpp:345
static bool HandleGameObjectTargetCommand(ChatHandler *handler, Optional< Variant< GameObjectEntry, std::string_view > > objectId)
Definition cs_gobject.cpp:231
static bool HandleGameObjectNearCommand(ChatHandler *handler, Optional< float > dist)
Definition cs_gobject.cpp:493
static bool HandleGameObjectLoadCommand(ChatHandler *handler, GameObjectSpawnId spawnId)
Definition cs_gobject.cpp:148
static bool HandleGameObjectInfoCommand(ChatHandler *handler, Optional< EXACT_SEQUENCE("guid")> isGuid, Variant< Hyperlink< gameobject_entry >, Hyperlink< gameobject >, uint32 > data)
Definition cs_gobject.cpp:540
static bool HandleGameObjectAddCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< int32 > spawnTimeSecs)
Definition cs_gobject.cpp:86
static bool HandleGameObjectActivateCommand(ChatHandler *handler, GameObjectSpawnId guidLow)
Definition cs_gobject.cpp:65
static bool HandleGameObjectAddTempCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< uint64 > spawntime)
Definition cs_gobject.cpp:207
static bool HandleGameObjectMoveCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< std::array< float, 3 > > xyz)
Definition cs_gobject.cpp:415
static bool HandleGameObjectTurnCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< float > oz, Optional< float > oy, Optional< float > ox)
Definition cs_gobject.cpp:377
static bool HandleGameObjectRespawn(ChatHandler *handler, GameObjectSpawnId guidLow)
Definition cs_gobject.cpp:637
static bool HandleGameObjectSetStateCommand(ChatHandler *handler, GameObjectSpawnId guidLow, int32 objectType, Optional< uint32 > objectState)
Definition cs_gobject.cpp:603
static bool HandleGameObjectSetPhaseCommand(ChatHandler *handler, GameObjectSpawnId guidLow, uint32 phaseMask)
Definition cs_gobject.cpp:470
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46

References HandleGameObjectActivateCommand(), HandleGameObjectAddCommand(), HandleGameObjectAddTempCommand(), HandleGameObjectDeleteCommand(), HandleGameObjectInfoCommand(), HandleGameObjectLoadCommand(), HandleGameObjectMoveCommand(), HandleGameObjectNearCommand(), HandleGameObjectRespawn(), HandleGameObjectSetPhaseCommand(), HandleGameObjectSetStateCommand(), HandleGameObjectTargetCommand(), HandleGameObjectTurnCommand(), SEC_ADMINISTRATOR, SEC_GAMEMASTER, and SEC_MODERATOR.

◆ HandleGameObjectActivateCommand()

static bool gobject_commandscript::HandleGameObjectActivateCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow 
)
inlinestatic
66 {
67 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
68 if (!object)
69 {
71 return false;
72 }
73
74 uint32_t const autoCloseTime = object->GetGOInfo()->GetAutoCloseTime() ? 10000u : 0u;
75
76 // Activate
77 object->SetLootState(GO_READY);
78 object->UseDoorOrButton(autoCloseTime, false, handler->GetSession()->GetPlayer());
79
80 handler->PSendSysMessage("Object activated!");
81
82 return true;
83 }
std::uint32_t uint32
Definition Define.h:107
@ GO_READY
Definition GameObject.h:111
@ LANG_COMMAND_OBJNOTFOUND
Definition Language.h:323
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
GameObject * GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
Definition Chat.cpp:597
Definition GameObject.h:120
Player * GetPlayer() const
Definition WorldSession.h:435

References ChatHandler::GetObjectFromPlayerMapByDbGuid(), WorldSession::GetPlayer(), ChatHandler::GetSession(), GO_READY, LANG_COMMAND_OBJNOTFOUND, ChatHandler::PSendSysMessage(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleGameObjectAddCommand()

static bool gobject_commandscript::HandleGameObjectAddCommand ( ChatHandler handler,
GameObjectEntry  objectId,
Optional< int32 spawnTimeSecs 
)
inlinestatic
Todo:
is it really necessary to add both the real and DB table guid here ?
87 {
88 if (!objectId)
89 return false;
90
91 GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(objectId);
92 if (!objectInfo)
93 {
95 return false;
96 }
97
98 if (objectInfo->displayId && !sGameObjectDisplayInfoStore.LookupEntry(objectInfo->displayId))
99 {
100 // report to DB errors log as in loading case
101 LOG_ERROR("sql.sql", "Gameobject (Entry {} GoType: {}) have invalid displayId ({}), not spawned.", *objectId, objectInfo->type, objectInfo->displayId);
103 return false;
104 }
105
106 Player* player = handler->GetSession()->GetPlayer();
107 float x = float(player->GetPositionX());
108 float y = float(player->GetPositionY());
109 float z = float(player->GetPositionZ());
110 float o = float(player->GetOrientation());
111 Map* map = player->GetMap();
112
113 GameObject* object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
115
116 if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, G3D::Quat(), 0, GO_STATE_READY))
117 {
118 delete object;
119 return false;
120 }
121
122 if (spawnTimeSecs)
123 object->SetRespawnTime(*spawnTimeSecs);
124
125 // fill the gameobject data and save to the db
126 object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
127 guidLow = object->GetSpawnId();
128
129 // delete the old object and do a clean load from DB with a fresh new GameObject instance.
130 // this is required to avoid weird behavior and memory leaks
131 delete object;
132
133 object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
134 // this will generate a new guid if the object is in an instance
135 if (!object->LoadGameObjectFromDB(guidLow, map, true))
136 {
137 delete object;
138 return false;
139 }
140
142 sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGameObjectData(guidLow));
143
144 handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, uint32(objectId), objectInfo->name, guidLow, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
145 return true;
146 }
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
@ GO_STATE_READY
Definition GameObjectData.h:706
@ LANG_GAMEOBJECT_HAVE_INVALID_DATA
Definition Language.h:395
@ LANG_GAMEOBJECT_NOT_EXIST
Definition Language.h:572
@ LANG_GAMEOBJECT_ADD
Definition Language.h:576
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define sObjectMgr
Definition ObjectMgr.h:1686
virtual bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0)
Definition GameObject.cpp:259
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1268
virtual bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true)
Definition GameObject.cpp:1088
Definition Map.h:163
uint8 GetSpawnMode() const
Definition Map.h:267
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:480
uint32 GetId() const
Definition Map.h:229
uint32 LowType
Definition ObjectGuid.h:122
Definition Player.h:1066
uint32 GetPhaseMaskForSpawn() const
Definition Player.cpp:13776
Definition Transport.h:115
Map * GetMap() const
Definition Object.h:620
Definition GameObjectData.h:31
uint32 type
Definition GameObjectData.h:33
uint32 entry
Definition GameObjectData.h:32
std::string name
Definition GameObjectData.h:35
uint32 displayId
Definition GameObjectData.h:34
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References GameObject::Create(), GameObjectTemplate::displayId, GameObjectTemplate::entry, GameObject, Map::GenerateLowGuid(), Map::GetId(), WorldObject::GetMap(), Position::GetOrientation(), Player::GetPhaseMaskForSpawn(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::GetSession(), Map::GetSpawnMode(), GO_STATE_READY, LANG_GAMEOBJECT_ADD, LANG_GAMEOBJECT_HAVE_INVALID_DATA, LANG_GAMEOBJECT_NOT_EXIST, GameObject::LoadGameObjectFromDB(), LOG_ERROR, GameObjectTemplate::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), GameObject::SetRespawnTime(), sGameObjectDisplayInfoStore, sObjectMgr, and GameObjectTemplate::type.

Referenced by GetCommands().

◆ HandleGameObjectAddTempCommand()

static bool gobject_commandscript::HandleGameObjectAddTempCommand ( ChatHandler handler,
GameObjectEntry  objectId,
Optional< uint64 spawntime 
)
inlinestatic
208 {
209 Player* player = handler->GetSession()->GetPlayer();
210 uint64 spawntm(spawntime.value_or(300));
211
212 if (!sObjectMgr->GetGameObjectTemplate(objectId))
213 {
215 return false;
216 }
217
218 float x = player->GetPositionX();
219 float y = player->GetPositionY();
220 float z = player->GetPositionZ();
221 float ang = player->GetOrientation();
222
223 float rot2 = std::sin(ang / 2);
224 float rot3 = cos(ang / 2);
225
226 player->SummonGameObject(objectId, x, y, z, ang, 0, 0, rot2, rot3, spawntm);
227
228 return true;
229 }
std::uint64_t uint64
Definition Define.h:106
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2366

References Position::GetOrientation(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::GetSession(), LANG_GAMEOBJECT_NOT_EXIST, ChatHandler::SendErrorMessage(), sObjectMgr, and WorldObject::SummonGameObject().

Referenced by GetCommands().

◆ HandleGameObjectDeleteCommand()

static bool gobject_commandscript::HandleGameObjectDeleteCommand ( ChatHandler handler,
GameObjectSpawnId  spawnId 
)
inlinestatic
346 {
347 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(spawnId);
348 if (!object)
349 {
351 return false;
352 }
353
354 ObjectGuid ownerGuid = object->GetOwnerGUID();
355 if (ownerGuid)
356 {
357 Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid);
358 if (!owner || !ownerGuid.IsPlayer())
359 {
361 return false;
362 }
363
364 owner->RemoveGameObject(object, false);
365 }
366
367 object->SetRespawnTime(0); // not save respawn time
368 object->Delete();
369 object->DeleteFromDB();
370
372
373 return true;
374 }
@ LANG_COMMAND_DELOBJMESSAGE
Definition Language.h:325
@ LANG_COMMAND_DELOBJREFERCREATURE
Definition Language.h:324
ObjectGuid::LowType GetSpawnId() const
Definition GameObject.h:144
Definition ObjectGuid.h:118
bool IsPlayer() const
Definition ObjectGuid.h:168
std::string ToString() const
Definition ObjectGuid.cpp:47
Definition Unit.h:655
void RemoveGameObject(GameObject *gameObj, bool del)
Definition Unit.cpp:6435
Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:199

References ChatHandler::GetObjectFromPlayerMapByDbGuid(), WorldSession::GetPlayer(), ChatHandler::GetSession(), GameObject::GetSpawnId(), ObjectAccessor::GetUnit(), ObjectGuid::IsPlayer(), LANG_COMMAND_DELOBJMESSAGE, LANG_COMMAND_DELOBJREFERCREATURE, LANG_COMMAND_OBJNOTFOUND, ChatHandler::PSendSysMessage(), Unit::RemoveGameObject(), ChatHandler::SendErrorMessage(), and ObjectGuid::ToString().

Referenced by GetCommands().

◆ HandleGameObjectInfoCommand()

static bool gobject_commandscript::HandleGameObjectInfoCommand ( ChatHandler handler,
Optional< EXACT_SEQUENCE("guid")>  isGuid,
Variant< Hyperlink< gameobject_entry >, Hyperlink< gameobject >, uint32 data 
)
inlinestatic
541 {
542 uint32 entry = 0;
543 uint32 type = 0;
544 uint32 displayId = 0;
545 std::string name;
546 uint32 lootId = 0;
547 GameObject* gameObject = nullptr;
548
549 ObjectGuid::LowType spawnId = 0;
550 if (isGuid || data.holds_alternative<Hyperlink<gameobject>>())
551 {
552 spawnId = *data;
553 GameObjectData const* spawnData = sObjectMgr->GetGameObjectData(spawnId);
554 if (!spawnData)
555 {
557 return false;
558 }
559 entry = spawnData->id;
560 gameObject = handler->GetObjectFromPlayerMapByDbGuid(spawnId);
561 }
562 else
563 {
564 entry = *data;
565 }
566
567 GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry);
568 if (!gameObjectInfo)
569 {
571 return false;
572 }
573
574 type = gameObjectInfo->type;
575 displayId = gameObjectInfo->displayId;
576 name = gameObjectInfo->name;
577 if (type == GAMEOBJECT_TYPE_CHEST)
578 lootId = gameObjectInfo->chest.lootId;
579 else if (type == GAMEOBJECT_TYPE_FISHINGHOLE)
580 lootId = gameObjectInfo->fishinghole.lootId;
581
582 handler->PSendSysMessage(LANG_GOINFO_ENTRY, entry);
583 if (gameObject)
584 handler->PSendSysMessage("GUID: {}", gameObject->GetGUID().ToString());
585 handler->PSendSysMessage(LANG_GOINFO_TYPE, type);
586 handler->PSendSysMessage(LANG_GOINFO_LOOTID, lootId);
587 handler->PSendSysMessage(LANG_GOINFO_DISPLAYID, displayId);
588 if (gameObject)
589 {
590 handler->PSendSysMessage("LootMode: {}", gameObject->GetLootMode());
591 handler->PSendSysMessage("LootState: {}", gameObject->getLootState());
592 handler->PSendSysMessage("GOState: {}", gameObject->GetGoState());
593 handler->PSendSysMessage("PhaseMask: {}", gameObject->GetPhaseMask());
594 handler->PSendSysMessage("IsLootEmpty: {}", gameObject->loot.empty());
595 handler->PSendSysMessage("IsLootLooted: {}", gameObject->loot.isLooted());
596 }
597
598 handler->PSendSysMessage(LANG_GOINFO_NAME, name);
599
600 return true;
601 }
@ LANG_GOINFO_NAME
Definition Language.h:1085
@ LANG_GOINFO_DISPLAYID
Definition Language.h:1084
@ LANG_GOINFO_ENTRY
Definition Language.h:1082
@ LANG_GOINFO_LOOTID
Definition Language.h:1086
@ LANG_GOINFO_TYPE
Definition Language.h:1083
@ GAMEOBJECT_TYPE_CHEST
Definition SharedDefines.h:1574
@ GAMEOBJECT_TYPE_FISHINGHOLE
Definition SharedDefines.h:1596
Loot loot
Definition GameObject.h:246
GOState GetGoState() const
Definition GameObject.h:204
LootState getLootState() const
Definition GameObject.h:223
uint16 GetLootMode() const
Definition GameObject.h:227
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
uint32 GetPhaseMask() const
Definition Object.h:512
constexpr bool holds_alternative() const
Definition ChatCommandTags.h:298
Definition GameObjectData.h:712
uint32 id
Definition GameObjectData.h:714
uint32 lootId
Definition GameObjectData.h:84
struct GameObjectTemplate::@234::@255 fishinghole
struct GameObjectTemplate::@234::@239 chest
bool empty() const
Definition LootMgr.h:367
bool isLooted() const
Definition LootMgr.h:368

References GameObjectTemplate::chest, GameObjectTemplate::displayId, Loot::empty(), GameObjectTemplate::fishinghole, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_FISHINGHOLE, GameObject::GetGoState(), Object::GetGUID(), GameObject::GetLootMode(), GameObject::getLootState(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), WorldObject::GetPhaseMask(), GameObjectData::id, Loot::isLooted(), LANG_COMMAND_OBJNOTFOUND, LANG_GAMEOBJECT_NOT_EXIST, LANG_GOINFO_DISPLAYID, LANG_GOINFO_ENTRY, LANG_GOINFO_LOOTID, LANG_GOINFO_NAME, LANG_GOINFO_TYPE, GameObject::loot, GameObjectTemplate::lootId, GameObjectTemplate::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sObjectMgr, ObjectGuid::ToString(), and GameObjectTemplate::type.

Referenced by GetCommands().

◆ HandleGameObjectLoadCommand()

static bool gobject_commandscript::HandleGameObjectLoadCommand ( ChatHandler handler,
GameObjectSpawnId  spawnId 
)
inlinestatic
149 {
150 if (!spawnId)
151 return false;
152
153 if (sObjectMgr->GetGameObjectData(spawnId))
154 {
155 handler->SendErrorMessage("Gameobject spawn {} is already loaded.", uint32(spawnId));
156 return false;
157 }
158
159 GameObjectData const* data = sObjectMgr->LoadGameObjectDataFromDB(spawnId);
160 if (!data)
161 {
162 handler->SendErrorMessage("Gameobject spawn {} not found in the database.", uint32(spawnId));
163 return false;
164 }
165
166 if (sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
167 {
168 handler->SendErrorMessage("Gameobject spawn {} is part of a pool and cannot be manually loaded.", uint32(spawnId));
169 return false;
170 }
171
172 QueryResult eventResult = WorldDatabase.Query("SELECT guid FROM game_event_gameobject WHERE guid = {}", uint32(spawnId));
173 if (eventResult)
174 {
175 handler->SendErrorMessage("Gameobject spawn {} is managed by the game event system and cannot be manually loaded.", uint32(spawnId));
176 return false;
177 }
178
179 Map* map = sMapMgr->FindBaseNonInstanceMap(data->mapid);
180 if (!map)
181 {
182 handler->SendErrorMessage("Gameobject spawn {} is on a non-continent map (ID: {}). Only continent maps are supported.", uint32(spawnId), data->mapid);
183 return false;
184 }
185
186 GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(data->id);
187 if (!objectInfo)
188 {
189 handler->SendErrorMessage("Gameobject template not found for entry {}.", data->id);
190 return false;
191 }
192
193 GameObject* object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
194 if (!object->LoadGameObjectFromDB(spawnId, map, true))
195 {
196 delete object;
197 handler->SendErrorMessage("Failed to load gameobject spawn {}.", uint32(spawnId));
198 return false;
199 }
200
201 sObjectMgr->AddGameobjectToGrid(spawnId, data);
202 handler->PSendSysMessage("Gameobject spawn {} loaded successfully.", uint32(spawnId));
203 return true;
204 }
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
#define sMapMgr
Definition MapMgr.h:220
#define sPoolMgr
Definition PoolMgr.h:163
uint16 mapid
Definition GameObjectData.h:715

References GameObjectTemplate::entry, GameObjectData::id, GameObject::LoadGameObjectFromDB(), GameObjectData::mapid, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sMapMgr, sObjectMgr, sPoolMgr, and WorldDatabase.

Referenced by GetCommands().

◆ HandleGameObjectMoveCommand()

static bool gobject_commandscript::HandleGameObjectMoveCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow,
Optional< std::array< float, 3 > >  xyz 
)
inlinestatic
416 {
417 if (!guidLow)
418 return false;
419
420 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
421 if (!object)
422 {
424 return false;
425 }
426
427 Position pos;
428 if (xyz)
429 {
430 pos = { (*xyz)[0], (*xyz)[1], (*xyz)[2] };
431 if (!MapMgr::IsValidMapCoord(object->GetMapId(), pos))
432 {
434 return false;
435 }
436 }
437 else
438 {
439 pos = handler->GetSession()->GetPlayer()->GetPosition();
440 }
441
442 Map* map = object->GetMap();
443
444 pos.SetOrientation(object->GetOrientation());
445 object->Relocate(pos);
446
447 // update which cell has this gameobject registered for loading
448 sObjectMgr->RemoveGameobjectFromGrid(guidLow, object->GetGameObjectData());
449 object->SaveToDB();
450 sObjectMgr->AddGameobjectToGrid(guidLow, object->GetGameObjectData());
451
452 // Generate a completely new spawn with new guid
453 // 3.3.5a client caches recently deleted objects and brings them back to life
454 // when CreateObject block for this guid is received again
455 // however it entirely skips parsing that block and only uses already known location
456 object->Delete();
457
458 object = new GameObject();
459 if (!object->LoadGameObjectFromDB(guidLow, map, true))
460 {
461 delete object;
462 return false;
463 }
464
465 handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name, object->GetSpawnId());
466 return true;
467 }
@ LANG_COMMAND_MOVEOBJMESSAGE
Definition Language.h:327
@ LANG_INVALID_TARGET_COORD
Definition Language.h:313
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
GameObjectData const * GetGameObjectData() const
Definition GameObject.h:138
static bool IsValidMapCoord(uint32 mapid, Position const &pos)
Definition MapMgr.h:90
uint32 GetMapId() const
Definition Position.h:281
Definition Position.h:27
void SetOrientation(float orientation)
Definition Position.h:116
void GetPosition(float &x, float &y) const
Definition Position.h:126

References GameObject::GetGameObjectData(), GameObject::GetGOInfo(), WorldLocation::GetMapId(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), Position::GetOrientation(), WorldSession::GetPlayer(), Position::GetPosition(), Position::GetPositionX(), Position::GetPositionY(), ChatHandler::GetSession(), GameObject::GetSpawnId(), MapMgr::IsValidMapCoord(), LANG_COMMAND_MOVEOBJMESSAGE, LANG_COMMAND_OBJNOTFOUND, LANG_INVALID_TARGET_COORD, GameObject::LoadGameObjectFromDB(), GameObjectTemplate::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), Position::SetOrientation(), and sObjectMgr.

Referenced by GetCommands().

◆ HandleGameObjectNearCommand()

static bool gobject_commandscript::HandleGameObjectNearCommand ( ChatHandler handler,
Optional< float >  dist 
)
inlinestatic
494 {
495 float distance = dist.value_or(10.0f);
496 uint32 count = 0;
497
498 Player* player = handler->GetSession()->GetPlayer();
499
501 stmt->SetData(0, player->GetPositionX());
502 stmt->SetData(1, player->GetPositionY());
503 stmt->SetData(2, player->GetPositionZ());
504 stmt->SetData(3, player->GetMapId());
505 stmt->SetData(4, player->GetPositionX());
506 stmt->SetData(5, player->GetPositionY());
507 stmt->SetData(6, player->GetPositionZ());
508 stmt->SetData(7, distance * distance);
509 stmt->SetData(8, player->GetPhaseMask());
510 PreparedQueryResult result = WorldDatabase.Query(stmt);
511
512 if (result)
513 {
514 do
515 {
516 Field* fields = result->Fetch();
517 ObjectGuid::LowType guid = fields[0].Get<uint32>();
518 uint32 entry = fields[1].Get<uint32>();
519 float x = fields[2].Get<float>();
520 float y = fields[3].Get<float>();
521 float z = fields[4].Get<float>();
522 uint16 mapId = fields[5].Get<uint16>();
523
524 GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry);
525
526 if (!gameObjectInfo)
527 continue;
528
529 handler->PSendSysMessage(LANG_GO_LIST_CHAT, guid, entry, guid, gameObjectInfo->name, x, y, z, mapId, "", "");
530
531 ++count;
532 } while (result->NextRow());
533 }
534
535 handler->PSendSysMessage(LANG_COMMAND_NEAROBJMESSAGE, distance, count);
536 return true;
537 }
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
std::uint16_t uint16
Definition Define.h:108
@ LANG_GO_LIST_CHAT
Definition Language.h:566
@ LANG_COMMAND_NEAROBJMESSAGE
Definition Language.h:646
@ WORLD_SEL_GAMEOBJECT_NEAREST
Definition WorldDatabase.h:89
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157

References Field::Get(), WorldLocation::GetMapId(), WorldObject::GetPhaseMask(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::GetSession(), LANG_COMMAND_NEAROBJMESSAGE, LANG_GO_LIST_CHAT, ChatHandler::PSendSysMessage(), PreparedStatementBase::SetData(), sObjectMgr, WORLD_SEL_GAMEOBJECT_NEAREST, and WorldDatabase.

Referenced by GetCommands().

◆ HandleGameObjectRespawn()

static bool gobject_commandscript::HandleGameObjectRespawn ( ChatHandler handler,
GameObjectSpawnId  guidLow 
)
inlinestatic
638 {
639 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
640 if (!object)
641 {
643 return false;
644 }
645
646 object->Respawn();
647 handler->PSendSysMessage(LANG_CMD_GO_RESPAWN, object->GetNameForLocaleIdx(handler->GetSessionDbcLocale()), object->GetEntry(), object->GetSpawnId());
648 return true;
649 }
@ LANG_CMD_GO_RESPAWN
Definition Language.h:1157
virtual LocaleConstant GetSessionDbcLocale() const
Definition Chat.cpp:870
std::string const & GetNameForLocaleIdx(LocaleConstant locale_idx) const override
Definition GameObject.cpp:2183
uint32 GetEntry() const
Definition Object.h:116

References Object::GetEntry(), GameObject::GetNameForLocaleIdx(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), ChatHandler::GetSessionDbcLocale(), GameObject::GetSpawnId(), LANG_CMD_GO_RESPAWN, LANG_COMMAND_OBJNOTFOUND, ChatHandler::PSendSysMessage(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleGameObjectSetPhaseCommand()

static bool gobject_commandscript::HandleGameObjectSetPhaseCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow,
uint32  phaseMask 
)
inlinestatic
471 {
472 if (!guidLow)
473 return false;
474
475 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
476 if (!object)
477 {
479 return false;
480 }
481
482 if (!phaseMask)
483 {
485 return false;
486 }
487
488 object->SetPhaseMask(phaseMask, true);
489 object->SaveToDB();
490 return true;
491 }
@ LANG_BAD_VALUE
Definition Language.h:148

References ChatHandler::GetObjectFromPlayerMapByDbGuid(), LANG_BAD_VALUE, LANG_COMMAND_OBJNOTFOUND, and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleGameObjectSetStateCommand()

static bool gobject_commandscript::HandleGameObjectSetStateCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow,
int32  objectType,
Optional< uint32 objectState 
)
inlinestatic
604 {
605 if (!guidLow)
606 return false;
607
608 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
609 if (!object)
610 {
612 return false;
613 }
614
615 if (objectType < 0)
616 {
617 if (objectType == -1)
618 object->SendObjectDeSpawnAnim(object->GetGUID());
619 else if (objectType == -2)
620 return false;
621 return true;
622 }
623
624 if (!objectState)
625 return false;
626
627 if (objectType < 4)
628 object->SetByteValue(GAMEOBJECT_BYTES_1, objectType, *objectState);
629 else if (objectType == 4)
630 {
631 object->SendCustomAnim(*objectState);
632 }
633 handler->PSendSysMessage("Set gobject type {} state {}", objectType, *objectState);
634 return true;
635 }
@ GAMEOBJECT_BYTES_1
Definition UpdateFields.h:404

References GAMEOBJECT_BYTES_1, Object::GetGUID(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), LANG_COMMAND_OBJNOTFOUND, ChatHandler::PSendSysMessage(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleGameObjectTargetCommand()

static bool gobject_commandscript::HandleGameObjectTargetCommand ( ChatHandler handler,
Optional< Variant< GameObjectEntry, std::string_view > >  objectId 
)
inlinestatic
232 {
233 Player* player = handler->GetSession()->GetPlayer();
234 QueryResult result;
235 GameEventMgr::ActiveEvents const& activeEventsList = sGameEventMgr->GetActiveEventList();
236
237 if (objectId)
238 {
239 if (objectId->holds_alternative<GameObjectEntry>())
240 {
241 result = WorldDatabase.Query("SELECT guid, id, position_x, position_y, position_z, orientation, map, phaseMask, (POW(position_x - '{}', 2) + POW(position_y - '{}', 2) + POW(position_z - '{}', 2)) AS order_ FROM gameobject WHERE map = '{}' AND id = '{}' ORDER BY order_ ASC LIMIT 1",
242 player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), static_cast<uint32>(objectId->get<GameObjectEntry>()));
243 }
244 else
245 {
246 std::string name = std::string(objectId->get<std::string_view>());
247 WorldDatabase.EscapeString(name);
248 result = WorldDatabase.Query(
249 "SELECT guid, id, position_x, position_y, position_z, orientation, map, phaseMask, (POW(position_x - {}, 2) + POW(position_y - {}, 2) + POW(position_z - {}, 2)) AS order_ "
250 "FROM gameobject LEFT JOIN gameobject_template ON gameobject_template.entry = gameobject.id WHERE map = {} AND name LIKE '%{}%' ORDER BY order_ ASC LIMIT 1",
251 player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), name);
252 }
253 }
254 else
255 {
256 std::ostringstream eventFilter;
257 eventFilter << " AND (eventEntry IS NULL ";
258 bool initString = true;
259
260 for (GameEventMgr::ActiveEvents::const_iterator itr = activeEventsList.begin(); itr != activeEventsList.end(); ++itr)
261 {
262 if (initString)
263 {
264 eventFilter << "OR eventEntry IN (" << *itr;
265 initString = false;
266 }
267 else
268 eventFilter << ',' << *itr;
269 }
270
271 if (!initString)
272 eventFilter << "))";
273 else
274 eventFilter << ')';
275
276 result = WorldDatabase.Query("SELECT gameobject.guid, id, position_x, position_y, position_z, orientation, map, phaseMask, "
277 "(POW(position_x - {}, 2) + POW(position_y - {}, 2) + POW(position_z - {}, 2)) AS order_ FROM gameobject "
278 "LEFT OUTER JOIN game_event_gameobject on gameobject.guid = game_event_gameobject.guid WHERE map = '{}' {} ORDER BY order_ ASC LIMIT 10",
279 handler->GetSession()->GetPlayer()->GetPositionX(), handler->GetSession()->GetPlayer()->GetPositionY(), handler->GetSession()->GetPlayer()->GetPositionZ(),
280 handler->GetSession()->GetPlayer()->GetMapId(), eventFilter.str());
281 }
282
283 if (!result)
284 {
286 return true;
287 }
288
289 bool found = false;
290 float x, y, z, o;
291 ObjectGuid::LowType guidLow;
292 uint32 id, phase;
293 uint16 mapId;
294 uint32 poolId;
295
296 do
297 {
298 Field* fields = result->Fetch();
299 guidLow = fields[0].Get<uint32>();
300 id = fields[1].Get<uint32>();
301 x = fields[2].Get<float>();
302 y = fields[3].Get<float>();
303 z = fields[4].Get<float>();
304 o = fields[5].Get<float>();
305 mapId = fields[6].Get<uint16>();
306 phase = fields[7].Get<uint32>();
307 poolId = sPoolMgr->IsPartOfAPool<GameObject>(guidLow);
308 if (!poolId || sPoolMgr->IsSpawnedObject<GameObject>(guidLow))
309 found = true;
310 } while (result->NextRow() && !found);
311
312 if (!found)
313 {
315 return false;
316 }
317
318 GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(id);
319
320 if (!objectInfo)
321 {
323 return false;
324 }
325
326 GameObject* target = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
327
328 handler->PSendSysMessage(LANG_GAMEOBJECT_DETAIL, guidLow, objectInfo->name, guidLow, id, x, y, z, mapId, o, phase);
329
330 if (target)
331 {
332 int32 curRespawnDelay = int32(target->GetRespawnTimeEx() - GameTime::GetGameTime().count());
333 if (curRespawnDelay < 0)
334 curRespawnDelay = 0;
335
336 std::string curRespawnDelayStr = secsToTimeString(curRespawnDelay, true);
337 std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true);
338
339 handler->PSendSysMessage(LANG_COMMAND_RAWPAWNTIMES, defRespawnDelayStr, curRespawnDelayStr);
340 }
341 return true;
342 }
std::int32_t int32
Definition Define.h:103
#define sGameEventMgr
Definition GameEventMgr.h:201
@ LANG_GAMEOBJECT_DETAIL
Definition Language.h:575
@ LANG_COMMAND_TARGETOBJNOTFOUND
Definition Language.h:316
@ LANG_COMMAND_RAWPAWNTIMES
Definition Language.h:647
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
phase
Definition boss_skadi.cpp:99
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:160
std::set< uint16 > ActiveEvents
Definition GameEventMgr.h:106
uint32 GetRespawnDelay() const
Definition GameObject.h:197
time_t GetRespawnTimeEx() const
Definition GameObject.cpp:2897
Seconds GetGameTime()
Definition GameTime.cpp:38
Definition ChatCommandTags.h:253

References Field::Get(), GameTime::GetGameTime(), WorldLocation::GetMapId(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GameObject::GetRespawnDelay(), GameObject::GetRespawnTimeEx(), ChatHandler::GetSession(), LANG_COMMAND_RAWPAWNTIMES, LANG_COMMAND_TARGETOBJNOTFOUND, LANG_GAMEOBJECT_DETAIL, LANG_GAMEOBJECT_NOT_EXIST, GameObjectTemplate::name, ChatHandler::PSendSysMessage(), secsToTimeString(), ChatHandler::SendSysMessage(), sGameEventMgr, sObjectMgr, sPoolMgr, and WorldDatabase.

Referenced by GetCommands().

◆ HandleGameObjectTurnCommand()

static bool gobject_commandscript::HandleGameObjectTurnCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow,
Optional< float >  oz,
Optional< float >  oy,
Optional< float >  ox 
)
inlinestatic
378 {
379 if (!guidLow)
380 return false;
381
382 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
383 if (!object)
384 {
386 return false;
387 }
388
389 if (!oz)
390 oz = handler->GetSession()->GetPlayer()->GetOrientation();
391
392 Map* map = object->GetMap();
393 object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), *oz);
394 object->SetWorldRotationAngles(*oz, oy.value_or(0.0f), ox.value_or(0.0f));
395 object->SaveToDB();
396
397 // Generate a completely new spawn with new guid
398 // 3.3.5a client caches recently deleted objects and brings them back to life
399 // when CreateObject block for this guid is received again
400 // however it entirely skips parsing that block and only uses already known location
401 object->Delete();
402
403 object = new GameObject();
404 if (!object->LoadGameObjectFromDB(guidLow, map, true))
405 {
406 delete object;
407 return false;
408 }
409
410 handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name, object->GetSpawnId());
411 return true;
412 }
@ LANG_COMMAND_TURNOBJMESSAGE
Definition Language.h:326

References GameObject::GetGOInfo(), ChatHandler::GetObjectFromPlayerMapByDbGuid(), Position::GetOrientation(), WorldSession::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), ChatHandler::GetSession(), GameObject::GetSpawnId(), LANG_COMMAND_OBJNOTFOUND, LANG_COMMAND_TURNOBJMESSAGE, GameObject::LoadGameObjectFromDB(), GameObjectTemplate::name, ChatHandler::PSendSysMessage(), and ChatHandler::SendErrorMessage().

Referenced by GetCommands().


The documentation for this class was generated from the following file: