Deleted the cache and batch event libraries from the codebase, including all related client, server, and shared files. Removed server-side particle library and associated client event handlers. Updated utility and clothing modules to remove cache dependencies. Improved utility logging and deprecated point functions with notices. Updated all locales to use a consistent 'PurchasedItem' message format and added Bulgarian (bg) translation. Bumped version to 0.13.1 in fxmanifest.
87 lines
3.8 KiB
Lua
87 lines
3.8 KiB
Lua
---@diagnostic disable: duplicate-set-field
|
|
Shops = Shops or {}
|
|
|
|
local registeredShops = {}
|
|
|
|
local Language = Language or Require("modules/locales/shared.lua")
|
|
local locale = Language.Locale
|
|
|
|
---This can open a shop for the client
|
|
---@param src number
|
|
---@param shopName string
|
|
---@return boolean
|
|
Shops.OpenShop = function(src, shopName)
|
|
if not shopName and not registeredShops[shopName] then return false, print("community_bridge PLAYERID "..src.." attempted to open invalid shop: "..shopName) end
|
|
TriggerClientEvent('community_bridge:Client:openShop', src, 'shop', shopName, registeredShops[shopName])
|
|
return true
|
|
end
|
|
|
|
---This will create a shop to use on the client side, shops must be registered server side and exsist in the shop inventory table to allow any purchases passed.
|
|
---@param shopName string
|
|
---@param shopInventory table
|
|
---@param shopCoords table
|
|
---@param shopGroups table
|
|
---@return boolean
|
|
Shops.CreateShop = function(shopName, shopInventory, shopCoords, shopGroups)
|
|
if not shopName and not shopInventory and not shopCoords then return false end
|
|
if registeredShops[shopName] then return true end
|
|
registeredShops[shopName] = {name = shopName, inventory = shopInventory, shopCoords = shopCoords, groups = shopGroups}
|
|
return true
|
|
end
|
|
|
|
---This is an internal event to complete a shop transaction, it will verify pass items and amounts are registered to the created shop. Please do not use this function directly.
|
|
---@param src number
|
|
---@param shopName string
|
|
---@param item string
|
|
---@param amount number
|
|
---@param account string
|
|
---@return nil
|
|
Shops.CompleteCheckout = function(src, shopName, item, amount, account)
|
|
if not src or not shopName or not item or not amount or not account then return end
|
|
if not amount or amount <= 0 then return end
|
|
|
|
local shopData = registeredShops[shopName]
|
|
if not shopData then return end
|
|
|
|
local itemData = nil
|
|
for _, data in pairs(shopData.inventory) do
|
|
if data.name == item then
|
|
itemData = data
|
|
break
|
|
end
|
|
end
|
|
if not itemData or not itemData.price then return print("community_bridge Player ID "..src.." attempted to purchase invalid item from shop: "..shopName) end
|
|
if itemData.count and itemData.count <= 0 then return Notify.SendNotify(src, locale('Shops.NotEnoughStock'), "error", 5000) end
|
|
local totalCost = tonumber(itemData.price) * amount
|
|
local balance = Framework.GetAccountBalance(src, account)
|
|
if not balance then return end
|
|
if balance <= 0 then return Notify.SendNotify(src, locale('Shops.NotEnoughMoney'), "error", 5000) end
|
|
if balance < totalCost then return Notify.SendNotify(src, locale('Shops.NotEnoughMoney'), "error", 5000) end
|
|
|
|
if not Framework.RemoveAccountBalance(src, account, totalCost) then return end
|
|
|
|
local success = Inventory.AddItem(src, itemData.name, amount)
|
|
if not success then
|
|
Framework.AddAccountBalance(src, account, totalCost)
|
|
return Notify.SendNotify(src, locale('Shops.PurchaseFailed'), "error", 5000)
|
|
end
|
|
|
|
local itemLabel = Inventory.GetItemInfo(itemData.name).label or itemData.name
|
|
Notify.SendNotify(src, locale('Shops.PurchasedItem', amount, itemLabel), "success", 5000)
|
|
end
|
|
|
|
---This is an internal event to complete a checkout, complete with multiple validations. Please do not use this event directly.
|
|
---@param shopName string
|
|
---@param item string
|
|
---@param amount number
|
|
---@param account string
|
|
RegisterNetEvent("community_bridge:Server:completeCheckout", function(shopName, item, amount, account)
|
|
local src = source
|
|
if not shopName or not item or not account or not amount then return end
|
|
if account ~= "money" and account ~= "bank" then return end
|
|
amount = tonumber(amount)
|
|
if not amount or amount <= 0 then return end
|
|
Shops.CompleteCheckout(src, shopName, item, amount, account)
|
|
end)
|
|
|
|
return Shops |