From 70bf511780831b6ad5e48e7937f5ddabccdc6b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20N=27gadi?= Date: Tue, 1 Aug 2017 11:21:32 +0200 Subject: [PATCH] Add files --- README.md | 13 +++ __resource.lua | 8 ++ client/main.lua | 217 ++++++++++++++++++++++++++++++++++++++++++++ skinchanger.net.dll | Bin 0 -> 8192 bytes 4 files changed, 238 insertions(+) create mode 100644 __resource.lua create mode 100644 client/main.lua create mode 100644 skinchanger.net.dll diff --git a/README.md b/README.md index d61d51c1..31d80153 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,15 @@ # fxserver-skinchanger FXServer SkinChanger + +[INSTALLATION] + +1) CD in your resources folder +2) Clone the repository +``` +git clone https://github.com/FXServer-ESX/fxserver-skinchanger skinchanger +``` +3) Add this in your server.cfg : + +``` +start skinchanger +``` diff --git a/__resource.lua b/__resource.lua new file mode 100644 index 00000000..430df89c --- /dev/null +++ b/__resource.lua @@ -0,0 +1,8 @@ +resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937' + +description 'SkinChanger' + +client_scripts { + 'skinchanger.net.dll', + 'client/main.lua' +} \ No newline at end of file diff --git a/client/main.lua b/client/main.lua new file mode 100644 index 00000000..314858e0 --- /dev/null +++ b/client/main.lua @@ -0,0 +1,217 @@ +local Components = { + {label = 'Sexe', name = 'sex', value = 0}, + {label = 'Visage', name = 'face', value = 0}, + {label = 'Peau', name = 'skin', value = 0}, + {label = 'Type Barbe', name = 'beard_1', value = 0}, + {label = 'Taille barbe', name = 'beard_2', value = 0}, + {label = 'Couleur barbe 1', name = 'beard_3', value = 0}, + {label = 'Couleur barbe 2', name = 'beard_4', value = 0}, + {label = 'Cheveux 1', name = 'hair_1', value = 0}, + {label = 'Cheveux 2', name = 'hair_2', value = 0}, + {label = 'Couleur cheveux 1', name = 'hair_color_1', value = 0}, + {label = 'Couleur cheveux 2', name = 'hair_color_2', value = 0}, + {label = 'T-Shirt 1', name = 'tshirt_1', value = 0}, + {label = 'T-Shirt 2', name = 'tshirt_2', value = 0, textureof = 'tshirt_1'}, + {label = 'Torse 1', name = 'torso_1', value = 0}, + {label = 'Torse 2', name = 'torso_2', value = 0, textureof = 'torso_1'}, + {label = 'Calques 1', name = 'decals_1', value = 0}, + {label = 'Calques 2', name = 'decals_2', value = 0, textureof = 'decals_1'}, + {label = 'Bras', name = 'arms', value = 0}, + {label = 'Jambes 1', name = 'pants_1', value = 0}, + {label = 'Jambes 2', name = 'pants_2', value = 0, textureof = 'pants_1'}, + {label = 'Chaussures 1', name = 'shoes_1', value = 0}, + {label = 'Chaussures 2', name = 'shoes_2', value = 0, textureof = 'shoes_1'}, + {label = 'Masque 1', name = 'mask_1', value = 0}, + {label = 'Masque 2', name = 'mask_2', value = 0, textureof = 'mask_1'}, + {label = 'Gilet pare-balle 1', name = 'bproof_1', value = 0}, + {label = 'Gilet pare-balle 2', name = 'bproof_2', value = 0, textureof = 'bproof_1'}, + {label = 'Chaine 1', name = 'chain_1', value = 0}, + {label = 'Chaine 2', name = 'chain_2', value = 0, textureof = 'chain_1'}, + {label = 'Casque 1', name = 'helmet_1', value = 0}, + {label = 'Casque 2', name = 'helmet_2', value = 0, textureof = 'helmet_1'}, + {label = 'Lunettes 1', name = 'glasses_1', value = 0}, + {label = 'Lunettes 2', name = 'glasses_2', value = 0, textureof = 'glasses_1'}, +} + +local LastSex = 0 +local LoadSkin = nil +local LoadClothes = nil +local Character = {} + +for i=1, #Components, 1 do + Character[Components[i].name] = Components[i].value +end + +function GetMaxVals() + + local playerPed = GetPlayerPed(-1) + + local data = { + sex = 1, + face = 45, + skin = 45, + beard_1 = GetNumHeadOverlayValues(1), + beard_2 = 10, + beard_3 = 63, + beard_4 = 63, + hair_1 = GetNumberOfPedDrawableVariations(playerPed, 2) - 1, + hair_2 = GetNumberOfPedTextureVariations(playerPed, 2, Character['hair_1']) - 1, + hair_color_1 = 22, + hair_color_2 = 4, + 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, + 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, + helmet_1 = GetNumberOfPedPropDrawableVariations(playerPed, 0) - 1, + helmet_2 = GetNumberOfPedTextureVariations(playerPed, 0, Character['helmet_1']) - 1, + glasses_1 = GetNumberOfPedPropDrawableVariations(playerPed, 1) - 1, + glasses_2 = GetNumberOfPedTextureVariations(playerPed, 1, Character['glasses_1'] - 1), + } + + return data + +end + +function ApplySkin(skin, clothes) + + local playerPed = GetPlayerPed(-1) + + 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 ~= 'face' and + k ~= 'skin' 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' + then + Character[k] = v + end + end + + end + + SetPedHeadBlendData(playerPed, Character['face'], Character['face'], Character['face'], Character['skin'], Character['skin'], Character['skin'], 1.0, 1.0, 1.0, true) + SetPedHeadOverlay(playerPed, 1, Character['beard_1'], (Character['beard_2'] / 10) + 0.0) -- Beard + SetPedHeadOverlayColor(playerPed, 1, 1, Character['beard_3'], Character['beard_4']) -- Beard Color + SetPedComponentVariation(playerPed, 2, Character['hair_1'], Character['hair_2'], 2) -- Hair + SetPedHairColor(playerPed, Character['hair_color_1'], Character['hair_color_2']) -- Hair Color + 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'], 0, 2) -- torso + 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 + SetPedPropIndex(playerPed, 0, Character['helmet_1'], Character['helmet_2'], 2) -- Helmet + SetPedPropIndex(playerPed, 1, Character['glasses_1'], Character['glasses_2'], 2) -- Glasses + +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() + + 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) + + LoadSkin = skin + + if skin['sex'] == 0 then + TriggerEvent('skinchanger:LoadDefaultModel', true) + else + TriggerEvent('skinchanger:LoadDefaultModel', false) + end + + LastSex = skin['sex'] + +end) + +RegisterNetEvent('skinchanger:loadClothes') +AddEventHandler('skinchanger:loadClothes', function(playerSkin, clothesSkin) + + LoadClothes = { + playerSkin = playerSkin, + clothesSkin = clothesSkin + } + + if playerSkin['sex'] == 0 then + TriggerEvent('skinchanger:LoadDefaultModel', true) + else + TriggerEvent('skinchanger:LoadDefaultModel', false) + end + + LastSex = skin['sex'] + +end) \ No newline at end of file diff --git a/skinchanger.net.dll b/skinchanger.net.dll new file mode 100644 index 0000000000000000000000000000000000000000..315d79e572ca46eba6b42ac480c88da7ca77d449 GIT binary patch literal 8192 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 literal 0 HcmV?d00001