PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigenes Echtzeit-Aktion-KS: Brauche Hilfe bei NPC KI plz !!



Vampire_Master
17.11.2004, 16:34
Hi Leute !!
Ich habe für mein Projekt "Resident Evil - Night of the Dead"
ein Echtzeit-Aktion-Kampfsystem entwickelt !
Jetzt will ich dieses durch einen computergesteuerten
NPC erweitern...
Im Normalfall folgt der NPC dem Helden, doch sobald
Feinde in Sicht sind, soll er sich vom Helden lösen,
die Feinde umkreisen und bei Zeiten angreifen...
(sich wieder etwas zurückziehen und dann wieder angreifen, usw.)
wichtig dafür ist ja, dass der NPC die Gegner als solche erkennt
und das die Gegner den NPC als Feind erkennen und
auch diesen angreifen !!!
kann mir da jemand bei helfen bitte ???
mir is alles recht ^^ skript, code-auszug, etc...
bitte helft mir http://www.multimediaxis.de/images/smilies/old/sm_12.gif

ty Vampire

bloody
17.11.2004, 17:17
Da kann ich mal wieder auf das Spiel "The Sky of Arcana" von Dark_Ryu verweisen welches auf dieser seite zu finden sein müsste.Dort ist es Genau wie du beschrieben hast nur das es nicht mit schusswaffen ist.

:o

Vampire_Master
17.11.2004, 17:23
oh, echt ?
das schau ich mir mal an, danke ;)

// noch nich closen plz ~~

Deathball
17.11.2004, 17:55
Naja, das dein NPC den Gegner als Feind erkennt bzw. erkennt wo der Feind gerade ist ist ja nicht wirklich schwer: Dazu kann man ja die Koordinaten-Variablen des Gegner Events und deines NPCs abfragen.
Wenn dein NPC beispielsweise den Gegner von hinten angreifen fragst du am besten zuerst einmal per Bedingung ab in welche Richtung der Gegner blickt( logisch, oder ;) ). Wenn er nach unten blickt und dein NPC den Gegner direkt von hinten angreifen soll muss die Y-Koordinate kleiner werden als die des Gegners. Das machst du meiner Meinung nach am besten mit einem Label-Befehl, dem eigentlichen Bewegungs-Befehl wenn der Y-Wert immer noch nicht die gewünschte Größe hat benutzt du den Gehe zu einem Label-Befehl.

Naja, das war mal ne kurze Erklärung wie man so was machen kann. Hoffe es war nicht zu unverständlich. Falls du es nicht verstanden hast kann ich mich ja nochma hinsetzen und eine etwas längere Version schreiben.

cya
Deathball

Vampire_Master
17.11.2004, 18:35
also bei "the sky of arcana" is das zwar schon ganz nett
gemacht, aber der typ läuft eigentlich nur hinter
dem helden her und greift nur an, wenn man einem gegner
sehr nahe kommt... (und das auch nich sehr oft)
ich will ja, dass der npc in kampfposition geht,
sobald man eine karte betritt auf der gegner sind...
(und dem helden nur folgt, wenn die luft rein ist ^^)

Beril
23.11.2004, 18:51
Also du könntest ja auch wie du es sagst den NPC dazu bringen in Kampfhaltung zu gehen, wenn er in eine Map kommt, in der Gegner sind.
Dann könnte es auch eine Auswahlmöglichkeit für die Aggrssivität des NPCs geben...
Naja wenn du aber eine größere Map hast, dann sagst du in einem Parallel Process Event etwa folgendes:


change Variable [0001] - Gegner's X Postion
change Variable [0002] - Gegner's Y Position
change Variable [0003] - NPC's X Position
change Variable [0004] - NPC's Y Position
Wait 0.1

Dann Machst du so ugf das in einem weiteren Parallel Process:



change Variable [0005] (set) [0001]
change Variable [0006] (set) [0002]
change Variable [0005] (-) [0003]
change Variable [0006] (-) [0004]

if (Variable [0005] <= 20)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)
else
if (Variable [0005] => -20)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)
if (Variable [0006] <= 15)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)
else
if (Variable [0006] => 15)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)


So ugf
Das ist jetzt immer wenn der Gegner sich entweder 20 Chips links oder rechts vom NPC befindet oder 15 Chips über oder unter ihm.

Wenn du willst, dass der NPC erst in diese Position geht, wenn dfer Gegner ins Bild läuft, dannbenutze die Scene Abfrage (In nem Parallel Process):


change Variable [0001] - Gegner's X Scene
change Variable [0002] - Gegner's Y Scene

Und noch ein Parallel Process:


If (variable [0001] => 0)
If (variable [0001] <= 320)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)
End Case
If (variable [0002] => 0)
If (variable [0001] <= 240)
(Hier jetzt den Code für das Verhalten des NPC's reinschreiben oder einen Switch aktivieren)
End Case


Hoffe ich konnte helfen.
Angeben ohne Gewähr (hab das ganze ausm Kopf und ohne Maker gemacht)

greetz Beril aka Fuzzi

bloody
27.11.2004, 14:09
also bei "the sky of arcana" is das zwar schon ganz nett
gemacht, aber der typ läuft eigentlich nur hinter
dem helden her und greift nur an, wenn man einem gegner
sehr nahe kommt... (und das auch nich sehr oft)
ich will ja, dass der npc in kampfposition geht,
sobald man eine karte betritt auf der gegner sind...
(und dem helden nur folgt, wenn die luft rein ist ^^)
Stell deinen Mitspieler auf Aggresiv dann leuft das anders <__<"