local LastSex = -1 local LoadSkin = nil local LoadClothes = nil local Character = {} local Components = Config.Components for i = 1, #Components, 1 do Character[Components[i].name] = Components[i].value end function LoadDefaultModel(malePed, cb) local playerPed = PlayerPedId() local characterModel if malePed then characterModel = `mp_m_freemode_01` else characterModel = `mp_f_freemode_01` end RequestModel(characterModel) CreateThread(function() while not HasModelLoaded(characterModel) do RequestModel(characterModel) Wait(0) end if IsModelInCdimage(characterModel) and IsModelValid(characterModel) then SetPlayerModel(PlayerId(), characterModel) SetPedDefaultComponentVariation(playerPed) end SetModelAsNoLongerNeeded(characterModel) if cb ~= nil then cb() end TriggerEvent("skinchanger:modelLoaded") end) end function GetMaxVals() local playerPed = PlayerPedId() local data = { sex = 1, mom = 45, -- numbers 21-41 and 45 are female (22 total) dad = 44, -- numbers 0-20 and 42-44 are male (24 total) face_md_weight = 100, skin_md_weight = 100, nose_1 = 10, nose_2 = 10, nose_3 = 10, nose_4 = 10, nose_5 = 10, nose_6 = 10, cheeks_1 = 10, cheeks_2 = 10, cheeks_3 = 10, lip_thickness = 10, jaw_1 = 10, jaw_2 = 10, chin_1 = 10, chin_2 = 10, chin_3 = 10, chin_4 = 10, neck_thickness = 10, age_1 = GetPedHeadOverlayNum(3) - 1, age_2 = 10, beard_1 = GetPedHeadOverlayNum(1) - 1, beard_2 = 10, beard_3 = GetNumHairColors() - 1, beard_4 = GetNumHairColors() - 1, hair_1 = GetNumberOfPedDrawableVariations(playerPed, 2) - 1, hair_2 = GetNumberOfPedTextureVariations(playerPed, 2, Character["hair_1"]) - 1, hair_color_1 = GetNumHairColors() - 1, hair_color_2 = GetNumHairColors() - 1, eye_color = 31, eye_squint = 10, eyebrows_1 = GetPedHeadOverlayNum(2) - 1, eyebrows_2 = 10, eyebrows_3 = GetNumHairColors() - 1, eyebrows_4 = GetNumHairColors() - 1, eyebrows_5 = 10, eyebrows_6 = 10, makeup_1 = GetPedHeadOverlayNum(4) - 1, makeup_2 = 10, makeup_3 = GetNumHairColors() - 1, makeup_4 = GetNumHairColors() - 1, lipstick_1 = GetPedHeadOverlayNum(8) - 1, lipstick_2 = 10, lipstick_3 = GetNumHairColors() - 1, lipstick_4 = GetNumHairColors() - 1, blemishes_1 = GetPedHeadOverlayNum(0) - 1, blemishes_2 = 10, blush_1 = GetPedHeadOverlayNum(5) - 1, blush_2 = 10, blush_3 = GetNumHairColors() - 1, complexion_1 = GetPedHeadOverlayNum(6) - 1, complexion_2 = 10, sun_1 = GetPedHeadOverlayNum(7) - 1, sun_2 = 10, moles_1 = GetPedHeadOverlayNum(9) - 1, moles_2 = 10, chest_1 = GetPedHeadOverlayNum(10) - 1, chest_2 = 10, chest_3 = GetNumHairColors() - 1, bodyb_1 = GetPedHeadOverlayNum(11) - 1, bodyb_2 = 10, bodyb_3 = GetPedHeadOverlayNum(12) - 1, bodyb_4 = 10, ears_1 = GetNumberOfPedPropDrawableVariations(playerPed, 2) - 1, ears_2 = GetNumberOfPedPropTextureVariations(playerPed, 2, Character["ears_1"] - 1), tshirt_1 = GetNumberOfPedDrawableVariations(playerPed, 8) - 1, tshirt_2 = GetNumberOfPedTextureVariations(playerPed, 8, Character["tshirt_1"]) - 1, torso_1 = GetNumberOfPedDrawableVariations(playerPed, 11) - 1, torso_2 = GetNumberOfPedTextureVariations(playerPed, 11, Character["torso_1"]) - 1, decals_1 = GetNumberOfPedDrawableVariations(playerPed, 10) - 1, decals_2 = GetNumberOfPedTextureVariations(playerPed, 10, Character["decals_1"]) - 1, arms = GetNumberOfPedDrawableVariations(playerPed, 3) - 1, arms_2 = 10, pants_1 = GetNumberOfPedDrawableVariations(playerPed, 4) - 1, pants_2 = GetNumberOfPedTextureVariations(playerPed, 4, Character["pants_1"]) - 1, shoes_1 = GetNumberOfPedDrawableVariations(playerPed, 6) - 1, shoes_2 = GetNumberOfPedTextureVariations(playerPed, 6, Character["shoes_1"]) - 1, mask_1 = GetNumberOfPedDrawableVariations(playerPed, 1) - 1, mask_2 = GetNumberOfPedTextureVariations(playerPed, 1, Character["mask_1"]) - 1, bproof_1 = GetNumberOfPedDrawableVariations(playerPed, 9) - 1, bproof_2 = GetNumberOfPedTextureVariations(playerPed, 9, Character["bproof_1"]) - 1, chain_1 = GetNumberOfPedDrawableVariations(playerPed, 7) - 1, chain_2 = GetNumberOfPedTextureVariations(playerPed, 7, Character["chain_1"]) - 1, bags_1 = GetNumberOfPedDrawableVariations(playerPed, 5) - 1, bags_2 = GetNumberOfPedTextureVariations(playerPed, 5, Character["bags_1"]) - 1, helmet_1 = GetNumberOfPedPropDrawableVariations(playerPed, 0) - 1, helmet_2 = GetNumberOfPedPropTextureVariations(playerPed, 0, Character["helmet_1"]) - 1, glasses_1 = GetNumberOfPedPropDrawableVariations(playerPed, 1) - 1, glasses_2 = GetNumberOfPedPropTextureVariations(playerPed, 1, Character["glasses_1"] - 1), watches_1 = GetNumberOfPedPropDrawableVariations(playerPed, 6) - 1, watches_2 = GetNumberOfPedPropTextureVariations(playerPed, 6, Character["watches_1"]) - 1, bracelets_1 = GetNumberOfPedPropDrawableVariations(playerPed, 7) - 1, bracelets_2 = GetNumberOfPedPropTextureVariations(playerPed, 7, Character["bracelets_1"] - 1), } return data end function ApplySkin(skin, clothes) local playerPed = PlayerPedId() for k, v in pairs(skin) do Character[k] = v end if clothes ~= nil then for k, v in pairs(clothes) do if k ~= "sex" and k ~= "mom" and k ~= "dad" and k ~= "face_md_weight" and k ~= "skin_md_weight" and k ~= "nose_1" and k ~= "nose_2" and k ~= "nose_3" and k ~= "nose_4" and k ~= "nose_5" and k ~= "nose_6" and k ~= "cheeks_1" and k ~= "cheeks_2" and k ~= "cheeks_3" and k ~= "lip_thickness" and k ~= "jaw_1" and k ~= "jaw_2" and k ~= "chin_1" and k ~= "chin_2" and k ~= "chin_3" and k ~= "chin_4" and k ~= "neck_thickness" and k ~= "age_1" and k ~= "age_2" and k ~= "eye_color" and k ~= "eye_squint" and k ~= "beard_1" and k ~= "beard_2" and k ~= "beard_3" and k ~= "beard_4" and k ~= "hair_1" and k ~= "hair_2" and k ~= "hair_color_1" and k ~= "hair_color_2" and k ~= "eyebrows_1" and k ~= "eyebrows_2" and k ~= "eyebrows_3" and k ~= "eyebrows_4" and k ~= "eyebrows_5" and k ~= "eyebrows_6" and k ~= "makeup_1" and k ~= "makeup_2" and k ~= "makeup_3" and k ~= "makeup_4" and k ~= "lipstick_1" and k ~= "lipstick_2" and k ~= "lipstick_3" and k ~= "lipstick_4" and k ~= "blemishes_1" and k ~= "blemishes_2" and k ~= "blemishes_3" and k ~= "blush_1" and k ~= "blush_2" and k ~= "blush_3" and k ~= "complexion_1" and k ~= "complexion_2" and k ~= "sun_1" and k ~= "sun_2" and k ~= "moles_1" and k ~= "moles_2" and k ~= "chest_1" and k ~= "chest_2" and k ~= "chest_3" and k ~= "bodyb_1" and k ~= "bodyb_2" and k ~= "bodyb_3" and k ~= "bodyb_4" then Character[k] = v end end end local face_weight = (Character["face_md_weight"] / 100) + 0.0 local skin_weight = (Character["skin_md_weight"] / 100) + 0.0 SetPedHeadBlendData(playerPed, Character["mom"], Character["dad"], 0, Character["mom"], Character["dad"], 0, face_weight, skin_weight, 0.0, false) SetPedFaceFeature(playerPed, 0, (Character["nose_1"] / 10) + 0.0) -- Nose Width SetPedFaceFeature(playerPed, 1, (Character["nose_2"] / 10) + 0.0) -- Nose Peak Height SetPedFaceFeature(playerPed, 2, (Character["nose_3"] / 10) + 0.0) -- Nose Peak Length SetPedFaceFeature(playerPed, 3, (Character["nose_4"] / 10) + 0.0) -- Nose Bone Height SetPedFaceFeature(playerPed, 4, (Character["nose_5"] / 10) + 0.0) -- Nose Peak Lowering SetPedFaceFeature(playerPed, 5, (Character["nose_6"] / 10) + 0.0) -- Nose Bone Twist SetPedFaceFeature(playerPed, 6, (Character["eyebrows_5"] / 10) + 0.0) -- Eyebrow height SetPedFaceFeature(playerPed, 7, (Character["eyebrows_6"] / 10) + 0.0) -- Eyebrow depth SetPedFaceFeature(playerPed, 8, (Character["cheeks_1"] / 10) + 0.0) -- Cheekbones Height SetPedFaceFeature(playerPed, 9, (Character["cheeks_2"] / 10) + 0.0) -- Cheekbones Width SetPedFaceFeature(playerPed, 10, (Character["cheeks_3"] / 10) + 0.0) -- Cheeks Width SetPedFaceFeature(playerPed, 11, (Character["eye_squint"] / 10) + 0.0) -- Eyes squint SetPedFaceFeature(playerPed, 12, (Character["lip_thickness"] / 10) + 0.0) -- Lip Fullness SetPedFaceFeature(playerPed, 13, (Character["jaw_1"] / 10) + 0.0) -- Jaw Bone Width SetPedFaceFeature(playerPed, 14, (Character["jaw_2"] / 10) + 0.0) -- Jaw Bone Length SetPedFaceFeature(playerPed, 15, (Character["chin_1"] / 10) + 0.0) -- Chin Height SetPedFaceFeature(playerPed, 16, (Character["chin_2"] / 10) + 0.0) -- Chin Length SetPedFaceFeature(playerPed, 17, (Character["chin_3"] / 10) + 0.0) -- Chin Width SetPedFaceFeature(playerPed, 18, (Character["chin_4"] / 10) + 0.0) -- Chin Hole Size SetPedFaceFeature(playerPed, 19, (Character["neck_thickness"] / 10) + 0.0) -- Neck Thickness SetPedHairColor(playerPed, Character["hair_color_1"], Character["hair_color_2"]) -- Hair Color SetPedHeadOverlay(playerPed, 3, Character["age_1"], (Character["age_2"] / 10) + 0.0) -- Age + opacity SetPedHeadOverlay(playerPed, 0, Character["blemishes_1"], (Character["blemishes_2"] / 10) + 0.0) -- Blemishes + opacity SetPedHeadOverlay(playerPed, 1, Character["beard_1"], (Character["beard_2"] / 10) + 0.0) -- Beard + opacity SetPedEyeColor(playerPed, Character["eye_color"]) -- Eyes color SetPedHeadOverlay(playerPed, 2, Character["eyebrows_1"], (Character["eyebrows_2"] / 10) + 0.0) -- Eyebrows + opacity SetPedHeadOverlay(playerPed, 4, Character["makeup_1"], (Character["makeup_2"] / 10) + 0.0) -- Makeup + opacity SetPedHeadOverlay(playerPed, 8, Character["lipstick_1"], (Character["lipstick_2"] / 10) + 0.0) -- Lipstick + opacity SetPedComponentVariation(playerPed, 2, Character["hair_1"], Character["hair_2"], 2) -- Hair SetPedHeadOverlayColor(playerPed, 1, 1, Character["beard_3"], Character["beard_4"]) -- Beard Color SetPedHeadOverlayColor(playerPed, 2, 1, Character["eyebrows_3"], Character["eyebrows_4"]) -- Eyebrows Color SetPedHeadOverlayColor(playerPed, 4, 2, Character["makeup_3"], Character["makeup_4"]) -- Makeup Color SetPedHeadOverlayColor(playerPed, 8, 1, Character["lipstick_3"], Character["lipstick_4"]) -- Lipstick Color SetPedHeadOverlay(playerPed, 5, Character["blush_1"], (Character["blush_2"] / 10) + 0.0) -- Blush + opacity SetPedHeadOverlayColor(playerPed, 5, 2, Character["blush_3"]) -- Blush Color SetPedHeadOverlay(playerPed, 6, Character["complexion_1"], (Character["complexion_2"] / 10) + 0.0) -- Complexion + opacity SetPedHeadOverlay(playerPed, 7, Character["sun_1"], (Character["sun_2"] / 10) + 0.0) -- Sun Damage + opacity SetPedHeadOverlay(playerPed, 9, Character["moles_1"], (Character["moles_2"] / 10) + 0.0) -- Moles/Freckles + opacity SetPedHeadOverlay(playerPed, 10, Character["chest_1"], (Character["chest_2"] / 10) + 0.0) -- Chest Hair + opacity SetPedHeadOverlayColor(playerPed, 10, 1, Character["chest_3"]) -- Torso Color if Character["bodyb_1"] == -1 then SetPedHeadOverlay(playerPed, 11, 255, (Character["bodyb_2"] / 10) + 0.0) -- Body Blemishes + opacity else SetPedHeadOverlay(playerPed, 11, Character["bodyb_1"], (Character["bodyb_2"] / 10) + 0.0) end if Character["bodyb_3"] == -1 then SetPedHeadOverlay(playerPed, 12, 255, (Character["bodyb_4"] / 10) + 0.0) else SetPedHeadOverlay(playerPed, 12, Character["bodyb_3"], (Character["bodyb_4"] / 10) + 0.0) -- Blemishes 'added body effect' + opacity end if Character["ears_1"] == -1 then ClearPedProp(playerPed, 2) else SetPedPropIndex(playerPed, 2, Character["ears_1"], Character["ears_2"], 2) -- Ears Accessories end SetPedComponentVariation(playerPed, 8, Character["tshirt_1"], Character["tshirt_2"], 2) -- Tshirt SetPedComponentVariation(playerPed, 11, Character["torso_1"], Character["torso_2"], 2) -- torso parts SetPedComponentVariation(playerPed, 3, Character["arms"], Character["arms_2"], 2) -- Arms SetPedComponentVariation(playerPed, 10, Character["decals_1"], Character["decals_2"], 2) -- decals SetPedComponentVariation(playerPed, 4, Character["pants_1"], Character["pants_2"], 2) -- pants SetPedComponentVariation(playerPed, 6, Character["shoes_1"], Character["shoes_2"], 2) -- shoes SetPedComponentVariation(playerPed, 1, Character["mask_1"], Character["mask_2"], 2) -- mask SetPedComponentVariation(playerPed, 9, Character["bproof_1"], Character["bproof_2"], 2) -- bulletproof SetPedComponentVariation(playerPed, 7, Character["chain_1"], Character["chain_2"], 2) -- chain SetPedComponentVariation(playerPed, 5, Character["bags_1"], Character["bags_2"], 2) -- Bag if Character["helmet_1"] == -1 then ClearPedProp(playerPed, 0) else SetPedPropIndex(playerPed, 0, Character["helmet_1"], Character["helmet_2"], 2) -- Helmet end if Character["glasses_1"] == -1 then ClearPedProp(playerPed, 1) else SetPedPropIndex(playerPed, 1, Character["glasses_1"], Character["glasses_2"], 2) -- Glasses end if Character["watches_1"] == -1 then ClearPedProp(playerPed, 6) else SetPedPropIndex(playerPed, 6, Character["watches_1"], Character["watches_2"], 2) -- Watches end if Character["bracelets_1"] == -1 then ClearPedProp(playerPed, 7) else SetPedPropIndex(playerPed, 7, Character["bracelets_1"], Character["bracelets_2"], 2) -- Bracelets end end AddEventHandler("skinchanger:loadDefaultModel", function(loadMale, cb) LoadDefaultModel(loadMale, cb) end) AddEventHandler("skinchanger:getData", function(cb) local components = json.decode(json.encode(Components)) for k, v in pairs(Character) do for i = 1, #components, 1 do if k == components[i].name then components[i].value = v end end end cb(components, GetMaxVals()) end) AddEventHandler("skinchanger:change", function(key, val) Character[key] = val if key == "sex" then TriggerEvent("skinchanger:loadSkin", Character) else ApplySkin(Character) end end) AddEventHandler("skinchanger:getSkin", function(cb) cb(Character) end) AddEventHandler("skinchanger:modelLoaded", function() ClearPedProp(PlayerPedId(), 0) if LoadSkin ~= nil then ApplySkin(LoadSkin) LoadSkin = nil end if LoadClothes ~= nil then ApplySkin(LoadClothes.playerSkin, LoadClothes.clothesSkin) LoadClothes = nil end end) RegisterNetEvent("skinchanger:loadSkin") AddEventHandler("skinchanger:loadSkin", function(skin, cb) if skin["sex"] ~= LastSex then LoadSkin = skin if skin["sex"] == 0 then TriggerEvent("skinchanger:loadDefaultModel", true, cb) else TriggerEvent("skinchanger:loadDefaultModel", false, cb) end else ApplySkin(skin) if cb ~= nil then cb() end end LastSex = skin["sex"] end) RegisterNetEvent("skinchanger:loadClothes") AddEventHandler("skinchanger:loadClothes", function(playerSkin, clothesSkin) if playerSkin["sex"] ~= LastSex then LoadClothes = { playerSkin = playerSkin, clothesSkin = clothesSkin, } if playerSkin["sex"] == 0 then TriggerEvent("skinchanger:loadDefaultModel", true) else TriggerEvent("skinchanger:loadDefaultModel", false) end else ApplySkin(playerSkin, clothesSkin) end LastSex = playerSkin["sex"] end)