Skip to content

Commit a2f6b9a

Browse files
fix(progress): prop replication overload (#58)
1 parent 13a24ba commit a2f6b9a

File tree

2 files changed

+41
-14
lines changed

2 files changed

+41
-14
lines changed

resource/interface/client/progress.lua

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ local DisableControlAction = DisableControlAction
1111
local DisablePlayerFiring = DisablePlayerFiring
1212
local playerState = LocalPlayer.state
1313
local createdProps = {}
14+
local maxProps = GetConvarInt('ox:progressPropLimit', 2)
1415

1516
---@class ProgressPropProps
1617
---@field model string
@@ -34,13 +35,16 @@ local createdProps = {}
3435
---@field disable? { move?: boolean, sprint?: boolean, car?: boolean, combat?: boolean, mouse?: boolean }
3536

3637
local function createProp(ped, prop)
37-
lib.requestModel(prop.model)
38+
local ok, result = pcall(lib.requestModel, prop.model)
39+
40+
if not ok then return lib.print.error(result) end
41+
3842
local coords = GetEntityCoords(ped)
39-
local object = CreateObject(prop.model, coords.x, coords.y, coords.z, false, false, false)
43+
local object = CreateObject(result, coords.x, coords.y, coords.z, false, false, false)
4044

4145
AttachEntityToEntity(object, ped, GetPedBoneIndex(ped, prop.bone or 60309), prop.pos.x, prop.pos.y, prop.pos.z, prop.rot.x, prop.rot.y, prop.rot.z, true,
4246
true, false, true, prop.rotOrder or 0, true)
43-
SetModelAsNoLongerNeeded(prop.model)
47+
SetModelAsNoLongerNeeded(result)
4448

4549
return object
4650
end
@@ -90,7 +94,7 @@ local function startProgress(data)
9094
end
9195

9296
if data.prop then
93-
playerState:set('lib:progressProps', data.prop, true)
97+
TriggerServerEvent('ox_lib:progressProps', data.prop)
9498
end
9599

96100
local disable = data.disable
@@ -137,7 +141,7 @@ local function startProgress(data)
137141
end
138142

139143
if data.prop then
140-
playerState:set('lib:progressProps', nil, true)
144+
TriggerServerEvent('ox_lib:progressProps', nil)
141145
end
142146

143147
if anim then
@@ -225,14 +229,18 @@ end
225229

226230
local function deleteProgressProps(serverId)
227231
local playerProps = createdProps[serverId]
232+
228233
if not playerProps then return end
234+
235+
createdProps[serverId] = nil
236+
229237
for i = 1, #playerProps do
230238
local prop = playerProps[i]
239+
231240
if DoesEntityExist(prop) then
232241
DeleteEntity(prop)
233242
end
234243
end
235-
createdProps[serverId] = nil
236244
end
237245

238246
RegisterNetEvent('onPlayerDropped', function(serverId)
@@ -248,22 +256,29 @@ AddStateBagChangeHandler('lib:progressProps', nil, function(bagName, key, value,
248256
local ped = GetPlayerPed(ply)
249257
local serverId = GetPlayerServerId(ply)
250258

251-
if not value then
259+
if not value or createdProps[serverId] then
252260
return deleteProgressProps(serverId)
253261
end
254262

255-
createdProps[serverId] = {}
256-
local playerProps = createdProps[serverId]
263+
local playerProps = {}
257264

258265
if value.model then
259-
playerProps[#playerProps + 1] = createProp(ped, value)
266+
local prop = createProp(ped, value)
267+
268+
if prop then
269+
playerProps[#playerProps + 1] = createProp(ped, value)
270+
end
260271
else
261-
for i = 1, #value do
262-
local prop = value[i]
272+
local propCount = math.min(maxProps, #value)
273+
274+
for i = 1, propCount do
275+
local prop = createProp(ped, value[i])
263276

264277
if prop then
265-
playerProps[#playerProps + 1] = createProp(ped, prop)
278+
playerProps[#playerProps + 1] = prop
266279
end
267280
end
268281
end
269-
end)
282+
283+
createdProps[serverId] = playerProps
284+
end)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
local maxProps = GetConvarInt('ox:progressPropLimit', 2)
2+
3+
---@param props ProgressPropProps | ProgressPropProps[] | nil
4+
RegisterNetEvent('ox_lib:progressProps', function(props)
5+
if type(props) == 'table' then
6+
props = #props > maxProps and { table.unpack(props, 1, maxProps) } or props
7+
else
8+
props = nil
9+
end
10+
11+
Player(source).state:set('lib:progressProps', props, true)
12+
end)

0 commit comments

Comments
 (0)