aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-11-11 22:41:05 +0100
committerShauren <shauren.trinity@gmail.com>2017-11-11 22:41:05 +0100
commitbf0ae32d189d4579920e027f9d2dbfacc5552df3 (patch)
treee08f1ed944c1d96daf3b6106144dc1965d32fd56 /src/server/scripts/Commands
parentd947ba42927d75ccd7293bba65feee2ac6bbf46c (diff)
Core/Commands: Added .modify power command allowing to change any power as long as player class can use it
* Power names are taken from PowerType.db2 (lowercase, using _ is optional) Closes #20833
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index 69eba057f6e..be836943087 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -74,6 +74,7 @@ public:
{ "standstate", rbac::RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "" },
{ "talentpoints", rbac::RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "" },
{ "xp", rbac::RBAC_PERM_COMMAND_MODIFY_XP, false, &HandleModifyXPCommand, "" },
+ { "power", rbac::RBAC_PERM_COMMAND_MODIFY_POWER, false, &HandleModifyPowerCommand, "" },
};
static std::vector<ChatCommand> commandTable =
{
@@ -997,6 +998,81 @@ public:
target->GiveXP(xp, nullptr);
return true;
}
+
+ // Edit Player Power
+ static bool HandleModifyPowerCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
+ return false;
+
+ char* powerTypeToken = strtok((char*)args, " ");
+ if (!powerTypeToken)
+ return false;
+
+ PowerTypeEntry const* powerType = sDB2Manager.GetPowerTypeByName(powerTypeToken);
+ if (!powerType)
+ {
+ handler->SendSysMessage(LANG_INVALID_POWER_NAME);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (target->GetPowerIndex(powerType->PowerTypeEnum) == MAX_POWERS)
+ {
+ handler->SendSysMessage(LANG_INVALID_POWER_NAME);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ char* amount = strtok(nullptr, " ");
+ if (!amount)
+ return false;
+
+ int32 powerAmount = atoi(amount);
+
+ if (powerAmount < 1)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ std::string formattedPowerName = powerType->PowerTypeToken;
+ bool upperCase = true;
+ for (char& c : formattedPowerName)
+ {
+ if (upperCase)
+ {
+ c = char(::toupper(c));
+ upperCase = false;
+ }
+ else
+ c = char(::tolower(c));
+
+ if (c == '_')
+ {
+ c = ' ';
+ upperCase = true;
+ }
+ }
+
+ NotifyModification(handler, target, LANG_YOU_CHANGE_POWER, LANG_YOUR_POWER_CHANGED, formattedPowerName.c_str(), powerAmount, powerAmount);
+ powerAmount *= powerType->UIModifier;
+ target->SetMaxPower(Powers(powerType->PowerTypeEnum), powerAmount);
+ target->SetPower(Powers(powerType->PowerTypeEnum), powerAmount);
+ return true;
+ }
};
void AddSC_modify_commandscript()