• Wir werden in den nächsten Tagen verschiedene Wartungsoperationen und Optimierungen am Server durchführen. Es wird zu mehreren Ausfällen kommen, die teilweise auch mehrere Stunden umfassen können.

Scripting in C&C3

Joined
Jan 3, 2008
Messages
8
Points
0
Hallo zusammen,

ich habe mich ein wenig mit Scripting für C&C3 beschäftigt, und ich komme an einem Punkt nicht mehr so richtig weiter, und ich finde nirgends Antworten zu diesem Problem. Es geht um Folgendes:

Ich versuche, die KI dazu zu bringen, bestimmte Einheiten und/oder Gebäude zu bauen. Mit Einheiten funktioniert dies mit Teams und Skripts ja schon recht gut, allerdings ist mir auch dort schon etwas aufgefallen: Es scheint so, dass die KI nur dann ein Team baut, was durch ein Skript gebaut werden soll, wenn auch das passende Gebäude schon vorhanden ist, was für die Herstellung benötigt wird.

Wenn ich also zum Beispiel einen GDI-Gegner einstelle, der zwei Pitbulls konstruieren soll, so scheint er das nur zu tun, wenn er zufällig auch eine Waffenfabrik gebaut hat. Könnt ihr das bestätigen? Wie könnte man die KI dazu bringen, auch das dafür vorgesehene Gebäude bevorzugt zu errichten?

Und wie kann man die KI grundsätzlich dazu bringen, bestimmte Gebäude zu bauen? Es gibt im WorldBuilder zwar eine sogenannte "Build List", jedoch habe ich es nicht geschafft, die KI dazu zu bringen, ein bestimmtes Gebäude zu bauen, ganz egal, was ich dort auch eingestellt habe.

Auch wenn ein Team zerstört wird, und durch einen Trigger soll das Team erneut gebaut werden, so werden die einzelnen Einheiten nicht sofort an einem Stück erneut gebaut, sondern es werden auch noch andere Einheiten zwischendurch gebaut. Wenn dann schließlich alle Einheiten des Teams erstellt sind, wird das unter "On Create" eingestellte Skript dann schließlich abgearbeitet.

Kann man das alles etwas genauer steuern? :?

Ich wäre für jede Hilfe sehr dankbar.
 
Hallo Harry :welcome im UF
Sorry dass es etwas länger gedauert hat aber ich wollte mal abwarten ob da jemand eine elegante Lösung hat :D

Also wenn ich das richtig verstanden habe hast du deinem Gegner eine KI zugewiesen und lässt ihn ganz normal frei Schnauze bauen und irgendwann wenn dann mal die Bedingung erfüllt ist, dass er zB nen Orca, nen Pitbull und einen Zone Trooper erstellt hat, sollen diese Einheiten als Gruppe AktionXYZ ausführen, soweit korrekt?
Wie wäre es denn wenn du einen festen Spawnpunkt kreierst an welchem deine Warf erstellt wird?
Sprich du gibst den Punkt vor und sagst als Script sowas in der Art von If playerblub owns building of type of Warfac is false, then spawn building warfac for playerblub on spawnpointblub.
Und deaktivierst dann, wenn das Team zerstört ist, einfach alle anderen Bauoptionen für den Spieler.

Die nächste Frage ist ob es überhaupt wichtig für deine Karte ist, dass der Gegner eine laufende KI hat oder ob er einfach nur GENAU das tun soll was du ihm sagst, weil dann kannst du das ja alles per Hand scripten.
 
Hallo,

also erstmal vielen Dank für Deine Antwort.

Und: Wow, da hast Du ja jede Menge Ideen und Anregungen, das hört sich alles wirklich gut an. An das ein oder andere davon habe ich auch schonmal gedacht, nur mangelt es etwas am Umsetzungsvermögen. Vielleicht ja aber nur, weil ich zu blind bin, die Menüpunkte in dem "Script-Baum" zu finden. ;)

Lassen wir uns doch mal die einzelnen Punkte konkret anschauen:

