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)
 
static bool HandleGameObjectSpawnGroupCommand (ChatHandler *handler, uint32 groupId)
 
static bool HandleGameObjectDespawnGroupCommand (ChatHandler *handler, uint32 groupId)
 

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
43: CommandScript("gobject_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable gobject_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

46 {
47 static ChatCommandTable gobjectCommandTable =
48 {
64 };
65 static ChatCommandTable commandTable =
66 {
67 { "gobject", gobjectCommandTable }
68 };
69 return commandTable;
70 }
static bool HandleGameObjectDeleteCommand(ChatHandler *handler, GameObjectSpawnId spawnId)
Definition cs_gobject.cpp:353
static bool HandleGameObjectTargetCommand(ChatHandler *handler, Optional< Variant< GameObjectEntry, std::string_view > > objectId)
Definition cs_gobject.cpp:239
static bool HandleGameObjectNearCommand(ChatHandler *handler, Optional< float > dist)
Definition cs_gobject.cpp:501
static bool HandleGameObjectLoadCommand(ChatHandler *handler, GameObjectSpawnId spawnId)
Definition cs_gobject.cpp:156
static bool HandleGameObjectInfoCommand(ChatHandler *handler, Optional< EXACT_SEQUENCE("guid")> isGuid, Variant< Hyperlink< gameobject_entry >, Hyperlink< gameobject >, uint32 > data)
Definition cs_gobject.cpp:584
static bool HandleGameObjectAddCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< int32 > spawnTimeSecs)
Definition cs_gobject.cpp:93
static bool HandleGameObjectActivateCommand(ChatHandler *handler, GameObjectSpawnId guidLow)
Definition cs_gobject.cpp:72
static bool HandleGameObjectAddTempCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< uint64 > spawntime)
Definition cs_gobject.cpp:215
static bool HandleGameObjectMoveCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< std::array< float, 3 > > xyz)
Definition cs_gobject.cpp:423
static bool HandleGameObjectTurnCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< float > oz, Optional< float > oy, Optional< float > ox)
Definition cs_gobject.cpp:385
static bool HandleGameObjectSpawnGroupCommand(ChatHandler *handler, uint32 groupId)
Definition cs_gobject.cpp:695
static bool HandleGameObjectRespawn(ChatHandler *handler, GameObjectSpawnId guidLow)
Definition cs_gobject.cpp:681
static bool HandleGameObjectDespawnGroupCommand(ChatHandler *handler, uint32 groupId)
Definition cs_gobject.cpp:722
static bool HandleGameObjectSetStateCommand(ChatHandler *handler, GameObjectSpawnId guidLow, int32 objectType, Optional< uint32 > objectState)
Definition cs_gobject.cpp:647
static bool HandleGameObjectSetPhaseCommand(ChatHandler *handler, GameObjectSpawnId guidLow, uint32 phaseMask)
Definition cs_gobject.cpp:478
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_GOBJECT_ADD
Definition RBAC.h:227
@ RBAC_PERM_COMMAND_GOBJECT_SET_PHASE
Definition RBAC.h:233
@ RBAC_PERM_COMMAND_GOBJECT_SET_STATE
Definition RBAC.h:234
@ RBAC_PERM_COMMAND_GOBJECT_DELETE
Definition RBAC.h:229
@ RBAC_PERM_COMMAND_GOBJECT_LOAD
Definition RBAC.h:676
@ RBAC_PERM_COMMAND_GOBJECT_INFO
Definition RBAC.h:230
@ RBAC_PERM_COMMAND_GOBJECT_ACTIVATE
Definition RBAC.h:226
@ RBAC_PERM_COMMAND_GOBJECT_TARGET
Definition RBAC.h:235
@ RBAC_PERM_COMMAND_GOBJECT_NEAR
Definition RBAC.h:232
@ RBAC_PERM_COMMAND_GOBJECT_MOVE
Definition RBAC.h:231
@ RBAC_PERM_COMMAND_GOBJECT_TURN
Definition RBAC.h:236
@ RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP
Definition RBAC.h:228

