Inhaltsverzeichnis

Kampf-KI verbessern

In diesem (kurzgehaltenem) Tutorial werde ich euch zeigen, wie ihr die NPCs etwas „intelligenter“ kämpfen lasst (eher dass die NPCs mehr blocken).
Ich werde erst den Code dazu schreiben, und hinterher erklären.

Was sollte ich können?

Es sollte reichen wenn man neue Funktionen schreiben kann.

Jetzt gehts los!

Als erstes öffnet ihr die [GDATA]/_work/data/Scripts/Content/AI/Human/ZS_Human/ZS_Attack.d!
In dieser Datei gibt es die Funktion: AI_Attack (self); nach der wir suchen müssen.
Das sollte etwa so aussehen:

if (other.aivar[AIV_INVINCIBLE] == FALSE) // Nur NSCs angreifen, die NICHT im Talk sind
		{
													//führt Angriff mit Waffe oder Spell aus (Aktion wird durch FAI bestimmt)
				AI_Attack (self);				//In der Funktion, in der AI_Attack aufgerufen wird DARF KEIN AI_ Befehl VOR AI_Attack kommen, da sonst AI_Attack ignoriert wird
			};	
		}
		else
		{
			Npc_ClearAIQueue(self); //killt den letzten AI_Attack-Befehl, verhindert z.B. stumpfes weiterrennen.
		};

In der if Abfrage baut ihr nun einige andere ein, z.B. ob der Hero gerade schlägt, und eine bestimmte Variable den richtigen Wert hat! Dies könnte so aussehen:

if (other.aivar[AIV_INVINCIBLE] == FALSE) // Nur NSCs angreifen, die NICHT im Talk sind
		{
var int Variable; Variable = Hlp_Random(10);
var int Ani_Variable; Ani_Variable = Hlp_Random(1);
			if (C_BodyStateContains(hero, BS_HIT))
			&& (Variable >= 3)
			{
				if (Ani_Variable == 0)
				{
					AI_PlayAniBS (self, "t_FistParade_0", BS_PARADE);
				}
				else if (Ani_Variable == 1)
				{
					AI_PlayAniBS (self, "t_FistParadeJumpB", BS_PARADE);
				};
			}
			else
			{
													//führt Angriff mit Waffe oder Spell aus (Aktion wird durch FAI bestimmt)
				AI_Attack (self);				//In der Funktion, in der AI_Attack aufgerufen wird DARF KEIN AI_ Befehl VOR AI_Attack kommen, da sonst AI_Attack ignoriert wird
			};	
		}
		else
		{
			Npc_ClearAIQueue(self); //killt den letzten AI_Attack-Befehl, verhindert z.B. stumpfes weiterrennen.
		};

MfG Marlus