78 {
"gobject", gobjectCommandTable },
93 uint32_t
const autoCloseTime =
object->GetGOInfo()->GetAutoCloseTime() ? 10000u : 0u;
121 TC_LOG_ERROR(
"sql.sql",
"Gameobject (Entry {} GoType: {}) have invalid displayId ({}), not spawned.", *objectId, objectInfo->
type, objectInfo->
displayId);
145 guidLow =
object->GetSpawnId();
170 Seconds spawntm(spawntime.value_or(300));
174 if (!
sObjectMgr->GetGameObjectTemplate(objectId))
196 result =
WorldDatabase.PQuery(
"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",
201 std::string name = std::string(objectId->get<std::string_view>());
204 "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_ "
205 "FROM gameobject LEFT JOIN gameobject_template ON gameobject_template.entry = gameobject.id WHERE map = {} AND name LIKE '%{}%' ORDER BY order_ ASC LIMIT 1",
211 std::ostringstream eventFilter;
212 eventFilter <<
" AND (eventEntry IS NULL ";
213 bool initString =
true;
215 for (GameEventMgr::ActiveEvents::const_iterator itr = activeEventsList.begin(); itr != activeEventsList.end(); ++itr)
219 eventFilter <<
"OR eventEntry IN (" << *itr;
223 eventFilter <<
',' << *itr;
231 result =
WorldDatabase.PQuery(
"SELECT gameobject.guid, id, position_x, position_y, position_z, orientation, map, phaseMask, "
232 "(POW(position_x - {}, 2) + POW(position_y - {}, 2) + POW(position_z - {}, 2)) AS order_ FROM gameobject "
233 "LEFT OUTER JOIN game_event_gameobject on gameobject.guid = game_event_gameobject.guid WHERE map = '{}' {} ORDER BY order_ ASC LIMIT 10",
253 Field* fields = result->Fetch();
265 }
while (result->NextRow() && !found);
283 handler->
PSendSysMessage(
LANG_GAMEOBJECT_DETAIL, guidLow, objectInfo->
name.c_str(), guidLow, id, x, y, z, mapId, o, phase);
288 if (curRespawnDelay < 0)
305 if (
ObjectGuid ownerGuid = object->GetOwnerGUID())
308 if (!owner || !ownerGuid.
IsPlayer())
348 Map* map =
object->GetMap();
350 object->SetLocalRotationAngles(*oz, oy.value_or(0.0f), ox.value_or(0.0f));
387 pos = { (*xyz)[0], (*xyz)[1], (*xyz)[2] };
400 Map* map =
object->GetMap();
403 object->Relocate(pos);
448 object->SetPhaseMask(phaseMask,
true);
455 float distance = dist.value_or(10.0f);
468 stmt->
setFloat(7, distance * distance);
475 Field* fields = result->Fetch();
488 handler->
PSendSysMessage(
LANG_GO_LIST_CHAT, guid, entry, guid, gameObjectInfo->
name.c_str(), x, y, z, mapId,
"",
"");
491 }
while (result->NextRow());
514 spawnData =
sObjectMgr->GetGameObjectData(spawnId);
521 entry = spawnData->
id;
537 type = gameObjectInfo->
type;
539 name = gameObjectInfo->
name;
559 goOverride =
sObjectMgr->GetGameObjectTemplateAddon(entry);
566 float yaw, pitch, roll;
583 handler->
PSendSysMessage(
LANG_GOINFO_MODEL, modelInfo->GeoBoxMax.X, modelInfo->GeoBoxMax.Y, modelInfo->GeoBoxMax.Z, modelInfo->GeoBoxMin.X, modelInfo->GeoBoxMin.Y, modelInfo->GeoBoxMin.Z);
603 if (objectType == -1)
604 object->SendObjectDeSpawnAnim(object->
GetGUID());
605 else if (objectType == -2)
616 object->SetGoState(
GOState(*objectState));
622 object->SetGoArtKit(*objectState);
625 object->SetGoAnimProgress(*objectState);
628 object->SendCustomAnim(*objectState);
639 handler->
PSendSysMessage(
"Set gobject type %d state %u", objectType, *objectState);
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
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.
@ 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.
@ GAMEOBJECT_TYPE_FISHINGHOLE
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
bool LoadFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap, bool=true)
GameObjectAI * AI() const
void SetRespawnTime(int32 respawn)
GameObjectData const * GetGameObjectData() const
ObjectGuid::LowType GetSpawnId() const
time_t GetRespawnTimeEx() const
bool GetRespawnCompatibilityMode()
static bool DeleteFromDB(ObjectGuid::LowType spawnId)
bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, Position const &pos, QuaternionData const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0, bool dynamic=false, ObjectGuid::LowType spawnid=0)
static bool IsValidMapCoord(uint32 mapid, float x, float y)
uint8 GetSpawnMode() const
ObjectGuid::LowType GenerateLowGuid()
bool IsSpawnGroupActive(uint32 groupId) const
std::string ToString() const
static ObjectGuid GetGUID(Object const *o)
uint32 GetPhaseMaskForSpawn() const
void setUInt32(uint8 index, uint32 value)
void setFloat(uint8 index, float value)
void RemoveGameObject(GameObject *gameObj, bool del)
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 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)
static bool HandleGameObjectSetPhaseCommand(ChatHandler *handler, GameObjectSpawnId guidLow, uint32 phaseMask)
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::@189::@194 chest
struct GameObjectTemplate::@189::@211 fishinghole
float GetPositionZ() const
float GetOrientation() const
void SetOrientation(float orientation)
float GetPositionX() const
void GetPosition(float &x, float &y) const
float GetPositionY() const
void toEulerAnglesZYX(float &Z, float &Y, float &X) const
static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X)