From b633dcf02ff80c6e80f51f072f5a3926f430bc4c Mon Sep 17 00:00:00 2001 From: "Felipe A." <73603452+imfelipedev@users.noreply.github.com> Date: Mon, 3 Feb 2025 23:46:20 -0300 Subject: [PATCH] Add arguments to onPlayerTeleport and fix the false positive caused by setElementInterior using x, y, z parameters. --- Server/mods/deathmatch/logic/CGame.cpp | 2 +- Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp | 6 ++++++ .../mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Server/mods/deathmatch/logic/CGame.cpp b/Server/mods/deathmatch/logic/CGame.cpp index 632b65d98b..0d684789df 100644 --- a/Server/mods/deathmatch/logic/CGame.cpp +++ b/Server/mods/deathmatch/logic/CGame.cpp @@ -1641,7 +1641,7 @@ void CGame::AddBuiltInEvents() m_Events.AddEvent("onPlayerTriggerInvalidEvent", "eventName, isAdded, isRemote", nullptr, false); m_Events.AddEvent("onPlayerChangesProtectedData", "element, key, value", nullptr, false); m_Events.AddEvent("onPlayerChangesWorldSpecialProperty", "property, enabled", nullptr, false); - m_Events.AddEvent("onPlayerTeleport", "", nullptr, false); + m_Events.AddEvent("onPlayerTeleport", "previousX, previousY, previousZ, currentX, currentY, currentZ", nullptr, false); // Ped events m_Events.AddEvent("onPedVehicleEnter", "vehicle, seat, jacked", NULL, false); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 2079adf2d2..144cdc661c 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -1477,6 +1477,12 @@ bool CStaticFunctionDefinitions::SetElementInterior(CElement* pElement, unsigned BitStream.pBitStream->Write(static_cast((bSetPosition) ? 1 : 0)); if (bSetPosition) { + if (IS_PLAYER(pElement)) + { + CPlayer* player = static_cast(pElement); + player->SetTeleported(true); + } + BitStream.pBitStream->Write(vecPosition.fX); BitStream.pBitStream->Write(vecPosition.fY); BitStream.pBitStream->Write(vecPosition.fZ); diff --git a/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp b/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp index 5aef18566f..151106979b 100644 --- a/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp @@ -141,6 +141,12 @@ bool CPlayerPuresyncPacket::Read(NetBitStreamInterface& BitStream) if (!pSourcePlayer->GetTeleported()) { CLuaArguments arguments; + arguments.PushNumber(playerPosition.fX); + arguments.PushNumber(playerPosition.fY); + arguments.PushNumber(playerPosition.fZ); + arguments.PushNumber(position.data.vecPosition.fX); + arguments.PushNumber(position.data.vecPosition.fY); + arguments.PushNumber(position.data.vecPosition.fZ); pSourcePlayer->CallEvent("onPlayerTeleport", arguments, nullptr); }