492 lines
20 KiB
Lua
492 lines
20 KiB
Lua
|
local cam, cameraOffset = nil
|
||
|
local hidePlayers = false
|
||
|
local lastSkin = nil
|
||
|
local lastCoords = nil
|
||
|
local gender = nil
|
||
|
tempSkinTable = {}
|
||
|
playerHasAlreadySkin = false
|
||
|
|
||
|
if Config.Core == "QB-Core" then
|
||
|
QBCore = Config.CoreExport()
|
||
|
end
|
||
|
|
||
|
local function openCharacterCreator(sex, isAlreadyHaveSkin)
|
||
|
if Config.Core == "ESX" and Config.SkinManager == "esx_skin" then
|
||
|
refreshValues()
|
||
|
end
|
||
|
local data = {}
|
||
|
local hasSkin = false
|
||
|
local components, maxVals = getMaxValues()
|
||
|
for i=1, #components, 1 do
|
||
|
data[components[i].name] = {
|
||
|
value = components[i].value,
|
||
|
min = components[i].min,
|
||
|
}
|
||
|
for k,v in pairs(maxVals) do
|
||
|
if k == components[i].name then
|
||
|
data[k].max = v
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if isAlreadyHaveSkin then
|
||
|
playerHasAlreadySkin = true
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
tempSkinTable = Character_ESX
|
||
|
TriggerEvent('skinchanger:getData', function(comp, max)
|
||
|
for k, v in pairs(comp) do
|
||
|
data[v.name].value = tonumber(v.value)
|
||
|
tempSkinTable[v.name] = tonumber(v.value)
|
||
|
end
|
||
|
hasSkin = true
|
||
|
end)
|
||
|
TriggerEvent('skinchanger:getSkin', function(skin)
|
||
|
gender = skin.sex == 0 and 'male' or 'female'
|
||
|
lastSkin = skin
|
||
|
end)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
tempSkinTable = exports[Config.SkinManager]:getPedAppearance(PlayerPedId())
|
||
|
lastSkin = exports[Config.SkinManager]:getPedAppearance(PlayerPedId())
|
||
|
gender = tempSkinTable.sex == 0 and 'male' or 'female'
|
||
|
hasSkin = true
|
||
|
elseif Config.SkinManager == "qb-clothing" then
|
||
|
QBCore.Functions.TriggerCallback('hp_charcreator:getCurrentSkin', function(skin)
|
||
|
tempSkinTable = json.decode(skin)
|
||
|
gender = QBCore.Functions.GetPlayerData().charinfo.gender == 0 and 'male' or 'female'
|
||
|
hasSkin = true
|
||
|
end)
|
||
|
end
|
||
|
else
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
tempSkinTable = Character_ESX
|
||
|
gender = tempSkinTable.sex == 0 and 'male' or 'female'
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
tempSkinTable = Character_AP
|
||
|
gender = tempSkinTable.sex == 0 and 'male' or 'female'
|
||
|
elseif Config.SkinManager == "qb-clothing" then
|
||
|
tempSkinTable = Character_QB
|
||
|
gender = QBCore.Functions.GetPlayerData().charinfo.gender == 0 and 'male' or 'female'
|
||
|
end
|
||
|
hasSkin = true
|
||
|
end
|
||
|
if tonumber(sex) then
|
||
|
if Config.Core == "ESX" then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
TriggerEvent('skinchanger:loadSkin', {sex = sex})
|
||
|
Character_ESX['sex'] = sex
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher('sex', sex)
|
||
|
end
|
||
|
elseif Config.Core == "QB-Core" then
|
||
|
local model = sex == 0 and GetHashKey('mp_m_freemode_01') or GetHashKey('mp_f_freemode_01')
|
||
|
RequestModel(model)
|
||
|
while not HasModelLoaded(model) do
|
||
|
RequestModel(model)
|
||
|
Citizen.Wait(0)
|
||
|
end
|
||
|
SetPlayerModel(PlayerId(), model)
|
||
|
SetPedComponentVariation(PlayerPedId(), 0, 0, 0, 2)
|
||
|
if Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher('sex', sex)
|
||
|
end
|
||
|
end
|
||
|
data['sex'].value = sex
|
||
|
end
|
||
|
if not isAlreadyHaveSkin then
|
||
|
local mySex = IsPedModel(PlayerPedId(), GetHashKey('mp_m_freemode_01')) and 'm' or 'f'
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
if Config.EnableFirstCreationClothes then
|
||
|
for k, v in pairs(Config.FirstCreationClothes[mySex]) do
|
||
|
tempSkinTable[k] = v
|
||
|
end
|
||
|
updateValue(tempSkinTable)
|
||
|
end
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
if Config.EnableFirstCreationClothes then
|
||
|
for k, v in pairs(Config.FirstCreationClothes[mySex]) do
|
||
|
appearance_switcher(k, v)
|
||
|
end
|
||
|
end
|
||
|
elseif Config.SkinManager == "qb-clothing" then
|
||
|
if Config.EnableFirstCreationClothes then
|
||
|
for k, v in pairs(Config.FirstCreationClothes[mySex]) do
|
||
|
qbcore_switcher(k, v)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
while not hasSkin do
|
||
|
Citizen.Wait(125)
|
||
|
end
|
||
|
CreateSkinCam(data)
|
||
|
end
|
||
|
|
||
|
RegisterNUICallback('closeCharacter', function()
|
||
|
SetNuiFocus(false, false)
|
||
|
ClearPedTasks(PlayerPedId())
|
||
|
DeleteSkinCam()
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback('cancel', function()
|
||
|
if Config.EnableCancelButtonUI then
|
||
|
SetNuiFocus(false, false)
|
||
|
ClearPedTasks(PlayerPedId())
|
||
|
DeleteSkinCam(true)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("change", function(data)
|
||
|
if data.type == 'clotheset' then
|
||
|
local mySex = IsPedModel(PlayerPedId(), GetHashKey('mp_m_freemode_01')) and 'm' or 'f'
|
||
|
if Config.clotheSets[tonumber(data.new)] then
|
||
|
if (Config.Core == "ESX") then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
for k, v in pairs(Config.clotheSets[tonumber(data.new)][mySex]) do
|
||
|
tempSkinTable[k] = v
|
||
|
end
|
||
|
updateValue(tempSkinTable)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
for k, v in pairs(Config.clotheSets[tonumber(data.new)][mySex]) do
|
||
|
appearance_switcher(k, v)
|
||
|
end
|
||
|
end
|
||
|
elseif (Config.Core == "QB-Core") then
|
||
|
if Config.SkinManager == "qb-clothing" then
|
||
|
for k, v in pairs(Config.clotheSets[tonumber(data.new)][mySex]) do
|
||
|
qbcore_switcher(k, v)
|
||
|
end
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
for k, v in pairs(Config.clotheSets[tonumber(data.new)][mySex]) do
|
||
|
appearance_switcher(k, v)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
if Config.Core == "ESX" then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
if data.type == 'sex' then
|
||
|
if tempSkinTable.sex ~= tonumber(data.new) then
|
||
|
TriggerEvent('skinchanger:loadSkin', {sex = tonumber(data.new)})
|
||
|
end
|
||
|
end
|
||
|
tempSkinTable[data.type] = tonumber(data.new)
|
||
|
updateValue(tempSkinTable)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher(data.type, data.new)
|
||
|
end
|
||
|
elseif (Config.Core == "QB-Core") then
|
||
|
if data.type == 'sex' then
|
||
|
local model = data.new == 0 and GetHashKey('mp_m_freemode_01') or GetHashKey('mp_f_freemode_01')
|
||
|
RequestModel(model)
|
||
|
while not HasModelLoaded(model) do
|
||
|
RequestModel(model)
|
||
|
Citizen.Wait(0)
|
||
|
end
|
||
|
SetPlayerModel(PlayerId(), model)
|
||
|
SetPedComponentVariation(PlayerPedId(), 0, 0, 0, 2)
|
||
|
if Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher(data.type, data.new)
|
||
|
end
|
||
|
else
|
||
|
if Config.SkinManager == "qb-clothing" then
|
||
|
qbcore_switcher(data.type, data.new)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher(data.type, data.new)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
local secondItem, secondValue = GetMaxVal(data.type)
|
||
|
if secondItem and secondValue then
|
||
|
SendNUIMessage({
|
||
|
action = 'updateSecondValue',
|
||
|
secondItem = secondItem,
|
||
|
secondValue = secondValue
|
||
|
})
|
||
|
if Config.Core == "ESX" then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
tempSkinTable[secondItem] = 0
|
||
|
updateValue(tempSkinTable)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher(secondItem, 0)
|
||
|
end
|
||
|
elseif Config.Core == "QB-Core" then
|
||
|
if Config.SkinManager == "qb-clothing" then
|
||
|
qbcore_switcher(secondItem, 0)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
appearance_switcher(secondItem, 0)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if Config.soundsEffects then
|
||
|
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", true)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("change_camera", function(data)
|
||
|
if cam and data.type then
|
||
|
local myPed = PlayerPedId()
|
||
|
local myCoords = GetEntityCoords(myPed)
|
||
|
local newCamPos = Config.CameraHeight[data.type]
|
||
|
SetCamCoord(cam, cameraOffset.x, cameraOffset.y, cameraOffset.z + newCamPos.z_height)
|
||
|
PointCamAtCoord(cam, myCoords.x, myCoords.y, myCoords.z + newCamPos.z_height)
|
||
|
SetCamFov(cam, newCamPos.fov)
|
||
|
SendNUIMessage({
|
||
|
action = 'updateInputs',
|
||
|
fov = math.floor(newCamPos.fov)
|
||
|
})
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("change_height", function(data)
|
||
|
if cam and data.height then
|
||
|
local myPed = PlayerPedId()
|
||
|
SetCamCoord(cam, cameraOffset.x, cameraOffset.y, cameraOffset.z + data.height)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("change_distance", function(data)
|
||
|
if cam and data.distance then
|
||
|
local myPed = PlayerPedId()
|
||
|
local camFov = GetCamFov(cam)
|
||
|
SetCamFov(cam, tonumber(data.distance)+.0)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("change_rotate", function(data)
|
||
|
if data.rotate then
|
||
|
local myPed = PlayerPedId()
|
||
|
local myHeading = tonumber(math.floor(GetEntityHeading(myPed))+.0)
|
||
|
local newHeading = tonumber(math.floor(data.rotate)+.0)
|
||
|
if myHeading ~= newHeading then
|
||
|
SetEntityHeading(myPed, newHeading)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("hands_up", function(data)
|
||
|
local myPed = PlayerPedId()
|
||
|
if handsup then
|
||
|
ClearPedTasksImmediately(myPed)
|
||
|
RequestAnimDict(Config.CharacterCreationPedAnimation[1])
|
||
|
while not HasAnimDictLoaded(Config.CharacterCreationPedAnimation[1]) do
|
||
|
Wait(1)
|
||
|
end
|
||
|
TaskPlayAnim(myPed, Config.CharacterCreationPedAnimation[1], Config.CharacterCreationPedAnimation[2], 8.0, 0.0, -1, 1, 0, 0, 0, 0)
|
||
|
handsup = false
|
||
|
elseif not handsup then
|
||
|
RequestAnimDict(Config.HandsUpAnimation[1])
|
||
|
while not HasAnimDictLoaded(Config.HandsUpAnimation[1]) do
|
||
|
Wait(1)
|
||
|
end
|
||
|
TaskPlayAnim(myPed, Config.HandsUpAnimation[1], Config.HandsUpAnimation[2], 8.0, 0.0, -1, Config.HandsUpAnimation[3], 0, 0, 0, 0)
|
||
|
handsup = true
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
function CreateSkinCam(data)
|
||
|
if not DoesCamExist(cam) then
|
||
|
cam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true)
|
||
|
end
|
||
|
local myPed = PlayerPedId()
|
||
|
local myCoords = GetEntityCoords(myPed)
|
||
|
local myHeading = GetEntityHeading(myPed)
|
||
|
cameraOffset = GetOffsetFromEntityInWorldCoords(myPed, 0.0, 0.0 + Config.defaultCamDistance, 0.0)
|
||
|
SetCamActive(cam, true)
|
||
|
RenderScriptCams(true, true, 500, true, true)
|
||
|
|
||
|
SetCamCoord(cam, cameraOffset.x, cameraOffset.y, cameraOffset.z+0.65)
|
||
|
PointCamAtCoord(cam, myCoords.x, myCoords.y, myCoords.z+0.65)
|
||
|
SetCamFov(cam, 30.0)
|
||
|
|
||
|
SetTimecycleModifier('MP_corona_heist_DOF')
|
||
|
SetTimecycleModifierStrength(1.0)
|
||
|
|
||
|
RequestAnimDict(Config.CharacterCreationPedAnimation[1])
|
||
|
while not HasAnimDictLoaded(Config.CharacterCreationPedAnimation[1]) do
|
||
|
Wait(1)
|
||
|
end
|
||
|
TaskPlayAnim(myPed, Config.CharacterCreationPedAnimation[1], Config.CharacterCreationPedAnimation[2], 8.0, 0.0, -1, 1, 0, 0, 0, 0)
|
||
|
Config.Hud:Disable()
|
||
|
SendNUIMessage({
|
||
|
action = 'openCharacter',
|
||
|
categories = Config.EnablesCategories,
|
||
|
items = Config.AvailableItems,
|
||
|
skinmanager = Config.SkinManager,
|
||
|
data = data,
|
||
|
currentRotate = myHeading,
|
||
|
currentDistance = 30,
|
||
|
clotheSets = Config.clotheSets,
|
||
|
disabledValues = Config.BlockedClothes[gender],
|
||
|
handsUpKey = Config.HandsUpKey,
|
||
|
enableHandsUpButton = Config.EnableHandsUpButtonUI,
|
||
|
enableCancelButtonUI = Config.EnableCancelButtonUI,
|
||
|
playerHasAlreadySkin = playerHasAlreadySkin,
|
||
|
})
|
||
|
SetNuiFocus(true, true)
|
||
|
end
|
||
|
|
||
|
function DeleteSkinCam(isCanceled)
|
||
|
if not playerHasAlreadySkin or playerHasAlreadySkin and Config.TeleportPlayerByCommand then
|
||
|
DoScreenFadeOut(500)
|
||
|
end
|
||
|
if not isCanceled then
|
||
|
if Config.Core == "ESX" then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
TriggerEvent('skinchanger:loadSkin', tempSkinTable)
|
||
|
TriggerServerEvent('esx_skin:save', tempSkinTable)
|
||
|
elseif Config.SkinManager == "fivem-appearance" then
|
||
|
TriggerServerEvent('fivem-appearance:save', tempSkinTable)
|
||
|
elseif Config.SkinManager == "illenium-appearance" then
|
||
|
TriggerServerEvent('illenium-appearance:server:saveAppearance', tempSkinTable)
|
||
|
end
|
||
|
elseif (Config.Core == "QB-Core") then
|
||
|
if Config.SkinManager == 'qb-clothing' then
|
||
|
local model = GetEntityModel(PlayerPedId()) == GetHashKey('mp_m_freemode_01') and GetHashKey('mp_m_freemode_01') or GetHashKey('mp_f_freemode_01')
|
||
|
local character_encode = json.encode(tempSkinTable)
|
||
|
TriggerServerEvent("qb-clothing:saveSkin", model, character_encode)
|
||
|
elseif Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
TriggerServerEvent(Config.SkinManager..':server:saveAppearance', tempSkinTable)
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
if Config.Core == "ESX" then
|
||
|
if Config.SkinManager == "esx_skin" then
|
||
|
TriggerEvent('skinchanger:loadSkin', lastSkin)
|
||
|
TriggerServerEvent('esx_skin:save', lastSkin)
|
||
|
elseif Config.SkinManager == "fivem-appearance" then
|
||
|
TriggerEvent('skinchanger:loadSkin', lastSkin)
|
||
|
TriggerServerEvent('esx_skin:save', lastSkin)
|
||
|
elseif Config.SkinManager == "illenium-appearance" then
|
||
|
TriggerEvent('skinchanger:loadSkin', lastSkin)
|
||
|
TriggerServerEvent('illenium-appearance:server:saveAppearance', lastSkin)
|
||
|
end
|
||
|
elseif Config.Core == "QB-Core" then
|
||
|
if Config.SkinManager == "fivem-appearance" or Config.SkinManager == "illenium-appearance" then
|
||
|
TriggerEvent(Config.SkinManager..':client:reloadSkin')
|
||
|
elseif Config.SkinManager == "qb-clothing" then
|
||
|
TriggerServerEvent("qb-clothes:loadPlayerSkin")
|
||
|
TriggerServerEvent("qb-clothing:loadPlayerSkin")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if not playerHasAlreadySkin or playerHasAlreadySkin and Config.TeleportPlayerByCommand then
|
||
|
Wait(500)
|
||
|
end
|
||
|
if Config.soundsEffects then
|
||
|
PlaySoundFrontend(-1, 'CHECKPOINT_UNDER_THE_BRIDGE', 'HUD_MINI_GAME_SOUNDSET', 0)
|
||
|
end
|
||
|
FreezeEntityPosition(PlayerPedId(), false)
|
||
|
ClearPedTasks(PlayerPedId())
|
||
|
ClearPedTasksImmediately(PlayerPedId())
|
||
|
SetCamActive(cam, false)
|
||
|
cam = nil
|
||
|
Config.Hud:Enable()
|
||
|
RenderScriptCams(false, true, 500, true, true)
|
||
|
ClearTimecycleModifier()
|
||
|
if playerHasAlreadySkin then
|
||
|
if Config.TeleportPlayerByCommand then
|
||
|
SetEntityCoords(PlayerPedId(), lastCoords.x, lastCoords.y, lastCoords.z)
|
||
|
SetEntityHeading(PlayerPedId(), lastCoords.w)
|
||
|
end
|
||
|
else
|
||
|
if Config.TeleportToNewSpawn then
|
||
|
SetEntityCoords(PlayerPedId(), Config.afterCreateCharSpawn.x, Config.afterCreateCharSpawn.y, Config.afterCreateCharSpawn.z)
|
||
|
SetEntityHeading(PlayerPedId(), Config.afterCreateCharSpawn.w)
|
||
|
else
|
||
|
SetEntityCoords(PlayerPedId(), lastCoords.x, lastCoords.y, lastCoords.z)
|
||
|
SetEntityHeading(PlayerPedId(), lastCoords.w)
|
||
|
end
|
||
|
end
|
||
|
if not playerHasAlreadySkin or playerHasAlreadySkin and Config.TeleportPlayerByCommand then
|
||
|
Wait(100)
|
||
|
DoScreenFadeIn(250)
|
||
|
end
|
||
|
hidePlayers = false
|
||
|
tempSkinTable = {}
|
||
|
lastSkin = nil
|
||
|
lastCoords = nil
|
||
|
playerHasAlreadySkin = false
|
||
|
end
|
||
|
|
||
|
RegisterNetEvent('hp_charcreator:openCreator')
|
||
|
AddEventHandler('hp_charcreator:openCreator', function(sex, isAlreadyHaveSkin)
|
||
|
lastCoords = {
|
||
|
x = GetEntityCoords(PlayerPedId()).x,
|
||
|
y = GetEntityCoords(PlayerPedId()).y,
|
||
|
z = GetEntityCoords(PlayerPedId()).z,
|
||
|
w = GetEntityHeading(PlayerPedId())
|
||
|
}
|
||
|
if Config.TeleportToNewSpawn then
|
||
|
if not isAlreadyHaveSkin or isAlreadyHaveSkin and Config.TeleportPlayerByCommand then
|
||
|
DoScreenFadeOut(500)
|
||
|
Wait(1000)
|
||
|
SetEntityCoords(PlayerPedId(), Config.creatingCharacterCoords.x, Config.creatingCharacterCoords.y, Config.creatingCharacterCoords.z)
|
||
|
SetEntityHeading(PlayerPedId(), Config.creatingCharacterCoords.w)
|
||
|
end
|
||
|
end
|
||
|
FreezeEntityPosition(PlayerPedId(), true)
|
||
|
if not sex and not isAlreadyHaveSkin then
|
||
|
local myModel = GetEntityModel(PlayerPedId()) == GetHashKey('mp_m_freemode_01') or IsModelAPed(GetEntityModel(PlayerPedId())) == GetHashKey('mp_f_freemode_01')
|
||
|
if not myModel then
|
||
|
local model = GetHashKey('mp_m_freemode_01')
|
||
|
RequestModel(model)
|
||
|
while not HasModelLoaded(model) do
|
||
|
RequestModel(model)
|
||
|
Citizen.Wait(0)
|
||
|
end
|
||
|
SetPlayerModel(PlayerId(), model)
|
||
|
SetPedComponentVariation(PlayerPedId(), 0, 0, 0, 2)
|
||
|
end
|
||
|
end
|
||
|
if not isAlreadyHaveSkin or isAlreadyHaveSkin and Config.TeleportPlayerByCommand then
|
||
|
StartLoop()
|
||
|
DoScreenFadeIn(250)
|
||
|
end
|
||
|
openCharacterCreator(sex, isAlreadyHaveSkin)
|
||
|
end)
|
||
|
|
||
|
StartLoop = function()
|
||
|
hidePlayers = true
|
||
|
MumbleSetVolumeOverride(PlayerId(), 0.0)
|
||
|
CreateThread(function()
|
||
|
while hidePlayers do
|
||
|
SetEntityVisible(PlayerPedId(), 0, 0)
|
||
|
SetLocalPlayerVisibleLocally(1)
|
||
|
SetPlayerInvincible(PlayerId(), 1)
|
||
|
ThefeedHideThisFrame()
|
||
|
HideHudComponentThisFrame(11)
|
||
|
HideHudComponentThisFrame(12)
|
||
|
HideHudComponentThisFrame(21)
|
||
|
HideHudAndRadarThisFrame()
|
||
|
Wait(0)
|
||
|
local vehicles = GetGamePool('CVehicle')
|
||
|
for i = 1, #vehicles do
|
||
|
SetEntityLocallyInvisible(vehicles[i])
|
||
|
end
|
||
|
end
|
||
|
local playerId, playerPed = PlayerId(), PlayerPedId()
|
||
|
MumbleSetVolumeOverride(playerId, -1.0)
|
||
|
SetEntityVisible(playerPed, 1, 0)
|
||
|
SetPlayerInvincible(playerId, 0)
|
||
|
end)
|
||
|
CreateThread(function()
|
||
|
local playerPool = {}
|
||
|
while hidePlayers do
|
||
|
local players = GetActivePlayers()
|
||
|
for i = 1, #players do
|
||
|
local player = players[i]
|
||
|
if player ~= PlayerId() and not playerPool[player] then
|
||
|
playerPool[player] = true
|
||
|
NetworkConcealPlayer(player, true, true)
|
||
|
end
|
||
|
end
|
||
|
Wait(500)
|
||
|
end
|
||
|
for k in pairs(playerPool) do
|
||
|
NetworkConcealPlayer(k, false, false)
|
||
|
end
|
||
|
FreezeEntityPosition(PlayerPedId(), false)
|
||
|
end)
|
||
|
end
|