Professional Documents
Culture Documents
* 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"
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)...);
}
}
}
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();
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;
}
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;
}
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);
return true;
}
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;
}
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;
}
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;
}
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;
}
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;
}
if (!target)
{
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
handler->SetSentErrorMessage(true);
return false;
}
return true;
}
return false;
}
return false;
}
return false;
}
return false;
}
return false;
}
target->SetObjectScale(scale);
return true;
}
target->Mount(creatureDisplayID);
target->SetSpeed(MOVE_RUN, _speed, true);
target->SetSpeed(MOVE_FLIGHT, _speed, true);
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;
}
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);
target->ModifyMoney(moneyToAdd);
}
LOG_DEBUG("chat.system", handler->GetAcoreString(LANG_NEW_MONEY),
targetMoney, moneyToAdd, target->GetMoney());
return true;
}
return true;
}
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;
}
return true;
}
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;
std::wstring wrank;
if (!Utf8toWStr(rank, wrank))
continue;
wstrToLower(wrank);
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;
}
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;
}
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;
}
target->DeMorph();
return true;
}
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;
}
target->ModifyArenaPoints(amount);
handler->PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, handler-
>GetNameLink(target).c_str(), target->GetArenaPoints());
return true;
}
Gender gender;
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();
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();
}