#pragma once #include "CNShardServer.hpp" #include "NPCManager.hpp" #include struct WarpLocation; struct TransportRoute { int type, start, end, cost, mssSpeed, mssRouteNum; }; struct TransportLocation { int npcID, x, y, z; }; namespace TransportManager { extern std::map Routes; extern std::map Locations; extern std::map> SkywayPaths; // predefined skyway paths with points extern std::unordered_map> SkywayQueues; // player sockets with queued broomstick points extern std::unordered_map> NPCQueues; // NPC ids with queued pathing points void init(); void transportRegisterLocationHandler(CNSocket*, CNPacketData*); void transportWarpHandler(CNSocket*, CNPacketData*); void tickTransportationSystem(CNServer*, time_t); void stepNPCPathing(); void stepSkywaySystem(); void lerp(std::queue*, WarpLocation, WarpLocation, int); }