References HandleGameObjectActivateCommand(), HandleGameObjectAddCommand(), HandleGameObjectAddTempCommand(), HandleGameObjectDeleteCommand(), HandleGameObjectDespawnGroupCommand(), HandleGameObjectInfoCommand(), HandleGameObjectLoadCommand(), HandleGameObjectMoveCommand(), HandleGameObjectNearCommand(), HandleGameObjectRespawn(), HandleGameObjectSetPhaseCommand(), HandleGameObjectSetStateCommand(), HandleGameObjectSpawnGroupCommand(), HandleGameObjectTargetCommand(), HandleGameObjectTurnCommand(), rbac::RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, rbac::RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, rbac::RBAC_PERM_COMMAND_GOBJECT_DELETE, rbac::RBAC_PERM_COMMAND_GOBJECT_INFO, rbac::RBAC_PERM_COMMAND_GOBJECT_LOAD, rbac::RBAC_PERM_COMMAND_GOBJECT_MOVE, rbac::RBAC_PERM_COMMAND_GOBJECT_NEAR, rbac::RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, rbac::RBAC_PERM_COMMAND_GOBJECT_SET_STATE, rbac::RBAC_PERM_COMMAND_GOBJECT_TARGET, and rbac::RBAC_PERM_COMMAND_GOBJECT_TURN.

◆ HandleGameObjectActivateCommand()

static bool gobject_commandscript::HandleGameObjectActivateCommand ( ChatHandler handler,
GameObjectSpawnId  guidLow 
)
inlinestatic
73 {
74 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
75 if (!object)
76 {
78 return false;
79 }
80
81 uint32_t const autoCloseTime = object->GetGOInfo()->GetAutoCloseTime() ? 10000u : 0u;
82
83 // Activate
84 object->SetLootState(GO_READY);
85 object->UseDoorOrButton(autoCloseTime, false, handler->GetSession()->GetPlayer());
86
87 handler->PSendSysMessage("Object activated!");
88
89 return true;
90 }
std::uint32_t uint32
Definition Define.h:107
@ GO_READY
Definition GameObject.h:111
@ LANG_COMMAND_OBJNOTFOUND
Definition Language.h:326
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:224
GameObject * GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
Definition Chat.cpp:605
Definition GameObject.h:120
Player * GetPlayer() const
Definition WorldSession.h:454

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 ?
94 {
95 if (!objectId)
96 return false;
97
98 GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(objectId);
99 if (!objectInfo)
100 {
102 return false;
103 }
104
105 if (objectInfo->displayId && !sGameObjectDisplayInfoStore.LookupEntry(objectInfo->displayId))
106 {
107 // report to DB errors log as in loading case
108 LOG_ERROR("sql.sql", "Gameobject (Entry {} GoType: {}) have invalid displayId ({}), not spawned.", *objectId, objectInfo->type, objectInfo->displayId);
110 return false;
111 }
112
113 Player* player = handler->GetSession()->GetPlayer();
114 float x = float(player->GetPositionX());
115 float y = float(player->GetPositionY());
116 float z = float(player->GetPositionZ());
117 float o = float(player->GetOrientation());
118 Map* map = player->GetMap();
119
120 GameObject* object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
122
123 G3D::Quat rotation = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), o);
124 if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, rotation, 0, GO_STATE_READY))
125 {
126 delete object;
127 return false;
128 }
129
130 if (spawnTimeSecs)
131 object->SetRespawnTime(*spawnTimeSecs);
132
133 // fill the gameobject data and save to the db
134 object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn());
135 guidLow = object->GetSpawnId();
136
137 // delete the old object and do a clean load from DB with a fresh new GameObject instance.
138 // this is required to avoid weird behavior and memory leaks
139 delete object;
140
141 object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
142 // this will generate a new guid if the object is in an instance
143 if (!object->LoadGameObjectFromDB(guidLow, map, true))
144 {
145 delete object;
146 return false;
147 }
148
150 sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGameObjectData(guidLow));
151
152 handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, uint32(objectId), objectInfo->name, guidLow, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ());
153 return true;
154 }
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
@ GO_STATE_READY
Definition GameObjectData.h:709
@ LANG_GAMEOBJECT_HAVE_INVALID_DATA
Definition Language.h:398
@ LANG_GAMEOBJECT_NOT_EXIST
Definition Language.h:575
@ LANG_GAMEOBJECT_ADD
Definition Language.h:579
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
#define sObjectMgr
Definition ObjectMgr.h:1723
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:270
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1284
virtual bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true)
Definition GameObject.cpp:1099
Definition Map.h:166
uint8 GetSpawnMode() const
Definition Map.h:269
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:519
uint32 GetId() const
Definition Map.h:232
uint32 LowType
Definition ObjectGuid.h:122
Definition Player.h:1084
uint32 GetPhaseMaskForSpawn() const
Definition Player.cpp:13829
Definition Transport.h:115
Map * GetMap() const
Definition Object.h:625
Definition GameObjectData.h:32
uint32 type
Definition GameObjectData.h:34
uint32 entry
Definition GameObjectData.h:33
std::string name
Definition GameObjectData.h:36
uint32 displayId
Definition GameObjectData.h:35
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
216 {
217 Player* player = handler->GetSession()->GetPlayer();
218 uint64 spawntm(spawntime.value_or(300));
219
220 if (!sObjectMgr->GetGameObjectTemplate(objectId))
221 {
223 return false;
224 }
225
226 float x = player->GetPositionX();
227 float y = player->GetPositionY();
228 float z = player->GetPositionZ();
229 float ang = player->GetOrientation();
230
231 float rot2 = std::sin(ang / 2);
232 float rot3 = cos(ang / 2);
233
234 player->SummonGameObject(objectId, x, y, z, ang, 0, 0, rot2, rot3, spawntm);
235
236 return true;
237 }
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:2407

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
354 {
355 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(spawnId);
356 if (!object)
357 {
359 return false;
360 }
361
362 ObjectGuid ownerGuid = object->GetOwnerGUID();
363 if (ownerGuid)
364 {
365 Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid);
366 if (!owner || !ownerGuid.IsPlayer())
367 {
369 return false;
370 }
371
372 owner->RemoveGameObject(object, false);
373 }
374
375 object->SetRespawnTime(0); // not save respawn time
376 object->Delete();
377 object->DeleteFromDB();
378
380
381 return true;
382 }
@ LANG_COMMAND_DELOBJMESSAGE
Definition Language.h:328
@ LANG_COMMAND_DELOBJREFERCREATURE
Definition Language.h:327
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:664
void RemoveGameObject(GameObject *gameObj, bool del)
Definition Unit.cpp:6583
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().

