forked from Simnation/Main
165 lines
6 KiB
Lua
165 lines
6 KiB
Lua
![]() |
if Config.Framework == "esx" then
|
||
|
ESX = exports['es_extended']:getSharedObject()
|
||
|
elseif Config.Framework == "qb" then
|
||
|
QBCore = exports['qb-core']:GetCoreObject()
|
||
|
elseif Config.Framework == "ox" then
|
||
|
Ox = require '@ox_core.lib.init'
|
||
|
else
|
||
|
ESX = exports['es_extended']:getSharedObject()
|
||
|
end
|
||
|
|
||
|
local function getPlayerObject(src) -- Get the player object
|
||
|
if Config.Framework == 'qb' then
|
||
|
return QBCore.Functions.GetPlayer(src)
|
||
|
elseif Config.Framework == 'esx' then
|
||
|
return ESX.GetPlayerFromId(src)
|
||
|
elseif Config.Framework == 'ox' then
|
||
|
return Ox.GetPlayer(src)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function DebugPrint(...)
|
||
|
if Config.DebugMode then
|
||
|
print(...)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function TakeMoney(playerObject, method, amount) -- Take money from the player
|
||
|
amount = tonumber(amount)
|
||
|
|
||
|
if Config.Framework == 'qb' then
|
||
|
return playerObject.Functions.RemoveMoney(method, amount)
|
||
|
elseif Config.Framework == 'esx' then
|
||
|
if method == 'cash' then
|
||
|
if playerObject.getMoney() >= amount then
|
||
|
playerObject.removeMoney(amount)
|
||
|
return true
|
||
|
end
|
||
|
elseif method == 'bank' then
|
||
|
if playerObject.getAccount('bank').money >= amount then
|
||
|
playerObject.removeAccountMoney('bank', amount)
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
elseif Config.Framework == 'ox' then
|
||
|
if exports.ox_inventory:GetItemCount(source, 'money') >= amount then
|
||
|
exports.ox_inventory:RemoveItem(source, 'money', amount)
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
local function giveItem(src, playerObject, item, amount) -- Give the item to the player
|
||
|
if Config.Framework == 'qb' then
|
||
|
if Config.Inventory == 'qs' then
|
||
|
exports['qs-inventory']:AddItem(src, item.name, amount)
|
||
|
elseif Config.Inventory == 'ox' then
|
||
|
exports.ox_inventory:AddItem(src, item.name, amount)
|
||
|
else
|
||
|
if Config.NewQBInventory then
|
||
|
exports['qb-inventory']:AddItem(source, item.name, amount, false, false, 'Machines')
|
||
|
else
|
||
|
playerObject.Functions.AddItem(item.name, amount)
|
||
|
end
|
||
|
end
|
||
|
elseif Config.Framework == 'esx' then
|
||
|
if Config.Inventory == 'qs' then
|
||
|
exports['qs-inventory']:AddItem(src, item.name, amount)
|
||
|
elseif Config.Inventory == 'ox' then
|
||
|
exports.ox_inventory:AddItem(src, item.name, amount)
|
||
|
else
|
||
|
playerObject.addInventoryItem(item.name, amount)
|
||
|
end
|
||
|
elseif Config.Framework == 'ox' then
|
||
|
exports.ox_inventory:AddItem(source, item.name, amount)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function handlePurchase(src, player, item, machineName, totalPrice, cantidad) -- Handle the purchase
|
||
|
local success = false
|
||
|
|
||
|
if TakeMoney(player, 'cash', totalPrice) then
|
||
|
success = true
|
||
|
elseif TakeMoney(player, 'bank', totalPrice) then
|
||
|
success = true
|
||
|
end
|
||
|
|
||
|
if success then
|
||
|
giveItem(src, player, item, cantidad)
|
||
|
else
|
||
|
TriggerClientEvent('muhaddil-machines:Notify', src, '', 'No tienes suficiente dinero.', 'error')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function findItemInSource(sourceData, itemName) -- Find the item in the source data
|
||
|
for _, item in ipairs(sourceData.items) do
|
||
|
if item.name == itemName then
|
||
|
return item
|
||
|
end
|
||
|
end
|
||
|
return nil
|
||
|
end
|
||
|
|
||
|
RegisterNetEvent('muhaddil-machines:buy',
|
||
|
function(sourceType, sourceName, itemName, cantidad) -- Event for buying the item
|
||
|
local src = source
|
||
|
local player = getPlayerObject(src)
|
||
|
|
||
|
local sourceData
|
||
|
if sourceType == 'machine' then
|
||
|
sourceData = Config.machines[sourceName]
|
||
|
elseif sourceType == 'stand' then
|
||
|
sourceData = Config.Stands[sourceName]
|
||
|
elseif sourceType == 'news' then
|
||
|
sourceData = Config.NewsSellers[sourceName]
|
||
|
else
|
||
|
TriggerClientEvent('muhaddil-machines:Notify', src, '', 'El tipo de origen no es válido.', 'error')
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local item = findItemInSource(sourceData, itemName)
|
||
|
if item then
|
||
|
local totalPrice = item.price * cantidad
|
||
|
handlePurchase(src, player, item, sourceName, totalPrice, cantidad)
|
||
|
else
|
||
|
TriggerClientEvent('muhaddil-machines:Notify', src, '', 'El artículo no está disponible', 'error')
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterServerEvent('muhaddil-machines:RemoveThirst') -- Event for the watercoolers to remove thirst
|
||
|
AddEventHandler('muhaddil-machines:RemoveThirst', function()
|
||
|
local src = source
|
||
|
|
||
|
if Config.Framework == 'qb' then
|
||
|
local player = QBCore.Functions.GetPlayer(src)
|
||
|
if player then
|
||
|
local currentThirst = player.PlayerData.metadata['thirst'] or 0
|
||
|
if currentThirst < 100 then
|
||
|
local newThirst = math.min(currentThirst + Config.ThirstRemoval, 100)
|
||
|
player.Functions.SetMetaData('thirst', newThirst)
|
||
|
|
||
|
TriggerClientEvent('hud:client:UpdateNeeds', src, player.PlayerData.metadata.hunger or 50, newThirst)
|
||
|
else
|
||
|
print("[Info] El jugador " .. src .. " ya tiene la sed máxima (100).")
|
||
|
end
|
||
|
else
|
||
|
print("[Error] No se pudo obtener el jugador para src: " .. tostring(src))
|
||
|
end
|
||
|
elseif Config.Framework == 'esx' then
|
||
|
TriggerClientEvent('esx_status:add', src, 'thirst', Config.ThirstRemoval)
|
||
|
elseif Config.Framework == 'ox' then
|
||
|
local player = Ox.GetPlayer(src)
|
||
|
local beforeStatus = player.getStatus('thirst')
|
||
|
player.removeStatus('thirst', Config.ThirstRemoval)
|
||
|
local afterStatus = player.getStatus('thirst')
|
||
|
DebugPrint("[Info] El jugador " ..
|
||
|
src .. " tenía " .. beforeStatus .. " de sed y ahora tiene " .. afterStatus .. ".")
|
||
|
local statuses = player.getStatuses()
|
||
|
DebugPrint("[Info] Los estados del jugador " .. src .. " son: " .. json.encode(statuses))
|
||
|
else
|
||
|
print("[Error] Configuración de framework no válida.")
|
||
|
end
|
||
|
end)
|