bool ChatHandler::HandleDelObjectCommand(const char* args) { if(!*args) return false; uint32 lowguid = atoi((char*)args); if(!lowguid) return false; GameObject* obj = ObjectAccessor::Instance().GetGameObject(*m_session->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_GAMEOBJECT)); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", lowguid); return true; } if(obj->isReferenced()) { PSendSysMessage("Game Object (GUID: %u) have references in some Unit GO list, can't be deleted.", obj->GetGUIDLow()); return true; } obj->Delete(); obj->DeleteFromDB(); PSendSysMessage("Game Object (GUID: %u) removed", obj->GetGUIDLow()); return true; }
//move selected object static bool HandleGameObjectMoveCommand(ChatHandler* handler, char const* args) { uint32 guidLow = GetGuidLowFromArgsOrLastTargetedGo(handler, args); if (!guidLow) return false; GameObject* object = NULL; // 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(NULL, " "); char* toY = strtok(NULL, " "); char* toZ = strtok(NULL, " "); if (!toX) { Player* player = handler->GetSession()->GetPlayer(); object->Relocate(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->Relocate(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; }
//delete object by selection or guid static bool HandleGameObjectDeleteCommand (ChatHandler* handler, const char* args) { // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*) args, "Hgameobject"); if (!cId) return false; uint32 lowguid = atoi(cId); if (!lowguid) return false; GameObject* obj = NULL; // by DB guid if (GameObjectData const* go_data = sObjectMgr->GetGOData(lowguid)) obj = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid, go_data->id); if (!obj) { handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid); handler->SetSentErrorMessage(true); return false; } uint64 owner_guid = obj->GetOwnerGUID(); if (owner_guid) { Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), owner_guid); if (!owner || !IS_PLAYER_GUID(owner_guid)) { handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, GUID_LOPART(owner_guid), obj->GetGUIDLow()); handler->SetSentErrorMessage(true); return false; } owner->RemoveGameObject(obj, false); } obj->SetRespawnTime(0); // not save respawn time obj->Delete(); obj->DeleteFromDB(); handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, obj->GetGUIDLow()); sLog->outSQLDev("DELETE FROM gameobject WHERE guid = %u;", obj->GetGUIDLow()); 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 && !args) return false; uint32 guidLow = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(id); if (!guidLow) return false; if (handler->GetSession()->GetSecurity() == SEC_MODERATOR && handler->GetSession()->GetPlayer()->GetPhaseMask() == 1) { handler->SendSysMessage("You cannot permanently delete GameObjects in the main phase. Use .modify phase $number to delete your GameObject."); return true; } if (handler->GetSession()->GetSecurity() == SEC_MODERATOR && handler->GetSession()->GetPlayer()->GetPhaseMask() == -1) { handler->SendSysMessage("You cannot permanently delete GameObjects in the main phase. Use .modify phase $number to delete your GameObject."); return true; } GameObject* object = NULL; // 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; }
//turn selected object static bool HandleGameObjectTurnCommand(ChatHandler* handler, const char* args) { // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); if (!cId) return false; uint32 lowguid = atoi(cId); if (!lowguid) return false; GameObject* obj = NULL; // by DB guid if (GameObjectData const* go_data = sObjectMgr->GetGOData(lowguid)) obj = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid,go_data->id); if (!obj) { handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid); handler->SetSentErrorMessage(true); return false; } char* po = strtok(NULL, " "); float o; if (po) { o = (float)atof(po); } else { Player *chr = handler->GetSession()->GetPlayer(); o = chr->GetOrientation(); } obj->Relocate(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), o); obj->UpdateRotationFields(); obj->DestroyForNearbyPlayers(); obj->UpdateObjectVisibility(); obj->SaveToDB(); obj->Refresh(); handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, obj->GetGUIDLow(), obj->GetGOInfo()->name, obj->GetGUIDLow(), o); return true; }
bool ChatHandler::HandleTurnObjectCommand(const char* args) { if(!*args) return false; char* plowguid = strtok((char*)args, " "); if(!plowguid) return false; uint32 lowguid = (uint32)atoi(plowguid); GameObject* obj = ObjectAccessor::Instance().GetGameObject(*m_session->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_GAMEOBJECT)); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", lowguid); return true; } char* po = strtok(NULL, " "); float o; if (po) { o = (float)atof(po); } else { Player *chr = m_session->GetPlayer(); o = chr->GetOrientation(); } float rot2 = sin(o/2); float rot3 = cos(o/2); obj->Relocate(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), o); obj->SetFloatValue(GAMEOBJECT_FACING, o); obj->SetFloatValue(GAMEOBJECT_ROTATION+2, rot2); obj->SetFloatValue(GAMEOBJECT_ROTATION+3, rot3); obj->SaveToDB(); obj->Refresh(); PSendSysMessage("Game Object (GUID: %u) turned", obj->GetGUIDLow(), o); 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 && !args) return false; uint32 guidLow = (args) ? handler->GetSession()->GetPlayer()->GetSelectedGobject(): atoi(id); if (!guidLow) return false; GameObject* object = NULL; // 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(NULL, " "); float o; if (orientation) o = (float)atof(orientation); else { Player* player = handler->GetSession()->GetPlayer(); o = player->GetOrientation(); } object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), o); object->UpdateRotationFields(); object->DestroyForNearbyPlayers(); object->UpdateObjectVisibility(); object->SaveToDB(); object->Refresh(); handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow(), o); 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 = NULL; // by DB guid if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow)) object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id); if (!object) { handler->PSendSysMessage(LANGUAGE_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(LANGUAGE_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(LANGUAGE_COMMAND_DELOBJMESSAGE, object->GetGUIDLow()); return true; }
//turn selected object static bool HandleGameObjectTurnCommand(ChatHandler* handler, char const* args) { uint32 guidLow = GetGuidLowFromArgsOrLastTargetedGo(handler, args); if (!guidLow) return false; GameObject* object = NULL; // 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(NULL, " "); float o; if (orientation) o = (float)atof(orientation); else { Player* player = handler->GetSession()->GetPlayer(); o = player->GetOrientation(); } object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), o); object->UpdateRotationFields(); object->DestroyForNearbyPlayers(); object->UpdateObjectVisibility(); object->SaveToDB(); object->Refresh(); handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow(), o); return true; }
//delete object by selection or guid static bool HandleGameObjectDeleteCommand(ChatHandler* handler, char const* args) { uint32 guidLow = GetGuidLowFromArgsOrLastTargetedGo(handler, args); if (!guidLow) return false; GameObject* object = NULL; // 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; }
bool ChatHandler::HandleDelObjectCommand(const char* args) { if(!*args) return false; uint32 lowguid = atoi((char*)args); if(!lowguid) return false; GameObject* obj = ObjectAccessor::Instance().GetGameObject(*m_session->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_GAMEOBJECT)); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", lowguid); return true; } uint64 owner_guid = obj->GetOwnerGUID(); if(owner_guid) { Unit* owner = ObjectAccessor::Instance().GetUnit(*m_session->GetPlayer(),owner_guid); if(!owner && GUID_HIPART(owner_guid)!=HIGHGUID_PLAYER) { PSendSysMessage("Game Object (GUID: %u) have references in not found creature %u GO list, can't be deleted.", GUID_LOPART(owner_guid), obj->GetGUIDLow()); return true; } owner->RemoveGameObject(obj,false); } obj->SetRespawnTime(0); // not save respawn time obj->Delete(); obj->DeleteFromDB(); PSendSysMessage("Game Object (GUID: %u) removed", obj->GetGUIDLow()); return true; }
bool ChatHandler::HandleMoveObjectCommand(const char* args) { if(!*args) return false; char* plowguid = strtok((char*)args, " "); if(!plowguid) return false; uint32 lowguid = (uint32)atoi(plowguid); GameObject* obj = ObjectAccessor::Instance().GetGameObject(*m_session->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_GAMEOBJECT)); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", lowguid); return true; } char* px = strtok(NULL, " "); char* py = strtok(NULL, " "); char* pz = strtok(NULL, " "); if (!px) { Player *chr = m_session->GetPlayer(); obj->Relocate(chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), obj->GetOrientation()); obj->SetFloatValue(GAMEOBJECT_POS_X, chr->GetPositionX()); obj->SetFloatValue(GAMEOBJECT_POS_Y, chr->GetPositionY()); obj->SetFloatValue(GAMEOBJECT_POS_Z, chr->GetPositionZ()); } else { if(!py || !pz) return false; float x = (float)atof(px); float y = (float)atof(py); float z = (float)atof(pz); if(!MapManager::IsValidMapCoord(obj->GetMapId(),x,y)) { PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,obj->GetMapId()); return true; } obj->Relocate(x, y, z, obj->GetOrientation()); obj->SetFloatValue(GAMEOBJECT_POS_X, x); obj->SetFloatValue(GAMEOBJECT_POS_Y, y); obj->SetFloatValue(GAMEOBJECT_POS_Z, z); } obj->SaveToDB(); obj->Refresh(); PSendSysMessage("Game Object (GUID: %u) moved", obj->GetGUIDLow()); 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; }
//delete object by selection or guid static bool HandleGameObjectDeleteCommand(ChatHandler* handler, char const* args) { if(handler->GetSession()->GetPlayer()->HasSelectedGameObject() == true) { GameObject* object = handler->GetSession()->GetPlayer()->GetSelectedGameObject(); WorldDatabase.PQuery("DELETE FROM apt_placed_objects WHERE objectGuid = %u", object->GetGUIDLow()); object->SetRespawnTime(0); // not save respawn time object->Delete(); object->DeleteFromDB(); handler->GetSession()->GetPlayer()->DeselectGameObject(); handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUIDLow()); return true; } else { // 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 = NULL; // 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; } ObjectGuid ownerGuid = object->GetOwnerGUID(); if (ownerGuid) { Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid); if (!owner || !ownerGuid.IsPlayer()) { handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), object->GetGUIDLow()); handler->SetSentErrorMessage(true); return false; } owner->RemoveGameObject(object, false); } WorldDatabase.PQuery("DELETE FROM apt_placed_objects WHERE objectGuid = %u", object->GetGUIDLow()); object->SetRespawnTime(0); // not save respawn time object->Delete(); object->DeleteFromDB(); handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUIDLow()); return true; } }
inline void Map::_ScriptProcessDoor(Object* source, Object* target, const ScriptInfo* scriptInfo) const { bool bOpen = false; uint32 guid = scriptInfo->ToggleDoor.GOGuid; int32 nTimeToToggle = std::max(15, int32(scriptInfo->ToggleDoor.ResetDelay)); switch (scriptInfo->command) { case SCRIPT_COMMAND_OPEN_DOOR: bOpen = true; break; case SCRIPT_COMMAND_CLOSE_DOOR: break; default: sLog->outError(LOG_FILTER_TSCR, "%s unknown command for _ScriptProcessDoor.", scriptInfo->GetDebugInfo().c_str()); return; } if (!guid) sLog->outError(LOG_FILTER_TSCR, "%s door guid is not specified.", scriptInfo->GetDebugInfo().c_str()); else if (!source) sLog->outError(LOG_FILTER_TSCR, "%s source object is NULL.", scriptInfo->GetDebugInfo().c_str()); else if (!source->isType(TYPEMASK_UNIT)) sLog->outError(LOG_FILTER_TSCR, "%s source object is not unit (TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); else { WorldObject* wSource = dynamic_cast <WorldObject*> (source); if (!wSource) sLog->outError(LOG_FILTER_TSCR, "%s source object could not be casted to world object (TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); else { GameObject* pDoor = _FindGameObject(wSource, guid); if (!pDoor) sLog->outError(LOG_FILTER_TSCR, "%s gameobject was not found (guid: %u).", scriptInfo->GetDebugInfo().c_str(), guid); else if (pDoor->GetGoType() != GAMEOBJECT_TYPE_DOOR) sLog->outError(LOG_FILTER_TSCR, "%s gameobject is not a door (GoType: %u, Entry: %u, GUID: %u).", scriptInfo->GetDebugInfo().c_str(), pDoor->GetGoType(), pDoor->GetEntry(), pDoor->GetGUIDLow()); else if (bOpen == (pDoor->GetGoState() == GO_STATE_READY)) { pDoor->UseDoorOrButton(nTimeToToggle); if (target && target->isType(TYPEMASK_GAMEOBJECT)) { GameObject* goTarget = target->ToGameObject(); if (goTarget && goTarget->GetGoType() == GAMEOBJECT_TYPE_BUTTON) goTarget->UseDoorOrButton(nTimeToToggle); } } } } }
//move selected object static bool HandleGameObjectMoveCommand(ChatHandler* handler, const char* args) { // number or [name] Shift-click form |color|Hgameobject:go_guid|h[name]|h|r char* cId = handler->extractKeyFromLink((char*)args,"Hgameobject"); if (!cId) return false; uint32 lowguid = atoi(cId); if (!lowguid) return false; GameObject* obj = NULL; // by DB guid if (GameObjectData const* go_data = sObjectMgr->GetGOData(lowguid)) obj = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid,go_data->id); if (!obj) { handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid); handler->SetSentErrorMessage(true); return false; } char* px = strtok(NULL, " "); char* py = strtok(NULL, " "); char* pz = strtok(NULL, " "); if (!px) { Player *chr = handler->GetSession()->GetPlayer(); obj->Relocate(chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), obj->GetOrientation()); obj->DestroyForNearbyPlayers(); obj->UpdateObjectVisibility(); } else { if (!py || !pz) return false; float x = (float)atof(px); float y = (float)atof(py); float z = (float)atof(pz); if (!MapManager::IsValidMapCoord(obj->GetMapId(),x,y,z)) { handler->PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,obj->GetMapId()); handler->SetSentErrorMessage(true); return false; } obj->Relocate(x, y, z, obj->GetOrientation()); obj->DestroyForNearbyPlayers(); obj->UpdateObjectVisibility(); } obj->SaveToDB(); obj->Refresh(); handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, obj->GetGUIDLow(), obj->GetGOInfo()->name, obj->GetGUIDLow()); return true; }
GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data) { Map* map = GetMap(); GameObject* go = new GameObject(); if (!go->LoadGameObjectFromDB(guid, map, false)) { delete go; return NULL; } float x = data->posX; float y = data->posY; float z = data->posZ; float o = data->orientation; go->SetTransport(this); go->m_movementInfo.transport.guid = GetGUID(); go->m_movementInfo.transport.pos.Relocate(x, y, z, o); CalculatePassengerPosition(x, y, z, &o); go->Relocate(x, y, z, o); if (!go->IsPositionValid()) { TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY()); delete go; return NULL; } if (!map->AddToMap(go)) { delete go; return NULL; } _staticPassengers.insert(go); return go; }
bool ChatHandler::HandleTargetAndDeleteObjectCommand(char *args) { Player* pl = m_session->GetPlayer(); QueryResult *result; uint32 id = args && *args ? atoi((char*)args) : 0; float distance = 100; // should be ok as max. if(id) { // copied from HandleGameObjectNearCommand result = WorldDatabase.PQuery("SELECT guid, id, position_x, position_y, position_z, map, " "(POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ " "FROM gameobject WHERE map='%u' AND (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) <= '%f' AND id = '%u' ORDER BY order_", pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), pl->GetMapId(), pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),distance*distance, id); } else { // copied from HandleGameObjectNearCommand, added id = '...' to WHERE part result = WorldDatabase.PQuery("SELECT guid, id, position_x, position_y, position_z, map, " "(POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ " "FROM gameobject WHERE map='%u' AND (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) <= '%f' ORDER BY order_", pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(), pl->GetMapId(), pl->GetPositionX(), pl->GetPositionY(), pl->GetPositionZ(),distance*distance); } if (!result) { SendSysMessage("Nothing found!"); return true; } Field *fields = result->Fetch(); uint32 guid32 = fields[0].GetUInt32(); id = fields[1].GetUInt32(); float x = fields[2].GetFloat(); float y = fields[3].GetFloat(); float z = fields[4].GetFloat(); float o = fields[5].GetFloat(); int mapid = fields[6].GetUInt16(); delete result; const GameObjectInfo *goI = sObjectMgr.GetGameObjectInfo(id); if (!goI) { PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST,id); return false; } ObjectGuid guid(HIGHGUID_GAMEOBJECT, id, guid32); GameObject* obj = m_session->GetPlayer()->GetMap()->GetGameObject(guid); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", guid32); return true; } ObjectGuid owner_guid = obj->GetOwnerGuid(); if(!owner_guid.IsEmpty()) { Unit* owner = ObjectAccessor::Instance().GetUnit(*m_session->GetPlayer(),owner_guid); if(!owner && !owner_guid.IsPlayer()) { PSendSysMessage("Game Object (GUID: %u) have references in not found creature %u GO list, can't be deleted.", owner_guid.GetCounter(), obj->GetGUIDLow()); return true; } owner->RemoveGameObject(obj,false); } obj->Delete(); obj->DeleteFromDB(); PSendSysMessage("Game Object (GUID: %u) [%s] removed", obj->GetGUIDLow(),goI->name); return true; }
void WintergraspWorkshopData::GiveControlTo(uint8 team) { // Find associate graveyard and update it if (m_workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_EAST) if (m_WG->GetGraveyardById(m_workshopId)) m_WG->GetGraveyardById(m_workshopId)->GiveControlTo(TeamId(team)); if (team != TEAM_NEUTRAL) { // Hide current creatures for (GuidSet::const_iterator itr = m_CreatureOnPoint[m_WG->GetOtherTeam(TeamId(team))].begin(); itr != m_CreatureOnPoint[m_WG->GetOtherTeam(TeamId(team))].end(); ++itr) if (Creature* pCreature = m_WG->GetCreature(*itr)) m_WG->HideNpc(pCreature); // Show controller creatures for (GuidSet::const_iterator itr = m_CreatureOnPoint[TeamId(team)].begin(); itr != m_CreatureOnPoint[TeamId(team)].end(); ++itr) { if (Creature* pCreature = m_WG->GetCreature(*itr)) { m_WG->ShowNpc(pCreature, (pCreature->GetEntry() != BATTLEFIELD_WG_NPC_GNOMISH_MECHANIC_ENGINEER && pCreature->GetEntry() != BATTLEFIELD_WG_NPC_GOBLIN_MECHANIC_ENGINEER)); pCreature->SetPosition(pCreature->GetHomePosition()); } } // Hide current gameobjects for (GuidSet::const_iterator itr = m_GameObjectOnPoint[m_WG->GetOtherTeam(TeamId(team))].begin(); itr != m_GameObjectOnPoint[m_WG->GetOtherTeam(TeamId(team))].end(); ++itr) if (GameObject* object = m_WG->GetGameObject(*itr)) object->SetRespawnTime(RESPAWN_ONE_DAY); // Show controller gameobjects for (GuidSet::const_iterator itr = m_GameObjectOnPoint[TeamId(team)].begin(); itr != m_GameObjectOnPoint[TeamId(team)].end(); ++itr) if (GameObject* object = m_WG->GetGameObject(*itr)) object->SetRespawnTime(RESPAWN_IMMEDIATELY); } switch (team) { case BATTLEFIELD_WG_TEAM_NEUTRAL: { // Send warning message to all player for inform a faction attack a workshop // alliance / horde attacking workshop m_WG->SendWarningToAllInZone(m_TeamControl ? LANG_WG_WORKSHOP_ATTACK_ALLIANCE : LANG_WG_WORKSHOP_ATTACK_HORDE, m_NameId); // Updating worldstate m_State = BATTLEFIELD_WG_OBJECTSTATE_NEUTRAL_INTACT; m_WG->SendUpdateWorldState(m_WorldState, m_State); // Hide current Engineer if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[m_TeamControl])) m_WG->HideNpc(pEngineer); // Update GameObject ArtKit of the Factory Banner (only outside workshops) if (m_FactoryGUID != 0 && m_WG->IsWarTime()) { GameObject* pFactory = m_WG->GetGameObject(m_FactoryGUID); if (pFactory) GameObject::SetGoArtKit(GO_ARTKIT_FACTORY_NEUTRAL, pFactory, pFactory->GetGUIDLow()); } }break; case BATTLEFIELD_WG_TEAM_ALLIANCE: { // Hide Horde Engineer - has to be done at init if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[TEAM_HORDE])) m_WG->HideNpc(pEngineer); // Show Alliance Engineer - If it isn't wartime, hide engineer per default if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[TEAM_ALLIANCE])) { if (m_WG->IsWarTime()) m_WG->ShowNpc(pEngineer, false); else m_WG->HideNpc(pEngineer); } // Updating worldstate m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; m_WG->SendUpdateWorldState(m_WorldState, m_State); // Warning message if (m_WG->IsWarTime() && m_workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) // workshop taken - alliance m_WG->SendWarningToAllInZone(LANG_WG_WORKSHOP_TAKEN_ALLIANCE, m_NameId); // Update GameObject ArtKit of the Factory Banner (only outside workshops) if (m_FactoryGUID != 0 && m_WG->IsWarTime()) { GameObject* pFactory = m_WG->GetGameObject(m_FactoryGUID); if (pFactory) GameObject::SetGoArtKit(GO_ARTKIT_FACTORY_ALLIANCE, pFactory, pFactory->GetGUIDLow()); } }break; case BATTLEFIELD_WG_TEAM_HORDE: { // Hide Alliance Engineer - has to be done at init if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[TEAM_ALLIANCE])) m_WG->HideNpc(pEngineer); // Show Horde Engineer - If it isn't wartime, hide engineer per default if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[TEAM_HORDE])) { if (m_WG->IsWarTime()) m_WG->ShowNpc(pEngineer, false); else m_WG->HideNpc(pEngineer); } // Update worldstate m_State = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; m_WG->SendUpdateWorldState(m_WorldState, m_State); // Warning message if (m_WG->IsWarTime() && m_workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) // workshop taken - horde m_WG->SendWarningToAllInZone(LANG_WG_WORKSHOP_TAKEN_HORDE, m_NameId); // Update GameObject ArtKit of the Factory Banner (only outside workshops) if (m_FactoryGUID != 0 && m_WG->IsWarTime()) { GameObject* pFactory = m_WG->GetGameObject(m_FactoryGUID); if (pFactory) GameObject::SetGoArtKit(GO_ARTKIT_FACTORY_HORDE, pFactory, pFactory->GetGUIDLow()); } }break; } m_TeamControl = team; if (!m_RocketLauncherOnPoint.empty()) for (GuidSet::const_iterator itr = m_RocketLauncherOnPoint.begin(); itr != m_RocketLauncherOnPoint.end(); ++itr) if (Creature* pCreature = m_WG->GetCreature(*itr)) pCreature->setFaction(WintergraspFaction[team]); if (m_WG->IsWarTime()) m_WG->UpdateCounterVehicle(false); }
void WintergraspWorkshopData::OnBattleStart() { // Update graveyard UpdateGraveyard(); // Show Engineer if (Creature* pEngineer = m_WG->GetCreature(m_Engineer[m_TeamControl])) m_WG->ShowNpc(pEngineer, false); if (m_workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) { // Reset creatures for (GuidSet::const_iterator itr = m_CreatureOnPoint[m_TeamControl].begin(); itr != m_CreatureOnPoint[m_TeamControl].end(); ++itr) if (Creature* pCreature = m_WG->GetCreature(*itr)) pCreature->SetPosition(pCreature->GetHomePosition()); // Show rocket launchers for (GuidSet::const_iterator itr = m_RocketLauncherOnPoint.begin(); itr != m_RocketLauncherOnPoint.end(); ++itr) { if (Creature* pCreature = m_WG->GetCreature(*itr)) { m_WG->ShowNpc(pCreature, false); pCreature->setFaction(WintergraspFaction[GetTeam()]); } } // Spawning Factory Banner WintergraspObjectPositionData factory = CapturableWorkshops[m_workshopId].GameObjectMain[1]; GameObject* pFactory = m_WG->SpawnGameObject(factory.entryHorde, factory.x, factory.y, factory.z, factory.o); if (!pFactory) return; // Create and Add Capturable Point WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(m_WG, TeamId(m_TeamControl)); if (!capturePoint) return; capturePoint->SetCapturePointData(pFactory); capturePoint->LinkToWorkshop(this); m_WG->AddCapturablePoint(capturePoint); // Save factory banner guid and entry m_FactoryGUID = pFactory->GetGUID(); m_FactoryEntry = pFactory->GetEntry(); // Update GameObject ArtKit of the Factory Banner (only outside workshops) GameObject::SetGoArtKit(m_TeamControl ? GO_ARTKIT_FACTORY_HORDE : GO_ARTKIT_FACTORY_ALLIANCE, pFactory, pFactory->GetGUIDLow()); } }
GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data) { Map* map = GetMap(); GameObject* go = new GameObject(); if (!go->LoadGameObjectFromDB(guid, map, false)) { delete go; return NULL; } float x = data->posX; float y = data->posY; float z = data->posZ; float o = data->orientation; go->SetTransport(this); go->m_movementInfo.transport.guid = GetGUID(); go->m_movementInfo.transport.pos.Relocate(x, y, z, o); // m_movementInfo.transport.pos.m_positionX = offset go->m_movementInfo.transport.seat = -1; CalculatePassengerPosition(x, y, z, &o); // This method transforms supplied transport offsets into global coordinates offset > worldpos go->Relocate(x, y, z, o); // me->m_positionX = worldpos go->RelocateStationaryPosition(x, y, z, o); // this->gameobject->m_stationaryPosition x=worldpos go->m_updateFlag |= UPDATEFLAG_GO_TRANSPORT_POSITION; if (!go->IsPositionValid()) { TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY()); delete go; return NULL; } if (!map->AddToMap(go)) { delete go; return NULL; } _staticPassengers.insert(go); return go; }
static bool GOMove_Command(ChatHandler* handler, const char* args) { if (!args) return false; char* ID_t = strtok((char*)args, " "); if (!ID_t) return false; uint32 ID = (uint32)atol(ID_t); char* GObjectID_C = strtok(NULL, " "); uint32 GObjectID = 0; bool isHex = false; if (GObjectID_C) { GObjectID = strtoul(GObjectID_C, NULL, 0); // can take in hex as well as dec isHex = (std::string(GObjectID_C).find("0x") != std::string::npos); } char* ARG_t = strtok(NULL, " "); uint32 ARG = 0; if (ARG_t) ARG = (uint32)atol(ARG_t); WorldSession* session = handler->GetSession(); Player* player = session->GetPlayer(); uint64 playerGUID = player->GetGUID(); if (ID < SPAWN) // no args { if (ID >= DELET && ID <= GOTO) // has target (needs retrieve gameobject) { GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex); if (!target) ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temp(%u)", GObjectID, isHex ? 1 : 0); else { float x,y,z,o; target->GetPosition(x,y,z,o); uint32 p = target->GetPhaseMask(); switch(ID) { case DELET: DeleteObject(target/*, isHex ? GObjectID : 0*/); SendSelectionInfo(player, GObjectID, isHex, false); break; case X: SpawnObject(player,player->GetPositionX(),y,z,o,p,true,GObjectID, isHex); break; case Y: SpawnObject(player,x,player->GetPositionY(),z,o,p,true,GObjectID, isHex); break; case Z: SpawnObject(player,x,y,player->GetPositionZ(),o,p,true,GObjectID, isHex); break; case O: SpawnObject(player,x,y,z,player->GetOrientation(),p,true,GObjectID, isHex); break; case GOTO: player->TeleportTo(target->GetMapId(), x,y,z,o); break; case RESPAWN: SpawnObject(player,x,y,z,o,p,false,target->GetEntry(), isHex); break; case GROUND: { float ground = target->GetMap()->GetHeight(target->GetPhaseMask(), x, y, MAX_HEIGHT); if(ground != INVALID_HEIGHT) SpawnObject(player,x,y,ground,o,p,true,GObjectID, isHex); } break; } } } else { switch(ID) { case TEST: session->SendAreaTriggerMessage(player->GetName().c_str()); break; case FACE: { float piper2 = M_PI/2; float multi = player->GetOrientation()/piper2; float multi_int = floor(multi); float new_ori = (multi-multi_int > 0.5f) ? (multi_int+1)*piper2 : multi_int*piper2; player->SetFacingTo(new_ori); } break; case SAVE: SaveObject(player, GObjectID, isHex); break; case SELECTNEAR: { GameObject* object = handler->GetNearbyGameObject(); object = GetClosestGObjectID(player, object); if (!object) ChatHandler(player->GetSession()).PSendSysMessage("No objects found"); else { bool isHex = (object->GetGUIDHigh() != HIGHGUID_GAMEOBJECT); SendSelectionInfo(player, isHex ? object->GetGUIDHigh() : object->GetDBTableGUIDLow() ? object->GetDBTableGUIDLow() : object->GetGUIDLow(), isHex, true); session->SendAreaTriggerMessage("Selected %s", object->GetName().c_str()); } } break; } } } else if (ARG && ID >= SPAWN) { if (ID >= NORTH && ID <= PHASE) { GameObject* target = GetObjectByGObjectID(player, GObjectID, isHex); if (!target) ChatHandler(player->GetSession()).PSendSysMessage("Object GUID: %u not found. Temporary: %s", GObjectID, isHex ? "true" : "false"); else { float x,y,z,o; target->GetPosition(x,y,z,o); uint32 p = target->GetPhaseMask(); switch(ID) { case NORTH: SpawnObject(player,x+((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break; case EAST: SpawnObject(player,x,y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case SOUTH: SpawnObject(player,x-((float)ARG/100),y,z,o,p,true,GObjectID, isHex); break; case WEST: SpawnObject(player,x,y+((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case NORTHEAST: SpawnObject(player,x+((float)ARG/100),y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case SOUTHEAST: SpawnObject(player,x-((float)ARG/100),y-((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case SOUTHWEST: SpawnObject(player,x-((float)ARG/100),y+((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case NORTHWEST: SpawnObject(player,x+((float)ARG/100),y+((float)ARG/100),z,o,p,true,GObjectID, isHex); break; case UP: SpawnObject(player,x,y,z+((float)ARG/100),o,p,true,GObjectID, isHex); break; case DOWN: SpawnObject(player,x,y,z-((float)ARG/100),o,p,true,GObjectID, isHex); break; case RIGHT: SpawnObject(player,x,y,z,o-((float)ARG/100),p,true,GObjectID, isHex); break; case LEFT: SpawnObject(player,x,y,z,o+((float)ARG/100),p,true,GObjectID, isHex); break; case PHASE: SpawnObject(player,x,y,z,o,ARG,true,GObjectID, isHex); break; } } } else { switch(ID) { case SPAWN: { if (SpawnObject(player, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), player->GetPhaseMaskForSpawn(), false, ARG, false, true)) SpawnQue[player->GetGUID()] = ARG; } break; case SPAWNSPELL: { SpawnQue[player->GetGUID()] = ARG; } break; case SELECTALLNEAR: { if (ARG > 5000) ARG = 5000; QueryResult result = WorldDatabase.PQuery("SELECT guid, (POW(position_x - '%f', 2) + POW(position_y - '%f', 2) + POW(position_z - '%f', 2)) AS order_ FROM gameobject WHERE map = '%u' AND position_x BETWEEN '%f'-'%u' AND '%f'+'%u' AND position_y BETWEEN '%f'-'%u' AND '%f'+'%u' AND position_z BETWEEN '%f'-'%u' AND '%f'+'%u' ORDER BY order_ ASC LIMIT 100", player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), player->GetPositionX(), ARG, player->GetPositionX(), ARG, player->GetPositionY(), ARG, player->GetPositionY(), ARG, player->GetPositionZ(), ARG, player->GetPositionZ(), ARG); if (result) { do { Field* fields = result->Fetch(); uint32 guidLow = fields[0].GetUInt32(); if (GameObject* object = GetObjectByGObjectID(player, guidLow, false)) SendSelectionInfo(player, guidLow, false, true); } while (result->NextRow()); } for(std::set<uint32>::const_iterator it = GObjects.begin(); it != GObjects.end();) { GameObject* temp = player->GetGameObject(*it); if(!temp) { GObjects.erase(*it++); continue; } if(temp->IsWithinDistInMap(player, ARG)) SendSelectionInfo(player, (*it), true, true); ++it; } } break; } } } else return false; return true; }
bool ChatHandler::HandleTargetAndDeleteObjectCommand(char *args) { QueryResult *result; if(*args) { int32 id = atoi((char*)args); if(id) result = WorldDatabase.PQuery("SELECT `guid`, `id`, `position_x`, `position_y`, `position_z`, `orientation`, `map`, (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", m_session->GetPlayer()->GetPositionX(), m_session->GetPlayer()->GetPositionY(), m_session->GetPlayer()->GetPositionZ(), m_session->GetPlayer()->GetMapId(),id); else result = WorldDatabase.PQuery( "SELECT `guid`, `id`, `position_x`, `position_y`, `position_z`, `orientation`, `map`, (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 '%%%s%%' ORDER BY `order` ASC LIMIT 1", m_session->GetPlayer()->GetPositionX(), m_session->GetPlayer()->GetPositionY(), m_session->GetPlayer()->GetPositionZ(), m_session->GetPlayer()->GetMapId(),args); } else result = WorldDatabase.PQuery("SELECT `guid`, `id`, `position_x`, `position_y`, `position_z`, `orientation`, `map`, (POW(`position_x` - %f, 2) + POW(`position_y` - %f, 2) + POW(`position_z` - %f, 2)) as `order` FROM `gameobject` WHERE `map` = %i ORDER BY `order` ASC LIMIT 1", m_session->GetPlayer()->GetPositionX(), m_session->GetPlayer()->GetPositionY(), m_session->GetPlayer()->GetPositionZ(), m_session->GetPlayer()->GetMapId()); if (!result) { SendSysMessage("Nothing found!"); return true; } Field *fields = result->Fetch(); uint32 guid = fields[0].GetUInt32(); uint32 id = fields[1].GetUInt32(); float x = fields[2].GetFloat(); float y = fields[3].GetFloat(); float z = fields[4].GetFloat(); float o = fields[5].GetFloat(); int mapid = fields[6].GetUInt16(); delete result; const GameObjectInfo *goI = sObjectMgr.GetGameObjectInfo(id); if (!goI) { PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST,id); return false; } GameObject* obj = m_session->GetPlayer()->GetMap()->GetGameObject(ObjectGuid(HIGHGUID_GAMEOBJECT, guid, id)); if(!obj) { PSendSysMessage("Game Object (GUID: %u) not found", GUID_LOPART(guid)); return true; } uint64 owner_guid = obj->GetOwnerGUID(); if(owner_guid) { Unit* owner = ObjectAccessor::Instance().GetUnit(*m_session->GetPlayer(),owner_guid); if(!owner && GUID_HIPART(owner_guid)!=HIGHGUID_PLAYER) { PSendSysMessage("Game Object (GUID: %u) have references in not found creature %u GO list, can't be deleted.", GUID_LOPART(owner_guid), obj->GetGUIDLow()); return true; } owner->RemoveGameObject(obj,false); } obj->Delete(); obj->DeleteFromDB(); PSendSysMessage("Game Object (GUID: %u) [%s] removed", obj->GetGUIDLow(),goI->name); return true; }
static bool HandleGameObjectActivateMapCommand(ChatHandler* handler, const char* args) { uint32 guidLow = GetGuidLowFromArgsOrLastTargetedGo(handler, args); if (!guidLow) return false; GameObject* obj = NULL; // by DB guid if (GameObjectData const* go_data = sObjectMgr->GetGOData(guidLow)) obj = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, go_data->id); if (!obj) { handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); handler->SetSentErrorMessage(true); return false; } // Activate obj->setActive(!obj->isActiveObject()); WorldDatabase.PExecute("UPDATE gameobject SET isActive = %u WHERE guid = %u", uint8(obj->isActiveObject()), obj->GetGUIDLow()); if (obj->isActiveObject()) handler->PSendSysMessage("Object added to actived objects !"); else handler->PSendSysMessage("Object removed from actived objects !"); return true; }