Meine KI klappt nicht ;-(

Fragen zum Szenarienbau und Mapdesign

Moderatoren: Henning, Björn_Jernside

Um ins Scripten einzusteigen hab ich mit das KI-Tutorial geschnappt und los getippt. Ich wollte folgendes machen:
Spieler zahlt alle 10 Sekunden 5 Nahrung. Wenn Spieler keine Nahrung mehr hat, verliert er.
Das habe ich geschrieben:

(defrule
(food-amount == 0)
=>
(resign)
)

(defconst my-timer 1)
(defrule
(true)
=>
(enable-timer my-timer 10)
)

(defrule
(timer-triggered my-timer)
(food-amount >= 5)
=>
(tribute-to-player 2 food 5)
(disable-timer my-timer)
(enable-timer my-timer 10)
(disable-self)
)

(defrule
(true)
=>
(set-strategic-number sn-maximum-food-drop-distance 0)
(set-strategic-number sn-maximum-wood-drop-distance 0)
(set-strategic-number sn-maximum-gold-drop-distance 0)
(set-strategic-number sn-maximum-stone-drop-distance 0)
(set-strategic-number sn-maximum-hunt-drop-distance 0)
(set-strategic-number sn-percent-civilian-explorers 0)
(set-strategic-number sn-task-ungrouped-soldiers 0)
(disable-self)
)

Klappt aber nich. Es kommt zwar keine Fehlanzeige aber es passiert auch nix.
Welcher Spieler soll denn den Tribut zahlen?
Spieler 1. Das soll einen Nahrungsverbrauch simulieren :(
Kann sein, das es mit Spieler 1 nicht funktioniert.
Man muss auch sicherstellen, das Spieler 1 einen Marktplatz hat.
Du kanns auch in der KI abfragen, ob Spieler 1 einen Marktplatz hat:

(defrule
(building-type-count market less-than 1)
=>
(chat-to-player 1 "Baue einen Marktplatz")
(disable-self))


Besser wäre aber vielleicht mittels des Timers Spieler 1 dazu aufzufordern, selbst den Tribut zu entrichten und so den Nahrungsverbrauch zu simulieren.
Und wenn er keinen Tribut zahlt oder keine Nahrung mehr hat verliert er.
Gut. Vielleicht platziere ich auch einen MArktplatz am !"§$% der KArte auf einem Invisible Tale. Habt ihr grad ma einen Link parat? :confused:

PS: Wie könnte ich es regeln, dass Gaia pro verlorenes Wildschwein x Nahrung an deinen Spieler zahlt? Auf den Fact kommt es mir an...
Da musst du für jedes Wildschwein ein Schalter machen
Bedingung1: Objekt vernichten (Wildschwein)
Effekt 1: Tribut entrichten

Sorge dafür das der Tributsendende Spieler die Nahrung auch hat
lol, es ging mir ja gerade darum eine Lösung ohne Schalter zu machen, da es sonst zu kompliziert ist. Außerdem wollte ich ein Wildschwein-Respawn machen, dann würde es ja auch nicht klappen. es ging mir jetzt um eine KI. ;) :P
Dann ist dein Problem leider nicht zu deiner Zufriedenstellung lösbar
Schade...aber ich warte erst mal was Günni sagt. ;)

Wegen meiner eigentlichen Frage: Ich hab das ganze jetzt mal mit Marktplatz probiert, funkttioniert immer noch nicht. Warum?
Wie ich schon sagte:
Mit Spieler 1 wird das wohl nicht gehen. Man kann einem menschlichen Spieler keine KI zuweisen - eben dasselbe Problem ist der Spieler GAIA. Deshalb geht auch das Abfragen der Wildschweine nicht - zumindest ist mir auf üblichem Weg nichts bekannt.
Ich versteh nicht warum du dein Keine-Nahrung-führt-zur-Niederlage-Problem nicht mit Schaltern lösen willst.
In "Verschollen" habe ich das ohne KI gemacht.
Aller X Sekunden werden Spieler 1 Y Nahrung abgezogen
Ist die Nahrung auf 0 gesunken und das nächste Zeitintervall erreicht, so verliert Spieler 1
Wie ich schon sagte:
Mit Spieler 1 wird das wohl nicht gehen. Man kann einem menschlichen Spieler keine KI zuweisen - eben dasselbe Problem ist der Spieler GAIA. Deshalb geht auch das Abfragen der Wildschweine nicht - zumindest ist mir auf üblichem Weg nichts bekannt.
Also auf AoK Heaven gibt es zumindest zwei KI's, die für Spieler 1 gedacht sind (eine heißt glaub ich HUMAN LEAGUE o.s.ä.).
Sind quasi als Hilfs-KI gedacht für wohl unerfahrene Spieler, indem sie das Wirtschaftsmanagement steuert.

Und Ingo hat doch bei Ulio glaub ich auch eine KI gemacht, die Pfeilschüsse zählt.
Vielleicht hilft ihm eine solche KI als Ausgangsbasis weiter.
:)

