Udkald

Tilkald en ambulance fra din egen kode

This page is only available in Danish so far. The code and the export names are the same in either language.

Server-exports. Kaldes fra server_script.

En ambulance bliver tilkaldt — den opdager ikke selv. Politi Tabletten har en skudsensor; her er kilderne /112 og disse fire exports, så dit dødsscript, dit brandvæsen, dit alarmanlæg eller spillerens telefon kan rejse et udkald.

Udkald lever kun i hukommelsen — de er flygtig radiotrafik, ikke sagsdata. De forsvinder efter Config.dispatch.callTtl (600 sekunder som standard) og overlever ikke en genstart af ressourcen.

Prioriteter

priority er hoej, mellem eller lav og styrer farven på kortet og hvor kraftigt behandlernes alarm slår ud.

Prioriteten defaulter til hoej — et udkald er akut indtil andet er vist. Det er modsat Politi Tabletten, hvor CreateCall defaulter til mellem. Sender du ikke feltet, får du et akut udkald.

Hvad der sker automatisk

Udkaldet vises på kortet hos alle behandlere på vagt. Er Config.dispatch.autoAssign slået til, bliver det tildelt næste ledige ambulance i round-robin — den enhed skifter til Udrykning på hver tablet og får beskeden direkte.

Når udkaldet udløber, frigives den tildelte enhed igen. Ellers stod ambulancen optaget resten af vagten.

assigned er nil, når ingen enhed var ledig — eller når autoAssign er slået fra. Antag aldrig at feltet findes.

Udkaldets form

Alle tre skrivende exports returnerer den samme tabel, og GetEmsCalls returnerer en liste af dem.

lua
{
    id        = 'call-7',
    title     = 'Trafikuheld, to tilskadekomne',
    location  = 'Route 68',
    priority  = 'hoej',
    time      = '14:12',
    createdAt = 1766000000,
    position  = { 1200.5, -1400.2 },
    assigned  = { id = 'gps-AMB1201', plate = 'AMB1201' },  -- eller nil
    caller    = { name = 'Kasper Holm', phone = '555-0142' },  -- kun fra
                                              -- CreateEmsCallFromPlayer
}

position er en liste, ikke en tabel med nøgler: position[1] er x og position[2] er y. Politi Tablettens CreateCall returnerer { x = …, y = … } — de to er ikke ombyttelige.

CreateEmsCall

Rejs et udkald fra din egen kode.

titlestringrequired

Kort overskrift, fx Person livløs.

locationstringrequired

Stedbetegnelse som mennesker læser, fx Route 68.

prioritystringdefault: hoej

hoej, mellem eller lav.

xnumberrequired

Verdenskoordinat.

ynumberrequired

Verdenskoordinat.

returnstable

Det oprettede udkald. Se udkaldets form.

server.lua
local call = exports.va_emsmdt:CreateEmsCall(
    'Trafikuheld, to tilskadekomne', 'Route 68', 'hoej', 1200.5, -1400.2
)

if call.assigned then
    print(('Ambulance %s rykker ud'):format(call.assigned.plate))
end

Positionen er din, ikke spillerens. CreateEmsCall tager x/y som du giver dem — den slår ikke selv op, hvor nogen står. Kommer koordinaterne fra en klient, verificér dem først, eller brug CreateEmsCallFromPlayer.

CreateEmsCallFromPlayer

Rejs et udkald på en spillers vegne. Bygget til telefon-scripts, hvor spilleren skriver eller ringer til ambulancetjenesten i stedet for at bruge /112.

Du giver source og beskeden — resten slår tabletten selv op:

  • Positionen læses server-side fra spillerens ped, som ved /112. Den kan ikke sendes med udefra, så et manipuleret opkald kan ikke sende ambulancen et vilkårligt sted hen.
  • Gadenavnet hentes fra spillerens klient. Svarer klienten ikke inden ~1 sekund, står der Ukendt placering.
  • Indringeren følger med udkaldet og vises på flådetavlen og i kort-popup'en, så behandleren kan ringe tilbage.
srcnumberrequired

Spillerens server id.

messagestringrequired

Det spilleren skrev eller sagde. Bliver udkaldets titel.

optstable

Alle felter valgfrie.

felter
prioritystringdefault: hoej

hoej · mellem · lav

locationstring

Brug denne stedbeskrivelse i stedet for klient-opslaget.

namestring

Indringerens navn. Defaulter til karakterens navn fra ESX.

phonestring

Indringerens nummer. Telefonen ved det — det gør vi ikke.

anonymousboolean

true = intet indringer-felt på udkaldet.

skipCooldownboolean

true = uden om /112-cooldownen. Cooldownen deles ellers, så telefonen ikke bliver en vej uden om spam-værnet.

Exportet returnerer to værdier:

1 — calltable | nil

Det oprettede udkald. Se udkaldets form. nil når udkaldet ikke blev rejst.

2 — errstring | nil

Kun sat når det første er nil: offline når spilleren ikke er her, cooldown når spilleren lige har ringet.

server.lua
local call, err = exports.va_emsmdt:CreateEmsCallFromPlayer(src, content, {
    phone = exports['lb-phone']:GetEquippedPhoneNumber(src),
})

if not call then
    print(('Intet udkald: %s'):format(err))  -- 'offline' | 'cooldown'
end

Exportet gates ikke af Config.dispatch.enabled. Slå den fra for at fjerne /112-kommandoen og køre telefonen som eneste indgang til ambulancetjenesten.

Kald exportet fra en event-handler eller en CreateThread — det venter kort på klientens svar med gadenavnet og kan derfor ikke kaldes fra kontekster, der ikke må yielde. Sætter du opts.location, venter det aldrig.

CloseEmsCall

Luk et udkald og frigiv dets tildelte enhed.

idstringrequired

Udkaldets id, fx call-7.

returnsboolean

false når intet udkald havde det id — typisk fordi det allerede er udløbet.

server.lua
if not exports.va_emsmdt:CloseEmsCall(call.id) then
    print('Udkaldet var allerede væk')
end

Luk dine egne udkald, når kilden er ovre. Bliver patienten genoplivet af nogen der stod ved siden af, skal udkaldet ikke blive stående — ellers optager det plads på kortet indtil det udløber, og den tildelte ambulance bliver hængende på udrykning.

GetEmsCalls

Alle levende udkald, nyeste først.

returnstable[]

Array af udkald i samme form som CreateEmsCall returnerer.

server.lua
for _, call in ipairs(exports.va_emsmdt:GetEmsCalls()) do
    print(('[%s] %s — %s'):format(call.priority, call.title, call.location))
end

Et komplet eksempel

Et dødsscript der tilkalder en ambulance og rydder op efter sig selv.

server.lua
AddEventHandler('mydeathscript:playerDowned', function(src, coords)
    local call = exports.va_emsmdt:CreateEmsCall(
        'Person livløs', 'Ukendt placering', 'hoej', coords.x, coords.y)

    -- Bliver de genoplivet af andre, skal udkaldet ikke blive stående.
    AddEventHandler('mydeathscript:playerRevived', function(revived)
        if revived == src then
            exports.va_emsmdt:CloseEmsCall(call.id)
        end
    end)
end)