Files
sky_phone-sky-systems/sky_phone/source/client/skyride.lua
T
2026-08-13 17:36:23 +02:00

129 lines
3.4 KiB
Lua

local server_callbacks = {
"skyride:bootstrap",
"skyride:update-profile",
"skyride:quote",
"skyride:request",
"skyride:set-driver-status",
"skyride:accept",
"skyride:arrive",
"skyride:start",
"skyride:complete",
"skyride:cancel",
"skyride:rate",
"skyride:history",
}
local function normalize_person(person)
if type(person) ~= "table" then
return
end
if person.avatarUrl == false then
person.avatarUrl = json.null
end
end
local function normalize_ride(ride)
if type(ride) ~= "table" then
return
end
normalize_person(ride.passenger)
if ride.driver == false then
ride.driver = json.null
return
end
if type(ride.driver) ~= "table" then
return
end
normalize_person(ride.driver)
local vehicle = ride.driver.vehicle
local model_hash = type(vehicle) == "table" and tonumber(vehicle.model) or nil
if not model_hash then
return
end
local display_name = GetDisplayNameFromVehicleModel(model_hash)
local label = display_name and GetLabelText(display_name) or nil
if label and label ~= "NULL" and label ~= "CARNOTFOUND" then
vehicle.model = label
end
end
local function normalize_rides(rides)
if type(rides) ~= "table" then
return
end
for index = 1, #rides do
normalize_ride(rides[index])
end
end
local function normalize_state(data)
if type(data) ~= "table" then
return
end
if data.activeRide == false then
data.activeRide = json.null
else
normalize_ride(data.activeRide)
end
if data.pendingRating == false then
data.pendingRating = json.null
else
normalize_ride(data.pendingRating)
end
normalize_rides(data.availableRequests)
normalize_rides(data.history)
normalize_rides(data.items)
if type(data.profile) == "table" then
if data.profile.acceptanceRate == false then
data.profile.acceptanceRate = json.null
end
if data.profile.avatarUrl == false then
data.profile.avatarUrl = json.null
end
if data.profile.avatarMediaId == false then
data.profile.avatarMediaId = json.null
end
if data.profile.earningsToday == false then
data.profile.earningsToday = json.null
end
end
end
for index = 1, #server_callbacks do
local callback_name = server_callbacks[index]
RegisterNUICallback(callback_name, function(data, cb)
if type(data) ~= "table" then
cb({ success = false, error = "invalid_request" })
return
end
local result = Bridge.Callbacks.Trigger("sky_phone:" .. callback_name, data)
if not result then
cb({ success = false, error = "request_failed" })
return
end
if result.success and type(result.data) == "table" then
normalize_state(result.data)
end
cb(result)
end)
end
RegisterNUICallback("skyride:get-player-coords", function(_, cb)
local coords = GetEntityCoords(PlayerPedId())
cb({
success = true,
data = {
coords = {
x = coords.x,
y = coords.y,
z = coords.z,
},
},
})
end)
RegisterNetEvent("sky_phone:skyride:changed", function(data)
normalize_state(data)
SendNUIMessage({ type = "skyride:changed", data = data })
end)