das set done to 1 bewirkt, dass das Aktivierungsskript nur ein mal startet, indem es die lokale Variable done von ihrem ausgangswert 0 (haben prinzipiel alle lokalen Variablen) auf 1 setzt. Dadurch verhindert die If - Abfrage eine weitere Abarbeitung des Codes.
set startbattle to 1 setzt die Globale Variable startbattle, die man, wie mOmOx schon sagte vorher definieren muss (wobei man aber auch einen Startwert angeben kann) auf 1 und wirkt damit als Signal an das andere Script, denn auf Globals können alle skripte direkt zugreifen.
setfight 100 setzt die A(rtificial)I(nteligence)-Einstellung des aufrufenden Actors (NPC/Kreatur) auf 100 = Spieler Angreifen, sobald er in Detektionsweite kommt. Desshalb bin ich mir auch nicht sicher ob das mit dem Kämpfen untereinander funktioniert - eventuell ist eine kompliziertere Struktur mit getdeadcount notwendig - und doch wieder mit eigenen ID's - damit könnte man aber auch bevorzugte Ziele definieren - über die reihenfolge der abfragen!
Nehmen wir also an, wir haben eine Prügelei zwischen den NPCs ParteiA01 - ParteiA10 und ParteiB01 - ParteiB02
dann bräuchten wir auf den Damen und Herren A das script
begin NpcBattleA
short enemynow
if (gethealth > 0) ; also falls der ausführende NPC noch lebt
if ( StartBattle == 1)
if (getdeadcount ParteiB01 != 0) ;also wenn der gegner noch lebt
if(enemynow !=1) ;und man nicht schon gegen ihn kämpft
stopcombat ;nur zur Vorsicht, damit das ziel auch wirklich gewechselt wird
startcombat ParteiB01
set enemynow to 1
return ; ausstieg aus dem Skript für diesen frame, wir haben unser Ziel ja
endif ;zu enemynow
elseif (getdeadcount ParteiB02 != 0)
if(enemynow !=2)
stopcombat
startcombat ParteiB02
set enemynow to 2
return
endif
elseif ....
... ;so weiter, bis charakter ParteiB10
else
set Startcombat to 0 ; Kampf vorbei, nur noch A#ler am leben
; hier z.B. ein Journaleitrag partei A hat gewonnen
endif ; zur Gegnerabfrage
endif ; zur Startcombatabfrage
endif ; zur lebichnoch-Abfrage
end
Das selbe Script, mit A und B vertauscht auf die Andere Partei gelegt, dann dürften die sich bis aufs Messer bekämpfen. Wenn Du Lust und Musse hast, kannst Du Versionen davon für jeden einzelnen erstellen, damit die Reihenfolge der Gegnerwahl etwas variiert...
immer den nächststehenden Gegner anzugreifen erfordert ein
set dist01 to getdistance ParteiB01 usw
(Mit einem Satz lokaler Variablen dist01 -dist 10)für alle noch lebenden Gegnern (bei Toten am Besten auf einen Sehr hohen wert setzen) und eine sequenz von vergleichen um die kürzeste Distanz zu ermitteln und den Gegner dann als aktuellen zu wählen - am besten aber nur dann, wenn der aktuelle Gegner tod ist sonst werden einige unschlüssig werden...
Hoffe, Du hast noch keine Kopfschmerzen 
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
Dieser Beitrag wurde von Garak am 26.11.2002, 10:36 Uhr editiert.
|