Seite 1 von 4

[PzC2] LUA Skripts

BeitragVerfasst: Di 23. Jun 2020, 12:41
von peter
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

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 23. Jun 2020, 12:57
von asuser
Ich habe das Spiel noch nicht... finde aber spannend, das sich schon jemand mit Modding dazu beschäftigt.

Ich nehme an, Du erläuterst hier den Aufbau für eine Erstellung eines Scenarios?

Hast Du auch schon Erfahrungen mit den Units machen können, kommt man irgendwie an die Skins heran?
Ansonsten sind die Units ja in 3D nahezu perfekt und kaum anpassungsbedürftig, wenn man mal von fehlenden "Exoten" absieht...

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 23. Jun 2020, 20:21
von Erich Topp
Was sind überhaupt LUA Skripts? Kann mit dem Wort (Abkürzung?) LUA gar nichts anfangen?

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 23. Jun 2020, 20:43
von von Trotha
LUA ist eine Skriptsprache

Siehe hier

Re: [PzC2] LUA Skripts

BeitragVerfasst: Do 25. Jun 2020, 18:11
von Erich Topp
von Trotha hat geschrieben:LUA ist eine Skriptsprache

Siehe hier


Okay, danke! bittschön.....

Re: [PzC2] LUA Skripts

BeitragVerfasst: Sa 7. Nov 2020, 21:54
von uzbek2018

Re: [PzC2] LUA Skripts

BeitragVerfasst: So 8. Nov 2020, 08:21
von asuser
Hello uzbek2018,

Sorry, but your picture was removed due to copyright issues by German law.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 16. Nov 2020, 00:57
von uzbek2018
asuser hat geschrieben:Hello uzbek2018,

Sorry, but your picture was removed due to copyright issues by German law.


ОК

Bild

The download link (the version of the mod v0.9):

http://www.mediafire.com/file/5sk6pv31f ... s.rar/file

(in version 0.9, 2 missions are available for the game!)



installing the MOD:

1) make a copy of the original game file Units. csv (this is the only file of the original game that will be replaced with a modified one).

You will need a copy of this file if you want to go back to the original campaigns with the original unit file.

2) Unzip the mod archive using the following path: C:\(User)\(My document)\Panzer Corps 2\Campaigns\

3) Copy the files from the mod archive: Units. csv and RulesGCG.json and paste with replacement - - - > in the folder with the game Panzer Corps2\Panzer Corps2\Content\Data

4) Launch the game and choose a custom campaign: Iron Cross

https://www.strategium.ru/forum/topic/9 ... %81%D1%82/

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mi 3. Feb 2021, 11:57
von peter
-- In der aktuellen Version von "Wehrmacht 2" V1.4 habe ich auch Helden eingebaut.
-- Aus dem Anlass stelle ich es hier vor: Habe die Ehre!..

-- Man kann Helden auch Einheiten zuordnen, aber dann muss die unit-ID auch existieren.

-- Weil der Spieler seine Einheiten selbst bestimmt, ist die Zuordnung hier kaum möglich.
-- Wenn man den Helden in Runde 0 erzeugt, kann der Spielr die Zuordnung noch in diesem Szenario in der Aufstellphase machen.

-- Bei feindlichen Einheiten jedoch, muss man jeweils den Helden beim Start eines Szenario zuordnen.


-- Ein Beispiel aus Spanien (1. Szenario):
-- eigener Held, ohne unit-Zuordnung
function CreateHero()
local hero = NewHero() -- Held anlegen
hero.portrait = "/Game/Gui/Common/Heroes/DE_AF_galland.DE_AF_galland" -- Bild zuweisen
hero.name = NSLOCTEXT("scenario_W_Baskenland", "Adolf_Galland", "Adolf Galland") -- Namen
hero.extra_traits = {UnitTrait.AimingAssistance, UnitTrait.FierceFighter, UnitTrait.Leadership} -- Bonus definieren
local action = world:MakeNewHeroAction(0, hero) -- Held dem 1. Spieler zuweisen
world:Exec(action) -- Ausführung
end

-- Beispiel aus Nordafrika (wenn man dort startet):
-- feindliche Helden erzeugen und zuweisen
function CreateAndAssignHero1(unit_id)
local hero = NewHero()
hero.portrait = "/Game/Gui/Common/Heroes/generic_standin.generic_standin"
hero.name = NSLOCTEXT("scenario_Libya", "Peter_Libyen10", "Hero1")
hero.attack_modifiers = {{type = TargetType.Soft, mod = 1}, {type = TargetType.Hard, mod = 1}, {type = TargetType.Air, mod = 1}}
local action = world:MakeNewHeroAction(1, hero)
world:Exec(action)

local assign_hero_action = world:MakeAssignHeroAction(world:GetUnit(unit_id), hero.id)
world:Exec(assign_hero_action)
end

function F1()
CreateAndAssignHero1(3) -- "3" ist die unit-ID, die den Helden erhält
end

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mi 3. Feb 2021, 18:17
von HBalck
Hallo Peter,
Danke für deine tolle Arbeit hier ! Ich quäle mich auch gerade durch den Lua Lernpfad bei meiner PG3D Kampagne über Dir.