◆ HandleGameObjectDespawnGroupCommand()

static bool gobject_commandscript::HandleGameObjectDespawnGroupCommand ( ChatHandler handler,
uint32  groupId 
)
inlinestatic
723 {
724 Player* player = handler->GetSession()->GetPlayer();
725 if (!player)
726 return false;
727
728 SpawnGroupTemplateData const* groupData = sObjectMgr->GetSpawnGroupData(groupId);
729 if (!groupData)
730 {
732 return false;
733 }
734
735 if (groupData->flags & SPAWNGROUP_FLAG_SYSTEM)
736 {
737 handler->SendErrorMessage(LANG_SPAWNGROUP_DESPAWN_SYSTEM_ERROR, groupId, groupData->name);
738 return false;
739 }
740
741 if (player->GetMap()->SpawnGroupDespawn(groupId, true))
742 handler->PSendSysMessage(LANG_SPAWNGROUP_DESPAWN_SUCCESS, groupId, groupData->name);
743 else
744 handler->SendErrorMessage(LANG_SPAWNGROUP_DESPAWN_FAILED, groupId, groupData->name);
745
746 return true;
747 }
@ LANG_SPAWNGROUP_DESPAWN_FAILED
Definition Language.h:1463
@ LANG_SPAWNGROUP_DESPAWN_SUCCESS
Definition Language.h:1462
@ LANG_SPAWNGROUP_NOT_FOUND
Definition Language.h:1469
@ LANG_SPAWNGROUP_DESPAWN_SYSTEM_ERROR
Definition Language.h:1461
@ SPAWNGROUP_FLAG_SYSTEM
Definition SpawnData.h:44
bool SpawnGroupDespawn(uint32 groupId, bool deleteRespawnTimes=false)
Definition Map.cpp:2633
Definition SpawnData.h:58
std::string name
Definition SpawnData.h:60
SpawnGroupFlags flags
Definition SpawnData.h:62

