[Player:StartTaxi] crash
This is the lua script I wrote
-- Execute on startup
local PathNodesTableBT =
{
['Entrance'] = {
{ 564, 97.798, 1001.989, -86.775 },
{ 564, 143.965, 991.746, -68.856 },
{ 564, 178.143, 987.989, -58.534 },
{ 564, 206.928, 993.204, -59.100 },
{ 564, 224.873, 1005.23, -60.505 },
},
}
local pathBT = AddTaxiPath(PathNodesTableBT['Entrance'], 28135, 28135)
local function BlackTempleOnMapEnter(event, map, player)
if map:GetMapId() == 564 then
cordM, cordX, cordY, cordZ = table.unpack(PathNodesTableBT['Entrance'][1])
if player:GetDistance( cordX, cordY, cordZ ) <= 5 then
player:StartTaxi(pathBT)
end
end
end
RegisterServerEvent(21, BlackTempleOnMapEnter)
And this is the crash message I get when I login near the first node.
Assertion message: D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\Movement\MotionMaster.cpp:973 in MotionMaster::MoveTaxiFlight ASSERTION FAILED: !hasExisting
Duplicate flight path movement generator Call stack: Address Frame Function SourceFile 00007FF8E87DD759 0000001872AFE5F0 RaiseException+69 00007FF787D40EB8 0000001872AFE750 Trinity::Assert+1E8 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\common\Debugging\Errors.cpp line 91 00007FF7879C079C 0000001872AFE880 MotionMaster::MoveTaxiFlight+80C D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\Movement\MotionMaster.cpp line 973 00007FF7876F1B93 0000001872AFE9B0 Player::ContinueTaxiFlight+373 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\Entities\Player\Player.cpp line 21601 00007FF787C9AD02 0000001872AFEDF0 WorldSession::HandlePlayerLogin+A92 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\Handlers\CharacterHandler.cpp line 881 00007FF787D0D2AE 0000001872AFEE20 SQLQueryHolderCallback::InvokeIfReady+4E D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\database\Database\QueryHolder.cpp line 93 00007FF787868948 0000001872AFEEA0 AsyncCallbackProcessor<SQLQueryHolderCallback>::ProcessReadyCallbacks+58 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\common\Utilities\AsyncCallbackProcessor.h line 48 00007FF78786C065 0000001872AFF070 WorldSession::Update+AD5 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\Server\WorldSession.cpp line 462 00007FF7875F5501 0000001872AFF0E0 World::UpdateSessions+101 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\World\World.cpp line 3107 00007FF7875F472F 0000001872AFF430 World::Update+54F D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\game\World\World.cpp line 2413 00007FF7871170A6 0000001872AFF490 WorldUpdateLoop+F6 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\worldserver\Main.cpp line 450 00007FF787124EF6 0000001872AFFBD0 main+21F6 D:\Proiecte\TrinityCore_3.3.5\ElunaTrinityWotlk\src\server\worldserver\Main.cpp line 351 00007FF787E95CFC 0000001872AFFC10 __scrt_common_main_seh+10C d:\agent_work\63\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl line 288 00007FF8E9E97034 0000001872AFFC40 BaseThreadInitThunk+14 00007FF8EAB1D0D1 0000001872AFFCC0 RtlUserThreadStart+21
Update
If I do add delay like this, won't crash:
-- Execute on startup
local PathNodesTableBT =
{
['Entrance'] = {
{ 564, 97.798, 1001.989, -86.775 },
{ 564, 143.965, 991.746, -68.856 },
{ 564, 178.143, 987.989, -58.534 },
{ 564, 206.928, 993.204, -59.100 },
{ 564, 224.873, 1005.23, -60.505 },
},
}
local pathBT = AddTaxiPath(PathNodesTableBT['Entrance'], 28135, 28135, 0, 0)
local function Timed(eventid, delay, repeats, player)
player:StartTaxi(pathBT)
end
local function BlackTempleOnMapEnter(event, map, player)
if map:GetMapId() == 564 then
cordM, cordX, cordY, cordZ = table.unpack(PathNodesTableBT['Entrance'][1])
if player:GetDistance( cordX, cordY, cordZ ) <= 5 then
player:RegisterEvent(Timed, 1000, 1) -- do it after 1 second 1 time
end
end
end
RegisterServerEvent(21, BlackTempleOnMapEnter)
Player isn't fully loaded yet. At least that's what I think.
This probably crashed due to OnEnterMap triggering twice on login on the old single state Eluna implementation, making the player fly twice, which gets caught by the assert. Bit of an edge case since this only happens if the flight attempts happens in the same frame, thus the timed event preventing the problem. Shouldn't be an issue with multistate.