Udkald
Tilkald en ambulance fra din egen kode
va_emsmdtSe produktet →
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.
{
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.
titlestringpåkrævetKort overskrift, fx Person livløs.
locationstringpåkrævetStedbetegnelse som mennesker læser, fx Route 68.
prioritystringstandard: hoejhoej, mellem eller lav.
xnumberpåkrævetVerdenskoordinat.
ynumberpåkrævetVerdenskoordinat.
returnstableDet oprettede udkald. Se udkaldets form.
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))
endPositionen 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.
srcnumberpåkrævetSpillerens server id.
messagestringpåkrævetDet spilleren skrev eller sagde. Bliver udkaldets titel.
optstableAlle felter valgfrie.
Exportet returnerer to værdier:
1 — calltable | nilDet oprettede udkald. Se udkaldets form. nil når udkaldet ikke blev rejst.
2 — errstring | nilKun sat når det første er nil: offline når spilleren ikke er her, cooldown når spilleren lige har ringet.
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'
endExportet 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.
idstringpåkrævetUdkaldets id, fx call-7.
returnsbooleanfalse når intet udkald havde det id — typisk fordi det allerede er udløbet.
if not exports.va_emsmdt:CloseEmsCall(call.id) then
print('Udkaldet var allerede væk')
endLuk 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.
for _, call in ipairs(exports.va_emsmdt:GetEmsCalls()) do
print(('[%s] %s — %s'):format(call.priority, call.title, call.location))
endEt komplet eksempel
Et dødsscript der tilkalder en ambulance og rydder op efter sig selv.
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)