125 lines
4.7 KiB
Lua
125 lines
4.7 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local currentDivingArea = math.random(1, #Config.CoralLocations)
|
|
local availableCoral = {}
|
|
|
|
-- Functions
|
|
|
|
local function getItemPrice(amount, price)
|
|
for k, v in pairs(Config.BonusTiers) do
|
|
local modifier = #Config.BonusTiers == k and amount >= v.minAmount or amount >= v.minAmount and amount <= v.maxAmount
|
|
if modifier then
|
|
local percent = math.random(v.minBonus, v.maxBonus) / 100
|
|
local bonus = price * percent
|
|
price = price + bonus
|
|
price = math.ceil(price)
|
|
end
|
|
end
|
|
return price
|
|
end
|
|
|
|
local function hasCoral(src)
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
availableCoral = {}
|
|
for _, v in pairs(Config.CoralTypes) do
|
|
local item = Player.Functions.GetItemByName(v.item)
|
|
if item then availableCoral[#availableCoral+1] = v end
|
|
end
|
|
return next(availableCoral)
|
|
end
|
|
|
|
-- Events
|
|
|
|
RegisterNetEvent('qb-diving:server:CallCops', function(coords)
|
|
for _, Player in pairs(QBCore.Functions.GetQBPlayers()) do
|
|
if Player then
|
|
if Player.PlayerData.job.type == "leo" and Player.PlayerData.job.onduty then
|
|
local msg = Lang:t("info.cop_msg")
|
|
TriggerClientEvent('qb-diving:client:CallCops', Player.PlayerData.source, coords, msg)
|
|
local alertData = {
|
|
title = Lang:t("info.cop_title"),
|
|
coords = coords,
|
|
description = msg
|
|
}
|
|
TriggerClientEvent("qb-phone:client:addPoliceAlert", -1, alertData)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-diving:server:SellCoral', function()
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
if hasCoral(src) then
|
|
for _, v in pairs(availableCoral) do
|
|
local item = Player.Functions.GetItemByName(v.item)
|
|
local price = item.amount * v.price
|
|
local reward = getItemPrice(item.amount, price)
|
|
Player.Functions.RemoveItem(item.name, item.amount)
|
|
Player.Functions.AddMoney('cash', reward, "sold-coral")
|
|
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items[item.name], "remove")
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.no_coral"), 'error')
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb-diving:server:TakeCoral', function(area, coral, bool)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
if not Player then return end
|
|
local coralType = math.random(1, #Config.CoralTypes)
|
|
local amount = math.random(1, Config.CoralTypes[coralType].maxAmount)
|
|
local ItemData = QBCore.Shared.Items[Config.CoralTypes[coralType].item]
|
|
if amount > 1 then
|
|
for _ = 1, amount, 1 do
|
|
Player.Functions.AddItem(ItemData["name"], 1)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, ItemData, "add")
|
|
Wait(250)
|
|
end
|
|
else
|
|
Player.Functions.AddItem(ItemData["name"], amount)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, ItemData, "add")
|
|
end
|
|
if (Config.CoralLocations[area].TotalCoral - 1) == 0 then
|
|
for _, v in pairs(Config.CoralLocations[currentDivingArea].coords.Coral) do
|
|
v.PickedUp = false
|
|
end
|
|
Config.CoralLocations[currentDivingArea].TotalCoral = Config.CoralLocations[currentDivingArea].DefaultCoral
|
|
local newLocation = math.random(1, #Config.CoralLocations)
|
|
while newLocation == currentDivingArea do
|
|
Wait(0)
|
|
newLocation = math.random(1, #Config.CoralLocations)
|
|
end
|
|
currentDivingArea = newLocation
|
|
TriggerClientEvent('qb-diving:client:NewLocations', -1)
|
|
else
|
|
Config.CoralLocations[area].coords.Coral[coral].PickedUp = bool
|
|
Config.CoralLocations[area].TotalCoral = Config.CoralLocations[area].TotalCoral - 1
|
|
end
|
|
TriggerClientEvent('qb-diving:client:UpdateCoral', -1, area, coral, bool)
|
|
end)
|
|
|
|
RegisterNetEvent('qb-diving:server:removeItemAfterFill', function()
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
Player.Functions.RemoveItem("diving_fill", 1)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items["diving_fill"], "remove")
|
|
end)
|
|
|
|
-- Callbacks
|
|
|
|
QBCore.Functions.CreateCallback('qb-diving:server:GetDivingConfig', function(_, cb)
|
|
cb(Config.CoralLocations, currentDivingArea)
|
|
end)
|
|
|
|
-- Items
|
|
|
|
QBCore.Functions.CreateUseableItem("diving_gear", function(source)
|
|
TriggerClientEvent("qb-diving:client:UseGear", source)
|
|
end)
|
|
|
|
QBCore.Functions.CreateUseableItem("diving_fill", function(source)
|
|
TriggerClientEvent("qb-diving:client:setoxygenlevel", source)
|
|
end)
|