229 lines
7.3 KiB
Lua
Raw Normal View History

2025-04-05 22:25:06 +00:00
local QBCore = exports['qb-core']:GetCoreObject()
local camZPlus1 = 1500
local camZPlus2 = 50
local pointCamCoords = 75
local pointCamCoords2 = 0
local cam1Time = 500
local cam2Time = 1000
local choosingSpawn = false
local Houses = {}
local cam = nil
local cam2 = nil
-- Functions
local function SetDisplay(bool)
local translations = {}
for k in pairs(Lang.fallback and Lang.fallback.phrases or Lang.phrases) do
if k:sub(0, #'ui.') then
translations[k:sub(#'ui.' + 1)] = Lang:t(k)
end
end
choosingSpawn = bool
SetNuiFocus(bool, bool)
SendNUIMessage({
action = 'showUi',
status = bool,
translations = translations
})
end
-- Events
RegisterNetEvent('qb-spawn:client:openUI', function(value)
SetEntityVisible(PlayerPedId(), false)
DoScreenFadeOut(250)
Wait(1000)
DoScreenFadeIn(250)
QBCore.Functions.GetPlayerData(function(PlayerData)
cam = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', PlayerData.position.x, PlayerData.position.y, PlayerData.position.z + camZPlus1, -85.00, 0.00, 0.00, 100.00, false, 0)
SetCamActive(cam, true)
RenderScriptCams(true, false, 1, true, true)
end)
Wait(500)
SetDisplay(value)
end)
RegisterNetEvent('qb-houses:client:setHouseConfig', function(houseConfig)
Houses = houseConfig
end)
RegisterNetEvent('qb-spawn:client:setupSpawns', function(cData, new, apps)
if not new then
QBCore.Functions.TriggerCallback('qb-spawn:server:getOwnedHouses', function(houses)
local myHouses = {}
if houses ~= nil then
for i = 1, (#houses), 1 do
myHouses[#myHouses + 1] = {
house = houses[i].house,
label = Houses[houses[i].house].adress,
}
end
end
Wait(500)
SendNUIMessage({
action = 'setupLocations',
locations = QB.Spawns,
houses = myHouses,
isNew = new
})
end, cData.citizenid)
elseif new then
SendNUIMessage({
action = 'setupAppartements',
locations = apps,
isNew = new
})
end
end)
-- NUI Callbacks
RegisterNUICallback('exit', function(_, cb)
SetNuiFocus(false, false)
SendNUIMessage({
action = 'showUi',
status = false
})
choosingSpawn = false
cb('ok')
end)
local function SetCam(campos)
cam2 = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', campos.x, campos.y, campos.z + camZPlus1, 300.00, 0.00, 0.00, 110.00, false, 0)
PointCamAtCoord(cam2, campos.x, campos.y, campos.z + pointCamCoords)
SetCamActiveWithInterp(cam2, cam, cam1Time, true, true)
if DoesCamExist(cam) then
DestroyCam(cam, true)
end
Wait(cam1Time)
cam = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', campos.x, campos.y, campos.z + camZPlus2, 300.00, 0.00, 0.00, 110.00, false, 0)
PointCamAtCoord(cam, campos.x, campos.y, campos.z + pointCamCoords2)
SetCamActiveWithInterp(cam, cam2, cam2Time, true, true)
SetEntityCoords(PlayerPedId(), campos.x, campos.y, campos.z)
end
RegisterNUICallback('setCam', function(data, cb)
local location = tostring(data.posname)
local type = tostring(data.type)
DoScreenFadeOut(200)
Wait(500)
DoScreenFadeIn(200)
if DoesCamExist(cam) then DestroyCam(cam, true) end
if DoesCamExist(cam2) then DestroyCam(cam2, true) end
if type == 'current' then
QBCore.Functions.GetPlayerData(function(PlayerData)
SetCam(PlayerData.position)
end)
elseif type == 'house' then
SetCam(Houses[location].coords.enter)
elseif type == 'normal' then
SetCam(QB.Spawns[location].coords)
elseif type == 'appartment' then
SetCam(Apartments.Locations[location].coords.enter)
end
cb('ok')
end)
RegisterNUICallback('chooseAppa', function(data, cb)
local ped = PlayerPedId()
local appaYeet = data.appType
SetDisplay(false)
DoScreenFadeOut(500)
Wait(5000)
TriggerServerEvent('apartments:server:CreateApartment', appaYeet, Apartments.Locations[appaYeet].label, true)
TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
TriggerEvent('QBCore:Client:OnPlayerLoaded')
FreezeEntityPosition(ped, false)
RenderScriptCams(false, true, 500, true, true)
SetCamActive(cam, false)
DestroyCam(cam, true)
SetCamActive(cam2, false)
DestroyCam(cam2, true)
SetEntityVisible(ped, true)
cb('ok')
end)
local function PreSpawnPlayer()
SetDisplay(false)
DoScreenFadeOut(500)
Wait(2000)
end
local function PostSpawnPlayer(ped)
FreezeEntityPosition(ped, false)
RenderScriptCams(false, true, 500, true, true)
SetCamActive(cam, false)
DestroyCam(cam, true)
SetCamActive(cam2, false)
DestroyCam(cam2, true)
SetEntityVisible(PlayerPedId(), true)
Wait(500)
DoScreenFadeIn(250)
end
RegisterNUICallback('spawnplayer', function(data, cb)
local location = tostring(data.spawnloc)
local type = tostring(data.typeLoc)
local ped = PlayerPedId()
local PlayerData = QBCore.Functions.GetPlayerData()
local insideMeta = PlayerData.metadata['inside']
if type == 'current' then
PreSpawnPlayer()
QBCore.Functions.GetPlayerData(function(pd)
ped = PlayerPedId()
SetEntityCoords(ped, pd.position.x, pd.position.y, pd.position.z)
SetEntityHeading(ped, pd.position.a)
FreezeEntityPosition(ped, false)
end)
if insideMeta.house ~= nil then
local houseId = insideMeta.house
TriggerEvent('qb-houses:client:LastLocationHouse', houseId)
elseif insideMeta.apartment.apartmentType ~= nil or insideMeta.apartment.apartmentId ~= nil then
local apartmentType = insideMeta.apartment.apartmentType
local apartmentId = insideMeta.apartment.apartmentId
TriggerEvent('qb-apartments:client:LastLocationHouse', apartmentType, apartmentId)
end
TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
TriggerEvent('QBCore:Client:OnPlayerLoaded')
PostSpawnPlayer()
elseif type == 'house' then
PreSpawnPlayer()
TriggerEvent('qb-houses:client:enterOwnedHouse', location)
TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
TriggerEvent('QBCore:Client:OnPlayerLoaded')
TriggerServerEvent('qb-houses:server:SetInsideMeta', 0, false)
TriggerServerEvent('qb-apartments:server:SetInsideMeta', 0, 0, false)
PostSpawnPlayer()
elseif type == 'normal' then
local pos = QB.Spawns[location].coords
PreSpawnPlayer()
SetEntityCoords(ped, pos.x, pos.y, pos.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)
SetEntityCoords(ped, pos.x, pos.y, pos.z)
SetEntityHeading(ped, pos.w)
PostSpawnPlayer()
end
cb('ok')
end)
-- Threads
CreateThread(function()
while true do
Wait(0)
if choosingSpawn then
DisableAllControlActions(0)
else
Wait(1000)
end
end
end)