15 Commits

Author SHA1 Message Date
jimathy
f9029f0951 Commission update 2022-04-11 18:59:47 +01:00
jimathy
65f51520fb Update Readme with new phone event and info 2022-04-11 18:58:55 +01:00
jimathy
7e92b852cf fix bank popups and popup job tickets 2022-04-06 22:30:26 +01:00
jimathy
a63b40c11f fix pay popups for shops with no logo 2022-04-06 22:18:38 +01:00
jimathy
644294546e qb-management export update 2022-04-03 20:52:10 +01:00
jimathy
4dbe600680 qb-management export update 2022-04-03 20:51:34 +01:00
jimathy
9d5086e5d5 qb-management export update 2022-04-03 20:41:07 +01:00
jimathy
b06cb05266 Merge pull request #3 from stacheboi/main
Fix for Player Receiving Cash From Self
2022-03-26 17:50:06 +00:00
jimathy
f16a0b0d1f Removed loops, it was being too strict 2022-03-17 10:57:14 +00:00
jimathy
48003e09a6 Fix for everyone being able to access boss account 2022-03-17 10:43:04 +00:00
stacheboi
95459f63a8 Fix for Player Receiving Cash From Self
When you give someone cash it shows they received money from themself. This show show the sending players name instead.
2022-03-16 21:17:10 -04:00
jimathy
0065af7c9d Notify on accepted payment 2022-03-15 21:32:49 +00:00
jimathy
74990226a9 fix for fix. I need a rest 2022-03-13 13:15:57 +00:00
jimathy
2e5bcc4d86 Fix for bank popup payments 2022-03-13 13:03:09 +00:00
jimathy
185c641f60 fix for tickets with new popup 2022-03-12 12:56:30 +00:00
7 changed files with 137 additions and 75 deletions

View File

@@ -46,12 +46,7 @@ Go to [qb] > qb-phone > client > main.lua
- Add this line: - Add this line:
```TriggerServerEvent('jim-payments:Tickets:Give', amount, society)``` ```TriggerServerEvent('jim-payments:Tickets:Give', data)```
--------------
NOTE: If you are converting from my older job scripts, I recommend removing the previous triggers from qb-phone
-------------- --------------
@@ -61,3 +56,15 @@ simply look in the atms.lua and change the config options at the top
Choose wether to use atm's, choose wether to use banking locations Choose wether to use atm's, choose wether to use banking locations
Choose wether to add bank blips (if you want to disable qb-banking) Choose wether to add bank blips (if you want to disable qb-banking)
Choose wether to add ATM blips (if you like $ signs) Choose wether to add ATM blips (if you like $ signs)
--------------
New Commission system added
This brings more config options to find tune the script
Choose wether people get commission from every sale
Choose if EVERY worker gets Commission that is on duty
Choose if Commission is limited by MinAmountForTicket
Choose if the worker charging the customer gets double commission

View File

