From 00c022e9665885a78f5723dbc9f6a9089c388a33 Mon Sep 17 00:00:00 2001 From: jimathy Date: Sat, 5 Feb 2022 15:44:29 +0000 Subject: [PATCH] Add files via upload --- client.lua | 52 +++++++++++++++++++++++++++++++ config.lua | 20 ++++++++++++ fxmanifest.lua | 23 ++++++++++++++ images/ticket.png | Bin 0 -> 18463 bytes server.lua | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 171 insertions(+) create mode 100644 client.lua create mode 100644 config.lua create mode 100644 fxmanifest.lua create mode 100644 images/ticket.png create mode 100644 server.lua diff --git a/client.lua b/client.lua new file mode 100644 index 0000000..f23a12a --- /dev/null +++ b/client.lua @@ -0,0 +1,52 @@ +local QBCore = exports['qb-core']:GetCoreObject() + +PlayerJob = {} + +local onDuty = false + +RegisterNetEvent('QBCore:Client:OnPlayerLoaded') +AddEventHandler('QBCore:Client:OnPlayerLoaded', function() + QBCore.Functions.GetPlayerData(function(PlayerData) + PlayerJob = PlayerData.job + end) +end) + +RegisterNetEvent('QBCore:Client:OnJobUpdate') +AddEventHandler('QBCore:Client:OnJobUpdate', function(JobInfo) + PlayerJob = JobInfo + onDuty = PlayerJob.onduty +end) + +RegisterNetEvent('QBCore:Client:SetDuty') +AddEventHandler('QBCore:Client:SetDuty', function(duty) + onDuty = duty +end) + +--Keeps track of duty on script restarts +AddEventHandler('onResourceStart', function(resource) if GetCurrentResourceName() == resource then QBCore.Functions.GetPlayerData(function(PlayerData) PlayerJob = PlayerData.job end) end end) + +Citizen.CreateThread(function() + local jobroles = {} + for k, v in pairs(Config.Jobs) do jobroles[tostring(k)] = 0 end + exports['qb-target']:AddBoxZone("JimBank", vector3(251.75, 222.17, 106.2), 0.6, 2.0, { name="JimBank", heading = 340.0, debugPoly=false, minZ = 105.75, maxZ = 107.29, }, + { options = { { type = 'server', event = "jim-payments:Tickets:Sell", icon = "fas fa-receipt", label = "Cash in Receipts", job = jobroles }, }, + distance = 2.0 + }) +end) + +RegisterNetEvent('jim-payments:client:Charge', function() + if not onDuty then TriggerEvent("QBCore:Notify", "Not Clocked in!", "error") return end -- Require to be on duty when making a payment + QBCore.Functions.TriggerCallback('jim-payments:server:GetCurrentPlayers', function(playerList) + if playerList[1] == nil then TriggerEvent("QBCore:Notify", "No one near by to charge", "error") return end + local dialog = exports['qb-input']:ShowInput({ header = "Charge Customer", submitText = "Send", + inputs = { + { text = "Citizen", name = "citizen", type = "select", options = playerList }, + { type = 'number', isRequired = true, name = 'price', text = 'Amount to Charge' }, + { type = 'radio', name = 'billtype', text = 'Payment Type', options = { { value = "cash", text = "Cash" }, { value = "card", text = "Card" } } }, } + }) + if dialog then + if not dialog.citizen or not dialog.price then return end + TriggerServerEvent('jim-payments:server:Charge', dialog.citizen, dialog.price, dialog.billtype) + end + end) +end) \ No newline at end of file diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..5afdab7 --- /dev/null +++ b/config.lua @@ -0,0 +1,20 @@ +print("Jim-Payments v1.0 - Payments Script by Jimathy") + +-- If you need support I now have a discord available, it helps me keep track of issues and give better support. + +-- https://discord.gg/xKgQZ6wZvS + +Config = {} + +Config.PaymentRadius = 30 -- This is how far the player list will check + +Config.Jobs = { + ['popsdiner'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['henhouse'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['pizzathis'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['burgershot'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['catcafe'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['tequilala'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['vanilla'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, + ['mechanic'] = { MinAmountforTicket = 1000, PayPerTicket = 500 }, +} \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua new file mode 100644 index 0000000..386e9f9 --- /dev/null +++ b/fxmanifest.lua @@ -0,0 +1,23 @@ +name "Jim-Payments" +author "Jimathy" +version "v1.0" +description "Payment Script By Jimathy" +fx_version "cerulean" +game "gta5" + +dependencies { + 'qb-input', +} + +client_scripts { + 'client.lua' +} + +server_scripts { + '@oxmysql/lib/MySQL.lua', + 'server.lua' +} + +shared_scripts { + 'config.lua', +} \ No newline at end of file diff --git a/images/ticket.png b/images/ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..eefef4ff8c09eef3e519ab07a52e41a06d0dfe7b GIT binary patch literal 18463 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
    hIc3rIInVHs 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 VO3xaU5CbDX%JLd=H8K_v{|{RkF+KnQ literal 0 HcmV?d00001 diff --git a/server.lua b/server.lua new file mode 100644 index 0000000..65e5df5 --- /dev/null +++ b/server.lua @@ -0,0 +1,76 @@ +local QBCore = exports['qb-core']:GetCoreObject() + +RegisterServerEvent('jim-payments:Tickets:Give') +AddEventHandler('jim-payments:Tickets:Give', function(amount, job) + for k, v in pairs(QBCore.Functions.GetPlayers()) do + local Player = QBCore.Functions.GetPlayer(v) + if Player ~= nil then + if Player.PlayerData.job.name == job and Player.PlayerData.job.onduty then + if amount >= Config.Jobs[job].MinAmountforTicket then + Player.Functions.AddItem('payticket', 1, false, {["quality"] = nil}) + TriggerClientEvent('QBCore:Notify', Player.PlayerData.source, 'Receipt received', 'success') + TriggerClientEvent('inventory:client:ItemBox', Player.PlayerData.source, QBCore.Shared.Items['payticket'], "add", 1) + elseif amount < Config.Jobs[job].MinAmountforTicket then + TriggerClientEvent("QBCore:Notify", Player.PlayerData.source, "Amount too low, didn't receive a receipt", "error") + end + end + end + end +end) + +RegisterServerEvent('jim-payments:Tickets:Sell') +AddEventHandler('jim-payments:Tickets:Sell', function(data) + local Player = QBCore.Functions.GetPlayer(source) + if Player.Functions.GetItemByName("payticket") == nil then TriggerClientEvent('QBCore:Notify', source, "No tickets to trade", 'error') return + else + tickets = Player.Functions.GetItemByName("payticket").amount + Player.Functions.RemoveItem('payticket', tickets) + Player.Functions.AddMoney('bank', (tickets * Confing.Jobs[Player.PlayerData.job.name].PayPerTicket), 'ticket-payment') + TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items['payticket'], "remove", tickets) + TriggerClientEvent('QBCore:Notify', source, "Tickets: "..tickets.." Total: $"..pay, 'success') + end +end) + +RegisterServerEvent("jim-payments:server:Charge", function(citizen, price, billtype) + local biller = QBCore.Functions.GetPlayer(source) + local billed = QBCore.Functions.GetPlayer(tonumber(citizen)) + local amount = tonumber(price) + local billtype = string.lower(tostring(billtype)) + + if billed ~= nil then + if billtype == "cash" then balance = billed.Functions.GetMoney(billtype) + if source == tonumber(citizen) then TriggerClientEvent('QBCore:Notify', source, 'You Cannot Bill Yourself', 'error') return end + if balance >= amount then + billed.Functions.RemoveMoney('cash', amount) TriggerEvent("qb-bossmenu:server:addAccountMoney", tostring(biller.PlayerData.job.name), amount) + TriggerEvent('jim-payments:Tickets:Give', amount, tostring(biller.PlayerData.job.name)) + elseif balance < amount then + TriggerClientEvent("QBCore:Notify", source, "Customer doesn't have enough cash to pay", "error") + TriggerClientEvent("QBCore:Notify", tonumber(citizen), "You don't have enough cash to pay", "error") + end + elseif billtype == "card" then + if biller.PlayerData.citizenid == billed.PlayerData.citizenid then TriggerClientEvent('QBCore:Notify', source, 'You Cannot Bill Yourself', 'error') return end + if amount and amount > 0 then + MySQL.Async.insert( + 'INSERT INTO phone_invoices (citizenid, amount, society, sender, sendercitizenid) VALUES (?, ?, ?, ?, ?)', + {billed.PlayerData.citizenid, amount, biller.PlayerData.job.name, + biller.PlayerData.charinfo.firstname, biller.PlayerData.citizenid}) + TriggerClientEvent('qb-phone:RefreshPhone', billed.PlayerData.source) + TriggerClientEvent('QBCore:Notify', source, 'Invoice Successfully Sent', 'success') + TriggerClientEvent('QBCore:Notify', billed.PlayerData.source, 'New Invoice Received') + else TriggerClientEvent('QBCore:Notify', source, 'Must Be A Valid Amount Above 0', 'error') end + end + else TriggerClientEvent('QBCore:Notify', source, 'Player Not Online', 'error') end +end) + +QBCore.Functions.CreateCallback('jim-payments:server:GetCurrentPlayers', function(source, cb) + local onlineList = {} + local SPlayer = QBCore.Functions.GetPlayer(source) + for k, v in pairs(QBCore.Functions.GetPlayers()) do + local Player = QBCore.Functions.GetPlayer(v) + if Player ~= nil and v ~= source then + local dist = #(vector3(Player.PlayerData.position.x, Player.PlayerData.position.y, Player.PlayerData.position.z) - vector3(SPlayer.PlayerData.position.x, SPlayer.PlayerData.position.y, SPlayer.PlayerData.position.z)) + if dist < Config.PaymentRadius then onlineList[#onlineList+1] = { value = tonumber(v), text = "["..v.."] - "..Player.PlayerData.charinfo.firstname..' '..Player.PlayerData.charinfo.lastname } end + end + end + cb(onlineList) +end) \ No newline at end of file