Also wenn ich das richtig verstanden habe hast du deinem Gegner eine KI zugewiesen und lässt ihn ganz normal frei Schnauze bauen...

Das ist erstmal so völlig richtig. :) Die KI baut "frei Schnauze" je nach eingestellter "Persönlichkeit", was sie will.

...und irgendwann wenn dann mal die Bedingung erfüllt ist, dass er zB nen Orca, nen Pitbull und einen Zone Trooper erstellt hat, sollen diese Einheiten als Gruppe AktionXYZ ausführen, soweit korrekt?

Das stimmt jetzt nicht mehr so ganz. Das "Team" wird schon von der KI gebaut, nur leider mal so "zwischendurch". Beispiel: Ich habe eingestellt, das Team besteht aus 3 Stück "GDIRifleSoldierSuad" (zu Deutsch: Infantrietrupps ;)) und diese sollen Erfahrungsstufe "HEROIC" haben (also einen Stern). So werden diese drei Trupps explizit auch gebaut, sobald eine Kaserne vorhanden ist. Es kann aber natürlich auch sein, dass die KI einfach ganz normale Infantrietrupps baut - nicht für dieses Team bestimmt. Diese bekommen dann keinen Stern, und "ziehen auch nicht los". Also ich will damit sagen, ein solcher Trupp gehört nach dessen Produktion nicht unbedingt automatisch zu dem Team, was ich eingestellt habe, und was produziert werden soll. Ein Teammitglied scheint explizit für dieses Team bestimmt produziert zu werden. (Das alles aber nur als Information am Rande)

Wie wäre es denn wenn du einen festen Spawnpunkt kreierst an welchem deine Warf erstellt wird?

Hierzu musste ich jetzt erstmal überlegen, was Du mit "Warf" meinst, bis ich drauf gekommen bin, dass Du damit eine "Warfactory" meinst? (=Waffenfabrik)? Wenn dem so ist: Das klingt gut, nur soll diese Fabrik ja nicht einfach so dort erscheinen, sondern die KI soll das Ding da auch ganz normal bauen. :) Das habe ich versucht, mit der "Build List" herbeizuführen - leider ohne Erfolg. Die Build List scheint wohl für irgend einen anderen Zweck gedacht zu sein... :?


Sprich du gibst den Punkt vor und sagst als Script sowas in der Art von If playerblub owns building of type of Warfac is false, then spawn building warfac for playerblub on spawnpointblub.

Wäre wie gesagt schön, wenn die KI den "Auftrag" bekommen könnte, das Ding selbst zu bauen. Einfach nur erscheinen lassen wäre etwas unschön. Und ich weiß auch nicht, wann dies passieren sollte. Wenn ich die Kontrolle über die KI gänzlich übernehme bzw. übernehmen soll, müsste ja der Auslöser zum Beispiel ein bestimmter Kontostand sein (?) ...:?

Und deaktivierst dann, wenn das Team zerstört ist, einfach alle anderen Bauoptionen für den Spieler.

Hier ist mir noch nicht ganz klar, was Du damit meinst. Kannst Du den Punkt nochmal erläutern? Ich habe mal versucht, über Script zu verhindern, dass die KI überhaupt irgendwelche Truppen baut, außer denen, die ich als Team definiert hatte. Es gibt da einen Punkt im Script, der besagt "Spieler kann keine Einheiten bauen" oder so ähnlich. Dies hatte nur leider keine Wirkung. Auch die Häkchen in dem Dialogfenster "Player List", die man über das Menü im Worldbuilder erreicht, die z.B. lauten "Base Builder", "Team Builder" usw. scheinen keinen Einfluss auf die KI zu haben, wenn diese eigenständig baut. Wie kann man überhaupt verhindern, dass die KI irgendwas eigenständig baut?

Die nächste Frage ist ob es überhaupt wichtig für deine Karte ist, dass der Gegner eine laufende KI hat oder ob er einfach nur GENAU das tun soll was du ihm sagst, weil dann kannst du das ja alles per Hand scripten.