References SpawnGroupTemplateData::flags, WorldObject::GetMap(), WorldSession::GetPlayer(), ChatHandler::GetSession(), LANG_SPAWNGROUP_DESPAWN_FAILED, LANG_SPAWNGROUP_DESPAWN_SUCCESS, LANG_SPAWNGROUP_DESPAWN_SYSTEM_ERROR, LANG_SPAWNGROUP_NOT_FOUND, SpawnGroupTemplateData::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sObjectMgr, SPAWNGROUP_FLAG_SYSTEM, and Map::SpawnGroupDespawn().

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
585 {
586 uint32 entry = 0;
587 uint32 type = 0;
588 uint32 displayId = 0;
589 std::string name;
590 uint32 lootId = 0;
591 GameObject* gameObject = nullptr;
592
593 ObjectGuid::LowType spawnId = 0;
594 if (isGuid || data.holds_alternative<Hyperlink<gameobject>>())
595 {
596 spawnId = *data;
597 GameObjectData const* spawnData = sObjectMgr->GetGameObjectData(spawnId);
598 if (!spawnData)
599 {
601 return false;
602 }
603 entry = spawnData->id;
604 gameObject = handler->GetObjectFromPlayerMapByDbGuid(spawnId);
605 }
606 else
607 {
608 entry = *data;
609 }
610
611 GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry);
612 if (!gameObjectInfo)
613 {
615 return false;
616 }
617
618 type = gameObjectInfo->type;
619 displayId = gameObjectInfo->displayId;
620 name = gameObjectInfo->name;
621 if (type == GAMEOBJECT_TYPE_CHEST)
622 lootId = gameObjectInfo->chest.lootId;
623 else if (type == GAMEOBJECT_TYPE_FISHINGHOLE)
624 lootId = gameObjectInfo->fishinghole.lootId;
625
626 handler->PSendSysMessage(LANG_GOINFO_ENTRY, entry);
627 if (gameObject)
628 handler->PSendSysMessage("GUID: {}", gameObject->GetGUID().ToString());
629 handler->PSendSysMessage(LANG_GOINFO_TYPE, type);
630 handler->PSendSysMessage(LANG_GOINFO_LOOTID, lootId);
631 handler->PSendSysMessage(LANG_GOINFO_DISPLAYID, displayId);
632 if (gameObject)
633 {
634 handler->PSendSysMessage("LootMode: {}", gameObject->GetLootMode());
635 handler->PSendSysMessage("LootState: {}", gameObject->getLootState());
636 handler->PSendSysMessage("GOState: {}", gameObject->GetGoState());
637 handler->PSendSysMessage("PhaseMask: {}", gameObject->GetPhaseMask());
638 handler->PSendSysMessage("IsLootEmpty: {}", gameObject->loot.empty());
639 handler->PSendSysMessage("IsLootLooted: {}", gameObject->loot.isLooted());
640 }
641
642 handler->PSendSysMessage(LANG_GOINFO_NAME, name);
643
644 return true;
645 }
@ LANG_GOINFO_NAME
Definition Language.h:1089
@ LANG_GOINFO_DISPLAYID
Definition Language.h:1088
@ LANG_GOINFO_ENTRY
Definition Language.h:1086
@ LANG_GOINFO_LOOTID
Definition Language.h:1090
@ LANG_GOINFO_TYPE
Definition Language.h:1087
@ GAMEOBJECT_TYPE_CHEST
Definition SharedDefines.h:1567
@ GAMEOBJECT_TYPE_FISHINGHOLE
Definition SharedDefines.h:1589
Loot loot
Definition GameObject.h:247
GOState GetGoState() const
Definition GameObject.h:205
LootState getLootState() const
Definition GameObject.h:224
uint16 GetLootMode() const
Definition GameObject.h:228
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
uint32 GetPhaseMask() const
Definition Object.h:516
constexpr bool holds_alternative() const
Definition ChatCommandTags.h:303
Definition GameObjectData.h:715
uint32 id
Definition GameObjectData.h:717
uint32 lootId
Definition GameObjectData.h:85
struct GameObjectTemplate::@235::@256 fishinghole
struct GameObjectTemplate::@235::@240 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
157 {
158 if (!spawnId)
159 return false;
160
161 if (sObjectMgr->GetGameObjectData(spawnId))
162 {
163 handler->SendErrorMessage("Gameobject spawn {} is already loaded.", uint32(spawnId));
164 return false;
165 }
166
167 GameObjectData const* data = sObjectMgr->LoadGameObjectDataFromDB(spawnId);
168 if (!data)
169 {
170 handler->SendErrorMessage("Gameobject spawn {} not found in the database.", uint32(spawnId));
171 return false;
172 }
173
174 if (sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
175 {
176 handler->SendErrorMessage("Gameobject spawn {} is part of a pool and cannot be manually loaded.", uint32(spawnId));
177 return false;
178 }
179
180 QueryResult eventResult = WorldDatabase.Query("SELECT guid FROM game_event_gameobject WHERE guid = {}", uint32(spawnId));
181 if (eventResult)
182 {
183 handler->SendErrorMessage("Gameobject spawn {} is managed by the game event system and cannot be manually loaded.", uint32(spawnId));
184 return false;
185 }
186
187 Map* map = sMapMgr->FindBaseNonInstanceMap(data->mapid);
188 if (!map)
189 {
190 handler->SendErrorMessage("Gameobject spawn {} is on a non-continent map (ID: {}). Only continent maps are supported.", uint32(spawnId), data->mapid);
191 return false;
192 }
193
194 GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(data->id);
195 if (!objectInfo)
196 {
197 handler->SendErrorMessage("Gameobject template not found for entry {}.", data->id);
198 return false;
199 }
200
201 GameObject* object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject();
202 if (!object->LoadGameObjectFromDB(spawnId, map, true))
203 {
204 delete object;
205 handler->SendErrorMessage("Failed to load gameobject spawn {}.", uint32(spawnId));
206 return false;
207 }
208
209 sObjectMgr->AddGameobjectToGrid(spawnId, data);
210 handler->PSendSysMessage("Gameobject spawn {} loaded successfully.", uint32(spawnId));
211 return true;
212 }
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:177
uint16 mapid
Definition SpawnData.h:69

References GameObjectTemplate::entry, GameObjectData::id, GameObject::LoadGameObjectFromDB(), SpawnData::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
424 {
425 if (!guidLow)
426 return false;
427
428 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
429 if (!object)
430 {
432 return false;
433 }
434
435 Position pos;
436 if (xyz)
437 {
438 pos = { (*xyz)[0], (*xyz)[1], (*xyz)[2] };
439 if (!MapMgr::IsValidMapCoord(object->GetMapId(), pos))
440 {
442 return false;
443 }
444 }
445 else
446 {
447 pos = handler->GetSession()->GetPlayer()->GetPosition();
448 }
449
450 Map* map = object->GetMap();
451
452 pos.SetOrientation(object->GetOrientation());
453 object->Relocate(pos);
454
455 // update which cell has this gameobject registered for loading
456 sObjectMgr->RemoveGameobjectFromGrid(guidLow, object->GetGameObjectData());
457 object->SaveToDB();
458 sObjectMgr->AddGameobjectToGrid(guidLow, object->GetGameObjectData());
459
460 // Generate a completely new spawn with new guid
461 // 3.3.5a client caches recently deleted objects and brings them back to life
462 // when CreateObject block for this guid is received again
463 // however it entirely skips parsing that block and only uses already known location
464 object->Delete();
465
466 object = new GameObject();
467 if (!object->LoadGameObjectFromDB(guidLow, map, true))
468 {
469 delete object;
470 return false;
471 }
472
473 handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name, object->GetSpawnId());
474 return true;
475 }
@ LANG_COMMAND_MOVEOBJMESSAGE
Definition Language.h:330
@ LANG_INVALID_TARGET_COORD
Definition Language.h:316
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
502 {
503 float distance = dist.value_or(10.0f);
504 uint32 count = 0;
505
506 Player* player = handler->GetSession()->GetPlayer();
507
508 // Grid search - finds all game objects including temporary spawns
509 std::list<GameObject*> gameobjects;
510 Acore::GameObjectInRangeCheck check(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), distance);
511 Acore::GameObjectListSearcher<Acore::GameObjectInRangeCheck> searcher(player, gameobjects, check);
512 Cell::VisitObjects(player, searcher, distance);
513
514 std::unordered_set<ObjectGuid::LowType> gridSpawnIds;
515
516 for (GameObject* go : gameobjects)
517 {
518 GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(go->GetEntry());
519 if (!gameObjectInfo)
520 continue;
521
522 handler->PSendSysMessage(LANG_GO_LIST_CHAT, go->GetSpawnId(), go->GetEntry(),
523 go->GetSpawnId(), gameObjectInfo->name,
524 go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(),
525 go->GetMapId(), "", "");
526
527 if (go->GetSpawnId())
528 gridSpawnIds.insert(go->GetSpawnId());
529 ++count;
530 }
531
532 if (count > 0 && distance <= SIZE_OF_GRIDS)
533 {
534 handler->PSendSysMessage(LANG_COMMAND_NEAROBJMESSAGE, distance, count);
535 return true;
536 }
537
538 // Fallback to DB query
540 stmt->SetData(0, player->GetPositionX());
541 stmt->SetData(1, player->GetPositionY());
542 stmt->SetData(2, player->GetPositionZ());
543 stmt->SetData(3, player->GetMapId());
544 stmt->SetData(4, player->GetPositionX());
545 stmt->SetData(5, player->GetPositionY());
546 stmt->SetData(6, player->GetPositionZ());
547 stmt->SetData(7, distance * distance);
548 stmt->SetData(8, player->GetPhaseMask());
549 PreparedQueryResult result = WorldDatabase.Query(stmt);
550
551 if (result)
552 {
553 do
554 {
555 Field* fields = result->Fetch();
556 ObjectGuid::LowType guid = fields[0].Get<uint32>();
557
558 // Skip entries already emitted via grid search
559 if (gridSpawnIds.count(guid))
560 continue;
561
562 uint32 entry = fields[1].Get<uint32>();
563 float x = fields[2].Get<float>();
564 float y = fields[3].Get<float>();
565 float z = fields[4].Get<float>();
566 uint16 mapId = fields[5].Get<uint16>();
567
568 GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry);
569
570 if (!gameObjectInfo)
571 continue;
572
573 handler->PSendSysMessage(LANG_GO_LIST_CHAT, guid, entry, guid, gameObjectInfo->name, x, y, z, mapId, "", "");
574
575 ++count;
576 } while (result->NextRow());
577 }
578
579 handler->PSendSysMessage(LANG_COMMAND_NEAROBJMESSAGE, distance, count);
580 return true;
581 }
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
std::uint16_t uint16
Definition Define.h:108
@ LANG_GO_LIST_CHAT
Definition Language.h:569
@ LANG_COMMAND_NEAROBJMESSAGE
Definition Language.h:649
#define SIZE_OF_GRIDS
Definition MapDefines.h:26
@ WORLD_SEL_GAMEOBJECT_NEAREST
Definition WorldDatabase.h:89
Definition GridNotifiers.h:1600
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
Definition GridNotifiers.h:341
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

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

