From 75d33aff3ef228a5de43b7a204815a4814c570df Mon Sep 17 00:00:00 2001 From: Gent S Date: Thu, 26 Nov 2020 22:58:56 -0500 Subject: [PATCH] Fix S.C.A.M.P.E.R. chunk desync... again --- src/TransportManager.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/TransportManager.cpp b/src/TransportManager.cpp index 2bf39f2..fa66f90 100644 --- a/src/TransportManager.cpp +++ b/src/TransportManager.cpp @@ -138,12 +138,10 @@ void TransportManager::transportWarpHandler(CNSocket* sock, CNPacketData* data) TransportRoute route = Routes[req->iTransporationID]; plr->money -= route.cost; - TransportLocation target; + TransportLocation* target = nullptr; switch (route.type) { case 1: // S.C.A.M.P.E.R. - target = Locations[route.end]; - ChunkManager::updatePlayerChunk(sock, plr->chunkPos, std::make_tuple(0, 0, 0)); // force player to reload chunks - PlayerManager::updatePlayerPosition(sock, target.x, target.y, target.z, INSTANCE_OVERWORLD, plr->angle); + target = &Locations[route.end]; break; case 2: // Monkey Skyway // set last safe coords @@ -182,10 +180,16 @@ void TransportManager::transportWarpHandler(CNSocket* sock, CNPacketData* data) // response parameters resp.eTT = route.type; resp.iCandy = plr->money; - resp.iX = plr->x; - resp.iY = plr->y; - resp.iZ = plr->z; + resp.iX = (target == nullptr) ? plr->x : target->x; + resp.iY = (target == nullptr) ? plr->y : target->y; + resp.iZ = (target == nullptr) ? plr->z : target->z; sock->sendPacket((void*)&resp, P_FE2CL_REP_PC_WARP_USE_TRANSPORTATION_SUCC, sizeof(sP_FE2CL_REP_PC_WARP_USE_TRANSPORTATION_SUCC)); + + if (target == nullptr) + return; + // we warped; update position and chunks + ChunkManager::updatePlayerChunk(sock, plr->chunkPos, std::make_tuple(0, 0, 0)); // force player to reload chunks + PlayerManager::updatePlayerPosition(sock, target->x, target->y, target->z, INSTANCE_OVERWORLD, plr->angle); } void TransportManager::testMssRoute(CNSocket *sock, std::vector* route) {