254 lines
8.2 KiB
Lua
254 lines
8.2 KiB
Lua
Adjustments = {}
|
|
|
|
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)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Adjustments:DisableAimAssist()
|
|
if Config.DisableAimAssist then
|
|
SetPlayerTargetingMode(3)
|
|
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
|
|
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)
|
|
end
|
|
end
|
|
|
|
function Adjustments:HealthRegeneration()
|
|
if Config.DisableHealthRegeneration then
|
|
SetPlayerHealthRechargeMultiplier(ESX.playerId, 0.0)
|
|
end
|
|
end
|
|
|
|
function Adjustments:AmmoAndVehicleRewards()
|
|
CreateThread(function()
|
|
while true do
|
|
if Config.DisableDisplayAmmo then
|
|
DisplayAmmoThisFrame(false)
|
|
end
|
|
|
|
if Config.DisableVehicleRewards then
|
|
DisablePlayerVehicleRewards(ESX.playerId)
|
|
end
|
|
|
|
Wait(0)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function Adjustments:EnablePvP()
|
|
if Config.EnablePVP then
|
|
SetCanAttackFriendly(ESX.PlayerData.ped, true, false)
|
|
NetworkSetFriendlyFireOption(true)
|
|
end
|
|
end
|
|
|
|
function Adjustments:DispatchServices()
|
|
if Config.DisableDispatchServices then
|
|
for i = 1, 15 do
|
|
EnableDispatchService(i, false)
|
|
end
|
|
SetAudioFlag('PoliceScannerDisabled', true)
|
|
end
|
|
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_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
|
|
end
|
|
end
|
|
|
|
function Adjustments:LicensePlates()
|
|
SetDefaultVehicleNumberPlateTextPattern(-1, Config.CustomAIPlates)
|
|
end
|
|
|
|
local placeHolders = {
|
|
server_name = function()
|
|
return GetConvar("sv_projectName", "ESX-Framework")
|
|
end,
|
|
server_endpoint = function()
|
|
return GetCurrentServerEndpoint() or "localhost:30120"
|
|
end,
|
|
server_players = function()
|
|
return GlobalState.playerCount or 0
|
|
end,
|
|
server_maxplayers = function()
|
|
return GetConvarInt("sv_maxClients", 48)
|
|
end,
|
|
player_name = function()
|
|
return GetPlayerName(ESX.playerId)
|
|
end,
|
|
player_rp_name = function()
|
|
return ESX.PlayerData.name or "John Doe"
|
|
end,
|
|
player_id = function()
|
|
return ESX.serverId
|
|
end,
|
|
player_street = function()
|
|
if not ESX.PlayerData.ped then return "Unknown" end
|
|
|
|
local playerCoords = GetEntityCoords(ESX.PlayerData.ped)
|
|
local streetHash = GetStreetNameAtCoord(playerCoords.x, playerCoords.y, playerCoords.z)
|
|
|
|
return GetStreetNameFromHashKey(streetHash) or "Unknown"
|
|
end,
|
|
}
|
|
|
|
function Adjustments:ReplacePlaceholders(text)
|
|
for placeholder, cb in pairs(placeHolders) do
|
|
local success, result = pcall(cb)
|
|
|
|
if not success then
|
|
error(("Failed to execute placeholder: ^5%s^7\n%s"):format(placeholder, result))
|
|
result = "Unknown"
|
|
end
|
|
|
|
text = text:gsub(("{%s}"):format(placeholder), tostring(result))
|
|
end
|
|
return text
|
|
end
|
|
|
|
function Adjustments:DiscordPresence()
|
|
if Config.DiscordActivity.appId ~= 0 then
|
|
CreateThread(function()
|
|
while true do
|
|
SetDiscordAppId(Config.DiscordActivity.appId)
|
|
SetRichPresence(self:ReplacePlaceholders(Config.DiscordActivity.presence))
|
|
SetDiscordRichPresenceAsset(Config.DiscordActivity.assetName)
|
|
SetDiscordRichPresenceAssetText(self:ReplacePlaceholders(Config.DiscordActivity.assetText))
|
|
|
|
for i = 1, #Config.DiscordActivity.buttons do
|
|
local button = Config.DiscordActivity.buttons[i]
|
|
local buttonUrl = self:ReplacePlaceholders(button.url)
|
|
SetDiscordRichPresenceAction(i - 1, button.label, buttonUrl)
|
|
end
|
|
|
|
Wait(Config.DiscordActivity.refresh)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function Adjustments:WantedLevel()
|
|
if not Config.EnableWantedLevel then
|
|
ClearPlayerWantedLevel(ESX.playerId)
|
|
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)
|
|
end
|
|
end
|
|
|
|
function Adjustments:Multipliers()
|
|
CreateThread(function()
|
|
while true do
|
|
SetPedDensityMultiplierThisFrame(Config.Multipliers.pedDensity)
|
|
SetScenarioPedDensityMultiplierThisFrame(Config.Multipliers.scenarioPedDensityInterior, Config.Multipliers.scenarioPedDensityExterior)
|
|
SetAmbientVehicleRangeMultiplierThisFrame(Config.Multipliers.ambientVehicleRange)
|
|
SetParkedVehicleDensityMultiplierThisFrame(Config.Multipliers.parkedVehicleDensity)
|
|
SetRandomVehicleDensityMultiplierThisFrame(Config.Multipliers.randomVehicleDensity)
|
|
SetVehicleDensityMultiplierThisFrame(Config.Multipliers.vehicleDensity)
|
|
Wait(0)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function Adjustments:Load()
|
|
self:RemoveHudComponents()
|
|
self:DisableAimAssist()
|
|
self:DisableNPCDrops()
|
|
self:SeatShuffle()
|
|
self:HealthRegeneration()
|
|
self:AmmoAndVehicleRewards()
|
|
self:EnablePvP()
|
|
self:DispatchServices()
|
|
self:NPCScenarios()
|
|
self:LicensePlates()
|
|
self:DiscordPresence()
|
|
self:WantedLevel()
|
|
self:DisableRadio()
|
|
self:Multipliers()
|
|
end
|