Referenced by GetCommands().

◆ HandleGameObjectRespawn()

static bool gobject_commandscript::HandleGameObjectRespawn ( ChatHandler handler,
GameObjectSpawnId  guidLow 
)
inlinestatic
682 {
683 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
684 if (!object)
685 {
687 return false;
688 }
689
690 object->Respawn();
691 handler->PSendSysMessage(LANG_CMD_GO_RESPAWN, object->GetNameForLocaleIdx(handler->GetSessionDbcLocale()), object->GetEntry(), object->GetSpawnId());
692 return true;
693 }
@ LANG_CMD_GO_RESPAWN
Definition Language.h:1161
virtual LocaleConstant GetSessionDbcLocale() const
Definition Chat.cpp:878
std::string const & GetNameForLocaleIdx(LocaleConstant locale_idx) const override
Definition GameObject.cpp:2224
uint32 GetEntry() const
Definition Object.h:117

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
479 {
480 if (!guidLow)
481 return false;
482
483 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
484 if (!object)
485 {
487 return false;
488 }
489
490 if (!phaseMask)
491 {
493 return false;
494 }
495
496 object->SetPhaseMask(phaseMask, true);
497 object->SaveToDB();
498 return true;
499 }
@ LANG_BAD_VALUE
Definition Language.h:151

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
648 {
649 if (!guidLow)
650 return false;
651
652 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
653 if (!object)
654 {
656 return false;
657 }
658
659 if (objectType < 0)
660 {
661 if (objectType == -1)
662 object->SendObjectDeSpawnAnim(object->GetGUID());
663 else if (objectType == -2)
664 return false;
665 return true;
666 }
667
668 if (!objectState)
669 return false;
670
671 if (objectType < 4)
672 object->SetByteValue(GAMEOBJECT_BYTES_1, objectType, *objectState);
673 else if (objectType == 4)
674 {
675 object->SendCustomAnim(*objectState);
676 }
677 handler->PSendSysMessage("Set gobject type {} state {}", objectType, *objectState);
678 return true;
679 }
@ 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().

