Skillsystem

  • Nun bin ich leider an einem Punkt angekommen wo ich Denkfehler habe/bekomme.


    An deinem Beispiel sieht man zB deinen Denkfehler. Und auch genau das was ich im vorherigen Beitrag meinte.

    Du schreibst "Gebiet Eigenschaft: -1 Nachtsicht", möchtest aber bei deiner Beispielformel 3 - (1+1) rechnen.
    Anstatt einfach 3+ -1 zu rechnen. Dass ist dann auch x-beliebig erweiterbar. 3+ -1 + -1 gleich 1.

    Heißt deine Debuffs musst du mit einem negativen Wert angeben. Ist auch wesentlich verständlicher.


    Wenn du in dein Gebiet gehst was die Fähigkeiten weg nimmt, dann gibst du es mit negativen Werten an.

    • Offizieller Beitrag

    Das Problem was ich hier sehe ist das man einen Bool nicht zusammenzählen kann.

    Puh dem Thema ist echt schwer zu folgen aber ich versuchs mal:


    Der Bool ist entweder Wahr oder falsch und man kann einen Bool nicht addieren. Ich denke soweit sind wir uns alle einig.


    Nun könnte doch die Nachtsicht entweder aktiv sein oder sie ist aus ? Ich glaube das ist doch auch was du willst oder ?

    Das heißt der Bool ist entweder wahr oder er ist falsch.


    Ist deine Nachtsicht + 10, dann ist die Nachtsicht im + Bereich und somit True.

    Die die Nachtsicht auf -10 dann ist die Nachtsicht im - Bereich und somit False.


    Wichtig ist doch nur obsie größer als 0 oder kleiner als 0 ist. Das entscheidet ob True oder False.


    Wenn dein Charakter etwas einsammelt wo dein Held +20 Nachtsicht dazu bekommt, addierst du auf die - 10 die 20 dazu und bist im + Bereich und dein Boolean ist True.


    Du hast festen Nachtsicht Counter auf den du etwas addierst und etwas abziehst je nach was passiert.

    Schält dein Char das Nachsicht an, nur dann musst du prüfen ob dein Wert nun True oder False ist. Die einzige Frage wo du dir dann stellen musst, bin ich im + Bereich (True) oder im Minus Bereich (False.)


    Es spielt doch keine Rolle wie weit du im + oder wie weit du im Minus bist.


    Nehmen wir mal an du willst dass dein Charakter bei + 100 übernatürliche Kräfte entwickelt, dann musst brauchst eine 2. Abfrage die einen anderen Bool auf True setzt wenn der Wert über 100 ist.


    Ist der Nachtsicht Counter größer als 0 dann setze den Nachtsicht Count auf True.

    Ist der Nachtsicht Counter kleiner als 0 dann setze den Nachtsicht Count auf False

    Ist der vom Nachtsicht Count größer als 100 dann setze den Superkräfte Boolean auf True.

    Ist der vom Nachtsicht Count kleiner als 100 dann setze den Superkräfte Boolean auf False


    Vielleicht hab ich das Problem auch grundlegend nicht verstanden :/

  • Ich glaube man versteht nicht was ich meine, daher versuche ich es noch mal ausführlicher zu erklären.


    Mein "Talent-Structure" hat alle Informationen enthalten die es gibt (Gesundheit, Ausdauer, Nachtsicht usw.).

    Jedes Talent nutzt die ganze Talent-Structure.

    Nun möchte ich das alle Structures in einer Variable-Array Structure (auf Basis von Talent-Structure) in diesem Array zusammen gefügt werden, damit am Ende ein Structure Wert herauskommt welcher alle Werte enthält.

    Dies ist genau der Grund warum das mit dem Bool nicht funktioniert! (Siehe Klammer)


    Talent 1:

    + 100 Leben

    - 100 Ausdauer

    + 3 Nachtsicht (Bool = True)


    Talent 2:

    - 100 Leben

    + 100 Ausdauer

    - 3 Nachtsicht (Bool = False)


    Talent 3:

    + 1 Leben

    + 1 Ausdauer

    + 1 Nachtsicht (Bool = True)


    Talent 4:

    + 0 Leben

    + 0 Ausdauer

    + 0 Nachtsicht (Bool = False)



    Das sind 4 Talent Beispiele die gegensätzlicher nicht sein könnten.

    Wenn ich als Spieler alle 4 gleichzeitig ausgerüstet habe, müsste am Ende folgendes herauskommen:


    Talent 1 - Talent 2 - Talent 3 - Talent 4 = (wie Talent 3, also +1,+1,+1)


    Würde ich an dieser Stelle einen Bool verwenden, würde automatisch der letzte Bool zählen. Weil 2x True und 2x False = ????

    Weil alles zusammen gezählt wird, wird bei Bool immer die letzte Eingabe als aktuell gültig angewendet. In diesem Fall wäre Talent 4 was als letztes geladen wird, automatisch Bool False, obwohl bei Talent 4 Nachtsicht als 0 betrachtet wird (in addition also ignoriert, weil 0 nichts ist).


    Daher bitte vergesst das mit dem Bool komplett, es ergibt keinen Sinn!


    Wichtig ist nun, wie zähle ich alles zusammen?

    Ohne das ich für jeden Wert ein Branch machen muss mit <0 (X+Y) oder >0 (X-Y).


    Beispiel:


    Talent 1:

    + 100 Leben

    -> Branch >0 = True -> X+100 = Y


    Talent 2:

    - 100 Leben

    -> Branch >0 = False -> X-100 = Y



    Darum noch mal die Frage:

    Kann man mehrere identische Structures innerhalb einer Variable-Array Structure miteinander zusammen zählen damit alle Structures (in dem Fall alle Talente), in diesem Variable-Array am Ende zu einer zusammengezählten Structure werden mit den finalen Werten aus allem?

    Ich konnte diesbezüglich leider nichts finden was meine Frage beantworten könnte.


    Beispiel:

    Alle Structures sind gleich, nur die Zahlen sind unterschiedlich!

    Nun packe ich die beiden Structures in ein Array in meinem MyCharacter und dort im Array sollen diese miteinander gezählt werden.


    Structure 1:

    X = 1

    Y = 1

    Z = 0


    Structure 2:

    X = 0

    Y = 0
    Z = -1



    Aus 2 Structures im Array soll nun ein Ergebnis Structure werden was folgendes enthält:


    Ergebnis Structure:

    X = 1

    Y = 1

    Z = -1


    Besser die Erklärung?

  • Das sind nicht 4 Talente in deinem Beispiel, das sind jeweils zwei Stats und ein Talent.


    In der Regel werden Ausdauer und Leben nicht als Talent in einem RPG gewertet. Ich kann nur wiederholen, du machst es dir zu schwierig.


    Warum kannst du überhaupt -100 Leben oder Ausdauer haben? Das ergibt keinen Sinn. Toter als tot geht ja nun einmal nicht.


    Und warum willst du überhaupt eine Struktur haben, in der stumpf alle Werte zusammengezählt werden? Dann mach doch eine Integervariable, in der du alle Werte summierst. Weil wenn du alle Werte von Stats und Talenten eh zusammenbringst ist es doch sowieso ein Einheitsbrei wo du nicht mehr unterscheiden musst was nun was ist.




  • Im Grunde willst du ja nur das???
    Mehr sollte es doch eigentlich nicht sein.

    Dein SUPER ERGBNIS STRUCT sind halt deine PlayerStats, also deine Finalen Werte für Leben, Stärke, Ausdauer, Nachtsicht etc etc etc.


    Deine Talente selbst sind auch Structs mit den von dir gegebenen Werten/Stats.
    Diese muss du dann doch nur mit deinen schon vorhanden stumpf zusammen addieren.
    Dein Finales Struct muss halt natürlich alle möglichen Fähigkeiten/ Werte die dein Spieler je haben kann schon beinhalten. Dies ist natürlich eine Vorraussetzung.


    Ein Struct ist ja nur eine Sammlung von Variablen. Ich glaube da kannst du nicht ein Struct mit einem anderen zusammen zählen. Da kannst du dann nur die einzelnen Variablen der Structs weiter geben.


    Solch Fähigkeiten wie zB deine Nachtsicht musst du dann am besten auch Integer-Werte geben. Der Wert entspricht dann quasi wieviel Power du da hast. 2 Talente geben plus Nachtsicht und 1 Talent gibt minus Nachtsicht. Dann fragst du halt ab ob höher als 0. Falls ja dann hast du halt immer noch Nachtsicht. Ob du Nachtsicht hast oder nicht, muss du eh irgendwo dann abfragen.

    • Offizieller Beitrag

    Bei einer Structure kommst du nicht herum die auszupacken und wieder einzupacken. Das bedeutet, eine Structure muss soweit aufgefächert werden, sodass man sie mit einem Script bearbeiten kann und dann wieder zusammen bauen. Ich wollte es jetzt einfach mal zur sicherheit erwähnen ^^


    Ich würde das so machen:

    Die Structure so aufbauen, sodass dein Script sie alle nacheinander abarbeiten kann.


    Leben Structure:

    Leben 100

    LebenProzent: 10%

    Regeneration: 1%


    Schaden Structure:

    Schaden: 300

    SchadenProzent: 30%

    Schnittschaden: 20 (DoT)


    Beide Structuren können in einer Structure Array sein.


    Erster Script:

    Alle Leben, Alle Schaden zusammen zählen. In eine Variable festhalten.

    Alle LebenProzent, Alle SchadenProzent zusammenzählen, In eine Variable festhalten.

    Alle Regeneration, Alle Schnittschaden zusammen zählen. In eine Variable festhalten.


    So, Loop ende.


    Nächster Script:

    die 3 Variablen zusammen zählen. Gegebenfalls noch so scripten, sodass die Werte sinnvoll genutzt werden.

  • So ungefähr, nur eben mit einer automatischen + und - Erkennung.

    Weil beim addieren, z.B. -100 Leben wird in der Formel einfach +100 gerechnet.


    200 + (-100) = 300 laut der Formel. Genau das ist mein Problem.


    Schade das man Structures im Array nicht mit sich selber zusammenrechnen kann, dachte diese Funktion gäbe es in UE.


    Ein Resize habe ich bisher noch nicht gebraucht, wofür ist das gut?

    Wofür ist der Set Array Element gut?

    Bisher habe ich alles mit Add Array gemacht.



    Ich brauche negative Werte in den Talenten, weil nur positive Werte mir zu wenig sind.



    Dj EKI


    So habe ich das auch gemacht.

    Mein Problem warum ich hier überhaupt schreibe ist das addieren der ganzen Werte ist total easy, nur eben nicht der negative Bereich. Also das Subtrahieren von Werten.

  • DJ Eki hats schön gesagt. Und ich glaube da kommt auch bei heraus dass das Ganze das Struct ein wenig ad absurdum führt. Wenn du jetzt mit Funktionen mühevoll in bestimmter Reihenfolge alles auslesen musst stellt sich die Frage wie sinnig es ist unbedingt am Struct festzuhalten.


    Meiner Meinung nach macht es mehr Sinn so Dinge wie "maximale Ausdauer" und "Maximales Leben" in einer Variable festzuhalten. Die ist einfach zugreifbar - gehört für mich klassischerweise in den PlayerState.


    Die "skills" "talente" , "perks" oder wie auch immer das auf Neudeutsch oder Denglisch heisst - das sind doch Dinge die zwar diese Variablen beeinflussen, aber man muss sagen - in den meisten Spielen bekommst du "relativ selten" ein neues talent, also sagen wir mal einmal am Tag oder so. Sprich - das ganze muss sehr selten berechnet werden. Von daher würde ich lieber eine Funktion machen um die "talente abzuarbeiten", die ganzen schwindeligen berechnungen zu machen und dann Max Lebensenergie, max Ausdauer, Nachsicht usw zu setzen. Es reicht ja diese dolle Berechnungsfunktion immer dann aufzurufen wenn man ein neues Talent bekommt, eines verliert, oder wenn man ein neues Spiel startet/lädt. Also eigentlich recht selten. Und vielleicht gibts ja später auch Potions die die Werte beeinflussen aber gar nix mit Talenten zu tun haben. Sagen wir mal du trinkst im Spiel nen Schnaps und der gibt halt -100 Ausdauer (man wird etwas träge, nur Beispiel!!!). Dann ist dir doch wurscht ob der Spieler seine 1500 Ausdauer die er gerade hat durch Talente, Ausrüstung oder sonstwas hat, da willste doch nur einfach abziehen oder addieren.


    Sicherlich kann mans auch irrsinnig kompliziert machen, aber wir merken ja schon - dann blickt auch keiner mehr durch. Structs und auch arrays von structs können Sinn machen - aber in diesem Beispiel stelle ich das mal grundsätzlich ernsthaft in Frage.

  • Hier auch mal ein Bild.

    Der Grundgedanke war alle Struct Arrays zusammen zu zählen, um am Ende eine Variable Struct zu erhalten in dem alles automatisch berechnet wurde, daher meine Frage mit der automatischen + und - Erkennung.



    Wenn ich das so machen würde, wäre es extrem umständlich (aber möglich).


    Was noch viel schlimmer ist, stelle ich einmal die Structure um, zerreist es mir die ganzen Berechnungen (das hatte ich schon mal das Problem).


    Also dann für jeden Structure Inhalt eine eigene Variable machen, in dem Fall z.B. Lebenspunkte Variable und da alles addieren, und am Ende alles in ein gesammeltes Structure zu packen damit ich eine einfachere Möglichkeit habe.


    Auch nicht besonders leicht aber zumindest realistischer als so wie oben im Bild.


    Ich hatte echt gehofft man kann alles im Array mit sich selber automatisch zusammenrechen lassen!


    ---


    So wie hier besser, sozusagen die einzige Lösung wie man das zusammen rechnet?

  • Wenn bei dir bei der Addition eines Minuswertes nicht automatisch subtrahiert wird, machst du irgendetwas falsch. Gib doch mal, um mal die Werte deines Beispiels zu nehmen, 200 + -100 in den Taschenrechner ein, dann bekommst du 100 raus und nicht 300. Und die Unreal Engine rechnet genauso. Wenn sie das nicht macht, dann machst du irgendetwas falsch.


    Ich habe hier extra mal zwei Variablen angelegt, der Name ist Programm, sie haben genau den Wert, den auch der Name anzeigt.

    Und bei mir kommt genau 100 dabei raus.


    Es würde mich auch extrem wundern, wenn dem nicht so ist.


    Vielleicht solltest du mal einen Screenshot von deiner Formel posten, damit wir auch sehen können, was da falsch laufen könnte.


    Was das direkt Rechnen mit Strukturen und Arrays angeht, das hat nichts mit Unreal zu tun, das geht programmiertechnisch allgemein nicht. Mir ist keine Programmiersprache bekannt in der du mit ganzen Strukturen oder Arrays direkt rechnen kannst, indem du sagst Array1 + Array2 = ResultArray.


    So wie hier besser, sozusagen die einzige Lösung wie man das zusammen rechnet?

    Ohne jetzt zu wissen, welche Werte die Variablen im Einzelnen annehmen könne, lass mal das Branch weg und addiere einfach.


  • Oki danke, also der rechnet plötzlicherweise wieder richtig.

    -100 + -100 = -200 also richtig


    Vorher hat der da irgendwie anders gerechnet, merkwürdig!


    Danke an alle, das Problem hat sich damit erledigt.