diff --git a/Server/mods/deathmatch/logic/CMapManager.cpp b/Server/mods/deathmatch/logic/CMapManager.cpp index 0af22ff885..eb161ceb8e 100644 --- a/Server/mods/deathmatch/logic/CMapManager.cpp +++ b/Server/mods/deathmatch/logic/CMapManager.cpp @@ -593,6 +593,7 @@ void CMapManager::SpawnPlayer(CPlayer& Player, const CVector& vecPosition, float // Update the player data Player.SetSpawned(true); + Player.SetTeleported(true); Player.SetHealth(Player.GetMaxHealth()); Player.SetIsDead(false); Player.SetWearingGoggles(false); diff --git a/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp b/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp index 8fee7a61fb..5aef18566f 100644 --- a/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp @@ -132,15 +132,20 @@ bool CPlayerPuresyncPacket::Read(NetBitStreamInterface& BitStream) position.data.vecPosition += vecTempPos; } - CVector playerPosition = pSourcePlayer->GetPosition(); - float playerDistancePosition = DistanceBetweenPoints3D(playerPosition, position.data.vecPosition); - if (playerDistancePosition >= g_TickRateSettings.playerTeleportAlert) { - if (!pSourcePlayer->GetTeleported()) { - CLuaArguments arguments; - pSourcePlayer->CallEvent("onPlayerTeleport", arguments, nullptr); - } + if (position.data.vecPosition.fX != 0.0f && position.data.vecPosition.fY != 0.0f && position.data.vecPosition.fZ != 0.0f) + { + CVector playerPosition = pSourcePlayer->GetPosition(); + float playerDistancePosition = DistanceBetweenPoints3D(playerPosition, position.data.vecPosition); + if (playerDistancePosition >= g_TickRateSettings.playerTeleportAlert) + { + if (!pSourcePlayer->GetTeleported()) + { + CLuaArguments arguments; + pSourcePlayer->CallEvent("onPlayerTeleport", arguments, nullptr); + } - pSourcePlayer->SetTeleported(false); + pSourcePlayer->SetTeleported(false); + } } pSourcePlayer->SetPosition(position.data.vecPosition);