mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 17:28:53 +00:00
es_extended: noclip
# add missing locales # refactor noclip methods (thread only if noclip enabled) # format code
This commit is contained in:
+128
-139
@@ -537,158 +537,147 @@ AddEventHandler("esx:tpm", function()
|
|||||||
local GetVehiclePedIsIn = GetVehiclePedIsIn
|
local GetVehiclePedIsIn = GetVehiclePedIsIn
|
||||||
|
|
||||||
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
||||||
if admin then
|
if not admin then
|
||||||
local blipMarker = GetFirstBlipInfoId(8)
|
return
|
||||||
if not DoesBlipExist(blipMarker) then
|
end
|
||||||
ESX.ShowNotification('No Waypoint Set.', true, false, 140)
|
local blipMarker = GetFirstBlipInfoId(8)
|
||||||
return 'marker'
|
if not DoesBlipExist(blipMarker) then
|
||||||
|
ESX.ShowNotification(TranslateCap('tpm_nowaypoint'), true, false, 140)
|
||||||
|
return 'marker'
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fade screen to hide how clients get teleported.
|
||||||
|
DoScreenFadeOut(650)
|
||||||
|
while not IsScreenFadedOut() do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local ped, coords = ESX.PlayerData.ped, GetBlipInfoIdCoord(blipMarker)
|
||||||
|
local vehicle = GetVehiclePedIsIn(ped, false)
|
||||||
|
local oldCoords = GetEntityCoords(ped)
|
||||||
|
|
||||||
|
-- Unpack coords instead of having to unpack them while iterating.
|
||||||
|
-- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
|
||||||
|
local x, y, groundZ, Z_START = coords['x'], coords['y'], 850.0, 950.0
|
||||||
|
local found = false
|
||||||
|
FreezeEntityPosition(vehicle > 0 and vehicle or ped, true)
|
||||||
|
|
||||||
|
for i = Z_START, 0, -25.0 do
|
||||||
|
local z = i
|
||||||
|
if (i % 2) ~= 0 then
|
||||||
|
z = Z_START - i
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fade screen to hide how clients get teleported.
|
NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
|
||||||
DoScreenFadeOut(650)
|
local curTime = GetGameTimer()
|
||||||
while not IsScreenFadedOut() do
|
while IsNetworkLoadingScene() do
|
||||||
Wait(0)
|
if GetGameTimer() - curTime > 1000 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
Wait(0)
|
||||||
end
|
end
|
||||||
|
NewLoadSceneStop()
|
||||||
local ped, coords = ESX.PlayerData.ped, GetBlipInfoIdCoord(blipMarker)
|
SetPedCoordsKeepVehicle(ped, x, y, z)
|
||||||
local vehicle = GetVehiclePedIsIn(ped, false)
|
|
||||||
local oldCoords = GetEntityCoords(ped)
|
while not HasCollisionLoadedAroundEntity(ped) do
|
||||||
|
RequestCollisionAtCoord(x, y, z)
|
||||||
-- Unpack coords instead of having to unpack them while iterating.
|
if GetGameTimer() - curTime > 1000 then
|
||||||
-- 825.0 seems to be the max a player can reach while 0.0 being the lowest.
|
break
|
||||||
local x, y, groundZ, Z_START = coords['x'], coords['y'], 850.0, 950.0
|
end
|
||||||
local found = false
|
Wait(0)
|
||||||
if vehicle > 0 then
|
|
||||||
FreezeEntityPosition(vehicle, true)
|
|
||||||
else
|
|
||||||
FreezeEntityPosition(ped, true)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = Z_START, 0, -25.0 do
|
-- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
|
||||||
local z = i
|
found, groundZ = GetGroundZFor_3dCoord(x, y, z, false)
|
||||||
if (i % 2) ~= 0 then
|
if found then
|
||||||
z = Z_START - i
|
Wait(0)
|
||||||
end
|
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
||||||
|
break
|
||||||
NewLoadSceneStart(x, y, z, x, y, z, 50.0, 0)
|
|
||||||
local curTime = GetGameTimer()
|
|
||||||
while IsNetworkLoadingScene() do
|
|
||||||
if GetGameTimer() - curTime > 1000 then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
Wait(0)
|
|
||||||
end
|
|
||||||
NewLoadSceneStop()
|
|
||||||
SetPedCoordsKeepVehicle(ped, x, y, z)
|
|
||||||
|
|
||||||
while not HasCollisionLoadedAroundEntity(ped) do
|
|
||||||
RequestCollisionAtCoord(x, y, z)
|
|
||||||
if GetGameTimer() - curTime > 1000 then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
Wait(0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Get ground coord. As mentioned in the natives, this only works if the client is in render distance.
|
|
||||||
found, groundZ = GetGroundZFor_3dCoord(x, y, z, false)
|
|
||||||
if found then
|
|
||||||
Wait(0)
|
|
||||||
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
Wait(0)
|
|
||||||
end
|
end
|
||||||
|
Wait(0)
|
||||||
-- Remove black screen once the loop has ended.
|
end
|
||||||
DoScreenFadeIn(650)
|
|
||||||
if vehicle > 0 then
|
-- Remove black screen once the loop has ended.
|
||||||
FreezeEntityPosition(vehicle, false)
|
DoScreenFadeIn(650)
|
||||||
else
|
FreezeEntityPosition(vehicle > 0 and vehicle or ped, false)
|
||||||
FreezeEntityPosition(ped, false)
|
|
||||||
end
|
if not found then
|
||||||
|
-- If we can't find the coords, set the coords to the old ones.
|
||||||
if not found then
|
-- We don't unpack them before since they aren't in a loop and only called once.
|
||||||
-- If we can't find the coords, set the coords to the old ones.
|
SetPedCoordsKeepVehicle(ped, oldCoords['x'], oldCoords['y'], oldCoords['z'] - 1.0)
|
||||||
-- We don't unpack them before since they aren't in a loop and only called once.
|
|
||||||
SetPedCoordsKeepVehicle(ped, oldCoords['x'], oldCoords['y'], oldCoords['z'] - 1.0)
|
|
||||||
ESX.ShowNotification(TranslateCap('tpm_success'), true, false, 140)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- If Z coord was found, set coords in found coords.
|
|
||||||
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
|
||||||
ESX.ShowNotification(TranslateCap('tpm_success'), true, false, 140)
|
ESX.ShowNotification(TranslateCap('tpm_success'), true, false, 140)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- If Z coord was found, set coords in found coords.
|
||||||
|
SetPedCoordsKeepVehicle(ped, x, y, groundZ)
|
||||||
|
ESX.ShowNotification(TranslateCap('tpm_success'), true, false, 140)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local noclip = false
|
local noclip = false
|
||||||
|
local noclip_pos = vector3(0, 0, 70)
|
||||||
|
local heading = 0
|
||||||
|
|
||||||
|
local function noclipThread()
|
||||||
|
while noclip do
|
||||||
|
SetEntityCoordsNoOffset(ESX.PlayerData.ped, noclip_pos.x, noclip_pos.y, noclip_pos.z, 0, 0, 0)
|
||||||
|
|
||||||
|
if IsControlPressed(1, 34) then
|
||||||
|
heading = heading + 1.5
|
||||||
|
if heading > 360 then
|
||||||
|
heading = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(ESX.PlayerData.ped, heading)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlPressed(1, 9) then
|
||||||
|
heading = heading - 1.5
|
||||||
|
if heading < 0 then
|
||||||
|
heading = 360
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(ESX.PlayerData.ped, heading)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlPressed(1, 8) then
|
||||||
|
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlPressed(1, 32) then
|
||||||
|
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlPressed(1, 27) then
|
||||||
|
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsControlPressed(1, 173) then
|
||||||
|
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0)
|
||||||
|
end
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RegisterNetEvent("esx:noclip")
|
RegisterNetEvent("esx:noclip")
|
||||||
AddEventHandler("esx:noclip", function(input)
|
AddEventHandler("esx:noclip", function(input)
|
||||||
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
|
||||||
if admin then
|
if not admin then
|
||||||
local player = PlayerId()
|
return
|
||||||
|
|
||||||
local msg = "disabled"
|
|
||||||
if(noclip == false)then
|
|
||||||
noclip_pos = GetEntityCoords(ESX.PlayerData.ped, false)
|
|
||||||
end
|
|
||||||
|
|
||||||
noclip = not noclip
|
|
||||||
|
|
||||||
if(noclip)then
|
|
||||||
msg = "enabled"
|
|
||||||
end
|
|
||||||
|
|
||||||
TriggerEvent("chatMessage", "Noclip has been ^2^*" .. msg)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
|
||||||
local heading = 0
|
|
||||||
CreateThread(function()
|
|
||||||
while true do
|
|
||||||
local Sleep = 1500
|
|
||||||
|
|
||||||
if(noclip)then
|
|
||||||
Sleep = 0
|
|
||||||
SetEntityCoordsNoOffset(ESX.PlayerData.ped, noclip_pos.x, noclip_pos.y, noclip_pos.z, 0, 0, 0)
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 34))then
|
|
||||||
heading = heading + 1.5
|
|
||||||
if(heading > 360)then
|
|
||||||
heading = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
SetEntityHeading(ESX.PlayerData.ped, heading)
|
|
||||||
end
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 9))then
|
|
||||||
heading = heading - 1.5
|
|
||||||
if(heading < 0)then
|
|
||||||
heading = 360
|
|
||||||
end
|
|
||||||
|
|
||||||
SetEntityHeading(ESX.PlayerData.ped, heading)
|
|
||||||
end
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 8))then
|
|
||||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 32))then
|
|
||||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 27))then
|
|
||||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0)
|
|
||||||
end
|
|
||||||
|
|
||||||
if(IsControlPressed(1, 173))then
|
|
||||||
noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
Wait(Sleep)
|
|
||||||
end
|
if not noclip then
|
||||||
|
noclip_pos = GetEntityCoords(ESX.PlayerData.ped, false)
|
||||||
|
heading = GetEntityHeading(ESX.PlayerData.ped)
|
||||||
|
end
|
||||||
|
|
||||||
|
noclip = not noclip
|
||||||
|
if noclip then
|
||||||
|
CreateThread(noclipThread)
|
||||||
|
end
|
||||||
|
|
||||||
|
ESX.ShowNotification(TranslateCap('noclip_message', noclip and "enabled" or "disabled"), true, false, 140)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
RegisterNetEvent("esx:killPlayer")
|
RegisterNetEvent("esx:killPlayer")
|
||||||
@@ -705,7 +694,7 @@ AddEventHandler("esx:freezePlayer", function(input)
|
|||||||
SetPlayerInvincible(player, true)
|
SetPlayerInvincible(player, true)
|
||||||
elseif input == 'unfreeze' then
|
elseif input == 'unfreeze' then
|
||||||
SetEntityCollision(ESX.PlayerData.ped, true)
|
SetEntityCollision(ESX.PlayerData.ped, true)
|
||||||
FreezeEntityPosition(ESX.PlayerData.ped, false)
|
FreezeEntityPosition(ESX.PlayerData.ped, false)
|
||||||
SetPlayerInvincible(player, false)
|
SetPlayerInvincible(player, false)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -108,8 +108,13 @@ Locales['en'] = {
|
|||||||
['command_giveammo_noweapon_found'] = '%s does not have that weapon',
|
['command_giveammo_noweapon_found'] = '%s does not have that weapon',
|
||||||
['command_giveammo_weapon'] = 'Weapon name',
|
['command_giveammo_weapon'] = 'Weapon name',
|
||||||
['command_giveammo_ammo'] = 'Ammo Quantity',
|
['command_giveammo_ammo'] = 'Ammo Quantity',
|
||||||
|
['tpm_nowaypoint'] = 'No Waypoint Set.',
|
||||||
['tpm_success'] = 'Successfully Teleported',
|
['tpm_success'] = 'Successfully Teleported',
|
||||||
|
|
||||||
|
['noclip_message'] = 'Noclip has been %s',
|
||||||
|
['enabled'] = '~g~enabled~s~',
|
||||||
|
['disabled'] = '~r~disabled~s~',
|
||||||
|
|
||||||
-- Locale settings
|
-- Locale settings
|
||||||
['locale_digit_grouping_symbol'] = ',',
|
['locale_digit_grouping_symbol'] = ',',
|
||||||
['locale_currency'] = '£%s',
|
['locale_currency'] = '£%s',
|
||||||
|
|||||||
@@ -108,8 +108,13 @@ Locales["hu"] = {
|
|||||||
['command_giveammo_noweapon_found'] = 'Nincs ilyen fegyvered: %s',
|
['command_giveammo_noweapon_found'] = 'Nincs ilyen fegyvered: %s',
|
||||||
['command_giveammo_weapon'] = 'Fegyver név',
|
['command_giveammo_weapon'] = 'Fegyver név',
|
||||||
['command_giveammo_ammo'] = 'Lőszer mennyiség',
|
['command_giveammo_ammo'] = 'Lőszer mennyiség',
|
||||||
|
['tpm_nowaypoint'] = 'Nincs kijelölve pozíció!',
|
||||||
['tpm_success'] = 'Sikeres teleportálás',
|
['tpm_success'] = 'Sikeres teleportálás',
|
||||||
|
|
||||||
|
['noclip_message'] = 'Noclip %s',
|
||||||
|
['enabled'] = '~g~engedélyezve~s~',
|
||||||
|
['disabled'] = '~r~letiltva~s~',
|
||||||
|
|
||||||
-- Locale settings
|
-- Locale settings
|
||||||
["locale_digit_grouping_symbol"] = ",",
|
["locale_digit_grouping_symbol"] = ",",
|
||||||
["locale_currency"] = "$%s",
|
["locale_currency"] = "$%s",
|
||||||
|
|||||||
Reference in New Issue
Block a user