262 lines
11 KiB
Lua
262 lines
11 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
|
|
|
|
-- Functions
|
|
|
|
local function HasCitizenIdHasKey(CitizenId, Traphouse)
|
|
local retval = false
|
|
if Config.TrapHouses[Traphouse].keyholders ~= nil and next(Config.TrapHouses[Traphouse].keyholders) ~= nil then
|
|
for _, data in pairs(Config.TrapHouses[Traphouse].keyholders) do
|
|
if data.citizenid == CitizenId then
|
|
retval = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return retval
|
|
end
|
|
|
|
local function HasTraphouseAndOwner(CitizenId)
|
|
local retval = nil
|
|
for Traphouse,_ in pairs(Config.TrapHouses) do
|
|
for _, v in pairs(Config.TrapHouses[Traphouse].keyholders) do
|
|
if v.citizenid == CitizenId then
|
|
if v.owner then
|
|
retval = Traphouse
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return retval
|
|
end
|
|
|
|
local function SellTimeout(traphouseId, slot, itemName, amount, info)
|
|
Citizen.CreateThread(function()
|
|
if itemName == "markedbills" then
|
|
SetTimeout(math.random(1000, 5000), function()
|
|
if Config.TrapHouses[traphouseId].inventory[slot] ~= nil then
|
|
RemoveHouseItem(traphouseId, slot, itemName, 1)
|
|
Config.TrapHouses[traphouseId].money = Config.TrapHouses[traphouseId].money + math.ceil(info.worth / 100 * 80)
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, traphouseId, Config.TrapHouses[traphouseId])
|
|
end
|
|
end)
|
|
else
|
|
for _ = 1, amount, 1 do
|
|
local SellData = Config.AllowedItems[itemName]
|
|
SetTimeout(SellData.wait, function()
|
|
if Config.TrapHouses[traphouseId].inventory[slot] ~= nil then
|
|
RemoveHouseItem(traphouseId, slot, itemName, 1)
|
|
Config.TrapHouses[traphouseId].money = Config.TrapHouses[traphouseId].money + SellData.reward
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, traphouseId, Config.TrapHouses[traphouseId])
|
|
end
|
|
end)
|
|
if amount > 1 then
|
|
Citizen.Wait(SellData.wait)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function AddHouseItem(traphouseId, slot, itemName, amount, info, _)
|
|
amount = tonumber(amount)
|
|
traphouseId = tonumber(traphouseId)
|
|
if Config.TrapHouses[traphouseId].inventory[slot] ~= nil and Config.TrapHouses[traphouseId].inventory[slot].name == itemName then
|
|
Config.TrapHouses[traphouseId].inventory[slot].amount = Config.TrapHouses[traphouseId].inventory[slot].amount + amount
|
|
else
|
|
local itemInfo = QBCore.Shared.Items[itemName:lower()]
|
|
Config.TrapHouses[traphouseId].inventory[slot] = {
|
|
name = itemInfo["name"],
|
|
amount = amount,
|
|
info = info ~= nil and info or "",
|
|
label = itemInfo["label"],
|
|
description = itemInfo["description"] ~= nil and itemInfo["description"] or "",
|
|
weight = itemInfo["weight"],
|
|
type = itemInfo["type"],
|
|
unique = itemInfo["unique"],
|
|
useable = itemInfo["useable"],
|
|
image = itemInfo["image"],
|
|
slot = slot,
|
|
}
|
|
end
|
|
SellTimeout(traphouseId, slot, itemName, amount, info)
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, traphouseId, Config.TrapHouses[traphouseId])
|
|
end
|
|
|
|
function RemoveHouseItem(traphouseId, slot, itemName, amount)
|
|
amount = tonumber(amount)
|
|
traphouseId = tonumber(traphouseId)
|
|
if Config.TrapHouses[traphouseId].inventory[slot] ~= nil and Config.TrapHouses[traphouseId].inventory[slot].name == itemName then
|
|
if Config.TrapHouses[traphouseId].inventory[slot].amount > amount then
|
|
Config.TrapHouses[traphouseId].inventory[slot].amount = Config.TrapHouses[traphouseId].inventory[slot].amount - amount
|
|
else
|
|
Config.TrapHouses[traphouseId].inventory[slot] = nil
|
|
if next(Config.TrapHouses[traphouseId].inventory) == nil then
|
|
Config.TrapHouses[traphouseId].inventory = {}
|
|
end
|
|
end
|
|
else
|
|
Config.TrapHouses[traphouseId].inventory[slot] = nil
|
|
if Config.TrapHouses[traphouseId].inventory == nil then
|
|
Config.TrapHouses[traphouseId].inventory[slot] = nil
|
|
end
|
|
end
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, traphouseId, Config.TrapHouses[traphouseId])
|
|
end
|
|
|
|
function GetInventoryData(traphouse, slot)
|
|
traphouse = tonumber(traphouse)
|
|
if Config.TrapHouses[traphouse].inventory[slot] ~= nil then
|
|
return Config.TrapHouses[traphouse].inventory[slot]
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
function CanItemBeSaled(item)
|
|
local retval = false
|
|
if Config.AllowedItems[item] ~= nil then
|
|
retval = true
|
|
elseif item == "markedbills" then
|
|
retval = true
|
|
end
|
|
return retval
|
|
end
|
|
|
|
-- events
|
|
|
|
RegisterServerEvent('qb-traphouse:server:TakeoverHouse', function(Traphouse)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
|
|
if not HasCitizenIdHasKey(CitizenId, Traphouse) then
|
|
if Player.Functions.RemoveMoney('cash', Config.TakeoverPrice) then
|
|
TriggerClientEvent('qb-traphouse:client:TakeoverHouse', src, Traphouse)
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.not_enough"), 'error')
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
RegisterServerEvent('qb-traphouse:server:AddHouseKeyHolder', function(CitizenId, TraphouseId, IsOwner)
|
|
local src = source
|
|
|
|
if Config.TrapHouses[TraphouseId] ~= nil then
|
|
if IsOwner then
|
|
Config.TrapHouses[TraphouseId].keyholders = {}
|
|
Config.TrapHouses[TraphouseId].pincode = math.random(1111, 4444)
|
|
end
|
|
|
|
if Config.TrapHouses[TraphouseId].keyholders == nil then
|
|
Config.TrapHouses[TraphouseId].keyholders[#Config.TrapHouses[TraphouseId].keyholders+1] = {
|
|
citizenid = CitizenId,
|
|
owner = IsOwner,
|
|
}
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, TraphouseId, Config.TrapHouses[TraphouseId])
|
|
else
|
|
if #Config.TrapHouses[TraphouseId].keyholders + 1 <= 6 then
|
|
if not HasCitizenIdHasKey(CitizenId, TraphouseId) then
|
|
Config.TrapHouses[TraphouseId].keyholders[#Config.TrapHouses[TraphouseId].keyholders+1] = {
|
|
citizenid = CitizenId,
|
|
owner = IsOwner,
|
|
}
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, TraphouseId, Config.TrapHouses[TraphouseId])
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.no_slots"))
|
|
end
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.occured"))
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent('qb-traphouse:server:TakeMoney', function(TraphouseId)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if Config.TrapHouses[TraphouseId].money ~= 0 then
|
|
Player.Functions.AddMoney('cash', Config.TrapHouses[TraphouseId].money)
|
|
Config.TrapHouses[TraphouseId].money = 0
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, TraphouseId, Config.TrapHouses[TraphouseId])
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.no_money"), 'error')
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent('qb-traphouse:server:RobNpc', function(Traphouse)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local Chance = math.random(1, 10)
|
|
local odd = math.random(1, 10)
|
|
|
|
if Chance == odd then
|
|
local info = {
|
|
label = Lang:t('info.pincode', {value = Config.TrapHouses[Traphouse].pincode})
|
|
}
|
|
Player.Functions.AddItem("stickynote", 1, false, info)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items["stickynote"], "add")
|
|
else
|
|
local amount = math.random(1, 80)
|
|
Player.Functions.AddMoney('cash', amount)
|
|
end
|
|
end)
|
|
|
|
-- Commands
|
|
|
|
QBCore.Commands.Add("multikeys", Lang:t("info.give_keys"), {{name = "id", help = "Player id"}}, true, function(source, args)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local TargetId = tonumber(args[1])
|
|
local TargetData = QBCore.Functions.GetPlayer(TargetId)
|
|
local IsOwner = false
|
|
local Traphouse = HasTraphouseAndOwner(Player.PlayerData.citizenid)
|
|
|
|
if TargetData ~= nil then
|
|
if Traphouse ~= nil then
|
|
if not HasCitizenIdHasKey(TargetData.PlayerData.citizenid, Traphouse) then
|
|
if Config.TrapHouses[Traphouse] ~= nil then
|
|
if IsOwner then
|
|
Config.TrapHouses[Traphouse].keyholders = {}
|
|
Config.TrapHouses[Traphouse].pincode = math.random(1111, 4444)
|
|
end
|
|
|
|
if Config.TrapHouses[Traphouse].keyholders == nil then
|
|
Config.TrapHouses[Traphouse].keyholders[#Config.TrapHouses[Traphouse].keyholders+1] = {
|
|
citizenid = TargetData.PlayerData.citizenid,
|
|
owner = IsOwner,
|
|
}
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, Traphouse, Config.TrapHouses[Traphouse])
|
|
else
|
|
if #Config.TrapHouses[Traphouse].keyholders + 1 <= 6 then
|
|
if not HasCitizenIdHasKey(TargetData.PlayerData.citizenid, Traphouse) then
|
|
Config.TrapHouses[Traphouse].keyholders[#Config.TrapHouses[Traphouse].keyholders+1] = {
|
|
citizenid = TargetData.PlayerData.citizenid,
|
|
owner = IsOwner,
|
|
}
|
|
TriggerClientEvent('qb-traphouse:client:SyncData', -1, Traphouse, Config.TrapHouses[Traphouse])
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.no_slots"))
|
|
end
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.occured"))
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.have_keys"), 'error')
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.not_owner"), 'error')
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.not_online"), 'error')
|
|
end
|
|
end)
|
|
|
|
exports("AddHouseItem", AddHouseItem)
|
|
exports("RemoveHouseItem", RemoveHouseItem)
|
|
exports("GetInventoryData", GetInventoryData)
|
|
exports("CanItemBeSaled", CanItemBeSaled)
|