diff options
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r-- | src/server/scripts/Commands/cs_gobject.cpp | 62 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_npc.cpp | 57 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_wp.cpp | 67 |
4 files changed, 78 insertions, 110 deletions
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 324d6ede64c..0647eb8e3c9 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -49,6 +49,7 @@ EndScriptData */ bool HandleNpcSpawnGroup(ChatHandler* handler, char const* args); bool HandleNpcDespawnGroup(ChatHandler* handler, char const* args); +using namespace Trinity::ChatCommands; class gobject_commandscript : public CommandScript { public: @@ -340,49 +341,36 @@ public: } //delete object by selection or guid - static bool HandleGameObjectDeleteCommand(ChatHandler* handler, char const* args) + static bool HandleGameObjectDeleteCommand(ChatHandler* handler, Variant<Hyperlink<gameobject>, ObjectGuid::LowType> spawnId) { - // 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 = atoull(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) + if (GameObject* object = handler->GetObjectFromPlayerMapByDbGuid(spawnId)) { - handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, std::to_string(guidLow).c_str()); - handler->SetSentErrorMessage(true); - return false; - } - - ObjectGuid ownerGuid = object->GetOwnerGUID(); - if (!ownerGuid.IsEmpty()) - { - Unit* owner = ObjectAccessor::GetUnit(*player, ownerGuid); - if (!owner || !ownerGuid.IsPlayer()) + Player const* const player = handler->GetSession()->GetPlayer(); + ObjectGuid ownerGuid = object->GetOwnerGUID(); + if (!ownerGuid.IsEmpty()) { - handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.ToString().c_str(), object->GetGUID().ToString().c_str()); - handler->SetSentErrorMessage(true); - return false; + Unit* owner = ObjectAccessor::GetUnit(*player, ownerGuid); + if (!owner || !ownerGuid.IsPlayer()) + { + handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), spawnId); + handler->SetSentErrorMessage(true); + return false; + } + owner->RemoveGameObject(object, false); } - - owner->RemoveGameObject(object, false); } - object->SetRespawnTime(0); // not save respawn time - object->Delete(); - object->DeleteFromDB(); - - handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, std::to_string(guidLow).c_str()); - - return true; + if (GameObject::DeleteFromDB(spawnId)) + { + handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, std::to_string(spawnId)); + return true; + } + else + { + handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, std::to_string(spawnId)); + handler->SetSentErrorMessage(true); + return false; + } } //turn selected object diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index b487a319a22..793b4f02838 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1983,7 +1983,7 @@ public: uint32 const gridId = Trinity::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId(); for (RespawnInfo* info : data) if (info->gridId == gridId) - player->GetMap()->ForceRespawn(info->type, info->spawnId); + player->GetMap()->RemoveRespawnTime(info, true); } return true; diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 64330b8aa64..6530652fe71 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -128,6 +128,7 @@ bool HandleNpcDespawnGroup(ChatHandler* handler, char const* args) return true; } +using namespace Trinity::ChatCommands; class npc_commandscript : public CommandScript { public: @@ -429,48 +430,40 @@ public: return true; } - static bool HandleNpcDeleteCommand(ChatHandler* handler, char const* args) + static bool HandleNpcDeleteCommand(ChatHandler* handler, Optional<Variant<Hyperlink<creature>, ObjectGuid::LowType>> spawnIdArg) { - Creature* creature = nullptr; - - if (*args) + ObjectGuid::LowType spawnId; + if (spawnIdArg) + spawnId = *spawnIdArg; + else { - // number or [name] Shift-click form |color|Hcreature:creature_guid|h[name]|h|r - char* cId = handler->extractKeyFromLink((char*)args, "Hcreature"); - if (!cId) - return false; - - ObjectGuid::LowType lowguid = atoull(cId); - if (!lowguid) + Creature* creature = handler->getSelectedCreature(); + if (!creature || creature->IsPet() || creature->IsTotem()) + { + handler->SendSysMessage(LANG_SELECT_CREATURE); + handler->SetSentErrorMessage(true); return false; - // force respawn to make sure we find something - handler->GetSession()->GetPlayer()->GetMap()->ForceRespawn(SPAWN_TYPE_CREATURE, lowguid); - // then try to find it - creature = handler->GetCreatureFromPlayerMapByDbGuid(lowguid); + } + if (TempSummon* summon = creature->ToTempSummon()) + { + summon->UnSummon(); + handler->SendSysMessage(LANG_COMMAND_DELCREATMESSAGE); + return true; + } + spawnId = creature->GetSpawnId(); } - else - creature = handler->getSelectedCreature(); - if (!creature || creature->IsPet() || creature->IsTotem()) + if (Creature::DeleteFromDB(spawnId)) { - handler->SendSysMessage(LANG_SELECT_CREATURE); - handler->SetSentErrorMessage(true); - return false; + handler->SendSysMessage(LANG_COMMAND_DELCREATMESSAGE); + return true; } - - if (TempSummon* summon = creature->ToTempSummon()) - summon->UnSummon(); else { - // Delete the creature - creature->CombatStop(); - creature->DeleteFromDB(); - creature->AddObjectToRemoveList(); + handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, std::to_string(spawnId)); + handler->SetSentErrorMessage(true); + return false; } - - handler->SendSysMessage(LANG_COMMAND_DELCREATMESSAGE); - - return true; } //del item from vendor list diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index ad3ccf37669..949061302e6 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -637,21 +637,27 @@ public: { handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff%u|r", pathid); - target->DeleteFromDB(); - target->AddObjectToRemoveList(); - - stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA); - stmt->setUInt32(0, pathid); - stmt->setUInt32(1, point); - WorldDatabase.Execute(stmt); + if (Creature::DeleteFromDB(target->GetSpawnId())) + { + stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA); + stmt->setUInt32(0, pathid); + stmt->setUInt32(1, point); + WorldDatabase.Execute(stmt); - stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT); - stmt->setUInt32(0, pathid); - stmt->setUInt32(1, point); - WorldDatabase.Execute(stmt); + stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POINT); + stmt->setUInt32(0, pathid); + stmt->setUInt32(1, point); + WorldDatabase.Execute(stmt); - handler->PSendSysMessage(LANG_WAYPOINT_REMOVED); - return true; + handler->SendSysMessage(LANG_WAYPOINT_REMOVED); + return true; + } + else + { + handler->SendSysMessage(LANG_WAYPOINT_NOTREMOVED); + handler->SetSentErrorMessage(true); + return false; + } } // del if (show == "move") @@ -663,8 +669,12 @@ public: // What to do: // Move the visual spawnpoint // Respawn the owner of the waypoints - target->DeleteFromDB(); - target->AddObjectToRemoveList(); + if (!Creature::DeleteFromDB(target->GetSpawnId())) + { + handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); + handler->SetSentErrorMessage(true); + return false; + } // re-create Creature* wpCreature = Creature::CreateCreature(VISUAL_WAYPOINT, map, chr->GetPosition()); @@ -842,22 +852,10 @@ public: { Field* fields = result2->Fetch(); ObjectGuid::LowType wpguid = fields[0].GetUInt64(); - Creature* creature = handler->GetCreatureFromPlayerMapByDbGuid(wpguid); - - if (!creature) + if (!Creature::DeleteFromDB(wpguid)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, std::to_string(wpguid).c_str()); hasError = true; - - stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE); - stmt->setUInt64(0, wpguid); - WorldDatabase.Execute(stmt); - } - else - { - creature->CombatStop(); - creature->DeleteFromDB(); - creature->AddObjectToRemoveList(); } } @@ -1061,21 +1059,10 @@ public: Field* fields = result->Fetch(); ObjectGuid::LowType lowguid = fields[0].GetUInt64(); - Creature* creature = handler->GetCreatureFromPlayerMapByDbGuid(lowguid); - if (!creature) + if (!Creature::DeleteFromDB(lowguid)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, std::to_string(lowguid).c_str()); hasError = true; - - stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE); - stmt->setUInt64(0, lowguid); - WorldDatabase.Execute(stmt); - } - else - { - creature->CombatStop(); - creature->DeleteFromDB(); - creature->AddObjectToRemoveList(); } } while (result->NextRow()); |