From 710cddfbc909e4349418613be142e767e2a3d39e Mon Sep 17 00:00:00 2001 From: Amir_Lynx <60301485+AmirLynx@users.noreply.github.com> Date: Mon, 31 Oct 2022 20:27:09 +0330 Subject: [PATCH 1/4] fix lscustom free mod with quit game --- [esx_addons]/esx_lscustom/client/main.lua | 17 ++++++++-- [esx_addons]/esx_lscustom/server/main.lua | 38 ++++++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/[esx_addons]/esx_lscustom/client/main.lua b/[esx_addons]/esx_lscustom/client/main.lua index b598f9b8..c5c79fd6 100644 --- a/[esx_addons]/esx_lscustom/client/main.lua +++ b/[esx_addons]/esx_lscustom/client/main.lua @@ -17,6 +17,15 @@ AddEventHandler('esx_lscustom:installMod', function() TriggerServerEvent('esx_lscustom:refreshOwnedVehicle', myCar) end) +RegisterNetEvent('esx_lscustom:restoreMods', function(netId, props) + local xVehicle = NetworkGetEntityFromNetworkId(netId) + if props ~= nil then + if DoesEntityExist(xVehicle) then + ESX.Game.SetVehicleProperties(xVehicle, props) + end + end +end) + RegisterNetEvent('esx_lscustom:cancelInstallMod') AddEventHandler('esx_lscustom:cancelInstallMod', function() local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) @@ -51,7 +60,6 @@ AddEventHandler('onResourceStop', function(resource) end end) - function OpenLSMenu(elems, menuName, menuTitle, parent) ESX.UI.Menu.Open('default', GetCurrentResourceName(), menuName, { title = menuTitle, @@ -82,7 +90,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) break end end - + if isRimMod then price = math.floor(vehiclePrice * data.current.price / 100) TriggerServerEvent('esx_lscustom:buyMod', price) @@ -120,6 +128,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) lsMenuIsShowed = false local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) FreezeEntityPosition(vehicle, false) + TriggerServerEvent('esx_lscustom:stopModing', myCar.plate) myCar = {} end end, function(data, menu) -- on change @@ -170,7 +179,6 @@ function GetAction(data) local playerPed = PlayerPedId() local vehicle = GetVehiclePedIsIn(playerPed, false) local currentMods = ESX.Game.GetVehicleProperties(vehicle) - if data.value == 'modSpeakers' or data.value == 'modTrunk' or data.value == 'modHydrolic' or data.value == 'modEngineBlock' or data.value == 'modAirFilter' or data.value == 'modStruts' or data.value == 'modTank' then SetVehicleDoorOpen(vehicle, 4, false) @@ -503,6 +511,9 @@ CreateThread(function() local vehicle = GetVehiclePedIsIn(playerPed, false) FreezeEntityPosition(vehicle, true) myCar = ESX.Game.GetVehicleProperties(vehicle) + + local netId = NetworkGetNetworkIdFromEntity(vehicle) + TriggerServerEvent('esx_lscustom:startModing', myCar, netId) ESX.UI.Menu.CloseAll() GetAction({ diff --git a/[esx_addons]/esx_lscustom/server/main.lua b/[esx_addons]/esx_lscustom/server/main.lua index 5d95fe1f..678078c6 100644 --- a/[esx_addons]/esx_lscustom/server/main.lua +++ b/[esx_addons]/esx_lscustom/server/main.lua @@ -1,4 +1,40 @@ local Vehicles +local Customs = {} + +RegisterNetEvent('esx_lscustom:startModing', function(props, netId) + local src = tostring(source) + if Customs[src] then + Customs[src][props.plate] = {props = props, netId = netId} + else + Customs[src] = {} + Customs[src][props.plate] = {props = props, netId = netId} + end +end) + +RegisterNetEvent('esx_lscustom:stopModing', function(plate) + local src = tostring(source) + if Customs[src] then + Customs[src][tostring(plate)] = nil + end +end) + +AddEventHandler('esx:playerDropped', function(src) + src = tostring(src) + local playersCount = #ESX.GetPlayers() + if Customs[src] then + for k,v in pairs(Customs[src]) do + local entity = NetworkGetEntityFromNetworkId(v.netId) + if DoesEntityExist(entity) then + if players > 0 then + TriggerClientEvent('esx_lscustom:restoreMods', -1, v.netId, v.props) + else + DeleteEntity(entity) + end + end + end + Customs[src] = nil + end +end) RegisterServerEvent('esx_lscustom:buyMod') AddEventHandler('esx_lscustom:buyMod', function(price) @@ -41,9 +77,9 @@ AddEventHandler('esx_lscustom:refreshOwnedVehicle', function(vehicleProps) function(result) if result then local vehicle = json.decode(result.vehicle) - if vehicleProps.model == vehicle.model then MySQL.update('UPDATE owned_vehicles SET vehicle = ? WHERE plate = ?', {json.encode(vehicleProps), vehicleProps.plate}) + Customs[tostring(source)][tostring(vehicleProps.plate)].props = props else print(('[^3WARNING^7] Player ^5%s^7 Attempted To upgrade with mismatching vehicle model'):format(xPlayer.source)) end From b4fc567b04c93957cb308f7a27f7085a28111ba4 Mon Sep 17 00:00:00 2001 From: Amir_Lynx <60301485+AmirLynx@users.noreply.github.com> Date: Tue, 1 Nov 2022 00:24:42 +0330 Subject: [PATCH 2/4] fix lscustom free mod with quit game --- [esx_addons]/esx_lscustom/client/main.lua | 17 ++++++++-- [esx_addons]/esx_lscustom/server/main.lua | 38 ++++++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/[esx_addons]/esx_lscustom/client/main.lua b/[esx_addons]/esx_lscustom/client/main.lua index b598f9b8..c5c79fd6 100644 --- a/[esx_addons]/esx_lscustom/client/main.lua +++ b/[esx_addons]/esx_lscustom/client/main.lua @@ -17,6 +17,15 @@ AddEventHandler('esx_lscustom:installMod', function() TriggerServerEvent('esx_lscustom:refreshOwnedVehicle', myCar) end) +RegisterNetEvent('esx_lscustom:restoreMods', function(netId, props) + local xVehicle = NetworkGetEntityFromNetworkId(netId) + if props ~= nil then + if DoesEntityExist(xVehicle) then + ESX.Game.SetVehicleProperties(xVehicle, props) + end + end +end) + RegisterNetEvent('esx_lscustom:cancelInstallMod') AddEventHandler('esx_lscustom:cancelInstallMod', function() local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) @@ -51,7 +60,6 @@ AddEventHandler('onResourceStop', function(resource) end end) - function OpenLSMenu(elems, menuName, menuTitle, parent) ESX.UI.Menu.Open('default', GetCurrentResourceName(), menuName, { title = menuTitle, @@ -82,7 +90,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) break end end - + if isRimMod then price = math.floor(vehiclePrice * data.current.price / 100) TriggerServerEvent('esx_lscustom:buyMod', price) @@ -120,6 +128,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) lsMenuIsShowed = false local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) FreezeEntityPosition(vehicle, false) + TriggerServerEvent('esx_lscustom:stopModing', myCar.plate) myCar = {} end end, function(data, menu) -- on change @@ -170,7 +179,6 @@ function GetAction(data) local playerPed = PlayerPedId() local vehicle = GetVehiclePedIsIn(playerPed, false) local currentMods = ESX.Game.GetVehicleProperties(vehicle) - if data.value == 'modSpeakers' or data.value == 'modTrunk' or data.value == 'modHydrolic' or data.value == 'modEngineBlock' or data.value == 'modAirFilter' or data.value == 'modStruts' or data.value == 'modTank' then SetVehicleDoorOpen(vehicle, 4, false) @@ -503,6 +511,9 @@ CreateThread(function() local vehicle = GetVehiclePedIsIn(playerPed, false) FreezeEntityPosition(vehicle, true) myCar = ESX.Game.GetVehicleProperties(vehicle) + + local netId = NetworkGetNetworkIdFromEntity(vehicle) + TriggerServerEvent('esx_lscustom:startModing', myCar, netId) ESX.UI.Menu.CloseAll() GetAction({ diff --git a/[esx_addons]/esx_lscustom/server/main.lua b/[esx_addons]/esx_lscustom/server/main.lua index 5d95fe1f..678078c6 100644 --- a/[esx_addons]/esx_lscustom/server/main.lua +++ b/[esx_addons]/esx_lscustom/server/main.lua @@ -1,4 +1,40 @@ local Vehicles +local Customs = {} + +RegisterNetEvent('esx_lscustom:startModing', function(props, netId) + local src = tostring(source) + if Customs[src] then + Customs[src][props.plate] = {props = props, netId = netId} + else + Customs[src] = {} + Customs[src][props.plate] = {props = props, netId = netId} + end +end) + +RegisterNetEvent('esx_lscustom:stopModing', function(plate) + local src = tostring(source) + if Customs[src] then + Customs[src][tostring(plate)] = nil + end +end) + +AddEventHandler('esx:playerDropped', function(src) + src = tostring(src) + local playersCount = #ESX.GetPlayers() + if Customs[src] then + for k,v in pairs(Customs[src]) do + local entity = NetworkGetEntityFromNetworkId(v.netId) + if DoesEntityExist(entity) then + if players > 0 then + TriggerClientEvent('esx_lscustom:restoreMods', -1, v.netId, v.props) + else + DeleteEntity(entity) + end + end + end + Customs[src] = nil + end +end) RegisterServerEvent('esx_lscustom:buyMod') AddEventHandler('esx_lscustom:buyMod', function(price) @@ -41,9 +77,9 @@ AddEventHandler('esx_lscustom:refreshOwnedVehicle', function(vehicleProps) function(result) if result then local vehicle = json.decode(result.vehicle) - if vehicleProps.model == vehicle.model then MySQL.update('UPDATE owned_vehicles SET vehicle = ? WHERE plate = ?', {json.encode(vehicleProps), vehicleProps.plate}) + Customs[tostring(source)][tostring(vehicleProps.plate)].props = props else print(('[^3WARNING^7] Player ^5%s^7 Attempted To upgrade with mismatching vehicle model'):format(xPlayer.source)) end From f8f59a4e62b8bb9a05d0364e93a9afb1d7560c76 Mon Sep 17 00:00:00 2001 From: Amir_Lynx <60301485+AmirLynx@users.noreply.github.com> Date: Tue, 1 Nov 2022 00:25:17 +0330 Subject: [PATCH 3/4] change ESX.GetPlayers to ESX.GetExtendedPlayers --- [esx_addons]/esx_lscustom/server/main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[esx_addons]/esx_lscustom/server/main.lua b/[esx_addons]/esx_lscustom/server/main.lua index 678078c6..a2f41376 100644 --- a/[esx_addons]/esx_lscustom/server/main.lua +++ b/[esx_addons]/esx_lscustom/server/main.lua @@ -20,7 +20,7 @@ end) AddEventHandler('esx:playerDropped', function(src) src = tostring(src) - local playersCount = #ESX.GetPlayers() + local playersCount = #ESX.GetExtendedPlayers() if Customs[src] then for k,v in pairs(Customs[src]) do local entity = NetworkGetEntityFromNetworkId(v.netId) From e39b2c10b2d6f77c19cb2f0f265ebf449e0a9894 Mon Sep 17 00:00:00 2001 From: Amir_Lynx <60301485+AmirLynx@users.noreply.github.com> Date: Tue, 1 Nov 2022 00:28:47 +0330 Subject: [PATCH 4/4] fix lscustom free mod with quit game --- [esx_addons]/esx_lscustom/client/main.lua | 17 ++++++++-- [esx_addons]/esx_lscustom/server/main.lua | 39 ++++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/[esx_addons]/esx_lscustom/client/main.lua b/[esx_addons]/esx_lscustom/client/main.lua index b598f9b8..c5c79fd6 100644 --- a/[esx_addons]/esx_lscustom/client/main.lua +++ b/[esx_addons]/esx_lscustom/client/main.lua @@ -17,6 +17,15 @@ AddEventHandler('esx_lscustom:installMod', function() TriggerServerEvent('esx_lscustom:refreshOwnedVehicle', myCar) end) +RegisterNetEvent('esx_lscustom:restoreMods', function(netId, props) + local xVehicle = NetworkGetEntityFromNetworkId(netId) + if props ~= nil then + if DoesEntityExist(xVehicle) then + ESX.Game.SetVehicleProperties(xVehicle, props) + end + end +end) + RegisterNetEvent('esx_lscustom:cancelInstallMod') AddEventHandler('esx_lscustom:cancelInstallMod', function() local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) @@ -51,7 +60,6 @@ AddEventHandler('onResourceStop', function(resource) end end) - function OpenLSMenu(elems, menuName, menuTitle, parent) ESX.UI.Menu.Open('default', GetCurrentResourceName(), menuName, { title = menuTitle, @@ -82,7 +90,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) break end end - + if isRimMod then price = math.floor(vehiclePrice * data.current.price / 100) TriggerServerEvent('esx_lscustom:buyMod', price) @@ -120,6 +128,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent) lsMenuIsShowed = false local vehicle = GetVehiclePedIsIn(PlayerPedId(), false) FreezeEntityPosition(vehicle, false) + TriggerServerEvent('esx_lscustom:stopModing', myCar.plate) myCar = {} end end, function(data, menu) -- on change @@ -170,7 +179,6 @@ function GetAction(data) local playerPed = PlayerPedId() local vehicle = GetVehiclePedIsIn(playerPed, false) local currentMods = ESX.Game.GetVehicleProperties(vehicle) - if data.value == 'modSpeakers' or data.value == 'modTrunk' or data.value == 'modHydrolic' or data.value == 'modEngineBlock' or data.value == 'modAirFilter' or data.value == 'modStruts' or data.value == 'modTank' then SetVehicleDoorOpen(vehicle, 4, false) @@ -503,6 +511,9 @@ CreateThread(function() local vehicle = GetVehiclePedIsIn(playerPed, false) FreezeEntityPosition(vehicle, true) myCar = ESX.Game.GetVehicleProperties(vehicle) + + local netId = NetworkGetNetworkIdFromEntity(vehicle) + TriggerServerEvent('esx_lscustom:startModing', myCar, netId) ESX.UI.Menu.CloseAll() GetAction({ diff --git a/[esx_addons]/esx_lscustom/server/main.lua b/[esx_addons]/esx_lscustom/server/main.lua index 5d95fe1f..ff9b5bfc 100644 --- a/[esx_addons]/esx_lscustom/server/main.lua +++ b/[esx_addons]/esx_lscustom/server/main.lua @@ -1,4 +1,40 @@ local Vehicles +local Customs = {} + +RegisterNetEvent('esx_lscustom:startModing', function(props, netId) + local src = tostring(source) + if Customs[src] then + Customs[src][props.plate] = {props = props, netId = netId} + else + Customs[src] = {} + Customs[src][props.plate] = {props = props, netId = netId} + end +end) + +RegisterNetEvent('esx_lscustom:stopModing', function(plate) + local src = tostring(source) + if Customs[src] then + Customs[src][tostring(plate)] = nil + end +end) + +AddEventHandler('esx:playerDropped', function(src) + src = tostring(src) + local playersCount = #ESX.GetExtendedPlayers() + if Customs[src] then + for k,v in pairs(Customs[src]) do + local entity = NetworkGetEntityFromNetworkId(v.netId) + if DoesEntityExist(entity) then + if players > 0 then + TriggerClientEvent('esx_lscustom:restoreMods', -1, v.netId, v.props) + else + DeleteEntity(entity) + end + end + end + Customs[src] = nil + end +end) RegisterServerEvent('esx_lscustom:buyMod') AddEventHandler('esx_lscustom:buyMod', function(price) @@ -41,9 +77,10 @@ AddEventHandler('esx_lscustom:refreshOwnedVehicle', function(vehicleProps) function(result) if result then local vehicle = json.decode(result.vehicle) - if vehicleProps.model == vehicle.model then MySQL.update('UPDATE owned_vehicles SET vehicle = ? WHERE plate = ?', {json.encode(vehicleProps), vehicleProps.plate}) + Customs[tostring(source)][tostring(vehicleProps.plate)].props = props + Customs[tostring(source)][tostring(vehicleProps.plate)].props = props else print(('[^3WARNING^7] Player ^5%s^7 Attempted To upgrade with mismatching vehicle model'):format(xPlayer.source)) end