Jump to content
Unity Insider Forum

KI Items vergleichen und ausrüsten lassen


erixx

Recommended Posts

Hi!

Ein kurzer Überblick:

NPCs können gegen andere NPCs und den Spieler (je nach Gesinnung) kämpfen. Sie sammeln auch Erfahrung, steigen in ihrem Level auf und können Drops aufheben.

Jeder NPC hat ein eigenes Inventar und Ausrüstungsslots. Neu gefundene Gegenstände sollen mit den bereits ausgerüsteten verglichen und gegebenfalls ersetzt werden.

Die alten (weniger gute) Items werden dann bei Bedarf an andere NPCs weitergegeben, an den Spieler verkauft, oder eingeschmolzen/weiterverarbeitet.

 

Nun weiss ich nicht, wie ich die NPCs die neu gefundenen Items mit den bereits ausgerüsteten vergleichen lassen soll. Nach welchen Kriterien könnte sich der NPC für ein Item entscheiden?

Bei Waffen wäre das noch relativ simpel, da könnte ich die DPS (mit Basisschaden, Angriffsgeschwindigkeit, Krit Chance und Dmg) vergleichen.

Doch bei Rüstungen wird das ganze ein wenig komplizierter, da sie verschiedene Rüstungswerte (phys def, mag def, ranged def, diverse ele defs) haben können, und zusäzliche Stats, die auch den DPS, HP, HP Regeration, Mp Regeration (NPCs können auch Skills selbstständig lernen und benutzen, brauchen dann aber dementsprechend viel Mp), Stamina /Stamina Regenration (wird beim Rennen verbraucht, zB. wenn ein NPC im Kampf keine Pots mehr hat, oder keine Heal Skills casten kann, ergreift er die Flucht) oder andere wichtige Dinge, wie zB Sockel, in die der NPC dann auch gefundene Gems "intelligent" sockeln soll.

Ich dachte an sowas wie Item Wertigkeiten. Also, dass bestimmte Stats bestimmte Wertigkeiten erhalten, und der NPC dann nur die Wertigkeiten vergleicht. Allerdings würden damit nicht die Schwachstellen der NPCs ausgeglichen werden (zB. zu wenig Mana, um ausreichend die erlernten Skills casten zu können, oder zu viel DMG aber zu wenig Defensive usw.).

Eine weitere Möglichkeit wäre es, sich die NPCs beim Kampf diese Schwachstellen merken zu lassen, also welche Schwächen, wie häufig sie auftreten, usw.Diese Daten könnten dann ausgewertet werden, und die Itemauswahl , bzw die Auswahl der zu sockelnden Gems, dementsprechend erfolgen.

Also meine Frage an euch lautet: Nach welchen Kriterien kann sich die KI sinnvoll entscheiden? Nach welchen Kriterien entscheidet sich der echte Spieler?

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Ideen sind doch alle schon mal gut, ein paar Anregungen von mir:

- verwende Scriptable Objects (SOs) für deine Itemtypen (Item-Klasse &  entsprechene SO-Klassen)
- ein Inventar pro NPC kann z.b. über ein Dictionary (von Items) gehalten werden (Inventory-Klasse)
- jeder NPC braucht Statuswerte (Gesundheit / Angriffskraft / Schnelligkeit/ Resistenz / Genauigkeit / Mana ...)
- generell würde ich sagen die "Bewertungsfunktion" sollte erst einmal versuchen einen ausgeglichenen NPC zu erschaffen:

Nun kann man vielleicht noch variieren je nach der Klasse des NPCs (siehe oben). Ein Fernkämpfer benötigt vielleicht andere Werte als ein Nahkämpfer.

Beispiel:
Npc1 (Nahkampf / Physisch): 5/1/4/3/1 (aktuelle Statuswerte) => die "Zielwerte" der Attribute des NPCs wären dann 10/10/5/10/5/0
Npc2 (Fernkampf / Physisch): 5/1/4/3/1 (aktuelle Statuswerte) => die "Zielwerte" der Attribute des NPCs wären dann 5/10/10/5/10/0 

Aus diesen Zielwerten ergeben sich quasi auch "Wichtungen" für die Attribute des NPCs.:
Nahkampf: 1.0 1.0 0.5 1.0 0.5 0.0
Fernkampf: 0.5 1.0 1.0 0.5 1.0 0.0

Jedes Item, welches dem Npc hilft auf seine gewünschten Maximalwerte zu kommen, wird angenommen. Die Wertigkeit eines Items kann nun so bestimmt werden, wie stark das Item die Werte des NPCs in Richtung seiner Zielwerte verändert. Dabei werden die Eigenschaften des Items entsprechend der "Wichtungen" seiner Klasse bewertet.

