diff options
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_wp.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index bd78a177d57..2945c116ab7 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -29,6 +29,7 @@ EndScriptData */ #include "Language.h" #include "Map.h" #include "MotionMaster.h" +#include "ObjectMgr.h" #include "Player.h" #include "RBAC.h" #include "WaypointDefines.h" @@ -245,43 +246,45 @@ public: static bool HandleWpUnLoadCommand(ChatHandler* handler, char const* /*args*/) { - Creature* target = handler->getSelectedCreature(); WorldDatabasePreparedStatement* stmt = nullptr; if (!target) { - handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select target."); + handler->PSendSysMessage("%s%s|r", "|cff33ffff", "You must select a target."); return true; } - uint32 guildLow = target->GetSpawnId(); + ObjectGuid::LowType guidLow = target->GetSpawnId(); + if (!guidLow) + { + handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target is not saved to DB."); + return true; + } - if (target->GetCreatureAddon()) + CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(guidLow); + if (!addon || addon->path_id == 0) { - if (target->GetCreatureAddon()->path_id != 0) - { - stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON); - stmt->setUInt32(0, guildLow); - WorldDatabase.Execute(stmt); + handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target does not have a loaded path."); + return true; + } - target->UpdateCurrentWaypointInfo(0, 0); + stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON); + stmt->setUInt32(0, guidLow); + WorldDatabase.Execute(stmt); - stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE); - stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE)); - stmt->setUInt32(1, guildLow); - WorldDatabase.Execute(stmt); + target->UpdateCurrentWaypointInfo(0, 0); - target->LoadPath(0); - target->SetDefaultMovementType(IDLE_MOTION_TYPE); - target->GetMotionMaster()->MoveTargetedHome(); - target->GetMotionMaster()->Initialize(); - target->Say("Path unloaded.", LANG_UNIVERSAL); + stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE); + stmt->setUInt8(0, uint8(IDLE_MOTION_TYPE)); + stmt->setUInt32(1, guidLow); + WorldDatabase.Execute(stmt); - return true; - } - handler->PSendSysMessage("%s%s|r", "|cffff33ff", "Target have no loaded path."); - } + target->LoadPath(0); + target->SetDefaultMovementType(IDLE_MOTION_TYPE); + target->GetMotionMaster()->MoveTargetedHome(); + target->GetMotionMaster()->Initialize(); + target->Say("Path unloaded.", LANG_UNIVERSAL); return true; } |
