Skillsystem

  • Mir geht es nicht darum ob das Sinn ergibt, sondern eher um ein "Was wäre wenn..." Ding.

    Auch möchte ich gerne ein freies Talentsystem haben, in dem man sich selber seine Talente aussuchen kann (ohne feste Richtung oder Entscheidungsmöglichkeit).


    Mir ging es eher darum das wenn ich Nachtsicht +1 als Talent nutze (passive Fähigkeit, als Beispiel), und durch irgend eine andere Situation die Nachtsicht aufgehoben wird. Etwa weil in dem Gebiet ein Fluch wirkt der die Nachtsicht negiert/aufhebt. So etwas in der Richtung.


    Das ein Talent ein anderes teilweise aufheben kann, hat damit zutun das Talente die Nachteile haben, stärker sind als Talente die nur Vorteile haben, sozusagen man hat die Qual der Wahl.

    So als ganz einfaches Beispiel/e:


    Beispiel 1:

    [Talent A] + 50 Stärke und +2 Nachtsicht.

    und/oder

    [Talent B] +300 Stärke und -1 Nachtsicht.


    Beispiel 2:

    [Talent C] +25 Stärke und +3 Nachtsicht.

    und/oder

    [Talent D] +300 Stärke und -1 Nachtsicht.

    Gebiet Eigenschaft:

    -1 Nachtsicht.


    Info:

    Bei Beispiel 1 (+2 - (1 + 1) = Nachtsicht 0

    Bei Beispiel 2 (+3 - (1 + 1) = Nachtsicht 1

    So gesehen wäre Beispiel 2 besser, da immerhin Nachtsicht +1 übrig bleibt. Daher bleibt die Nachtsicht aktiv weil ja 1 mehr als 0 ist (abzüglicher aller Effekte).


    ---


    Ich möchte gerne den Weg gehen das die Auswahl der Talente die eigene Spielweise verändert, darum muss das System komplett offen und uneingeschränkt sein. Theoretisch könnte ein neuer Spieler auch das mächtigste Talent haben... natürlich wird es andere Bedingungen dafür geben, es wäre aber frei möglich.



    Des weiteren möchte ich auch höherwerte Talente einführen, in dem Talente (z.B. Nachtsicht +100) haben, was dann einfach mehr gilt als ein anderes Talent oder ein Fluch der vielleicht Nachtsicht -50 verursacht.

    So gesehen habe ich meine Frage damit schon selbst beantwortet, also müsste ich auch einzigartige Fähigkeiten wie ein Integer/Float Wert machen, während 0 oder -1 als deaktiviert gilt und alles höhere eben als aktiviert zählt?

    Ursprünglich dachte ich an ein Bool oder an ein Enum, aber jetzt hinterher betrachtet wären nummerische Zahlen/Angaben schon besser.


    Ich hoffe ihr versteht ungefähr worauf ich hinaus will, sozusagen das alles noch offen ist und beliebig verändert werden kann.

  • Mir geht es nicht darum ob das Sinn ergibt, sondern eher um ein "Was wäre wenn..." Ding.

    Auch möchte ich gerne ein freies Talentsystem haben, in dem man sich selber seine Talente aussuchen kann (ohne feste Richtung oder Entscheidungsmöglichkeit).

    Ja, das kann ich verstehen. So gehe ich bei meinem derzeitigen Projekt ja auch vor. Nur letztendlich muss das Zusammenspiel ja Sinn ergeben, weil wie willst du sonst die Logik dahinter aufbauen.


    Ich setze da momentan auf ein Würfelsystem gepaart mit Wahrscheinlichkeit, je nach Lernstufe der Skills und auch nach Klasse. Am Anfang bist du halt keine Klasse, kannst dich im Spiel aber so langsam, ohne jetzt eine spezifische Klasse zu spezifizieren, an Klasseneigenschaften heranarbeiten. Doch irgendwann kommt man natürlich an einem Punkt, wo man die Entscheidung des Spielers fest akzeptieren muss und andere Entscheidungszweige dann ausschließen.


    Weißt du, ich kann ja nicht, wie ich an meinem Beispiel oben versucht habe zu beschreiben, drei Talente haben, die sich gegenseitig aufheben. Wie willst du da denn entscheiden welches noch Gültigkeit hat? Oder willst du dem Spieler dann die Spielzeit aller drei erlernten Talente wieder wegnehmen? Ich garantiere dir, das gibt echt schlechte Bewertungen. ;)


    Wobei ich es recht schwierig finde, das Ganze jetzt an deinem Beispiel Nachtsicht zu erörtern. Du sagst ja selbst, Nachtsicht ist eine passive Fähigkeit, entweder man kann nachts sehen oder halt nicht. Da spricht dann natürlich nichts dagegen, wenn das Gebietsweise halt auch mal nicht funktioniert.


    Aber allgemein gesehen ist es schon immer etwas schwierig, wenn ein Talent mal funktioniert und mal nicht. So etwas ist eigentlich meistens eher bei Stats zu finden. Sprich du hast eine gewisse Ausdauer, aber wenn du eine schwere Rüstung anlegst, dann gehen halt Teile deiner Ausdauer verloren.


    Bei Skills ist das meistens eher so, dass es nur zusätzliche Boni gibt. Also du hast ein Talent, Nachtsicht, findest einen Ring, mit Konturen sehen, also kannst du halt beides. Vielleicht eins davon nur bei Nacht, das Andere dann halt bei Tag.


    Nur, am Ende musst du ja auch die Logik dahinter erstmal programmieren. Dazu musst du dir dann halt Regeln schaffen, die du dann umsetzen kannst. Und das kannst du halt nur, wenn du dich festlegst, was nun Gültigkeit haben soll. Also ich behaupte mal, ein ganz freies Talentsystem wirst du nicht hinbekommen, weil der Spieler wird sich immer entscheiden müssen, was er jetzt tut. Und da musst du ihm nun helfen, das Ganze so zu gestalten, dass er nicht aus Versehen stundenlange Spielzeit vergeudet.


    Des weiteren möchte ich auch höherwerte Talente einführen, in dem Talente (z.B. Nachtsicht +100) haben, was dann einfach mehr gilt als ein anderes Talent oder ein Fluch der vielleicht Nachtsicht -50 verursacht.

    So gesehen habe ich meine Frage damit schon selbst beantwortet, also müsste ich auch einzigartige Fähigkeiten wie ein Integer/Float Wert machen, während 0 oder -1 als deaktiviert gilt und alles höhere eben als aktiviert zählt?

    Ursprünglich dachte ich an ein Bool oder an ein Enum, aber jetzt hinterher betrachtet wären nummerische Zahlen/Angaben schon besser.

    An der Stelle bin ich aber wieder beim Würfel/Wahrscheinlichkeitensystem. Was spricht zum Beispiel dagegen, dass du einen Skill einführst, der gegen den Fluch wirkt, dass du gegen einen Fluch resistent wirst, oder welche Umsetzung auch immer?


    Ich kann dir da natürlich letztendlich nur so weit helfen, wie ich mein Skillsystem erarbeitet habe. Ich mache es zum Beispiel so, dass einige Wege dazu führen, dass man gegen magische Angriffe resistent wird, bis zu einem gewissen Punkt. Das ist ebenfalls ein passiver Skill, er wird immer dann trainiert, wenn du mit einem Zauber angegriffen wirst. Die Resistenz und auch die Lernfähigkeit sind natürlich wieder abhängig vom derzeitigen Wert verschiedener anderer Skills. Durch diese Vielfältigkeit und dem Faktor Zufall, kommt dann natürlich ein sehr offenes Skillsystem zustande, welches aber dennoch gewissen Regeln folgt.


    Das wäre, denke ich, mal ein Beispiel aus meinem Skillsystem, was dir vielleicht weiterhelfen könnte. Nun kann ich natürlich leider nicht mein komplettes Skillsystem hier offenlegen, um dir ein Beispiel zu geben, gar nicht mal, weil ich es unbedingt geheim halten möchte, aber sollte ich vor meinem Ableben das Spiel tatsächlich mal veröffentlichen (OK, recht unwahrscheinlich), möchte ich natürlich auch nicht, dass Spieler dieses Forum finden und durch die genaue Beschreibung der Funktion dann irgendwie Cheaten oder so. :D

  • Tomarr

    Es gibt viele Möglichkeiten so etwas einzubauen und umzusetzen, was auch echt prima ist!


    Du solltest auch an der Stelle bei dir überlegen wie du die Fähigkeiten in höhergestellte Dinge umsetzen kannst.

    Wie oben schon angesprochen, ab wann ist die Nachtsicht Aktiv und ab wann ist die Nachtsicht aufgehoben (durch andere Einflüsse) also was davon höherwertiger ist und am Ende mehr Gewichtung hat.


    Ich verfolge den Ansatz des chaotischen Spielens, das bedeutet das das die meisten Spielinhalte von Spieler zu Spieler unterschiedlich sind. Genau das Gegenteil von Gleichheit.

    Kurz gesagt; Spieler haben unterschiedliche Leben, Schadenswerte usw.


    Das ist auch der Grund warum ich das System frei gestalten möchte.



    Ich finde Systeme die NUR Vorteile bieten schwierig, weil man sich immer auf den höchsten Wert konzentriert und nicht auf ein Gleichgewicht von Vor- und Nachteilen. Darum haben bei mir auch fast alle Dinge Vor- und Nachteile (nur einfach Dinge haben Vorteile für den Spielanfang), weshalb es für mich wichtig ist das diese ganzen Dinge wieder aufgehoben/negiert werden können.


    Angenommen die Nachtsicht wäre in einem PvP Spiel (was ich machen möchte) Overpowered, weil man die Gegner damit besser im dunkeln sieht (irgendwie logisch), dann muss dieser Vorteil einen viel größeren Nachteil bekommen. Wenn man nur den Vorteil der Nachtsicht erhalten würde, wäre man irgendwie dazu gezwungen alles andere stärker zu machen (wenn man dafür den Ring-Sockel opfern muss), oder die Nachtsicht aus dem Spiel entfernen oder allgemein abschwächen.

    Das halte ich für schwieriger als wenn die Nachtsicht nach meiner Idee nach eine Option wäre, aber fest verbunden mit Nachteilen so das man gut abwägen muss ob man diese Entscheidung eingehen will.


    In vielen anderen Online Spielen muss ich auch bemängeln das es zu viele gestaffelte Vorteile gibt, die dazu führen das man in gewissen Bereichen zu mächtig werden kann.

  • Ich habe ja nicht geschrieben, dass es nur Vorteile geben wird. Aber auf jede Aktion gibt es halt auch eine Reaktion. Das macht den Ausgleich. Zudem wird es bei mir einen Skillkap geben, also du wirst nicht alles auf 100 Prozent trainieren können. Von daher wird sich da schon jeder Spieler entscheiden müssen, mit welchen Fähigkeiten er besser klarkommt und was er aus seinem Charakter letztendlich machen will.


    Aber eigentlich hast du doch gefragt wie wir es umsetzen würden, ich habe dir da halt meine Bedenken mitgeteilt, ohne den Anspruch auf alleinige Richtigkeit. Also wenn du der Meinung bist es geht doch, dann setze es doch so um wie du meinst, dass es richtig ist.


    Ich als langjähriger Rollenspieler, sowohl auf PC als auch Pen and Paper kann dir halt nur sagen wie meine Erfahrungen und wo meine Bedenken sind. Mehr kann ich auch nicht tun.

  • Du, das ist ja kein Problem. Nur, wenn du das um jeden Preis so machen möchtest, wie du es oben beschrieben hast, dann gibt es halt sehr wenig Möglichkeiten, um genau zu sein gar keine, irgendwie dabei anders vorzugehen.


    Dann musst du halt wirklich direkt in den Code schreiben, wenn Nachtsicht und Konturen sehen vorhanden, dann Nachtsicht nicht möglich. Das ist nicht wirklich schwer. Braucht zwei Variablen, die du mit AND vergleichst und ein Branch, welches dann in True und False verzweigt. Bei True kommt dann Nachtsicht inaktiv, bei False ist Nachtsicht möglich.

  • Mit AND schon.


    Wenn du in deiner Programmierung folgendes hast, in welcher Form auch immer, es ist egal, ob du ein Talentarray oder eben halt einzelne Variablen benutzt, dann kannst du abfragen ob


    Nachtsicht gleich true

    Konturen sehen gleich true


    das geht beides in ein AND, und es ergibt halt true wenn beide Eingänge auch true haben.


    Genaueres kannst du auch in meinem Wikieintrag zur AND-Node finden. Dort habe ich auch andere logische Operatoren beschrieben, jeweils mit einer Tabelle, wann welcher logische Operator true und wann false ausgibt.

  • Mit AND & OR ?
    AND, wenn JA & JA dann = True
    OR, wenn eines von beiden JA dann True.

    Beispiel: es wird abgefragt ob "Nachtsicht" AND "7. Sinn" wenn TRUE dann wird es negiert bzw. dein gewünschter Effekt.

    Also bei boolesche Variablen wüsste ich halt nur dass du "Und", "Oder", "Nicht" -Abfragen machen kannst.

    Weil wieder darüber geschrieben wird:
    Keine Ahnung ob es überlesen wurde oder nicht relevant war.

  • Nein, Bool gibt immer true (wahr) oder false /falsch) aus.


    Also kannst du zum Beispiel abfragen, hat der Spieler das Talent Nachtsicht gelernt? Wenn ja, ist der Wert Bool=true ansonsten false.


    Du kannst aber auch abfragen ob etwas größer, kleiner, gleich usw. ist.


    Zum Beispiel ist der Wert für das Talent Nachtsicht größer als der Wert für das Talent 7. Sinn. Wenn dem so ist, kriegst du true zurück und wenn nicht false.


    Diesen bollschen Wert benötigst du für eine Branch, in normalen Programmiersprachen IF...THEN. Mit Branch verzweigst du dann, wenn etwas true oder false ist, in den entsprechenden Programmablauf.


    Das hat aber nichts mit der letzten Veränderung zu tun.


    Stell es dir wie ein normales Gespräch vor. Willst du einen Kaffee, wenn du ja sagst, hole ich dir einen, wenn nicht, dann halt nicht.

    Oder, ist dein Sohn größer als deine Tochter, wenn ja, geht das Gespräch so und so weiter, wenn nein, dann halt anders.

  • Lassen wir das mit dem Bool, ich glaube wird reden einander vorbei.




    Kann man durch den "Float Sign", welcher angibt ob ein Wert + oder - ist, automatisch selbst von einem anderen Wert addieren oder subtrahieren lässt, ohne vorher zu prüfen ob der Wert + oder - ist?

    Sozusagen das die Formel selber den Wert erhöht oder reduziert.


    Kann man den Inhalt von mehreren Structs, zusammen zählen?

    Z.B. Leben +1 und -1 = 0


    Ohne das man für jede Variable, jedes mal prüfen muss ob man den Wert addieren oder subtrahieren muss?

  • Ich bin jetzt irgendwie verwirrt. Vorhin waren wir noch bei Talenten und welches nun mehr Gültigkeit hat und welches nicht usw. Jetzt sind wir bei Leben + und -?


    Und zu welchem Zeitpunkt können denn Leben einen negativen Wert annehmen? Und selbst wenn das geht, dass ein Leben einen negativen Wert hat, wieso sollte es davon abhängig sein, ob man jetzt Plus oder Minus nimmt?


    Ich glaube, da musst du noch ein wenig mehr ins Detail gehen.


    Spontan würde ich jetzt auch fragen, warum du das Vorzeichen prüfen willst. Wenn du +1 + -1 addierst, hast du automatisch 0.

  • Es ist das gleiche Thema wie bisher. Ich möchte gerne alle Werte zusammen zählen oder entsprechend wie im Struct eingetragen, addieren oder subtrahieren.

    Ob Nachtsicht oder Leben + und -, ich würde gerne beides in der Struct zusammen zählen lassen.

    Mehrere Struct im Array und den Inhalt der mehreren Structs im Array, möchte ich gerne zu einem einzigen finalen Struct zusammen zählen lassen, eben durch "for each loop".

    Leider überschreibt for each loop, derzeit den aktuellen Wert durch den letzten Wert und nicht alle Werte zusammen, dabei wichtig ob + oder -, es muss am Ende richtig sein. Ohne das ich für jeden Wert vorher eine Abfrage machen muss.

    Sozusagen eine Berechnung von + oder - in der Gesamtheit.


    Ich prüfe das Vorzeichen weil das wichtig ist ob der Wert reduziert oder addiert wird.


    Komischerweise ist 10 + -1 = 11

    Ich hätte gerne das es 9 ist.


    Weiss auch nicht wie ich das anders beschreiben soll.

  • Warum packt man mehrere Structs in ein Array?


    Du solltest erstmal deine ganzen Variablen sortieren, auch die Structs, wo was drin steht.


    Das Hauptproblem dürfte bei dir folgendes sein. Wenn du eine Structure hast, nehmen wir mal an, mit den Playerstats, ich nehme da mal meinen Player als Beispiel.


    Ich habe eine Structure, die beinhaltet folgendes.


    Strength

    Dextery

    Intelligence


    Das sind halt so die drei Werte die alle Aktionen des Spielers beeinflussen können.


    Wenn ich jetzt zum Beispiel den Wert von Strength erhöhen will, muss ich mit dem Set Strength +1 übergeben, Dextery der Originalwert, Intelligence der Originalwert übergeben. Sprich ich muss die gesamte Structure einmal übergeben, obwohl ich nur einen Wert ändere.


    Wenn du jetzt ein Array mit, ich nehme mal an verschiedenen Structuren, hast, wie willst du da dann noch kontrollieren, welche Structure, welchen Wert wohin übergibt.


    Ich habe es jetzt nicht ausprobiert, aber das BP könnte ein wenig im Chaos enden.


  • Ich meine im Array sind die gleichen Structures drinnen (eben Talente) und die will ich zusammen zählen oder abziehen.

    Das war auch der Grund warum das mit dem Bool nicht geht, weil in jedem Struct alles nicht genutzte 0 ist, oder demnach false.

    Würde ich alles zusammenzählen habe ich ganz viele fales und vielleicht ein true, wäre ja trotzdem false.


    Das mit dem ++ geht ja leider nur in eine Richtung (schon getestet), eben additiv, aber das was ich bräuchte wäre dynamisch additiv und subtrativ. Je nachdem welcher Wert enthalten ist.

    Und das alles ohne für alles extra eine Abfrage zu machen.

  • Bist du sicher, dass du schon ein paar Programmierkenntnisse hast?


    Das mit dem ++ war jetzt nur von mir kurz dahin geklatscht, weil ich es noch nicht wirklich eingebaut habe. Mit der ADD-Node kannst du dann sogar entsprechenden Wert einfügen.


    Oder du machst dir eine Subfunktion, in der kannst du dann übergeben, was, wie viel, wann, steigen oder sinken soll. Beim Steigen übergibst du halt einen positiven, beim Sinken einen negativen Wert.


    weil in jedem Struct alles nicht genutzte 0 ist,

    Ich bin ja vorher auch davon ausgegangen, dass du nur festlegst, ob Nachtsicht vorhanden ist oder nicht, also boolsche Werte vorhanden sind. Von Floats hast du erst viel später geschrieben. Kein Mensch fragt Floats über boolsche Logik ab.


    alles nicht genutzte 0 ist, oder demnach false.

    Würde ich alles zusammenzählen habe ich ganz viele fales und vielleicht ein true, wäre ja trotzdem false.

    Sorry, ich weiß nicht, ob es an mir liegt, aber ich kann deiner Logik beim besten Willen nicht folgen. Also 0 würde false ergeben, was ja auch richtig ist, aber vielleicht ein true, welches dann aber auch false wäre? Bitte was?

  • Das mit dem ++ geht ja leider nur in eine Richtung (schon getestet), eben additiv, aber das was ich bräuchte wäre dynamisch additiv und subtrativ. Je nachdem welcher Wert enthalten ist.

    Und das alles ohne für alles extra eine Abfrage zu machen.

    ++ addiert auch immer nur 1 dazu und -- subtrahiert immer um 1 weg.

    aber du kannst doch die ganz normalen float + float funktion nehmen? Da brauchst du auch nicht abfragen.

    Wenn deine erste Fähigkeit +1 hat und dann deine zweite Fähigkeit -1 dann hast du halt 0.
    Da brauchst du nichts vorher abfragen ob Plus oder Minus.

    Du musst es halt dann bei der Fähigkeit die was wieder Debuffen soll halt mit Minus angeben und nicht als positiven Wert den du dann irgendwo abziehen möchtest.


    Beispiel:
    Skill: Beserker

    Stärke: +300

    Leben: -100


    Da kannst du die Werte mit deinen vorhandenen dazu rechnen.. Wenn du schon 500 Leben hast und die -100 dazurechnest (also 500+ (-100)) kommt bei mir 400 raus. Und Unreal rechnet das auch so :D