Seite 2 von 4

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 12:26
von asuser
Ist das LUA File wenn es fertig ist in dem Kampagnenorder oder in dem Content Data Ordner abzulegen?
Evtl. hat der Trigger das LUA File nicht gefunden?

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 12:32
von peter
Das LUA file muss im gleichen Ordner wie das Szenario liegen. Auch der Name muss zum Szenario passen; siehe meine erste Post.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 15. Feb 2021, 19:11
von HBalck
Danke dir Peter für den Hinweis mit dem Transport, das geht jetzt.

1. Kann man so auch nachträgliche Kerneinheiten reinbringen ? Die im Szenario gesetzten Kerneinheiten, werden ja in der Kampagne nicht angezeigt.

2. Gibt es keine Befehlszeile für die Benennung der Einheit ? In den Gurkenniveau-DLC-Kampagnen nicht nötig, bei meinen historischen und ausprogrammierten Szenarien aber schon.

3. Wo trage ich dort die Erfahrung der kommenden Einheit ein ?

4. Wo trage ich die Richtungsorientierung ein ?

5. Wo trage ich gegebenenfalls den Befehl für eine KI gesteuerte Einheit ein ?

6. Im Multiplayer über den server werden keine Lua Scripts aufgerufen - es erscheinen dort keine Verstärkungen, Heros oder sonstige Einträge ! Das ist ein riesiger bug oder ?

7. Habe diese Befehlszeilen im Szenario AragonOffensive gefunden - damit könnte man Befehle von Einieten oder Einheitengruppen verändern. Aber wie genau ?
----------------------------------------------------------------------------------
--ai commands

units_without_orders = {}

function AllySetOrder(order)
for id,u in pairs(world.units) do
if (u.owner_id == 1) then
local orders = u.orders

if (next(orders) == nil or orders[1]:GetOrderClass() == "AIOrderDefault") then
units_without_orders[u.id] = true
end

if (units_without_orders[u.id]) then
orders = {NewOrder(order)}
u.orders = orders
end
end
end
end

function AllyAttack()
MessageBox("", "Spanish Nationalist units will attack the nearest hostile victory hex.")
AllySetOrder("AIOrderAttacker")
end

function AllyDefend()
MessageBox("", "Spanish Nationalist units will defend the nearest friendly victory hex.")
AllySetOrder("AIOrderDefender")
end

function AllyHoldPosition()
MessageBox("", "Spanish Nationalist units will hold position where they are.")
AllySetOrder("AIOrderHoldPositionFire")
end
----------------------------------------------------------------------------------

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 16. Feb 2021, 06:13
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


Und wo stellt man bitte die Stärke der Einheit ein - z.B. 15 oder 10 Stärkepunkte ?

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 16. Feb 2021, 13:02
von peter
Es wird immer die Default Größe verwendet (10 bzw. 15). Wie man das ändert -falls überhaupt möglich-, ist mir nicht bekannt.
Meine Erkenntnisse kann ich nur den bestehenden LUA Scripts des Herstellers entnehmen.

Edit:
Der 4. Parameter von MakePurchaseAction(player, einheit, "", 0) ist die Erfahrung (hier 0).

Re: [PzC2] LUA Skripts

BeitragVerfasst: Di 16. Feb 2021, 17:58
von HBalck
  Code:
Der 4. Parameter von MakePurchaseAction(player, einheit, "", 0) ist die Erfahrung (hier 0).

Nein funktioniert nicht !

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mi 17. Feb 2021, 09:01
von HBalck
Gibt es ein Lua-Script, wo KI Einheiten die Karte verlassen, wenn sie einen Punkt erreicht haben, z.B auf dem Supply-Hexfeld ?

