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:
@@ -0,0 +1,3 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1629233438552386300');
|
||||||
|
|
||||||
|
UPDATE `command` SET `help` = 'Syntax: .modify mount #id #speed\nSet CreatureDisplayID as #id and set speed to #speed value between 0.1 - 50.0' WHERE `name` = 'modify mount';
|
||||||
@@ -957,6 +957,8 @@ public:
|
|||||||
|
|
||||||
player->Dismount();
|
player->Dismount();
|
||||||
player->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
player->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||||
|
player->SetSpeed(MOVE_RUN, 1, true);
|
||||||
|
player->SetSpeed(MOVE_FLIGHT, 1, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ EndScriptData */
|
|||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "ReputationMgr.h"
|
#include "ReputationMgr.h"
|
||||||
#include "ScriptMgr.h"
|
#include "ScriptMgr.h"
|
||||||
|
#include "StringConvert.h"
|
||||||
|
|
||||||
class modify_commandscript : public CommandScript
|
class modify_commandscript : public CommandScript
|
||||||
{
|
{
|
||||||
@@ -75,6 +76,19 @@ public:
|
|||||||
return commandTable;
|
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
|
//Edit Player HP
|
||||||
static bool HandleModifyHPCommand(ChatHandler* handler, const char* args)
|
static bool HandleModifyHPCommand(ChatHandler* handler, const char* args)
|
||||||
{
|
{
|
||||||
@@ -454,6 +468,48 @@ public:
|
|||||||
return false;
|
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
|
//Edit Player Aspeed
|
||||||
static bool HandleModifyASpeedCommand(ChatHandler* handler, const char* args)
|
static bool HandleModifyASpeedCommand(ChatHandler* handler, const char* args)
|
||||||
{
|
{
|
||||||
@@ -725,229 +781,32 @@ public:
|
|||||||
static bool HandleModifyMountCommand(ChatHandler* handler, const char* args)
|
static bool HandleModifyMountCommand(ChatHandler* handler, const char* args)
|
||||||
{
|
{
|
||||||
if (!*args)
|
if (!*args)
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16 mId = 1147;
|
|
||||||
float speed = (float)15;
|
|
||||||
uint32 num = 0;
|
|
||||||
|
|
||||||
num = atoi((char*)args);
|
|
||||||
switch (num)
|
|
||||||
{
|
{
|
||||||
case 1:
|
return false;
|
||||||
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();
|
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)
|
if (!target)
|
||||||
{
|
{
|
||||||
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
||||||
@@ -956,29 +815,22 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check online security
|
// check online security
|
||||||
if (handler->HasLowerSecurity(target))
|
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
handler->PSendSysMessage(LANG_YOU_GIVE_MOUNT, handler->GetNameLink(target).c_str());
|
float speed = 0.f;
|
||||||
if (handler->needReportToTarget(target))
|
if (!CheckModifySpeed(handler, speed_cstr, target, speed, 0.1f, 50.0f))
|
||||||
(ChatHandler(target->GetSession())).PSendSysMessage(LANG_MOUNT_GIVED, handler->GetNameLink().c_str());
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
target->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP);
|
NotifyModification(handler, target, LANG_YOU_GIVE_MOUNT, LANG_MOUNT_GIVED);
|
||||||
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);
|
|
||||||
|
|
||||||
|
target->Mount(mount);
|
||||||
|
target->SetSpeed(MOVE_RUN, speed, true);
|
||||||
|
target->SetSpeed(MOVE_FLIGHT, speed, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user