◆ HandleGameObjectSpawnGroupCommand()

static bool gobject_commandscript::HandleGameObjectSpawnGroupCommand ( ChatHandler handler,
uint32  groupId 
)
inlinestatic
696 {
697 Player* player = handler->GetSession()->GetPlayer();
698 if (!player)
699 return false;
700
701 SpawnGroupTemplateData const* groupData = sObjectMgr->GetSpawnGroupData(groupId);
702 if (!groupData)
703 {
705 return false;
706 }
707
708 if (groupData->flags & SPAWNGROUP_FLAG_SYSTEM)
709 {
710 handler->SendErrorMessage(LANG_SPAWNGROUP_SPAWN_SYSTEM_ERROR, groupId, groupData->name);
711 return false;
712 }
713
714 if (player->GetMap()->SpawnGroupSpawn(groupId, true, true))
715 handler->PSendSysMessage(LANG_SPAWNGROUP_SPAWN_SUCCESS, groupId, groupData->name);
716 else
717 handler->SendErrorMessage(LANG_SPAWNGROUP_SPAWN_FAILED, groupId, groupData->name);
718
719 return true;
720 }
@ LANG_SPAWNGROUP_SPAWN_SYSTEM_ERROR
Definition Language.h:1458
@ LANG_SPAWNGROUP_SPAWN_FAILED
Definition Language.h:1460
@ LANG_SPAWNGROUP_SPAWN_SUCCESS
Definition Language.h:1459
bool SpawnGroupSpawn(uint32 groupId, bool ignoreRespawn=false, bool force=false)
Definition Map.cpp:2549

