Browse docs
Server Exports
Dispatch
Create a dispatch for the MDT Tablet.
exports["sky_jobs_base"]:createDispatch(
"Medical Emergency", -- title
"Caller reports an unconscious person requiring immediate medical assistance.", -- description
GetEntityCoords(PlayerPedId()), -- coords (vector3)
{ "ambulance", "firefighter" } -- jobs
)
exports["sky_jobs_base"]:createDispatch(
"Medical Emergency", -- title
"Caller reports an unconscious person requiring immediate medical assistance.", -- description
vector3(215.9, -810.2, 30.7), -- coords (vector3)
{ "ambulance", "firefighter" } -- jobs
)
Exports
killPlayer(playerId, customReason?)
Sends a kill request to the specified player's ambulance death flow. Use an optional custom reason for integrations such as overdose systems.
local sent = exports["sky_ambulancejob"]:killPlayer(playerId, "Overdose")
-- Keep the default forced-death reason:
local sentDefault = exports["sky_ambulancejob"]:killPlayer(playerId)
| Argument | Type | Description |
|---|---|---|
playerId | number | string | Positive integer server ID of an online player, or its numeric string. Local player indexes, ped handles and broadcast targets are not supported. |
customReason | string? | Optional localized plain text from your integration. Leading/trailing spaces are trimmed. Must contain 1–120 Unicode characters, valid UTF-8 and no ASCII control characters. |
Returns true when the targeted client event is sent; false for an invalid/offline player or invalid reason. true does not confirm that the player died: the client's spawn-readiness, damage protection and death hooks still apply. Call this from a trusted server resource instead of killing the ped separately first.
The custom text appears in the paramedic diagnosis view while the patient is unconscious and on the death screen when cause information is enabled. It clears on revival. Omitting the reason or passing nil preserves the existing suicide reason. Custom text does not change injuries or treatment rules. See Client Exports for the local-player version.
revive(playerId, context?)
- Purpose: Revives the supplied player.
- Arguments:
playerId(number|string): The server ID of the player that should be revived.context(table?): Optional revive context.reason(string?): Controls post-revive behaviour."command"— Admin/force revive. Skips the death timeout (combat lockout)."txadmin_heal"— Same as"command"."heal_command"— Same as"command".nil/ omitted — Normal revive. Death timeout applies as configured.
- Returns:
boolean(truewhen the revive was triggered,falsefor an invalid or offline target).
-- Normal revive
exports["sky_ambulancejob"]:revive(playerId)
-- Admin revive (skips death timeout)
exports["sky_ambulancejob"]:revive(playerId, { reason = "command" })
setGodmode(playerId, enabled)
- Purpose: Enables or disables damage protection for the supplied player through a server-authoritative export.
- Arguments:
playerId(number|string): The server ID of the player.enabled(boolean):trueenables Godmode;falsedisables it.
- Returns:
boolean(truewhen the state was applied,falsefor an invalid or offline target).
-- Enable Godmode
exports["sky_ambulancejob"]:setGodmode(playerId, true)
-- Disable Godmode
exports["sky_ambulancejob"]:setGodmode(playerId, false)
isDead(playerId)
- Purpose: Reports whether the specified player is currently flagged as dead by the ambulance job logic.
- Arguments:
playerId(number|string): The server ID of the player whose state should be checked.
- Returns:
boolean(truewhen the player is dead or downed,falseotherwise).
exports["sky_ambulancejob"]:isDead(playerId)
getDeathState(playerId)
- Purpose: Returns the server-authoritative death snapshot for the specified player, including phase, bleed-out timer, action availability, AI Medic state, and detected cause.
- Arguments:
playerId(number|string): The server ID of the player whose state should be read.
- Returns:
table|nil— the death snapshot, ornilfor an invalid or offline player.
local state = exports["sky_ambulancejob"]:getDeathState(playerId)
See External Death Screen for the complete integration flow, state fields, client actions, and security requirements.
getStretcherModels()
- Purpose: Returns the list of vehicle models configured as stretcher vehicles.
- Returns:
table— array of model hashes used for stretcher transport.
local models = exports["sky_ambulancejob"]:getStretcherModels()
Insurance
Read and write access to the health-insurance system used by the ambulance billing flow. Read exports let other resources check coverage, calculate co-pays, and enumerate providers. Write exports let admin menus, hospital welcome flows, or custom integrations grant, remove, or extend coverage without charging the player (the in-game /insurance command remains the normal purchase flow).
isInsuranceEnabled()
- Purpose: Reports whether the insurance subsystem is enabled in
Config.HealthInsurance. - Returns:
boolean—truewhen enabled.
if exports["sky_ambulancejob"]:isInsuranceEnabled() then
-- insurance features are available
end
hasInsurance(playerId)
- Purpose: Quick check whether a player currently has active insurance coverage.
- Arguments:
playerId(number): The server ID of the player.
- Returns:
boolean—truewhen insured,falseotherwise (alsofalsewhen insurance is disabled).
local insured = exports["sky_ambulancejob"]:hasInsurance(playerId)
getCoverage(playerId)
- Purpose: Returns a compact summary of the player's current coverage.
- Arguments:
playerId(number): The server ID of the player.
- Returns:
table | nil:providerId(string) — Provider ID (e.g."standard_care").label(string) — Display name (e.g."Standard Care").copayPercent(number) — Patient co-pay percentage.price(number) — Configured base premium.expiresAt(number) — Unix timestamp when coverage expires;0when no expiration.
local coverage = exports["sky_ambulancejob"]:getCoverage(playerId)
if coverage then
print(coverage.label, coverage.copayPercent, coverage.expiresAt)
end
getProvider(playerId)
- Purpose: Returns the full provider record (including
description) assigned to the player. - Arguments:
playerId(number): The server ID of the player.
- Returns:
table | nil—{ id, label, description, price, copayPercent }.
local provider = exports["sky_ambulancejob"]:getProvider(playerId)
getCopayPercent(playerId)
- Purpose: Returns the percentage the player will pay on a medical bill.
- Arguments:
playerId(number): The server ID of the player.
- Returns:
number— Co-pay percentage (100when uninsured or insurance disabled).
local percent = exports["sky_ambulancejob"]:getCopayPercent(playerId)
getExpiresAt(playerId)
- Purpose: Returns the Unix timestamp at which the player's coverage expires.
- Arguments:
playerId(number): The server ID of the player.
- Returns:
number— Unix timestamp;0when coverage has no expiration or the player is uninsured.
local expiresAt = exports["sky_ambulancejob"]:getExpiresAt(playerId)
calculateCopay(playerId, billAmount)
- Purpose: Calculates how much a patient would pay for a given bill amount, taking their active health insurance into account. If the player has no insurance or insurance is disabled, the full bill amount is returned.
- Arguments:
playerId(number): The server ID of the player whose insurance should be checked.billAmount(number): The original bill amount in dollars.
- Returns:
tablewith:copayAmount(number) — The amount the patient pays after insurance.originalAmount(number) — The original bill amount passed in.hasInsurance(boolean) — Whether the player has active insurance.provider(table?) — Insurance provider details (only when insured):id(string) — Provider ID (e.g."standard_care").label(string) — Display name (e.g."Standard Care").copayPercent(number) — The percentage the patient pays (e.g.30).
-- Example: Patient with "Standard Care" (30% copay) and a $900 bill
local result = exports["sky_ambulancejob"]:calculateCopay(playerId, 900)
print(result.copayAmount) -- 270 (patient pays 30%)
print(result.originalAmount) -- 900
print(result.hasInsurance) -- true
print(result.provider.label) -- "Standard Care"
-- Example: Patient without insurance
local result = exports["sky_ambulancejob"]:calculateCopay(playerId, 900)
print(result.copayAmount) -- 900 (full amount)
print(result.hasInsurance) -- false
calculateInsuranceCopay(playerId, billAmount)
- Purpose: Alias for
calculateCopay, kept for backward compatibility. Returns identical results.
local result = exports["sky_ambulancejob"]:calculateInsuranceCopay(playerId, 900)
getAllProviders()
- Purpose: Returns every insurance provider configured in
Config.HealthInsurance.providers, sorted alphabetically by label. - Returns:
table— array of{ id, label, description, price, copayPercent }entries (cloned, safe to mutate).
for _, provider in ipairs(exports["sky_ambulancejob"]:getAllProviders()) do
print(provider.id, provider.label, provider.price)
end
getProviderById(providerId)
- Purpose: Returns a single configured provider by its
id. - Arguments:
providerId(string): The provider identifier (e.g."basic_care").
- Returns:
table | nil.
local provider = exports["sky_ambulancejob"]:getProviderById("basic_care")
getInsuranceConfig()
- Purpose: Returns a read-only snapshot of the high-level insurance configuration.
- Returns:
table:enabled(boolean)command(string) — Chat command used to open the UI.account(string) — Account premiums are charged from.expirationOptions(table) — Sorted array of validdurationDaysvalues.
local cfg = exports["sky_ambulancejob"]:getInsuranceConfig()
print(cfg.command, cfg.account)
/insurance command for the normal player-purchase flow.setInsurance(playerId, providerId, durationDays?)
- Purpose: Assigns or refreshes coverage for the player. When called with the same provider that the player already holds, the duration is appended to the existing expiration (mirrors the in-game purchase flow).
- Arguments:
playerId(number): The server ID of the player.providerId(string): One of the configured provider IDs.durationDays(number?): Number of days the coverage lasts. Must be one ofConfig.HealthInsurance.expiration.availableDays. Defaults to the configured default duration when omitted.
- Returns:
boolean, string?—trueon success, otherwisefalseand one of:"disabled"— insurance is disabled in config."invalid_provider"— unknownproviderId."invalid_player"— player not online."invalid_identifier"— could not resolve identifier."invalid_duration"— duration not inavailableDays.
local ok, err = exports["sky_ambulancejob"]:setInsurance(playerId, "basic_care", 7)
if not ok then
print("setInsurance failed:", err)
end
removeInsurance(playerId)
- Purpose: Removes the player's coverage and clears the cache.
- Arguments:
playerId(number): The server ID of the player.
- Returns:
boolean—truewhen a coverage row was removed,falsewhen the player had no coverage.
exports["sky_ambulancejob"]:removeInsurance(playerId)
extendInsurance(playerId, additionalDays)
- Purpose: Extends an existing coverage's expiration by the given number of days. Base is the later of
nowand the currentexpiresAt. - Arguments:
playerId(number): The server ID of the player.additionalDays(number): Days to add (must be> 0).
- Returns:
boolean, string?—trueon success, otherwisefalseand one of:"disabled"— insurance is disabled in config."invalid_player"— player not online."invalid_duration"—additionalDaysis missing or non-positive."not_insured"— player has no active coverage.
local ok, err = exports["sky_ambulancejob"]:extendInsurance(playerId, 3)
Salary
Pause or resume salary payouts for ambulance employees. These exports are provided by sky_jobs_base and work for all job types.
pausePlayerSalary(playerId)
- Purpose: Pauses salary payouts for the given player.
- Arguments:
playerId(number) — the server ID of the player.
- Returns:
boolean—trueon success.
resumePlayerSalary(playerId)
- Purpose: Resumes salary payouts for the given player.
- Arguments:
playerId(number) — the server ID of the player.
- Returns:
boolean—trueon success.
isPlayerSalaryPaused(playerId)
- Purpose: Checks whether salary payouts are currently paused.
- Arguments:
playerId(number) — the server ID of the player.
- Returns:
boolean—trueif paused.
-- Pause salary (e.g. when player is AFK)
exports["sky_jobs_base"]:pausePlayerSalary(playerId)
-- Resume salary (e.g. when player returns)
exports["sky_jobs_base"]:resumePlayerSalary(playerId)
-- Check if paused
local paused = exports["sky_jobs_base"]:isPlayerSalaryPaused(playerId)
Support
Need help? Our support team is always ready to assist
Join Discord