"""Compile production flight eligibility/cost and fail-safe abort decisions with Core doubles.""" from pathlib import Path import subprocess,tempfile root=Path(__file__).resolve().parents[2] source=(root/'src/server/game/World/ClientlessFlightMgr.cpp').read_text() def function(signature): a=source.index(signature);opening=source.index('{',a);depth=1;b=opening+1 while depth: depth+=(source[b]=='{')-(source[b]=='}');b+=1 return source[a:b] harness=r''' #include "ClientlessFlightPath.h" #include #include #include #include #include #include #include #include #include using uint32=uint32_t; using namespace ClientlessFlightPath; #define TC_LOG_WARN(...) ((void)0) constexpr int SKILL_RIDING=762,MAP_COMMON=0,SPELL_AURA_MOUNT_RESTRICTIONS=1; struct Position{float x=0,y=0,z=0;float GetPositionX()const{return x;}float GetPositionY()const{return y;}float GetPositionZ()const{return z;}}; struct Player; struct AreaAccess {bool allowed=true,preferred=false; bool AllowsSegment(Player const*,uint32,Position const&,Position const&)const; bool PreferredFlight(Player const*,uint32,Position const&)const; }; Point PointOf(Position const&p){return {p.x,p.y,p.z};}float Infinity(){return std::numeric_limits::infinity();} struct Guid{uint32 GetCounter()const{return 26;}}; struct Player{ bool license=true,cold=true,learned=true,alive=true,canFly=true,restrictions=false; uint32 skill=225,map=0,area=87;int stops=0,interrupts=0; Guid GetGUID()const{return {};} uint32 GetSkillValue(int)const{return skill;} bool HasSpell(uint32 s)const{return s==90267?license:s==54197?cold:learned;} uint32 GetMapId()const{return map;}uint32 GetAreaId()const{return area;} bool HasAuraType(int)const{return restrictions;} bool CanFly(){return canFly;}bool IsAlive(){return alive;} void StopMoving(){++stops;}void InterruptNonMeleeSpells(bool){++interrupts;} float GetPositionX(){return 0;}float GetPositionY(){return 0;}float GetPositionZ(){return 50;} }; bool AreaAccess::AllowsSegment(Player const*,uint32,Position const&,Position const&)const{return allowed;} bool AreaAccess::PreferredFlight(Player const*,uint32,Position const&)const{return preferred;} AreaAccess access;auto sAdventureAreaMgr=&access; struct Mount{uint32 DisplayId=32235,Weight=100;}; struct Profile{bool CanFreeFly=true;std::vector FlightMounts{{}};} profile; struct Lua{auto GetAdventureProfile(uint32){return &profile;}} lua; struct Config{int reads=0;bool enabled=true;bool GetBoolDefault(const char*,bool){++reads;return enabled;}float GetFloatDefault(const char*,float v){++reads;return v;}std::string GetStringDefault(const char*,const char*v){++reads;return v;}} config; auto sClientlessLuaEngine=&lua;auto sConfigMgr=&config; struct SpellMgr{void* GetSpellInfo(uint32){return this;}} spells;auto sSpellMgr=&spells; uint32 FlightType(void*){return 1;} struct MapEntry{uint32 MapType=0;} entry;struct Maps{auto LookupEntry(uint32){return &entry;}} maps;auto& sMapStore=maps; enum class AreaMountFlags{AllowFlyingMounts}; struct Flags{bool fly=true;bool HasFlag(AreaMountFlags){return fly;}}; struct Area{bool fly=true;uint32 World_pvp_ID=0;Flags GetMountFlags()const{return {fly};}} area; struct Areas{bool known=true;auto LookupEntry(uint32){return known?&area:nullptr;}} areas;auto& sAreaTableStore=areas; enum class ClientlessFlightState{Mounting,Flying,Arrived,Failed}; struct Record{std::shared_ptrPublished=std::make_shared(); struct{bool FollowingPlayer=false;ClientlessFlightState State=ClientlessFlightState::Flying;uint32 MapId=0;std::string Detail;}Status; bool Moving=true,Returning=false,ApproachingDeparture=false;std::vector Breadcrumbs{{}};std::string AbortReason; }; struct Travel{int cancels=0;void CancelTravel(uint32){++cancels;}}travel;auto sClientlessTravelMgr=&travel; class ClientlessFlightMgr{public: Player const* _planningPlayer=nullptr;bool _planningEnabled=false;float _planningMinDistance=600; std::unordered_set _planningPreferredZones; std::unordered_map _planningAreas,_planningTerrain; void BeginPlanning(Player const* = nullptr); uint32 areaCode=87,zoneCode=12; std::pair AreaZone(Player const*,uint32,Position const&)const{return {areaCode,zoneCode};} bool Enabled(Player const*)const;bool Preferred(Player const*,uint32,Position const&)const; float Estimate(Player const*,uint32,Position const&,Position const&,bool recovery=false)const; void Fail(Player*,Record&,std::string const&); }; ''' for signature in ('void ClientlessFlightMgr::BeginPlanning(', 'bool ClientlessFlightMgr::Enabled(', 'bool ClientlessFlightMgr::Preferred(', 'float ClientlessFlightMgr::Estimate(', 'void ClientlessFlightMgr::Fail('): harness+=function(signature)+'\n' harness+=r''' int main(){ ClientlessFlightMgr mgr;Player p;Position a,b;b.x=1000; float roadBias=mgr.Estimate(&p,0,a,b);assert(roadBias>1000&&std::isfinite(roadBias)); access.allowed=false;assert(!std::isfinite(mgr.Estimate(&p,0,a,b)));access.allowed=true; access.preferred=true;assert(mgr.Estimate(&p,0,a,b)