Ich brauche dieses Feature für das Szenario Fort Mechili, da müssen die Australier das Supply zu Tobruk erreichen und müssen dann von der Karte genommen werden, so das dann der Kampagnenspieler sein Bonusziel, Einheiten zerstören, nicht erreicht. In OoB war das ein spezieller Trigger "Karte verlassen" - habe das in PC2 noch nicht gefunden in den DLCs.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Do 18. Feb 2021, 09:39
von peter
Nachdem ich den 3. LUA Mechnismus entschlüsselt habe, will ich es hier vorstellen:
Manchmal will man dem Spieler nicht eine Einheit triggern, sondern nur die Möglichkeit eröffnen, erobertes Equipment zu kaufen.


-- Beispiel:
-- Wenn Spieler Hex {9,8} erobert, 20 Stärkepunkte der Einheit 203mmM1931 als "captured" zuweisen
-- Spieler erhält keine Einheit, sondern Stärkepunkte unter "captured" zum Kauf oder Update
-- für eigene Einheiten "prototypes" statt "captured" verwenden!

-- nötig im Editor unter Trigger:
-- Count: 0
-- Condition kann leer bleiben
-- Actions: CaptureFlagAction
-- Function: OnCaptureDepot

Depot = {{9,8}} -- auch mehrere Depots möglich
string = "General, wir haben ein Lager mit Artillerie erobert."

-- In diese Tabelle werden alle eroberten Depots eingetragen, damit man den Bonus nur bei der 1. Eroberung erhällt
captured_depots = {}

function OnCaptureDepot(action)
if (action.new_owner == 0 and IsItemInTable(Depot, action.flag)) then -- nur ausführen, wenn Spieler (player0) Depot erobert
if IsItemInTable(captured_depots, action.flag) then return end -- Abfrage ob Depot bereits erobert ist

AddEquipment(0, "203mmM1931", 20, captured) -- Spieler0 erhält 20 Stärkepunkte von 203mmM1931 als captured
-- AddEquipment kann man hier auch mehrfach aufrufen
TutorialMessage(string) -- Nachricht an Spieler
table.insert(captured_depots, action.flag) -- Merken, dass das Depot erobert wurde
else
return
end
end

-- die 3 hierfür nötigen Hilfsfunktionen
function FindItemInTable(table, item)
for index,i in ipairs(table) do
if i == item then
return index
end
end
return -1
end

function IsItemInTable(table, item)
return FindItemInTable(table, item) ~= -1
end

function AddEquipment(player_id, unit_type, quantity, category) -- eigentliche Funktion um Equipment hinzuzufügen
local player = world:GetPlayer(player_id)
local equipment = player.equipment
local type = GetUnitType(unit_type)
local eq = equipment[type]
if (eq == nil) then
eq = NewEquipment()
eq.category = category
equipment[type] = eq
end
eq.quantity = eq.quantity + quantity
player.equipment = equipment
end

Re: [PzC2] LUA Skripts

BeitragVerfasst: Fr 19. Feb 2021, 01:27
von HBalck
Peter - vielen Dank - es wäre echt cool, wenn du in mein Mod-Team einsteigen kannst.

Habe das hier geschrieben:
Ich mache die historische Hinterfragung der Szenarien, die geografisch korrekte Kartenarbeit (da wären aber auch noch 1-3 Leute hilfreich), die 3d Präsentation der Kartenintros, die 3d Modelle der Einheiten + Animation + Effektanimationen, die Audiobriefings, das Soundsystem der Einheiten, den Einheiten mod der unit.scv, die Kampagnenscripts, die Kommadeurbilder in 3d, die Lua-Scripts der Szenarien (da wäre Peter toll da zu helfen oder das komplett zu machen), Terrain 3d-Arbeit.
von Trotha testet schpn fleißig die MP Szenarien gegen mich - wir spielen jetz schon Nr.2.

Dann bist du aber Teil des PC2 PG3D mod Teams !
Wäre geil.... groovy....

Re: [PzC2] LUA Skripts

BeitragVerfasst: Fr 19. Feb 2021, 10:25
von peter
Danke, aber ich modde lieber alleine. Jeder hat seine eigenen Vorstellungen wie ein Mod aussehen sollte. Und faule Kompromisse mache ich nicht gerne.

