Skip to content

Commit b672f30

Browse files
committed
feat(player-stats): add new configurable stats and new character stat options
1 parent 7c538fb commit b672f30

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

[core]/es_extended/client/modules/adjustments.lua

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,73 @@ function Adjustments:Multipliers()
235235
end)
236236
end
237237

238+
function Adjustments:ApplyPlayerStats()
239+
if not Config.PlayerStatsByGender.enabled then return end
240+
241+
local gender = self:GetPlayerGender()
242+
if not gender then return end
243+
244+
local stats = Config.PlayerStatsByGender[gender]
245+
if not stats then return end
246+
247+
248+
SetPlayerMaxStamina(ESX.playerId, 100.0)
249+
RestorePlayerStamina(ESX.playerId, 100.0)
250+
SetRunSprintMultiplierForPlayer(ESX.playerId, stats.stamina)
251+
SetSwimMultiplierForPlayer(ESX.playerId, stats.stamina)
252+
253+
SetPedMoveRateOverride(ESX.PlayerData.ped, stats.stamina)
254+
255+
SetPlayerMeleeWeaponDamageModifier(ESX.playerId, stats.strength)
256+
SetPlayerWeaponDamageModifier(ESX.playerId, stats.strength)
257+
end
258+
259+
function Adjustments:GetPlayerGender()
260+
if not ESX.PlayerLoaded then return end
261+
262+
if Config.PlayerStatsByGender.useCharacterData then
263+
if ESX.PlayerData.sex then
264+
return ESX.PlayerData.sex == 'm' and 'male' or 'female'
265+
end
266+
267+
if ESX.PlayerData.gender then
268+
return ESX.PlayerData.gender == 0 and 'male' or 'female'
269+
end
270+
else
271+
local model = GetEntityModel(ESX.PlayerData.ped)
272+
if model == `mp_m_freemode_01` then
273+
return 'male'
274+
elseif model == `mp_f_freemode_01` then
275+
return 'female'
276+
end
277+
278+
if IsPedMale(ESX.PlayerData.ped) then
279+
return 'male'
280+
else
281+
return 'female'
282+
end
283+
end
284+
285+
return nil
286+
end
287+
288+
function Adjustments:RefreshPlayerStats()
289+
if not Config.PlayerStatsByGender.enabled then return end
290+
291+
local gender = self:GetPlayerGender()
292+
if not gender then return end
293+
294+
local stats = Config.PlayerStatsByGender[gender]
295+
if not stats then return end
296+
297+
SetRunSprintMultiplierForPlayer(ESX.playerId, stats.stamina)
298+
SetSwimMultiplierForPlayer(ESX.playerId, stats.stamina)
299+
SetPedMoveRateOverride(ESX.PlayerData.ped, stats.stamina)
300+
301+
SetPlayerMeleeWeaponDamageModifier(ESX.playerId, stats.strength)
302+
SetPlayerWeaponDamageModifier(ESX.playerId, stats.strength)
303+
end
304+
238305
function Adjustments:Load()
239306
self:RemoveHudComponents()
240307
self:DisableAimAssist()
@@ -250,4 +317,16 @@ function Adjustments:Load()
250317
self:WantedLevel()
251318
self:DisableRadio()
252319
self:Multipliers()
320+
321+
AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin)
322+
self:ApplyPlayerStats()
323+
end)
324+
325+
AddEventHandler('skinchanger:modelLoaded', function()
326+
self:RefreshPlayerStats()
327+
end)
328+
329+
AddEventHandler('esx:onPlayerSpawn', function()
330+
self:RefreshPlayerStats()
331+
end)
253332
end

[core]/es_extended/shared/config/adjustments.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,20 @@ Config.Multipliers = {
4444
vehicleDensity = 1.0
4545
}
4646

47+
Config.PlayerStatsByGender = {
48+
enabled = true,
49+
debugMode = true,
50+
useCharacterData = true, -- true: uses ESX.PlayerData.sex | false: uses ped model/skin
51+
male = {
52+
stamina = 1.0,
53+
strength = 1.0
54+
},
55+
female = {
56+
stamina = 1.15,
57+
strength = 0.85
58+
}
59+
}
60+
4761
-- Pattern string format
4862
--1 will lead to a random number from 0-9.
4963
--A will lead to a random letter from A-Z.

0 commit comments

Comments
 (0)