From 6e0853dd764aef5bcfabc12cdfcb62586b452e98 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 27 Jul 2024 02:00:37 +0300 Subject: [PATCH] feat(Scripts/Commands): .aura stack - Modify aura stacks (#19462) * feat(Scripts/Commands): .aurastack - Modify aura stacks * aura stack * remove aur check * {} Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --------- Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- .../rev_1721586059640959700.sql | 9 +++ src/server/game/Miscellaneous/Language.h | 7 ++- src/server/scripts/Commands/cs_misc.cpp | 55 ++++++++++++++++++- 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1721586059640959700.sql diff --git a/data/sql/updates/pending_db_world/rev_1721586059640959700.sql b/data/sql/updates/pending_db_world/rev_1721586059640959700.sql new file mode 100644 index 000000000..5888234d3 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1721586059640959700.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `command` WHERE `name`='aura stack'; +INSERT INTO `command` VALUES ('aura stack', 2, 'Syntax: .aurastack #spellid #stacks\r\n\r\nModify #stacks of an already applied #spellid to the selected Unit.'); + +DELETE FROM `acore_string` WHERE `entry` IN (373,374,375); +INSERT INTO `acore_string` (`entry`, `content_default`) VALUES +(373, 'Target unit does not have aura {}!'), +(374, 'No stack amount specified!'), +(375, 'Spell {} cannot have stacks!'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index d47db9bb6..fca47b32c 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -415,7 +415,12 @@ enum AcoreStrings LANG_COMMAND_RESET_ITEMS_ALL_BAGS = 372, // [END] reset items command strings - // Room for more level 2 373-399 not used + // .aura stack + LANG_COMMAND_AURASTACK_NO_AURA = 373, + LANG_COMMAND_AURASTACK_NO_STACK = 374, + LANG_COMMAND_AURASTACK_CANT_STACK = 375, + + // Room for more level 2 376-399 not used // level 3 chat LANG_SCRIPTS_RELOADED = 400, diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 41e1168fa..572bc3376 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -87,12 +87,18 @@ public: ChatCommandTable GetCommands() const override { + static ChatCommandTable auraCommandTable = + { + { "stack", HandleAuraStacksCommand, SEC_GAMEMASTER, Console::No }, + { "", HandleAuraCommand, SEC_GAMEMASTER, Console::No } + }; + static ChatCommandTable commandTable = { { "commentator", HandleCommentatorCommand, SEC_MODERATOR, Console::No }, { "dev", HandleDevCommand, SEC_ADMINISTRATOR, Console::No }, { "gps", HandleGPSCommand, SEC_MODERATOR, Console::No }, - { "aura", HandleAuraCommand, SEC_GAMEMASTER, Console::No }, + { "aura", auraCommandTable }, { "unaura", HandleUnAuraCommand, SEC_GAMEMASTER, Console::No }, { "appear", HandleAppearCommand, SEC_MODERATOR, Console::No }, { "summon", HandleSummonCommand, SEC_GAMEMASTER, Console::No }, @@ -129,7 +135,7 @@ public: { "cometome", HandleComeToMeCommand, SEC_ADMINISTRATOR, Console::No }, { "damage", HandleDamageCommand, SEC_GAMEMASTER, Console::No }, { "combatstop", HandleCombatStopCommand, SEC_GAMEMASTER, Console::Yes }, - { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes }, { "freeze", HandleFreezeCommand, SEC_GAMEMASTER, Console::No }, { "unfreeze", HandleUnFreezeCommand, SEC_GAMEMASTER, Console::No }, { "possess", HandlePossessCommand, SEC_GAMEMASTER, Console::No }, @@ -653,6 +659,51 @@ public: return true; } + static bool HandleAuraStacksCommand(ChatHandler* handler, SpellInfo const* spell, int16 stacks) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + if (!SpellMgr::IsSpellValid(spell)) + { + handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id); + return false; + } + + if (!stacks) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_STACK); + return false; + } + + Unit* target = handler->getSelectedUnit(); + if (!target) + { + handler->SendErrorMessage(LANG_SELECT_CHAR_OR_CREATURE); + return false; + } + + Aura* aur = target->GetAura(spell->Id); + if (!aur) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_AURA, spell->Id); + return false; + } + + if (!spell->StackAmount) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_CANT_STACK, spell->Id); + return false; + } + + aur->ModStackAmount(stacks); + + return true; + } + static bool HandleUnAuraCommand(ChatHandler* handler, Variant spells) { Unit* target = handler->getSelectedUnit();