Files
esx_core-esx-framework/client/main.lua
T

306 lines
9.5 KiB
Lua

ESX = exports['es_extended']:getSharedObject()
if ESX.GetConfig().Multichar then
Citizen.CreateThread(function()
while NetworkIsPlayerActive(PlayerId()) and not ESX.IsPlayerLoaded() do
Citizen.Wait(5)
DoScreenFadeOut(0)
TriggerServerEvent("esx_multicharacter:SetupCharacters")
TriggerEvent("esx_multicharacter:SetupCharacters")
break
end
end)
local cam, cam2 = nil, nil
local Characters = {}
local canRelog = true
local Spawned
RegisterNetEvent('esx_multicharacter:SetupCharacters')
AddEventHandler('esx_multicharacter:SetupCharacters', function()
ESX.PlayerLoaded = false
ESX.PlayerData = {}
Spawned = false
cam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", Config.Spawn.x, Config.Spawn.y+1.6, Config.Spawn.z+0.5, 0.0, 0.0, 180.0, 100.00, false, 0)
SetCamActive(cam, true)
RenderScriptCams(true, false, 1, true, true)
exports.spawnmanager:forceRespawn()
exports.spawnmanager:spawnPlayer({
x = Config.Spawn.x,
y = Config.Spawn.y,
z = Config.Spawn.z,
heading = Config.Spawn.w,
model = `mp_m_freemode_01`,
skipFade = true
}, function()
canRelog = false
exports.spawnmanager:setAutoSpawn(false)
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, false)
SetEntityAlpha(playerPed, 0)
ESX.UI.HUD.SetDisplay(0.0)
DisplayHud(false)
DisplayRadar(false)
StartLoop()
ShutdownLoadingScreen()
ShutdownLoadingScreenNui()
TriggerEvent('esx:loadingScreenOff')
end)
end)
StartLoop = function()
hidePlayers = true
Citizen.CreateThread(function()
while hidePlayers do
DisableAllControlActions(0)
EnableControlAction(0, 173, true)
EnableControlAction(0, 177, true)
EnableControlAction(0, 18, true)
EnableControlAction(0, 27, true)
EnableControlAction(0, 200, true)
Citizen.Wait(5)
end
end)
Citizen.CreateThread(function()
local players, vehicles
while hidePlayers do
players = GetActivePlayers()
for i=1, #players do
if players[i] ~= PlayerId() then NetworkConcealPlayer(players[i], true, true) end
end
vehicles = ESX.Game.GetVehicles()
for i=1, #vehicles do
NetworkConcealEntity(vehicles[i], true)
end
Citizen.Wait(500)
end
for i=1, #players do
if players[i] ~= PlayerId() then NetworkConcealPlayer(players[i], false, false) end
end
for i=1, #vehicles do
NetworkConcealEntity(vehicles[i], false)
end
Citizen.Wait(10000)
canRelog = true
end)
end
SetupCharacter = function(index)
if Spawned == false then
exports.spawnmanager:setAutoSpawn(false)
exports.spawnmanager:forceRespawn()
exports.spawnmanager:spawnPlayer({
x = Config.Spawn.x,
y = Config.Spawn.y,
z = Config.Spawn.z,
heading = Config.Spawn.w,
model = Characters[index].model or `mp_m_freemode_01`,
skipFade = true
}, function()
canRelog = false
local skin = Characters[index].skin or Config.Default
if Characters[index] then TriggerEvent('skinchanger:loadSkin', skin) end
end)
elseif Characters[index] and Characters[index].skin then
if Characters[Spawned] and Characters[Spawned].model then
RequestModel(Characters[index].model)
while not HasModelLoaded(Characters[index].model) do
RequestModel(Characters[index].model)
Citizen.Wait(0)
end
SetPlayerModel(PlayerId(), Characters[index].model)
SetModelAsNoLongerNeeded(Characters[index].model)
end
TriggerEvent('skinchanger:loadSkin', Characters[index].skin)
end
FreezeEntityPosition(PlayerPedId(), true)
Spawned = index
SendNUIMessage({
action = "openui",
character = Characters[index]
})
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, true)
SetEntityAlpha(playerPed, 255)
end
LoadPed = function(isNew, skin)
if isNew then
local isMale = false
if skin.sex == 1 then isMale = false end
TriggerEvent('skinchanger:loadDefaultModel', isMale, function()
local newSkin = Config.Default
newSkin.sex = skin.sex
TriggerEvent('skinchanger:loadSkin', newSkin)
Citizen.Wait(500)
TriggerEvent('esx_skin:openSaveableMenu')
end)
else TriggerEvent('skinchanger:loadSkin', skin) Citizen.Wait(500) end
end
RegisterNetEvent('esx_multicharacter:SetupUI')
AddEventHandler('esx_multicharacter:SetupUI', function(data)
Characters = data
local elements = {}
local Character = next(Characters)
if Character == nil then
SendNUIMessage({
action = "closeui"
})
canRelog = false
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, false)
SetEntityAlpha(playerPed, 0)
TriggerServerEvent('esx_multicharacter:CharacterChosen', 1, true)
TriggerEvent('esx_identity:showRegisterIdentity')
else
SetupCharacter(Character)
for k,v in pairs(Characters) do
if not v.model then
if v.skin.model then v.model = v.skin.model elseif v.skin.sex == 1 then v.model = `mp_f_freemode_01` else v.model = `mp_m_freemode_01` end
end
local label = v.firstname..' '..v.lastname
elements[#elements+1] = {label = label, value = v.id}
end
if #elements < Config.Slots then
elements[#elements+1] = {label = _('create_char'), value = (#elements+1), new = true}
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'selectchar', {
title = _('select_char'),
align = 'top-left',
elements = elements
}, function(data, menu)
local elements = {}
if not data.current.new then
elements[1] = {label = _('char_play'), action = 'play', value = data.current.value}
elements[2] = {label = _('char_delete'), action = 'delete', value = data.current.value}
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'choosechar', {
title = _('select_char'),
align = 'top-left',
elements = elements
}, function(data, menu)
if data.current.action == 'play' then
ESX.UI.Menu.CloseAll()
DoScreenFadeOut(300)
SendNUIMessage({
action = "closeui"
})
TriggerServerEvent('esx_multicharacter:CharacterChosen', data.current.value, false)
Citizen.Wait(300)
else
local elements2 = {}
elements2[1] = {label = _('cancel')}
elements2[2] = {label = _('confirm'), value = data.current.value}
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'deletechar', {
title = _('delete_label', Characters[data.current.value].firstname, Characters[data.current.value].lastname),
align = 'center',
elements = elements2
}, function(data, menu)
if data.current.value then
TriggerServerEvent('esx_multicharacter:DeleteCharacter', data.current.value)
Spawned = false
ESX.UI.Menu.CloseAll()
else
menu.close()
end
end, function(data, menu)
menu.close()
end)
end
end, function(data, menu)
menu.close()
end)
else
ESX.UI.Menu.CloseAll()
local GetSlot = function()
for i=1, Config.Slots do
if not Characters[i] then
return i
end
end
end
local slot = GetSlot()
TriggerServerEvent('esx_multicharacter:CharacterChosen', slot, true)
TriggerEvent('esx_identity:showRegisterIdentity')
end
end, function(data, menu)
menu.refresh()
end, function(data, menu)
if data.current.new then
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, false)
SetEntityAlpha(playerPed, 0)
SendNUIMessage({
action = "closeui"
})
else
SetupCharacter(data.current.value)
local playerPed = PlayerPedId()
SetPedAoBlobRendering(playerPed, true)
SetEntityAlpha(playerPed, 255)
end
end)
end
end)
RegisterNetEvent('esx_multicharacter:SpawnCharacter')
AddEventHandler('esx_multicharacter:SpawnCharacter', function(spawn, isNew, skin)
DoScreenFadeOut(0)
Citizen.Wait(300)
local playerPed = PlayerPedId()
cam2 = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", spawn.x,spawn.y,spawn.z+200, 0.0, 0.0, 0.0, 100.00, false, 0)
PointCamAtCoord(cam2, spawn.x,spawn.y,spawn.z+10)
SetCamActiveWithInterp(cam2, cam, 400, true, true)
Citizen.Wait(700)
DoScreenFadeIn(500)
FreezeEntityPosition(playerPed, true)
SetEntityVisible(playerPed, true, 0)
SetEntityCoords(playerPed, spawn.x, spawn.y, spawn.z, true, false, false, false)
cam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", spawn.x,spawn.y,spawn.z+10, GetEntityRotation(playerPed), 100.00, false, 0)
PointCamAtCoord(cam, spawn.x,spawn.y,spawn.z+2)
SetCamActiveWithInterp(cam, cam2, 2700, true, true)
PlaySoundFrontend(-1, "Zoom_Out", "DLC_HEIST_PLANNING_BOARD_SOUNDS", 1)
Citizen.Wait(1000)
LoadPed(isNew, skin)
playerPed = PlayerPedId()
TriggerServerEvent('esx:onPlayerSpawn')
TriggerEvent('esx:onPlayerSpawn')
TriggerEvent('playerSpawned')
RenderScriptCams(false, true, 500, true, true)
PlaySoundFrontend(-1, "CAR_BIKE_WHOOSH", "MP_LOBBY_SOUNDS", 1)
SetCamActive(cam, false)
DestroyCam(cam, true)
DisplayHud(true)
DisplayRadar(true)
FreezeEntityPosition(playerPed, false)
SetEntityHeading(playerPed, spawn.heading)
hidePlayers = false
end)
RegisterNetEvent('esx:onPlayerLogout')
AddEventHandler('esx:onPlayerLogout', function()
DoScreenFadeOut(0)
Spawned = false
TriggerServerEvent("esx_multicharacter:SetupCharacters")
TriggerEvent("esx_multicharacter:SetupCharacters")
TriggerEvent('esx_skin:resetFirstSpawn')
end)
if Config.Relog then
RegisterCommand('relog', function(source, args, rawCommand)
if canRelog == true then
canRelog = false
TriggerServerEvent('esx_multicharacter:relog')
ESX.SetTimeout(10000, function()
canRelog = true
end)
end
end)
end
end