diff --git a/[SQL]/legacy.sql b/[SQL]/legacy.sql
index 2ba76874..ecf145c7 100644
--- a/[SQL]/legacy.sql
+++ b/[SQL]/legacy.sql
@@ -389,7 +389,7 @@ CREATE TABLE `users` (
`job` varchar(20) DEFAULT 'unemployed',
`job_grade` int(11) DEFAULT 0,
`loadout` longtext DEFAULT NULL,
- `position` varchar(255) DEFAULT '{"x":-269.4,"y":-955.3,"z":31.2,"heading":205.8}',
+ `position` longtext NULL DEFAULT NULL,
`firstname` varchar(16) DEFAULT NULL,
`lastname` varchar(16) DEFAULT NULL,
`dateofbirth` varchar(10) DEFAULT NULL,
diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua
index 77c01ae3..71998083 100644
--- a/[core]/es_extended/client/functions.lua
+++ b/[core]/es_extended/client/functions.lua
@@ -6,8 +6,6 @@ Core.CurrentRequestId = 0
Core.ServerCallbacks = {}
Core.Input = {}
ESX.UI = {}
-ESX.UI.HUD = {}
-ESX.UI.HUD.RegisteredElements = {}
ESX.UI.Menu = {}
ESX.UI.Menu.RegisteredTypes = {}
ESX.UI.Menu.Opened = {}
@@ -197,70 +195,6 @@ function ESX.TriggerServerCallback(name, cb, ...)
Core.CurrentRequestId = Core.CurrentRequestId < 65535 and Core.CurrentRequestId + 1 or 0
end
-function ESX.UI.HUD.SetDisplay(opacity)
- SendNUIMessage({
- action = 'setHUDDisplay',
- opacity = opacity
- })
-end
-
-function ESX.UI.HUD.RegisterElement(name, index, priority, html, data)
- local found = false
-
- for i = 1, #ESX.UI.HUD.RegisteredElements, 1 do
- if ESX.UI.HUD.RegisteredElements[i] == name then
- found = true
- break
- end
- end
-
- if found then
- return
- end
-
- ESX.UI.HUD.RegisteredElements[#ESX.UI.HUD.RegisteredElements + 1] = name
-
- SendNUIMessage({
- action = 'insertHUDElement',
- name = name,
- index = index,
- priority = priority,
- html = html,
- data = data
- })
-
- ESX.UI.HUD.UpdateElement(name, data)
-end
-
-function ESX.UI.HUD.RemoveElement(name)
- for i = 1, #ESX.UI.HUD.RegisteredElements, 1 do
- if ESX.UI.HUD.RegisteredElements[i] == name then
- table.remove(ESX.UI.HUD.RegisteredElements, i)
- break
- end
- end
-
- SendNUIMessage({
- action = 'deleteHUDElement',
- name = name
- })
-end
-
-function ESX.UI.HUD.Reset()
- SendNUIMessage({
- action = 'resetHUDElements'
- })
- ESX.UI.HUD.RegisteredElements = {}
-end
-
-function ESX.UI.HUD.UpdateElement(name, data)
- SendNUIMessage({
- action = 'updateHUDElement',
- name = name,
- data = data
- })
-end
-
function ESX.UI.Menu.RegisterType(type, open, close)
ESX.UI.Menu.RegisteredTypes[type] = {
open = open,
diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua
index a10df217..32fe238a 100644
--- a/[core]/es_extended/client/main.lua
+++ b/[core]/es_extended/client/main.lua
@@ -14,7 +14,7 @@ CreateThread(function()
end)
RegisterNetEvent("esx:requestModel", function(model)
- ESX.Streaming.RequestModel(model)
+ ESX.Streaming.RequestModel(model)
end)
RegisterNetEvent('esx:playerLoaded')
@@ -57,82 +57,68 @@ AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin)
NetworkSetFriendlyFireOption(true)
end
- CreateThread(function()
- local SetPlayerHealthRechargeMultiplier = SetPlayerHealthRechargeMultiplier
- local BlockWeaponWheelThisFrame = BlockWeaponWheelThisFrame
- local DisableControlAction = DisableControlAction
- local IsPedArmed = IsPedArmed
- local SetPlayerLockonRangeOverride = SetPlayerLockonRangeOverride
- local DisablePlayerVehicleRewards = DisablePlayerVehicleRewards
- local RemoveAllPickupsOfType = RemoveAllPickupsOfType
- local HideHudComponentThisFrame = HideHudComponentThisFrame
- local PlayerId = PlayerId()
- local DisabledComps = {}
- for i=1, #(Config.RemoveHudCommonents) do
- if Config.RemoveHudCommonents[i] then
- DisabledComps[#DisabledComps + 1] = i
- end
+ local playerId = PlayerId()
+
+ -- RemoveHudCommonents
+ for i = 1, #(Config.RemoveHudCommonents) do
+ if Config.RemoveHudCommonents[i] then
+ SetHudComponentPosition(i, 999999.0, 999999.0)
end
+ end
- while true do
- local Sleep = true
+ -- DisableNPCDrops
+ if Config.DisableNPCDrops then
+ local weaponPickups = { `PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN` }
+ for i = 1, #weaponPickups do
+ ToggleUsePickupsForPlayer(playerId, weaponPickups[i], false)
+ end
+ end
- if Config.DisableHealthRegeneration then
- Sleep = false
- SetPlayerHealthRechargeMultiplier(PlayerId, 0.0)
- end
+ -- DisableVehicleRewards
+ if Config.DisableVehicleRewards then
+ local inVehicle = false
- if Config.DisableWeaponWheel then
- Sleep = false
- BlockWeaponWheelThisFrame()
- DisableControlAction(0, 37,true)
- end
-
- if Config.DisableAimAssist then
- Sleep = false
- if IsPedArmed(ESX.PlayerData.ped, 4) then
- SetPlayerLockonRangeOverride(PlayerId, 2.0)
+ local function DisableVehicleRewardsThread()
+ CreateThread(function()
+ while inVehicle do
+ DisablePlayerVehicleRewards(playerId)
+ Wait(0)
end
- end
+ end)
+ end
- if Config.DisableVehicleRewards then
- Sleep = false
- DisablePlayerVehicleRewards(PlayerId)
- end
-
- if Config.DisableNPCDrops then
- Sleep = false
- RemoveAllPickupsOfType(0xDF711959)
- RemoveAllPickupsOfType(0xF9AFB48F)
- RemoveAllPickupsOfType(0xA9355DCD)
+ AddEventHandler('esx:enteredVehicle', function(vehicle, plate, seat, displayName, netId)
+ if GetVehicleClass(vehicle) == 18 then
+ DisableVehicleRewardsThread()
end
+ end)
- if #DisabledComps > 0 then
- Sleep = false
- for i=1, #(DisabledComps) do
- HideHudComponentThisFrame(DisabledComps[i])
+ AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId)
+ inVehicle = false
+ end)
+ end
+
+ if Config.DisableHealthRegeneration or Config.DisableWeaponWheel or Config.DisableAimAssist then
+ CreateThread(function()
+ while true do
+ if Config.DisableHealthRegeneration then
+ SetPlayerHealthRechargeMultiplier(playerId, 0.0)
end
+
+ if Config.DisableWeaponWheel then
+ BlockWeaponWheelThisFrame()
+ DisableControlAction(0, 37, true)
+ end
+
+ if Config.DisableAimAssist then
+ if IsPedArmed(ESX.PlayerData.ped, 4) then
+ SetPlayerLockonRangeOverride(playerId, 2.0)
+ end
+ end
+
+ Wait(0)
end
-
- Wait(Sleep and 1500 or 0)
- end
- end)
-
- if Config.EnableHud then
- for i=1, #(ESX.PlayerData.accounts) do
- local accountTpl = '

{{money}}
'
- ESX.UI.HUD.RegisterElement('account_' .. ESX.PlayerData.accounts[i].name, i, 0, accountTpl, {money = ESX.Math.GroupDigits(ESX.PlayerData.accounts[i].money)})
- end
-
- local jobTpl = '{{job_label}}{{grade_label}}
'
-
- local gradeLabel = ESX.PlayerData.job.grade_label ~= ESX.PlayerData.job.label and ESX.PlayerData.job.grade_label or ''
- if gradeLabel ~= '' then gradeLabel = ' - '..gradeLabel end
-
- ESX.UI.HUD.RegisterElement('job', #ESX.PlayerData.accounts, 0, jobTpl, {
- job_label = ESX.PlayerData.job.label,
- grade_label = gradeLabel
- })
+ end)
end
SetDefaultVehicleNumberPlateTextPattern(-1, Config.CustomAIPlates)
@@ -142,15 +128,14 @@ end)
RegisterNetEvent('esx:onPlayerLogout')
AddEventHandler('esx:onPlayerLogout', function()
ESX.PlayerLoaded = false
- if Config.EnableHud then ESX.UI.HUD.Reset() end
end)
RegisterNetEvent('esx:setMaxWeight')
AddEventHandler('esx:setMaxWeight', function(newMaxWeight) ESX.SetPlayerData("maxWeight", newMaxWeight) end)
local function onPlayerSpawn()
- ESX.SetPlayerData('ped', PlayerPedId())
- ESX.SetPlayerData('dead', false)
+ ESX.SetPlayerData('ped', PlayerPedId())
+ ESX.SetPlayerData('dead', false)
end
AddEventHandler('playerSpawned', onPlayerSpawn)
@@ -175,7 +160,7 @@ AddEventHandler('esx:restoreLoadout', function()
local ammoTypes = {}
RemoveAllPedWeapons(ESX.PlayerData.ped, true)
- for k,v in ipairs(ESX.PlayerData.loadout) do
+ for k, v in ipairs(ESX.PlayerData.loadout) do
local weaponName = v.name
local weaponHash = joaat(weaponName)
@@ -184,7 +169,7 @@ AddEventHandler('esx:restoreLoadout', function()
local ammoType = GetPedAmmoTypeFromWeapon(ESX.PlayerData.ped, weaponHash)
- for k2,v2 in ipairs(v.components) do
+ for k2, v2 in ipairs(v.components) do
local componentHash = ESX.GetWeaponComponent(weaponName, v2).hash
GiveWeaponComponentToPed(ESX.PlayerData.ped, weaponHash, componentHash)
end
@@ -199,27 +184,27 @@ end)
AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value)
if value then
- Wait(0)
- local NetId = value.NetId
- local Vehicle = NetworkGetEntityFromNetworkId(NetId)
- local Tries = 0
- while Vehicle == 0 do
- Vehicle = NetworkGetEntityFromNetworkId(NetId)
- Wait(100)
- Tries = Tries + 1
- if Tries > 300 then
- break
- end
- end
- if NetworkGetEntityOwner(Vehicle) == PlayerId() then
- ESX.Game.SetVehicleProperties(Vehicle, value)
+ Wait(0)
+ local NetId = value.NetId
+ local Vehicle = NetworkGetEntityFromNetworkId(NetId)
+ local Tries = 0
+ while Vehicle == 0 do
+ Vehicle = NetworkGetEntityFromNetworkId(NetId)
+ Wait(100)
+ Tries = Tries + 1
+ if Tries > 300 then
+ break
end
+ end
+ if NetworkGetEntityOwner(Vehicle) == PlayerId() then
+ ESX.Game.SetVehicleProperties(Vehicle, value)
+ end
end
end)
RegisterNetEvent('esx:setAccountMoney')
AddEventHandler('esx:setAccountMoney', function(account)
- for i=1, #(ESX.PlayerData.accounts) do
+ for i = 1, #(ESX.PlayerData.accounts) do
if ESX.PlayerData.accounts[i].name == account.name then
ESX.PlayerData.accounts[i] = account
break
@@ -227,18 +212,12 @@ AddEventHandler('esx:setAccountMoney', function(account)
end
ESX.SetPlayerData('accounts', ESX.PlayerData.accounts)
-
- if Config.EnableHud then
- ESX.UI.HUD.UpdateElement('account_' .. account.name, {
- money = ESX.Math.GroupDigits(account.money)
- })
- end
end)
if not Config.OxInventory then
RegisterNetEvent('esx:addInventoryItem')
AddEventHandler('esx:addInventoryItem', function(item, count, showNotification)
- for k,v in ipairs(ESX.PlayerData.inventory) do
+ for k, v in ipairs(ESX.PlayerData.inventory) do
if v.name == item then
ESX.UI.ShowInventoryItemNotification(true, v.label, count - v.count)
ESX.PlayerData.inventory[k].count = count
@@ -255,7 +234,7 @@ if not Config.OxInventory then
RegisterNetEvent('esx:removeInventoryItem')
AddEventHandler('esx:removeInventoryItem', function(item, count, showNotification)
- for k,v in ipairs(ESX.PlayerData.inventory) do
+ for k, v in ipairs(ESX.PlayerData.inventory) do
if v.name == item then
ESX.UI.ShowInventoryItemNotification(false, v.label, v.count - count)
ESX.PlayerData.inventory[k].count = count
@@ -288,7 +267,7 @@ if not Config.OxInventory then
RegisterNetEvent('esx:setWeaponTint')
AddEventHandler('esx:setWeaponTint', function(weapon, weaponTintIndex)
SetPedWeaponTintIndex(ESX.PlayerData.ped, joaat(weapon), weaponTintIndex)
-
+
end)
RegisterNetEvent('esx:removeWeapon')
@@ -307,14 +286,6 @@ end
RegisterNetEvent('esx:setJob')
AddEventHandler('esx:setJob', function(Job)
- if Config.EnableHud then
- local gradeLabel = Job.grade_label ~= Job.label and Job.grade_label or ''
- if gradeLabel ~= '' then gradeLabel = ' - '..gradeLabel end
- ESX.UI.HUD.UpdateElement('job', {
- job_label = Job.label,
- grade_label = gradeLabel
- })
- end
ESX.SetPlayerData('job', Job)
end)
@@ -341,7 +312,7 @@ if not Config.OxInventory then
local pickupObject = CreateWeaponObject(weaponHash, 50, coords.x, coords.y, coords.z, true, 1.0, 0)
SetWeaponObjectTintIndex(pickupObject, tintIndex)
- for k,v in ipairs(components) do
+ for k, v in ipairs(components) do
local component = ESX.GetWeaponComponent(name, v)
GiveWeaponComponentToWeaponObject(pickupObject, component.hash)
end
@@ -355,14 +326,15 @@ if not Config.OxInventory then
RegisterNetEvent('esx:createMissingPickups')
AddEventHandler('esx:createMissingPickups', function(missingPickups)
for pickupId, pickup in pairs(missingPickups) do
- TriggerEvent('esx:createPickup', pickupId, pickup.label, pickup.coords - vector3(0,0, 1.0), pickup.type, pickup.name, pickup.components, pickup.tintIndex)
+ TriggerEvent('esx:createPickup', pickupId, pickup.label, pickup.coords - vector3(0, 0, 1.0), pickup.type, pickup.name
+ , pickup.components, pickup.tintIndex)
end
end)
end
RegisterNetEvent('esx:registerSuggestions')
AddEventHandler('esx:registerSuggestions', function(registeredCommands)
- for name,command in pairs(registeredCommands) do
+ for name, command in pairs(registeredCommands) do
if command.suggestion then
TriggerEvent('chat:addSuggestion', ('/%s'):format(name), command.suggestion.help, command.suggestion.arguments)
end
@@ -379,60 +351,34 @@ if not Config.OxInventory then
end)
end
--- Pause menu disables HUD display
-if Config.EnableHud then
- CreateThread(function()
- local isPaused = false
-
- while true do
- local time = 500
- Wait(time)
-
- if IsPauseMenuActive() and not isPaused then
- time = 100
- isPaused = true
- ESX.UI.HUD.SetDisplay(0.0)
- elseif not IsPauseMenuActive() and isPaused then
- time = 100
- isPaused = false
- ESX.UI.HUD.SetDisplay(1.0)
- end
- end
- end)
-
- AddEventHandler('esx:loadingScreenOff', function()
- ESX.UI.HUD.SetDisplay(1.0)
- end)
-end
-
function StartServerSyncLoops()
if not Config.OxInventory then
- -- keep track of ammo
+ -- keep track of ammo
- CreateThread(function()
- local currentWeapon = {Ammo = 0}
- while ESX.PlayerLoaded do
- local sleep = 1500
- if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then
- sleep = 1000
- local _,weaponHash = GetCurrentPedWeapon(ESX.PlayerData.ped, true)
- local weapon = ESX.GetWeaponFromHash(weaponHash)
- if weapon then
- local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash)
- if weapon.name ~= currentWeapon.name then
- currentWeapon.Ammo = ammoCount
- currentWeapon.name = weapon.name
- else
- if ammoCount ~= currentWeapon.Ammo then
- currentWeapon.Ammo = ammoCount
- TriggerServerEvent('esx:updateWeaponAmmo', weapon.name, ammoCount)
- end
- end
+ CreateThread(function()
+ local currentWeapon = { Ammo = 0 }
+ while ESX.PlayerLoaded do
+ local sleep = 1500
+ if GetSelectedPedWeapon(ESX.PlayerData.ped) ~= -1569615261 then
+ sleep = 1000
+ local _, weaponHash = GetCurrentPedWeapon(ESX.PlayerData.ped, true)
+ local weapon = ESX.GetWeaponFromHash(weaponHash)
+ if weapon then
+ local ammoCount = GetAmmoInPedWeapon(ESX.PlayerData.ped, weaponHash)
+ if weapon.name ~= currentWeapon.name then
+ currentWeapon.Ammo = ammoCount
+ currentWeapon.name = weapon.name
+ else
+ if ammoCount ~= currentWeapon.Ammo then
+ currentWeapon.Ammo = ammoCount
+ TriggerServerEvent('esx:updateWeaponAmmo', weapon.name, ammoCount)
end
- end
- Wait(sleep)
+ end
end
- end)
+ end
+ Wait(sleep)
+ end
+ end)
end
end
@@ -459,7 +405,7 @@ if not Config.OxInventory then
local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer(playerCoords)
- for pickupId,pickup in pairs(pickups) do
+ for pickupId, pickup in pairs(pickups) do
local distance = #(playerCoords - pickup.coords)
if distance < 5 then
@@ -657,30 +603,30 @@ end)
RegisterNetEvent("esx:killPlayer")
AddEventHandler("esx:killPlayer", function()
- SetEntityHealth(ESX.PlayerData.ped, 0)
+ SetEntityHealth(ESX.PlayerData.ped, 0)
end)
RegisterNetEvent("esx:freezePlayer")
AddEventHandler("esx:freezePlayer", function(input)
- local player = PlayerId()
- if input == 'freeze' then
- SetEntityCollision(ESX.PlayerData.ped, false)
- FreezeEntityPosition(ESX.PlayerData.ped, true)
- SetPlayerInvincible(player, true)
- elseif input == 'unfreeze' then
- SetEntityCollision(ESX.PlayerData.ped, true)
+ local player = PlayerId()
+ if input == 'freeze' then
+ SetEntityCollision(ESX.PlayerData.ped, false)
+ FreezeEntityPosition(ESX.PlayerData.ped, true)
+ SetPlayerInvincible(player, true)
+ elseif input == 'unfreeze' then
+ SetEntityCollision(ESX.PlayerData.ped, true)
FreezeEntityPosition(ESX.PlayerData.ped, false)
- SetPlayerInvincible(player, false)
- end
+ SetPlayerInvincible(player, false)
+ end
end)
RegisterNetEvent("esx:GetVehicleType", function(Model, Request)
if not IsModelInCdimage(Model) then
- return TriggerServerEvent("esx:ReturnVehicleType", false, Request)
- end
+ return TriggerServerEvent("esx:ReturnVehicleType", false, Request)
+ end
if Model == `submersible` or Model == `submersible2` then
- return TriggerServerEvent("esx:ReturnVehicleType", "submarine", Request)
+ return TriggerServerEvent("esx:ReturnVehicleType", "submarine", Request)
end
local VehicleType = GetVehicleClassFromName(Model)
@@ -708,8 +654,8 @@ local DoNotUse = {
'default_spawnpoint',
}
-for i=1, #DoNotUse do
+for i = 1, #DoNotUse do
if GetResourceState(DoNotUse[i]) == 'started' or GetResourceState(DoNotUse[i]) == 'starting' then
- print("[^1ERROR^7] YOU ARE USING A RESOURCE THAT WILL BREAK ^1ESX^7, PLEASE REMOVE ^5"..DoNotUse[i].."^7")
+ print("[^1ERROR^7] YOU ARE USING A RESOURCE THAT WILL BREAK ^1ESX^7, PLEASE REMOVE ^5" .. DoNotUse[i] .. "^7")
end
end
diff --git a/[core]/es_extended/client/modules/actions.lua b/[core]/es_extended/client/modules/actions.lua
new file mode 100644
index 00000000..af27393a
--- /dev/null
+++ b/[core]/es_extended/client/modules/actions.lua
@@ -0,0 +1,114 @@
+local isInVehicle, isEnteringVehicle, isJumping, inPauseMenu = false, false, false, false
+local playerPed = PlayerPedId()
+local current = {}
+
+local function GetPedVehicleSeat(ped, vehicle)
+ for i = -1, 16 do
+ if (GetPedInVehicleSeat(vehicle, i) == ped) then return i end
+ end
+ return -1
+end
+
+local function GetData(vehicle)
+ if not DoesEntityExist(vehicle) then
+ return
+ end
+ local model = GetEntityModel(vehicle)
+ local displayName = GetDisplayNameFromVehicleModel(model)
+ local netId = VehToNet(vehicle)
+ return displayName, netId
+end
+
+CreateThread(function()
+ while true do
+
+ if playerPed ~= PlayerPedId() then
+ playerPed = PlayerPedId()
+ TriggerEvent('esx:playerPedChanged', playerPed)
+ TriggerServerEvent('esx:playerPedChanged', PedToNet(playerPed))
+ end
+
+ if IsPedJumping(playerPed) and not isJumping then
+ isJumping = true
+ TriggerEvent('esx:playerJumping')
+ TriggerServerEvent('esx:playerJumping')
+ elseif not IsPedJumping(playerPed) and isJumping then
+ isJumping = false
+ end
+
+ if IsPauseMenuActive() and not inPauseMenu then
+ inPauseMenu = true
+ TriggerEvent('esx:pauseMenuActive', inPauseMenu)
+ elseif not IsPauseMenuActive() and inPauseMenu then
+ inPauseMenu = false
+ TriggerEvent('esx:pauseMenuActive', inPauseMenu)
+ end
+
+
+ if not isInVehicle and not IsPlayerDead(PlayerId()) then
+ if DoesEntityExist(GetVehiclePedIsTryingToEnter(playerPed)) and not isEnteringVehicle then
+ -- trying to enter a vehicle!
+ local vehicle = GetVehiclePedIsTryingToEnter(playerPed)
+ local plate = GetVehicleNumberPlateText(vehicle)
+ local seat = GetSeatPedIsTryingToEnter(playerPed)
+ local displayName, netId = GetData(vehicle)
+ isEnteringVehicle = true
+ TriggerEvent('esx:enteringVehicle', vehicle, plate, seat, netId)
+ TriggerServerEvent('esx:enteringVehicle', plate, seat, netId)
+ elseif not DoesEntityExist(GetVehiclePedIsTryingToEnter(playerPed)) and
+ not IsPedInAnyVehicle(playerPed, true) and isEnteringVehicle then
+ -- vehicle entering aborted
+ TriggerEvent('esx:enteringVehicleAborted')
+ TriggerServerEvent('esx:enteringVehicleAborted')
+ isEnteringVehicle = false
+ elseif IsPedInAnyVehicle(playerPed, false) then
+ -- suddenly appeared in a vehicle, possible teleport
+ isEnteringVehicle = false
+ isInVehicle = true
+ current.vehicle = GetVehiclePedIsUsing(playerPed)
+ current.seat = GetPedVehicleSeat(playerPed, current.vehicle)
+ current.plate = GetVehicleNumberPlateText(current.vehicle)
+ current.displayName, current.netId = GetData(current.vehicle)
+ TriggerEvent('esx:enteredVehicle', current.vehicle, current.plate, current.seat, current.displayName, current.netId)
+ TriggerServerEvent('esx:enteredVehicle', current.plate, current.seat, current.displayName, current.netId)
+ end
+ elseif isInVehicle then
+ if not IsPedInAnyVehicle(playerPed, false) or IsPlayerDead(PlayerId()) then
+ -- bye, vehicle
+ TriggerEvent('esx:exitedVehicle', current.vehicle, current.plate, current.seat, current.displayName, current.netId)
+ TriggerServerEvent('esx:exitedVehicle', current.plate, current.seat, current.displayName, current.netId)
+ isInVehicle = false
+ current = {}
+ end
+ end
+ Wait(200)
+ end
+end)
+
+if Config.EnableDebug then
+
+ AddEventHandler('esx:playerPedChanged', function(netId)
+ print('esx:playerPedChanged', netId)
+ end)
+
+ AddEventHandler('esx:playerJumping', function()
+ print('esx:playerJumping')
+ end)
+
+ AddEventHandler('esx:enteringVehicle', function(vehicle, plate, seat, netId)
+ print('esx:enteringVehicle', 'vehicle', vehicle, 'plate', plate, 'seat', seat, 'netId', netId)
+ end)
+
+ AddEventHandler('esx:enteringVehicleAborted', function()
+ print('esx:enteringVehicleAborted')
+ end)
+
+ AddEventHandler('esx:enteredVehicle', function(vehicle, plate, seat, displayName, netId)
+ print('esx:enteredVehicle', 'vehicle', vehicle, 'plate', plate, 'seat', seat, 'displayName', displayName, 'netId', netId)
+ end)
+
+ AddEventHandler('esx:exitedVehicle', function(vehicle, plate, seat, displayName, netId)
+ print('esx:exitedVehicle', 'vehicle', vehicle, 'plate', plate, 'seat', seat, 'displayName', displayName, 'netId', netId)
+ end)
+
+end
\ No newline at end of file
diff --git a/[core]/es_extended/client/modules/npwd.lua b/[core]/es_extended/client/modules/npwd.lua
index fb04f356..b8de8dab 100644
--- a/[core]/es_extended/client/modules/npwd.lua
+++ b/[core]/es_extended/client/modules/npwd.lua
@@ -5,7 +5,8 @@ local function checkPhone()
return
end
- npwd:setPhoneDisabled((ESX.SearchInventory('phone').count or 0) <= 0)
+ local phoneItem = ESX.SearchInventory('phone')
+ npwd:setPhoneDisabled((phoneItem and phoneItem.count or 0) <= 0)
end
RegisterNetEvent('esx:playerLoaded', checkPhone)
diff --git a/[core]/es_extended/common/functions.lua b/[core]/es_extended/common/functions.lua
index b3074c8a..f8d65bde 100644
--- a/[core]/es_extended/common/functions.lua
+++ b/[core]/es_extended/common/functions.lua
@@ -39,8 +39,8 @@ function ESX.GetWeaponFromHash(weaponHash)
return weaponsByHash[weaponHash]
end
-function ESX.GetWeaponList()
- return Config.Weapons
+function ESX.GetWeaponList(byHash)
+ return byHash and weaponsByHash or Config.Weapons
end
function ESX.GetWeaponLabel(weaponName)
diff --git a/[core]/es_extended/config.lua b/[core]/es_extended/config.lua
index 46daa5dd..ea043be2 100644
--- a/[core]/es_extended/config.lua
+++ b/[core]/es_extended/config.lua
@@ -18,8 +18,9 @@ Config.Accounts = {
Config.StartingAccountMoney = {bank = 50000}
+Config.DefaultSpawn = {x = -269.4, y = -955.3, z = 31.2, heading = 205.8}
+
Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society
-Config.EnableHud = false -- enable the default hud? Display current job and accounts (black, bank & cash)
Config.MaxWeight = 24 -- the max inventory weight without backpack
Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds
Config.EnableDebug = false -- Use Debug options?
diff --git a/[core]/es_extended/es_extended.sql b/[core]/es_extended/es_extended.sql
index ab224110..bb156c90 100644
--- a/[core]/es_extended/es_extended.sql
+++ b/[core]/es_extended/es_extended.sql
@@ -15,7 +15,7 @@ CREATE TABLE `users` (
`job` VARCHAR(20) NULL DEFAULT 'unemployed',
`job_grade` INT NULL DEFAULT 0,
`loadout` LONGTEXT NULL DEFAULT NULL,
- `position` VARCHAR(255) NULL DEFAULT '{"x":-269.4,"y":-955.3,"z":31.2,"heading":205.8}',
+ `position` longtext NULL DEFAULT NULL,
PRIMARY KEY (`identifier`)
) ENGINE=InnoDB;
diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua
index e21addea..b5230338 100644
--- a/[core]/es_extended/fxmanifest.lua
+++ b/[core]/es_extended/fxmanifest.lua
@@ -5,7 +5,7 @@ game 'gta5'
description 'ES Extended'
lua54 'yes'
-version '1.9.0'
+version '1.9.1'
shared_scripts {
'locale.lua',
@@ -62,10 +62,6 @@ files {
'html/fonts/pdown.ttf',
'html/fonts/bankgothic.ttf',
-
- 'html/img/accounts/bank.png',
- 'html/img/accounts/black_money.png',
- 'html/img/accounts/money.png'
}
dependencies {
diff --git a/[core]/es_extended/html/css/app.css b/[core]/es_extended/html/css/app.css
index 7c4c63f1..0bdbc908 100644
--- a/[core]/es_extended/html/css/app.css
+++ b/[core]/es_extended/html/css/app.css
@@ -1,88 +1,75 @@
@font-face {
- font-family: 'Pricedown';
- src: url('../fonts/pdown.ttf')
+ font-family: 'Pricedown';
+ src: url('../fonts/pdown.ttf');
}
@font-face {
- font-family: 'bankgothic';
- src: url('../fonts/bankgothic.ttf')
+ font-family: 'bankgothic';
+ src: url('../fonts/bankgothic.ttf');
}
html {
- overflow: hidden;
-}
-
-#hud {
- opacity: 0.0;
- position: absolute;
- font-family: 'Pricedown';
- font-size: 35px;
- color: white;
- padding: 4px;
- text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
- text-align: right;
- top: 80;
- right: 40;
+ overflow: hidden;
}
#inventory_notifications {
- font-family: bankgothic;
- position: absolute;
- right: 40;
- bottom: 40;
- font-size: 2em;
- font-weight: bold;
- color: #FFF;
- text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
+ font-family: bankgothic;
+ position: absolute;
+ right: 40;
+ bottom: 40;
+ font-size: 2em;
+ font-weight: bold;
+ color: #fff;
+ text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
}
.menu {
- font-family: 'Open Sans', sans-serif;
- min-width: 400px;
- min-height: 250px;
- color: #fff;
- position: absolute;
- left: 40;
- top: 0;
+ font-family: 'Open Sans', sans-serif;
+ min-width: 400px;
+ min-height: 250px;
+ color: #fff;
+ position: absolute;
+ left: 40;
+ top: 0;
}
.menu .head {
- font-family: 'Open Sans', sans-serif;
- font-size: 28px;
- padding: 10px;
- background: #1A1A1A;
- border-bottom: 3px solid #BC1635;
- border-radius: 10px 10px 0 0;
- -webkit-border-radius: 10px 10px 0 0;
- -moz-border-radius: 10px 10px 0 0;
- -o-border-radius: 10px 10px 0 0;
- box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
- -webkit-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
- -moz-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
- -o-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
- box-shadow: 1px 1px 10px 4px rgba(0, 0, 0, 0.4);
+ font-family: 'Open Sans', sans-serif;
+ font-size: 28px;
+ padding: 10px;
+ background: #1a1a1a;
+ border-bottom: 3px solid #bc1635;
+ border-radius: 10px 10px 0 0;
+ -webkit-border-radius: 10px 10px 0 0;
+ -moz-border-radius: 10px 10px 0 0;
+ -o-border-radius: 10px 10px 0 0;
+ box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -webkit-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -moz-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ -o-box-shadow: inset 0px 1px 0 rgba(255, 255, 255, 0.28);
+ box-shadow: 1px 1px 10px 4px rgba(0, 0, 0, 0.4);
}
.menu .head span {
- font-family: 'Pricedown';
- font-size: 28px;
- padding-left: 15px;
- padding-top: 6px;
+ font-family: 'Pricedown';
+ font-size: 28px;
+ padding-left: 15px;
+ padding-top: 6px;
}
.menu .menu-items .menu-item {
- font-family: 'Open Sans', sans-serif;
- font-size: 14px;
- height: 40px;
- display: block;
- background-color: #f1f1f1;
- box-shadow: inset 1px 0px 0px 1px #b8b8b8;
- height: 32px;
- line-height: 32px;
- color: #3A3A3A;
- text-align: center;
+ font-family: 'Open Sans', sans-serif;
+ font-size: 14px;
+ height: 40px;
+ display: block;
+ background-color: #f1f1f1;
+ box-shadow: inset 1px 0px 0px 1px #b8b8b8;
+ height: 32px;
+ line-height: 32px;
+ color: #3a3a3a;
+ text-align: center;
}
.menu .menu-items .menu-item.selected {
- background-color: #ccc;
+ background-color: #ccc;
}
diff --git a/[core]/es_extended/html/img/accounts/bank.png b/[core]/es_extended/html/img/accounts/bank.png
deleted file mode 100644
index eb36dc8e..00000000
Binary files a/[core]/es_extended/html/img/accounts/bank.png and /dev/null differ
diff --git a/[core]/es_extended/html/img/accounts/black_money.png b/[core]/es_extended/html/img/accounts/black_money.png
deleted file mode 100644
index a42f6aa5..00000000
Binary files a/[core]/es_extended/html/img/accounts/black_money.png and /dev/null differ
diff --git a/[core]/es_extended/html/img/accounts/money.png b/[core]/es_extended/html/img/accounts/money.png
deleted file mode 100644
index e05c91b0..00000000
Binary files a/[core]/es_extended/html/img/accounts/money.png and /dev/null differ
diff --git a/[core]/es_extended/html/js/app.js b/[core]/es_extended/html/js/app.js
index dce07feb..26fb67e4 100644
--- a/[core]/es_extended/html/js/app.js
+++ b/[core]/es_extended/html/js/app.js
@@ -1,59 +1,5 @@
(() => {
-
ESX = {};
- ESX.HUDElements = [];
-
- ESX.setHUDDisplay = function (opacity) {
- $('#hud').css('opacity', opacity);
- };
-
- ESX.insertHUDElement = function (name, index, priority, html, data) {
- ESX.HUDElements.push({
- name: name,
- index: index,
- priority: priority,
- html: html,
- data: data
- });
-
- ESX.HUDElements.sort((a, b) => {
- return a.index - b.index || b.priority - a.priority;
- });
- };
-
- ESX.updateHUDElement = function (name, data) {
- for (let i = 0; i < ESX.HUDElements.length; i++) {
- if (ESX.HUDElements[i].name == name) {
- ESX.HUDElements[i].data = data;
- }
- }
-
- ESX.refreshHUD();
- };
-
- ESX.deleteHUDElement = function (name) {
- for (let i = 0; i < ESX.HUDElements.length; i++) {
- if (ESX.HUDElements[i].name == name) {
- ESX.HUDElements.splice(i, 1);
- }
- }
-
- ESX.refreshHUD();
- };
-
- ESX.resetHUDElements = function () {
- ESX.HUDElements = [];
- ESX.refreshHUD();
- };
-
- ESX.refreshHUD = function () {
- $('#hud').html('');
-
- for (let i = 0; i < ESX.HUDElements.length; i++) {
- let html = Mustache.render(ESX.HUDElements[i].html, ESX.HUDElements[i].data);
- $('#hud').append(html);
- }
- };
ESX.inventoryNotification = function (add, label, count) {
let notif = '';
@@ -79,35 +25,8 @@
};
window.onData = (data) => {
- switch (data.action) {
- case 'setHUDDisplay': {
- ESX.setHUDDisplay(data.opacity);
- break;
- }
-
- case 'insertHUDElement': {
- ESX.insertHUDElement(data.name, data.index, data.priority, data.html, data.data);
- break;
- }
-
- case 'updateHUDElement': {
- ESX.updateHUDElement(data.name, data.data);
- break;
- }
-
- case 'deleteHUDElement': {
- ESX.deleteHUDElement(data.name);
- break;
- }
-
- case 'resetHUDElements': {
- ESX.resetHUDElements();
- break;
- }
-
- case 'inventoryNotification': {
- ESX.inventoryNotification(data.add, data.item, data.count);
- }
+ if (data.action === 'inventoryNotification') {
+ ESX.inventoryNotification(data.add, data.item, data.count);
}
};
@@ -116,5 +35,4 @@
onData(event.data);
});
};
-
})();
diff --git a/[core]/es_extended/html/ui.html b/[core]/es_extended/html/ui.html
index 653f41d8..86ad62be 100644
--- a/[core]/es_extended/html/ui.html
+++ b/[core]/es_extended/html/ui.html
@@ -1,14 +1,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+