Transports no longer move between maps, each map gets a separate copy of the transport object and players are moved between them when transferring to another map
This means they can no longer be globally looked up in HashMapHolder
* No TaxiPathNode row is skipped anymore (events/delays on first node now work)
* Fixed transport animation synchronization with client
* Fixed stoppable transports randomly resuming their path after relogging
Closes#27985
* Fully synchronize serverside animation progress with client
* Implemented updating passenger positions on elevators
* Removed visibility hack for elevators that always forced CreateObject packet to be sent to client
* Mostly aimed at removing Log/DatabaseEnv includes from other headers
* Fix most packet headers including other packet headers - moved common structures such as ItemInstance to their own files
* Moved SAI function definitions to source files (massive or requiring many different dependencies)
* Updated segment distance calculations - now selected path fully matches clientside preview
* Fixed building sOldContinentsNodesMask to also include any new taxi node added in future
* Implemented filtering possible hops when searching for shortest path by faction (and in future PlayerCondition)
* Changed ObjectMgr::GetNearestTaxiNode to filter faction nodes by flags instead of mount display
flight masters along the way, not directly through them
* Taxi cost on multi-segment paths is now charged per segment when it is started
Cherry-picked from commit 2056961aae (+fixes)
* Added ObjectGuid traits to easily access whether guid type can be generated globally (ObjectMgr) or not
* This adds separate (per map) guid sequences depending on object type
* Ported map object container from cmangos/mangos-wotlk@a2d396eb0b
* Added type container visitor for TypeUnorderedMapContainer
* Implemented helper function to erase unique pairs from multimap containers
* Moved object storage of all objects except players and transports to map level
* Added containers linking database spawn id with creature/gameobject in world
* Renamed DBTableGuid to spawnId
* Added a separate spawn id sequence generator for creatures and gameobjects - this will be used in db tables
* Moved building SMSG_UPDATE_OBJECT - updatefields changes broadcast to map update
* Moved DB2 helpers to new class
* Moved hotfix data to hotfixes database and core management functions to DB2Manager class
* Updated HotfixNotifyBlob packet
Fix an array overflow in TransportMgr::GeneratePath() spline code.
Valgrind log:
Invalid read of size 4
at : G3D::Vector3::operator*(float) const (Vector3.h:650)
by : Movement::C_Evaluate(G3D::Vector3 const*, float, G3D::Matrix4 const&, G3D::Vector3&) (Spline.cpp:103)
by : Movement::SplineBase::SegLengthCatmullRom(int) const (Spline.cpp:171)
by : Movement::SplineBase::SegLength(int) const (in /home/jackpoz/trinity/bin/worldserver)
by : Movement::Spline<double>::initLengths() (SplineImpl.h:86)
by : TransportMgr::GeneratePath(GameObjectTemplate const*, TransportTemplate*) (TransportMgr.cpp:125)
by : TransportMgr::LoadTransportTemplates() (TransportMgr.cpp:78)
Address 0x1d07d154 is 8 bytes after a block of size 300 alloc'd
* Fixed transport orientation
* Fixed transport position desynchronization for stoppable transports
* Ignore spawnMask errors for objects spawned on transports
* Rewritten path generation, now uses splines - timers are a lot more accurate now
* Implemented stopping transports
* Implemented spawning transports in instances
* Implemented spawning gameobjects as transport passengers
* Transport passengers are now stored in creature/gameobject table using gameobject_template.data6 from transport's template as map id