References SpawnGroupTemplateData::flags, WorldObject::GetMap(), WorldSession::GetPlayer(), ChatHandler::GetSession(), LANG_SPAWNGROUP_NOT_FOUND, LANG_SPAWNGROUP_SPAWN_FAILED, LANG_SPAWNGROUP_SPAWN_SUCCESS, LANG_SPAWNGROUP_SPAWN_SYSTEM_ERROR, SpawnGroupTemplateData::name, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), sObjectMgr, SPAWNGROUP_FLAG_SYSTEM, and Map::SpawnGroupSpawn().

Referenced by GetCommands().

◆ HandleGameObjectTargetCommand()

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

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
386 {
387 if (!guidLow)
388 return false;
389
390 GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow);
391 if (!object)
392 {
394 return false;
395 }
396
397 if (!oz)
398 oz = handler->GetSession()->GetPlayer()->GetOrientation();
399
400 Map* map = object->GetMap();
401 object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), *oz);
402 object->SetWorldRotationAngles(*oz, oy.value_or(0.0f), ox.value_or(0.0f));
403 object->SaveToDB();
404
405 // Generate a completely new spawn with new guid
406 // 3.3.5a client caches recently deleted objects and brings them back to life
407 // when CreateObject block for this guid is received again
408 // however it entirely skips parsing that block and only uses already known location
409 object->Delete();
410
411 object = new GameObject();
412 if (!object->LoadGameObjectFromDB(guidLow, map, true))
413 {
414 delete object;
415 return false;
416 }
417
418 handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name, object->GetSpawnId());
419 return true;
420 }
@ LANG_COMMAND_TURNOBJMESSAGE
Definition Language.h:329

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: