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)