Skip to content

API Beispiele

Marcel1853 edited this page Oct 9, 2026 · 1 revision

🇬🇧 English version · ⬅ Für Mod-Autoren

Beispiele

Station per Script einrichten

local stop = surface.create_entity({ name = "utl-train-stop", position = pos, direction = defines.direction.east,
  force = "player", raise_built = true })
remote.call("utl", "configure_station", stop.unit_number, { mode = "station", provide = false, request = true })
remote.call("utl", "set_request", stop.unit_number, 1, { type = "item", name = "iron-plate" }, 4000)

Blaupause mit UTL-Einstellungen

local mapping = stack.create_blueprint({ surface = surface, force = force, area = area })
remote.call("utl", "tag_blueprint", stack, mapping, surface)

Fertige Lieferungen zählen

local function listen()
  local ids = remote.call("utl", "get_event_ids")
  script.on_event(ids.on_delivery_completed, function(event)
    storage.done = (storage.done or 0) + 1
  end)
end
script.on_init(listen)
script.on_load(listen)

Ein kleines Add-on: Rangierlok fährt zum Abstellgleis

Zwei eigene Rollen: ein Rangierdepot, dessen Züge dem Add-on gehören, und ein Abstellgleis, an dem UTL nichts vermittelt. Steht eine Rangierlok frei, schickt das Add-on sie zum Abstellgleis und zurück. Was dort passiert (Wagen abstellen, kuppeln …), wäre die eigene Logik des Add-ons.

control.lua der Mod rangier-beispiel (Abhängigkeit auf UTLogistics):

local MOD = "rangier-beispiel"

local function register()
  remote.call("utl", "register_role", { mod = MOD, name = "depot", caption = "Rangierdepot",
    base = "depot", own_trains = true })
  remote.call("utl", "register_role", { mod = MOD, name = "abstellgleis", caption = "Abstellgleis" })
end

local function listen()
  local ids = remote.call("utl", "get_event_ids")
  -- Rangierlok frei: zum ersten Abstellgleis schicken
  script.on_event(ids.on_train_idle, function(event)
    if event.role ~= MOD .. "/depot" then return end
    local sidings = remote.call("utl", "get_stations", { addon_role = MOD .. "/abstellgleis" })
    if not sidings[1] then return end
    remote.call("utl", "send_job", event.train_id, MOD, {
      { station = sidings[1].unit, wait = { { type = "time", ticks = 30 * 60 } } },
    })
  end)
  script.on_event(ids.on_job_finished, function(event)
    if event.mod == MOD then game.print("Rangierfahrt " .. event.job_id .. " fertig") end
  end)
end

script.on_init(function() register() listen() end)
script.on_configuration_changed(register)
script.on_load(listen)

Im Spiel: zwei UTL-Haltestellen bauen, im Stationsfenster bei der einen „Rangierdepot“ und bei der anderen „Abstellgleis“ anhaken, eine Lok mit dem Rangierdepot im Fahrplan aufs Gleis stellen.

Mehr dazu: Rollen und Daten, Fahrten, Züge umbauen, Fenster.

Clone this wiki locally