0% found this document useful (0 votes)
34 views

Cs Modify

This document describes a modify command script for a game that allows game masters to modify player attributes like health, mana, speed, faction, etc. through chat commands. It includes functions to handle commands for modifying health, mana, energy, rage, runic power and other player stats. The script checks permissions and reports the modifications to both the game master and target player.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views

Cs Modify

This document describes a modify command script for a game that allows game masters to modify player attributes like health, mana, speed, faction, etc. through chat commands. It includes functions to handle commands for modifying health, mana, energy, rage, runic power and other player stats. The script checks permissions and reports the modifications to both the game master and target player.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 19

/*

* This file is part of the AzerothCore Project. See AUTHORS file for Copyright
information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by the
* Free Software Foundation; either version 3 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 Affero 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 "AccountMgr.h"
#include "Chat.h"
#include "ObjectMgr.h"
#include "Opcodes.h"
#include "Pet.h"
#include "Player.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "StringConvert.h"

using namespace Acore::ChatCommands;

class modify_commandscript : public CommandScript


{
public:
modify_commandscript() : CommandScript("modify_commandscript") { }

ChatCommandTable GetCommands() const override


{
static ChatCommandTable modifyspeedCommandTable =
{
{ "fly", HandleModifyFlyCommand, SEC_GAMEMASTER,
Console::No },
{ "all", HandleModifyASpeedCommand, SEC_GAMEMASTER,
Console::No },
{ "walk", HandleModifySpeedCommand, SEC_GAMEMASTER,
Console::No },
{ "backwalk", HandleModifyBWalkCommand, SEC_GAMEMASTER,
Console::No },
{ "swim", HandleModifySwimCommand, SEC_GAMEMASTER,
Console::No },
{ "", HandleModifyASpeedCommand, SEC_GAMEMASTER,
Console::No }
};
static ChatCommandTable modifyCommandTable =
{
{ "hp", HandleModifyHPCommand, SEC_GAMEMASTER,
Console::No },
{ "mana", HandleModifyManaCommand, SEC_GAMEMASTER,
Console::No },
{ "rage", HandleModifyRageCommand, SEC_GAMEMASTER,
Console::No },
{ "runicpower", HandleModifyRunicPowerCommand, SEC_GAMEMASTER,
Console::No },
{ "energy", HandleModifyEnergyCommand, SEC_GAMEMASTER,
Console::No },
{ "money", HandleModifyMoneyCommand, SEC_GAMEMASTER,
Console::No },
{ "scale", HandleModifyScaleCommand, SEC_GAMEMASTER,
Console::No },
{ "bit", HandleModifyBitCommand, SEC_GAMEMASTER,
Console::No },
{ "faction", HandleModifyFactionCommand,
SEC_ADMINISTRATOR, Console::No },
{ "spell", HandleModifySpellCommand, SEC_CONSOLE,
Console::No },
{ "talentpoints", HandleModifyTalentCommand, SEC_GAMEMASTER,
Console::No },
{ "mount", HandleModifyMountCommand, SEC_GAMEMASTER,
Console::No },
{ "honor", HandleModifyHonorCommand, SEC_GAMEMASTER,
Console::No },
{ "reputation", HandleModifyRepCommand, SEC_GAMEMASTER,
Console::No },
{ "arenapoints", HandleModifyArenaCommand, SEC_GAMEMASTER,
Console::No },
{ "drunk", HandleModifyDrunkCommand, SEC_GAMEMASTER,
Console::No },
{ "standstate", HandleModifyStandStateCommand, SEC_GAMEMASTER,
Console::No },
{ "phase", HandleModifyPhaseCommand, SEC_GAMEMASTER,
Console::No },
{ "gender", HandleModifyGenderCommand, SEC_GAMEMASTER,
Console::No },
{ "speed", modifyspeedCommandTable }
};

static ChatCommandTable morphCommandTable =


{
{ "reset", HandleMorphResetCommand, SEC_MODERATOR,
Console::No },
{ "target", HandleMorphTargetCommand, SEC_MODERATOR,
Console::No }
};

static ChatCommandTable commandTable =


{
{ "morph", morphCommandTable },
{ "modify", modifyCommandTable }
};

return commandTable;
}

template<typename... Args>
static void NotifyModification(ChatHandler* handler, Unit* target, AcoreStrings
resourceMessage, AcoreStrings resourceReportMessage, Args&&... args)
{
if (Player* player = target->ToPlayer())
{
handler->PSendSysMessage(resourceMessage, std::forward<Args>(args)...,
handler->GetNameLink(player).c_str());

if (handler->needReportToTarget(player))
{
ChatHandler(player-
>GetSession()).PSendSysMessage(resourceReportMessage, handler-
>GetNameLink().c_str(), std::forward<Args>(args)...);
}
}
}

static bool CheckModifyInt32(ChatHandler* handler, Player* target, int32


modifyValue)
{
if (modifyValue < 1)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}

if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}

if (handler->HasLowerSecurity(target))
{
return false;
}

return true;
}

//Edit Player HP
static bool HandleModifyHPCommand(ChatHandler* handler, int32 healthPoints)
{
Player* target = handler->getSelectedPlayer();

if (!CheckModifyInt32(handler, target, healthPoints))


{
return false;
}

handler->PSendSysMessage(LANG_YOU_CHANGE_HP, handler-
>GetNameLink(target).c_str(), healthPoints, healthPoints);

if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_HP_CHANGED, handler-
>GetNameLink().c_str(), healthPoints, healthPoints);
}

target->SetMaxHealth(healthPoints);
target->SetHealth(healthPoints);

return true;
}

//Edit Player Mana


static bool HandleModifyManaCommand(ChatHandler* handler, int32 manaPoints)
{
Player* target = handler->getSelectedPlayer();

if (!CheckModifyInt32(handler, target, manaPoints))


{
return false;
}

handler->PSendSysMessage(LANG_YOU_CHANGE_MANA, handler-
>GetNameLink(target).c_str(), manaPoints, manaPoints);

if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_MANA_CHANGED, handler-
>GetNameLink().c_str(), manaPoints, manaPoints);
}

target->SetMaxPower(POWER_MANA, manaPoints);
target->SetPower(POWER_MANA, manaPoints);

return true;
}

//Edit Player Energy


static bool HandleModifyEnergyCommand(ChatHandler* handler, int32 energyPoints)
{
Player* target = handler->getSelectedPlayer();

if (!CheckModifyInt32(handler, target, energyPoints))


{
return false;
}

energyPoints *= 10;

handler->PSendSysMessage(LANG_YOU_CHANGE_ENERGY, handler-
>GetNameLink(target).c_str(), energyPoints / 10, energyPoints / 10);

if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, handler-
>GetNameLink().c_str(), energyPoints / 10, energyPoints / 10);
}
target->SetMaxPower(POWER_ENERGY, energyPoints);
target->SetPower(POWER_ENERGY, energyPoints);

LOG_DEBUG("misc", handler->GetAcoreString(LANG_CURRENT_ENERGY), target-


>GetMaxPower(POWER_ENERGY));

return true;
}

//Edit Player Rage


static bool HandleModifyRageCommand(ChatHandler* handler, int32 ragePoints)
{
Player* target = handler->getSelectedPlayer();

if (!CheckModifyInt32(handler, target, ragePoints))


{
return false;
}

ragePoints *= 10;

handler->PSendSysMessage(LANG_YOU_CHANGE_RAGE, handler-
>GetNameLink(target).c_str(), ragePoints / 10, ragePoints / 10);

if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, handler-
>GetNameLink().c_str(), ragePoints / 10, ragePoints / 10);
}

target->SetMaxPower(POWER_RAGE, ragePoints);
target->SetPower(POWER_RAGE, ragePoints);

return true;
}

// Edit Player Runic Power


static bool HandleModifyRunicPowerCommand(ChatHandler* handler, int32
runePoints)
{
Player* target = handler->getSelectedPlayer();

if (!CheckModifyInt32(handler, target, runePoints))


{
return false;
}

runePoints *= 10;

handler->PSendSysMessage(LANG_YOU_CHANGE_RUNIC_POWER, handler-
>GetNameLink(target).c_str(), runePoints / 10, runePoints / 10);

if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_RUNIC_POWER_CHANGED, handler-
>GetNameLink().c_str(), runePoints / 10, runePoints / 10);
}

target->SetMaxPower(POWER_RUNIC_POWER, runePoints);
target->SetPower(POWER_RUNIC_POWER, runePoints);

return true;
}

//Edit Player Faction


static bool HandleModifyFactionCommand(ChatHandler* handler, Optional<uint32>
factionID, Optional<uint32> flagID, Optional<uint32> npcFlagID, Optional<uint32>
dynamicFlagID)
{
Creature* target = handler->getSelectedCreature();
if (!target)
{
handler->SendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}

if (!factionID)
{
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-
>GetGUID().GetCounter(), factionid, flag, npcflag, dyflag);
return true;
}

uint32 factionid = factionID.value();


uint32 flag;
uint32 npcflag;
uint32 dyflag;

auto pflag = flagID;


if (!pflag)
flag = target->GetUInt32Value(UNIT_FIELD_FLAGS);
else
flag = *pflag;

auto pnpcflag = npcFlagID;


if (!pnpcflag)
npcflag = target->GetUInt32Value(UNIT_NPC_FLAGS);
else
npcflag = *npcFlagID;

auto pdyflag = dynamicFlagID;


if (!pdyflag)
dyflag = target->GetUInt32Value(UNIT_DYNAMIC_FLAGS);
else
dyflag = *dynamicFlagID;

if (!sFactionTemplateStore.LookupEntry(factionid))
{
handler->PSendSysMessage(LANG_WRONG_FACTION, factionid);
handler->SetSentErrorMessage(true);
return false;
}

handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target-
>GetGUID().GetCounter(), 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, uint8 spellFlatID,
uint8 op, uint16 val, Optional<uint16> mark)
{
Player* target = handler->getSelectedPlayer();
if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}

// check online security


if (handler->HasLowerSecurity(target))
{
return false;
}

handler->PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellFlatID, val,


mark ? *mark : 65535, handler->GetNameLink(target).c_str());
if (handler->needReportToTarget(target))
{
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, handler-
>GetNameLink().c_str(), spellFlatID, val, mark ? *mark : 65535);
}

WorldPacket data(SMSG_SET_FLAT_SPELL_MODIFIER, (1 + 1 + 2 + 2));


data << uint8(spellFlatID);
data << uint8(op);
data << uint16(val);
data << uint16(mark ? *mark : 65535);
target->GetSession()->SendPacket(&data);

return true;
}

//Edit Player TP
static bool HandleModifyTalentCommand(ChatHandler* handler, uint32
talentPoints)
{
if (!talentPoints)
{
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()))
{
return false;
}

target->ToPlayer()->SetFreeTalentPoints(talentPoints);
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()))
return false;
((Pet*)target)->SetFreeTalentPoints(talentPoints);
owner->ToPlayer()->SendTalentsInfoData(true);
return true;
}
}

handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}

static bool CheckModifySpeed(ChatHandler* handler, Unit* target, float speed,


float minimumBound, float maximumBound, bool checkInFlight = true)
{
if (speed > maximumBound || speed < minimumBound)
{
handler->SendSysMessage(LANG_BAD_VALUE);
handler->SetSentErrorMessage(true);
return false;
}

if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}

if (Player* player = target->ToPlayer())


{
// check online security
if (handler->HasLowerSecurity(player))
{
return false;
}

if (player->IsInFlight() && checkInFlight)


{
handler->PSendSysMessage(LANG_CHAR_IN_FLIGHT, handler-
>GetNameLink(player).c_str());
handler->SetSentErrorMessage(true);
return false;
}
}

return true;
}

//Edit Player Aspeed


static bool HandleModifyASpeedCommand(ChatHandler* handler, float allSpeed)
{
Player* target = handler->getSelectedPlayerOrSelf();
if (CheckModifySpeed(handler, target, allSpeed, 0.1f, 50.0f))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_ASPEED,
LANG_YOURS_ASPEED_CHANGED, allSpeed);
target->SetSpeed(MOVE_WALK, allSpeed);
target->SetSpeed(MOVE_RUN, allSpeed);
target->SetSpeed(MOVE_SWIM, allSpeed);
target->SetSpeed(MOVE_FLIGHT, allSpeed);
return true;
}

return false;
}

//Edit Player Speed


static bool HandleModifySpeedCommand(ChatHandler* handler, float speed)
{
Player* target = handler->getSelectedPlayerOrSelf();
if (CheckModifySpeed(handler, target, speed, 0.1f, 50.0f))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_SPEED,
LANG_YOURS_SPEED_CHANGED, speed);
target->SetSpeedRate(MOVE_RUN, speed);
return true;
}

return false;
}

//Edit Player Swim Speed


static bool HandleModifySwimCommand(ChatHandler* handler, float swimSpeed)
{
Player* target = handler->getSelectedPlayerOrSelf();
if (CheckModifySpeed(handler, target, swimSpeed, 0.1f, 50.0f))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_SWIM_SPEED,
LANG_YOURS_SWIM_SPEED_CHANGED, swimSpeed);
target->SetSpeedRate(MOVE_SWIM, swimSpeed);
return true;
}

return false;
}

//Edit Player Walk Speed


static bool HandleModifyBWalkCommand(ChatHandler* handler, float backSpeed)
{
Player* target = handler->getSelectedPlayerOrSelf();
if (CheckModifySpeed(handler, target, backSpeed, 0.1f, 50.0f))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_BACK_SPEED,
LANG_YOURS_BACK_SPEED_CHANGED, backSpeed);
target->SetSpeedRate(MOVE_RUN_BACK, backSpeed);
return true;
}

return false;
}

//Edit Player Fly


static bool HandleModifyFlyCommand(ChatHandler* handler, float flySpeed)
{
Player* target = handler->getSelectedPlayerOrSelf();
if (CheckModifySpeed(handler, target, flySpeed, 0.1f, 50.0f, false))
{
NotifyModification(handler, target, LANG_YOU_CHANGE_FLY_SPEED,
LANG_YOURS_FLY_SPEED_CHANGED, flySpeed);
target->SetSpeedRate(MOVE_FLIGHT, flySpeed);
return true;
}

return false;
}

//Edit Player or Creature Scale


static bool HandleModifyScaleCommand(ChatHandler* handler, float scale)
{
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))
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, uint32
creatureDisplayID, Optional<float> speed)
{
if (!sCreatureDisplayInfoStore.LookupEntry(creatureDisplayID))
{
handler->SendSysMessage(LANG_NO_MOUNT);
handler->SetSentErrorMessage(true);
return false;
}

Player* target = handler->getSelectedPlayerOrSelf();


if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}

// check online security


if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
{
return false;
}

float _speed = speed ? *speed : 1.0f;

if (!CheckModifySpeed(handler, target, _speed, 0.1f, 50.0f))


{
return false;
}

NotifyModification(handler, target, LANG_YOU_GIVE_MOUNT, LANG_MOUNT_GIVED);

target->Mount(creatureDisplayID);
target->SetSpeed(MOVE_RUN, _speed, true);
target->SetSpeed(MOVE_FLIGHT, _speed, true);
return true;
}

//Edit Player money


static bool HandleModifyMoneyCommand(ChatHandler* handler, Tail money)
{
if (money.empty())
{
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))
{
return false;
}

auto IsExistWord = [](std::string_view line,


std::initializer_list<std::string_view> words)
{
for (auto const& word : words)
{
if (line.find(word) != std::string_view::npos)
{
return true;
}
}

return false;
};

Optional<int32> moneyToAddO = 0;
if (IsExistWord(money, { "g", "s", "c" }))
{
moneyToAddO = MoneyStringToMoney(money);
}
else
{
moneyToAddO = Acore::StringTo<int32>(money);
}

if (!moneyToAddO)
{
return false;
}

int32 moneyToAdd = *moneyToAddO;


uint32 targetMoney = target->GetMoney();

if (moneyToAdd < 0)
{
int32 newmoney = int32(targetMoney) + moneyToAdd;

LOG_DEBUG("chat.system", handler->GetAcoreString(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, std::abs(moneyToAdd),
handler->GetNameLink(target).c_str());
if (handler->needReportToTarget(target))
ChatHandler(target-
>GetSession()).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, handler-
>GetNameLink().c_str(), std::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);
}

LOG_DEBUG("chat.system", handler->GetAcoreString(LANG_NEW_MONEY),
targetMoney, moneyToAdd, target->GetMoney());

return true;
}

//Edit Unit field


static bool HandleModifyBitCommand(ChatHandler* handler, uint16 field, uint32
bit)
{
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()))
{
return false;
}

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, int32 amount)


{
Player* target = handler->getSelectedPlayer();
if (!target)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}

// check online security


if (handler->HasLowerSecurity(target))
{
return false;
}

target->ModifyHonorPoints(amount);

handler->PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, handler-
>GetNameLink(target).c_str(), target->GetHonorPoints());

return true;
}
static bool HandleModifyDrunkCommand(ChatHandler* handler, uint8 drunklevel)
{
if (drunklevel > 100)
{
drunklevel = 100;
}

if (Player* target = handler->getSelectedPlayer())


{
target->SetDrunkValue(drunklevel);
}

return true;
}

static bool HandleModifyRepCommand(ChatHandler* handler, uint32 factionId,


Variant<int32, std::string> rank, Optional<int32> delta)
{
Player* target = handler->getSelectedPlayer();
if (!target)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}

// check online security


if (handler->HasLowerSecurity(target))
{
return false;
}

int32 amount = 0;

if (rank.holds_alternative<std::string>())
{
std::string rankStr = rank.get<std::string>();
std::wstring wrankStr;

if (!Utf8toWStr(rankStr, wrankStr))
{
return false;
}

wstrToLower(wrankStr);

int32 r = 0;
amount = -42000;

for (; r < MAX_REPUTATION_RANK; ++r)


{
std::string rank = handler-
>GetAcoreString(ReputationRankStrIndex[r]);
if (rank.empty())
continue;

std::wstring wrank;
if (!Utf8toWStr(rank, wrank))
continue;
wstrToLower(wrank);

if (wrank.substr(0, wrankStr.size()) == wrankStr)


{
if (delta)
{
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,
rankStr.c_str());
handler->SetSentErrorMessage(true);
return false;
}
}
else
{
amount = rank.get<int32>();
}

if (!amount)
{
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;
}

static bool HandleMorphTargetCommand(ChatHandler* handler, uint32 displayID)


{
Unit* target = handler->getSelectedUnit();

if (!target)
{
target = handler->GetSession()->GetPlayer();
}
else if (target->GetTypeId() == TYPEID_PLAYER && handler-
>HasLowerSecurity(target->ToPlayer())) // check online security
{
return false;
}

target->SetDisplayId(displayID);
return true;
}

//morph creature or player


static bool HandleMorphResetCommand(ChatHandler* handler)
{
Unit* target = handler->getSelectedUnit();
if (!target)
{
target = handler->GetSession()->GetPlayer();
}
else if (target->GetTypeId() == TYPEID_PLAYER && handler-
>HasLowerSecurity(target->ToPlayer())) // check online security
{
return false;
}

target->DeMorph();
return true;
}

//set temporary phase mask for player


static bool HandleModifyPhaseCommand(ChatHandler* handler, uint32 phaseMask)
{
Unit* target = handler->getSelectedUnit();
if (!target)
{
target = handler->GetSession()->GetPlayer();
}
else if (target->GetTypeId() == TYPEID_PLAYER && handler-
>HasLowerSecurity(target->ToPlayer())) // check online security
{
return false;
}

target->SetPhaseMask(phaseMask, true);
return true;
}

//change standstate
static bool HandleModifyStandStateCommand(ChatHandler* handler, uint32 anim)
{
handler->GetSession()->GetPlayer()->SetUInt32Value(UNIT_NPC_EMOTESTATE,
anim);
return true;
}

static bool HandleModifyArenaCommand(ChatHandler* handler, int32 amount)


{
Player* target = handler->getSelectedPlayer();
if (!target)
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}

target->ModifyArenaPoints(amount);

handler->PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, handler-
>GetNameLink(target).c_str(), target->GetArenaPoints());

return true;
}

static bool HandleModifyGenderCommand(ChatHandler* handler, Tail genderString)


{
if (genderString.empty())
{
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;
}

Gender gender;

if (StringEqualI(genderString, "male")) // MALE


{
if (target->getGender() == GENDER_MALE)
return true;

gender = GENDER_MALE;
}
else if (StringEqualI(genderString, "female")) // 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;
}
};

void AddSC_modify_commandscript()
{
new modify_commandscript();
}

You might also like