Moderatoren: Henning, Björn_Jernside
Code: Alles auswählen
(defrule ;bei Feindlichkeit beginnt der Kampf
(players-stance 1 enemy)
=>
(attack-now)
)
Björn_Jernside hat geschrieben:dass alle Einheiten immer losmpopoieren
Gibts denn da noch andere Möglichkeiten mit dem normalen Skript?Janworks hat geschrieben:attack-now ist zwar gut, wirft aber nicht sofort *alles* nach vorne
Code: Alles auswählen
(set-strategic-number sn-minimum-attack-group-size [hohe Zahl])
Code: Alles auswählen
(set-strategic-number sn-number-attack-groups 1)
Code: Alles auswählen
(set-strategic-number sn-percent-attack-soldiers 100)
Jep, korrekt.Jürgen hat geschrieben:In Verbindung mit wiederholtem "attack-now" sollte die KI dann doch eigentlich alles grade Verfügbare an die Front werfen oder?
Sollte eigentlich automatisch 0 sein, wenn die Angriffsgruppe bereits 100 Prozent bekommt? Aber hast schon recht: sicher ist sicher! ^^Janworks hat geschrieben:Außerdem die Zahl der Verteidigungssoldaten auf 0 setzen.
Was ist denn da soviel zu machen? Sind doch nur ein paar Zeilen!Janworks hat geschrieben:Mach du doch die KI, ich schaff das leider heut nicht mehr...
Code: Alles auswählen
(set-strategic-number sn-special-attack-type1 [ID eingeben])
Code: Alles auswählen
(defrule
(true)
=>
(set-strategic-number sn-minimum-attack-group-size 40) ; k.A. wieviel, hab jetzt mal mit 40 getestet
(set-strategic-number sn-number-attack-groups 1)
(set-strategic-number sn-percent-attack-soldiers 100)
(set-strategic-number sn-maximum-defend-group-size 0)
(set-strategic-number sn-number-defend-groups 0)
(set-strategic-number sn-attack-intelligence 1)
(set-strategic-number sn-enemy-sighted-response-distance 144) ; Maximalwert, quasi die ganze Karte
(set-strategic-number sn-special-attack-type1 64)
(set-strategic-number sn-special-attack-type2 88)
(set-strategic-number sn-special-attack-type3 659)
)
; Dauerangriff sobald über 40 Soldaten
(defrule
(military-population > 40) ; je nachdem wie gross die Armee sein soll
(not (town-under-attack)) ; kann man auch weglassen, aber vielleicht is es sinnvoll falls man die KI spaeter belagert
=>
(attack-now)
)
Wäre zumindest ne Behelfslösung, solange Björn lediglich bereits gesetzte Tore meint.Henning hat geschrieben:Vermute, du musst da auf Schalter zurückgreifen.
Vielleicht irgendwie ein geloopter Schalter, der in regelmäßigen Intervallen die Belagerungswaffen des PCs zuweist ...
Code: Alles auswählen
(defrule
(true)
=>
(set-strategic-number sn-minimum-attack-group-size 40) ; k.A. wieviel, hab jetzt mal mit 40 getestet
(set-strategic-number sn-number-attack-groups 1)
(set-strategic-number sn-percent-attack-soldiers 100)
(set-strategic-number sn-maximum-defend-group-size 0)
(set-strategic-number sn-number-defend-groups 0)
(set-strategic-number sn-attack-intelligence 1)
(set-strategic-number sn-enemy-sighted-response-distance 144) ; Maximalwert, quasi die ganze Karte
(set-strategic-number sn-special-attack-type1 64)
(set-strategic-number sn-special-attack-type2 88)
(set-strategic-number sn-special-attack-type3 659)
[b](disable-self) ; Regel braucht nur einen Aufruf[/b]
)
; Dauerangriff sobald über 40 Soldaten
(defrule
(military-population > 40) ; je nachdem wie gross die Armee sein soll
(not (town-under-attack)) ; kann man auch weglassen, aber vielleicht is es sinnvoll falls man die KI spaeter belagert
=>
(attack-now)
)
Code: Alles auswählen
(defconst MIN_SOLDIER_COUNT 20)
(defconst ATTACK_GOAL_ID 1)
(defconst NO 0)
(defconst YES 1)
(defrule
(true)
=>
(set-goal ATTACK_GOAL_ID NO)
(chat-to-all "Ich bin da!")
(disable-self)
)
(defrule
(true)
=>
(set-strategic-number sn-minimum-attack-group-size 10)
(set-strategic-number sn-number-attack-groups 2)
(set-strategic-number sn-percent-attack-soldiers 100)
(set-strategic-number sn-maximum-defend-group-size 0)
(set-strategic-number sn-number-defend-groups 0)
(set-strategic-number sn-attack-intelligence 1)
(set-strategic-number sn-enemy-sighted-response-distance 144) ; Maximalwert, quasi die ganze Karte
(set-strategic-number sn-special-attack-type1 64)
(set-strategic-number sn-special-attack-type2 88)
(set-strategic-number sn-special-attack-type3 659)
(disable-self)
)
; Dauerangriff sobald über MIN_SOLDIER_COUNT Soldaten
(defrule
(military-population >= MIN_SOLDIER_COUNT)
(not (town-under-attack))
(goal ATTACK_GOAL_ID NO) ; Dieses Ziel umgeht einen wiederholten Aufruf von attack-now
=>
(attack-now)
(set-goal ATTACK_GOAL_ID YES)
(chat-to-all "Angriff!!!")
)
; Angriff bei unter MIN_SOLDIER_COUNT Soldaten abbrechen und alle zurückpfeifen
; ggf. bei Angriff auf die eigene Stadt auch abbrechen (sonst das "or" einfach löschen)
(defrule
(goal ATTACK_GOAL_ID YES)
(or
(military-population < MIN_SOLDIER_COUNT)
(town-under-attack)
)
=>
(up-reset-attack-now) ; Angriff beenden
(up-retreat-now) ; Alle Leute zum eigenen DZ zurückschicken
(set-goal ATTACK_GOAL_ID NO)
(chat-to-all "Rueckzug!!!")
)