added new scripts and eup

This commit is contained in:
KingMcDonalds
2025-05-19 16:45:39 -07:00
parent 92357c972e
commit 5fa9cc69be
292 changed files with 10254 additions and 0 deletions
@@ -0,0 +1,247 @@
-- IsDuplicityVersion - is used to determine if the function is called by the server or the client (true == from server)
--------------------- SHARED FUNCTIONS ---------------------
local Core = nil
--- @return table Core The core object of the framework
function GetCoreObject()
if not Core then
if Config.Framework == "esx" then
Core = exports["es_extended"]:getSharedObject()
elseif Config.Framework == "qb" or Config.Framework == "qbx" then
Core = exports["qb-core"]:GetCoreObject()
end
end
return Core
end
Core = Config.Framework ~= "none" and GetCoreObject() or nil
--- @param text string The text to show in the notification
--- @param notificationType string The type of notification to show ex: 'success', 'error', 'info'
--- @param src - number|nil The source of the player - only required when called from server side
function Notify(text, notificationType, src)
if IsDuplicityVersion() then
if Config.Notify == "esx" then
TriggerClientEvent("esx:showNotification", src, text)
elseif Config.Notify == "qb" then
TriggerClientEvent("QBCore:Notify", src, text, notificationType)
elseif Config.Notify == "ox" then
TriggerClientEvent("ox_lib:notify", src, {
description = text,
type = notificationType,
})
end
else
if Config.Notify == "esx" then
Core.ShowNotification(text)
elseif Config.Notify == "qb" then
Core.Functions.Notify(text, notificationType)
elseif Config.Notify == "ox" then
lib.notify({
description = text,
type = notificationType,
})
end
end
end
--- @param source number|nil The source of the player
--- @return table PlayerData The player data of the player
function GetPlayerData(source)
local Core = GetCoreObject()
if IsDuplicityVersion() then
if Config.Framework == "esx" then
-- TODO: does esx not use citizenId? need to find what it uses
return Core.GetPlayerFromId(source)
elseif Config.Framework == "qb" then
return Core.Functions.GetPlayer(source).PlayerData
elseif Config.Framework == "qbx" then
return exports.qbx_core:GetPlayer(source).PlayerData
end
else
if Config.Framework == "esx" then
return Core.GetPlayerData()
elseif Config.Framework == "qb" then
return Core.Functions.GetPlayerData()
elseif Config.Framework == "qbx" then
return exports.qbx_core:GetPlayerData()
end
end
end
--------------------- CLIENT FUNCTIONS ---------------------
-- Triggers a progressbar on the client
-- This uses the same method signature as QBCore Progressbar
--- @param name string The name of the progressbar
--- @param label string The label to show on the progressbar
--- @param duration number The duration of the progressbar
--- @param useWhileDead boolean Whether or not the progressbar should be used while dead
--- @param canCancel boolean Whether or not the progressbar can be cancelled
--- @param disableControls table Contains the controls to disable while the progressbar is active (disableMovement, disableCarMovement, disableMouse, disableCombat)
--- @param animation table Contains the animation to play while the progressbar is active (animDict, anim, flags)
--- @param prop table Contains the prop to show while the progressbar is active (model, bone, coords, rotation)
--- @param propTwo table Contains the prop to show while the progressbar is active (model, bone, coords, rotation)
--- @param onFinish function The callback function to call when the progressbar finishes
--- @param onCancel function The callback function to call when the progressbar is cancelled
function Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel)
if IsDuplicityVersion() then return end
if Config.ProgessBar == "none" then
onFinish()
elseif Config.ProgessBar == "qb" then
return Core.Functions.Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel)
elseif Config.ProgessBar == "ox" then
local props = {}
if prop then
props[1] = {
model = prop.model,
bone = prop.bone,
coords = prop.coords,
rotation = prop.rotation,
}
end
if propTwo then
props[2] = {
model = propTwo.model,
bone = propTwo.bone,
coords = propTwo.coords,
rotation = propTwo.rotation,
}
end
if lib.progressBar({
name = name,
label = label,
duration = duration,
useWhileDead = useWhileDead,
canCancel = canCancel,
disable = {
move = disableControls.disableMovement,
car = disableControls.disableCarMovement,
mouse = disableControls.disableMouse,
combat = disableControls.disableCombat,
},
anim = {
dict = animation.animDict,
clip = animation.anim,
flag = animation.flags,
},
prop = props,
}) then
onFinish()
else
onCancel()
end
else
warn("Invalid Config.ProgessBar: <" .. tostring(Config.ProgessBar) .. ">. Update Progressbar in framework.lua.")
end
end
-- Takes a prop model and the targetOptions and adds it to the target script so that this prop model is targetable
--- @param model string The name of the prop model to target
--- @param targetOptions table The options to pass to the target script
--- ex: targetOptions = { distance = num, options: { offset = { x = 0.0, y = 0.0, z = 0.0 }, rotation = { x = 0.0, y = 0.0, z = 0.0 } , animationDict = "", animationName = "" } }
function AddTargetModel(modelName, targetOptions)
if IsDuplicityVersion() then return end
if Config.Target == "qb" then
exports["qb-target"]:AddTargetModel(modelName, targetOptions)
elseif Config.Target == "ox" then
-- ox target expects each option to have a distance on it,
-- Append the distance value to each option
for _, option in pairs(targetOptions.options) do
option.distance = targetOptions.distance
end
exports.ox_target:addModel(modelName, targetOptions.options)
else
warn("Invalid Config.Target: <" .. tostring(Config.Target) .. ">. Update AddTargetModel in framework.lua.")
end
end
-- Creates a log entry when an item is placed or picked up
--- @param itemName string The name of the item that was placed or picked up
--- @param isItemPlaced boolean True if the item was placed, false if the item was picked up
function CreateLog(itemName, isItemPlaced)
if IsDuplicityVersion() or Config.Log == "none" then return end
local playerId = PlayerId()
local playerName = GetPlayerName(playerId)
local PlayerData = GetPlayerData()
local color = isItemPlaced and "red" or "green"
local action = isItemPlaced and "Placed" or "Picked up"
local logMessage = "**" .. playerName .. "** (" .. PlayerData.charinfo.firstname .. " " .. PlayerData.charinfo.lastname .. ") | CitizenId: " .. PlayerData.citizenid .. "\n Item Name: " .. itemName
if Config.Log == "none" then
return
elseif Config.Log == "qb" then
-- Be sure to add the 'itemplacement' entry to the qb-log config
TriggerServerEvent("qb-log:server:CreateLog", "itemplacement", "Item " .. action .. " By:", color, logMessage)
else
warn("Invalid Config.Log: <" .. tostring(Config.Log) .. ">. Update CreateLog in framework.lua.")
end
end
--------------------- SERVER FUNCTIONS ---------------------
-- Registers a useable item
--- @param itemName string The name of the item to register
--- @param callbackFn function The function to call when the item is used
function CreateUseableItem(itemName, callbackFn)
if not IsDuplicityVersion() then return end
if Config.Framework == "esx" then
-- ESX returns the itemName as the second parameter, itemdata as the third parameter when calling the callback function
-- We are interested in the itemData for our callback
local function ESXCallback(source, itemName, itemData)
callbackFn(source, itemData)
end
return Core.RegisterUsableItem(itemName, ESXCallback)
elseif Config.Framework == "qb" then
return Core.Functions.CreateUseableItem(itemName, callbackFn)
elseif Config.Framework == "qbx" then
return exports.qbx_core:CreateUseableItem(itemName, callbackFn)
else
warn("Invalid Config.Framework: <" .. tostring(Config.Framework) .. ">. Update CreateUseableItem in framework.lua.")
end
end
-- Adds item to the players inventory
--- @param source number The source of the player
--- @param itemName string The name of the item to add
--- @param amount number The amount of the item to add
--- @param info table Metadata to add to the item
function AddItem(source, itemName, amount, info)
if not IsDuplicityVersion() then return end
if Config.Inventory == "esx" then
local xPlayer = Core.GetPlayerFromId(source)
return xPlayer.addInventoryItem(itemName, amount)
elseif Config.Inventory == "qb" then
local Player = Core.Functions.GetPlayer(source)
TriggerClientEvent("inventory:client:ItemBox", source, Core.Shared.Items[itemName], "add")
return Player.Functions.AddItem(itemName, amount, nil, info)
elseif Config.Inventory == "ox" then
exports.ox_inventory:AddItem(source, itemName, amount, info)
else
warn("Invalid Config.Inventory: <" .. tostring(Config.Inventory) .. ">. Update AddItem in framework.lua.")
end
end
-- Removes item from the players inventory
--- @param source number The source of the player
--- @param itemName string The name of the item to remove
--- @param amount number The number of items to remove
--- @param slot number The slot of the item to remove from
function RemoveItem(source, itemName, amount, slot)
if not IsDuplicityVersion() then return end
if Config.Inventory == "esx" then
local xPlayer = Core.GetPlayerFromId(source)
return xPlayer.removeInventoryItem(itemName, amount)
elseif Config.Inventory == "qb" then
local Player = Core.Functions.GetPlayer(source)
TriggerClientEvent("inventory:client:ItemBox", source, Core.Shared.Items[itemName], "remove")
return Player.Functions.RemoveItem(itemName, amount, slot)
elseif Config.Inventory == "ox" then
exports.ox_inventory:RemoveItem(source, itemName, amount, nil, slot)
else
warn("Invalid Config.Inventory: <" .. tostring(Config.Inventory) .. ">. Update RemoveItem in framework.lua.")
end
end