89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| if not Framework.ESX() then return end
 | |
| 
 | |
| local client = client
 | |
| local firstSpawn = false
 | |
| 
 | |
| AddEventHandler("esx_skin:resetFirstSpawn", function()
 | |
|     firstSpawn = true
 | |
| end)
 | |
| 
 | |
| AddEventHandler("esx_skin:playerRegistered", function()
 | |
|     if(firstSpawn) then
 | |
|         InitializeCharacter(Framework.GetGender(true))
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("skinchanger:loadSkin2", function(ped, skin)
 | |
|     if not skin.model then skin.model = "mp_m_freemode_01" end
 | |
|     client.setPedAppearance(ped, skin)
 | |
|     Framework.CachePed()
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("skinchanger:getSkin", function(cb)
 | |
|     while not Framework.PlayerData do
 | |
|         Wait(1000)
 | |
|     end
 | |
|     lib.callback("illenium-appearance:server:getAppearance", false, function(appearance)
 | |
|         cb(appearance)
 | |
|         Framework.CachePed()
 | |
|     end)
 | |
| end)
 | |
| 
 | |
| 
 | |
| local function LoadSkin(skin, cb)
 | |
|     if skin.model then
 | |
|         client.setPlayerAppearance(skin)
 | |
|     else -- add validation invisible when failed registration (maybe server restarted when apply skin)
 | |
|         SetInitialClothes(Config.InitialPlayerClothes[Framework.GetGender(true)])
 | |
|     end
 | |
|     if Framework.PlayerData and Framework.PlayerData.loadout then
 | |
|         TriggerEvent("esx:restoreLoadout")
 | |
|     end
 | |
|     Framework.CachePed()
 | |
| 	if cb ~= nil then
 | |
| 		cb()
 | |
| 	end
 | |
| end
 | |
| 
 | |
| RegisterNetEvent("skinchanger:loadSkin", function(skin, cb)
 | |
|     LoadSkin(skin, cb)
 | |
| end)
 | |
| 
 | |
| local function loadClothes(_, clothes)
 | |
|     local components = Framework.ConvertComponents(clothes, client.getPedComponents(cache.ped))
 | |
|     local props = Framework.ConvertProps(clothes, client.getPedProps(cache.ped))
 | |
| 
 | |
|     client.setPedComponents(cache.ped, components)
 | |
|     client.setPedProps(cache.ped, props)
 | |
| end
 | |
| 
 | |
| RegisterNetEvent("skinchanger:loadClothes", function(_, clothes)
 | |
|     loadClothes(_, clothes)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent("esx_skin:openSaveableMenu", function(onSubmit, onCancel)
 | |
|     InitializeCharacter(Framework.GetGender(true), onSubmit, onCancel)
 | |
| end)
 | |
| 
 | |
| local function exportHandler(exportName, func)
 | |
|   AddEventHandler(('__cfx_export_skinchanger_%s'):format(exportName), function(setCB)
 | |
|       setCB(func)
 | |
|   end)
 | |
| end
 | |
| 
 | |
| exportHandler("GetSkin", function()
 | |
|     while not Framework.PlayerData do
 | |
|         Wait(1000)
 | |
|     end
 | |
| 
 | |
|     local appearance = lib.callback.await("illenium-appearance:server:getAppearance", false)
 | |
|     return appearance
 | |
| end)
 | |
| 
 | |
| exportHandler("LoadSkin", function(skin)
 | |
|     return LoadSkin(skin)
 | |
| end)
 | |
| 
 | |
| exportHandler("LoadClothes", function(playerSkin, clothesSkin)
 | |
|     return loadClothes(playerSkin, clothesSkin)
 | |
| end)
 | 