Beispiel:
Item1 (5,7,4,2,2,8) (Gesundheit / Angriffskraft / Schnelligkeit/ Resistenz / Genauigkeit / Mana )
= 5 + 7 + 2 + 2 + 1 + 0 = 17 Bewertung Item für Nahkampf / Physisch
=  2.5 + 7 + 4 + 1 + 2 + 0 = 16.5 Bewertung Item für Fernkampf / Physisch

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, danke dir für die Anregungen.

Ja das mit den Itemklassen hab ich so gemacht, also alles wird nur per Script generiert und verwaltet.

Inventar und Statklassen hab ich auch so gemacht, also NPCs und PC haben die gleichen Klasse, sodass jede Funktion bzw jeder NPC/PC direkt auf zB target.Inventory oder target.Stats zugreifen kann. Nur die einzelnen Items/Stats unterscheiden sich dann bei jedem NPC.

 

Das mit der Vorgabe der NPC Klasse scheint unausweichlich zu sein. Es gibt keine festen Charakterklassen, also ein jeder kann alles skillen, und verschiedene Skills / Kamptfaktiken kombinieren.

Allerdings wird der Angriffsschaden nach den NPC/PC Attributen berechnet.

ZB: Ein Bogen macht nur ranged dmg. Die Stärke und Intelligenz haben absolut keinen Einfluss auf den Gesamtschaden, den der NPC/PC dann mit diesem Bogen macht.

Also wird nur crit chance, crit dmg, att rate, und Geschicklichkeit berechnet.

Kämpft der Spieler/NPC mit einem Schwert, gillt das gleiche, nur anstatt Geschicklichkeit, wird dann eben Stärke mit einberechnet.

Bei Skills ist das ganze so ähnlich. Man kann zwar jeden Skill erlernen, doch Skills, die Schaden machen, bekommen Schadensmultiplikatoren. Dh, bestimmte Skills werden durch die Attribute des PCs/NPCs verstärkt. Allerdings lassen sich die Skills auch mit den passenden Fähigkeiten und Schriftrollen kombinieren, bzw verändern, sodass zB. ein Fireball kein Mana mehr verbraucht, dafür aber Stamina oder HP. Oder der Schadensmultiplikator kann verändert werden, von Intelligenz auf Geschick oder Stärke, verliert dann aber an Gesamtschaden.

Und das alles können die NPCs eben auch machen.

Das heisst dann, jeder NPC bräuchte eine Hauptklasse, auf die er dann aufbaut, wie zB Magic, Ranged oder Physic, und dann könnte die Wertigkeit der Items, wie von dir beschrieben, anhand der Klasse und ihrer Zielwerte erfolgen.

Das scheint mir so am meisten Sinn zu machen, so könnte auch verhindert werden, dass ein NPC im Laufe seiner Eigenentwicklung sich selbst "verskillt", also zwischen verschiedenen Spezialisierungen schwankt,. Allerdings könnte diese "Schwankung" auch vorteilhaft sein. Was ich damit sagen will, ist, dass, wenn ein NPC zB zu viel daneben haut, also nur noch "Miss"es macht, und keinen anderen NPC mehr trifft, er durch diese Schwankung spontan darauf reagieren könnte, also daraus lernen, und seine nächsten Items nach Treffergenauigkeit auswählt.

Ich glaube, das beste wäre es, beides miteinander zu kombinieren.

Also solang alles gut läuft, wählt der NPC die Items nach den Wertigkeiten der Stats für seine passende Klasse aus. Sollte es jedoch zu Problemen kommen, müsste er spontan darauf reagieren können.

Nun gut, ich werde das nun versuchen, umzusetzen. Das wid ein Spass werden :)

 

Vielen Dank für deine Anregung!.

 

 

 

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, die Lösung war doch recht simpel:

Jeder NPC speichert Kampfinformationen, und wertet diese aus.

ZB. die Trefferquote der letzten Treffer (seit dem Waffenwechsel / der letzen 100  bzw 1000 Angriffe) oder zB. der erlittene Durchschnittsschaden pro Treffer ( in Ahänigkeit zu zB den maxHP).

Beispiel: Es wird maxHp/erlittenen Schaden gespeichert, und wenn der Schaden zB nicht mehr als 30% der maxHp beträgt, ist alles in Ordnung. Und trifft dies bei zB 70% der letzten 100 erlittenen Treffern zu, wäre diese Überprüfung unauffällig. Und dann gibt es eben mehrere ähnliche Überprüfungen.

