Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie mach ich KI die gegeneinander Kämpft ?
Hallo alle zusammen.
Ich wollte mal Fragen ob es möglich ist NPC's gegen NPC's ´kämpfen zu lassen (auch in massen)
Ich habe das irgendwie von RED vs BLUE in errinerung.
Wäre super wen ihr mir helfen könntet.
mfg Sekar
Phönix Tear
12.01.2006, 14:48
Ja Red vs Blue hat eine (für den Maker) recht gute KI. Ich würde aber davon abraten soetwas zu probieren wenn man noch nicht seeehr seeehr viel Erfahrung mit dem Maker hat. Eine kleine KI zu schreiben die einfach auf den Gegner zurennt und wenn sie in Reichweite ist draufschlägt / schießst sollte so einigermaßen Möglich sein, ich schätze aber du hast eher soetwas im Sinn das die Gegner (wenn auch nur ein bisschen) vorausdenken, sich auf Abstand bringen (Bogenschützen, Sniper), etc. Das ist dann doch schon um einiges schwieriger.
Um dir nun aber helfen zu können und nicht den üblichen Spruch "wenn dus nicht selber hinbekommst, lass es lieber" abzulassen, solltes du erstmal sagen wie genau du dir das vorstellst.
Gibt es Fernkämpfer? Sollen diese Vorausdenken? Wie viele verschiedene Soldatenklassen gibt es? Wie komplex soll das Terrain werden auf dem sie sich ja letztendlich treffen sollen? Wie viele Gegner sollen es werden (Nahkampf können (wenn man sich sehr viel Mühe macht) evt. unendlich werden (Variablen Nummern), ich denke aber das das Makertechnisch eine ziemlich große Leistung wäre und bin mir nichtmal sicher ob das überhaupt geht)?
Und eben all die Kleinigkeiten von denen du denkst das sie mit rein sollten...
Also schonmal im vorraus. Ich bin bereit zu lernen und zu zu hören da ich es wirklich brauche.
Es gibt 2 Arten von gegner.
Und es gibt 2 Arten von Fernwaffen.
1mal Magie(er) und einmal Bogenschützen
Das Terrein dürfte eigentlich wie normal für ein schlachtfeld (für gute sicht)
nicht viele Bäume oder halt hindernisse haben.
Sie sollen nicht vorrausdenken...so schlau sind se auch aml wieder nicht ^^
Da wen ein gegner 2 mal oder gar 1 mal von einem pfeil getroffen wird sowiso tot ist (Das Real system "mehr infos im vorrstellungstread")
Und die Kämpfe schnell ablaufen soll ( es werden genügen kämpfer auf dem schlachtfeld sein) Ich habe mir vorgestellt das die gegner oder halt die toten wiedergeboren werden und erst ab einer bestimten variablen zahl ganz sterben .
Hoffe ich aml das das etwas leichter geht.
Und wen der machen von RED vs Blue das geschaft hat wiso dan nicht auch diese idee weitermachen.
mfg Sekilli
Fireblade
12.01.2006, 17:32
Das ganze würde ich natürlich auch gerne wissen^^
Aber ich würds machen Sekar das wen sie tot sind auch Tot bleiben.
Nicht erst nach einer vorbestimmten Zalh endgültig tot sind.
Mann lebt ja nur einmal.^^
Nein ich meine das man damit variabeln und natürlich auch events spart.
Es wird einen counter zählen wie viele tickets jede partei noch hat.
und ab einer bestimmten zahl z.B. 10 bis 0
kommen auch keine mehr nurnoch die 10 die leben ^.-
Phönix Tear
12.01.2006, 21:36
Wie soll das ganze denn in dein Spiel eingebaut werden? Meinst du eine Art von Schlachtfeld wo man dann bis zum Ende kämpft oder sind damit ganz normale Level gemeint in denen man auch selber ein bisschen rumrennen darf?
Schlachtfelder sind ja etwas seltender und da könnte man sich evtl. auch Wegpunkte überlegen. Mein größtes Problem ist sowieso das Pathfinding da ich da eigentlich noch (so gut wie) keine Erfahrung mit habe...
Der Rest müsste an sich gehen, problematisch sind an sich eben immer die Fernkämpfer da ja immer Abgefragt werden muss wann er in Reichweite ist und wohin er sich noch bewegen muss um klares Schussfeld zu haben (man will ja nicht das sich z.B. zwei Magier gegenüberstehen und sinnlos gegen einen Baum ballern).
Dadurch das du Fernkämpfer einbaun willst kannst du das mit unendlich schonmal vergessen ^^°
Da ein Fernkämpfer um einiges mehr Variablen braucht als ein normaler Kämpfer und auch noch ein Schuss-Event (die Treffer Abfrage nicht zu vergessen).
Einfacher wird das ganze natürlich durch das 1-Schuss-Tot Prinzip. Ich würde da vielleicht noch einen kleinen Random einbaun damit das ganze etwas spannender wird. Außerdem muss bei der "KI" ja noch ein bisschen was randomiert werden damit das ganze auch ordentlich aussieht.
Ich werde vielleicht so in zwei drei Tagen mal versuchen einen "Miniscript" zu schreiben in dem ich mal schaue ob es möglich ist auch Fernkämpfer durch kopieren zu erstellen... (Also alles mit Variablen Nummer...)
mfg
Phönix Tear
P.S.:
Wegen Red vs Blue: Hast du dir das im Maker mal angeschaut? Wenn ja weißt du warum nicht jeder das mal eben schnell machen kann ;)
ja habe ich und ich war begeistert. ^^
Echt super das du mal einen kleinen script machst.
Wen es sein mus können auch die fernwaffen wegbleiben.
mfg Sekar
Phönix Tear
14.01.2006, 21:22
Wie versprochen habe ich mich mal daran versucht. Das Ergebnis ist jedoch eher mager ausgefallen. Du kannst nicht mehr als 18 Gegner auf einmal auf der Map haben (Fehlermeldung "Events Call Limit Exeeded") und wenn der Kampf zu lange dauert kommt auch die Meldung "Events Call Limit Exeeded" und du fliegst raus. Warum genau weiß ich nicht, wie man es verhinden kann dementsprechend auch nicht. Auf der letzen Map (Map 4) habe ich mal die Gegner mit dem kompletten Code ausgestattet (also das Callen der Call-Events vermieden) half aber auch nichts. Liegt also daran das sich die Gegner untereinander callen...
Aufgebaut ist der Skript so:
Jedem Gegner (hab ja nur Nahkämpfer) wird am Anfang seine Variablen Nummer zugeordnet. Darein schreibe ich seinen aktuellen Zustand. 1 steht einfach dafür, dass er der Gruppe 1 angehört, 2 dafür, dass er der Gruppe 2 angehört (die beiden Gruppen kämpfen natürlich gegeneinander). Wird ein Gegner getroffen stellt sich seine ID auf 99. Ist er dann an der Reihe erkennt er selber das er nun tot sein sollte. Er führt also eine Battle-Animation auf sich selber aus, setzt seine Graphik auf durchsichtig und verschiebt sich zu den Koordinaten (0|0).
Der Kampf an sich verläuft recht einfach. Am Anfang wird (neben der Zuweisung, wer zu wem gehört) auch noch ein Hilfziel für jede Seite festgelegt. Dies muss geschehen damit sich die Gegner orientieren können falls kein Feind in ihrer Nähe ist (sie suchen in einem Radius von 7 Feldern um sich herum). Ist also niemand in der Nähe bewegen sie sich automatisch zum Hilfsziel. Stirbt das Hilfziel wird ein neues Festgelegt. Das geht so lange bis kein Gegner mehr da ist, ab dann rennen die Einheiten einfach Randomiert rum.
Um den Bereich um die Gegner zu durchkämmen lasse ich mir der Reihe nach die Event-ID der Felder um die aktuelle Einheit herum anzeigen. Entspricht diese der ID der Gegnereinheiten werden die Zielkoordinaten der momentan angewählten Einheit auf dieses Feld gesetzt.
Das wäre eigentlich das wichtigste. Ich schätze man hat das grobe Prinzip so heraushören können. Damit das ganze funktioniert callen sich die Gegner der Reihe nach (sonst würde es ungaublich Ruckeln und ich bräucht sehr viel mehr Variablen und Common-Events). Trotzdem Ruckelt es auch so am Anfang (3GHz CPU, 1GB RAM)
So, lange Rede kurzer Sinn:
HIER (http://rapidshare.de/files/11052057/KS_an_Sekar.rar.html) der Downloadlink.
Inbegriffene Features (nö, keine Bugs ;) ):
- Der Skript stürtzt nach kurzer Zeit von alleine ab (Autobeenden)
- Die Gegner rennen oft recht sinnlos rum
- Erstreckt sich ein Hindernis zu weit kommt es kaum vor, dass die Einheiten herum kommen
- Jeweils nach Mapstart ruckelt es in etwa bis alle Einheiten 3 mal "durchlaufen" wurden
- Recht unübersichtlicher Code (wegen den vielen Editierungen)
Mehr fallen mir gerade net ein ^^°
mfg
Phönix Tear
P.S.:
Ich würde dir also von sowas mit zu vielen Gegnern abraten da es einfach zu viel Rechenleistung braucht. Am besten wendest du dich mal an Venoran, vielleicht kann der dir ein paar wichtige Tipps geben wie man das ganze besser hinbekommt...
Ich schaffs jedenfalls nicht so, als dass es ordentlich laufen würde. Vielleicht hätte ich (so wie Venoran) eine von Anfang an begrenzte Zahl an Gegner nehmen sollen. Dadurch das ich jeden Gegner nur durch kopieren vervielfältigen kann wird das ganze wohl noch komplizierter (was nicht heißen sollte das ich es ander hinbekommen hätte ^^°).
ok so viele gegnger sind auch nciht gut aber ichs chaus mir an echt super das du dir die mühe gemacht hast ^^
wen cih alles durchgeblickt habe und das auch einebaut ist und alles bekommst nen fetten credit eintrag ^^
mfg Sekar
EDIT:
Wow das ist wirklich ein meisterwerk...
Mus jet echt schauen wie ich das in mein spiel einbauen kann ^^ "
b.z.w. ich versuchs mal selber da ich das unmöglich einfahc so einbauen kann XD
Trozdem danke und ich werde ich mal an ihn wenden.
Das skript ist echt hammer .
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.