Skip to content

Commit

Permalink
Merge pull request #1512 from Kenshiin13/skin-hotfix
Browse files Browse the repository at this point in the history
1.11.3 Hotfix
  • Loading branch information
Arctos2win authored Nov 30, 2024
2 parents efafa58 + 6701547 commit 91253f3
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 31 deletions.
2 changes: 1 addition & 1 deletion [core]/es_extended/client/functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@ function ESX.Game.SetVehicleProperties(vehicle, props)
for extraId, enabled in pairs(props.extras) do
extraId = tonumber(extraId)
if extraId then
SetVehicleExtra(vehicle, extraId, enabled)
SetVehicleExtra(vehicle, extraId, not enabled)
end
end
end
Expand Down
30 changes: 17 additions & 13 deletions [core]/es_extended/client/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,6 @@ ESX.SecureNetEvent("esx:requestModel", function(model)
ESX.Streaming.RequestModel(model)
end)

local function ApplyMetadata(metadata)
if metadata.health then
SetEntityHealth(ESX.PlayerData.ped, metadata.health)
end

if metadata.armor and metadata.armor > 0 then
SetPedArmour(ESX.PlayerData.ped, metadata.armor)
end
end

RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin)
ESX.PlayerData = xPlayer

Expand All @@ -34,8 +24,6 @@ RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin)

ESX.PlayerLoaded = true

ApplyMetadata(ESX.PlayerData.metadata)

local timer = GetGameTimer()
while not HaveAllStreamingRequestsCompleted(ESX.PlayerData.ped) and (GetGameTimer() - timer) < 2000 do
Wait(0)
Expand All @@ -58,8 +46,10 @@ RegisterNetEvent("esx:playerLoaded", function(xPlayer, _, skin)
StartServerSyncLoops()
end)

local isFirstSpawn = true
ESX.SecureNetEvent("esx:onPlayerLogout", function()
ESX.PlayerLoaded = false
isFirstSpawn = true
end)

ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight)
Expand All @@ -72,7 +62,21 @@ local function onPlayerSpawn()
end

AddEventHandler("playerSpawned", onPlayerSpawn)
AddEventHandler("esx:onPlayerSpawn", onPlayerSpawn)
AddEventHandler("esx:onPlayerSpawn", function()
onPlayerSpawn()

if isFirstSpawn then
isFirstSpawn = false

if ESX.PlayerData.metadata.health and (ESX.PlayerData.metadata.health > 0 or Config.SaveDeathStatus) then
SetEntityHealth(ESX.PlayerData.ped, ESX.PlayerData.metadata.health)
end

if ESX.PlayerData.metadata.armor and ESX.PlayerData.metadata.armor > 0 then
SetPedArmour(ESX.PlayerData.ped, ESX.PlayerData.metadata.armor)
end
end
end)

AddEventHandler("esx:onPlayerDeath", function()
ESX.SetPlayerData("ped", PlayerPedId())
Expand Down
1 change: 1 addition & 0 deletions [core]/es_extended/shared/config/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ Config.LogPaycheck = false -- Logs paychecks to a nominated Discord channel via
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
Config.MaxWeight = 24 -- the max inventory weight without a backpack
Config.PaycheckInterval = 7 * 60000 -- how often to receive paychecks in milliseconds
Config.SaveDeathStatus = true -- Save the death status of a player
Config.EnableDebug = false -- Use Debug options?

Config.DefaultJobDuty = true -- A players default duty status when changing jobs
Expand Down
7 changes: 7 additions & 0 deletions [core]/es_extended/shared/functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,10 @@ function ESX.AssertType(...)

return matches
end

---@param val unknown
function ESX.IsFunctionReference(val)
local typeVal = type(val)

return typeVal == "function" or (typeVal == "table" and type(getmetatable(val)?.__call) == "function")
end
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ function Multicharacter:PlayerLoaded(playerData, isNew, skin)

TriggerServerEvent("esx:onPlayerSpawn")
TriggerEvent("esx:onPlayerSpawn")
TriggerEvent("playerSpawned")
TriggerEvent("esx:restoreLoadout")

self:Reset()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function Multicharacter:SetupCharacters(source)
local identifier = Server:GetIdentifier(source)
ESX.Players[identifier] = true

local slots = Database:GetPlayerSlots()
local slots = Database:GetPlayerSlots(identifier)
identifier = Server.prefix .. "%:" .. identifier

local rawCharacters = Database:GetPlayerInfo(identifier, slots)
Expand Down
42 changes: 27 additions & 15 deletions [core]/esx_skin/client/modules/menu.lua
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ function Menu:InsertElements()
value = GetPedPropIndex(playerPed, self.components[i].componentId)
end

local data = self.components[i]
local data = table.clone(self.components[i])
data.value = value
data.type = "slider"
data.max = self.maxValues[self.components[i].name]
Expand Down Expand Up @@ -80,27 +80,39 @@ function Menu:Change(data, menu)
Skin.zoomOffset = data.current.zoomOffset
Skin.camOffset = data.current.camOffset

if skin[data.current.name] ~= data.current.value then
-- Change skin element
exports["skinchanger"]:Change(data.current.name, data.current.value)
skin[data.current.name] = data.current.value
if skin[data.current.name] == data.current.value then
return
end

local newData = {}
-- Change skin element
exports["skinchanger"]:Change(data.current.name, data.current.value)
skin[data.current.name] = data.current.value

for i = 1, #self.elements, 1 do
local component = self.components[i]
-- Texture variation changed. We don't have to update anything.
if data.current.textureof then
return
end

newData.max = type(component.max) == "function" and component.max(PlayerPedId(), skin) or component.max
-- Texture changed. Update variation max value.
for i = 1, #self.elements, 1 do
local element = self.elements[i]

if self.elements[i].textureof ~= nil and data.current.name == self.elements[i].textureof then
newData.value = 0
if element.textureof == data.current.name then
local component = self.components[i]

if ESX.IsFunctionReference(component.max) then
self.elements[i].max = component.max(PlayerPedId(), skin)
end
self.elements[i].value = 0

menu.update({ name = self.elements[i].name }, newData)
end
-- Change skin element
exports["skinchanger"]:Change(element.name, 0)
skin[element.name] = data.current.value

self.elements = newData
menu.refresh()
menu.update({ name = self.elements[i].name }, self.elements[i])
menu.refresh()
break
end
end
end

Expand Down
1 change: 1 addition & 0 deletions [core]/skinchanger/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ Config.Components = {
min = 0,
zoomOffset = 0.6,
camOffset = 0.65,
textureof = "hair_1",
max = function(playerPed, Character)
return GetNumberOfPedTextureVariations(playerPed, 2, Character["hair_1"]) - 1
end
Expand Down

0 comments on commit 91253f3

Please sign in to comment.