Improve AdventureBot travel recovery and destination eligibility
GCC PCH / build (push) Waiting to run
clang PCH / build (push) Canceled after 0s

This commit is contained in:
Nico committed 2026-10-29 11:10:27 +01:00
1 parent 321a28640c
commit 49712aadfe
50 files changed
+984 -44

No files matched your search

+20 -1
View File
@@ -53,6 +53,7 @@ struct Position {
static float NormalizeOrientation(float a){a=std::fmod(a,float(2*M_PI));return a<0?a+2*M_PI:a;}
void Relocate(float a,float b,float c,float d=0){x=a;y=b;z=c;o=d;}
void Relocate(Position const& p){*this=p;}
float GetExactDist(Position const&p)const{return GetExactDist(&p);}
Position const& GetPosition()const{return *this;}
void GetPosition(float&a,float&b,float&c,float&d)const{a=x;b=y;c=z;d=o;}
float GetPositionX()const{return x;}float GetPositionY()const{return y;}float GetPositionZ()const{return z;}float GetOrientation()const{return o;}
@@ -89,13 +90,17 @@ public:
int teleports=0;bool falling=false;
bool IsFalling()const{return falling;}bool IsMounted(){return false;}void Dismount(){}void UpdateSpeed(int){}void RemoveAurasByType(int){}
bool TeleportTo(uint32 m,float a,float b,float c,float d){++teleports;map=m;Relocate(a,b,c,d);falling=false;return true;}
bool IsAlive()const{return true;}bool IsFlying()const{return false;}bool IsInFlight()const{return false;}
bool IsInCombat(){return false;}bool IsAlive()const{return true;}bool IsFlying()const{return false;}bool IsInFlight()const{return false;}
bool IsInWorld()const{return true;}bool IsInPhase(GameObject*)const{return true;}
bool IsBeingTeleported()const{return pending;}TransportBase* GetTransport()const{return transport;}
ObjectGuid GetGUID()const{return {26};}uint32 GetMapId()const{return map;}
float GetSpeed(int)const{return 7;}void StopMoving(){}bool IsSplineEnabled()const{return false;}
Motion* GetMotionMaster(){return &motion;}Session* GetSession(){return &session;}
};
struct Node{} node;
struct Graph{Node* FindNode(std::string const&){return &node;}}graph;auto sClientlessTravelGraphMgr=&graph;
struct AreaAccess{bool allowed=true;bool Applies(Player*){return true;}bool AllowsNode(Player*,Node const&){return allowed;}}areas;auto sAdventureAreaMgr=&areas;
namespace ClientlessPositioning{bool available=false;bool Nearby(Player*p,Position const&,float,Position&spot,std::vector<Position>&path){if(!available)return false;spot=*p;spot.x+=2;path={*p,spot};return true;}}
void TransportBase::CalculatePassengerPosition(float&x,float&y,float&z,float*o)const{CalculatePassengerPosition(x,y,z,o,go->x,go->y,go->z,go->o);}
void TransportBase::CalculatePassengerOffset(float&x,float&y,float&z,float*o)const{CalculatePassengerOffset(x,y,z,o,go->x,go->y,go->z,go->o);}
void TransportBase::AddPassenger(Player*p){p->transport=this;p->m_movementInfo.transport.guid=go->GetGUID();}
@@ -221,6 +226,20 @@ int main(){
lost.x=50;lost.teleports=0;travel.path=true;recovery.Status.Phase=Phase::Riding;
mgr.UpdateRide(&lost,recovery,100);assert(lost.teleports==0 && travel.starts==1);
mgr.UpdateRide(&lost,recovery,100);assert(!recovery.Status.Recovering);
// Waiting spots return along the observed path before the existing boarding sequence.
Player waiting;GameObject dock;dock.x=5;dock.state.Stopped=false;waiting.object=&dock;
ClientlessPositioning::available=true;
assert(mgr.Start(&waiting,"A","B",error));auto& spaced=mgr._rides.at(26);
mgr.UpdateRide(&waiting,spaced,100);assert(spaced.WaitStage==1&&waiting.x==2&&!waiting.transport);
mgr.UpdateRide(&waiting,spaced,100);assert(spaced.WaitStage==2&&spaced.WaitTrace.size()==2);
dock.state.Stopped=true;dock.state.RemainingPause=10000;
mgr.UpdateRide(&waiting,spaced,100);assert(spaced.WaitStage==3&&waiting.x==0&&!waiting.transport);
run(mgr,waiting,spaced);assert(spaced.Status.Phase==Phase::Riding&&waiting.transport);
dock.x=100;waiting.x=101;run(mgr,waiting,spaced);
assert(spaced.Status.Phase==Phase::Arrived&&!waiting.transport&&waiting.x==104);
ClientlessPositioning::available=false;
Player denied;denied.object=&dock;areas.allowed=false;
assert(!mgr.Start(&denied,"A","B",error));areas.allowed=true;
std::cout<<"Transport dock, frame, recorder, cross-map copy and ride regressions passed\n";
}
'''