Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed config.SkipSelection black screen bug #256

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
Loading