[Modding] Wie stelle ich fest, dass alle anwesenden Monster tot sind?

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Folgende Situation: mehrere Monster spawnen. Gruppe wird in einen Kampf verwickelt. Wenn alle Monster tot sind, soll ein Questgeber den Dialog eröffnen.
Wie würdet Ihr detektieren, ob der Kamp vorbei ist?
Sicherste Lösung: ich spawne selbsterstellte Monster mit bestimmter DV und zähle, wieviele davon tot sind.
Ich würde aber gerne einfach ganz normale Monster aus dem Spiel verwenden und nicht für jeden Kampf neue eigene Kreaturen erstellen.
Gibt es Trigger, mit denen man lebendige feindliche Kreaturen in einer Area detektieren kann?
Das ganze für die klassische Engine.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.171
Sicherste Lösung: ich spawne selbsterstellte Monster mit bestimmter DV und zähle, wieviele davon tot sind.
So würde ich es machen.

Ich habe bisher immer mit eigenen Kreaturen (mit eigener DV, die Scripts können ja vom Original bleiben) gearbeitet und gute Erfahrungen gemacht, wenn man mittels NumDead("MyCreature",X) und CombatCounter(0) arbeitet.
Problem ist hierbei, dass die Kreaturen ggf. außerhalb des Sichtfeldes des Spielers sind, wenn sie z.B. von Furcht betroffen über die ganze Karte hetzen. Dann triggert das Script natürlich nicht, wenn noch nicht alle tot sind.
Weiterhin habe ich die Erfahrung gemacht, dass dieser Trigger bei sehr vielen gleichen Kreaturen manchmal nicht "anspringt". Dann müsste man jeder Kreatur eine eigene DV zuweisen und über Dead("Kreatur1"), Dead("Kreatur2") usw. jede einzelne Kreatur abfragen. Das ist aber nur sehr selten vorgekommen.

Es gibt auch noch NumCreatureLT, der nicht nach der DV, sondern nach dem Object fragt (z.B. "NumCreatureLT([0.0.HOBGOBLIN],1)")und sich nur auf Kreaturen in der Sichtweite der Kreatur, die das Script hat, beziehen. Damit könntest Du die DV umgehen und das Script triggern, wenn der Questgeber keine Kreaturen mehr sieht.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Damit könntest Du die DV umgehen und das Script triggern, wenn der Questgeber keine Kreaturen mehr sieht.
Das Problem ist, dass aber auch tote Kreaturen "gesehen" werden, oder? Jedenfalls passiert das wenn man nach ENEMY Ausschau halten lässt.

Hmm, ich fürchte, dann werde ich wohl wieder eine eigene Kreatur erschaffen müssen. Böh... Das Ding ist, dass ich inzwischen drei solche Kämpfe habe, mit jeweils zwei verschiedenen Kreatur-Arten. Das heißt, ich habe mit dem weiteren oben dann 6 cres in den Override-Ordner kopiert wo eigentlich die originalen aus dem Spiel ausreichen würden, einfach nur, weil ich wissen will, wann genau alle tot sind.
Danke für die Antwort!
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324

Für das klassische Engine würden mir auf Anhieb noch diese Ansätze einfallen:

!InMyArea([ENEMY])
!HPGT(Nearestenemyof(Myself),0)
!Range(Nearestenemyof(Myself),999999) - [klappt wahrscheinlich nicht]
InActiveArea(O:Object*)
AreaCheckObject(S:ResRef*,O:Object*)
SPY.cre mit animation bird erhöhter sichtweite einem !see / !detect - script

EE (Ja, hast du nicht gefragt, aber der Vollständigkeit halber) hat dafür die Abfrage:
!AreaCheckAllegiance(ENEMY)
!AreaCheckAllegiance(GOODBUTRED)
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Ich vermute mal, die geben bei toten Kreaturen auch True()? (Neugierdehalber, obwohl ich es wohl nicht verwenden werde.)

Ich denke nicht. EE verwendet die Abfrage um in einer Area das Rasten freizuschalten, nachdem alle Gegner erledigt sind.
 
Oben