218 lines
6.9 KiB
Lua
218 lines
6.9 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
|
||
|
local function GetBuffs()
|
||
|
-- If making multiple calls to GetBuffs we dont get a result of the 2nd call
|
||
|
-- The wait seems to fix the issue
|
||
|
Wait(500)
|
||
|
local p = promise.new()
|
||
|
QBCore.Functions.TriggerCallback('buffs:server:fetchBuffs', function(result)
|
||
|
p:resolve(result)
|
||
|
end)
|
||
|
return Citizen.Await(p)
|
||
|
end
|
||
|
|
||
|
--- Method to fetch if player has buff with name and is not nil
|
||
|
--- @param buffName string - Name of the buff
|
||
|
--- @return bool
|
||
|
local function HasBuff(buffName)
|
||
|
local buffs = GetBuffs()
|
||
|
if buffs then
|
||
|
return buffs[buffName] ~= nil
|
||
|
end
|
||
|
return false
|
||
|
end exports('HasBuff', HasBuff)
|
||
|
|
||
|
--- Method to fetch buff details if player has buff active
|
||
|
--- @param buffName string - Name of the buff
|
||
|
--- @return table
|
||
|
local function GetBuff(buffName)
|
||
|
local buffData = Config.Buffs[buffName]
|
||
|
-- Check if we were given a correct buff name
|
||
|
if buffData == nil then
|
||
|
return nil
|
||
|
end
|
||
|
|
||
|
local buffs = GetBuffs()
|
||
|
local time = nil
|
||
|
|
||
|
if buffs then
|
||
|
time = buffs[buffName]
|
||
|
end
|
||
|
|
||
|
if time == nil then
|
||
|
time = 0
|
||
|
end
|
||
|
|
||
|
if buffData.type == 'buff' then
|
||
|
return {
|
||
|
time = time,
|
||
|
buffName = buffName,
|
||
|
iconName = buffData.iconName,
|
||
|
iconColor = buffData.iconColor,
|
||
|
progressColor = buffData.progressColor,
|
||
|
progressValue = (time * 100) / buffData.maxTime,
|
||
|
type = buffData.type,
|
||
|
}
|
||
|
else
|
||
|
return {
|
||
|
time = time,
|
||
|
iconColor = buffData.iconColor,
|
||
|
maxTime = buffData.maxTime,
|
||
|
type = buffData.type,
|
||
|
}
|
||
|
end
|
||
|
end exports('GetBuff', GetBuff)
|
||
|
|
||
|
--- Method to fetch nui details of all buffs, used when a player that had buffs
|
||
|
--- logged out and back in to the server
|
||
|
--- @return table | nil
|
||
|
local function GetBuffNUIData()
|
||
|
local buffs = GetBuffs()
|
||
|
|
||
|
if buffs == nil then
|
||
|
return nil
|
||
|
end
|
||
|
|
||
|
local nuiData = {}
|
||
|
|
||
|
for buffName, buffTime in pairs(buffs) do
|
||
|
local buffData = Config.Buffs[buffName]
|
||
|
|
||
|
if buffData.type == 'buff' then
|
||
|
nuiData[buffName] = {
|
||
|
buffName = buffName,
|
||
|
display = true,
|
||
|
iconName = buffData.iconName,
|
||
|
iconColor = buffData.iconColor,
|
||
|
progressColor = buffData.progressColor,
|
||
|
progressValue = (buffTime * 100) / buffData.maxTime,
|
||
|
}
|
||
|
else
|
||
|
nuiData[buffName] = {
|
||
|
display = true,
|
||
|
enhancementName = buffName,
|
||
|
iconColor = buffData.iconColor
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return nuiData
|
||
|
end exports('GetBuffNUIData', GetBuffNUIData)
|
||
|
|
||
|
--- Method to add buff to player
|
||
|
--- @param playerID string - Player identifier
|
||
|
--- @param buffName string - Name of the buff
|
||
|
--- @return bool - Success of removing the player buff
|
||
|
local function AddBuff(buffName, time)
|
||
|
local p = promise.new()
|
||
|
QBCore.Functions.TriggerCallback('buffs:server:addBuff', function(result)
|
||
|
p:resolve(result)
|
||
|
end, buffName, time)
|
||
|
return Citizen.Await(p)
|
||
|
end exports('AddBuff', AddBuff)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
--- Custom Buffs, edit to your liking ---
|
||
|
|
||
|
--- Method to add stamina buff to player
|
||
|
--- @param time - Time in ms the health buff will be active
|
||
|
--- @param value - The amount of speed boost the player will recieve
|
||
|
local hasStaminaBuffActive = false
|
||
|
local function StaminaBuffEffect(time, value)
|
||
|
AddBuff("stamina", time)
|
||
|
if not hasStaminaBuffActive then
|
||
|
hasStaminaBuffActive = true
|
||
|
CreateThread(function()
|
||
|
SetRunSprintMultiplierForPlayer(PlayerId(), value)
|
||
|
while exports['ps-buffs']:HasBuff("stamina") do
|
||
|
Wait(500)
|
||
|
SetPlayerStamina(PlayerId(), GetPlayerStamina(PlayerId()) + math.random(1,10))
|
||
|
end
|
||
|
SetRunSprintMultiplierForPlayer(PlayerId(), 1.0)
|
||
|
hasStaminaBuffActive = false
|
||
|
end)
|
||
|
end
|
||
|
end exports('StaminaBuffEffect', StaminaBuffEffect)
|
||
|
|
||
|
--- Method to add swimming buff to player
|
||
|
--- @param time - Time in ms the health buff will be active
|
||
|
--- @param value - The amount of swimming speed boost the player will recieve
|
||
|
local hasSwimmingBuffActive = false
|
||
|
local function SwimmingBuffEffect(time, value)
|
||
|
AddBuff("swimming", time)
|
||
|
if not hasSwimmingBuffActive then
|
||
|
hasSwimmingBuffActive = true
|
||
|
CreateThread(function()
|
||
|
SetSwimMultiplierForPlayer(PlayerId(), value)
|
||
|
while exports['ps-buffs']:HasBuff("swimming") do
|
||
|
Wait(500)
|
||
|
SetPlayerStamina(PlayerId(), GetPlayerStamina(PlayerId()) + math.random(1,10))
|
||
|
end
|
||
|
SetSwimMultiplierForPlayer(PlayerId(), 1.0)
|
||
|
hasSwimmingBuffActive = false
|
||
|
end)
|
||
|
end
|
||
|
end exports('SwimmingBuffEffect', SwimmingBuffEffect)
|
||
|
|
||
|
--- Method to add health buff to player
|
||
|
--- @param time - Time in ms the health buff will be active
|
||
|
--- @param value - The amount of HP the player will gain over time
|
||
|
|
||
|
local hasHealthBuffActive = false
|
||
|
local function AddHealthBuff(time, value)
|
||
|
AddBuff("super-health", time)
|
||
|
if not hasHealthBuffActive then
|
||
|
hasHealthBuffActive = true
|
||
|
CreateThread(function()
|
||
|
while HasBuff("super-health") do
|
||
|
Wait(5000)
|
||
|
if GetEntityHealth(PlayerPedId()) < 200 then
|
||
|
SetEntityHealth(PlayerPedId(), GetEntityHealth(PlayerPedId()) + value)
|
||
|
end
|
||
|
end
|
||
|
hasHealthBuffActive = false
|
||
|
end)
|
||
|
end
|
||
|
end exports('AddHealthBuff', AddHealthBuff)
|
||
|
|
||
|
--- Method to add armor buff to player
|
||
|
--- @param time - Time in ms the health buff will be active
|
||
|
--- @param value - The amount of Armor the player will gain over time
|
||
|
|
||
|
local hasArmorBuffActive = false
|
||
|
local function AddArmorBuff(time, value)
|
||
|
AddBuff("super-armor", time)
|
||
|
if not hasArmorBuffActive then
|
||
|
hasArmorBuffActive = true
|
||
|
CreateThread(function()
|
||
|
while HasBuff("super-armor") do
|
||
|
Wait(5000)
|
||
|
if GetPedArmour(PlayerPedId()) < 100 then
|
||
|
SetPedArmour(PlayerPedId(), GetPedArmour(PlayerPedId()) + value)
|
||
|
end
|
||
|
end
|
||
|
hasArmorBuffActive = false
|
||
|
end)
|
||
|
end
|
||
|
end exports('AddArmorBuff', AddArmorBuff)
|
||
|
|
||
|
--- Method to add stress buff to player
|
||
|
--- @param time - Time in ms the stress buff will be active
|
||
|
--- @param value - The amount of stress the player will lose every 5 seconds
|
||
|
local hasStressBuffActive = false
|
||
|
local function AddStressBuff(time, value)
|
||
|
AddBuff("super-stress", time)
|
||
|
if not hasStressBuffActive then
|
||
|
hasStressBuffActive = true
|
||
|
CreateThread(function()
|
||
|
while HasBuff("super-stress") do
|
||
|
Wait(5000)
|
||
|
TriggerServerEvent("hud:server:RelieveStress", value)
|
||
|
end
|
||
|
hasStressBuffActive = false
|
||
|
end)
|
||
|
end
|
||
|
end exports('AddStressBuff', AddStressBuff)
|