Das wäre, wie gesagt, eine Alternative, allerdings fehlt es mir da irgendwie an geeigneten Auslösern in dem Script (also die Punkte, die dort so zur Verfügung stehen). Und es wäre schön, wenn die KI etwas auf Kommando bauen könnte, und nicht einfach gespawned wird.
 
Also mit den Teams habe ich noch nicht wirklich gearbeitet gehabt daher keine Ahnung ^^
Habe gerade mal das Build List Tool probiert aber das funktioniert wohl nicht, einige Funktionen des WBs sind bereits aus Generals :ugly und gar nicht mehr für TW vorgesehen.

Also ich finde spontan auch keine Möglichkeit der KI explizit vorzugeben bau nur das, sonst nichts.
Was mir dann eben einfällt ist recht aufwendig, sprich du musst der KI eben im Falle des Verlustes deines Teams sagen

Du darfst A nicht bauen
Du darfst B nicht bauen
Du darfst C nicht bauen
.
.
.
Wie sich das mit dem Team dann verhält, ob er das trotzdem baut weiß ich nicht, müsstest du mal austesten
Und das gleiche gilt dann eben für die Warf (Ja ist die Warfactory ;)) Alles verbieten außer der Warf.
Am besten machst das über nen extra Script dass du dann per Bedingungsscript an und ausschalten kannst.
Also ein Extrascript in welchem du dir einmal die Mühe machst das alles abzuarbeiten und welches du später eben durch enable/disable script einsetzen kannst.

Allerdings gebe ich hier keine Gewähr ob es nicht auch einfacher geht^^
 
Ok, das wäre vielleicht eine Möglichkeit, oder zumindest Mal eine Variante, die man mal testen könnte.

Wer weiß schon, ob das alles auch einfacher geht. Leider gibt es ja mal keine alles umfassende Dokumentation, was den WorldBuilder angeht, soweit ich das sagen kann. Die Funktionen sind selbst in dem englischen Tutorial nur sehr unvollständig und manchmal auch nur mit einem Satz dokumentiert.

Auf jeden Fall danke ich Dir für Deine Tipps. Ist zumindest ein Ansatz.

Falls aber noch jemand einen Vorschlag hat, würde mich der natürlich auch brennend interessieren. ;)
 
Jo kein Problem, habe grade mal kurz was probiert.
Dafür hab ich der KI schonmal eine Reff und ein PP hingestellt (also eine Raffinerie und ein Kraftwerk) und dann als Script gesagt
If/True
Then:
Player2 is allowed to build ALL Buildings is false
Player2 is allowed to build GDIWarfactory is true

-> Er baut die Warf

Habe zusätzlich ein Team aus nem Veteran Pitbull, einem Veteran APC und nem Sammler erstellt

Dann noch ein Script
If GDIWarfactory has been built by Player2
Then
Start building Team AwesomeSquad
Player2 is allowed to build ALL Buildings is true

Er hat den Squad dann sofort gebaut allerdings nur noch nen PP und sonst nichts mehr, also einfach mal bisschen rumexperimentieren, bei mir war es auch grade nur die Easy KI weil ichs schnell per Skirmish Map gemacht habe ;)
Viel Glück!
 
Das klingt ja sehr vielversprechend. :) Dann könnte man ja tatsächlich auch bei den Gebäuden etwas steuernd eingreifen. Hatte schonmal sowas in der Art versucht, hatte aber irgendwie nicht geklappt. Muss ich wohl bei Gelegenheit nochmal etwas experimentieren. :z

Vielleicht hat er in Deinem Beispiel erstmal nichts mehr gebaut, weil das Startkapital aufgebraucht war?

Den Punkt im Script "If xxx has been built by Playerxxx" hatte ich noch nicht gefunden. Nehme aber mal an, das steht unter "Player/Build" oder sowas in der Richtung?

Vielen Dank nochmal für Deine Hilfe. Falls ich es irgendwann hinbekommen haben sollte, eine komplette, etwas anspruchsvollere Map auf diese Art zu erstellen, schick ich Dir eine Kopie. ;)
 
