summaryrefslogtreecommitdiff
path: root/src/scripts/Commands/cs_modify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripts/Commands/cs_modify.cpp')
-rw-r--r--src/scripts/Commands/cs_modify.cpp1424
1 files changed, 1424 insertions, 0 deletions
diff --git a/src/scripts/Commands/cs_modify.cpp b/src/scripts/Commands/cs_modify.cpp
new file mode 100644
index 0000000000..0ff10eea97
--- /dev/null
+++ b/src/scripts/Commands/cs_modify.cpp
@@ -0,0 +1,1424 @@
+/*
+ * Copyright (C)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* ScriptData
+Name: modify_commandscript
+%Complete: 100
+Comment: All modify related commands
+Category: commandscripts
+EndScriptData */
+
+#include "Chat.h"
+#include "ObjectMgr.h"
+#include "Opcodes.h"
+#include "Pet.h"
+#include "Player.h"
+#include "ReputationMgr.h"
+#include "ScriptMgr.h"
+
+class modify_commandscript : public CommandScript
+{
+public:
+ modify_commandscript() : CommandScript("modify_commandscript") { }
+
+ ChatCommand* GetCommands() const
+ {
+ static ChatCommand modifyspeedCommandTable[] =
+ {
+ { "fly", SEC_GAMEMASTER, false, &HandleModifyFlyCommand, "", NULL },
+ { "all", SEC_GAMEMASTER, false, &HandleModifyASpeedCommand, "", NULL },
+ { "walk", SEC_GAMEMASTER, false, &HandleModifySpeedCommand, "", NULL },
+ { "backwalk", SEC_GAMEMASTER, false, &HandleModifyBWalkCommand, "", NULL },
+ { "swim", SEC_GAMEMASTER, false, &HandleModifySwimCommand, "", NULL },
+ { "", SEC_GAMEMASTER, false, &HandleModifyASpeedCommand, "", NULL },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+
+ static ChatCommand modifyCommandTable[] =
+ {
+ { "hp", SEC_GAMEMASTER, false, &HandleModifyHPCommand, "", NULL },
+ { "mana", SEC_GAMEMASTER, false, &HandleModifyManaCommand, "", NULL },
+ { "rage", SEC_GAMEMASTER, false, &HandleModifyRageCommand, "", NULL },
+ { "runicpower", SEC_GAMEMASTER, false, &HandleModifyRunicPowerCommand, "", NULL },
+ { "energy", SEC_GAMEMASTER, false, &HandleModifyEnergyCommand, "", NULL },
+ { "money", SEC_GAMEMASTER, false, &HandleModifyMoneyCommand, "", NULL },
+ { "scale", SEC_GAMEMASTER, false, &HandleModifyScaleCommand, "", NULL },
+ { "bit", SEC_GAMEMASTER, false, &HandleModifyBitCommand, "", NULL },
+ { "faction", SEC_GAMEMASTER, false, &HandleModifyFactionCommand, "", NULL },
+ { "spell", SEC_GAMEMASTER, false, &HandleModifySpellCommand, "", NULL },
+ { "talentpoints", SEC_GAMEMASTER, false, &HandleModifyTalentCommand, "", NULL },
+ { "mount", SEC_GAMEMASTER, false, &HandleModifyMountCommand, "", NULL },
+ { "honor", SEC_GAMEMASTER, false, &HandleModifyHonorCommand, "", NULL },
+ { "reputation", SEC_GAMEMASTER, false, &HandleModifyRepCommand, "", NULL },
+ { "arenapoints", SEC_GAMEMASTER, false, &HandleModifyArenaCommand, "", NULL },
+ { "drunk", SEC_GAMEMASTER, false, &HandleModifyDrunkCommand, "", NULL },
+ { "standstate", SEC_GAMEMASTER, false, &HandleModifyStandStateCommand, "", NULL },
+ { "phase", SEC_ADMINISTRATOR, false, &HandleModifyPhaseCommand, "", NULL },
+ { "gender", SEC_GAMEMASTER, false, &HandleModifyGenderCommand, "", NULL },
+ { "speed", SEC_GAMEMASTER, false, NULL, "", modifyspeedCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+ static ChatCommand commandTable[] =
+ {
+ { "morph", SEC_GAMEMASTER, false, &HandleModifyMorphCommand, "", NULL },
+ { "demorph", SEC_GAMEMASTER, false, &HandleDeMorphCommand, "", NULL },
+ { "modify", SEC_GAMEMASTER, false, NULL, "", modifyCommandTable },
+ { NULL, 0, false, NULL, "", NULL }
+ };
+ return commandTable;
+ }
+
+ //Edit Player HP
+ static bool HandleModifyHPCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ int32 hp = atoi((char*)args);
+ int32 hpm = atoi((char*)args);
+
+ if (hp < 1 || hpm < 1 || hpm < hp)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_HP, handler->GetNameLink(target).c_str(), hp, hpm);
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_HP_CHANGED, handler->GetNameLink().c_str(), hp, hpm);
+
+ target->SetMaxHealth(hpm);
+ target->SetHealth(hp);
+
+ return true;
+ }
+
+ //Edit Player Mana
+ static bool HandleModifyManaCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ int32 mana = atoi((char*)args);
+ int32 manam = atoi((char*)args);
+
+ if (mana <= 0 || manam <= 0 || manam < mana)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_MANA, handler->GetNameLink(target).c_str(), mana, manam);
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_MANA_CHANGED, handler->GetNameLink().c_str(), mana, manam);
+
+ target->SetMaxPower(POWER_MANA, manam);
+ target->SetPower(POWER_MANA, mana);
+
+ return true;
+ }
+
+ //Edit Player Energy
+ static bool HandleModifyEnergyCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ // char* pmana = strtok((char*)args, " ");
+ // if (!pmana)
+ // return false;
+
+ // char* pmanaMax = strtok(NULL, " ");
+ // if (!pmanaMax)
+ // return false;
+
+ // int32 manam = atoi(pmanaMax);
+ // int32 mana = atoi(pmana);
+
+ int32 energy = atoi((char*)args)*10;
+ int32 energym = atoi((char*)args)*10;
+
+ if (energy <= 0 || energym <= 0 || energym < energy)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_ENERGY, handler->GetNameLink(target).c_str(), energy/10, energym/10);
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, handler->GetNameLink().c_str(), energy/10, energym/10);
+
+ target->SetMaxPower(POWER_ENERGY, energym);
+ target->SetPower(POWER_ENERGY, energy);
+
+ ;//sLog->outDetail(handler->GetTrinityString(LANG_CURRENT_ENERGY), target->GetMaxPower(POWER_ENERGY));
+
+ return true;
+ }
+
+ //Edit Player Rage
+ static bool HandleModifyRageCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ // char* pmana = strtok((char*)args, " ");
+ // if (!pmana)
+ // return false;
+
+ // char* pmanaMax = strtok(NULL, " ");
+ // if (!pmanaMax)
+ // return false;
+
+ // int32 manam = atoi(pmanaMax);
+ // int32 mana = atoi(pmana);
+
+ int32 rage = atoi((char*)args)*10;
+ int32 ragem = atoi((char*)args)*10;
+
+ if (rage <= 0 || ragem <= 0 || ragem < rage)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_RAGE, handler->GetNameLink(target).c_str(), rage/10, ragem/10);
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, handler->GetNameLink().c_str(), rage/10, ragem/10);
+
+ target->SetMaxPower(POWER_RAGE, ragem);
+ target->SetPower(POWER_RAGE, rage);
+
+ return true;
+ }
+
+ // Edit Player Runic Power
+ static bool HandleModifyRunicPowerCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ int32 rune = atoi((char*)args)*10;
+ int32 runem = atoi((char*)args)*10;
+
+ if (rune <= 0 || runem <= 0 || runem < rune)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_RUNIC_POWER, handler->GetNameLink(target).c_str(), rune/10, runem/10);
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_RUNIC_POWER_CHANGED, handler->GetNameLink().c_str(), rune/10, runem/10);
+
+ target->SetMaxPower(POWER_RUNIC_POWER, runem);
+ target->SetPower(POWER_RUNIC_POWER, rune);
+
+ return true;
+ }
+
+ //Edit Player Faction
+ static bool HandleModifyFactionCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ char* pfactionid = handler->extractKeyFromLink((char*)args, "Hfaction");
+
+ Creature* target = handler->getSelectedCreature();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_SELECT_CREATURE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (!pfactionid)
+ {
+ if (target)
+ {
+ uint32 factionid = target->getFaction();
+ uint32 flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+ uint32 npcflag = target->GetUInt32Value(UNIT_NPC_FLAGS);
+ uint32 dyflag = target->GetUInt32Value(UNIT_DYNAMIC_FLAGS);
+ handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag);
+ }
+ return true;
+ }
+
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 factionid = atoi(pfactionid);
+ uint32 flag;
+
+ char *pflag = strtok(NULL, " ");
+ if (!pflag)
+ flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+ else
+ flag = atoi(pflag);
+
+ char* pnpcflag = strtok(NULL, " ");
+
+ uint32 npcflag;
+ if (!pnpcflag)
+ npcflag = target->GetUInt32Value(UNIT_NPC_FLAGS);
+ else
+ npcflag = atoi(pnpcflag);
+
+ char* pdyflag = strtok(NULL, " ");
+
+ uint32 dyflag;
+ if (!pdyflag)
+ dyflag = target->GetUInt32Value(UNIT_DYNAMIC_FLAGS);
+ else
+ dyflag = atoi(pdyflag);
+
+ if (!sFactionTemplateStore.LookupEntry(factionid))
+ {
+ handler->PSendSysMessage(LANG_WRONG_FACTION, factionid);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag);
+
+ target->setFaction(factionid);
+ target->SetUInt32Value(UNIT_FIELD_FLAGS, flag);
+ target->SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
+ target->SetUInt32Value(UNIT_DYNAMIC_FLAGS, dyflag);
+
+ return true;
+ }
+
+ //Edit Player Spell
+ static bool HandleModifySpellCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ char* pspellflatid = strtok((char*)args, " ");
+ if (!pspellflatid)
+ return false;
+
+ char* pop = strtok(NULL, " ");
+ if (!pop)
+ return false;
+
+ char* pval = strtok(NULL, " ");
+ if (!pval)
+ return false;
+
+ uint16 mark;
+
+ char* pmark = strtok(NULL, " ");
+
+ uint8 spellflatid = atoi(pspellflatid);
+ uint8 op = atoi(pop);
+ uint16 val = atoi(pval);
+ if (!pmark)
+ mark = 65535;
+ else
+ mark = atoi(pmark);
+
+ Player* target = handler->getSelectedPlayer();
+ if (target == NULL)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, handler->GetNameLink().c_str(), spellflatid, val, mark);
+
+ WorldPacket data(SMSG_SET_FLAT_SPELL_MODIFIER, (1+1+2+2));
+ data << uint8(spellflatid);
+ data << uint8(op);
+ data << uint16(val);
+ data << uint16(mark);
+ target->GetSession()->SendPacket(&data);
+
+ return true;
+ }
+
+ //Edit Player TP
+ static bool HandleModifyTalentCommand (ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ int tp = atoi((char*)args);
+ if (tp < 0)
+ return false;
+
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ {
+ // check online security
+ if (handler->HasLowerSecurity(target->ToPlayer(), 0))
+ return false;
+ target->ToPlayer()->SetFreeTalentPoints(tp);
+ target->ToPlayer()->SendTalentsInfoData(false);
+ return true;
+ }
+ else if (target->IsPet())
+ {
+ Unit* owner = target->GetOwner();
+ if (owner && owner->GetTypeId() == TYPEID_PLAYER && ((Pet*)target)->IsPermanentPetFor(owner->ToPlayer()))
+ {
+ // check online security
+ if (handler->HasLowerSecurity(owner->ToPlayer(), 0))
+ return false;
+ ((Pet*)target)->SetFreeTalentPoints(tp);
+ owner->ToPlayer()->SendTalentsInfoData(true);
+ return true;
+ }
+ }
+
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ //Edit Player Aspeed
+ static bool HandleModifyASpeedCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float ASpeed = (float)atof((char*)args);
+
+ if (ASpeed > 50.0f || ASpeed < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (handler->GetSession()->GetSecurity() < SEC_GAMEMASTER)
+ target = handler->GetSession()->GetPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ std::string targetNameLink = handler->GetNameLink(target);
+
+ if (target->IsInFlight())
+ {
+ handler->PSendSysMessage(LANG_CHAR_IN_FLIGHT, targetNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, targetNameLink.c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, handler->GetNameLink().c_str(), ASpeed);
+
+ target->SetSpeed(MOVE_WALK, ASpeed, true);
+ target->SetSpeed(MOVE_RUN, ASpeed, true);
+ target->SetSpeed(MOVE_SWIM, ASpeed, true);
+ //target->SetSpeed(MOVE_TURN, ASpeed, true);
+ target->SetSpeed(MOVE_FLIGHT, ASpeed, true);
+ return true;
+ }
+
+ //Edit Player Speed
+ static bool HandleModifySpeedCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float Speed = (float)atof((char*)args);
+
+ if (Speed > 50.0f || Speed < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (handler->GetSession()->GetSecurity() < SEC_GAMEMASTER)
+ target = handler->GetSession()->GetPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ std::string targetNameLink = handler->GetNameLink(target);
+
+ if (target->IsInFlight())
+ {
+ handler->PSendSysMessage(LANG_CHAR_IN_FLIGHT, targetNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, targetNameLink.c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, handler->GetNameLink().c_str(), Speed);
+
+ target->SetSpeed(MOVE_RUN, Speed, true);
+
+ return true;
+ }
+
+ //Edit Player Swim Speed
+ static bool HandleModifySwimCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float Swim = (float)atof((char*)args);
+
+ if (Swim > 50.0f || Swim < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (handler->GetSession()->GetSecurity() < SEC_GAMEMASTER)
+ target = handler->GetSession()->GetPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ std::string targetNameLink = handler->GetNameLink(target);
+
+ if (target->IsInFlight())
+ {
+ handler->PSendSysMessage(LANG_CHAR_IN_FLIGHT, targetNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, targetNameLink.c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, handler->GetNameLink().c_str(), Swim);
+
+ target->SetSpeed(MOVE_SWIM, Swim, true);
+
+ return true;
+ }
+
+ //Edit Player Walk Speed
+ static bool HandleModifyBWalkCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float BSpeed = (float)atof((char*)args);
+
+ if (BSpeed > 50.0f || BSpeed < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (handler->GetSession()->GetSecurity() < SEC_GAMEMASTER)
+ target = handler->GetSession()->GetPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ std::string targetNameLink = handler->GetNameLink(target);
+
+ if (target->IsInFlight())
+ {
+ handler->PSendSysMessage(LANG_CHAR_IN_FLIGHT, targetNameLink.c_str());
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, targetNameLink.c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, handler->GetNameLink().c_str(), BSpeed);
+
+ target->SetSpeed(MOVE_RUN_BACK, BSpeed, true);
+
+ return true;
+ }
+
+ //Edit Player Fly
+ static bool HandleModifyFlyCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float FSpeed = (float)atof((char*)args);
+
+ if (FSpeed > 50.0f || FSpeed < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayerOrSelf();
+ if (handler->GetSession()->GetSecurity() < SEC_GAMEMASTER)
+ target = handler->GetSession()->GetPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, handler->GetNameLink().c_str(), FSpeed);
+
+ target->SetSpeed(MOVE_FLIGHT, FSpeed, true);
+
+ return true;
+ }
+
+ //Edit Player or Creature Scale
+ static bool HandleModifyScaleCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ float Scale = (float)atof((char*)args);
+ if (Scale > 10.0f || Scale < 0.1f)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (Player* player = target->ToPlayer())
+ {
+ // check online security
+ if (handler->HasLowerSecurity(player, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, handler->GetNameLink(player).c_str());
+ if (handler->needReportToTarget(player))
+ (ChatHandler(player->GetSession())).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, handler->GetNameLink().c_str(), Scale);
+ }
+
+ target->SetObjectScale(Scale);
+
+ return true;
+ }
+
+ //Enable Player mount
+ static bool HandleModifyMountCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ uint16 mId = 1147;
+ float speed = (float)15;
+ uint32 num = 0;
+
+ num = atoi((char*)args);
+ switch (num)
+ {
+ case 1:
+ mId=14340;
+ break;
+ case 2:
+ mId=4806;
+ break;
+ case 3:
+ mId=6471;
+ break;
+ case 4:
+ mId=12345;
+ break;
+ case 5:
+ mId=6472;
+ break;
+ case 6:
+ mId=6473;
+ break;
+ case 7:
+ mId=10670;
+ break;
+ case 8:
+ mId=10719;
+ break;
+ case 9:
+ mId=10671;
+ break;
+ case 10:
+ mId=10672;
+ break;
+ case 11:
+ mId=10720;
+ break;
+ case 12:
+ mId=14349;
+ break;
+ case 13:
+ mId=11641;
+ break;
+ case 14:
+ mId=12244;
+ break;
+ case 15:
+ mId=12242;
+ break;
+ case 16:
+ mId=14578;
+ break;
+ case 17:
+ mId=14579;
+ break;
+ case 18:
+ mId=14349;
+ break;
+ case 19:
+ mId=12245;
+ break;
+ case 20:
+ mId=14335;
+ break;
+ case 21:
+ mId=207;
+ break;
+ case 22:
+ mId=2328;
+ break;
+ case 23:
+ mId=2327;
+ break;
+ case 24:
+ mId=2326;
+ break;
+ case 25:
+ mId=14573;
+ break;
+ case 26:
+ mId=14574;
+ break;
+ case 27:
+ mId=14575;
+ break;
+ case 28:
+ mId=604;
+ break;
+ case 29:
+ mId=1166;
+ break;
+ case 30:
+ mId=2402;
+ break;
+ case 31:
+ mId=2410;
+ break;
+ case 32:
+ mId=2409;
+ break;
+ case 33:
+ mId=2408;
+ break;
+ case 34:
+ mId=2405;
+ break;
+ case 35:
+ mId=14337;
+ break;
+ case 36:
+ mId=6569;
+ break;
+ case 37:
+ mId=10661;
+ break;
+ case 38:
+ mId=10666;
+ break;
+ case 39:
+ mId=9473;
+ break;
+ case 40:
+ mId=9476;
+ break;
+ case 41:
+ mId=9474;
+ break;
+ case 42:
+ mId=14374;
+ break;
+ case 43:
+ mId=14376;
+ break;
+ case 44:
+ mId=14377;
+ break;
+ case 45:
+ mId=2404;
+ break;
+ case 46:
+ mId=2784;
+ break;
+ case 47:
+ mId=2787;
+ break;
+ case 48:
+ mId=2785;
+ break;
+ case 49:
+ mId=2736;
+ break;
+ case 50:
+ mId=2786;
+ break;
+ case 51:
+ mId=14347;
+ break;
+ case 52:
+ mId=14346;
+ break;
+ case 53:
+ mId=14576;
+ break;
+ case 54:
+ mId=9695;
+ break;
+ case 55:
+ mId=9991;
+ break;
+ case 56:
+ mId=6448;
+ break;
+ case 57:
+ mId=6444;
+ break;
+ case 58:
+ mId=6080;
+ break;
+ case 59:
+ mId=6447;
+ break;
+ case 60:
+ mId=4805;
+ break;
+ case 61:
+ mId=9714;
+ break;
+ case 62:
+ mId=6448;
+ break;
+ case 63:
+ mId=6442;
+ break;
+ case 64:
+ mId=14632;
+ break;
+ case 65:
+ mId=14332;
+ break;
+ case 66:
+ mId=14331;
+ break;
+ case 67:
+ mId=8469;
+ break;
+ case 68:
+ mId=2830;
+ break;
+ case 69:
+ mId=2346;
+ break;
+ default:
+ handler->SendSysMessage(LANG_NO_MOUNT);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ handler->PSendSysMessage(LANG_YOU_GIVE_MOUNT, handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_MOUNT_GIVED, handler->GetNameLink().c_str());
+
+ target->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP);
+ target->Mount(mId);
+
+ WorldPacket data(SMSG_FORCE_RUN_SPEED_CHANGE, (8+4+1+4));
+ data.append(target->GetPackGUID());
+ data << (uint32)0;
+ data << (uint8)0; //new 2.1.0
+ data << float(speed);
+ target->SendMessageToSet(&data, true);
+
+ data.Initialize(SMSG_FORCE_SWIM_SPEED_CHANGE, (8+4+4));
+ data.append(target->GetPackGUID());
+ data << (uint32)0;
+ data << float(speed);
+ target->SendMessageToSet(&data, true);
+
+ return true;
+ }
+
+ //Edit Player money
+ static bool HandleModifyMoneyCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ int32 moneyToAdd = 0;
+ if (strchr(args, 'g') || strchr(args, 's') || strchr(args, 'c'))
+ moneyToAdd = MoneyStringToMoney(std::string(args));
+ else
+ moneyToAdd = atoi(args);
+
+ uint32 targetMoney = target->GetMoney();
+
+ if (moneyToAdd < 0)
+ {
+ int32 newmoney = int32(targetMoney) + moneyToAdd;
+
+ ;//sLog->outDebug(LOG_FILTER_GENERAL, handler->GetTrinityString(LANG_CURRENT_MONEY), targetMoney, moneyToAdd, newmoney);
+ if (newmoney <= 0)
+ {
+ handler->PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, handler->GetNameLink().c_str());
+
+ target->SetMoney(0);
+ }
+ else
+ {
+ if (newmoney > MAX_MONEY_AMOUNT)
+ newmoney = MAX_MONEY_AMOUNT;
+
+ handler->PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(moneyToAdd), handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, handler->GetNameLink().c_str(), abs(moneyToAdd));
+ target->SetMoney(newmoney);
+ }
+ }
+ else
+ {
+ handler->PSendSysMessage(LANG_YOU_GIVE_MONEY, moneyToAdd, handler->GetNameLink(target).c_str());
+ if (handler->needReportToTarget(target))
+ ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, handler->GetNameLink().c_str(), moneyToAdd);
+
+ if (moneyToAdd >= MAX_MONEY_AMOUNT)
+ moneyToAdd = MAX_MONEY_AMOUNT;
+
+ if (targetMoney >= uint32(MAX_MONEY_AMOUNT) - moneyToAdd)
+ moneyToAdd -= targetMoney;
+
+ target->ModifyMoney(moneyToAdd);
+ }
+
+ ;//sLog->outDebug(LOG_FILTER_GENERAL, handler->GetTrinityString(LANG_NEW_MONEY), targetMoney, moneyToAdd, target->GetMoney());
+
+ return true;
+ }
+
+ //Edit Unit field
+ static bool HandleModifyBitCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), 0))
+ return false;
+
+ char* pField = strtok((char*)args, " ");
+ if (!pField)
+ return false;
+
+ char* pBit = strtok(NULL, " ");
+ if (!pBit)
+ return false;
+
+ uint16 field = atoi(pField);
+ uint32 bit = atoi(pBit);
+
+ if (field < OBJECT_END || field >= target->GetValuesCount())
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ if (bit < 1 || bit > 32)
+ {
+ handler->SendSysMessage(LANG_BAD_VALUE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (target->HasFlag(field, (1<<(bit-1))))
+ {
+ target->RemoveFlag(field, (1<<(bit-1)));
+ handler->PSendSysMessage(LANG_REMOVE_BIT, bit, field);
+ }
+ else
+ {
+ target->SetFlag(field, (1<<(bit-1)));
+ handler->PSendSysMessage(LANG_SET_BIT, bit, field);
+ }
+ return true;
+ }
+
+ static bool HandleModifyHonorCommand (ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ int32 amount = (uint32)atoi(args);
+
+ target->ModifyHonorPoints(amount);
+
+ handler->PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, handler->GetNameLink(target).c_str(), target->GetHonorPoints());
+
+ return true;
+ }
+
+ static bool HandleModifyDrunkCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ uint8 drunklevel = (uint8)atoi(args);
+ if (drunklevel > 100)
+ drunklevel = 100;
+
+ if (Player* target = handler->getSelectedPlayer())
+ target->SetDrunkValue(drunklevel);
+
+ return true;
+ }
+
+ static bool HandleModifyRepCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // check online security
+ if (handler->HasLowerSecurity(target, 0))
+ return false;
+
+ char* factionTxt = handler->extractKeyFromLink((char*)args, "Hfaction");
+ if (!factionTxt)
+ return false;
+
+ uint32 factionId = atoi(factionTxt);
+
+ int32 amount = 0;
+ char *rankTxt = strtok(NULL, " ");
+ if (!factionTxt || !rankTxt)
+ return false;
+
+ amount = atoi(rankTxt);
+ if ((amount == 0) && (rankTxt[0] != '-') && !isdigit(rankTxt[0]))
+ {
+ std::string rankStr = rankTxt;
+ std::wstring wrankStr;
+ if (!Utf8toWStr(rankStr, wrankStr))
+ return false;
+ wstrToLower(wrankStr);
+
+ int r = 0;
+ amount = -42000;
+ for (; r < MAX_REPUTATION_RANK; ++r)
+ {
+ std::string rank = handler->GetTrinityString(ReputationRankStrIndex[r]);
+ if (rank.empty())
+ continue;
+
+ std::wstring wrank;
+ if (!Utf8toWStr(rank, wrank))
+ continue;
+
+ wstrToLower(wrank);
+
+ if (wrank.substr(0, wrankStr.size()) == wrankStr)
+ {
+ char *deltaTxt = strtok(NULL, " ");
+ if (deltaTxt)
+ {
+ int32 delta = atoi(deltaTxt);
+ if ((delta < 0) || (delta > ReputationMgr::PointsInRank[r] -1))
+ {
+ handler->PSendSysMessage(LANG_COMMAND_FACTION_DELTA, (ReputationMgr::PointsInRank[r]-1));
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ amount += delta;
+ }
+ break;
+ }
+ amount += ReputationMgr::PointsInRank[r];
+ }
+ if (r >= MAX_REPUTATION_RANK)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_FACTION_INVPARAM, rankTxt);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+ }
+
+ FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId);
+
+ if (!factionEntry)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_FACTION_UNKNOWN, factionId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ if (factionEntry->reputationListID < 0)
+ {
+ handler->PSendSysMessage(LANG_COMMAND_FACTION_NOREP_ERROR, factionEntry->name[handler->GetSessionDbcLocale()], factionId);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ target->GetReputationMgr().SetOneFactionReputation(factionEntry, amount, false);
+ target->GetReputationMgr().SendState(target->GetReputationMgr().GetState(factionEntry));
+ handler->PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[handler->GetSessionDbcLocale()], factionId,
+ handler->GetNameLink(target).c_str(), target->GetReputationMgr().GetReputation(factionEntry));
+ return true;
+ }
+
+ //morph creature or player
+ static bool HandleModifyMorphCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ uint16 display_id = (uint16)atoi((char*)args);
+
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ target = handler->GetSession()->GetPlayer();
+
+ // check online security
+ else if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), 0))
+ return false;
+
+ target->SetDisplayId(display_id);
+
+ return true;
+ }
+
+ //set temporary phase mask for player
+ static bool HandleModifyPhaseCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ uint32 phasemask = (uint32)atoi((char*)args);
+
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ target = handler->GetSession()->GetPlayer();
+
+ // check online security
+ else if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), 0))
+ return false;
+
+ target->SetPhaseMask(phasemask, true);
+
+ return true;
+ }
+
+ //change standstate
+ static bool HandleModifyStandStateCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ uint32 anim_id = atoi((char*)args);
+ handler->GetSession()->GetPlayer()->SetUInt32Value(UNIT_NPC_EMOTESTATE, anim_id);
+
+ return true;
+ }
+
+ static bool HandleModifyArenaCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ int32 amount = (uint32)atoi(args);
+
+ target->ModifyArenaPoints(amount);
+
+ handler->PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, handler->GetNameLink(target).c_str(), target->GetArenaPoints());
+
+ return true;
+ }
+
+ static bool HandleModifyGenderCommand(ChatHandler* handler, const char* args)
+ {
+ if (!*args)
+ return false;
+
+ Player* target = handler->getSelectedPlayer();
+
+ if (!target)
+ {
+ handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ PlayerInfo const* info = sObjectMgr->GetPlayerInfo(target->getRace(), target->getClass());
+ if (!info)
+ return false;
+
+ char const* gender_str = (char*)args;
+ int gender_len = strlen(gender_str);
+
+ Gender gender;
+
+ if (!strncmp(gender_str, "male", gender_len)) // MALE
+ {
+ if (target->getGender() == GENDER_MALE)
+ return true;
+
+ gender = GENDER_MALE;
+ }
+ else if (!strncmp(gender_str, "female", gender_len)) // FEMALE
+ {
+ if (target->getGender() == GENDER_FEMALE)
+ return true;
+
+ gender = GENDER_FEMALE;
+ }
+ else
+ {
+ handler->SendSysMessage(LANG_MUST_MALE_OR_FEMALE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ // Set gender
+ target->SetByteValue(UNIT_FIELD_BYTES_0, 2, gender);
+ target->SetByteValue(PLAYER_BYTES_3, 0, gender);
+
+ // Change display ID
+ target->InitDisplayIds();
+
+ char const* gender_full = gender ? "female" : "male";
+
+ handler->PSendSysMessage(LANG_YOU_CHANGE_GENDER, handler->GetNameLink(target).c_str(), gender_full);
+
+ if (handler->needReportToTarget(target))
+ (ChatHandler(target->GetSession())).PSendSysMessage(LANG_YOUR_GENDER_CHANGED, gender_full, handler->GetNameLink().c_str());
+
+ return true;
+ }
+
+ //demorph player or unit
+ static bool HandleDeMorphCommand(ChatHandler* handler, const char* /*args*/)
+ {
+ Unit* target = handler->getSelectedUnit();
+ if (!target)
+ target = handler->GetSession()->GetPlayer();
+
+ // check online security
+ else if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), 0))
+ return false;
+
+ target->DeMorph();
+ return true;
+ }
+};
+
+void AddSC_modify_commandscript()
+{
+ new modify_commandscript();
+}