@@ -3,7 +3,6 @@ local QBCore = exports['qb-core']:GetCoreObject()
-- This script is a simple replacement for QB-Banking and QB-ATMs -- This script is a simple replacement for QB-Banking and QB-ATMs
-- It uses QB-Input and server callbacks to retreive info about accounts and cash -- It uses QB-Input and server callbacks to retreive info about accounts and cash
-- This requires QB-Target and has the location of every ATM, ATM prop and bank window -- This requires QB-Target and has the location of every ATM, ATM prop and bank window
-- If Config.useATM = false, then none of this load
Config.ATMModels = {"prop_atm_01", "prop_atm_02", "prop_atm_03", "prop_fleeca_atm" } Config.ATMModels = {"prop_atm_01", "prop_atm_02", "prop_atm_03", "prop_fleeca_atm" }
@@ -88,7 +87,6 @@ Config.BankLocations = {
--vector3(252.41, 221.41, 106.29) --vector3(252.41, 221.41, 106.29)
} }
local function cv(amount) local function cv(amount)
local formatted = amount local formatted = amount
while true do while true do
@@ -136,20 +134,20 @@ AddEventHandler('onResourceStart', function(resource) if GetCurrentResourceName(
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() createBlips() end) RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() createBlips() end)
local bossroles = {}
local gangroles = {}
Citizen.CreateThread(function() Citizen.CreateThread(function()
if Config.useATM or Config.useBanks then if Config.useATM or Config.useBanks then
local bossroles = {} for k, v in pairs(QBCore.Shared.Jobs) do ---Grabs the list of jobs
for k, v in pairs(QBCore.Shared.Jobs) do for l, b in pairs(QBCore.Shared.Jobs[tostring(k)].grades) do -- Grabs the list of grades
for l, b in pairs(QBCore.Shared.Jobs[tostring(k)].grades) do if QBCore.Shared.Jobs[tostring(k)].grades[l].isboss == true then -- Checks the grade if is boss
if QBCore.Shared.Jobs[tostring(k)].grades[l].isboss == true then if bossroles[tostring(k)] ~= nil then -- checks if the line exists
if bossroles[tostring(k)] ~= nil then if bossroles[tostring(k)] > tonumber(l) then bossroles[tostring(k)] = tonumber(l) end -- the
if bossroles[tostring(k)] > tonumber(l) then bossroles[tostring(k)] = tonumber(l) end
else bossroles[tostring(k)] = tonumber(l) else bossroles[tostring(k)] = tonumber(l)
end end
end end
end end
end end
local gangroles = {}
for k, v in pairs(QBCore.Shared.Gangs) do for k, v in pairs(QBCore.Shared.Gangs) do
for l, b in pairs(QBCore.Shared.Gangs[tostring(k)].grades) do for l, b in pairs(QBCore.Shared.Gangs[tostring(k)].grades) do
if tostring(k) ~= "none" then if tostring(k) ~= "none" then
@@ -159,17 +157,17 @@ Citizen.CreateThread(function()
else gangroles[tostring(k)] = tonumber(l) else gangroles[tostring(k)] = tonumber(l)
end end
end end
end end
end end
end end
end end
if Config.useATM then if Config.useATM then
exports['qb-target']:AddTargetModel(Config.ATMModels, { options = { { event = "jim-payments:Client:ATM:use", icon = "fas fa-money-check-alt", label = "Use ATM", id = "atm" },}, distance = 1.5, }) exports['qb-target']:AddTargetModel(Config.ATMModels, { options = { { event = "jim-payments:Client:ATM:use", icon = "fas fa-money-check-alt", label = "Use ATM", id = "atm" },}, distance = 1.5, })
for k,v in pairs(Config.ATMLocations) do for k,v in pairs(Config.ATMLocations) do
exports['qb-target']:AddCircleZone("jimatm"..k, vector3(tonumber(v.x), tonumber(v.y), tonumber(v.z)+0.2), 0.5, { name="jimatm"..k, debugPoly=false, useZ=true, }, exports['qb-target']:AddCircleZone("jimatm"..k, vector3(tonumber(v.x), tonumber(v.y), tonumber(v.z)+0.2), 0.5, { name="jimatm"..k, debugPoly=false, useZ=true, },
{ options = { { event = "jim-payments:Client:ATM:use", icon = "fas fa-money-check-alt", label = "Use ATM", id = "atm" }, { options = { { event = "jim-payments:Client:ATM:use", icon = "fas fa-money-check-alt", label = "Use ATM", id = "atm" },
--[[{ event = "jim-payments:Client:ATM:use", icon = "fas fa-arrow-right-arrow-left", label = "Transfer Money", id = "transfer" },]] }, distance = 1.5 }) --[[{ event = "jim-payments:Client:ATM:use", icon = "fas fa-arrow-right-arrow-left", label = "Transfer Money", id = "transfer" },]]
}, distance = 1.5 })
end end
end end
if Config.useBanks then if Config.useBanks then
@@ -199,26 +197,29 @@ local function PlayATMAnimation(animation)
end end
end end
local function GrabAccount(type, job)
local p = promise.new()
QBCore.Functions.TriggerCallback('jim-payments:ManageWrapper', function(cb) p:resolve(cb) end, type, job)
return Citizen.Await(p)
end
RegisterNetEvent('jim-payments:Client:ATM:use', function(data) RegisterNetEvent('jim-payments:Client:ATM:use', function(data)
--this grabs all the info from names to savings account numbers in the databases --this grabs all the info from names to savings account numbers in the databases
while name == nil do while name == nil do
QBCore.Functions.TriggerCallback('jim-payments:ATM:Find', function(cb1, cb2, cb3, cb4, cb5, cb6, cb7) name = cb1 cash = cb2 bank = cb3 account = cb4 cid = cb5 savbal = cb6 aid = cb7 end) QBCore.Functions.TriggerCallback('jim-payments:ATM:Find', function(cb1, cb2, cb3, cb4, cb5, cb6, cb7) name = cb1 cash = cb2 bank = cb3 account = cb4 cid = cb5 savbal = cb6 aid = cb7 end)
Citizen.Wait(100) Citizen.Wait(100)
end end
while society == nil do
QBCore.Functions.TriggerCallback('qb-bossmenu:server:GetAccount', function(cb) society = cb end, PlayerJob.name) society = GrabAccount("GetAccount", PlayerJob.name)
Citizen.Wait(100) Wait(200)
end gsociety = GrabAccount("GetGangAccount", PlayerGang.name)
while gsociety == nil do
QBCore.Functions.TriggerCallback('qb-gangmenu:server:GetAccount', function(cb) gsociety = cb end, PlayerGang.name)
Citizen.Wait(100)
end
local atmbartime = 2500 local atmbartime = 2500
local setoptions = {} local setoptions = {}
if data.id == "atm" then if data.id == "atm" then
setoptions = { { value = "withdraw", text = "Withdrawl" }, } setoptions = { { value = "withdraw", text = "Withdrawl" }, }
setview = "Welcome back, "..name.."<br><br>- Citizen ID -<br>"..cid.."<br><br>- Balances -<br>🏦Bank - $"..cv(bank).."<br>💵Cash - $"..cv(cash)..'<br><br>- Options -' setview = "<center><img src=https://static.wikia.nocookie.net/gtawiki/images/b/bd/Fleeca-GTAV-Logo.png width=200px></center><br>Welcome back, "..name.."<br><br>- Citizen ID -<br>"..cid.."<br><br>- Balances -<br>🏦Bank - $"..cv(bank).."<br>💵Cash - $"..cv(cash)..'<br><br>- Options -'
setheader = "💵 ATM Banking 💵" setheader = "💵 ATM Banking 💵"
setinputs = { { type = 'radio', name = 'billtype', text = setview, options = setoptions }, setinputs = { { type = 'radio', name = 'billtype', text = setview, options = setoptions },
{ type = 'number', isRequired = true, name = 'amount', text = '💵 Amount to transfer' }, } { type = 'number', isRequired = true, name = 'amount', text = '💵 Amount to transfer' }, }
@@ -373,4 +374,4 @@ RegisterNetEvent('jim-payments:client:ATM:give', function()
TriggerServerEvent('jim-payments:server:ATM:give', dialog.citizen, dialog.price) TriggerServerEvent('jim-payments:server:ATM:give', dialog.citizen, dialog.price)
end end
end) end)
end) end)

View File

@@ -13,6 +13,13 @@ end
---- BANK STUFF ---- BANK STUFF
QBCore.Functions.CreateCallback('jim-payments:ManageWrapper', function(source, cb, type, account)
local result = nil
if type == "GetAccount" then result = exports["qb-management"]:GetAccount(account) end
if type == "GetGangAccount" then result = exports["qb-management"]:GetGangAccount(account) end
cb(result)
end)
RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, baccount, account, society, gsociety) RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, baccount, account, society, gsociety)
local src = source local src = source
local Player = QBCore.Functions.GetPlayer(src) local Player = QBCore.Functions.GetPlayer(src)
@@ -72,12 +79,14 @@ RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, ba
elseif tonumber(society) >= amount then elseif tonumber(society) >= amount then
TriggerClientEvent("QBCore:Notify", src, "Withdrew $"..cv(amount).." from the "..Player.PlayerData.job.label.." account", "success") TriggerClientEvent("QBCore:Notify", src, "Withdrew $"..cv(amount).." from the "..Player.PlayerData.job.label.." account", "success")
Player.Functions.AddMoney('bank', amount) Player.Functions.AddMoney('bank', amount)
TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.job.name), amount) exports["qb-management"]:RemoveMoney(tostring(Player.PlayerData.job.name), amount)
--TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.job.name), amount)
end end
elseif billtype == "deposit" then elseif billtype == "deposit" then
if bankB < amount then TriggerClientEvent("QBCore:Notify", src, "Not enough money in your bank", "error") if bankB < amount then TriggerClientEvent("QBCore:Notify", src, "Not enough money in your bank", "error")
elseif bankB >= amount then elseif bankB >= amount then
TriggerEvent("qb-bossmenu:server:addAccountMoney", tostring(Player.PlayerData.job.name), amount) exports["qb-management"]:AddMoney(tostring(Player.PlayerData.job.name), amount)
--TriggerEvent("qb-bossmenu:server:addAccountMoney", tostring(Player.PlayerData.job.name), amount)
Player.Functions.RemoveMoney('bank', amount) Wait(1500) Player.Functions.RemoveMoney('bank', amount) Wait(1500)
TriggerClientEvent("QBCore:Notify", src, "Deposited $"..cv(amount).." into the "..Player.PlayerData.job.label.." account", "success") TriggerClientEvent("QBCore:Notify", src, "Deposited $"..cv(amount).." into the "..Player.PlayerData.job.label.." account", "success")
end end
@@ -100,7 +109,8 @@ RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, ba
local result = MySQL.Sync.fetchAll('SELECT * FROM players WHERE charinfo LIKE ?', {query}) local result = MySQL.Sync.fetchAll('SELECT * FROM players WHERE charinfo LIKE ?', {query})
if result[1] ~= nil then if result[1] ~= nil then
local Reciever = QBCore.Functions.GetPlayerByCitizenId(result[1].citizenid) local Reciever = QBCore.Functions.GetPlayerByCitizenId(result[1].citizenid)
TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.job.name), amount) exports["qb-management"]:RemoveMoney(tostring(Player.PlayerData.job.name), amount)
--TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.job.name), amount)
if Reciever ~= nil then if Reciever ~= nil then
Reciever.Functions.AddMoney('bank', amount) Reciever.Functions.AddMoney('bank', amount)
TriggerClientEvent("QBCore:Notify", src, "Sent $"..amount.." to "..Reciever.PlayerData.charinfo.firstname.." "..Reciever.PlayerData.charinfo.lastname, "success") TriggerClientEvent("QBCore:Notify", src, "Sent $"..amount.." to "..Reciever.PlayerData.charinfo.firstname.." "..Reciever.PlayerData.charinfo.lastname, "success")
@@ -121,12 +131,14 @@ RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, ba
elseif tonumber(gsociety) >= amount then elseif tonumber(gsociety) >= amount then
TriggerClientEvent("QBCore:Notify", src, "Withdrew $"..cv(amount).." from the "..Player.PlayerData.gang.label.." account", "success") TriggerClientEvent("QBCore:Notify", src, "Withdrew $"..cv(amount).." from the "..Player.PlayerData.gang.label.." account", "success")
Player.Functions.AddMoney('bank', amount) Player.Functions.AddMoney('bank', amount)
TriggerEvent("qb-gangmenu:server:removeAccountMoney", tostring(Player.PlayerData.gang.name), amount) exports["qb-management"]:RemoveGangMoney(tostring(Player.PlayerData.gang.name), amount)
--TriggerEvent("qb-gangmenu:server:removeAccountMoney", tostring(Player.PlayerData.gang.name), amount)
end end
elseif billtype == "deposit" then elseif billtype == "deposit" then
if bankB < amount then TriggerClientEvent("QBCore:Notify", src, "Not enough money in your bank", "error") if bankB < amount then TriggerClientEvent("QBCore:Notify", src, "Not enough money in your bank", "error")
elseif bankB >= amount then elseif bankB >= amount then
TriggerEvent("qb-gangmenu:server:addAccountMoney", tostring(Player.PlayerData.gang.name), amount) exports["qb-management"]:AddGangMoney(tostring(Player.PlayerData.gang.name), amount)
--TriggerEvent("qb-gangmenu:server:addAccountMoney", tostring(Player.PlayerData.gang.name), amount)
Player.Functions.RemoveMoney('bank', amount) Wait(1500) Player.Functions.RemoveMoney('bank', amount) Wait(1500)
TriggerClientEvent("QBCore:Notify", src, "Deposited $"..cv(amount).." into the "..Player.PlayerData.gang.label.." account", "success") TriggerClientEvent("QBCore:Notify", src, "Deposited $"..cv(amount).." into the "..Player.PlayerData.gang.label.." account", "success")
end end
@@ -149,7 +161,8 @@ RegisterServerEvent('jim-payments:server:ATM:use', function(amount, billtype, ba
local result = MySQL.Sync.fetchAll('SELECT * FROM players WHERE charinfo LIKE ?', {query}) local result = MySQL.Sync.fetchAll('SELECT * FROM players WHERE charinfo LIKE ?', {query})
if result[1] ~= nil then if result[1] ~= nil then
local Reciever = QBCore.Functions.GetPlayerByCitizenId(result[1].citizenid) local Reciever = QBCore.Functions.GetPlayerByCitizenId(result[1].citizenid)
TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.gang.name), amount) exports["qb-management"]:RemoveGangMoney(tostring(Player.PlayerData.gang.name), amount)
--TriggerEvent("qb-bossmenu:server:removeAccountMoney", tostring(Player.PlayerData.gang.name), amount)
if Reciever ~= nil then if Reciever ~= nil then
Reciever.Functions.AddMoney('bank', amount) Reciever.Functions.AddMoney('bank', amount)
TriggerClientEvent("QBCore:Notify", src, "Sent $"..amount.." to "..Reciever.PlayerData.charinfo.firstname.." "..Reciever.PlayerData.charinfo.lastname, "success") TriggerClientEvent("QBCore:Notify", src, "Sent $"..amount.." to "..Reciever.PlayerData.charinfo.firstname.." "..Reciever.PlayerData.charinfo.lastname, "success")
@@ -233,7 +246,7 @@ RegisterServerEvent("jim-payments:server:ATM:give", function(citizen, price)
Player.Functions.RemoveMoney('cash', amount) Player.Functions.RemoveMoney('cash', amount)
TriggerClientEvent("QBCore:Notify", source, "You gave "..Reciever.PlayerData.charinfo.firstname.." $"..cv(amount), "success") TriggerClientEvent("QBCore:Notify", source, "You gave "..Reciever.PlayerData.charinfo.firstname.." $"..cv(amount), "success")
Reciever.Functions.AddMoney('cash', amount) Reciever.Functions.AddMoney('cash', amount)
TriggerClientEvent("QBCore:Notify", tonumber(citizen), "You got $"..cv(amount).." from "..Reciever.PlayerData.charinfo.firstname, "success") TriggerClientEvent("QBCore:Notify", tonumber(citizen), "You got $"..cv(amount).." from "..Player.PlayerData.charinfo.firstname, "success")
elseif balance < amount then elseif balance < amount then
TriggerClientEvent("QBCore:Notify", source, "You don't have enough cash to give", "error") TriggerClientEvent("QBCore:Notify", source, "You don't have enough cash to give", "error")
end end

View File

@@ -38,20 +38,20 @@ RegisterNetEvent('jim-payments:client:Charge', function(data)
if nearbyList[#nearbyList] == nil then TriggerEvent("QBCore:Notify", "No one near by to charge", "error") return end if nearbyList[#nearbyList] == nil then TriggerEvent("QBCore:Notify", "No one near by to charge", "error") return end
local dialog = exports['qb-input']:ShowInput({ header = img..PlayerJob.label.." Cash Register", submitText = "Send", local dialog = exports['qb-input']:ShowInput({ header = img..PlayerJob.label.." Cash Register", submitText = "Send",
inputs = { inputs = {
{ text = " ", name = "citizen", type = "select", options = nearbyList }, { text = " ", name = "citizen", type = "select", options = nearbyList },
{ type = 'radio', name = 'billtype', text = 'Payment Type', options = { { value = "cash", text = "Cash" }, { value = "card", text = "Card" } } }, { type = 'radio', name = 'billtype', text = 'Payment Type', options = { { value = "cash", text = "Cash" }, { value = "bank", text = "Card" } } },
{ type = 'number', isRequired = true, name = 'price', text = '💵 Amount to Charge' },} { type = 'number', isRequired = true, name = 'price', text = '💵 Amount to Charge' },}
}) })
if dialog then if dialog then
if not dialog.citizen or not dialog.price then return end if not dialog.citizen or not dialog.price then return end
TriggerServerEvent('jim-payments:server:Charge', dialog.citizen, dialog.price, dialog.billtype) TriggerServerEvent('jim-payments:server:Charge', dialog.citizen, dialog.price, dialog.billtype, data.img)
end end
end) end)
end) end)
RegisterNetEvent('jim-payments:Tickets:Menu', function() RegisterNetEvent('jim-payments:Tickets:Menu', function()
local amount = nil local amount = nil
while amount == nil do QBCore.Functions.TriggerCallback('jim-payments:Ticket:Count', function(cb) amount = cb end) Citizen.Wait(1) end local p = promise.new() QBCore.Functions.TriggerCallback('jim-payments:Ticket:Count', function(cb) p:resolve(cb) end) amount = Citizen.Await(p)
for k, v in pairs(Config.Jobs) do if k ~= PlayerJob.name then for k, v in pairs(Config.Jobs) do if k ~= PlayerJob.name then
else exports['qb-menu']:openMenu({ else exports['qb-menu']:openMenu({
{ isMenuHeader = true, header = "🧾 "..PlayerJob.label.." Receipts 🧾", txt = "Do you want trade your receipts for payment?" }, { isMenuHeader = true, header = "🧾 "..PlayerJob.label.." Receipts 🧾", txt = "Do you want trade your receipts for payment?" },
@@ -62,9 +62,10 @@ RegisterNetEvent('jim-payments:Tickets:Menu', function()
end end
end) end)
RegisterNetEvent("jim-payments:client:PayPopup", function(amount, biller, billtype) RegisterNetEvent("jim-payments:client:PayPopup", function(amount, biller, billtype, img)
if img == nil then img = "" end
exports['qb-menu']:openMenu({ exports['qb-menu']:openMenu({
{ isMenuHeader = true, header = "🧾 "..PlayerJob.label.." Payment 🧾", txt = "Do you want accept the payment?" }, { isMenuHeader = true, header = img.."🧾 "..PlayerJob.label.." Payment 🧾", txt = "Do you want accept the payment?" },
{ isMenuHeader = true, header = "", txt = billtype:gsub("^%l", string.upper).." Payment: $"..amount }, { isMenuHeader = true, header = "", txt = billtype:gsub("^%l", string.upper).." Payment: $"..amount },
{ header = "✅ Yes", txt = "", params = { isServer = true, event = "jim-payments:server:PayPopup", args = { accept = true, amount = amount, biller = biller, billtype = billtype } } }, { header = "✅ Yes", txt = "", params = { isServer = true, event = "jim-payments:server:PayPopup", args = { accept = true, amount = amount, biller = biller, billtype = billtype } } },
{ header = "❌ No", txt = "", params = { isServer = true, event = "jim-payments:server:PayPopup", args = { accept = false, amount = amount, biller = biller, billtype = billtype } } }, }) { header = "❌ No", txt = "", params = { isServer = true, event = "jim-payments:server:PayPopup", args = { accept = false, amount = amount, biller = biller, billtype = billtype } } }, })

View File

@@ -1,4 +1,4 @@
print("Jim-Payments v2.1 - Payments Script by Jimathy") print("Jim-Payments v2.2 - 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. -- If you need support I now have a discord available, it helps me keep track of issues and give better support.
@@ -18,17 +18,24 @@ Config.ATMBlips = false -- Enable this if you are a pyscho and need every ATM to
Config.PhoneBank = true -- Set this to false to use the popup payment system FOR CARD/BANK PAYMENTS instead of using phone invoices Config.PhoneBank = true -- Set this to false to use the popup payment system FOR CARD/BANK PAYMENTS instead of using phone invoices
-- This doesn't affect Cash payments as they by default use confirmation now -- This doesn't affect Cash payments as they by default use confirmation now
-- This is helpful for phones that don't support invoices well -- This is helpful for phones that don't support invoices well
Config.Commission = false -- Set this to true to enable Commissions and give the person charging a percentage of the total
Config.CommissionAll = false -- Set this to true to give commission to workers clocked in
Config.CommissionDouble = false -- Set this to true if you want the person charging to get double Commission
Config.CommissionLimit = false -- If true, this limits the Commission to only be given if over the "MinAmountForTicket". If false, Commission will be given for any amount
-- MinAmountforTicket should be your cheapest item -- MinAmountforTicket should be your cheapest item
-- PayPerTicket should never be higher than MinAmountforTicket -- PayPerTicket should never be higher than MinAmountforTicket
-- Commission is a percentage eg "0.10" becomes 10%
Config.Jobs = { Config.Jobs = {
['beanmachine'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['beanmachine'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['burgershot'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['burgershot'] = { MinAmountforTicket = 50, PayPerTicket = 50 , Commission = 0.10,},
['catcafe'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['catcafe'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['henhouse'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['henhouse'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['pizzathis'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['pizzathis'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['popsdiner'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['popsdiner'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['tequilala'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['tequilala'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['vanilla'] = { MinAmountforTicket = 50, PayPerTicket = 50 }, ['vanilla'] = { MinAmountforTicket = 50, PayPerTicket = 50, Commission = 0.10, },
['mechanic'] = { MinAmountforTicket = 1000, PayPerTicket = 500 }, ['mechanic'] = { MinAmountforTicket = 1000, PayPerTicket = 500, Commission = 0.10, },
} }

View File

@@ -1,13 +1,14 @@
name "Jim-Payments" name "Jim-Payments"
author "Jimathy" author "Jimathy"
version "v2" version "v2.2"
description "Payment Script By Jimathy" description "Payment Script By Jimathy"
fx_version "cerulean" fx_version "cerulean"
game "gta5" game "gta5"
dependencies { dependencies {
'qb-input', 'qb-input',
'qb-target' 'qb-target',
'qb-management'
} }
client_scripts { client_scripts {

View File

@@ -13,18 +13,45 @@ end
--QBCore.Commands.Add("cashregister", "Use mobile cash register", {}, false, function(source) TriggerClientEvent("jim-payments:client:Charge", source, true) end) --QBCore.Commands.Add("cashregister", "Use mobile cash register", {}, false, function(source) TriggerClientEvent("jim-payments:client:Charge", source, true) end)
RegisterServerEvent('jim-payments:Tickets:Give', function(amount, job) RegisterServerEvent('jim-payments:Tickets:Give', function(data, biller)
if Config.TicketSystem then --Find the biller from their citizenid
if biller == nil then
for k, v in pairs(QBCore.Functions.GetPlayers()) do for k, v in pairs(QBCore.Functions.GetPlayers()) do
local Player = QBCore.Functions.GetPlayer(v) local Player = QBCore.Functions.GetPlayer(v)
if Player ~= nil then if Player.PlayerData.citizenid == data.senderCitizenId then biller = Player end
if Player.PlayerData.job.name == job and Player.PlayerData.job.onduty then end
if amount >= Config.Jobs[job].MinAmountforTicket then end
if Config.TicketSystem then
if data.amount >= Config.Jobs[data.society].MinAmountforTicket then
for k, v in pairs(QBCore.Functions.GetPlayers()) do
local Player = QBCore.Functions.GetPlayer(v)
if Player ~= nil then
if Player.PlayerData.job.name == data.society and Player.PlayerData.job.onduty then
Player.Functions.AddItem('payticket', 1, false, {["quality"] = nil}) Player.Functions.AddItem('payticket', 1, false, {["quality"] = nil})
TriggerClientEvent('QBCore:Notify', Player.PlayerData.source, 'Receipt received', 'success') TriggerClientEvent('QBCore:Notify', Player.PlayerData.source, 'Receipt received', 'success')
TriggerClientEvent('inventory:client:ItemBox', Player.PlayerData.source, QBCore.Shared.Items['payticket'], "add", 1) TriggerClientEvent('inventory:client:ItemBox', Player.PlayerData.source, QBCore.Shared.Items['payticket'], "add", 1)
elseif amount < Config.Jobs[job].MinAmountforTicket then end
TriggerClientEvent("QBCore:Notify", Player.PlayerData.source, "Amount too low, didn't receive a receipt", "error") end
end
end
end
-- Commission section, does each config option separately
local comm = tonumber(Config.Jobs[data.society].Commission)
if Config.Commission and comm ~= 0 then
if Config.CommissionLimit and data.amount < Config.Jobs[data.society].MinAmountforTicket then return end
if Config.CommissionDouble then
biller.Functions.AddMoney("bank", math.floor(tonumber(data.amount) * (comm *2)))
TriggerClientEvent("QBCore:Notify", biller.PlayerData.source, "Recieved $"..math.floor(tonumber(data.amount) * (comm *2)).." in Commission", "success")
else biller.Functions.AddMoney("bank", math.floor(tonumber(data.amount) *comm))
TriggerClientEvent("QBCore:Notify", biller.PlayerData.source, "Recieved $"..math.floor(tonumber(data.amount) * comm).." in Commission", "success")
end
if Config.CommissionAll then
for k, v in pairs(QBCore.Functions.GetPlayers()) do
local Player = QBCore.Functions.GetPlayer(v)
if Player ~= nil and Player ~= biller then
if Player.PlayerData.job.name == data.society and Player.PlayerData.job.onduty then
Player.Functions.AddMoney("bank", math.floor(tonumber(data.amount) * comm))
TriggerClientEvent("QBCore:Notify", Player.PlayerData.source, "Recieved $"..math.floor(tonumber(data.amount) * comm).." in Commission", "success")
end end
end end
end end
@@ -51,22 +78,23 @@ QBCore.Functions.CreateCallback('jim-payments:Ticket:Count', function(source, cb
cb(amount) cb(amount)
end) end)
RegisterServerEvent("jim-payments:server:Charge", function(citizen, price, billtype) RegisterServerEvent("jim-payments:server:Charge", function(citizen, price, billtype, img)
local src = source local src = source
local biller = QBCore.Functions.GetPlayer(src) local biller = QBCore.Functions.GetPlayer(src)
local billed = QBCore.Functions.GetPlayer(tonumber(citizen)) local billed = QBCore.Functions.GetPlayer(tonumber(citizen))
local amount = tonumber(price) local amount = tonumber(price)
local balance = billed.Functions.GetMoney(billtype)
if amount and amount > 0 then if amount and amount > 0 then
if billtype == "cash" then balance = billed.Functions.GetMoney(billtype) if balance < amount then
if balance >= amount then TriggerClientEvent("QBCore:Notify", src, "Customer doesn't have enough cash to pay", "error")
TriggerClientEvent("jim-payments:client:PayPopup", billed.PlayerData.source, amount, src, billtype) TriggerClientEvent("QBCore:Notify", tonumber(citizen), "You don't have enough cash to pay", "error")
elseif balance < amount then return
TriggerClientEvent("QBCore:Notify", src, "Customer doesn't have enough cash to pay", "error") end
TriggerClientEvent("QBCore:Notify", tonumber(citizen), "You don't have enough cash to pay", "error") if billtype == "cash" then
end TriggerClientEvent("jim-payments:client:PayPopup", billed.PlayerData.source, amount, src, billtype, img)
elseif billtype == "card" then elseif billtype == "bank" then
if Config.PhoneBank == false then if Config.PhoneBank == false then
TriggerClientEvent("jim-payments:client:PayPopup", billed.PlayerData.source, amount, src, billtype) TriggerClientEvent("jim-payments:client:PayPopup", billed.PlayerData.source, amount, src, billtype, img)
else else
MySQL.Async.insert( MySQL.Async.insert(
'INSERT INTO phone_invoices (citizenid, amount, society, sender, sendercitizenid) VALUES (?, ?, ?, ?, ?)', 'INSERT INTO phone_invoices (citizenid, amount, society, sender, sendercitizenid) VALUES (?, ?, ?, ?, ?)',
@@ -83,9 +111,13 @@ RegisterServerEvent("jim-payments:server:PayPopup", function(data)
local src = source local src = source
local billed = QBCore.Functions.GetPlayer(src) local billed = QBCore.Functions.GetPlayer(src)
local biller = QBCore.Functions.GetPlayer(tonumber(data.biller)) local biller = QBCore.Functions.GetPlayer(tonumber(data.biller))
local newdata = { senderCitizenId = biller.PlayerData.citizenid, society = biller.PlayerData.job.name, amount = data.amount }
if data.accept == true then if data.accept == true then
billed.Functions.RemoveMoney(tostring(data.billtype), data.amount) TriggerEvent("qb-bossmenu:server:addAccountMoney", tostring(biller.PlayerData.job.name), data.amount) billed.Functions.RemoveMoney(tostring(data.billtype), data.amount)
TriggerEvent('jim-payments:Tickets:Give', data.amount, tostring(billed.PlayerData.job.name)) exports["qb-management"]:AddMoney(tostring(biller.PlayerData.job.name), data.amount)
--TriggerEvent("qb-bossmenu:server:addAccountMoney", tostring(biller.PlayerData.job.name), data.amount)
TriggerEvent('jim-payments:Tickets:Give', newdata, biller)
TriggerClientEvent("QBCore:Notify", data.biller, billed.PlayerData.charinfo.firstname.." accepted the payment", "success")
elseif data.accept == false then elseif data.accept == false then
TriggerClientEvent("QBCore:Notify", src, "You declined the payment") TriggerClientEvent("QBCore:Notify", src, "You declined the payment")
TriggerClientEvent("QBCore:Notify", data.biller, billed.PlayerData.charinfo.firstname.." declined the payment", "error") TriggerClientEvent("QBCore:Notify", data.biller, billed.PlayerData.charinfo.firstname.." declined the payment", "error")