Eksempler på brugen af exports

Færdige integrationer du kan kopiere ind i din egen ressource

Alle eksempler forudsætter at va_emsmdt er i din fxmanifest.lua:

fxmanifest.lua
dependencies { 'es_extended', 'va_emsmdt' }

Dødsscript der tilkalder en ambulance

Ingen ambulance opdager selv, at nogen er gået ned. Det her er den integration de fleste servere mangler.

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)

coords kommer fra dit eget dødsscript. Stammer de oprindeligt fra klienten, verificér dem — CreateEmsCall sætter markøren præcis hvor du peger, uden at spørge om spilleren står der.

Telefonen ringer 112 (lb-phone m.fl.)

Kunderne kobler selv deres telefon på; broen er de her få linjer i et lille eget script.

Hook-navnet ind mod lb-phone varierer med version og opsætning — Services-app'en kan udløse events ved beskeder og opkald til et firma, se docs.lbphone.com. Men uanset hvilket hook du bruger, har du en source og en tekst, og så:

server.lua
-- Når jeres lb-phone melder "spiller src sendte `content` til ambulancen":
local function onAmbulanceMessage(src, content)
    local call, err = exports.va_emsmdt:CreateEmsCallFromPlayer(src, content, {
        phone = exports['lb-phone']:GetEquippedPhoneNumber(src),
    })

    if call then
        -- Svar tilbage i telefonen: "hjælpen er på vej" / "alle enheder optaget"
        return call.assigned ~= nil
    end

    return false, err  -- 'cooldown' | 'offline'
end

Positionen slås op server-side, og cooldownen deles med /112. Telefonen bliver derfor ikke en vej uden om spam-værnet, medmindre du selv sætter skipCooldown.

Vil du have telefonen som eneste indgang, slå Config.dispatch.enabled fra. Det fjerner /112-kommandoen, men rører ikke CreateEmsCallFromPlayer.

Journal-sektion i Politi Tabletten

En betjent slår en borger op og kan se de journaler, ambulancetjenesten har frigivet — men kun hvis betjenten selv har adgang til strafferegistret.

server.lua
local EMS = 'va_emsmdt'

local function emsAvailable()
    return GetResourceState(EMS) == 'started'
        and exports[EMS]:IsPoliceSharingEnabled()
end

RegisterNetEvent('myscript:openCitizen', function(citizenIdentifier)
    local src = source

    -- Gate det selv: exportet spørger ikke hvem du er.
    if not exports.va_policemdt:HasMdtPermission(src, 'strafferegister') then
        return
    end

    if not emsAvailable() then return end

    -- pcall: exportet tilhører et andet produkt og kan mangle i ældre
    -- versioner. Din feature må ikke dø på det.
    local ok, journals = pcall(function()
        return exports[EMS]:GetReleasedJournals(citizenIdentifier)
    end)

    TriggerClientEvent('myscript:emsJournals', src, ok and journals or {})
end)

Og når betjenten åbner en enkelt journal — bemærk at frigivelsen tjekkes igen på det tidspunkt, så et sagsnummer fra før ikke er en genvej:

server.lua
RegisterNetEvent('myscript:openJournal', function(caseNumber)
    local src = source

    if not exports.va_policemdt:HasMdtPermission(src, 'strafferegister') then
        return
    end

    local ok, journal = pcall(function()
        return exports[EMS]:GetReleasedJournal(caseNumber)
    end)

    -- nil = findes ikke, er ikke indsendt, eller frigivelsen er tilbagekaldt.
    if not ok or not journal then return end

    TriggerClientEvent('myscript:showJournal', src, journal)
end)

Brandvæsenet tilkalder en ambulance

Et alarmanlæg eller et brandscript har typisk allerede en position og en beskrivelse. Så er det ét kald.

server.lua
AddEventHandler('minbrand:husbrand', function(adresse, coords, tilskadekomne)
    if tilskadekomne < 1 then return end

    exports.va_emsmdt:CreateEmsCall(
        ('Husbrand, %d tilskadekomne'):format(tilskadekomne),
        adresse,
        'hoej',
        coords.x,
        coords.y
    )
end)

Gemmer du ikke call.id, kan du ikke lukke udkaldet igen. Det udløber af sig selv efter Config.dispatch.callTtl, men indtil da står ambulancen tildelt.

Et dashboard der viser de aktive udkald

GetEmsCalls er læsning uden bivirkninger og kan kaldes så tit du vil.

server.lua
CreateThread(function()
    while true do
        Wait(5000)

        local calls = exports.va_emsmdt:GetEmsCalls()

        for _, call in ipairs(calls) do
            print(('[%s] %s — %s (%s)'):format(
                call.priority,
                call.title,
                call.location,
                call.assigned and call.assigned.plate or 'ikke tildelt'
            ))
        end
    end
end)

Skal listen ud til spillere, gate den. Et udkald indeholder indringerens navn og telefonnummer, når det kom fra CreateEmsCallFromPlayer.