Skip to content

Commit cf86d2e

Browse files
committed
feat(client/admin_client) add ability to disable player shooting while frozen
1 parent 119e41e commit cf86d2e

File tree

1 file changed

+49
-18
lines changed

1 file changed

+49
-18
lines changed

client/admin_client.lua

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ MessageShortcuts = {}
1919
FrozenPlayers = {}
2020
MutedPlayers = {}
2121

22+
local cachedInfo = {
23+
ped = PlayerPedId(),
24+
veh = 0,
25+
player = PlayerId(),
26+
}
27+
2228
local vehicleInfo = {
2329
netId = nil,
2430
seat = nil,
@@ -126,20 +132,37 @@ RegisterNetEvent('EasyAdmin:SetPlayerMuted', function(player,state)
126132
end
127133
end)
128134

129-
Citizen.CreateThread( function()
130-
while true do
131-
Citizen.Wait(0)
132-
if frozen then
133-
local localPlayerPedId = PlayerPedId()
134-
FreezeEntityPosition(localPlayerPedId, frozen)
135-
if IsPedInAnyVehicle(localPlayerPedId, true) then
136-
FreezeEntityPosition(GetVehiclePedIsIn(localPlayerPedId, false), frozen)
137-
end
138-
else
139-
Citizen.Wait(200)
135+
function freezeMe()
136+
137+
Citizen.CreateThread(function()
138+
139+
local disableShootingWhileFrozen = GetConvar("ea_disableShootingWhileFrozen", 'false')
140+
141+
while frozen do
142+
143+
FreezeEntityPosition(cachedInfo.ped, frozen)
144+
if cachedInfo.veh ~= 0 then
145+
FreezeEntityPosition(cachedInfo.veh, frozen)
146+
end
147+
if disableShootingWhileFrozen == 'true' then
148+
DisablePlayerFiring(cachedInfo.player, true)
149+
end
150+
151+
Wait(0)
152+
140153
end
154+
155+
end)
156+
157+
end
158+
159+
function unFreezeMe()
160+
local localPlayerPedId = PlayerPedId()
161+
FreezeEntityPosition(localPlayerPedId, false)
162+
if IsPedInAnyVehicle(localPlayerPedId, true) then
163+
FreezeEntityPosition(GetVehiclePedIsIn(localPlayerPedId, false), false)
141164
end
142-
end)
165+
end
143166

144167
RegisterNetEvent("EasyAdmin:requestSpectate", function(playerServerId, tgtCoords)
145168
local localPlayerPed = PlayerPedId()
@@ -166,6 +189,7 @@ RegisterNetEvent("EasyAdmin:requestSpectate", function(playerServerId, tgtCoords
166189
end
167190
spectatePlayer(localPlayerPed,GetPlayerFromServerId(PlayerId()),GetPlayerName(PlayerId()))
168191
frozen = false
192+
unFreezeMe()
169193
return
170194
else
171195
if not oldCoords then
@@ -174,6 +198,7 @@ RegisterNetEvent("EasyAdmin:requestSpectate", function(playerServerId, tgtCoords
174198
end
175199
SetEntityCoords(localPlayerPed, tgtCoords.x, tgtCoords.y, tgtCoords.z - 10.0, 0, 0, 0, false)
176200
frozen = true
201+
freezeMe()
177202
stopSpectateUpdate = true
178203
local adminPed = localPlayerPed
179204
local playerId = GetPlayerFromServerId(playerServerId)
@@ -252,8 +277,8 @@ end)
252277
Citizen.CreateThread( function()
253278
while true do
254279
Citizen.Wait(500)
280+
local localPlayerPed = PlayerPedId()
255281
if drawInfo and not stopSpectateUpdate then
256-
local localPlayerPed = PlayerPedId()
257282
local targetPed = GetPlayerPed(drawTarget)
258283
local targetGod = GetPlayerInvincible(drawTarget)
259284

@@ -264,6 +289,11 @@ Citizen.CreateThread( function()
264289
else
265290
Citizen.Wait(1000)
266291
end
292+
cachedInfo = {
293+
ped = localPlayerPed,
294+
veh = GetVehiclePedIsIn(localPlayerPed, false),
295+
player = PlayerId(),
296+
}
267297
end
268298
end)
269299

@@ -328,11 +358,11 @@ end, false)
328358

329359
RegisterNetEvent("EasyAdmin:FreezePlayer", function(toggle)
330360
frozen = toggle
331-
local playerPed = PlayerPedId()
332-
FreezeEntityPosition(playerPed, frozen)
333-
if IsPedInAnyVehicle(playerPed, false) then
334-
FreezeEntityPosition(GetVehiclePedIsIn(playerPed, false), frozen)
335-
end
361+
if frozen then
362+
freezeMe()
363+
else
364+
unFreezeMe()
365+
end
336366
end)
337367

338368

@@ -376,6 +406,7 @@ function spectatePlayer(targetPed,target,name)
376406
StopDrawPlayerInfo()
377407
TriggerEvent("EasyAdmin:showNotification", GetLocalisedText("stoppedSpectating"))
378408
frozen = false
409+
unFreezeMe()
379410
Citizen.Wait(200) -- to prevent staying invisible
380411
SetEntityVisible(playerPed, true, 0)
381412
SetEntityCollision(playerPed, true, true)

0 commit comments

Comments
 (0)