[PzC2] LUA Skripts

Da die Beschreibung von LUA fehlerhaft und unvollständig ist, ist es viel Arbeit/Probiererei um die .lua Dateien zu erzeugen.
Damit nicht jeder das Gleiche ausprobieren muss, rege ich an, die Erkenntnisse hier zu posten. Ich fange gleich mal an:
Allgemeines:
- Die LUA Datei muss den gleichen Basisnamen wie das Szenario haben, z.B. bei "Sz.map": "Sz.lua".
- Alles rechts von den beiden Zeichen "--" ist nur Kommentar und wird ignoriert.
- Im Editor in "Edit -> Triggers" für .lua nötig:
° Name (Name des Triggers z.B. T1)
° Count (0 bedeutet immer, 1=einmal, 2=zweimal, ...)
° Unter Condition: Name_Bedingung z.B. B1 (Name im Editor und in .lua müssen übereinstimmen)
(typisch für "Condition": CaptureFlagAction; StartTurnAction oder EndTurnAction).
° Unter Function: Name_Funktion z.B. F1 (Name im Editor und .lua müssen übereinstimmen).
Beispiel für einen typischen Anwendungsfall: Feindflugzeuge erst in einer bestimmten Runde starten lassen. Da die Startfelder am Flughafen (bzw. Flugzeugträger) eher am Rundenende als am Anfang frei sind, hier EndTurnAction verwendet.
Am Ende des Skripts gebe ich noch eine Meldung aus. Ganz abgesehen davon, dass es immer gut ist, den Spieler zu informieren, sieht man so auch, dass das Skript erfolgreich ausgeführt wurde:
function B1() -- Bedingung im Editor: Trigger Rundenende
return world.round == 5 -- Runde 5 definieren
end
titel = "Warnung"
message1 = "Es wurden neue Feindflugzeuge im Westen gesichtet."
function F1() -- neue Einheit erzeugen und platzieren + Ausgabe Nachricht
local feld = {3,15} -- Ort
local einheit = "I16" -- ID der Einheit I-16, siehe erste Spalte in units.csv
local player = world:GetPlayer(1) -- welcher Spieler? (hier: 2.Spieler=Feind)
local create_action = world:MakePurchaseAction(player, einheit, "", 0) -- Einkauf welcher Einheit?
create_action.auxiliary = false -- Hilfs- oder Kerneinheit? (Kerneinheit)
create_action.cost = 0 -- Preis? 0
world:Exec(create_action) -- Kaufaktion!
local unit = world:GetUnit(create_action.id) -- welche Einheit?
local hex = world:GetHex(feld) -- welches Hex?
if (hex:GetUnit(0) == nil) then -- prüfen, ob Hex frei ist
deploy_action = world:MakeDeployAction(unit,feld) -- definieren, was wo platziert wird
world:Exec(deploy_action) -- Platzierung der Einheit!
end
local feld = {4,16}
local einheit = "TupolevSB"
local player = world:GetPlayer(1) -- welcher Spieler? (hier: 2.Spieler=Feind)
local create_action = world:MakePurchaseAction(player, einheit, "", 0) -- Einkauf welcher Einheit?
create_action.auxiliary = false -- Hilfs- oder Kerneinheit? (Kerneinheit)
create_action.cost = 0 -- Preis? 0
world:Exec(create_action) -- Kaufaktion!
local unit = world:GetUnit(create_action.id) -- welche Einheit?
local hex = world:GetHex(feld) -- welches Hex?
if (hex:GetUnit(0) == nil) then -- prüfen, ob Hex frei ist
deploy_action = world:MakeDeployAction(unit,feld) -- definieren, was wo platziert wird
world:Exec(deploy_action) -- Platzierung der Einheit!
end
MessageBox(titel, message1) -- Ausgabe Nachricht
end
Gruß Peter
Damit nicht jeder das Gleiche ausprobieren muss, rege ich an, die Erkenntnisse hier zu posten. Ich fange gleich mal an:
Allgemeines:
- Die LUA Datei muss den gleichen Basisnamen wie das Szenario haben, z.B. bei "Sz.map": "Sz.lua".
- Alles rechts von den beiden Zeichen "--" ist nur Kommentar und wird ignoriert.
- Im Editor in "Edit -> Triggers" für .lua nötig:
° Name (Name des Triggers z.B. T1)
° Count (0 bedeutet immer, 1=einmal, 2=zweimal, ...)
° Unter Condition: Name_Bedingung z.B. B1 (Name im Editor und in .lua müssen übereinstimmen)
(typisch für "Condition": CaptureFlagAction; StartTurnAction oder EndTurnAction).
° Unter Function: Name_Funktion z.B. F1 (Name im Editor und .lua müssen übereinstimmen).
Beispiel für einen typischen Anwendungsfall: Feindflugzeuge erst in einer bestimmten Runde starten lassen. Da die Startfelder am Flughafen (bzw. Flugzeugträger) eher am Rundenende als am Anfang frei sind, hier EndTurnAction verwendet.
Am Ende des Skripts gebe ich noch eine Meldung aus. Ganz abgesehen davon, dass es immer gut ist, den Spieler zu informieren, sieht man so auch, dass das Skript erfolgreich ausgeführt wurde:
function B1() -- Bedingung im Editor: Trigger Rundenende
return world.round == 5 -- Runde 5 definieren
end
titel = "Warnung"
message1 = "Es wurden neue Feindflugzeuge im Westen gesichtet."
function F1() -- neue Einheit erzeugen und platzieren + Ausgabe Nachricht
local feld = {3,15} -- Ort
local einheit = "I16" -- ID der Einheit I-16, siehe erste Spalte in units.csv
local player = world:GetPlayer(1) -- welcher Spieler? (hier: 2.Spieler=Feind)
local create_action = world:MakePurchaseAction(player, einheit, "", 0) -- Einkauf welcher Einheit?
create_action.auxiliary = false -- Hilfs- oder Kerneinheit? (Kerneinheit)
create_action.cost = 0 -- Preis? 0
world:Exec(create_action) -- Kaufaktion!
local unit = world:GetUnit(create_action.id) -- welche Einheit?
local hex = world:GetHex(feld) -- welches Hex?
if (hex:GetUnit(0) == nil) then -- prüfen, ob Hex frei ist
deploy_action = world:MakeDeployAction(unit,feld) -- definieren, was wo platziert wird
world:Exec(deploy_action) -- Platzierung der Einheit!
end
local feld = {4,16}
local einheit = "TupolevSB"
local player = world:GetPlayer(1) -- welcher Spieler? (hier: 2.Spieler=Feind)
local create_action = world:MakePurchaseAction(player, einheit, "", 0) -- Einkauf welcher Einheit?
create_action.auxiliary = false -- Hilfs- oder Kerneinheit? (Kerneinheit)
create_action.cost = 0 -- Preis? 0
world:Exec(create_action) -- Kaufaktion!
local unit = world:GetUnit(create_action.id) -- welche Einheit?
local hex = world:GetHex(feld) -- welches Hex?
if (hex:GetUnit(0) == nil) then -- prüfen, ob Hex frei ist
deploy_action = world:MakeDeployAction(unit,feld) -- definieren, was wo platziert wird
world:Exec(deploy_action) -- Platzierung der Einheit!
end
MessageBox(titel, message1) -- Ausgabe Nachricht
end
Gruß Peter