Auch wenn es hier vielleicht anders rüber komm, bin ich LUA Anfänger. Ohne Handbuch kann ich auch nicht zum Experten werden.
Für jede der 3 LUA-Features, die ich bisher ausreichend entschlüsselt haben, habe ich die Anwendung des Herstellers analysiert. Und danach jeweils viele Stunden experimentiert.

Unabhängig davon dürfen andere Modder .lua and andere Teile meiner Mods gerne für sich selbst nutzen (solange es nicht komerziell genutzt wird).
Es wäre nett, wenn ich dann in credits genannt werden würde.
Und ich beantworte hier Fragen, wenn ich eine sinnvolle Antwort habe.

Gruß, Peter

Re: [PzC2] LUA Skripts

BeitragVerfasst: Sa 20. Feb 2021, 11:42
von asuser
Ich habe die DLC noch nicht durchgespielt. Gibt es hier eine Situation, wo man Kriegsgerät erbeutet und dann als neue Kerneinheit übernimmt? Wäre auch eine interessante Funktion.

Im Editor ist mir aufgefallen, dass es weniger Trigger zu Einheiten gibt, sondern die Trigger sich meistens auf Rundensituationen beziehen. Die eigentliche Aktion wird dann im LUA Script definiert. Finde ich sehr umständlich und zu kompliziert.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 22. Feb 2021, 09:28
von peter
Bei DLC1 (Spanien) werden ein spanischer Panzer und 3 Ju52Bomber dem Spieler zugeordnet.
Ansonsten kann der Spieler „captured“ Stärkepunkte der spanischen Republik erhalten. Ein Beispiel dazu habe ich in diesem Thread gezeigt.
Allerdings sollte man captured nur in LUA verwenden. Wenn man es im Szenario-Editor verwendet, ist dieser Einheitentyp dann kostenlos – aus meiner Sicht ein Bug.
Mir als Spieler ist es lieber Captures bzw. Prototypes für eigenes Gerät zu erhalten, als dass man mir Einheiten aufzwingt.
Bei PzC1 habe ich oft die Geschenke verkauft, weil ich meine eigene Vorstellung hatte, wie ich meine Kerntruppe zusammenstelle.

Hinweis: Prototypes funktionieren im Editor.
Und ja, LUA ist kompliziert. Beim spielen von DLC1 ist mir aufgefallen, dass selbst der Hersteller Fehler in LUA macht.

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 22. Feb 2021, 09:58
von asuser
Zu dem Einheitenpool noch eine allgemeine Frage:

Wie geht man am Besten vor, wenn man neue Einheiten oder "gespiegelte" Einheiten mit anderen Eigenschaften nutzen möchte?

Nimmt man da das Units file (in Text Datei umwandeln, damit man die Kommatrennung besser lesen kann), schreibt die neue Einheit da rein, oder
nimmt man das equipment file (liegt unter Editor/Data, ist schon Textfile, ähnlich wie bei PC1), schreibt die neue Einheit da rein und geht dann in den Editor um das
equipment file in eine neue Units Datei zu transformieren? Habe letztere Variante im Slith… Forum so gelesen.

Wenn ich das gleich in der Units Datei hinbekomme, wäre das doch der elegantere Weg, oder?

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 22. Feb 2021, 15:59
von HBalck
Wenn ich das gleich in der Units Datei hinbekomme, wäre das doch der elegantere Weg, oder?

Units reicht - CSVBuddy.exe ist das Mega tool dafür

download CSVBuddy:
https://www.dropbox.com/s/7psnr1nrqd8ih ... y.exe?dl=0

Re: [PzC2] LUA Skripts

BeitragVerfasst: Mo 22. Feb 2021, 19:31
von asuser
Danke. Feine Sache.

Hier muss man sich trotzdem eine Sicherheitskopie der Original Units Datei vorher beiseite legen. Beim abspeichern kann auch einiges schief gehen.

Merkt man gleich, wenn man die neue Datei ins Spiel kopiert und das Spiel dann abstürzt oder im Editor die Einheitenliste plötzlich leer ist.