Noch mal so in die Runde: Jemand 'ne KI-Idee dazu??
Öh, wenn du so fragst... ^^ *an Kopp faß*
Das geht natürlich - besonders, wenn die "zahlenden" Gebäude unterschiedlicher Natur und solitär sind (bzw ihre Anzahl zumindest in einem exakt definierten Zeitfenster bekannt und konstant ist), ist das mit ner KI sogar ganz easy lösbar, da man dort herrlicherweise zählbare Bedingungswerte mit > und < angeben kann.
Den Wust von (De)aktivatoren kann man sich also sparen.
Du bräuchtest dann quasi nur einen Dummy-Spieler, in dessen KI du das Tributsystem integrierst und der folglich blechen darf (den hast du ja sowieso). Man müßte auch nur eine rule pro zahlendes Gebäude erstellen.
Zuvor ggf. mindestens eine Timer-Rule:
(defrule
(true)
=>
(enable-timer 1 600)
Das würde bedeuten: alle 10 min wird der Tributtimer auf Gültigkeit geprüft.
(disable-self)
)
Natürlich kannst du für verschiedene Gebäude ja auch verschiedene Timer (glaube max. 10) benutzen.
Die Grundbedingungen wären dann z.B. für eine Kaserne:
(defrule
(cc-players-building-type-count 1 barracks == 1)
oder 1+x, falls zeitgleich noch x andere existieren, die aber garantiert erhalten bleiben)
SHARED-GOAL 1: Spieler 1 gold-amount < 1000
(timer-triggered 1)
=>
(tribute-to-player 1 gold 100)
)
Die rote Bedingung ist der einzige kleine Stolperstein. Es gibt AFAIK keine (cheat)rule, die Ressourcen bei anderen Spielern zählt.
Da ich GOALS selten benutze, weiß ich nicht ob man auf diesem oder anderen KI-Wege das Problem umgehen kann.
Müßte iwie mit SHARED-GOAL klappen, das soll ja gemeinsam für mehrere (verbündete) Spieler gelten. Fürchte aber dennoch, daß das nicht für Spieler 1 gilt. :/
Möglicherweise läßt sich das lösen, indem man die KI für Spieler 1 definiert, sprich: der Goldtribut würde per cheat gezahlt, statt von Spieler X.
Keine Ahnung ob das so funktioniert, aber ich probiers nachher mal aus.
Falls die Gebäudeanzahl fluktuiert UND unvorhersehbar sein sollte, ist das aber auch kein Beinbruch:
indem man Schalter (da die KI ja leider kein bestimmtes Gebiet auf Objekte checken kann) und KI kombiniert, läßt sich der Tribut sowohl zeitlich begrenzen als auch an bestimmte Gebäude ketten.
Hier wäre wiederum die von mir angesprochene Dummy-Einheit praktikabel. Hab ich z.B. in "Arcanea" verwendet, um eine simple, zuverlässige Symbiose von Schalter und KI zu schaffen:
- in dem Moment, in dem die KI-Tribute wirksam werden sollen, erschafft oder besitzwechselt ein Schalter iwo auf der Karte ein geeignetes Indikator-Objekt
- dieses Objekt kommt dann als Bedingung in die KI-Rules bzw kann sogar die Bedingung "building-type-count" ganz ersetzen
- Sobald man die Ki-Tribute stilllegen will (z.B. Gebäude X zerstört) besitzwechselt der Schalter den Dummy.
--> KI wird inaktiv, bis sie diese Unit wieder für Spieler X zählen kann.
Für jedes Gebäude bräuchte man dann nur eine andere, unverwechselbare Dummy-Unit, die die KI auslesen kann.
Das man da nicht gleich drauf kam, wo doch KI die einfachste Lösung ist.
Aber ich bin trotzdem sicher, daß es auch mit Schaltern irgendwie geht.
Wenn du das mit der KI nicht hinbekommen solltest - das kann ich dir bei genauen Angaben auch machen.
Ist aber bei weitem nicht so schwer wie die Schalterei denke ich.