81 {
"gobject", gobjectCommandTable },
96 uint32_t
const autoCloseTime =
object->GetGOInfo()->GetAutoCloseTime() ? 10000u : 0u;
124 TC_LOG_ERROR(
"sql.sql",
"Gameobject (Entry {} GoType: {}) have invalid displayId ({}), not spawned.", *objectId, objectInfo->
type, objectInfo->
displayId);
140 object->SetRespawnTime(*spawnTimeSecs);
143 object->SaveToDB(map->
GetId(), { map->GetDifficultyID() });
166 Seconds spawntm(spawntime.value_or(300));
168 if (!
sObjectMgr->GetGameObjectTemplate(objectId))
190 result =
WorldDatabase.PQuery(
"SELECT guid, id, position_x, position_y, position_z, orientation, map, PhaseId, PhaseGroup, (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",
195 std::string name = std::string(objectId->get<std::string_view>());
198 "SELECT guid, id, position_x, position_y, position_z, orientation, map, PhaseId, PhaseGroup, (POW(position_x - {}, 2) + POW(position_y - {}, 2) + POW(position_z - {}, 2)) AS order_ "
199 "FROM gameobject LEFT JOIN gameobject_template ON gameobject_template.entry = gameobject.id WHERE map = {} AND name LIKE '%{}%' ORDER BY order_ ASC LIMIT 1",
205 std::ostringstream eventFilter;
206 eventFilter <<
" AND (eventEntry IS NULL ";
207 bool initString =
true;
209 for (GameEventMgr::ActiveEvents::const_iterator itr = activeEventsList.begin(); itr != activeEventsList.end(); ++itr)
213 eventFilter <<
"OR eventEntry IN (" << *itr;
217 eventFilter <<
',' << *itr;
225 result =
WorldDatabase.PQuery(
"SELECT gameobject.guid, id, position_x, position_y, position_z, orientation, map, PhaseId, PhaseGroup, "
226 "(POW(position_x - {}, 2) + POW(position_y - {}, 2) + POW(position_z - {}, 2)) AS order_ FROM gameobject "
227 "LEFT OUTER JOIN game_event_gameobject on gameobject.guid = game_event_gameobject.guid WHERE map = '{}' {} ORDER BY order_ ASC LIMIT 10",
241 uint32 id, phaseId, phaseGroup;
247 Field* fields = result->Fetch();
260 }
while (result->NextRow() && !found);
278 handler->
PSendSysMessage(
LANG_GAMEOBJECT_DETAIL, std::to_string(guidLow).c_str(), objectInfo->
name.c_str(), std::to_string(guidLow).c_str(), id, x, y, z, mapId, o, phaseId, phaseGroup);
283 if (curRespawnDelay < 0)
300 ObjectGuid ownerGuid =
object->GetOwnerGUID();
304 if (!owner || !ownerGuid.
IsPlayer())
344 Map* map =
object->GetMap();
346 object->SetLocalRotationAngles(*oz, oy.value_or(0.0f), ox.value_or(0.0f));
380 pos = { (*xyz)[0], (*xyz)[1], (*xyz)[2] };
393 Map* map =
object->GetMap();
396 object->Relocate(pos);
445 float distance = dist.value_or(10.0f);
458 stmt->
setFloat(7, distance * distance);
465 Field* fields = result->Fetch();
478 handler->
PSendSysMessage(
LANG_GO_LIST_CHAT, std::to_string(guid).c_str(), entry, std::to_string(guid).c_str(), gameObjectInfo->
name.c_str(), x, y, z, mapId,
"",
"");
481 }
while (result->NextRow());
504 spawnData =
sObjectMgr->GetGameObjectData(spawnId);
511 entry = spawnData->
id;
527 type = gameObjectInfo->
type;
529 name = gameObjectInfo->
name;
548 goOverride =
sObjectMgr->GetGameObjectTemplateAddon(entry);
555 float yaw, pitch, roll;
572 handler->
PSendSysMessage(
LANG_GOINFO_MODEL, modelInfo->GeoBoxMax.X, modelInfo->GeoBoxMax.Y, modelInfo->GeoBoxMax.Z, modelInfo->GeoBoxMin.X, modelInfo->GeoBoxMin.Y, modelInfo->GeoBoxMin.Z);
592 if (objectType == -1)
593 object->SendGameObjectDespawn();
594 else if (objectType == -2)
605 object->SetGoState(
GOState(*objectState));
611 object->SetGoArtKit(*objectState);
614 object->SetGoAnimProgress(*objectState);
617 object->SendCustomAnim(*objectState);
628 handler->
PSendSysMessage(
"Set gobject type %d state %u", objectType, *objectState);
DB2Storage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", &GameobjectDisplayInfoLoadInfo::Instance)
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define ASSERT_NOTNULL(pointer)
@ LANG_COMMAND_DELOBJMESSAGE
@ LANG_COMMAND_TURNOBJMESSAGE
@ LANG_COMMAND_OBJNOTFOUND
@ LANG_GAMEOBJECT_HAVE_INVALID_DATA
@ LANG_COMMAND_MOVEOBJMESSAGE
@ LANG_GAMEOBJECT_NOT_EXIST
@ LANG_COMMAND_TARGETOBJNOTFOUND
@ LANG_COMMAND_NEAROBJMESSAGE
@ LANG_SPAWNINFO_SPAWNID_LOCATION
@ LANG_INVALID_TARGET_COORD
@ LANG_SPAWNINFO_GROUP_ID
@ LANG_SPAWNINFO_ROTATION
@ LANG_SPAWNINFO_COMPATIBILITY_MODE
@ LANG_SPAWNINFO_GUIDINFO
@ LANG_COMMAND_RAWPAWNTIMES
@ LANG_COMMAND_DELOBJREFERCREATURE
#define TC_LOG_ERROR(filterType__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
Role Based Access Control related classes definition.
GameObjectDestructibleState
@ GO_DESTRUCTIBLE_REBUILDING
std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly)
@ WORLD_SEL_GAMEOBJECT_NEAREST
WorldSession * GetSession()
void PSendSysMessage(const char *fmt, Args &&... args)
GameObject * GetObjectFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
void SetSentErrorMessage(bool val)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Class used to access individual fields of database query result.
std::set< uint16 > ActiveEvents
uint32 GetRespawnDelay() const
GameObjectTemplate const * GetGOInfo() const
static GameObject * CreateGameObject(uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit=0)
static GameObject * CreateGameObjectFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap=true)
GameObjectAI * AI() const
GameObjectData const * GetGameObjectData() const
ObjectGuid::LowType GetSpawnId() const
time_t GetRespawnTimeEx() const
bool GetRespawnCompatibilityMode()
static bool DeleteFromDB(ObjectGuid::LowType spawnId)
static bool IsValidMapCoord(uint32 mapid, float x, float y)
bool IsSpawnGroupActive(uint32 groupId) const
SpawnedPoolData & GetPoolData()
LowType GetCounter() const
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
static void AddPhase(WorldObject *object, uint32 phaseId, bool updateVisibility)
static void InheritPhaseShift(WorldObject *target, WorldObject const *source)
void setFloat(const uint8 index, const float value)
void setUInt32(const uint8 index, const uint32 value)
void RemoveGameObject(GameObject *gameObj, bool del)
constexpr uint32 GetMapId() const
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Player * GetPlayer() const
static bool HandleGameObjectDeleteCommand(ChatHandler *handler, GameObjectSpawnId spawnId)
static bool HandleGameObjectTargetCommand(ChatHandler *handler, Optional< Variant< GameObjectEntry, std::string_view > > objectId)
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 HandleGameObjectSetPhaseCommand(ChatHandler *handler, GameObjectSpawnId guidLow, uint32 phaseId)
static bool HandleGameObjectAddCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< int32 > spawnTimeSecs)
static bool HandleGameObjectActivateCommand(ChatHandler *handler, GameObjectSpawnId guidLow)
static bool HandleGameObjectAddTempCommand(ChatHandler *handler, GameObjectEntry objectId, Optional< uint64 > spawntime)
static bool HandleGameObjectMoveCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< std::array< float, 3 > > xyz)
ChatCommandTable GetCommands() const override
static bool HandleGameObjectTurnCommand(ChatHandler *handler, GameObjectSpawnId guidLow, Optional< float > oz, Optional< float > oy, Optional< float > ox)
static bool HandleGameObjectSetStateCommand(ChatHandler *handler, GameObjectSpawnId guidLow, int32 objectType, Optional< uint32 > objectState)
void AddSC_gobject_commandscript()
bool HandleNpcSpawnGroup(ChatHandler *handler, std::vector< Variant< uint32, EXACT_SEQUENCE("force"), EXACT_SEQUENCE("ignorerespawn")> > const &opts)
bool HandleNpcDespawnGroup(ChatHandler *handler, std::vector< Variant< uint32, EXACT_SEQUENCE("removerespawntime")> > const &opts)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
std::vector< ChatCommandBuilder > ChatCommandTable
std::string GetTypeName()
@ RBAC_PERM_COMMAND_GOBJECT_ADD
@ RBAC_PERM_COMMAND_GOBJECT_SET_PHASE
@ RBAC_PERM_COMMAND_GOBJECT_SET_STATE
@ RBAC_PERM_COMMAND_GOBJECT_DESPAWNGROUP
@ RBAC_PERM_COMMAND_GOBJECT_DELETE
@ RBAC_PERM_COMMAND_GOBJECT_INFO
@ RBAC_PERM_COMMAND_GOBJECT_ACTIVATE
@ RBAC_PERM_COMMAND_GOBJECT_TARGET
@ RBAC_PERM_COMMAND_GOBJECT_NEAR
@ RBAC_PERM_COMMAND_GOBJECT_MOVE
@ RBAC_PERM_COMMAND_GOBJECT_TURN
@ RBAC_PERM_COMMAND_GOBJECT_SPAWNGROUP
@ RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP
struct GameObjectTemplate::@213::@218 chest
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
void toEulerAnglesZYX(float &Z, float &Y, float &X) const
static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X)