From 30f5dacd69a5c876d9501038dd42d289fa83c963 Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 30 May 2025 19:33:32 +0200 Subject: [PATCH] feat(Scripts/Commands): Add group revive command (#22204) --- .../rev_1748187004151486800.sql | 4 +++ src/server/scripts/Commands/cs_group.cpp | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1748187004151486800.sql diff --git a/data/sql/updates/pending_db_world/rev_1748187004151486800.sql b/data/sql/updates/pending_db_world/rev_1748187004151486800.sql new file mode 100644 index 000000000..10260881e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1748187004151486800.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `command` WHERE `name` = 'group revive'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('group revive', 2, 'Syntax: .group revive\r\n\r\nRevives all players in your group.'); diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index ed32701f2..53d172c76 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -36,6 +36,7 @@ public: { "join", HandleGroupJoinCommand, SEC_GAMEMASTER, Console::No }, { "remove", HandleGroupRemoveCommand, SEC_GAMEMASTER, Console::No }, { "disband", HandleGroupDisbandCommand, SEC_GAMEMASTER, Console::No }, + { "revive", HandleGroupReviveCommand, SEC_GAMEMASTER, Console::No }, { "leader", HandleGroupLeaderCommand, SEC_GAMEMASTER, Console::No } }; @@ -257,6 +258,39 @@ public: return true; } + + static bool HandleGroupReviveCommand(ChatHandler* handler, Optional target) + { + if (!target) + target = PlayerIdentifier::FromTargetOrSelf(handler); + + if (!target) + return false; + + Player* targetPlayer = target->GetConnectedPlayer(); + Group* group = targetPlayer->GetGroup(); + std::string nameLink = handler->playerLink(target->GetName()); + + if (!group) + { + handler->SendErrorMessage(LANG_NOT_IN_GROUP, nameLink); + return false; + } + + for (GroupReference* it = group->GetFirstMember(); it != nullptr; it = it->next()) + { + Player* target = it->GetSource(); + if (target) + { + target->RemoveAurasDueToSpell(27827); // Spirit of Redemption + target->ResurrectPlayer(!AccountMgr::IsPlayerAccount(target->GetSession()->GetSecurity()) ? 1.0f : 0.5f); + target->SpawnCorpseBones(); + target->SaveToDB(false, false); + } + } + + return true; + } }; void AddSC_group_commandscript()