157 lines
6.1 KiB
Lua
157 lines
6.1 KiB
Lua
|
if not Framework.ESX() then return end
|
||
|
|
||
|
local function tofloat(num)
|
||
|
return num + 0.0
|
||
|
end
|
||
|
|
||
|
local function convertSkinToNewFormat(oldSkin, gender)
|
||
|
local skin = {
|
||
|
components = Framework.ConvertComponents(oldSkin),
|
||
|
eyeColor = oldSkin.eye_color,
|
||
|
faceFeatures = {
|
||
|
chinBoneLenght = tofloat((oldSkin.chin_2 or 0) / 10),
|
||
|
noseBoneTwist = tofloat((oldSkin.nose_6 or 0) / 10),
|
||
|
nosePeakHigh = tofloat((oldSkin.nose_2 or 0) / 10),
|
||
|
jawBoneWidth = tofloat((oldSkin.jaw_1 or 0) / 10),
|
||
|
cheeksWidth = tofloat((oldSkin.cheeks_3 or 0) / 10),
|
||
|
eyeBrownHigh = tofloat((oldSkin.eyebrows_5 or 0) / 10),
|
||
|
chinHole = tofloat((oldSkin.chin_4 or 0) / 10),
|
||
|
jawBoneBackSize = tofloat((oldSkin.jaw_2 or 0) / 10),
|
||
|
eyesOpening = tofloat((oldSkin.eye_squint or 0) / 10),
|
||
|
lipsThickness = tofloat((oldSkin.lip_thickness or 0) / 10),
|
||
|
nosePeakSize = tofloat((oldSkin.nose_3 or 0) / 10),
|
||
|
eyeBrownForward = tofloat((oldSkin.eyebrows_6 or 0) / 10),
|
||
|
neckThickness = tofloat((oldSkin.neck_thickness or 0) / 10),
|
||
|
chinBoneSize = tofloat((oldSkin.chin_3 or 0) / 10),
|
||
|
chinBoneLowering = tofloat((oldSkin.chin_1 or 0) / 10),
|
||
|
cheeksBoneWidth = tofloat((oldSkin.cheeks_2 or 0) / 10),
|
||
|
nosePeakLowering = tofloat((oldSkin.nose_5 or 0) / 10),
|
||
|
noseBoneHigh = tofloat((oldSkin.nose_4 or 0) / 10),
|
||
|
cheeksBoneHigh = tofloat((oldSkin.cheeks_1 or 0) / 10),
|
||
|
noseWidth = tofloat((oldSkin.nose_1 or 0) / 10)
|
||
|
},
|
||
|
hair = {
|
||
|
highlight = oldSkin.hair_color_2 or 0,
|
||
|
texture = oldSkin.hair_2 or 0,
|
||
|
style = oldSkin.hair_1 or 0,
|
||
|
color = oldSkin.hair_color_1 or 0
|
||
|
},
|
||
|
headBlend = {
|
||
|
thirdMix = 0,
|
||
|
skinSecond = oldSkin.dad or 0,
|
||
|
skinMix = tofloat((oldSkin.skin_md_weight or 0) / 100),
|
||
|
skinThird = 0,
|
||
|
shapeFirst = oldSkin.mom or 0,
|
||
|
shapeThird = 0,
|
||
|
shapeMix = tofloat((oldSkin.face_md_weight or 0) / 100),
|
||
|
shapeSecond = oldSkin.dad or 0,
|
||
|
skinFirst = oldSkin.mom or 0
|
||
|
},
|
||
|
headOverlays = {
|
||
|
complexion = {
|
||
|
opacity = tofloat((oldSkin.complexion_2 or 0) / 10),
|
||
|
color = 0,
|
||
|
style = oldSkin.complexion_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
lipstick = {
|
||
|
opacity = tofloat((oldSkin.lipstick_2 or 0) / 10),
|
||
|
color = oldSkin.lipstick_3 or 0,
|
||
|
style = oldSkin.lipstick_1 or 0,
|
||
|
secondColor = oldSkin.lipstick_4 or 0
|
||
|
},
|
||
|
eyebrows = {
|
||
|
opacity = tofloat((oldSkin.eyebrows_2 or 0) / 10),
|
||
|
color = oldSkin.eyebrows_3 or 0,
|
||
|
style = oldSkin.eyebrows_1 or 0,
|
||
|
secondColor = oldSkin.eyebrows_4 or 0
|
||
|
},
|
||
|
beard = {
|
||
|
opacity = tofloat((oldSkin.beard_2 or 0) / 10),
|
||
|
color = oldSkin.beard_3 or 0,
|
||
|
style = oldSkin.beard_1 or 0,
|
||
|
secondColor = oldSkin.beard_4 or 0
|
||
|
},
|
||
|
blush = {
|
||
|
opacity = tofloat((oldSkin.blush_2 or 0) / 10),
|
||
|
color = oldSkin.blush_3 or 0,
|
||
|
style = oldSkin.blush_1 or 0,
|
||
|
secondColor = oldSkin.blush_4 or 0
|
||
|
},
|
||
|
ageing = {
|
||
|
opacity = tofloat((oldSkin.age_2 or 0) / 10),
|
||
|
color = 0,
|
||
|
style = oldSkin.age_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
blemishes = {
|
||
|
opacity = tofloat((oldSkin.blemishes_2 or 0) / 10),
|
||
|
color = 0,
|
||
|
style = oldSkin.blemishes_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
chestHair = {
|
||
|
opacity = tofloat((oldSkin.chest_2 or 0) / 10),
|
||
|
color = oldSkin.chest_3 or 0,
|
||
|
style = oldSkin.chest_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
bodyBlemishes = {
|
||
|
opacity = tofloat((oldSkin.bodyb_2 or 0) / 10),
|
||
|
color = oldSkin.bodyb_3 or 0,
|
||
|
style = oldSkin.bodyb_1 or 0,
|
||
|
secondColor = oldSkin.bodyb_4 or 0
|
||
|
},
|
||
|
moleAndFreckles = {
|
||
|
opacity = tofloat((oldSkin.moles_2 or 0) / 10),
|
||
|
color = 0,
|
||
|
style = oldSkin.moles_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
sunDamage = {
|
||
|
opacity = tofloat((oldSkin.sun_2 or 0) / 10),
|
||
|
color = 0,
|
||
|
style = oldSkin.sun_1 or 0,
|
||
|
secondColor = 0
|
||
|
},
|
||
|
makeUp = {
|
||
|
opacity = tofloat((oldSkin.makeup_2 or 0) / 10),
|
||
|
color = oldSkin.makeup_3 or 0,
|
||
|
style = oldSkin.makeup_1 or 0,
|
||
|
secondColor = oldSkin.makeup_4 or 0
|
||
|
}
|
||
|
},
|
||
|
model = gender == "m" and "mp_m_freemode_01" or "mp_f_freemode_01",
|
||
|
props = Framework.ConvertProps(oldSkin),
|
||
|
tattoos = {}
|
||
|
}
|
||
|
|
||
|
return skin
|
||
|
end
|
||
|
|
||
|
lib.addCommand("migrateskins", { help = "Migrate skins", restricted = "group.admin" }, function(source)
|
||
|
local users = Database.Users.GetAll()
|
||
|
local convertedSkins = 0
|
||
|
if users then
|
||
|
for i = 1, #users do
|
||
|
local user = users[i]
|
||
|
if user.skin then
|
||
|
local oldSkin = json.decode(user.skin)
|
||
|
if oldSkin.hair_1 then -- Convert only if its an old skin
|
||
|
local skin = json.encode(convertSkinToNewFormat(oldSkin, user.sex))
|
||
|
local affectedRows = Database.Users.UpdateSkinForUser(user.identifier, skin)
|
||
|
if affectedRows then
|
||
|
convertedSkins += 1
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
lib.notify(source, {
|
||
|
title = _L("migrate.success.title"),
|
||
|
description = string.format(_L("migrate.success.description"), tostring(convertedSkins)),
|
||
|
type = "success",
|
||
|
position = Config.NotifyOptions.position
|
||
|
})
|
||
|
end)
|