Frage:
1. Hast du vielleicht schon rausgefunden, wie man gespawnten Einheiten Namen geben kann ?
2. Wie man Szenarien und der neuen Kampagne ein Bild (jpgs in Gui/Scenario) in der Campaigns.csv / Campaigns.uexp zuordnet ? Bei mir läuft das nicht.
3. Sind denn unterschiedliche Ausgangsbriefings möglich, bzw. Major Victory, Victory, Loss etc ?
4. Größtes Problem sind die Audiodateien - in der Mainkampagne funktioniern sie ja mit eineem Subordner. Ich kann aber derzeit auch unter Benutzung meines Unreal Engine Editor, diese Dateien nicht von wav zu uexp konvertieren - da scheint ein Extra-Code drin zu sein, den man mit normaler Unreal Engine nicht bekommt.
5. Ortsnamen-Häckchen funktioniert nicht - sie können so nicht auf der Karte angezeigt werden.
6. Das selbe mit eigenen Kommander-Bildern - würde gerne meine eigenen 3d Bilder herstellen - sieht dann besser aus alles im gleichen 3d Stil - schaust du hier:
https://www.artstation.com/artwork/VgodyZ
7. Über 3000 meiner 3d Einheiten warten darauf auf PC2 losgelassen zu werden - ich plane auch mein Peoples General für PC2 - für OoB ist es fertig:
https://www.youtube.com/watch?v=KHe5lpAQDDA

danke erstmal
LG Micha (aka H.Balck)
viewtopic.php?f=19&t=5771&p=346682#p346682
https://www.artstation.com/michaelweinert
https://www.facebook.com/H.Balck/

Re: [PzC2] LUA Skripts

BeitragVerfasst: Fr 5. Feb 2021, 11:56
von peter
Leider gibt es zu LUA keine brauchbare Beschreibung. Deshalb analysiere ich bei Bedarf die .lua Dateien des Herstellers und experimentiere bis es bei mir funktioniert. Ich kann deshalb auch nicht wirklich helfen.

zu 3) Bei „loss“ endet die Kampagne sofort. IMHO funktioniert das Debriefing hier nicht.
Die Unterscheidung Major Victory/Victory gibt es bei PzC2 nicht. Deshalb gibt es nur ein Debriefing. Leider wird das Debriefing auch nicht beim letzten Szenario einer Kampagne ausgegeben. Man kann also nur für den Sieg in den Szenarien 1 bis n-1 ein Debriefing ausgeben.
Das war bei PzC1 viel besser gelöst.

zu 5) Bei mir werden die Ortsnamen immer auf der Hauptkarte angezeigt, wenn das Hägchen gesetzt ist. Ansonsten sieht man die Namen via Tooltipp.

zu 7) Ich würde auch gerne eigene Einheitenbilder verwenden. Aber ich kann nur 2D Bilder bearbeiten und andere haben IMHO noch keine PzC2 Bilder veröffentlicht.
Bei PzC1 gab es massig Bilder.

Gruß, Peter

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 00:04
von HBalck
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


1. Aber wie setze ich die Transporteinheit mit diesem Script ?

2. Außerdem habe ich das Problem in meinen PG3D Kampagnen hsitorische Kerneinheiten später zuzuführen - das geht nicht.

3. Allen Verstärkungseinheiten kann kein name gegeben werden.

Fazit: Ein absoluter Scheiß mit dem Lua-Script - Da steigt kein Mensch durch - ich bin nicht doof - habe 3 Univeritätsabschlüsse - aber so ein bedienerunfreundlichen Mist habe ich nocht nicht gessehen - habe die Nase voll langsam - das macht keinen Spaß mehr. In OoB - Peoples General habe ich bis zu 50 Trigger pro Szenario geschrieben - da ging was bei der KI - aber hier.

Man kann keine vernünftigen Kampagnen produzieren und muß stattdessen diesen langweiligen Kerenzy - DLC Scheiß spielen (dabei kommt überhaupt kein PG Feeling rüber!!!) - Kampagnen auf historischem Kindergartenniveau - aber er kann Lua Scripting - das ist dann aber auch alles, was er kann.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 09:59
von asuser
Kann es vielleicht sein, das es so funktioniert:

-Im Editor wird die Einheit, die per Trigger erscheinen soll, auf das Feld gesetzt
-Der Einheit werden alle Charakteristiken beigefügt, wie Name, Stärke, Erfahrung usw.
-Danach wird der Trigger zu dieser Einheit aktiviert (Deploy), in dem Trigger Bereich muss die Einheit ja ausgewählt werden,
auf die sich der Trigger bezieht
-Zum Schluss wird das oben beschrieben LUA Script ausgewählt (passiert dann auch unter der Trigger Funktion) ganz unten in dem
Auswahlfenster

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 10:16
von HBalck
asuser hat geschrieben:Kann es vielleicht sein, das es so funktioniert:

-Im Editor wird die Einheit, die per Trigger erscheinen soll, auf das Feld gesetzt
-Der Einheit werden alle Charakteristiken beigefügt, wie Name, Stärke, Erfahrung usw.
-Danach wird der Trigger zu dieser Einheit aktiviert (Deploy), in dem Trigger Bereich muss die Einheit ja ausgewählt werden,
auf die sich der Trigger bezieht
-Zum Schluss wird das oben beschrieben LUA Script ausgewählt (passiert dann auch unter der Trigger Funktion) ganz unten in dem
Auswahlfenster


Könnte auch sein - probier ich gleich mal !

Edit: Nein geht nicht ! Die Einheiten sind dann doppelt auf der Karte - es funktioniert nicht so. Die gestzte Einheit auf der Karte wird eben nicht ausgewählt , weil keine ID anzuwählen ist.

Als Verstärkung ist diese Script schon geeignet - Problem:
1. Kein Name
2. Keine Transport möglich - wo soll ich da den Transport schreiben ?

Ist das alles eine Scheiße - Leute ich bin Historiker und 3d Künstler - keine Programmierer...

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 12:23
von peter
Transporter sind möglich. Der 3. Parameter “transport” bekommt die ID wie in units.csv.
local create_action = world:MakePurchaseAction(player, einheit, transport, 0)

Wie man der Einheit einen Namen gibt, ist mir nicht bekannt.