Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(es_extended): Dynamic Settings to replace Configs #1611

Open
wants to merge 12 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions [core]/es_extended/client/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ ESX.Game = {}
ESX.Game.Utils = {}

CreateThread(function()
Settings:Fetch()
while not Config.Multichar do
Wait(100)

Expand Down
298 changes: 159 additions & 139 deletions [core]/es_extended/client/modules/adjustments.lua
Original file line number Diff line number Diff line change
@@ -1,142 +1,149 @@
Adjustments = {}
Adjustments.ChangedComponents = {}

function Adjustments:RemoveHudComponents()
for i = 1, #Config.RemoveHudComponents do
if Config.RemoveHudComponents[i] then
SetHudComponentSize(i, 0.0, 0.0)
SetHudComponentPosition(i, 900.0, 900.0)
function Adjustments:RemoveHudComponent(i)
if ESX.GetSetting(("HUD:%s"):format(i)) then
self.ChangedComponents[i] = {
size = GetHudComponentSize(i),
position = GetHudComponentPosition(i)
}
SetHudComponentSize(i, 0.0, 0.0)
SetHudComponentPosition(i, 900.0, 900.0)
else
if self.ChangedComponents[i] then
SetHudComponentSize(i, self.ChangedComponents[i].size.x, self.ChangedComponents[i].size.y)
SetHudComponentPosition(i, self.ChangedComponents[i].position.x, self.ChangedComponents[i].position.y)
self.ChangedComponents[i] = nil
end
end
end

function Adjustments:DisableAimAssist()
if Config.DisableAimAssist then
SetPlayerTargetingMode(3)
function Adjustments:RemoveHudComponents()
for i = 1, 22 do
self:RemoveHudComponent(i)
end
end

function Adjustments:DisableNPCDrops()
if Config.DisableNPCDrops then
local weaponPickups = { `PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN` }
for i = 1, #weaponPickups do
ToggleUsePickupsForPlayer(ESX.playerId, weaponPickups[i], false)
end
function Adjustments:AimAssist()
if ESX.GetSetting("AimAssist") then
SetPlayerTargetingMode(0)
else
SetPlayerTargetingMode(3)
end
end

function Adjustments:SeatShuffle()
if Config.DisableVehicleSeatShuff then
AddEventHandler("esx:enteredVehicle", function(vehicle, _, seat)
if seat > -1 then
SetPedIntoVehicle(ESX.PlayerData.ped, vehicle, seat)
SetPedConfigFlag(ESX.PlayerData.ped, 184, true)
end
end)
function Adjustments:NPCDrops()
local weaponPickups = { `PICKUP_WEAPON_CARBINERIFLE`, `PICKUP_WEAPON_PISTOL`, `PICKUP_WEAPON_PUMPSHOTGUN` }
local enabled = ESX.GetSetting("NPCDrops") ~= nil and ESX.GetSetting("NPCDrops") or true
for i = 1, #weaponPickups do
ToggleUsePickupsForPlayer(ESX.playerId, weaponPickups[i], enabled)
end
end

function Adjustments:HealthRegeneration()
if Config.DisableHealthRegeneration then
SetPlayerHealthRechargeMultiplier(ESX.playerId, 0.0)
AddEventHandler("esx:enteredVehicle", function(vehicle, _, seat)
if seat > -1 and not ESX.GetSetting("VehicleSeatShuff") then
SetPedIntoVehicle(ESX.PlayerData.ped, vehicle, seat)
SetPedConfigFlag(ESX.PlayerData.ped, 184, true)
end
end)

function Adjustments:HealthRegeneration()
SetPlayerHealthRechargeMultiplier(ESX.playerId, ESX.GetSetting("HealthRegeneration") and 1.0 or 0.0)
end

function Adjustments:AmmoAndVehicleRewards()
CreateThread(function()
while true do
if Config.DisableDisplayAmmo then
CreateThread(function()
while true do
local sleep = 1000
if ESX.PlayerLoaded then
if not ESX.GetSetting("DisplayAmmo") then
sleep = 0
DisplayAmmoThisFrame(false)
end

if Config.DisableVehicleRewards then
if not ESX.GetSetting("VehicleRewards") then
sleep = 0
DisablePlayerVehicleRewards(ESX.playerId)
end

Wait(0)
end
end)
end

function Adjustments:EnablePvP()
if Config.EnablePVP then
SetCanAttackFriendly(ESX.PlayerData.ped, true, false)
NetworkSetFriendlyFireOption(true)
Wait(sleep)
end
end)

function Adjustments:PVP()
SetCanAttackFriendly(ESX.PlayerData.ped, ESX.GetSetting("PVP") or false, false)
NetworkSetFriendlyFireOption(ESX.GetSetting("PVP") or false)
end

function Adjustments:DispatchServices()
if Config.DisableDispatchServices then
for i = 1, 15 do
EnableDispatchService(i, false)
end
SetAudioFlag('PoliceScannerDisabled', true)
for i = 1, 15 do
EnableDispatchService(i, ESX.GetSetting("DispatchServices") or false)
end
SetAudioFlag('PoliceScannerDisabled', ESX.GetSetting("DispatchServices") or false)
end

function Adjustments:NPCScenarios()
if Config.DisableScenarios then
local scenarios = {
"WORLD_VEHICLE_ATTRACTOR",
"WORLD_VEHICLE_AMBULANCE",
"WORLD_VEHICLE_BICYCLE_BMX",
"WORLD_VEHICLE_BICYCLE_BMX_BALLAS",
"WORLD_VEHICLE_BICYCLE_BMX_FAMILY",
"WORLD_VEHICLE_BICYCLE_BMX_HARMONY",
"WORLD_VEHICLE_BICYCLE_BMX_VAGOS",
"WORLD_VEHICLE_BICYCLE_MOUNTAIN",
"WORLD_VEHICLE_BICYCLE_ROAD",
"WORLD_VEHICLE_BIKE_OFF_ROAD_RACE",
"WORLD_VEHICLE_BIKER",
"WORLD_VEHICLE_BOAT_IDLE",
"WORLD_VEHICLE_BOAT_IDLE_ALAMO",
"WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
"WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
"WORLD_VEHICLE_BROKEN_DOWN",
"WORLD_VEHICLE_BUSINESSMEN",
"WORLD_VEHICLE_HELI_LIFEGUARD",
"WORLD_VEHICLE_CLUCKIN_BELL_TRAILER",
"WORLD_VEHICLE_CONSTRUCTION_SOLO",
"WORLD_VEHICLE_CONSTRUCTION_PASSENGERS",
"WORLD_VEHICLE_DRIVE_PASSENGERS",
"WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED",
"WORLD_VEHICLE_DRIVE_SOLO",
"WORLD_VEHICLE_FIRE_TRUCK",
"WORLD_VEHICLE_EMPTY",
"WORLD_VEHICLE_MARIACHI",
"WORLD_VEHICLE_MECHANIC",
"WORLD_VEHICLE_MILITARY_PLANES_BIG",
"WORLD_VEHICLE_MILITARY_PLANES_SMALL",
"WORLD_VEHICLE_PARK_PARALLEL",
"WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN",
"WORLD_VEHICLE_PASSENGER_EXIT",
"WORLD_VEHICLE_POLICE_BIKE",
"WORLD_VEHICLE_POLICE_CAR",
"WORLD_VEHICLE_POLICE",
"WORLD_VEHICLE_POLICE_NEXT_TO_CAR",
"WORLD_VEHICLE_QUARRY",
"WORLD_VEHICLE_SALTON",
"WORLD_VEHICLE_SALTON_DIRT_BIKE",
"WORLD_VEHICLE_SECURITY_CAR",
"WORLD_VEHICLE_STREETRACE",
"WORLD_VEHICLE_TOURBUS",
"WORLD_VEHICLE_TOURIST",
"WORLD_VEHICLE_TANDL",
"WORLD_VEHICLE_TRACTOR",
"WORLD_VEHICLE_TRACTOR_BEACH",
"WORLD_VEHICLE_TRUCK_LOGS",
"WORLD_VEHICLE_TRUCKS_TRAILERS",
"WORLD_VEHICLE_DISTANT_EMPTY_GROUND",
"WORLD_HUMAN_PAPARAZZI",
}
function Adjustments:Scenarios()
local scenarios = {
"WORLD_VEHICLE_ATTRACTOR",
"WORLD_VEHICLE_AMBULANCE",
"WORLD_VEHICLE_BICYCLE_BMX",
"WORLD_VEHICLE_BICYCLE_BMX_BALLAS",
"WORLD_VEHICLE_BICYCLE_BMX_FAMILY",
"WORLD_VEHICLE_BICYCLE_BMX_HARMONY",
"WORLD_VEHICLE_BICYCLE_BMX_VAGOS",
"WORLD_VEHICLE_BICYCLE_MOUNTAIN",
"WORLD_VEHICLE_BICYCLE_ROAD",
"WORLD_VEHICLE_BIKE_OFF_ROAD_RACE",
"WORLD_VEHICLE_BIKER",
"WORLD_VEHICLE_BOAT_IDLE",
"WORLD_VEHICLE_BOAT_IDLE_ALAMO",
"WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
"WORLD_VEHICLE_BOAT_IDLE_MARQUIS",
"WORLD_VEHICLE_BROKEN_DOWN",
"WORLD_VEHICLE_BUSINESSMEN",
"WORLD_VEHICLE_HELI_LIFEGUARD",
"WORLD_VEHICLE_CLUCKIN_BELL_TRAILER",
"WORLD_VEHICLE_CONSTRUCTION_SOLO",
"WORLD_VEHICLE_CONSTRUCTION_PASSENGERS",
"WORLD_VEHICLE_DRIVE_PASSENGERS",
"WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED",
"WORLD_VEHICLE_DRIVE_SOLO",
"WORLD_VEHICLE_FIRE_TRUCK",
"WORLD_VEHICLE_EMPTY",
"WORLD_VEHICLE_MARIACHI",
"WORLD_VEHICLE_MECHANIC",
"WORLD_VEHICLE_MILITARY_PLANES_BIG",
"WORLD_VEHICLE_MILITARY_PLANES_SMALL",
"WORLD_VEHICLE_PARK_PARALLEL",
"WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN",
"WORLD_VEHICLE_PASSENGER_EXIT",
"WORLD_VEHICLE_POLICE_BIKE",
"WORLD_VEHICLE_POLICE_CAR",
"WORLD_VEHICLE_POLICE",
"WORLD_VEHICLE_POLICE_NEXT_TO_CAR",
"WORLD_VEHICLE_QUARRY",
"WORLD_VEHICLE_SALTON",
"WORLD_VEHICLE_SALTON_DIRT_BIKE",
"WORLD_VEHICLE_SECURITY_CAR",
"WORLD_VEHICLE_STREETRACE",
"WORLD_VEHICLE_TOURBUS",
"WORLD_VEHICLE_TOURIST",
"WORLD_VEHICLE_TANDL",
"WORLD_VEHICLE_TRACTOR",
"WORLD_VEHICLE_TRACTOR_BEACH",
"WORLD_VEHICLE_TRUCK_LOGS",
"WORLD_VEHICLE_TRUCKS_TRAILERS",
"WORLD_VEHICLE_DISTANT_EMPTY_GROUND",
"WORLD_HUMAN_PAPARAZZI",
}

for i=1, #scenarios do
SetScenarioTypeEnabled(scenarios[i], false)
end
for i = 1, #scenarios do
SetScenarioTypeEnabled(scenarios[i], ESX.GetSetting("Scenarios") or false)
end
end

function Adjustments:LicensePlates()
SetDefaultVehicleNumberPlateTextPattern(-1, Config.CustomAIPlates)
function Adjustments:AIPlates()
SetDefaultVehicleNumberPlateTextPattern(-1, ESX.GetSetting("AIPlates") or ".......")
end

local placeHolders = {
Expand Down Expand Up @@ -171,7 +178,7 @@ local placeHolders = {
end,
}

function Adjustments:PresencePlaceholders()
function Adjustments:PresencePlaceholders(string)
local presence = Config.DiscordActivity.presence

for placeholder, cb in pairs(placeHolders) do
Expand All @@ -189,54 +196,67 @@ function Adjustments:PresencePlaceholders()
return presence
end

function Adjustments:DiscordPresence()
if Config.DiscordActivity.appId ~= 0 then
CreateThread(function()
while true do
SetDiscordAppId(Config.DiscordActivity.appId)
SetDiscordRichPresenceAsset(Config.DiscordActivity.assetName)
SetDiscordRichPresenceAssetText(Config.DiscordActivity.assetText)

for i = 1, #Config.DiscordActivity.buttons do
local button = Config.DiscordActivity.buttons[i]
SetDiscordRichPresenceAction(i - 1, button.label, button.url)
end

SetRichPresence(self:PresencePlaceholders())
Wait(Config.DiscordActivity.refresh)
CreateThread(function()
while true do
if ESX.PlayerLoaded then
local appId = ESX.GetSetting("discord:appId") or "0"
if appId and appId ~= "0" then
SetDiscordAppId(appId)
SetDiscordRichPresenceAsset(ESX.GetSetting("discord:assetName") or "")
SetDiscordRichPresenceAssetText(Adjustments:PresencePlaceholders(ESX.GetSetting("discord:assetText") or ""))

SetDiscordRichPresenceAction(0, ESX.GetSetting("discord:buttonsLabel:1") or "", ESX.GetSetting("discord:buttonsUrl:1")or "")
SetDiscordRichPresenceAction(1, ESX.GetSetting("discord:buttonsLabel:2") or "", ESX.GetSetting("discord:buttonsUrl:2") or "")

SetRichPresence(Adjustments:PresencePlaceholders(ESX.GetSetting("presence") or ""))
end
end)
end
Wait(ESX.PlayerLoaded and ESX.GetSetting("discord:refresh") or 60000)
end
end
end)

function Adjustments:WantedLevel()
if not Config.EnableWantedLevel then
ClearPlayerWantedLevel(ESX.playerId)
local setting = ESX.GetSetting("WantedLevel")
ClearPlayerWantedLevel(ESX.playerId)
print("Wanted Level is currently", setting, type(setting))
if setting then
SetMaxWantedLevel(5)
else
SetMaxWantedLevel(0)
end
end

function Adjustments:DisableRadio()
if Config.RemoveHudComponents[16] then
AddEventHandler("esx:enteredVehicle", function(vehicle, plate, seat, displayName, netId)
SetVehRadioStation(vehicle,"OFF")
SetUserRadioControlEnabled(false)
end)
AddEventHandler("esx:enteredVehicle", function(vehicle)
if ESX.GetSetting("HUD:16") then
SetVehRadioStation(vehicle, "OFF")
SetUserRadioControlEnabled(false)
end
end
end)

function Adjustments:Load()
self:RemoveHudComponents()
self:DisableAimAssist()
self:DisableNPCDrops()
self:SeatShuffle()
self:AimAssist()
self:NPCDrops()
self:HealthRegeneration()
self:AmmoAndVehicleRewards()
self:EnablePvP()
self:PVP()
self:DispatchServices()
self:NPCScenarios()
self:LicensePlates()
self:DiscordPresence()
self:Scenarios()
self:AIPlates()
self:WantedLevel()
self:DisableRadio()
end

AddEventHandler("es_extended:settingChanged", function(resource, category, key, value)
if resource ~= "es_extended" then
return
end
if category == "Adjustments" then
if Adjustments[key] then
Adjustments[key](Adjustments)
else
Adjustments:Load()
end
elseif category == "HUD Components" then
key = key:gsub("HUD:", "")
Adjustments:RemoveHudComponent(tonumber(key))
end
end)
19 changes: 19 additions & 0 deletions [core]/es_extended/client/modules/settings.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Settings = {}
Settings.stored = {}

function Settings:Fetch()
self.stored = ESX.AwaitServerCallback("esx:getSettings")
end

function Settings:Get(resource, key)
return self.stored[resource][key]
end

function Settings:Set(resource, key, value)
self.stored[resource][key] = value
end

ESX.SecureNetEvent("es_extended:internal:SettingChanged", function(resource, category, key, value)
Settings:Set(resource, key, value)
TriggerEvent("es_extended:settingChanged", resource, category, key, value)
end)
Loading
Loading