Das Script ist bei den Conditions unter
Player -> Owns -> Player has built an object type

Startkapital aufgebraucht halte ich für unwahrscheinlich da er ja nur die Warf gebaut hat und er zusätzlich ja noch ne Ref an einem blauen Feld stehen hat.
 
Ja, aber bekommt er denn mit der von Dir platzierten Raffinerie auch gleich einen Ernter "gestellt"? ;) Den baust Du doch erst in der Warf und erst dann kann er anfangen zu ernten. Die Warf und Dein Team müssen ja erst gebaut werden, bis dahin kann der (noch nicht produzierte) Ernter ja noch nichts ernten geschweige denn abladen. Aber es kommt natürlich auch darauf an, wieviel Startkapital Du eingestellt hast.

Aber das wäre definitiv eine Steuerungsmöglichkeit zum Bauen von Gebäuden. Super, danke! :)
 
Ja, nen Harvester ist dabei :D
Und den zweiten hab ich nur ins Team genommen um zu wissen ob die KI mir da wirklich folgt, normalerweiße baut die ja eher keine Sammler.
 
So, nun habe ich auch nochmal ein bisschen getestet. ^^ Ich hab es hingekriegt, zumindest schonmal die KI dazu zu bringen, bestimmte Gebäude zu bauen. Allerdings geht das auch nur eingeschränkt. Ich habe mehrere Scripte und Subscripte erstellt, die im Prinzip folgendes durchführen:

Zu Beginn des Spiels wird das Bauen aller Gebäude deaktiviert und es werden zwei Counter eingerichtet. Einer für die aktuelle Anzahl eines bestimmten Gebäudetyps und einer für die "Ziel-Anzahl". Das heißt, die KI soll so lange das Gebäude dieses Typs bauen, bis die Ziel-Anzahl erreicht ist. Für einen einfachen Test habe ich das GDIPowerPlant verwendet. Beide Counter werden mit 0 initialisiert. Nun wird durch ein weiteres Script die "Ziel-Anzahl" auf 1 gesetzt. Ein weiteres Script, was ständig läuft (und daher leider in einem echten Spiel ziemlich Ressourcen-hungrig wäre) vergleicht ständig die beiden Counter, und ändert dann bei Bedarf die Erlaubnis, das GDIPowerPlant bauen zu dürfen. ^^

Das ganze funktioniert - es wird genau ein Kraftwerk gebaut und das war's. ^^ Allerdings fuinktioniert das nicht unbedingt, wenn man zum Beispiel die Anzahl auf 4 erhöht. Die KI baut die ersten beiden Kraftwerke sofort. Dann folgt eine unterschiedlich lange "Bau-Pause", bevor das dritte Kraftwerk errichtet wird. Das vierte Kraftwerk wird - in meinem Test - gar nicht mehr errichtet. Die KI scheint das nicht für nötig zu halten, also wird trotz Erlaubnis eben nicht gebaut.

Starte ich diesen Test aber zum Beispiel mit einer Kaserne, funktioniert das natürlich nicht, da erst ein Kraftwerk benötigt wird, um die Kaserne überhaupt bauen zu können. Resultat: Die KI baut gar nichts (alles andere darf sie ja nicht bauen). Das könnte eventuell im späteren Spiel zu einem Problem werden, wenn ich durch ein Script plötzlich der KI nur noch erlaube ein bestimmtes Gebäude zu bauen, aber ein dafür notwendiges vorheriges Gebäude ist ebenfalls nicht vorhanden. Man müsste also alle dafür benötigten Gebäude in dem Script durchgehen, erst diese bauen lassen und erst dann das beabsichtigte Fertigungsgebäude. Und erst wenn das errichtet ist, den "allgemeinen Bau" wieder freigeben. Klingt sehr kompliziert, wäre aber theroretisch eine denkbare Vorgehensweise.
 