(Es gäbe auch die Möglichkeit, nicht (nur) gesammelte Informationen auszuwerten, sondern auch Kämpf im Vorraus zu simulieren. Doch da eine präzise Vorhersage zu treffen, stelle ich mir bei all den random Ereignissen/Stats/Möglichkeiten als sehr schwierig vor, da sich zumal ja auch jeder NPC und dessen Items und Stats ständig ändern, und/oder an andere anpassen. Gibt es eigentlich schon eine Schach KI, bei der die Spielfiguren (random) Items und Fähigkeiten besitzen? :D )

Fällt die Gesamtauswertung dieser Informationen unauffällig aus, kann eines der 3  fest vorgegebenen Bewertungssysteme (melee, magic, ranged) angewendet werden.

Ist dies allerdings nicht der Fall, wird ein weiteres, dynamisches Bewertungssystem mit Hilfe der gesammelten Informationen und deren Auswertungen erstellt und angewendet.

Und dann werden neu gefundene und die bereits gefundenen Items im Inventar neu bewerte ,und gegebenfalls angelegt, weiterverarbeitet, oder an andere NPC weiter gereicht.

So kann garantiert werden, dass jeder NPC ständig in  der Lage ist,auf seine "Umwelt"  reagieren zu können, und sich an diese anpasst.

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das klingt alles ganz toll aber geh es was ruhiger an.

Klar soll die KI gut sein, aber ich würde dir empfehlen erstmal nur die basics zu implementieren und dann die restlichen Hauptfunktionen deines Spiels.

 

Wenn du jetzt zuviel Arbeit in die super duper KI legst hast du am Ende die klügste KI aber kein Spiel in der du die KI wirklich testen kannst...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Dj, ja da hast du natürlich Recht damit.

Also die basics sind so weit erstmal fertig.

Der Hauptgedanke war es, eine  dynamische Spielwelt zu erschaffen, die sich ständig selbst verändert, weiter entwickelt und ausbalanciert, und in der jede Handlung  Auswirkungen auf fast alles hat/haben kann. Und ich bin der Meinung, dass die KI in diesem Fall eine große Rolle in dem Spiel/Simulation spielt.

Quests, viele Abläufe und das Balancing werden sehr stark von der KI beeinflusst. Und der Spieler wiederrum kann die KI, und dadurch den Spielverlauf, durch seine Handlungen teilweise mit beeinflussen. Es ist also alles auf direkte und indirekte Art und Weise miteinander verbunden und verknüpft.

Ich als "Erschaffer" des Spieles möchte mich beim spielen dann später selbst noch überraschen lassen können, und auch mal auf unvorhersehbare, doch stets auslabancierte Spielabläufe treffen. Und das ist, glaub ich, gerade bei Singleplayer (Rollen) Spielen, eine große Herausforderung.

Auch das Thema AI an sich ist sehr interessant, da es doch so viele Übereinstimmungen mit unseren eigenen Verhaltens/Handlungs/Denk/Bewertungsmuster gibt. Der wesentliche Unterschied zwischen Mensch und AI ist wohl das Bewusstsein, der Wille und die Emotion. Die AI kann zwar mittlerweile die menschliche Emotion erkennen, bewerten und darauf reagieren, doch wird sie jemals selbst empfinden können?

Doch das ist wohl ein ganz anderes Thema. :D

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, interessantes Thema. Ich bin der Meinung, daß das sogenannte "Bewusstsein" überbewertet wird und es "einfach" aus der Komplexität/Genialität des menschlichen Gehirns entsteht. Was unterscheidet das Bewusstsein von einem System welches Informationen aufnimmt, diese speichert, Muster daraus erzeugt und anhand dieser Muster neue Informationen bewerten kann und darauf reagiert? Es gibt ja Wissenschaftler die meinen, ein Bewusstsein entsteht zwangsläufig in einem solchen System, womit auch einfache KIs quasi bereits ein Bewusstsein entwickeln könnten. Das geniale am Gehirn ist ja, daß wenn du alle digitalen Computer die es heutzutage gibt miteinander verschaltest, du immer noch nicht an die Rechenleistung und die Kapazität des Gehirns heranreichst (meine Meinung). Die Wissenschaft meint allerdings sie könnte es bereits nachrechnen. Ich glaube man unterschätzt immer wieder die analoge "Rechenpower" des Gehirns. Wenn allerdings eine neue Generation von analogen (Bio)-Prozessoren kommen sollte, dann könnte die Leistung heutiger Computer schnell steigen,
http://www.tomshardware.de/Superrechner-menschliches-Gehirn-Wissenschaft-Forschung,news-249437.html
Wenn man das mal hochrechnet bräuchte man 2400 dieser Supercomputer um in Echtzeit zu rechnen (bzw. 199.065.600 CPUs).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...