bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if (GObj->m_spawn != NULL && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx = uint32(((_maxX - GObj->m_spawn->x) / _cellSize)); uint32 celly = uint32(((_maxY - GObj->m_spawn->y) / _cellSize)); if (cellx < _sizeX && celly < _sizeY) { CellSpawns* sp = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList(cellx, celly); if (sp != NULL) { for (GOSpawnList::iterator itr = sp->GOSpawns.begin(); itr != sp->GOSpawns.end(); ++itr) if ((*itr) == GObj->m_spawn) { sp->GOSpawns.erase(itr); break; } } GObj->DeleteFromDB(); delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->DeleteFromDB(); GObj->Despawn(0); delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ 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; } 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; }
//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; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *GObj = m_session->GetPlayer()->GetSelectedGo(); if( GObj == NULL ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if( GObj->m_spawn != NULL && GObj->m_spawn->entry == GObj->GetEntry() ) { uint32 cellx = uint32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly = uint32(((_maxY-GObj->m_spawn->y)/_cellSize)); if( cellx < _sizeX && celly < _sizeY ) { CellSpawns * sp = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList( cellx, celly ); if( sp != NULL ) { for( GOSpawnList::iterator itr = sp->GOSpawns.begin(); itr != sp->GOSpawns.end(); ++itr ) if( (*itr) == GObj->m_spawn ) { sp->GOSpawns.erase( itr ); break; } } GObj->DeleteFromDB(); delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0, 0); // We do not need to delete the object because GameObject::Despawn with no time => ExpireAndDelete() => _Expire() => delete GObj; sGMLog.writefromsession(m_session,"deleted game object entry %u on map %u at X:%f Y:%f Z:%f Name %s", GObj->GetEntry(),GObj->GetMapId(),GObj->GetPositionX(),GObj->GetPositionY(),GObj->GetPositionZ(),GameObjectNameStorage.LookupEntry(GObj->GetEntry())->Name); m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ return true; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *GObj = m_session->GetPlayer()->GetSelectedGo(); if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0 && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); if(cellx < _sizeX && celly < _sizeY) { //m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx,celly)->GOSpawns.erase(GObj->m_spawn); CellSpawns * c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx, celly); for(GOSpawnList::iterator itr = c->GOSpawns.begin(); itr != c->GOSpawns.end(); ++itr) if((*itr) == GObj->m_spawn) { c->GOSpawns.erase(itr); break; } GObj->DeleteFromDB(); delete GObj->m_spawn; } } GObj->Despawn(0); sGMLog.writefromsession( m_session, "deleted gameobject %s, entry %u", GameObjectNameStorage.LookupEntry(GObj->GetEntry())->Name, GObj->GetEntry() ); delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ return true; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject* GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } bool foundonmap = true; if(GObj->m_spawn && GObj->m_spawn->entry == GObj->GetEntry() && GObj->IsInWorld()) { uint32 cellx = GObj->GetMapMgr()->GetPosX(GObj->m_spawn->x); uint32 celly = GObj->GetMapMgr()->GetPosY(GObj->m_spawn->y); if(cellx < _sizeX && celly < _sizeY) { foundonmap = false; GOSpawnList::iterator itr; ASSERT(GObj->GetMapMgr()->GetBaseMap() != NULL) CellSpawns *c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList(cellx, celly); if(c != NULL) { for(itr = c->GOSpawns.begin(); itr != c->GOSpawns.end(); itr++) { if((*itr) == GObj->m_spawn) { foundonmap = true; c->GOSpawns.erase(itr); break; } } } } GObj->DeleteFromDB(); if(foundonmap) { delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0, 0); // Deleted through ExpireAndDelete GObj = NULLGOB; if(foundonmap) BlueSystemMessage(m_session, "Deleted selected object and erased it from spawn map."); else BlueSystemMessage(m_session, "Deleted selected object."); m_session->GetPlayer()->m_GM_SelectedGO = NULLGOB; return true; }
bool ChatHandler::HandleGODelete(const char* args, WorldSession* m_session) { GameObject* GObj = m_session->GetPlayer()->GetSelectedGo(); if(!GObj) { RedSystemMessage(m_session, "No selected GameObject..."); return false; } if(GObj->IsInBg()) { RedSystemMessage(m_session, "GameObjects can't be deleted in Battlegrounds"); return false; } if(GObj->m_spawn && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx = uint32(((_maxX - GObj->m_spawn->x) / _cellSize)); uint32 celly = uint32(((_maxY - GObj->m_spawn->y) / _cellSize)); if(cellx < _sizeX && celly < _sizeY) { CellSpawns* sp = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsList(cellx, celly); if(sp) { for(GOSpawnList::iterator itr = sp->GOSpawns.begin(); itr != sp->GOSpawns.end(); ++itr) { if((*itr) == GObj->m_spawn) { sp->GOSpawns.erase(itr); break; } } } GObj->DeleteFromDB(); delete GObj->m_spawn; GObj->m_spawn = NULL; } } sGMLog.writefromsession(m_session, "deleted game object entry %u on map %u at X:%f Y:%f Z:%f Name %s", GObj->GetEntry(), GObj->GetMapId(), GObj->GetPositionX(), GObj->GetPositionY(), GObj->GetPositionZ(), GameObjectNameStorage.LookupEntry(GObj->GetEntry())->Name); GObj->Despawn(0, 0); // We do not need to delete the object because GameObject::Despawn with no time => ExpireAndDelete() => _Expire() => delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; 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) 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; }
//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; ObjectGuid::LowType guidLow = atoul(id); if (!guidLow) return false; Player const* const player = handler->GetSession()->GetPlayer(); // force respawn to make sure we find something player->GetMap()->ForceRespawn(SPAWN_TYPE_GAMEOBJECT, guidLow); GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(guidLow); if (!object) { handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow); handler->SetSentErrorMessage(true); return false; } ObjectGuid ownerGuid = object->GetOwnerGUID(); if (ownerGuid) { Unit* owner = ObjectAccessor::GetUnit(*player, ownerGuid); if (!owner || !ownerGuid.IsPlayer()) { handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), guidLow); 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->GetSpawnId()); return true; }
bool ChatHandler::HandleGODelete(const char *args, WorldSession *m_session) { GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); m_session->GetPlayer()->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx,celly)->GOSpawns.erase(GObj->m_spawn); delete GObj->m_spawn; } GObj->DeleteFromDB(); GObj->Despawn(0); delete GObj; m_session->GetPlayer()->m_GM_SelectedGO = 0; /* std::stringstream sstext; GameObject *GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } GObj->GetMapMgr()->GetBaseMap()->GetTemplate()->RemoveIndex<GameObject>(GObj); // remove index GObj->Despawn(3600000); GObj->DeleteFromDB(); sObjHolder.Delete<GameObject>(GObj); m_session->GetPlayer()->m_GM_SelectedGO = NULL; GreenSystemMessage(m_session, "GameObject successfully deleted from world and database !"); */ 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::HandleGODelete(const char *args, WorldSession *m_session) { GameObject* GObj = m_session->GetPlayer()->m_GM_SelectedGO; if( !GObj ) { RedSystemMessage(m_session, "No selected GameObject..."); return true; } if(GObj->m_spawn != 0 && GObj->m_spawn->entry == GObj->GetEntry()) { uint32 cellx=float2int32(((_maxX-GObj->m_spawn->x)/_cellSize)); uint32 celly=float2int32(((_maxY-GObj->m_spawn->y)/_cellSize)); GObj->DeleteFromDB(); if(cellx < _sizeX && celly < _sizeY) { CellSpawns * c = GObj->GetMapMgr()->GetBaseMap()->GetSpawnsListAndCreate(cellx, celly); GOSpawnList::iterator itr,itr2; for(itr = c->GOSpawns.begin(); itr != c->GOSpawns.end();) { itr2 = itr; itr++; if((*itr2) == GObj->m_spawn) { c->GOSpawns.erase(itr2); break; } } delete GObj->m_spawn; GObj->m_spawn = NULL; } } GObj->Despawn(0); GObj->Destructor(); GObj = NULL; m_session->GetPlayer()->m_GM_SelectedGO = NULL; 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; }
//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; } }
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; }
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; }