From a18f1eb9da2517f147a1490e6be6c40b7418f318 Mon Sep 17 00:00:00 2001 From: _Not_ Date: Sun, 19 Oct 2025 08:27:10 -0500 Subject: [PATCH] apply(AlexRXWindy changes of stats improvement) --- .../client/modules/adjustments.lua | 101 +++++++++++------- .../es_extended/shared/config/adjustments.lua | 25 ++++- 2 files changed, 84 insertions(+), 42 deletions(-) diff --git a/[core]/es_extended/client/modules/adjustments.lua b/[core]/es_extended/client/modules/adjustments.lua index 19a2f3b2..9b79a4de 100644 --- a/[core]/es_extended/client/modules/adjustments.lua +++ b/[core]/es_extended/client/modules/adjustments.lua @@ -238,19 +238,37 @@ end function Adjustments:ApplyPlayerStats() if not Config.PlayerStatsByGender.enabled then return end + if Config.EnableDebug then + print('[^3adjustments^7] applying player stats...') + end + local gender = self:GetPlayerGender() - if not gender then return end + if not gender then + if Config.EnableDebug then + print('[^1adjustments^7] failed to detect gender') + end + return + end local stats = Config.PlayerStatsByGender[gender] - if not stats then return end + if not stats then + if Config.EnableDebug then + print('[^1adjustments^7] no stats found for gender: ' .. gender) + end + return + end + if stats.stamina then + SetRunSprintMultiplierForPlayer(ESX.playerId, stats.stamina) + end - SetPlayerMaxStamina(ESX.playerId, 100.0) - RestorePlayerStamina(ESX.playerId, 100.0) - SetRunSprintMultiplierForPlayer(ESX.playerId, stats.stamina) - SetSwimMultiplierForPlayer(ESX.playerId, stats.stamina) + if stats.strength then + SetPlayerMeleeWeaponDamageModifier(ESX.playerId, stats.strength) + end - SetPedMoveRateOverride(ESX.PlayerData.ped, stats.stamina) + if stats.swimSpeed then + SetSwimMultiplierForPlayer(ESX.playerId, stats.swimSpeed) + end -- moveSpeed requires continuous loop if stats.moveSpeed then @@ -275,24 +293,39 @@ function Adjustments:ApplyPlayerStats() end function Adjustments:GetPlayerGender() - if not ESX.PlayerLoaded then return end + if not ESX.PlayerLoaded then + if Config.EnableDebug then + print('[^1adjustments^7] player not loaded yet') + end + return + end + + if Config.EnableDebug then + print('[^3adjustments^7] detecting gender using: ' .. (Config.PlayerStatsByGender.useCharacterData and 'character data' or 'ped model')) + end if Config.PlayerStatsByGender.useCharacterData then + -- Option 1: character data if ESX.PlayerData.sex then return ESX.PlayerData.sex == 'm' and 'male' or 'female' end - - if ESX.PlayerData.gender then - return ESX.PlayerData.gender == 0 and 'male' or 'female' - end else + -- Option 2: ped model local model = GetEntityModel(ESX.PlayerData.ped) - if model == `mp_m_freemode_01` then - return 'male' - elseif model == `mp_f_freemode_01` then - return 'female' + + for i = 1, #Config.PlayerStatsByGender.malePeds do + if model == Config.PlayerStatsByGender.malePeds[i] then + return 'male' + end end + for i = 1, #Config.PlayerStatsByGender.femalePeds do + if model == Config.PlayerStatsByGender.femalePeds[i] then + return 'female' + end + end + + -- Native fallback if IsPedMale(ESX.PlayerData.ped) then return 'male' else @@ -303,23 +336,6 @@ function Adjustments:GetPlayerGender() return nil end -function Adjustments:RefreshPlayerStats() - if not Config.PlayerStatsByGender.enabled then return end - - local gender = self:GetPlayerGender() - if not gender then return end - - local stats = Config.PlayerStatsByGender[gender] - if not stats then return end - - SetRunSprintMultiplierForPlayer(ESX.playerId, stats.stamina) - SetSwimMultiplierForPlayer(ESX.playerId, stats.stamina) - SetPedMoveRateOverride(ESX.PlayerData.ped, stats.stamina) - - SetPlayerMeleeWeaponDamageModifier(ESX.playerId, stats.strength) - SetPlayerWeaponDamageModifier(ESX.playerId, stats.strength) -end - function Adjustments:Load() self:RemoveHudComponents() self:DisableAimAssist() @@ -340,11 +356,20 @@ function Adjustments:Load() self:ApplyPlayerStats() end) - AddEventHandler('skinchanger:modelLoaded', function() - self:RefreshPlayerStats() - end) + if not Config.PlayerStatsByGender.useCharacterData then + AddEventHandler('skinchanger:modelLoaded', function() + self:ApplyPlayerStats() + end) + end AddEventHandler('esx:onPlayerSpawn', function() - self:RefreshPlayerStats() + self:ApplyPlayerStats() end) -end + + if Config.PlayerStatsByGender.enabled and Config.EnableDebug then + print('[^2adjustments^7] player stats by gender loaded') + print('[^3adjustments^7] enabled: ' .. tostring(Config.PlayerStatsByGender.enabled)) + print('[^3adjustments^7] use character data: ' .. tostring(Config.PlayerStatsByGender.useCharacterData)) + print('[^3adjustments^7] debug mode: active') + end +end \ No newline at end of file diff --git a/[core]/es_extended/shared/config/adjustments.lua b/[core]/es_extended/shared/config/adjustments.lua index e798311e..b25e16a0 100644 --- a/[core]/es_extended/shared/config/adjustments.lua +++ b/[core]/es_extended/shared/config/adjustments.lua @@ -44,17 +44,34 @@ Config.Multipliers = { vehicleDensity = 1.0 } + Config.PlayerStatsByGender = { enabled = true, debugMode = true, useCharacterData = true, -- true: uses ESX.PlayerData.sex | false: uses ped model/skin + malePeds = { + `mp_m_freemode_01`, + }, + femalePeds = { + `mp_f_freemode_01`, + }, male = { stamina = 1.0, - strength = 1.0 + strength = 1.0, + swimSpeed = 1.25, + moveSpeed = 1.0, + + -- ADD NEW STATS HERE + -- 1. Uncomment line below (remove --) + -- 2. Change value: 1.0 = normal, 1.5 = +50%, 0.5 = -50% + -- 3. Find natives: https://docs.fivem.net/natives/ + -- statName = 1.0, }, - female = { + female = { stamina = 1.15, - strength = 0.85 + strength = 0.85, + swimSpeed = 1.25, + moveSpeed = 7.00, } } @@ -91,4 +108,4 @@ Config.DiscordActivity = { }, presence = "{player_name} [{player_id}] | {server_players}/{server_maxplayers}", refresh = 1 * 60 * 1000, -- 1 minute -} +} \ No newline at end of file