diff options
author | Yehonal <yehonal.azeroth@gmail.com> | 2017-12-20 20:48:35 +0100 |
---|---|---|
committer | Yehonal <yehonal.azeroth@gmail.com> | 2017-12-21 00:20:29 +0100 |
commit | 17332304fdf129076d0196010602350d5750c808 (patch) | |
tree | d161f8845df9e5c8ec0b149bd846646c2b112d49 /src/scripts/Commands/cs_gobject.cpp | |
parent | 0fc4a6a153ca3a09ccb6e1311131b12a59c6cba3 (diff) |
Using TC structure allowing easier patches importing
Diffstat (limited to 'src/scripts/Commands/cs_gobject.cpp')
-rw-r--r-- | src/scripts/Commands/cs_gobject.cpp | 705 |
1 files changed, 0 insertions, 705 deletions
diff --git a/src/scripts/Commands/cs_gobject.cpp b/src/scripts/Commands/cs_gobject.cpp deleted file mode 100644 index cdfc508d85..0000000000 --- a/src/scripts/Commands/cs_gobject.cpp +++ /dev/null @@ -1,705 +0,0 @@ -/* - * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: http://github.com/azerothcore/azerothcore-wotlk/LICENSE-GPL2 - * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - */ - -/* ScriptData -Name: gobject_commandscript -%Complete: 100 -Comment: All gobject related commands -Category: commandscripts -EndScriptData */ - -#include "ScriptMgr.h" -#include "GameEventMgr.h" -#include "ObjectMgr.h" -#include "PoolMgr.h" -#include "MapManager.h" -#include "Chat.h" -#include "Language.h" -#include "Player.h" -#include "Opcodes.h" -#include "Transport.h" -#include "GameObject.h" - -class gobject_commandscript : public CommandScript -{ -public: - gobject_commandscript() : CommandScript("gobject_commandscript") { } - - std::vector<ChatCommand> GetCommands() const override - { - static std::vector<ChatCommand> gobjectAddCommandTable = - { - { "temp", SEC_GAMEMASTER, false, &HandleGameObjectAddTempCommand, "" }, - { "", SEC_ADMINISTRATOR, false, &HandleGameObjectAddCommand, "" } - }; - static std::vector<ChatCommand> gobjectSetCommandTable = - { - { "phase", SEC_ADMINISTRATOR, false, &HandleGameObjectSetPhaseCommand, "" }, - { "state", SEC_ADMINISTRATOR, false, &HandleGameObjectSetStateCommand, "" } - }; - static std::vector<ChatCommand> gobjectCommandTable = - { - { "activate", SEC_ADMINISTRATOR, false, &HandleGameObjectActivateCommand, "" }, - { "delete", SEC_ADMINISTRATOR, false, &HandleGameObjectDeleteCommand, "" }, - { "info", SEC_MODERATOR, false, &HandleGameObjectInfoCommand, "" }, - { "move", SEC_ADMINISTRATOR, false, &HandleGameObjectMoveCommand, "" }, - { "near", SEC_MODERATOR, false, &HandleGameObjectNearCommand, "" }, - { "target", SEC_MODERATOR, false, &HandleGameObjectTargetCommand, "" }, - { "turn", SEC_ADMINISTRATOR, false, &HandleGameObjectTurnCommand, "" }, - { "add", SEC_ADMINISTRATOR, false, nullptr, "", gobjectAddCommandTable }, - { "set", SEC_ADMINISTRATOR, false, nullptr, "", gobjectSetCommandTable } - }; - static std::vector<ChatCommand> commandTable = - { - { "gobject", SEC_MODERATOR, false, nullptr, "", gobjectCommandTable } - }; - return commandTable; - } - - static bool HandleGameObjectActivateCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - uint32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - // by DB guid - if (GameObjectData const* goData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, goData->id); - - if (!object) - { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); - handler->SetSentErrorMessage(true); - return false; - } - - // Activate - object->SetLootState(GO_READY); - object->UseDoorOrButton(10000, false, handler->GetSession()->GetPlayer()); - - handler->PSendSysMessage("Object activated!"); - - return true; - } - - //spawn go - static bool HandleGameObjectAddCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject_entry"); - if (!id) - return false; - - uint32 objectId = atol(id); - if (!objectId) - return false; - - char* spawntimeSecs = strtok(nullptr, " "); - - const GameObjectTemplate* objectInfo = sObjectMgr->GetGameObjectTemplate(objectId); - - if (!objectInfo) - { - handler->PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST, objectId); - handler->SetSentErrorMessage(true); - return false; - } - - if (objectInfo->displayId && !sGameObjectDisplayInfoStore.LookupEntry(objectInfo->displayId)) - { - // report to DB errors log as in loading case - sLog->outErrorDb("Gameobject (Entry %u GoType: %u) have invalid displayId (%u), not spawned.", objectId, objectInfo->type, objectInfo->displayId); - handler->PSendSysMessage(LANG_GAMEOBJECT_HAVE_INVALID_DATA, objectId); - handler->SetSentErrorMessage(true); - return false; - } - - Player* player = handler->GetSession()->GetPlayer(); - float x = float(player->GetPositionX()); - float y = float(player->GetPositionY()); - float z = float(player->GetPositionZ()); - float o = float(player->GetOrientation()); - Map* map = player->GetMap(); - - GameObject* object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject(); - uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); - - if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, G3D::Quat(), 0, GO_STATE_READY)) - { - delete object; - return false; - } - - if (spawntimeSecs) - { - uint32 value = atoi((char*)spawntimeSecs); - object->SetRespawnTime(value); - } - - // fill the gameobject data and save to the db - object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn()); - // delete the old object and do a clean load from DB with a fresh new GameObject instance. - // this is required to avoid weird behavior and memory leaks - delete object; - - object = sObjectMgr->IsGameObjectStaticTransport(objectInfo->entry) ? new StaticTransport() : new GameObject(); - // this will generate a new guid if the object is in an instance - if (!object->LoadGameObjectFromDB(guidLow, map)) - { - delete object; - return false; - } - - // TODO: is it really necessary to add both the real and DB table guid here ? - sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGOData(guidLow)); - - handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, objectId, objectInfo->name.c_str(), guidLow, x, y, z); - return true; - } - - // add go, temp only - static bool HandleGameObjectAddTempCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* id = strtok((char*)args, " "); - if (!id) - return false; - - Player* player = handler->GetSession()->GetPlayer(); - - char* spawntime = strtok(nullptr, " "); - uint32 spawntm = 300; - - if (spawntime) - spawntm = atoi((char*)spawntime); - - float x = player->GetPositionX(); - float y = player->GetPositionY(); - float z = player->GetPositionZ(); - float ang = player->GetOrientation(); - - float rot2 = sin(ang/2); - float rot3 = cos(ang/2); - - uint32 objectId = atoi(id); - - player->SummonGameObject(objectId, x, y, z, ang, 0, 0, rot2, rot3, spawntm); - - return true; - } - - static bool HandleGameObjectTargetCommand(ChatHandler* handler, char const* args) - { - Player* player = handler->GetSession()->GetPlayer(); - QueryResult result; - GameEventMgr::ActiveEvents const& activeEventsList = sGameEventMgr->GetActiveEventList(); - - if (*args) - { - // number or [name] Shift-click form |color|Hgameobject_entry:go_id|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject_entry"); - if (!id) - return false; - - uint32 objectId = atol(id); - - if (objectId) - result = WorldDatabase.PQuery("SELECT guid, id, position_x, position_y, position_z, orientation, map, phaseMask, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE map = '%i' AND id = '%u' ORDER BY order_ ASC LIMIT 1", - player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), objectId); - else - { - std::string name = id; - WorldDatabase.EscapeString(name); - result = WorldDatabase.PQuery( - "SELECT guid, id, position_x, position_y, position_z, orientation, map, phaseMask, (POW(position_x - %f, 2) + POW(position_y - %f, 2) + POW(position_z - %f, 2)) AS order_ " - "FROM gameobject, gameobject_template WHERE gameobject_template.entry = gameobject.id AND map = %i AND name " _LIKE_ " " _CONCAT3_("'%%'", "'%s'", "'%%'") " ORDER BY order_ ASC LIMIT 1", - player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), name.c_str()); - } - } - else - { - std::ostringstream eventFilter; - eventFilter << " AND (eventEntry IS NULL "; - bool initString = true; - - for (GameEventMgr::ActiveEvents::const_iterator itr = activeEventsList.begin(); itr != activeEventsList.end(); ++itr) - { - if (initString) - { - eventFilter << "OR eventEntry IN (" << *itr; - initString = false; - } - else - eventFilter << ',' << *itr; - } - - if (!initString) - eventFilter << "))"; - else - eventFilter << ')'; - - result = WorldDatabase.PQuery("SELECT gameobject.guid, id, position_x, position_y, position_z, orientation, map, phaseMask, " - "(POW(position_x - %f, 2) + POW(position_y - %f, 2) + POW(position_z - %f, 2)) AS order_ FROM gameobject " - "LEFT OUTER JOIN game_event_gameobject on gameobject.guid = game_event_gameobject.guid WHERE map = '%i' %s ORDER BY order_ ASC LIMIT 10", - handler->GetSession()->GetPlayer()->GetPositionX(), handler->GetSession()->GetPlayer()->GetPositionY(), handler->GetSession()->GetPlayer()->GetPositionZ(), - handler->GetSession()->GetPlayer()->GetMapId(), eventFilter.str().c_str()); - } - - if (!result) - { - handler->SendSysMessage(LANG_COMMAND_TARGETOBJNOTFOUND); - return true; - } - - bool found = false; - float x, y, z, o; - uint32 guidLow, id, phase; - uint16 mapId; - uint32 poolId; - - do - { - Field* fields = result->Fetch(); - guidLow = fields[0].GetUInt32(); - id = fields[1].GetUInt32(); - x = fields[2].GetFloat(); - y = fields[3].GetFloat(); - z = fields[4].GetFloat(); - o = fields[5].GetFloat(); - mapId = fields[6].GetUInt16(); - phase = fields[7].GetUInt32(); - poolId = sPoolMgr->IsPartOfAPool<GameObject>(guidLow); - if (!poolId || sPoolMgr->IsSpawnedObject<GameObject>(guidLow)) - found = true; - } while (result->NextRow() && !found); - - if (!found) - { - handler->PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST, id); - return false; - } - - GameObjectTemplate const* objectInfo = sObjectMgr->GetGameObjectTemplate(id); - - if (!objectInfo) - { - handler->PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST, id); - return false; - } - - GameObject* target = handler->GetSession()->GetPlayer()->GetMap()->GetGameObject(MAKE_NEW_GUID(guidLow, id, HIGHGUID_GAMEOBJECT)); - - handler->PSendSysMessage(LANG_GAMEOBJECT_DETAIL, guidLow, objectInfo->name.c_str(), guidLow, id, x, y, z, mapId, o, phase); - - if (target) - { - int32 curRespawnDelay = int32(target->GetRespawnTimeEx() - time(nullptr)); - if (curRespawnDelay < 0) - curRespawnDelay = 0; - - std::string curRespawnDelayStr = secsToTimeString(curRespawnDelay, true); - std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true); - - handler->PSendSysMessage(LANG_COMMAND_RAWPAWNTIMES, defRespawnDelayStr.c_str(), curRespawnDelayStr.c_str()); - } - return true; - } - - //delete object by selection or guid - static bool HandleGameObjectDeleteCommand(ChatHandler* handler, char const* args) - { - // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - uint32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - // by DB guid - if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); - - if (!object) - { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); - handler->SetSentErrorMessage(true); - return false; - } - - uint64 ownerGuid = object->GetOwnerGUID(); - if (ownerGuid) - { - Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid); - if (!owner || !IS_PLAYER_GUID(ownerGuid)) - { - handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, GUID_LOPART(ownerGuid), object->GetGUIDLow()); - handler->SetSentErrorMessage(true); - return false; - } - - owner->RemoveGameObject(object, false); - } - - object->SetRespawnTime(0); // not save respawn time - object->Delete(); - object->DeleteFromDB(); - - handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUIDLow()); - - return true; - } - - //turn selected object - static bool HandleGameObjectTurnCommand(ChatHandler* handler, char const* args) - { - // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - uint32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - // by DB guid - if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); - - if (!object) - { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); - handler->SetSentErrorMessage(true); - return false; - } - - char* orientation = strtok(nullptr, " "); - float oz = 0.f, oy = 0.f, ox = 0.f; - - if (orientation) - { - oz = float(atof(orientation)); - orientation = strtok(nullptr, " "); - if (orientation) - { - oy = float(atof(orientation)); - orientation = strtok(nullptr, " "); - if (orientation) - ox = float(atof(orientation)); - } - } - else - { - Player* player = handler->GetSession()->GetPlayer(); - oz = player->GetOrientation(); - } - - object->SetWorldRotationAngles(oz, oy, ox); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); - - object->SaveToDB(); - object->Refresh(); - - handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow(), oz, oy, ox); - - return true; - } - - //move selected object - static bool HandleGameObjectMoveCommand(ChatHandler* handler, char const* args) - { - // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - uint32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - // by DB guid - if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); - - if (!object) - { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); - handler->SetSentErrorMessage(true); - return false; - } - - char* toX = strtok(nullptr, " "); - char* toY = strtok(nullptr, " "); - char* toZ = strtok(nullptr, " "); - - if (!toX) - { - Player* player = handler->GetSession()->GetPlayer(); - object->GetMap()->GameObjectRelocation(object, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), object->GetOrientation()); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); - } - else - { - if (!toY || !toZ) - return false; - - float x = (float)atof(toX); - float y = (float)atof(toY); - float z = (float)atof(toZ); - - if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z)) - { - handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, object->GetMapId()); - handler->SetSentErrorMessage(true); - return false; - } - - object->GetMap()->GameObjectRelocation(object, x, y, z, object->GetOrientation()); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); - } - - object->SaveToDB(); - object->Refresh(); - - handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow()); - - return true; - } - - //set phasemask for selected object - static bool HandleGameObjectSetPhaseCommand(ChatHandler* handler, char const* args) - { - // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - uint32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - // by DB guid - if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); - - if (!object) - { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); - handler->SetSentErrorMessage(true); - return false; - } - - char* phase = strtok (nullptr, " "); - uint32 phaseMask = phase ? atoi(phase) : 0; - if (phaseMask == 0) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - - object->SetPhaseMask(phaseMask, true); - object->SaveToDB(); - return true; - } - - static bool HandleGameObjectNearCommand(ChatHandler* handler, char const* args) - { - float distance = (!*args) ? 10.0f : (float)(atof(args)); - uint32 count = 0; - - Player* player = handler->GetSession()->GetPlayer(); - - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_GAMEOBJECT_NEAREST); - stmt->setFloat(0, player->GetPositionX()); - stmt->setFloat(1, player->GetPositionY()); - stmt->setFloat(2, player->GetPositionZ()); - stmt->setUInt32(3, player->GetMapId()); - stmt->setFloat(4, player->GetPositionX()); - stmt->setFloat(5, player->GetPositionY()); - stmt->setFloat(6, player->GetPositionZ()); - stmt->setFloat(7, distance * distance); - PreparedQueryResult result = WorldDatabase.Query(stmt); - - if (result) - { - do - { - Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); - uint32 entry = fields[1].GetUInt32(); - float x = fields[2].GetFloat(); - float y = fields[3].GetFloat(); - float z = fields[4].GetFloat(); - uint16 mapId = fields[5].GetUInt16(); - - GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry); - - if (!gameObjectInfo) - continue; - - handler->PSendSysMessage(LANG_GO_LIST_CHAT, guid, entry, guid, gameObjectInfo->name.c_str(), x, y, z, mapId); - - ++count; - } while (result->NextRow()); - } - - handler->PSendSysMessage(LANG_COMMAND_NEAROBJMESSAGE, distance, count); - return true; - } - - //show info of gameobject - static bool HandleGameObjectInfoCommand(ChatHandler* handler, char const* args) - { - uint32 entry = 0; - uint32 type = 0; - uint32 displayId = 0; - std::string name; - uint32 lootId = 0; - GameObject* gameObject = nullptr; - - if (!*args) - { - if (WorldObject* object = handler->getSelectedObject()) - { - entry = object->GetEntry(); - if (object->GetTypeId() == TYPEID_GAMEOBJECT) - gameObject = object->ToGameObject(); - } - } - else - entry = atoi((char*)args); - - GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(entry); - - if (!gameObjectInfo) - return false; - - type = gameObjectInfo->type; - displayId = gameObjectInfo->displayId; - name = gameObjectInfo->name; - if (type == GAMEOBJECT_TYPE_CHEST) - lootId = gameObjectInfo->chest.lootId; - else if (type == GAMEOBJECT_TYPE_FISHINGHOLE) - lootId = gameObjectInfo->fishinghole.lootId; - - handler->PSendSysMessage(LANG_GOINFO_ENTRY, entry); - handler->PSendSysMessage(LANG_GOINFO_TYPE, type); - handler->PSendSysMessage(LANG_GOINFO_LOOTID, lootId); - handler->PSendSysMessage(LANG_GOINFO_DISPLAYID, displayId); - if (gameObject) - { - handler->PSendSysMessage("LootMode: %u", gameObject->GetLootMode()); - handler->PSendSysMessage("LootState: %u", gameObject->getLootState()); - handler->PSendSysMessage("GOState: %u", gameObject->GetGoState()); - handler->PSendSysMessage("PhaseMask: %u", gameObject->GetPhaseMask()); - handler->PSendSysMessage("IsLootEmpty: %u", gameObject->loot.empty()); - handler->PSendSysMessage("IsLootLooted: %u", gameObject->loot.isLooted()); - } - - handler->PSendSysMessage(LANG_GOINFO_NAME, name.c_str()); - - return true; - } - - static bool HandleGameObjectSetStateCommand(ChatHandler* handler, char const* args) - { - // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r - char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); - if (!id) - return false; - - int32 guidLow = atoi(id); - if (!guidLow) - return false; - - GameObject* object = nullptr; - - if (guidLow > 0) - { - if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) - object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); - } - else - object = handler->GetSession()->GetPlayer()->FindNearestGameObject(-guidLow, 30.0f); - - if (!object) - { - - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, abs(guidLow)); - handler->SetSentErrorMessage(true); - return false; - } - - char* type = strtok(nullptr, " "); - if (!type) - return false; - - int32 objectType = atoi(type); - if (objectType < 0) - { - if (objectType == -1) - object->SendObjectDeSpawnAnim(object->GetGUID()); - else if (objectType == -2) - return false; - return true; - } - - char* state = strtok(nullptr, " "); - if (!state) - return false; - - int32 objectState = atoi(state); - - if (objectType < 4) - object->SetByteValue(GAMEOBJECT_BYTES_1, objectType, objectState); - else if (objectType == 4) - { - WorldPacket data(SMSG_GAMEOBJECT_CUSTOM_ANIM, 8+4); - data << object->GetGUID(); - data << (uint32)(objectState); - object->SendMessageToSet(&data, true); - } - else if (objectType == 5) - object->SetUInt32Value(GAMEOBJECT_FLAGS, (uint32)(objectState)); - else if (objectType == 6) - object->SetGoArtKit((uint32)(objectState)); - - handler->PSendSysMessage("Set gobject type %d state %d", objectType, objectState); - return true; - } -}; - -void AddSC_gobject_commandscript() -{ - new gobject_commandscript(); -} |