Scripts/resources/[qb]/[qb_shops]/qb-pawnshop/server/main.lua

94 lines
4.3 KiB
Lua
Raw Normal View History

2024-12-29 20:06:22 +00:00
local QBCore = exports['qb-core']:GetCoreObject()
local function exploitBan(id, reason)
MySQL.insert('INSERT INTO bans (name, license, discord, ip, reason, expire, bannedby) VALUES (?, ?, ?, ?, ?, ?, ?)',
{
GetPlayerName(id),
QBCore.Functions.GetIdentifier(id, 'license'),
QBCore.Functions.GetIdentifier(id, 'discord'),
'0.0.0.0',
reason,
2147483647,
'qb-pawnshop'
})
TriggerEvent('qb-log:server:CreateLog', 'pawnshop', 'Player Banned', 'red',
string.format('%s was banned by %s for %s', GetPlayerName(id), 'qb-pawnshop', reason), true)
DropPlayer(id, 'You were permanently banned by the server for: Exploiting')
end
RegisterNetEvent('qb-pawnshop:server:sellPawnItems', function(itemName, itemAmount, itemPrice)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local totalPrice = (tonumber(itemAmount) * itemPrice)
local playerCoords = GetEntityCoords(GetPlayerPed(src))
local dist
for _, value in pairs(Config.PawnLocation) do
dist = #(playerCoords - value.coords)
if #(playerCoords - value.coords) < 2 then
dist = #(playerCoords - value.coords)
break
end
end
if dist > 10 then exploitBan(src, 'sellPawnItems Exploiting') return end
if Player.Functions.RemoveItem(itemName, tonumber(itemAmount)) then
if Config.BankMoney then
Player.Functions.AddMoney('bank', totalPrice)
else
Player.Functions.AddMoney('cash', totalPrice)
end
TriggerClientEvent('QBCore:Notify', src, Lang:t('success.sold', { value = tonumber(itemAmount), value2 = QBCore.Shared.Items[itemName].label, value3 = totalPrice }),'success')
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[itemName], 'remove')
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_items'), 'error')
end
TriggerClientEvent('qb-pawnshop:client:openMenu', src)
end)
RegisterNetEvent('qb-pawnshop:server:meltItemRemove', function(itemName, itemAmount, item)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if Player.Functions.RemoveItem(itemName, itemAmount) then
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[itemName], 'remove')
local meltTime = (tonumber(itemAmount) * item.time)
TriggerClientEvent('qb-pawnshop:client:startMelting', src, item, tonumber(itemAmount), (meltTime * 60000 / 1000))
TriggerClientEvent('QBCore:Notify', src, Lang:t('info.melt_wait', { value = meltTime }), 'primary')
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_items'), 'error')
end
end)
RegisterNetEvent('qb-pawnshop:server:pickupMelted', function(item)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local playerCoords = GetEntityCoords(GetPlayerPed(src))
local dist
for _, value in pairs(Config.PawnLocation) do
dist = #(playerCoords - value.coords)
if #(playerCoords - value.coords) < 2 then
dist = #(playerCoords - value.coords)
break
end
end
if dist > 5 then exploitBan(src, 'pickupMelted Exploiting') return end
for _, v in pairs(item.items) do
local meltedAmount = v.amount
for _, m in pairs(v.item.reward) do
local rewardAmount = m.amount
if Player.Functions.AddItem(m.item, (meltedAmount * rewardAmount)) then
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[m.item], 'add')
TriggerClientEvent('QBCore:Notify', src, Lang:t('success.items_received',{ value = (meltedAmount * rewardAmount), value2 = QBCore.Shared.Items[m.item].label }), 'success')
else
TriggerClientEvent('QBCore:Notify', src, Lang:t('error.inventory_full', { value = QBCore.Shared.Items[m.item].label}), 'warning', 7500)
end
end
end
TriggerClientEvent('qb-pawnshop:client:resetPickup', src)
TriggerClientEvent('qb-pawnshop:client:openMenu', src)
end)
QBCore.Functions.CreateCallback('qb-pawnshop:server:getInv', function(source, cb)
local Player = QBCore.Functions.GetPlayer(source)
local inventory = Player.PlayerData.items
return cb(inventory)
end)