From 4df5302e2f3c4c67fe96198bdda34ebbf9094bf9 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 24 Dec 2022 09:47:13 -0300 Subject: [PATCH] =?UTF-8?q?feat(Scripts/Commands):=20Output=20SpellCastRes?= =?UTF-8?q?ult=20if=20the=20spell=20fails=20to=20=E2=80=A6=20(#14359)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(Scripts/Commands): Output SpellCastResult if the spell fails to cast when using the cast spell commands --- .../rev_1671880843744472600.sql | 4 ++ src/server/game/Miscellaneous/Language.h | 4 +- src/server/scripts/Commands/cs_cast.cpp | 48 ++++++++++++++++--- 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1671880843744472600.sql diff --git a/data/sql/updates/pending_db_world/rev_1671880843744472600.sql b/data/sql/updates/pending_db_world/rev_1671880843744472600.sql new file mode 100644 index 000000000..aa774d394 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1671880843744472600.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `acore_string` WHERE `entry` = 5084; +INSERT INTO `acore_string` (`entry`, `content_default`) VALUES +(5084, 'Spell cast failed! SpellCastResult returned: %s (%u).'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index f907ddaf8..587abd97c 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1148,7 +1148,9 @@ enum AcoreStrings LANG_CMD_CHAR_CHANGE_ACC_SUCCESS = 5083, - // Room for more strings 5083-9999 + LANG_CMD_CAST_ERROR_CODE = 5084, + + // Room for more strings 5084-9999 // Level requirement notifications LANG_SAY_REQ = 6604, diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index eb9d9f6dc..311cfdb9a 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -56,6 +56,17 @@ public: return commandTable; } + static bool CheckSpellCastResult(ChatHandler* handler, SpellCastResult result) + { + if (result != SPELL_CAST_OK) + { + handler->PSendSysMessage(LANG_CMD_CAST_ERROR_CODE, EnumUtils::ToTitle(SpellCastResult(result)), result); + return false; + } + + return true; + } + static bool CheckSpellExistsAndIsValid(ChatHandler* handler, SpellInfo const* spell) { if (!spell) @@ -103,7 +114,11 @@ public: if (!triggerFlags) return false; - handler->GetSession()->GetPlayer()->CastSpell(target, spell->Id, *triggerFlags); + if (!CheckSpellCastResult(handler, handler->GetSession()->GetPlayer()->CastSpell(target, spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; } @@ -125,7 +140,11 @@ public: if (!triggerFlags) return false; - caster->CastSpell(handler->GetSession()->GetPlayer(), spell->Id, *triggerFlags); + if (!CheckSpellCastResult(handler, caster->CastSpell(handler->GetSession()->GetPlayer(), spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; } @@ -141,7 +160,12 @@ public: float x, y, z; handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, dist); - handler->GetSession()->GetPlayer()->CastSpell(x, y, z, spell->Id, *triggerFlags); + + if (!CheckSpellCastResult(handler, handler->GetSession()->GetPlayer()->CastSpell(x, y, z, spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; } @@ -163,7 +187,11 @@ public: if (!triggerFlags) return false; - target->CastSpell(target, spell->Id, *triggerFlags); + if (!CheckSpellCastResult(handler, target->CastSpell(target, spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; } @@ -192,7 +220,11 @@ public: if (!triggerFlags) return false; - caster->CastSpell(caster->GetVictim(), spell->Id, *triggerFlags); + if (!CheckSpellCastResult(handler, caster->CastSpell(caster->GetVictim(), spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; } @@ -214,7 +246,11 @@ public: if (!triggerFlags) return false; - caster->CastSpell(x, y, z, spell->Id, *triggerFlags); + if (!CheckSpellCastResult(handler, caster->CastSpell(x, y, z, spell->Id, *triggerFlags))) + { + handler->SetSentErrorMessage(true); + return false; + } return true; }