local adminPerm = config.tgiannServer and { "tgi" } or config.framework == "qb" and "god" or "admin" tgiCore.CommandsAdd(config.commands.admin.giveitem, "Give An Item (Admin Only)", { { name = "id", help = "Player ID" }, { name = "item", help = "Name of the item (not a label)" }, { name = "amount", help = "Amount of items" } }, false, function(source, args) local src = source local id = tonumber(args[1]) local Player = config.tgiannServer and tgiCore.getPlayerById(id) or tgiCore.getPlayer(id) local amount = tonumber(args[3]) or 1 local itemData = itemList[tostring(args[2]):lower()] if not Player then return tgiCore.notif(src, "Player Offline", "error") end local targetSrc = tgiCore.getSource(Player) if not itemData then return tgiCore.notif(src, "There is no such item", "error") end if not AddItem(targetSrc, itemData.name, amount) then return tgiCore.notif(src, "Player Is Full", "error") end tgiCore.notif(src, "Item Given ID:" .. tgiCore.getCid(Player) .. " | " .. amount .. "x " .. itemData.name .. "", "success") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/giveitem %s %s %s", id, args[2], amount), src, targetSrc) end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.setitem, "Set An Item (Admin Only)", { { name = "id", help = "Player ID" }, { name = "item", help = "Name of the item (not a label)" }, { name = "amount", help = "Amount of items" } }, false, function(source, args) local src = source local id = tonumber(args[1]) local Player = config.tgiannServer and tgiCore.getPlayerById(id) or tgiCore.getPlayer(id) local amount = tonumber(args[3]) or 1 local itemData = itemList[tostring(args[2]):lower()] if not Player then return tgiCore.notif(src, "Player Offline", "error") end local targetSrc = tgiCore.getSource(Player) local pInventory = GetInventory(targetSrc, "player") if not itemData then return tgiCore.notif(src, "There is no such item", "error") end if not pInventory.Functions.SetItem(itemData.name, amount) then return tgiCore.notif(src, "Player Is Full", "error") end pInventory.Functions.Save() tgiCore.notif(src, "Item Given ID:" .. tgiCore.getCid(Player) .. " | " .. amount .. "x " .. itemData.name .. "", "success") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/giveitem %s %s %s", id, args[2], amount), src, targetSrc) end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.clearinv, 'Clear Players Inventory (Admin Only)', { { name = 'id', help = 'Player ID' } }, false, function(source, args) local src = source if args[1] then local Player = config.tgiannServer and tgiCore.getPlayerById(tonumber(args[1])) or tgiCore.getPlayer(tonumber(args[1])) if Player then local targetSrc = tgiCore.getSource(Player) local pInventory = GetInventory(targetSrc, "player") pInventory.Functions.ClearInventory() tgiCore.notif(src, "Player's Inventory Deleted", "error") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/clearinv %s (Target Online)", args[1]), src, targetSrc) else local row = MySQL.single.await('SELECT `inventory`, `citizenid` FROM `tgiann_inventory_player` WHERE `citizenid` = ? LIMIT 1', { args[1] }) if row then MySQL.update('UPDATE tgiann_inventory_player SET inventory = ? WHERE citizenid = ?', { "[]", row.citizenid }) tgiCore.notif(src, "Player's Inventory Deleted", "error") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/clearinv %s (Target Offline)", args[1]), src) else tgiCore.notif(src, "There is no such player", "error") end end else local Player = tgiCore.getPlayer(src) if not Player then return tgiCore.notif(src, "Player Offline", "error") end local pInventory = GetInventory(tgiCore.getSource(Player), "player") pInventory.Functions.ClearInventory() TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, "/clearinv (Self Inventory)", src) end end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.backpack, "Set Backpack Level", { { name = "id", help = "Player ID" }, { name = "level", help = "1-2-3" } }, true, function(source, args) local src = source local backpack = tonumber(args[2]) if not backpack then return tgiCore.notif(src, "You Have To Write a Level", "error") end local max = #config.backpack if backpack <= 0 and backpack > max then return tgiCore.notif(src, string.format("Backpack Level Can Be Max %s Min 1", max), "error") end local xPlayer = config.tgiannServer and tgiCore.getPlayerById(tonumber(args[1])) or tgiCore.getPlayer(tonumber(args[1])) if not xPlayer then return tgiCore.notif(src, "Player Offline", "error") end local targetSrc = tgiCore.getSource(xPlayer) MySQL.insert('INSERT INTO tgiann_inventory_player (citizenid, lvl) VALUES (:citizenid, :lvl) ON DUPLICATE KEY UPDATE citizenid = :citizenid, lvl = :lvl', { citizenid = tgiCore.getCid(xPlayer), lvl = backpack, }) local pInventory = GetInventory(targetSrc, "player") if pInventory then local data = config.backpack[backpack] pInventory.Functions.UpdateData({ MaxSlots = data.slots, MaxWeight = data.weight }) end tgiCore.notif(src, "Backpack Level Seted", "success") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/backpack %s %s", args[1], backpack), src, targetSrc) end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.deleteinv, "Deletes Inventory", { { name = "id", help = "Inventory Name/Plate" }, { name = "invType", help = "Inventory Type(trunk, glovebox, stash)" } }, true, function(source, args) local src = source local invType = args[2] local invId = args[1] if DeleteInventory(invType, invId) then tgiCore.notif(src, "Inventory Deleted! " .. secondInventoryId, "success") TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/deleteinv %s %s", invType, invId), src) else tgiCore.notif(src, "There Is No Such Inventory!", "error") end end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.openinv, "Open a Inventory", { { name = "id", help = "Inventory Name/Plate" }, { name = "invType", help = "Inventory Type(trunk, glovebox, stash)" } }, true, function(source, args) local src = source local invType = args[2] local invId = args[1] OpenInventory(src, invType, invId, { maxweight = 999999999999, slots = 1000, }) TriggerEvent("tgiann-core:discordLog", webhooks.adminLog, string.format("/openinv %s %s", invType, invId), src) end, adminPerm) local checkItemAmount = 0 local checkItemTotalAmount = 0 local function checkItemListAdd(name, amount, findItem) if name == findItem then checkItemAmount = checkItemAmount + amount end end local function checkItemListPrint(inventoryType, inventoryName, findItem, findAmount) if checkItemAmount > findAmount then tgiCore.DebugLog(string.format("Env Type: %s | %s | Item: %s | Amount: %s", inventoryType, inventoryName, findItem, checkItemAmount)) checkItemTotalAmount = checkItemTotalAmount + checkItemAmount end checkItemAmount = 0 end tgiCore.CommandsAdd(config.commands.admin.checkitem, "Checks One Item in All Inventories", { { name = "item", help = "Item Name" }, { name = "minamount", help = "Min Amount" } }, true, function(source, args) local findItem = args[1] local findAmount = tonumber(args[2]) local src = source checkItemTotalAmount = 0 if itemList[findItem] then local result = MySQL.query.await('SELECT inventory, citizenid, citizenid FROM tgiann_inventory_player') if result then for i = 1, #result do local resultData = result[i] resultData.inventory = json.decode(resultData.inventory) if resultData.inventory then for _, data in pairs(resultData.inventory) do checkItemListAdd(data.name, data.amount, findItem) end checkItemListPrint("Player", resultData.citizenid, findItem, findAmount) end end end local result = MySQL.query.await('SELECT * FROM tgiann_inventory_stashitems') if result then for i = 1, #result do local resultData = result[i] resultData.items = json.decode(resultData.items) for _, data in pairs(resultData.items) do checkItemListAdd(data.name, data.amount, findItem) end checkItemListPrint("stash", resultData.stash, findItem, findAmount) end end local result = MySQL.query.await('SELECT * FROM tgiann_inventory_trunkitems') if result then for i = 1, #result do local resultData = result[i] resultData.items = json.decode(resultData.items) for _, data in pairs(resultData.items) do checkItemListAdd(data.name, data.amount, findItem) end checkItemListPrint("trunk", resultData.plate, findItem, findAmount) end end local result = MySQL.query.await('SELECT * FROM tgiann_inventory_gloveboxitems') if result then for i = 1, #result do local resultData = result[i] resultData.items = json.decode(resultData.items) for _, data in pairs(resultData.items) do checkItemListAdd(data.name, data.amount, findItem) end checkItemListPrint("glovebox", resultData.plate, findItem, findAmount) end end --[[ local result = MySQL.query.await('SELECT id, item, amount FROM tgiann_market_sell') if result then for i=1, #result do local resultData = result[i] checkItemListAdd(resultData.item, resultData.amount, findItem) checkItemListPrint("tgiann_market_sell", resultData.id, findItem, findAmount) end end local result = MySQL.query.await('SELECT id, item, amount FROM tgiann_market_item_storage') if result then for i=1, #result do local resultData = result[i] checkItemListAdd(resultData.item, resultData.amount, findItem) checkItemListPrint("tgiann_market_item_storage", resultData.id, findItem, findAmount) end end ]] tgiCore.DebugLog(string.format("Total Amount: %s", checkItemTotalAmount)) else tgiCore.notif(src, "There is no such item!", "error") end end, adminPerm) tgiCore.CommandsAdd(config.commands.admin.items, "Lists all Items available in the server", {}, false, function(source, args) OpenShop(source, "admin") end, adminPerm) -- PLAYER COMMANDS -- https://github.com/qbcore-framework/qb-banking/blob/main/server.lua#L493 if config.commands.player.givecash.active then tgiCore.CommandsAdd(config.commands.player.givecash.command, 'Give Cash', { { name = 'id', help = 'Player ID' }, { name = 'amount', help = 'Amount' } }, true, function(source, args) local src = source local xPlayer = tgiCore.getPlayer(src) if not xPlayer then return end local playerPed = GetPlayerPed(src) local playerCoords = GetEntityCoords(playerPed) local tPlayer = tgiCore.getPlayer(tonumber(args[1])) if not tPlayer then return tgiCore.notif(src, lang.giveCashNoUser, 'error') end local targetPed = GetPlayerPed(tonumber(args[1])) local targetCoords = GetEntityCoords(targetPed) local amount = tonumber(args[2]) if not amount then return tgiCore.notif(src, lang.giveCashInvalidAmount, 'error') end if amount <= 0 then return tgiCore.notif(src, lang.giveCashInvalidAmount, 'error') end if #(playerCoords - targetCoords) > 5 then return tgiCore.notif(src, lang.giveCashToofar, 'error') end if tgiCore.getMoney(xPlayer, "cash") < amount then return tgiCore.notif(src, lang.giveCashNoMoney, 'error') end tgiCore.removeMoney(xPlayer, 'cash', amount, 'cash transfer') tgiCore.addMoney(tPlayer, 'cash', amount, 'cash transfer') tgiCore.notif(src, string.format(lang.giveCashSuccesGive, amount), 'success') tgiCore.notif(tgiCore.getSource(tPlayer), string.format(lang.giveCashSuccesGet, amount), 'success') end) end if config.commands.player.rob.active then tgiCore.CommandsAdd(config.commands.player.rob.command, 'Rob Closest Player', {}, false, function(source, args) local targetPlayer = lib.callback.await("tgiann-inventory:robPlayer", source) if not targetPlayer then return end OpenInventoryById(source, targetPlayer, true) end) end