Aber wenn es nur ums Nahrungszahlen und "Bei- 0 Nahrung -Verlieren" geht, wäre wie Björn schon sagte das Problem schaltertechnisch besser gelöst.
Und das kann man schon mit zwei Schaltern ganz unkompliziert lösen - jedenfalls leichter als mit KI! :P


Wenn es dagegen für NEU erschaffene Wildschweine ö.ä. beim Erlegen Punkte geben soll, dann ist das nur mit KI lösbar.
:eek:
Eine Ki kann Pfeile zählen?

Das könnte man gut in RPGs verwenden.
Mann kann wenn man alle verschossen hat erst wieder schießen wenn man wieder Pfeile gefunden hat.
Das mit den PFeilen ist mir auch neu :eek: Ja das mit den schaltern wusst ich auch, wollts aber mal anders probieren... :D Das mit den Wildis is schade. :(
:eek:
Eine Ki kann Pfeile zählen?

Das könnte man gut in RPGs verwenden.
Mann kann wenn man alle verschossen hat erst wieder schießen wenn man wieder Pfeile gefunden hat.
Habt ihr ein Kurzzeit-Gedächtnis! ;)
Das war doch bei Ulio, wo man mit dem General irgendwo hin sollte, ohne daß ein Yeri einen Schuß auf ihn abfeuert.

Es gibt auch eine bei AoK Heaven die ähnlich funktioniert.
Heißt "projectile detect.ai".
Bin aber noch nicht dazu gekommen die zu testen, zumal ich mich mangels Zeit und Lust mit dem Thema KI-Skripte an sich noch nie beschäftigt hab.
Mit der UnitID kannst du jedes erdenkliche Objekt in AOE 2 in der KI abfragen.
Die Pfeile bei Ingo z.B. hat der Computerspieler 1-8 abgefeuert, folglich kann man die Pfeile des Spielers zählen.

Das gienge etwa so:

(defrule
(players-unit-type-count 3 Pfeil greater-than 0)
=>
(chat-to-all "Spieler 3 hat einen Pfeil abgeschossen!")
(disable-self))

Anstelle von Pfeil muss die Objekt-ID stehen und 3 ist hier der Computerspieler, der den Pfeil geschossen hat.

Das Problem beim Wildschwein ist, das das Wildschwein ein Gaia-Objekt ist, und GAIA kann man leider nicht als Spieler abfragen. Ich lasse mich jedoch gerne eines besseren belehren, wenn jemand eine Lösung kennt.

Für die Tribute hat Björn bereits eine gute Lösung genannt.
Die Schalterlösung ist absolut einwandfrei, wobei mir besser gefallen würde, wenn man die Tribute selbst entrichten müsste. Natürlich nicht alle 2 Minuten.

EDIT: die Unit-ID findet Ihr in GENIED
Will nicht extra einen neuen Thread aufmachen, daher stelle ich die Frage mal hier:
Zum (mir wenig geläufigen) Thema KI-Skripten:
ich habe einige gute Fremd-KI's, die ich für meine Szenarien verwenden will, allerdings stören mich bei einigen die vor allem zu Spielbeginn nervigen Chateinblendungen der KI (ihr wißt schon: diese martialischen Halbstarkensprüche à la "Hau dich tot" etc. :D ). Zerhaut dermaßen die Intro-Atmosphäre.

Ist es (auch für einen KI-Laien ;) ) ein geringer Aufwand, diesen Chat-Befehl im KI-Skript zu finden und zuentfernen?
Ich würde es schon gern selbst machen, da ich eine Menge verschiedener KI's ausprobiere und evtl. auch irgendwann noch versuchen will, das KI-Verhalten selbst an meine Anforderungen anzupassen.

erstellt: 15. August 2006 06:32
[...]
Ist es (auch für einen KI-Laien ) ein geringer Aufwand, diesen Chat-Befehl im KI-Skript zu finden und zuentfernen?

:eek: Wow, der frühe Vogel fängt den Wurm ;)

Du solltest einfach mal nach

Code: Alles auswählen

chat-to
suchen, und die betreffenden Befehle löschen oder auskommentieren.
Wow, der frühe Vogel fängt den Wurm
Ja, zumal wenn man bedenkt daß ich eigtl. Urlaub habe... :D

Danke für den Tip.
Ich hab mir letzt zwei AI Editor-Programme wo runtergeladen (Aok Ai editor und Ai Builder), aber noch keine Zeit gehabt mich damit näher zu befassen.
Läd man dann im Prinzip einfach ne KI-Datei und verändert dann nach Belieben den Quelltext?
Wo kann man denn nachlesen, welcher Befehl welche Funktion hat??? :confused:
In Deinem AOE Ordner sollte sich irgendwo eine CPSB.DOC befinden. Das Dokument bietet eine vollständige Übersicht mit mehr oder weniger ausführlichen Erklärungen und Beispielen zum Thema KI.

Ansonsten empfehle ich für den Einstieg die hier vielzitierte http://www.nocheineaoe.de/
Da gibt's unter anderem auch eine deutsche Übersetzung des obigen Dokuments.

Interessant ist es auf jeden Fall sich die Skripte anderer Leute anzusehen und zu lernen... ;)

Zum Bearbeiten der Skripten kannst Du theoretisch jeden x-beliebigen Texteditor benutzen.