mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-29 10:01:38 +00:00
1a2189ceb8
Add server-owned warning persistence, immutable update history, publishing limits, and CityWarn callbacks. Enforce framework job, grade, duty, category, severity, session, and rate-limit checks before every state change.
145 lines
3.8 KiB
Lua
145 lines
3.8 KiB
Lua
if Bridge.Framework.Name ~= "esx" then
|
|
return
|
|
end
|
|
|
|
if GetResourceState("es_extended") ~= "started" then
|
|
error("[sky_phone] ESX is configured, but es_extended is not started.")
|
|
end
|
|
|
|
local ESX = exports["es_extended"]:getSharedObject()
|
|
|
|
local function get_player(source)
|
|
return ESX.GetPlayerFromId(source)
|
|
end
|
|
|
|
function Bridge.Framework.GetPlayers()
|
|
local players = {}
|
|
for _, player in pairs(ESX.GetExtendedPlayers()) do
|
|
players[#players + 1] = player.source
|
|
end
|
|
return players
|
|
end
|
|
|
|
function Bridge.Framework.GetIdentifier(source)
|
|
local player = get_player(source)
|
|
return player and player.identifier or nil
|
|
end
|
|
|
|
function Bridge.Framework.HasAdminGroup(source, groups)
|
|
local player = get_player(source)
|
|
if not player then
|
|
return false
|
|
end
|
|
local player_group = player.getGroup()
|
|
for _, group in ipairs(groups) do
|
|
if player_group == group then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function Bridge.Framework.GetMoney(source, account)
|
|
local player = get_player(source)
|
|
if not player then
|
|
return nil
|
|
end
|
|
if account == "cash" then
|
|
account = "money"
|
|
end
|
|
local account_data = player.getAccount(account)
|
|
return account_data and account_data.money or nil
|
|
end
|
|
|
|
function Bridge.Framework.AddMoney(source, account, amount)
|
|
local player = get_player(source)
|
|
if not player then
|
|
return false
|
|
end
|
|
if account == "cash" then
|
|
account = "money"
|
|
end
|
|
player.addAccountMoney(account, amount)
|
|
return true
|
|
end
|
|
|
|
function Bridge.Framework.RemoveMoney(source, account, amount)
|
|
local player = get_player(source)
|
|
if not player then
|
|
return false
|
|
end
|
|
if account == "cash" then
|
|
account = "money"
|
|
end
|
|
local account_data = player.getAccount(account)
|
|
if not account_data or account_data.money < amount then
|
|
return false
|
|
end
|
|
player.removeAccountMoney(account, amount)
|
|
return true
|
|
end
|
|
|
|
function Bridge.Framework.GetFirstname(source)
|
|
local player = get_player(source)
|
|
return player and player.get("firstName") or nil
|
|
end
|
|
|
|
function Bridge.Framework.GetLastname(source)
|
|
local player = get_player(source)
|
|
return player and player.get("lastName") or nil
|
|
end
|
|
|
|
function Bridge.Framework.GetCharacterName(source)
|
|
local player = get_player(source)
|
|
if not player then
|
|
return nil, nil
|
|
end
|
|
|
|
local first_name = player.get and player.get("firstName") or nil
|
|
local last_name = player.get and player.get("lastName") or nil
|
|
if first_name and first_name ~= "" and last_name and last_name ~= "" then
|
|
return first_name, last_name
|
|
end
|
|
|
|
local identifier = player.identifier
|
|
if not identifier then
|
|
return first_name, last_name
|
|
end
|
|
|
|
local rows = Bridge.Database.Query(
|
|
"SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ? LIMIT 1",
|
|
{ identifier }
|
|
)
|
|
local identity = rows[1]
|
|
if not identity then
|
|
return first_name, last_name
|
|
end
|
|
|
|
return identity.firstname or first_name, identity.lastname or last_name
|
|
end
|
|
|
|
function Bridge.Framework.GetBirthdate(source)
|
|
local player = get_player(source)
|
|
return player and (player.get("dateofbirth") or player.get("dob")) or nil
|
|
end
|
|
|
|
function Bridge.Framework.GetJob(source)
|
|
local player = get_player(source)
|
|
local job = player and player.getJob()
|
|
if not job then
|
|
return { name = "", label = "", grade = 0, gradeLabel = "", onDuty = false }
|
|
end
|
|
return {
|
|
name = job.name or "",
|
|
label = job.label or "",
|
|
grade = tonumber(job.grade) or 0,
|
|
gradeLabel = job.grade_label or job.label or "",
|
|
onDuty = true,
|
|
}
|
|
end
|
|
|
|
function Bridge.Framework.RegisterUsableItem(item_name, callback)
|
|
ESX.RegisterUsableItem(item_name, callback)
|
|
return true
|
|
end
|