Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
SkapMicke authored Nov 15, 2024
1 parent f2fb43e commit a4b8832
Showing 1 changed file with 271 additions and 0 deletions.
271 changes: 271 additions & 0 deletions main.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
local cam = nil
local charPed = nil
local loadScreenCheckState = false
local QBCore = exports['qb-core']:GetCoreObject()
local cached_player_skins = {}

local randommodels = { -- models possible to load when choosing empty slot
'mp_m_freemode_01',
'mp_f_freemode_01',
}

-- Main Thread

CreateThread(function()
while true do
Wait(0)
if NetworkIsSessionStarted() then
TriggerEvent('qb-multicharacter:client:chooseChar')
return
end
end
end)

-- Functions

local function loadModel(model)
RequestModel(model)
while not HasModelLoaded(model) do
Wait(0)
end
end


local function initializePedModel(model, data)
CreateThread(function()
if not model then
model = joaat(randommodels[math.random(#randommodels)])
end
loadModel(model)
charPed = CreatePed(2, model, Config.PedCoords.x, Config.PedCoords.y, Config.PedCoords.z - 0.98, Config.PedCoords.w, false, true)
SetPedComponentVariation(charPed, 0, 0, 0, 2)
FreezeEntityPosition(charPed, false)
SetEntityInvincible(charPed, true)
PlaceObjectOnGroundProperly(charPed)
SetBlockingOfNonTemporaryEvents(charPed, true)
if data then
TriggerEvent('qb-clothing:client:loadPlayerClothing', data, charPed)
end
end)
end

local function skyCam(bool)
TriggerEvent('qb-weathersync:client:DisableSync')
if bool then
DoScreenFadeIn(1000)
SetTimecycleModifier('hud_def_blur')
SetTimecycleModifierStrength(1.0)
FreezeEntityPosition(PlayerPedId(), false)
cam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", Config.CamCoords.x, Config.CamCoords.y, Config.CamCoords.z, 0.0 ,0.0, Config.CamCoords.w, 60.00, false, 0)
SetCamActive(cam, true)
RenderScriptCams(true, false, 1, true, true)
else
SetTimecycleModifier('default')
SetCamActive(cam, false)
DestroyCam(cam, true)
RenderScriptCams(false, false, 1, true, true)
FreezeEntityPosition(PlayerPedId(), false)
end
end

local function openCharMenu(bool)
QBCore.Functions.TriggerCallback("qb-multicharacter:server:GetNumberOfCharacters", function(result)
local translations = {}
for k in pairs(Lang.fallback and Lang.fallback.phrases or Lang.phrases) do
if k:sub(0, ('ui.'):len()) then
translations[k:sub(('ui.'):len() + 1)] = Lang:t(k)
end
end
SetNuiFocus(bool, bool)
SendNUIMessage({
action = "ui",
customNationality = Config.customNationality,
toggle = bool,
nChar = result,
enableDeleteButton = Config.EnableDeleteButton,
translations = translations
})
skyCam(bool)
if not loadScreenCheckState then
ShutdownLoadingScreenNui()
loadScreenCheckState = true
end
end)
end

-- Events

RegisterNetEvent('qb-multicharacter:client:closeNUIdefault', function() -- This event is only for no starting apartments
DeleteEntity(charPed)
SetNuiFocus(false, false)
DoScreenFadeOut(500)
Wait(2000)
SetEntityCoords(PlayerPedId(), Config.DefaultSpawn.x, Config.DefaultSpawn.y, Config.DefaultSpawn.z)
TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
TriggerEvent('QBCore:Client:OnPlayerLoaded')
TriggerServerEvent('qb-houses:server:SetInsideMeta', 0, false)
TriggerServerEvent('qb-apartments:server:SetInsideMeta', 0, 0, false)
Wait(500)
openCharMenu()
SetEntityVisible(PlayerPedId(), true)
Wait(500)
DoScreenFadeIn(250)
TriggerEvent('qb-weathersync:client:EnableSync')
TriggerEvent('qb-clothes:client:CreateFirstCharacter')
end)

RegisterNetEvent('qb-multicharacter:client:closeNUI', function()
DeleteEntity(charPed)
SetNuiFocus(false, false)
end)

RegisterNetEvent('qb-multicharacter:client:chooseChar', function()
SetNuiFocus(false, false)
DoScreenFadeOut(10)
Wait(1000)
local interior = GetInteriorAtCoords(Config.Interior.x, Config.Interior.y, Config.Interior.z - 18.9)
LoadInterior(interior)
while not IsInteriorReady(interior) do
Wait(1000)
end
FreezeEntityPosition(PlayerPedId(), true)
SetEntityCoords(PlayerPedId(), Config.HiddenCoords.x, Config.HiddenCoords.y, Config.HiddenCoords.z)
Wait(1500)
ShutdownLoadingScreen()
ShutdownLoadingScreenNui()
openCharMenu(true)
end)

RegisterNetEvent('qb-multicharacter:client:spawnLastLocation', function(coords, cData)
local ped = PlayerPedId()
DoScreenFadeOut(500)
Wait(500)
SetEntityCoords(ped, coords.x, coords.y, coords.z)
SetEntityHeading(ped, coords.w or 0.0)
FreezeEntityPosition(ped, false)
SetEntityVisible(ped, true)
TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
TriggerEvent('QBCore:Client:OnPlayerLoaded')

Wait(1000)
DoScreenFadeIn(1000)
SetNuiFocus(false, false)

print("Spelaren är inloggad och skärmen bör nu vara synlig")
end)


-- NUI Callbacks

RegisterNUICallback('closeUI', function(data, cb)
local cData = data.cData
DoScreenFadeOut(500)
Wait(500)
TriggerServerEvent('qb-multicharacter:server:loadUserData', cData)
openCharMenu(false)
SetEntityAsMissionEntity(charPed, true, true)
DeleteEntity(charPed)
if Config.SkipSelection then
SetNuiFocus(false, false)
skyCam(false)
Wait(1000)
if not IsScreenFadedIn() then
DoScreenFadeIn(1000)
end
else
openCharMenu(false)
end

cb("ok")
end)


RegisterNUICallback('disconnectButton', function(_, cb)
SetEntityAsMissionEntity(charPed, true, true)
DeleteEntity(charPed)
TriggerServerEvent('qb-multicharacter:server:disconnect')
cb("ok")
end)

RegisterNUICallback('selectCharacter', function(data, cb)
local cData = data.cData
DoScreenFadeOut(10)
TriggerServerEvent('qb-multicharacter:server:loadUserData', cData)
openCharMenu(false)
SetEntityAsMissionEntity(charPed, true, true)
DeleteEntity(charPed)
cb("ok")
end)

RegisterNUICallback('cDataPed', function(nData, cb)
local cData = nData.cData
SetEntityAsMissionEntity(charPed, true, true)
DeleteEntity(charPed)
if cData ~= nil then
if not cached_player_skins[cData.citizenid] then
local temp_model = promise.new()
local temp_data = promise.new()

QBCore.Functions.TriggerCallback('qb-multicharacter:server:getSkin', function(model, data)
temp_model:resolve(model)
temp_data:resolve(data)
end, cData.citizenid)

local resolved_model = Citizen.Await(temp_model)
local resolved_data = Citizen.Await(temp_data)

cached_player_skins[cData.citizenid] = {model = resolved_model, data = resolved_data}
end

local model = cached_player_skins[cData.citizenid].model
local data = cached_player_skins[cData.citizenid].data

model = model ~= nil and tonumber(model) or false

if model ~= nil then
initializePedModel(model, json.decode(data))
else
initializePedModel()
end
cb("ok")
else
initializePedModel()
cb("ok")
end
end)

RegisterNUICallback('setupCharacters', function(_, cb)
QBCore.Functions.TriggerCallback("qb-multicharacter:server:setupCharacters", function(result)
cached_player_skins = {}
SendNUIMessage({
action = "setupCharacters",
characters = result
})
cb("ok")
end)
end)

RegisterNUICallback('removeBlur', function(_, cb)
SetTimecycleModifier('default')
cb("ok")
end)

RegisterNUICallback('createNewCharacter', function(data, cb)
local cData = data
DoScreenFadeOut(150)
if cData.gender == Lang:t("ui.male") then
cData.gender = 0
elseif cData.gender == Lang:t("ui.female") then
cData.gender = 1
end
TriggerServerEvent('qb-multicharacter:server:createCharacter', cData)
Wait(500)
cb("ok")
end)

RegisterNUICallback('removeCharacter', function(data, cb)
TriggerServerEvent('qb-multicharacter:server:deleteCharacter', data.citizenid)
DeletePed(charPed)
TriggerEvent('qb-multicharacter:client:chooseChar')
cb("ok")
end)

0 comments on commit a4b8832

Please sign in to comment.