We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent a38e6ac commit 4000ea4Copy full SHA for 4000ea4
Server/mods/deathmatch/logic/CGame.cpp
@@ -1641,6 +1641,7 @@ void CGame::AddBuiltInEvents()
1641
m_Events.AddEvent("onPlayerTriggerInvalidEvent", "eventName, isAdded, isRemote", nullptr, false);
1642
m_Events.AddEvent("onPlayerChangesProtectedData", "element, key, value", nullptr, false);
1643
m_Events.AddEvent("onPlayerChangesWorldSpecialProperty", "property, enabled", nullptr, false);
1644
+ m_Events.AddEvent("onPlayerTeleport", "", nullptr, false);
1645
1646
// Ped events
1647
m_Events.AddEvent("onPedVehicleEnter", "vehicle, seat, jacked", NULL, false);
Server/mods/deathmatch/logic/CMainConfig.cpp
@@ -1520,6 +1520,7 @@ const std::vector<SIntSetting>& CMainConfig::GetIntSettingList()
1520
{true, true, 50, 100, 400, "ped_syncer_distance", &g_TickRateSettings.iPedSyncerDistance, &CMainConfig::OnTickRateChange},
1521
{true, true, 50, 130, 400, "unoccupied_vehicle_syncer_distance", &g_TickRateSettings.iUnoccupiedVehicleSyncerDistance, &CMainConfig::OnTickRateChange},
1522
{true, true, 0, 30, 130, "vehicle_contact_sync_radius", &g_TickRateSettings.iVehicleContactSyncRadius, &CMainConfig::OnTickRateChange},
1523
+ {true, true, 5, 100, 500, "player_teleport_alert", &g_TickRateSettings.playerTeleportAlert, &CMainConfig::OnTickRateChange},
1524
{false, false, 0, 1, 2, "compact_internal_databases", &m_iCompactInternalDatabases, NULL},
1525
{true, true, 0, 1, 2, "minclientversion_auto_update", &m_iMinClientVersionAutoUpdate, NULL},
1526
{true, true, 0, 0, 100, "server_logic_fps_limit", &m_iServerLogicFpsLimit, NULL},
Server/mods/deathmatch/logic/CPlayer.h
@@ -265,6 +265,9 @@ class CPlayer final : public CPed, public CClient
265
void SetRedirecting(bool bRedirecting) noexcept { m_bIsRedirecting = bRedirecting; }
266
bool IsRedirecting() const noexcept { return m_bIsRedirecting; }
267
268
+ bool GetTeleported() const noexcept { return m_teleported; }
269
+ void SetTeleported(bool state) noexcept { m_teleported = state; }
270
+
271
protected:
272
bool ReadSpecialData(const int iLine) override { return true; }
273
@@ -465,4 +468,6 @@ class CPlayer final : public CPed, public CClient
465
468
466
469
ushort m_usPrevDimension;
467
470
SString m_strQuitReasonForLog;
471
472
+ bool m_teleported = false;
473
};
Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp
@@ -1274,6 +1274,12 @@ bool CStaticFunctionDefinitions::SetElementPosition(CElement* pElement, const CV
1274
assert(pElement);
1275
RUN_CHILDREN(SetElementPosition(*iter, vecPosition, bWarp))
1276
1277
+ if (IS_PLAYER(pElement))
1278
+ {
1279
+ CPlayer* player = static_cast<CPlayer*>(pElement);
1280
+ player->SetTeleported(true);
1281
+ }
1282
1283
// Update our position for that entity.
1284
pElement->SetPosition(vecPosition);
1285
Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp
@@ -132,6 +132,17 @@ bool CPlayerPuresyncPacket::Read(NetBitStreamInterface& BitStream)
132
position.data.vecPosition += vecTempPos;
133
}
134
135
+ CVector playerPosition = pSourcePlayer->GetPosition();
136
+ float playerDistancePosition = DistanceBetweenPoints3D(playerPosition, position.data.vecPosition);
137
+ if (playerDistancePosition >= g_TickRateSettings.playerTeleportAlert) {
138
+ if (!pSourcePlayer->GetTeleported()) {
139
+ CLuaArguments arguments;
140
+ pSourcePlayer->CallEvent("onPlayerTeleport", arguments, nullptr);
141
142
143
+ pSourcePlayer->SetTeleported(false);
144
145
146
pSourcePlayer->SetPosition(position.data.vecPosition);
147
148
// Player rotation
Server/mods/deathmatch/mtaserver.conf
@@ -161,6 +161,10 @@
161
Available range: 0 to 130. Default - 30 -->
162
<vehicle_contact_sync_radius>30</vehicle_contact_sync_radius>
163
164
+ <!-- This parameter specifies the player position limit change alert.
165
+ Available range: 5 to 500. Default - 100 -->
166
+ <player_teleport_alert>100</player_teleport_alert>
167
168
<!-- This parameter sets the amount of extrapolation that clients will apply to remote vehicles. This can reduce
169
some of the latency induced location disparency by predicting where the remote vehicles will probably be.
170
Depending on the gamemode, an incorrect prediction may have a negative effect. Therefore this setting
Server/mods/deathmatch/mtaserver.conf.template
@@ -162,6 +162,10 @@
171
Shared/mods/deathmatch/logic/CTickRateSettings.h
@@ -26,6 +26,7 @@ struct CTickRateSettings
26
iPedSyncerDistance = 100;
27
iUnoccupiedVehicleSyncerDistance = 130;
28
iVehicleContactSyncRadius = 30;
29
+ playerTeleportAlert = 100;
30
31
32
int iPureSync;
@@ -41,6 +42,7 @@ struct CTickRateSettings
41
42
int iPedSyncerDistance;
43
int iUnoccupiedVehicleSyncerDistance;
44
int iVehicleContactSyncRadius;
45
+ int playerTeleportAlert;
46
47
48
extern CTickRateSettings g_TickRateSettings;
0 commit comments