mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 10:30:27 +00:00
refactor(Script/Command): modify mount & dismount (#7413)
* refactor(Script/Command): modify mount * oopsies * Update rev_1629233438552386300.sql * codestyle * Update src/server/scripts/Commands/cs_modify.cpp Co-authored-by: Stefano Borzì <stefanoborzi32@gmail.com> * Update src/server/scripts/Commands/cs_modify.cpp Co-authored-by: Stefano Borzì <stefanoborzi32@gmail.com> * Update src/server/scripts/Commands/cs_modify.cpp Co-authored-by: Stefano Borzì <stefanoborzi32@gmail.com> * some improvements * When using .dismount also update speed to 100% * remove atoul * Update cs_modify.cpp * test Co-authored-by: Kargatum <dowlandtop@yandex.com> * Update cs_modify.cpp * fix tyop Co-authored-by: Stefano Borzì <stefanoborzi32@gmail.com> Co-authored-by: Kargatum <dowlandtop@yandex.com>
This commit is contained in:
@@ -19,6 +19,7 @@ EndScriptData */
|
||||
#include "Player.h"
|
||||
#include "ReputationMgr.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "StringConvert.h"
|
||||
|
||||
class modify_commandscript : public CommandScript
|
||||
{
|
||||
@@ -75,6 +76,19 @@ public:
|
||||
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, handler->GetNameLink(player).c_str(), args...);
|
||||
if (handler->needReportToTarget(player))
|
||||
{
|
||||
ChatHandler(player->GetSession()).PSendSysMessage(resourceReportMessage, handler->GetNameLink().c_str(), std::forward<Args>(args)...);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Edit Player HP
|
||||
static bool HandleModifyHPCommand(ChatHandler* handler, const char* args)
|
||||
{
|
||||
@@ -454,6 +468,48 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool CheckModifySpeed(ChatHandler* handler, char const* args, Unit* target, float& speed, float minimumBound, float maximumBound, bool checkInFlight = true)
|
||||
{
|
||||
if (!*args)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
speed = Acore::StringTo<float>(args).value();
|
||||
|
||||
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, ObjectGuid::Empty))
|
||||
{
|
||||
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, const char* args)
|
||||
{
|
||||
@@ -725,229 +781,32 @@ public:
|
||||
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;
|
||||
return false;
|
||||
}
|
||||
|
||||
Player* target = handler->getSelectedPlayer();
|
||||
char const* mount_cstr = strtok(const_cast<char*>(args), " ");
|
||||
char const* speed_cstr = strtok(nullptr, " ");
|
||||
|
||||
if (!mount_cstr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!speed_cstr)
|
||||
{
|
||||
speed_cstr = "1";
|
||||
}
|
||||
|
||||
uint32 mount = Acore::StringTo<uint32>(mount_cstr).value();
|
||||
if (!sCreatureDisplayInfoStore.LookupEntry(mount))
|
||||
{
|
||||
handler->SendSysMessage(LANG_NO_MOUNT);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
Player* target = handler->getSelectedPlayerOrSelf();
|
||||
if (!target)
|
||||
{
|
||||
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
||||
@@ -956,29 +815,22 @@ public:
|
||||
}
|
||||
|
||||
// check online security
|
||||
if (handler->HasLowerSecurity(target))
|
||||
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
||||
{
|
||||
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());
|
||||
float speed = 0.f;
|
||||
if (!CheckModifySpeed(handler, speed_cstr, target, speed, 0.1f, 50.0f))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
target->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP);
|
||||
target->Mount(mId);
|
||||
|
||||
WorldPacket data(SMSG_FORCE_RUN_SPEED_CHANGE, (8 + 4 + 1 + 4));
|
||||
data << 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 << target->GetPackGUID();
|
||||
data << (uint32)0;
|
||||
data << float(speed);
|
||||
target->SendMessageToSet(&data, true);
|
||||
NotifyModification(handler, target, LANG_YOU_GIVE_MOUNT, LANG_MOUNT_GIVED);
|
||||
|
||||
target->Mount(mount);
|
||||
target->SetSpeed(MOVE_RUN, speed, true);
|
||||
target->SetSpeed(MOVE_FLIGHT, speed, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user