Brug af exports

Fra ingenting til et udkald på kortet

Forudsætninger

  • En kørende FiveM-server med ESX og va_emsmdt installeret
  • Din egen ressource at skrive i — eller opret en ny mappe i resources/

Du behøver ikke ændre noget i va_emsmdt selv. API'et er exports, som enhver anden ressource kan kalde.

Byg det

  1. Opsæt fxmanifest.lua

    Tilføj va_emsmdt til din fxmanifest.lua.

    fxmanifest.lua
    fx_version 'cerulean'
    game 'gta5'
    
    dependencies {
        'es_extended',
        'va_emsmdt',
    }
    
    server_script 'server.lua'

    Load order er irrelevant — exports slås op når de kaldes, ikke når de indlæses. dependencies er der for at serveren siger til, hvis ressourcen mangler.

  2. Skriv serverkoden

    Alle exports ligger på serversiden. Her registrerer vi en kommando, som enhver spiller kan køre — så vi bruger CreateEmsCallFromPlayer, der selv slår spillerens position op.

    server.lua
    RegisterCommand('testudkald', function(source, args)
        local src = source
    
        -- Positionen læses server-side på spillerens ped. Den kan ikke sendes
        -- med udefra, så et manipuleret kald kan ikke sende ambulancen et
        -- vilkårligt sted hen.
        local call, err = exports.va_emsmdt:CreateEmsCallFromPlayer(
            src,
            table.concat(args, ' ')
        )
    
        if not call then
            -- 'offline' eller 'cooldown'
            return print(('Intet udkald: %s'):format(err))
        end
    
        print(('Oprettede %s — %s'):format(call.id, call.location))
    
        if call.assigned then
            print(('Ambulance %s rykker ud'):format(call.assigned.plate))
        end
    end, false)

    local src = source i første linje er ikke pynt. source er en global, der bliver overskrevet så snart en anden event-handler kører — læser du den senere i funktionen, kan du ramme en helt anden spiller.

  3. Prøv det

    Start din ressource og kør /testudkald Person livløs i spillet.

    ensure min_ressource

    Udkaldet dukker op på kortet hos alle behandlere på vagt. Er en ambulance ledig — og er Config.dispatch.autoAssign slået til — bliver den tildelt, skifter til Udrykning og får beskeden direkte.

Der er ingen identitets-exports

Politi Tabletten har IsPolice, IsMdtAuthed og HasMdtPermission til at gate din egen kode. va_emsmdt har ingen tilsvarende exports.

Det betyder, at du selv skal afgøre hvem der må hvad, før du kalder noget her:

server.lua
local ESX = exports['es_extended']:getSharedObject()

local function isMedic(src)
    local xPlayer = ESX.GetPlayerFromId(src)
    return xPlayer ~= nil and xPlayer.job.name == 'ambulance'
end

Kører du både tabletterne, er exports.va_policemdt:HasMdtPermission(src, …) den rigtige gate, når det er en betjent der skal se noget. Se eksemplerne.

Exportene til journaler kan kun nå frigivne journaler, så du kan ikke lække en fortrolig journal ved et uheld. Men du kan lække en frigiven journal til en tilfældig spiller, hvis du glemmer din egen gate.

Hvad så nu