JIT
help with illenium-appearance and character creation code issues
jag har it illenium-appearance så byt alla dem jag har lite export här ör de apperance jag använder TriggerEvent('manne_appearance:loadPed TriggerEvent('manne_appearance:loadAppearance' TriggerEvent("manne_appearance:setSkin" TriggerEvent("manne_appearance:openAppearanceMenu" TriggerEvent("manne_appearance:getSkin", function(skin) TriggerEvent("manne_appearance:getSkin error during NUI callback CREATE: @unrp_character/client/functions.lua:489: No such export InitializeCharacter in resource illenium-appearance function Characters:loadModel(model) if not IsModelValid(model) then return; end RequestModel(model) RequestCollisionForModel(model) while not HasModelLoaded(model) or not HasCollisionForModelLoaded(model) do Wait(10) end SetModelAsNoLongerNeeded(model) end function Characters:spawnPed(data) local model = (type(data.model) == 'number' and data.model or GetHashKey(data.model)) if not IsModelAPed(model) then return end self:loadModel(model) ped = CreatePed(5, model, data.coords, false, false) return ped end function Characters:playAnimation(animData) if not IsEntityPlayingAnim(animData.ped, animData.dict, animData.lib, 3) then if not animData.flag then animData.flag = 49 end self:loadAnimDict(animData.dict) TaskPlayAnim(animData.ped, animData.dict, animData.lib, 2.0, -1.0, -1, animData.flag, 0, 0, 0, 0) end end function Characters:loadAnimDict(dict) if not DoesAnimDictExist(dict) then return end RequestAnimDict(dict) while not HasAnimDictLoaded(dict) do Wait(10) end end function Characters:canHoverPed(ped) for index, value in pairs(Config.player_slots) do if value.ped == ped then return true; end end return false; end function Characters:setAppearance(Ped, characterAppearance) local skin = characterAppearance local playerPed = Ped if not skin or type(skin) ~= "table" then print("[setAppearance] WARNING: Ingen giltig appearance!") return end local sex = tonumber(skin.sex) or 0 if sex > 2 then SetPedHeadBlendData(playerPed, skin['face'], skin['face'], skin['face'], skin['skin'], skin['skin'], skin['skin'], 1.0, 1.0, 1.0, true) SetPedHairColor(playerPed, skin['hair_color_1'] or 0, skin['hair_color_2'] or 0) SetPedHeadOverlay(playerPed, 3, skin['age_1'] or 0, ((skin['age_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 1, skin['beard_1'] or 0, ((skin['beard_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 2, skin['eyebrows_1'] or 0, ((skin['eyebrows_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 4, skin['makeup_1'] or 0, ((skin['makeup_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 8, skin['lipstick_1'] or 0, ((skin['lipstick_2'] or 0) / 10) + 0.0) SetPedEyeColor(playerPed, skin['eye_color'] or 0, 0, 1) SetPedComponentVariation(playerPed, 2, skin['hair_1'], skin['hair_2']) -- Hair SetPedHeadOverlayColor(playerPed, 1, 1, skin['beard_3'] or 0, skin['beard_4'] or 0) SetPedHeadOverlayColor(playerPed, 2, 1, skin['eyebrows_3'] or 0, skin['eyebrows_4'] or 0) SetPedHeadOverlayColor(playerPed, 4, 1, skin['makeup_3'] or 0, skin['makeup_4'] or 0) SetPedHeadOverlayColor(playerPed, 8, 1, skin['lipstick_3'] or 0, skin['lipstick_4'] or 0) SetPedComponentVariation(playerPed, 8, skin['tshirt_1'], skin['tshirt_2']) SetPedComponentVariation(playerPed, 11, skin['torso_1'], skin['torso_2']) SetPedComponentVariation(playerPed, 3, skin['arms'], skin['arms_2']) SetPedComponentVariation(playerPed, 0, skin['face'], skin['face_2']) SetPedComponentVariation(playerPed, 10, skin['decals_1'], skin['decals_2']) SetPedComponentVariation(playerPed, 4, skin['pants_1'], skin['pants_2']) SetPedComponentVariation(playerPed, 6, skin['shoes_1'], skin['shoes_2']) SetPedComponentVariation(playerPed, 1, skin['mask_1'], skin['mask_2']) SetPedComponentVariation(playerPed, 9, skin['bproof_1'], skin['bproof_2']) SetPedComponentVariation(playerPed, 7, skin['chain_1'], skin['chain_2']) SetPedComponentVariation(playerPed, 5, skin['bags_1'], skin['bags_2']) -- Props if (skin['helmet_1'] or -1) == -1 then ClearPedProp(playerPed, 0) else SetPedPropIndex(playerPed, 0, skin['helmet_1'], skin['helmet_2']) end if (skin['watches_1'] or -1) == -1 then ClearPedProp(playerPed, 6) else SetPedPropIndex(playerPed, 6, skin['watches_1'], skin['watches_2']) end if (skin['bracelets_1'] or -1) == -1 then ClearPedProp(playerPed, 7) else SetPedPropIndex(playerPed, 7, skin['bracelets_1'], skin['bracelets_2']) end if (skin['glasses_1'] or -1) == -1 then ClearPedProp(playerPed, 1) else SetPedPropIndex(playerPed, 1, skin['glasses_1'], skin['glasses_2']) end if (skin['ears_1'] or -1) == -1 then ClearPedProp(playerPed, 2) else SetPedPropIndex(playerPed, 2, skin['ears_1'], skin['ears_2']) end return end SetPedHeadBlendData(playerPed, skin['face'], skin['face'], skin['face'], skin['skin'], skin['skin'], skin['skin'], 1.0, 1.0, 1.0, true) SetPedHairColor(playerPed, skin['hair_color_1'] or 0, skin['hair_color_2'] or 0) SetPedHeadOverlay(playerPed, 3, skin['age_1'] or 0, ((skin['age_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 1, skin['beard_1'] or 0, ((skin['beard_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 2, skin['eyebrows_1'] or 0, ((skin['eyebrows_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 4, skin['makeup_1'] or 0, ((skin['makeup_2'] or 0) / 10) + 0.0) SetPedHeadOverlay(playerPed, 8, skin['lipstick_1'] or 0, ((skin['lipstick_2'] or 0) / 10) + 0.0) SetPedEyeColor(playerPed, skin['eye_color'] or 0, 0, 1) SetPedComponentVariation(playerPed, 2, skin['hair_1'], skin['hair_2']) -- Hair SetPedHeadOverlayColor(playerPed, 1, 1, skin['beard_3'] or 0, skin['beard_4'] or 0) SetPedHeadOverlayColor(playerPed, 2, 1, skin['eyebrows_3'] or 0, skin['eyebrows_4'] or 0) SetPedHeadOverlayColor(playerPed, 4, 1, skin['makeup_3'] or 0, skin['makeup_4'] or 0) SetPedHeadOverlayColor(playerPed, 8, 1, skin['lipstick_3'] or 0, skin['lipstick_4'] or 0) for i = 2, #Config_Appearance.SubMenus["face"] do local faceFeature = Config_Appearance.SubMenus["face"][i] if skin[faceFeature["name"]] then SetPedFaceFeature(playerPed, i - 2, skin[faceFeature["name"]] / 10) end end -- Props if (skin['ears_1'] or -1) == -1 then ClearPedProp(playerPed, 2) else SetPedPropIndex(playerPed, 2, skin['ears_1'], skin['ears_2']) end if (skin['helmet_1'] or -1) == -1 then ClearPedProp(playerPed, 0) else SetPedPropIndex(playerPed, 0, skin['helmet_1'], skin['helmet_2']) end if (skin['watches_1'] or -1) == -1 then ClearPedProp(playerPed, 6) else SetPedPropIndex(playerPed, 6, skin['watches_1'], skin['watches_2']) end if (skin['bracelets_1'] or -1) == -1 then ClearPedProp(playerPed, 7) else SetPedPropIndex(playerPed, 7, skin['bracelets_1'], skin['bracelets_2']) end if (skin['glasses_1'] or -1) == -1 then ClearPedProp(playerPed, 1) else SetPedPropIndex(playerPed, 1, skin['glasses_1'], skin['glasses_2']) end -- Kläder SetPedComponentVariation(playerPed, 8, skin['tshirt_1'], skin['tshirt_2']) SetPedComponentVariation(playerPed, 11, skin['torso_1'], skin['torso_2']) SetPedComponentVariation(playerPed, 3, skin['arms'], skin['arms_2']) SetPedComponentVariation(playerPed, 0, skin['face'], skin['face_2']) SetPedComponentVariation(playerPed, 10, skin['decals_1'], skin['decals_2']) SetPedComponentVariation(playerPed, 4, skin['pants_1'], skin['pants_2']) SetPedComponentVariation(playerPed, 6, skin['shoes_1'], skin['shoes_2']) SetPedComponentVariation(playerPed, 1, skin['mask_1'], skin['mask_2']) SetPedComponentVariation(playerPed, 9, skin['bproof_1'], skin['bproof_2']) SetPedComponentVariation(playerPed, 7, skin['chain_1'], skin['chain_2']) SetPedComponentVariation(playerPed, 5, skin['bags_1'], skin['bags_2']) end function CoordsFromCursor(distance) local function RotationToDirection(rotation) local z, x = (rotation.z * math.pi / 180), (rotation.x * math.pi / 180); local num = math.abs(math.cos(x)); return vector3( -math.sin(z) * num, math.cos(z) * num, math.sin(x) ) end local function World3DToScreen2D(coords) local _, x, y = GetScreenCoordFromWorldCoord(coords.x, coords.y, coords.z) return vector2(x, y) end local camRot = GetGameplayCamRot(2); local camCoords = GetGameplayCamCoord(); local camForward = RotationToDirection(camRot); local rotUp = camRot + vector3(1, 0, 0); local rotDown = camRot + vector3(-1, 0, 0); local rotLeft = camRot + vector3(0, 0, -1); local rotRight = camRot + vector3(0, 0, 1); local camRight = RotationToDirection(rotRight) - RotationToDirection(rotLeft); local camUp = RotationToDirection(rotUp) - RotationToDirection(rotDown); local rollRad = -(camRot.y * math.pi / 180.0); local camRightRoll = camRight * math.cos(rollRad) - camUp * math.sin(rollRad); local camUpRoll = camRight * math.sin(rollRad) + camUp * math.cos(rollRad); local point3D = camCoords + camForward * 1.0 + camRightRoll + camUpRoll; local point2D = World3DToScreen2D(point3D); local point3DZero = camCoords + camForward * 1.0; local point2DZero = World3DToScreen2D(point3DZero); local scaleX = (GetControlNormal(0, 239) - point2DZero.x) / (point2D.x - point2DZero.x); local scaleY = (GetControlNormal(0, 240) - point2DZero.y) / (point2D.y - point2DZero.y); return camCoords + (camForward + camRightRoll * scaleX + camUpRoll * scaleY) * (distance or 15.0) end function FindIndex(array, fn) for i, v in ipairs(array) do if fn(v, i - 1, array) then return i - 1 end end return -1 end mulNumber = function(vector1, value) local result = {} result.x = vector1.x * value result.y = vector1.y * value result.z = vector1.z * value return result end addVector3 = function(vector1, vector2) return { x = vector1.x + vector2.x, y = vector1.y + vector2.y, z = vector1.z + vector2.z } end subVector3 = function(vector1, vector2) return { x = vector1.x - vector2.x, y = vector1.y - vector2.y, z = vector1.z - vector2.z } end rotationToDirection = function(rotation) local z = degToRad(rotation.z) local x = degToRad(rotation.x) local num = math.abs(math.cos(x)) local result = {} result.x = -math.sin(z) * num result.y = math.cos(z) * num result.z = math.sin(x) return result end w2s = function(position) local visible, screenX, screenY = GetScreenCoordFromWorldCoord(position["x"], position["y"], position["z"]) if not visible then return nil end local newPos = {} newPos.x = (screenX - 0.5) * 2 newPos.y = (screenY - 0.5) * 2 newPos.z = 0 return newPos end processCoordinates = function(x, y) local screenX, screenY = GetActiveScreenResolution() local relativeX = 1 - (x / screenX) * 1.0 * 2 local relativeY = 1 - (y / screenY) * 1.0 * 2 if (relativeX > 0.0) then relativeX = -relativeX else relativeX = math.abs(relativeX) end if (relativeY > 0.0) then relativeY = -relativeY else relativeY = math.abs(relativeY) end return { x = relativeX, y = relativeY } end s2w = function(camPos, relX, relY) local camRot = IsGameplayCamRendering() and GetGameplayCamRot(0) or GetCamRot(GetRenderingCam()) local camForward = rotationToDirection(camRot) local rotUp = addVector3(camRot, { x = 10, y = 0, z = 0 }) local rotDown = addVector3(camRot, { x = -10, y = 0, z = 0 }) local rotLeft = addVector3(camRot, { x = 0, y = 0, z = -10 }) local rotRight = addVector3(camRot, { x = 0, y = 0, z = 10 }) local camRight = subVector3( rotationToDirection(rotRight), rotationToDirection(rotLeft) ) local camUp = subVector3(rotationToDirection(rotUp), rotationToDirection(rotDown)) local rollRad = -degToRad(camRot.y) local camRightRoll = subVector3( mulNumber(camRight, math.cos(rollRad)), mulNumber(camUp, math.sin(rollRad)) ) local camUpRoll = addVector3( mulNumber(camRight, math.sin(rollRad)), mulNumber(camUp, math.cos(rollRad)) ) local point3D = addVector3( addVector3(addVector3(camPos, mulNumber(camForward, 10.0)), camRightRoll), camUpRoll ) local point2D = w2s(point3D) if not point2D then return addVector3(camPos, mulNumber(camForward, 10.0)) end local point3DZero = addVector3(camPos, mulNumber(camForward, 10.0)) local point2DZero = w2s(point3DZero) if not point2DZero then return addVector3(camPos, mulNumber(camForward, 10.0)) end local eps = 0.001 if ( math.abs(point2D.x - point2DZero.x) < eps or math.abs(point2D.y - point2DZero.y) < eps ) then return addVector3(camPos, mulNumber(camForward, 10.0)) end local scaleX = (relX - point2DZero.x) / (point2D.x - point2DZero.x) local scaleY = (relY - point2DZero.y) / (point2D.y - point2DZero.y) local point3Dret = addVector3( addVector3( addVector3(camPos, mulNumber(camForward, 10.0)), mulNumber(camRightRoll, scaleX) ), mulNumber(camUpRoll, scaleY) ) return point3Dret end degToRad = function(deg) return (deg * math.pi) / 180.0 end -- // Get entity, ground, etc. targeted by mouse position in 3D space. screenToWorld = function(flags, ignore) local x, y = GetMouseCoordinates() local absoluteX = x local absoluteY = y local camPos = IsGameplayCamRendering() and GetGameplayCamCoord() or GetCamCoord(GetRenderingCam()) local processedCoords = processCoordinates(absoluteX, absoluteY) local target = s2w(camPos, processedCoords.x, processedCoords.y) local dir = subVector3(target, camPos) local from = addVector3(camPos, mulNumber(dir, 0.05)) local to = addVector3(camPos, mulNumber(dir, 300)) local ray = StartShapeTestRay( from.x, from.y, from.z, to.x, to.y, to.z, flags, ignore, 0 ) return GetShapeTestResult(ray) end GetMouseCoordinates = function() local screenWidth, screenHeight = GetActiveScreenResolution() local x = GetDisabledControlNormal(2, 239) local y = GetDisabledControlNormal(2, 240) return screenWidth * x, screenHeight * y end function buttons(buttons) local scaleform = RequestScaleformMovie('instructional_buttons') while not HasScaleformMovieLoaded(scaleform) do Wait(0) end PushScaleformMovieFunction(scaleform, 'CLEAR_ALL') PushScaleformMovieFunction(scaleform, 'SET_CLEAR_SPACE') PushScaleformMovieFunctionParameterInt(200) PopScaleformMovieFunctionVoid() for k,v in ipairs(buttons) do PushScaleformMovieFunction(scaleform, 'SET_DATA_SLOT') PushScaleformMovieFunctionParameterInt(k - 1) if v[3] then PushScaleformMovieMethodParameterButtonName(v[1]) PushScaleformMovieMethodParameterButtonName(v[2]) PushScaleformMovieFunctionParameterString(v[3]) else PushScaleformMovieMethodParameterButtonName(v[1]) PushScaleformMovieFunctionParameterString(v[2]) end PopScaleformMovieFunctionVoid() end PushScaleformMovieFunction(scaleform, 'DRAW_INSTRUCTIONAL_BUTTONS') PushScaleformMovieFunctionParameterInt(-1) PopScaleformMovieFunctionVoid() DrawScaleformMovieFullscreen(scaleform, 36, 53, 61, 255) end LoadDict = function(Dict) while not HasAnimDictLoaded(Dict) do Wait(0) RequestAnimDict(Dict) end end function Characters:beginCreation(character) SetEntityCollision(PlayerPedId(), true, true) FreezeEntityPosition(PlayerPedId(), false) SetEntityCoords(PlayerPedId(), Config.char_creation.pos.x, Config.char_creation.pos.y, Config.char_creation.pos.z, true, false, false, false) SetEntityHeading(PlayerPedId(), Config.char_creation.pos[4]) local area = math.random(1, 65535) TriggerServerEvent('instance:setNamed', area) self.creating_character = true self.in_clothing_menu = false LoadDict(Config.char_creation.anim_dict) TaskPlayAnim(PlayerPedId(), Config.char_creation.anim_dict, Config.char_creation.anim, -1.0, -1.0, -1, Config.char_creation.flags, 0, 2, 0) -- self:createCamera() for key, value in pairs(Config.player_slots) do if DoesEntityExist(value.ped) then DeletePed(value.ped) end end Citizen.CreateThread(function() while self.creating_character do Citizen.Wait(0) if not self.in_clothing_menu then -- Disabla rörelse, skjut och interaktioner, men lämna rotation & zoom så menyn sköter detta själv DisableControlAction(2, 30, true) DisableControlAction(2, 31, true) DisableControlAction(2, 32, true) DisableControlAction(2, 33, true) DisableControlAction(2, 34, true) DisableControlAction(2, 35, true) DisableControlAction(0, 25, true) DisableControlAction(0, 24, true) -- INGA knappar eller rotation/zoom-hantering här! Låt Illenium Appearance sköta det. end -- SetCamActive(self.main_cam, true) -- RenderScriptCams(true, false, 0, true, false) end end) ESX.LoadModel('mp_m_freemode_01') NetworkFadeOutEntity(PlayerPedId(), true, false) if IsModelInCdimage('mp_m_freemode_01') and IsModelValid('mp_m_freemode_01') then SetPlayerModel(PlayerId(), 'mp_m_freemode_01') SetPedDefaultComponentVariation(PlayerPedId()) end SetModelAsNoLongerNeeded('mp_m_freemode_01') NetworkFadeInEntity(PlayerPedId(), 0, false) SetPedMaxHealth(PlayerPedId(), 200) exports["illenium-appearance"]:InitializeCharacter( character.sex == "m" and "Male" or "Female", function() self.in_clothing_menu = false -- Menyn stängs -- print("Karaktär skapad! Data:", json.encode(exports["illenium-appearance"]:getPedAppearance(PlayerPedId()))) character["appearance"] = exports["illenium-appearance"]:getPedAppearance(PlayerPedId()) DoScreenFadeOut(1000) PlaySoundFrontend(-1, "CHECKPOINT_NORMAL", "HUD_MINI_GAME_SOUNDSET", true) TriggerServerEvent("unrp_inventory:giveLicense") TriggerServerEvent("esx:saveCharacter", character) Citizen.Wait(1000) TriggerServerEvent("unrp_character:changeCharacterSave") Characters:setup() end, function() self.in_clothing_menu = false -- Om creation avbryts print("Creation avbruten") Characters:setup() end ) end function Characters:createCamera() self.main_cam = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', Config.char_creation.camera, 0, 0, 420.0, GetGameplayCamFov()) N_0xf55e4046f6f831dc(self.main_cam, 7.0) N_0xe111a7c0d200cbc5(self.main_cam, 1.0) SetCamDofFnumberOfLens(self.main_cam, 0.5) SetCamDofMaxNearInFocusDistanceBlendLevel(self.main_cam, 1.0) ShakeCam(self.main_cam, 'HAND_SHAKE', 0.1) self.current_camera_zoom = GetGameplayCamFov() self.current_camera_coords = Config.char_creation.camera end
Updated files
v1