Skip to content

Commit 29e8009

Browse files
Synchronize changes from 1.6 master branch [ci skip]
4000ea4 Add new event onPlayerTeleport. (#3941)
2 parents 565e659 + 4000ea4 commit 29e8009

File tree

8 files changed

+34
-0
lines changed

8 files changed

+34
-0
lines changed

Server/mods/deathmatch/logic/CGame.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,7 @@ void CGame::AddBuiltInEvents()
16411641
m_Events.AddEvent("onPlayerTriggerInvalidEvent", "eventName, isAdded, isRemote", nullptr, false);
16421642
m_Events.AddEvent("onPlayerChangesProtectedData", "element, key, value", nullptr, false);
16431643
m_Events.AddEvent("onPlayerChangesWorldSpecialProperty", "property, enabled", nullptr, false);
1644+
m_Events.AddEvent("onPlayerTeleport", "", nullptr, false);
16441645

16451646
// Ped events
16461647
m_Events.AddEvent("onPedVehicleEnter", "vehicle, seat, jacked", NULL, false);

Server/mods/deathmatch/logic/CMainConfig.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,6 +1520,7 @@ const std::vector<SIntSetting>& CMainConfig::GetIntSettingList()
15201520
{true, true, 50, 100, 400, "ped_syncer_distance", &g_TickRateSettings.iPedSyncerDistance, &CMainConfig::OnTickRateChange},
15211521
{true, true, 50, 130, 400, "unoccupied_vehicle_syncer_distance", &g_TickRateSettings.iUnoccupiedVehicleSyncerDistance, &CMainConfig::OnTickRateChange},
15221522
{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},
15231524
{false, false, 0, 1, 2, "compact_internal_databases", &m_iCompactInternalDatabases, NULL},
15241525
{true, true, 0, 1, 2, "minclientversion_auto_update", &m_iMinClientVersionAutoUpdate, NULL},
15251526
{true, true, 0, 0, 100, "server_logic_fps_limit", &m_iServerLogicFpsLimit, NULL},

Server/mods/deathmatch/logic/CPlayer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,9 @@ class CPlayer final : public CPed, public CClient
265265
void SetRedirecting(bool bRedirecting) noexcept { m_bIsRedirecting = bRedirecting; }
266266
bool IsRedirecting() const noexcept { return m_bIsRedirecting; }
267267

268+
bool GetTeleported() const noexcept { return m_teleported; }
269+
void SetTeleported(bool state) noexcept { m_teleported = state; }
270+
268271
protected:
269272
bool ReadSpecialData(const int iLine) override { return true; }
270273

@@ -465,4 +468,6 @@ class CPlayer final : public CPed, public CClient
465468

466469
ushort m_usPrevDimension;
467470
SString m_strQuitReasonForLog;
471+
472+
bool m_teleported = false;
468473
};

Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,12 @@ bool CStaticFunctionDefinitions::SetElementPosition(CElement* pElement, const CV
12741274
assert(pElement);
12751275
RUN_CHILDREN(SetElementPosition(*iter, vecPosition, bWarp))
12761276

1277+
if (IS_PLAYER(pElement))
1278+
{
1279+
CPlayer* player = static_cast<CPlayer*>(pElement);
1280+
player->SetTeleported(true);
1281+
}
1282+
12771283
// Update our position for that entity.
12781284
pElement->SetPosition(vecPosition);
12791285

Server/mods/deathmatch/logic/packets/CPlayerPuresyncPacket.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,17 @@ bool CPlayerPuresyncPacket::Read(NetBitStreamInterface& BitStream)
132132
position.data.vecPosition += vecTempPos;
133133
}
134134

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+
135146
pSourcePlayer->SetPosition(position.data.vecPosition);
136147

137148
// Player rotation

Server/mods/deathmatch/mtaserver.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@
161161
Available range: 0 to 130. Default - 30 -->
162162
<vehicle_contact_sync_radius>30</vehicle_contact_sync_radius>
163163

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+
164168
<!-- This parameter sets the amount of extrapolation that clients will apply to remote vehicles. This can reduce
165169
some of the latency induced location disparency by predicting where the remote vehicles will probably be.
166170
Depending on the gamemode, an incorrect prediction may have a negative effect. Therefore this setting

Server/mods/deathmatch/mtaserver.conf.template

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@
162162
Available range: 0 to 130. Default - 30 -->
163163
<vehicle_contact_sync_radius>30</vehicle_contact_sync_radius>
164164

165+
<!-- This parameter specifies the player position limit change alert.
166+
Available range: 5 to 500. Default - 100 -->
167+
<player_teleport_alert>100</player_teleport_alert>
168+
165169
<!-- This parameter sets the amount of extrapolation that clients will apply to remote vehicles. This can reduce
166170
some of the latency induced location disparency by predicting where the remote vehicles will probably be.
167171
Depending on the gamemode, an incorrect prediction may have a negative effect. Therefore this setting

Shared/mods/deathmatch/logic/CTickRateSettings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ struct CTickRateSettings
2626
iPedSyncerDistance = 100;
2727
iUnoccupiedVehicleSyncerDistance = 130;
2828
iVehicleContactSyncRadius = 30;
29+
playerTeleportAlert = 100;
2930
}
3031

3132
int iPureSync;
@@ -41,6 +42,7 @@ struct CTickRateSettings
4142
int iPedSyncerDistance;
4243
int iUnoccupiedVehicleSyncerDistance;
4344
int iVehicleContactSyncRadius;
45+
int playerTeleportAlert;
4446
};
4547

4648
extern CTickRateSettings g_TickRateSettings;

0 commit comments

Comments
 (0)