Du könntest alternativ auch außerhalb der Kartengrenzen alle Techstufengebäude für den Spieler platzieren und falls du den Gegner mal durch Vernichtung seiner Base zerstören willst dann kannst du ja innerhalb der Map eine Area erstellen und als Victory Condition angeben dass alle Gebäude innerhalb der Area welche dem Gegner gehören zerstört werden müssen oder dass wenn diese zerstört sind die auérhalb der Map zerstört werden.
 
Das würde aber bedeuten, dass die KI sofort von Beginn an alle Einheiten eines Produktionsgebäudes bauen kann. Und dass soll natürlich auch wieder nicht sein. :) Die KI soll und muss schon selbst auch die eigene Technologie aufrüsten, wie die anderen (menschlichen) Spieler auch...
 
Stimmt ich vergaß :D
Dann lass die relevanten Gebäude eben spawnen sobald die KI es einmal gebaut hatte.
Halt nur die wirklich wichtigen, wobei dann natürlich mal getestet werden müsste ob sie es dann überhaupt für nötig befindet GebäudeXYZ zu bauen wenn schon eines da ist, hier eben auch wieder alle anderen Baumöglichkeiten verbieten
 
Das ist leider auch keine Alternative. Denn wenn das Gebäude auf der "sichtbaren" Karte nicht mehr vorhanden ist, soll natürlich auch der Bau eines bestimmten darauf aufbauenden Gebäudes nicht mehr möglich sein, was ohne diese Gebäude auch von allen anderen Spielern nicht gebaut werden könnte. Denn in diesem Fall wären die dafür notwendigen Gebäude natürlich schon zerstört oder verkauft worden. Es bleibt also zu prüfen, ob alle für den Bau eines bestimmten Produktionsgebäudes notwendigen Gebäude bereits vorhanden sind und ggf. produziert werden müssen.

Ich habe das an einem ganz einfachen Beispiel mal getestet, allerdings mit der gesamten "Produktionskette". Ich habe also keine Gebäude schon von Anfang an auf der Karte platziert, so wie in Deinem Beispiel.

In meinem Beispiel sollte die KI ein Team von drei Infantrietrupps bauen. Über ein Script wird geprüft, ob die Kaserne vorhanden ist. Wenn ja, wird das Team produziert und das Vorgang ist abgeschlossen. Wenn nicht, wird geprüft, ob für das für den Bau einer Kaserne erforderliche Gebäude (nämlich das Kraftwerk) schon vorhanden ist. Falls ja, und die KI hat mindestens 500 Credits (Baupreis), verfahre ich so, wie Du in Deinem Beispiel schon geschrieben hast: Die KI darf nur noch das Gebäude "Kaserne" bauen. Falls das Kraftwerk noch nicht vorhanden ist, wird genauso zuerst mit dem Kraftwerk verfahren. Dadurch, dass diese Überprüfungen in einzelnen Subscripts liegen, werden diese in einer Schleife durch das Script "Team bauen" immer wieder aufgerufen, solange bis die benötigten Gebäude in der Reihenfolge "Kraftwerk - Kaserne" gebaut wurden. Erst dann wird das Team in Auftrag gegeben und der Bau aller anderen Gebäude wieder freigegeben. Das funktioniert soweit ganz gut, mit einer ganz entscheidenden Ausnahme, die sporadisch mal auftritt:

Es kann passieren, dass die KI, die ja zu Anfang dann effektiv erstmal nur das Kraftwerk und anschließend nur die Kaserne bauen darf, nach dem Bau des Kraftwerks aufhört. Sie darf dann zwar (ausschließlich) die Kaserne bauen (für das Team), tut es aber nicht... denn sie hat ja keinen Befehl, die Kaserne bauen zu müssen. ;) Wird sie aber irgendwann angegriffen, und sie befindet es für nötig, die Kaserne nun doch zu bauen, wird das Team gebaut und die Produktion aller anderen Gebäude freigegeben. - Dann natürlich zu spät.

Dies ist leider also immernoch nicht die optimale Lösung.
 
Back
Top Bottom