Hi, I would like the category of hair and hair colors how can I make to have a good code
This Code :
local inCustomization = false
local clothingStores = {
{name="Aéroport", id=90, x=-1044.41, y=-2749.38, z=21.3634},
}
AddEventHandler('playerSpawned', function(spawn)
TriggerServerEvent("es_customization:skinSpawn")
end)
function DisplayHelpText(str)
SetTextComponentFormat("STRING")
AddTextComponentString(str)
DisplayHelpTextFromStringLabel(0, 0, 1, -1)
end
function drawTxt(x,y ,width,height,scale, text, r,g,b,a, outline)
SetTextFont(0)
SetTextProportional(0)
SetTextScale(scale, scale)
SetTextColour(r, g, b, a)
SetTextDropShadow(0, 0, 0, 0,255)
SetTextEdge(1, 0, 0, 0, 255)
SetTextDropShadow()
if(outline)then
SetTextOutline()
end
SetTextEntry("STRING")
AddTextComponentString(text)
DrawText(x - width/2, y - height/2 + 0.005)
end
local validTorso = {}
local validUnder = {}
function initValids()
local am = 0
for i = 0,GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 3) do
if IsPedComponentVariationValid(GetPlayerPed(-1), 3, i, 2) then
am = am + 1
validTorso[am] = i
end
end
am = 0
for i =0, GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 7) do
if IsPedComponentVariationValid(GetPlayerPed(-1), 7, i, 2) then
am = am + 1
validUnder[am] = i
end
end
end
local options = {
{
id = 2,
prettyName = "Cheveux",
name = "hair",
t = 'drawable',
tid = 2,
zoomOffset = 0.6,
camOffset = 0.65,
current = 0,
max = function()
local am = 0
for i = 1,GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 2) do
if IsPedComponentVariationValid(GetPlayerPed(-1), 2, i, 2) then
end
end
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 2)
end
},
{
id = 2,
t = 'texture',
prettyName = "Couleurs Cheveux",
name = "haircolour",
zoomOffset = 0.6,
camOffset = 0.65,
current = 0,
tid = 2,
max = function()
return GetNumberOfPedTextureVariations(GetPlayerPed(-1), 2, GetPedDrawableVariation(GetPlayerPed(-1), 2)) - 1
end
},
{
id = 3,
prettyName = "Gants",
name = "torso",
zoomOffset = 0.75,
camOffset = 0.15,
t = 'drawable',
tid = 4,
current = 0,
max = function()
local am = 0
for i = 0,GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 3) do
if IsPedComponentVariationValid(GetPlayerPed(-1), 3, i, 2) then
am = am + 1
validTorso[am] = i
end
end
return am
end
},
{
id = 3,
prettyName = "Couleurs Gants",
name = "torsotexture",
zoomOffset = 0.75,
camOffset = 0.15,
t = 'texture',
current = 0,
tid = 3,
max = function()
return GetNumberOfPedTextureVariations(GetPlayerPed(-1), 3, GetPedDrawableVariation(GetPlayerPed(-1), 3)) - 1
end
},
{
id = 11,
prettyName = "Vestes",
name = "torsoextra",
zoomOffset = 0.75,
camOffset = 0.15,
t = 'drawable',
current = 0,
tid = 6,
max = function()
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 11)
end
},
{
id = 11,
prettyName = "Couleurs Vestes",
name = "torsoextratexture",
zoomOffset = 0.75,
camOffset = 0.15,
t = 'texture',
current = 0,
tid = 11,
max = function()
return GetNumberOfPedTextureVariations(GetPlayerPed(-1), 11, GetPedDrawableVariation(GetPlayerPed(-1), 11)) - 1
end
},
{
id = 4,
prettyName = "Pantalons",
name = "pants",
camOffset = -0.5,
zoomOffset = 0.8,
t = 'drawable',
current = 0,
tid = 8,
max = function()
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 4)
end
},
{
id = 4,
prettyName = "Couleurs Pantalons",
name = "pantscolour",
t = 'texture',
current = 0,
camOffset = -0.5,
zoomOffset = 0.8,
tid = 4,
max = function()
return GetNumberOfPedTextureVariations(GetPlayerPed(-1), 4, GetPedDrawableVariation(GetPlayerPed(-1), 4)) - 1
end
},
{
id = 6,
prettyName = "Chaussures",
name = "shoes",
t = 'drawable',
camOffset = -0.8,
zoomOffset = 0.8,
current = 0,
tid = 10,
max = function()
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 6)
end
},
{
id = 6,
prettyName = "Couleurs Chaussures",
name = "shoescolour",
camOffset = -0.8,
zoomOffset = 0.8,
t = 'texture',
current = 0,
tid = 6,
max = function()
return GetNumberOfPedTextureVariations(GetPlayerPed(-1), 6, GetPedDrawableVariation(GetPlayerPed(-1), 6)) - 1
end
},
{
id = 7, -- 11
prettyName = "Accessoires",
name = "bodyaccesoire",
camOffset = 0.35,
zoomOffset = 0.6,
t = 'drawable',
current = 0,
max = function()
local am = 0
for i =0, GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 7) do
if IsPedComponentVariationValid(GetPlayerPed(-1), 7, i, 2) then
am = am + 1
validUnder[am] = i
end
end
return am
end
},
{
id = 8, -- 12
prettyName = "T-shirt",
name = "undershirt",
camOffset = 0.35,
zoomOffset = 0.6,
t = 'drawable',
current = 0,
max = function()
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 8)
end
},
{
id = 9, -- 13
prettyName = "Gillets",
name = "armor",
camOffset = 0.35,
zoomOffset = 0.6,
t = 'drawable',
current = 0,
max = function()
return GetNumberOfPedDrawableVariations(GetPlayerPed(-1), 9)
end
}
}
local selected = 1
local camOffset = 0.65
local zoomOffset = 0.6
local old = 0
local cur = "customCam"
local heading = 90.0
Citizen.CreateThread(function()
local customCam = CreateCam("DEFAULT_SCRIPTED_CAMERA", 1)
local customCam2 = CreateCam("DEFAULT_SCRIPTED_CAMERA", 1)
SetCamRot(customCam, 0.0, 0.0, 270.0, true)
SetCamRot(customCam2, 0.0, 0.0, 270.0, true)
for _, item in pairs(clothingStores) do
item.blip = AddBlipForCoord(item.x, item.y, item.z)
SetBlipSprite(item.blip, item.id)
SetBlipColour(item.blip, item.colour)
SetBlipAsShortRange(item.blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(item.name)
EndTextCommandSetBlipName(item.blip)
end
while true do
Citizen.Wait(0)
local pos = GetEntityCoords(GetPlayerPed(-1), false)
if inCustomization then
Notify("~g~Appuyer sur F pour Save.")
Notify("~r~Appuyez sur E pour quitter.")
if(not IsCamActive(customCam) and not IsCamActive(customCam2))then
SetCamActive(customCam, true)
end
for i = 0,32 do
if(NetworkIsPlayerActive(i))then
if(GetPlayerPed(i) ~= GetPlayerPed(-1))then
SetEntityVisible(GetPlayerPed(i), false)
end
end
end
SetPedCanHeadIk(GetPlayerPed(-1), false)
DisableControlAction(1, 9, true)
DisableControlAction(1, 32, true)
DisableControlAction(1, 8, true)
DisableControlAction(1, 34, true)
local Poz = GetOffsetFromEntityInWorldCoords(GetPlayerPed(-1), 0.0, zoomOffset, camOffset)
TaskLookAtCoord(GetPlayerPed(-1), Poz.x, Poz.y, Poz.z, 1, 0, 2)
SetEntityHeading(GetPlayerPed(-1), heading)
DrawRect(0.153, 0.108, 0.245, 0.08, 0, 0, 0, 100)
drawTxt(0.530, 0.56, 1.0,1.0,0.81, "Customisation Personnage", 255, 255, 255, 255)
drawTxt(0.530, 0.61, 1.0,1.0,0.41, "Partir", 200, 200, 200, 255)
drawTxt(0.695, 0.61, 1.0,1.0,0.41, "Current/Max", 200, 200, 200, 255)
local t = 0
for k,v in ipairs(options)do
t = t + 1
if(t ~= selected)then
DrawRect(0.153, 0.12939 + (t * 0.037), 0.245, 0.037, 100, 100, 100, 200)
end
if(old ~= selected)then
local p = GetOffsetFromEntityInWorldCoords(GetPlayerPed(-1), 0.0, options[selected].zoomOffset, options[selected].camOffset)
if(cur == "customCam")then
SetCamCoord(customCam2, p.x, p.y, p.z)
else
SetCamCoord(customCam, p.x, p.y, p.z)
end
if(cur == "customCam2")then
SetCamActiveWithInterp(customCam, customCam2, 400, 0, 0)
cur = "customCam"
else
SetCamActiveWithInterp(customCam2, customCam, 400, 0, 0)
cur = "customCam2"
end
old = selected
end
DrawRect(0.153, 0.12939 + (selected * 0.037), 0.245, 0.037, 200, 200, 200, 200)
drawTxt(0.530, 0.61 + (t * 0.037), 1.0,1.0,0.37, "" .. v.prettyName, 255, 255, 255, 255, true)
if(v.t == "save" or v.t == "exit")then
drawTxt(0.695, 0.61 + (t * 0.037), 1.0,1.0,0.37, "" .. v.max(), 255, 255, 255, 255, true)
else
drawTxt(0.695, 0.61 + (t * 0.037), 1.0,1.0,0.37, "" .. v.current .. " / " .. v.max(), 255, 255, 255, 255, true)
end
end
DisplayHelpText("Controls ~INPUT_CELLPHONE_UP~ ~INPUT_CELLPHONE_DOWN~ ~INPUT_CELLPHONE_RIGHT~ ~INPUT_CELLPHONE_LEFT~")
DisableControlAction(1, 27, true)
if(IsControlJustPressed(1, 172)) then -- Up
PlaySound(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0, 0, 1)
if(selected ~= 1)then
selected = selected - 1
else
selected = returnIndexesInTable(options)
end
elseif(IsControlJustPressed(1, 173)) then -- Down
PlaySound(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0, 0, 1)
if(selected ~= returnIndexesInTable(options))then
selected = selected + 1
else
selected = 1
end
elseif(IsControlJustPressed(1, 23)) then
local user = {
hair = options[1].current,
haircolour = options[2].current,
torso = options[3].current,
torsotexture = options[4].current,
torsoextra = options[5].current,
torsoextratexture = options[6].current,
pants = options[7].current,
pantscolour = options[8].current,
shoes = options[9].current,
shoescolour = options[10].current,
bodyaccesoire = options[11].current,
undershirt = options[12].current,
armor = options[13].current
}
Notify("~g~You saved your outfit.")
TriggerServerEvent("es_customization:saveUser", user)
elseif(IsControlJustPressed(1, 51)) then
inCustomization = false
local pos = GetEntityCoords(GetPlayerPed(-1), false)
SetEntityCoords(GetPlayerPed(-1), pos.x, pos.y, pos.z - 101.0)
FreezeEntityPosition(GetPlayerPed(-1), false)
SetCamActive(customCam, true)
RenderScriptCams(0, 0, customCam, true, true)
SetPedCanHeadIk(GetPlayerPed(-1), true)
elseif(IsControlJustPressed(1, 175)) then -- Right
PlaySound(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0, 0, 1)
local sel = 0
for k,v in pairs(options) do
sel = sel + 1
if(sel == selected)then
if(true)then
if(options[k].t == 'drawable')then
if(options[k].current ~= options[k].max())then
options[k].current = options[k].current + 1
else
options[k].current = 0
end
if(k == 3)then
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, validTorso[options[k].current], 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, validTorso[options[k].current], 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
end
elseif(k == 11)then
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, validUnder[options[k].current], 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, validUnder[options[k].current], 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
end
else
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, options[k].current, 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, options[k].current, 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
end
end
elseif(options[k].t == 'texture')then
if(options[k].current ~= options[k].max())then
options[k].current = options[k].current + 1
else
options[k].current = 0
end
SetPedComponentVariation(GetPlayerPed(-1), options[k].tid, GetPedDrawableVariation(GetPlayerPed(-1), options[k].tid), options[k].current, 2)
elseif(options[k].t == "save")then
local user = {
hair = options[1].current,
haircolour = options[2].current,
torso = options[3].current,
torsotexture = options[4].current,
torsoextra = options[5].current,
torsoextratexture = options[6].current,
pants = options[7].current,
pantscolour = options[8].current,
shoes = options[9].current,
shoescolour = options[10].current,
bodyaccesoire = options[11].current,
undershirt = options[12].current,
armor = options[13].current
}
TriggerServerEvent("es_customization:saveUser", user)
elseif(options[k].t == "exit")then
inCustomization = false
local pos = GetEntityCoords(GetPlayerPed(-1), false)
SetEntityCoords(GetPlayerPed(-1), pos.x, pos.y, pos.z - 101.0)
FreezeEntityPosition(GetPlayerPed(-1), false)
SetCamActive(customCam, true)
RenderScriptCams(0, 0, customCam, true, true)
SetPedCanHeadIk(GetPlayerPed(-1), true)
end
end
end
end
elseif(IsControlJustPressed(1, 174)) then -- Left
PlaySound(-1, "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0, 0, 1)
local sel = 0
for k,v in pairs(options) do
sel = sel + 1
if(sel == selected)then
if(true)then
if(options[k].current ~= 0)then
options[k].current = options[k].current - 1
else
options[k].current = options[k].max()
end
if(options[k].t == 'drawable')then
if(k == 3)then
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, validTorso[options[k].current], 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, validTorso[options[k].current], 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
end
elseif(k == 11)then
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, validUnder[options[k].current], 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, validUnder[options[k].current], 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
end
else
if IsPedComponentVariationValid(GetPlayerPed(-1), options[k].id, options[k].current, 2)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, options[k].current, 1, 2)
if options[k].tid then
options[options[k].tid].current = 1
end
else
if (k == 13 and options[13].current == 0)then
SetPedComponentVariation(GetPlayerPed(-1), options[k].id, 0, 0, 0)
end
end
end
elseif(options[k].t == 'texture')then
SetPedComponentVariation(GetPlayerPed(-1), options[k].tid, GetPedDrawableVariation(GetPlayerPed(-1), options[k].tid), options[k].current, 2)
elseif(options[14].t == "save")then
local user = {
hair = options[1].current,
haircolour = options[2].current,
torso = options[3].current,
torsotexture = options[4].current,
torsoextra = options[5].current,
torsoextratexture = options[6].current,
pants = options[7].current,
pantscolour = options[8].current,
shoes = options[9].current,
shoescolour = options[10].current,
bodyaccesoire = options[11].current,
undershirt = options[12].current,
armor = options[13].current
}
TriggerServerEvent("es_customization:saveUser", user)
elseif(options[15].t == "exit")then
inCustomization = false
local pos = GetEntityCoords(GetPlayerPed(-1), false)
SetEntityCoords(GetPlayerPed(-1), pos.x, pos.y, pos.z - 101.0)
FreezeEntityPosition(GetPlayerPed(-1), false)
SetCamActive(customCam, true)
RenderScriptCams(0, 0, customCam, true, true)
SetPedCanHeadIk(GetPlayerPed(-1), true)
end
end
end
end
end
end
for _,d in ipairs(clothingStores)do
if Vdist(d.x, d.y, d.z, pos.x, pos.y, pos.z) < 20.0 then
DrawMarker(1, d.x, d.y, d.z - 1, 0, 0, 0, 0, 0, 0, 1.0001, 1.0001, 1.5001, 255, 255, 0,155, 0,0, 0,0)
end
if(Vdist(d.x, d.y, d.z, pos.x, pos.y, pos.z) < 1.0)then
DisplayHelpText("Appuyez sur ~INPUT_CONTEXT~ pour créer votre Personnage.")
end
if(IsControlJustPressed(1, 51) and Vdist(d.x, d.y, d.z, pos.x, pos.y, pos.z) < 1.0)then
local pos = GetEntityCoords(GetPlayerPed(-1), false)
SetEntityCoords(GetPlayerPed(-1), pos.x, pos.y, pos.z + 100.0)
FreezeEntityPosition(GetPlayerPed(-1), true)
pos = GetOffsetFromEntityInWorldCoords(GetPlayerPed(-1), 0.0, options[selected].zoomOffset, options[selected].camOffset)
SetCamCoord(customCam, pos.x, pos.y, pos.z)
heading = 90.0
SetCamActive(customCam, true)
RenderScriptCams(1, 0, customCam, true, true)
inCustomization = true
end
end
end
end)
local components = {
{ name = 'hair', t = 2},
{ name = 'torso', t = 3},
{ name = 'torsoextra', t = 11},
{ name = 'pants', t = 4},
{ name = 'shoes', t = 6},
{ name = 'bodyaccesoire', t = 7},
{ name = 'undershirt', t = 8},
{ name = 'armor', t = 9}
}
local typeOfComponent = {
hair = 'haircolour',
torso = 'torsotexture',
torsoextra = 'torsoextratexture',
pants = 'pantscolour',
shoes = 'shoescolour',
}
RegisterNetEvent("es_customization:setOutfit")
AddEventHandler("es_customization:setOutfit", function(u)
initValids()
for k,v in ipairs(options)do
options[k].current = u[options[k].name]
end
for k,v in ipairs(components)do
local te = u[typeOfComponent[v.name]]
if(te == nil)then
te = 1
end
if(u[k] ~= 0)then
if(v.name == "torso")then
SetPedComponentVariation(GetPlayerPed(-1), v.t, validTorso[u[v.name]], te, 2)
elseif(v.name == "undershirt")then
SetPedComponentVariation(GetPlayerPed(-1), v.t, validUnder[u[v.name]], te, 2)
else
SetPedComponentVariation(GetPlayerPed(-1), v.t, u[v.name], te, 2)
end
end
end
end)
function returnIndexesInTable(t)
local i = 0;
for _,v in pairs(t)do
i = i + 1
end
return i;
end