From e678b306e9e815aa2222cc930ba13ea1e6e98aac Mon Sep 17 00:00:00 2001 From: acidmanifesto Date: Mon, 25 Oct 2021 19:10:13 -0400 Subject: [PATCH] fix(Core): enable .freeze and .unfreeze gm cmd for NPCS (#8688) --- src/server/scripts/Commands/cs_misc.cpp | 33 +++++++++++++++++++------ 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 208602444..1a3a8a304 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -3049,7 +3049,9 @@ public: static bool HandleFreezeCommand(ChatHandler* handler, char const* args) { std::string name; + Unit* target = handler->getSelectedUnit(); Player* player; + constexpr int Freeze = 9454; char const* TargetName = strtok((char*)args, " "); // get entered name if (!TargetName) // if no name entered use target { @@ -3067,12 +3069,6 @@ public: player = ObjectAccessor::FindPlayerByName(name); } - if (!player) - { - handler->SendSysMessage(LANG_COMMAND_FREEZE_WRONG); - return true; - } - if (player == handler->GetSession()->GetPlayer()) { handler->SendSysMessage(LANG_COMMAND_FREEZE_ERROR); @@ -3082,19 +3078,42 @@ public: if (player && (player != handler->GetSession()->GetPlayer())) { handler->PSendSysMessage(LANG_COMMAND_FREEZE, name.c_str()); - if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(9454)) + if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(Freeze)) Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, player, player); } + if (!target || !handler->GetSession()->GetPlayer()->GetTarget()) + { + handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); + handler->SetSentErrorMessage(true); + return false; + } + + if (target->IsAlive()) + { + handler->PSendSysMessage(LANG_COMMAND_FREEZE, name.c_str()); + if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(Freeze)) + Aura::TryRefreshStackOrCreate(spellInfo, MAX_EFFECT_MASK, target, target); + } + return true; } static bool HandleUnFreezeCommand(ChatHandler* handler, char const* args) { std::string name; + Unit* target = handler->getSelectedUnit(); Player* player; + constexpr int Freeze = 9454; char* targetName = strtok((char*)args, " "); // Get entered name + if (target->HasAura(Freeze)) + { + handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, name.c_str()); + target->RemoveAurasDueToSpell(Freeze); + return true; + } + if (targetName) { name = targetName;