mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-06-20 15:39:25 +02:00
172 lines
4.9 KiB
C++
172 lines
4.9 KiB
C++
#include "NewRpgInfo.h"
|
|
|
|
#include <cmath>
|
|
|
|
#include "Timer.h"
|
|
|
|
void NewRpgInfo::ChangeToGoGrind(WorldPosition pos)
|
|
{
|
|
Reset();
|
|
data = GoGrind{pos};
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToGoCamp(WorldPosition pos)
|
|
{
|
|
Reset();
|
|
data = GoCamp{pos};
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToWanderNpc()
|
|
{
|
|
Reset();
|
|
data = WanderNpc{};
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToWanderRandom()
|
|
{
|
|
Reset();
|
|
data = WanderRandom{};
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToDoQuest(uint32 questId, const Quest* quest)
|
|
{
|
|
Reset();
|
|
DoQuest do_quest;
|
|
do_quest.questId = questId;
|
|
do_quest.quest = quest;
|
|
data = do_quest;
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToTravelFlight(uint32 flightMasterEntry, WorldPosition flightMasterPos, std::vector<uint32> path)
|
|
{
|
|
Reset();
|
|
TravelFlight flight;
|
|
flight.flightMasterEntry = flightMasterEntry;
|
|
flight.flightMasterPos = flightMasterPos;
|
|
flight.path = std::move(path);
|
|
flight.inFlight = false;
|
|
data = flight;
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToOutdoorPvp(ObjectGuid::LowType capturePointSpawnId)
|
|
{
|
|
startT = getMSTime();
|
|
OutdoorPvP pvp;
|
|
pvp.capturePointSpawnId = capturePointSpawnId;
|
|
data = pvp;
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToRest()
|
|
{
|
|
Reset();
|
|
data = Rest{};
|
|
}
|
|
|
|
void NewRpgInfo::ChangeToIdle()
|
|
{
|
|
Reset();
|
|
data = Idle{};
|
|
}
|
|
|
|
bool NewRpgInfo::CanChangeTo(NewRpgStatus)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void NewRpgInfo::Reset()
|
|
{
|
|
data = Idle{};
|
|
startT = getMSTime();
|
|
ClearTravel();
|
|
}
|
|
|
|
NewRpgStatus NewRpgInfo::GetStatus()
|
|
{
|
|
return std::visit([](auto&& arg) -> NewRpgStatus {
|
|
using T = std::decay_t<decltype(arg)>;
|
|
if constexpr (std::is_same_v<T, Idle>) return RPG_IDLE;
|
|
if constexpr (std::is_same_v<T, GoGrind>) return RPG_GO_GRIND;
|
|
if constexpr (std::is_same_v<T, GoCamp>) return RPG_GO_CAMP;
|
|
if constexpr (std::is_same_v<T, WanderNpc>) return RPG_WANDER_NPC;
|
|
if constexpr (std::is_same_v<T, WanderRandom>) return RPG_WANDER_RANDOM;
|
|
if constexpr (std::is_same_v<T, Rest>) return RPG_REST;
|
|
if constexpr (std::is_same_v<T, DoQuest>) return RPG_DO_QUEST;
|
|
if constexpr (std::is_same_v<T, TravelFlight>) return RPG_TRAVEL_FLIGHT;
|
|
if constexpr (std::is_same_v<T, OutdoorPvP>) return RPG_OUTDOOR_PVP;
|
|
return RPG_IDLE;
|
|
}, data);
|
|
}
|
|
|
|
std::string NewRpgInfo::ToString()
|
|
{
|
|
std::stringstream out;
|
|
out << "Status: ";
|
|
std::visit([&out, this](auto&& arg)
|
|
{
|
|
using T = std::decay_t<decltype(arg)>;
|
|
if constexpr (std::is_same_v<T, GoGrind>)
|
|
{
|
|
out << "GO_GRIND";
|
|
out << "\nGrindPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " "
|
|
<< arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ();
|
|
out << "\nlastGoGrind: " << startT;
|
|
}
|
|
else if constexpr (std::is_same_v<T, GoCamp>)
|
|
{
|
|
out << "GO_CAMP";
|
|
out << "\nCampPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " "
|
|
<< arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ();
|
|
out << "\nlastGoCamp: " << startT;
|
|
}
|
|
else if constexpr (std::is_same_v<T, WanderNpc>)
|
|
{
|
|
out << "WANDER_NPC";
|
|
out << "\nnpcOrGoEntry: " << arg.npcOrGo.GetCounter();
|
|
out << "\nlastWanderNpc: " << startT;
|
|
out << "\nlastReachNpcOrGo: " << arg.lastReach;
|
|
}
|
|
else if constexpr (std::is_same_v<T, WanderRandom>)
|
|
{
|
|
out << "WANDER_RANDOM";
|
|
out << "\nlastWanderRandom: " << startT;
|
|
}
|
|
else if constexpr (std::is_same_v<T, Idle>)
|
|
{
|
|
out << "IDLE";
|
|
}
|
|
else if constexpr (std::is_same_v<T, Rest>)
|
|
{
|
|
out << "REST";
|
|
out << "\nlastRest: " << startT;
|
|
}
|
|
else if constexpr (std::is_same_v<T, DoQuest>)
|
|
{
|
|
out << "DO_QUEST";
|
|
out << "\nquestId: " << arg.questId;
|
|
out << "\nobjectiveIdx: " << arg.objectiveIdx;
|
|
out << "\npoiPos: " << arg.pos.GetMapId() << " " << arg.pos.GetPositionX() << " "
|
|
<< arg.pos.GetPositionY() << " " << arg.pos.GetPositionZ();
|
|
out << "\nlastReachPOI: " << (arg.lastReachPOI ? GetMSTimeDiffToNow(arg.lastReachPOI) : 0);
|
|
}
|
|
else if constexpr (std::is_same_v<T, TravelFlight>)
|
|
{
|
|
out << "TRAVEL_FLIGHT";
|
|
out << "\nflightMasterEntry: " << arg.flightMasterEntry;
|
|
out << "\nfromNode: " << arg.path[0];
|
|
out << "\ntoNode: " << arg.path[arg.path.size() - 1];
|
|
out << "\ninFlight: " << arg.inFlight;
|
|
}
|
|
else if constexpr (std::is_same_v<T, OutdoorPvP>)
|
|
{
|
|
out << "OUTDOOR_PVP";
|
|
if (!arg.capturePointSpawnId)
|
|
out << "\nNo capture point assigned.";
|
|
else
|
|
out << "\ncapturePointSpawnId: " << arg.capturePointSpawnId;
|
|
}
|
|
else
|
|
out << "UNKNOWN";
|
|
}, data);
|
|
return out.str();
|
|
}
|