Kann man die Akteure im Spiel ihre Rüsten-Eigenschaften lernen lassen?

  • Servus,


    beim RPG Maker MZ kann man in der Datenbank unter Akteure, dort rechts oben unter Eigenschaften unter Anderem festlegen, welche Waffen der jeweilige Akteur benutzen kann ('Rüsten' -> 'Waffe ausrüsten').

    Das möchte ich gerne insofern ändern, daß der Akteur zu Anfang, sagen wir mal, nur mit einem Knüppel (Waffenart: Knüppel :P) kämpfen kann.

    Findet er ein Schwert, kann er damit erst einmal nix anfangen. Zum Lehrer soll er, oder per Buch diese Fähigkeit erlernen.


    Also Item erstellen, und unter Effekte... aber da finde ich nichts, was auf die (grundlegenden) Eigenschaften des jeweiligen Chars zugreifen kann.

    Auch über Event hab ich geschaut, aber auch dort nichts gefunden.


    Gibt es da überhaupt eine Möglichkeit zu?


    Danke schonmal im Voraus!



    Gruß, Inu

    • Hilfreichste Antwort

    Heyho!

    Was du relativ easy machen könntest, wäre eine neue Klasse erstellen, die genauso heißt wie die alte und auch ansonsten gleich aufgebaut ist, aber die zusätzliche Eigenschaft hat, die betreffende Waffe ausrüsten zu können. Dann kannst du einfach per Event die Klasse wechseln, ohne dass der Spieler was davon merkt :)


    Aber um die grundlegende Frage zu beantworten, allein per Event ist das leider nicht möglich. Du kannst diese Eigenschaften aber auf mehrere andere Arten direkt in der Datenbank beeinflussen, die wären: Der Akteur selbst, die Klasse, Rüstungen, Waffen und Zustände. Heißt, du kannst es so einrichten, dass der Akteur eine Eigenschaft dazubekommt solange er eine bestimmte Waffe/Rüstung ausgerüstet hat, einen bestimmten Zustand hat oder eben die Klasse wechselst.


    Eventuell ist der Zustand für dich sogar eine einfachere Möglichkeit, ich habe nur noch nie ausprobiert, ob das ohne Plugins außerhalb des Kampfes funktioniert. Könntest du mal versuchen: Erstelle einen Zustand, mit der gewünschten Eigenschaft und achte darauf, dass er auch nach dem Kampf anhält (da gibt es ein Kästchen in der Datenbank, wenn du den Zustand erstellst). Dann füge dem gewünschten Akteur per Event oder Item dem Zustand hinzu.

    Das hat allerdings den Nachteil, dass du den Befehl "Alles heilen" danach nicht mehr ohne weiteres anwenden kannst, da der diesen Zustand mit auflösen würde. Du müsstest also, wenn du den Akteur komplett heilen willst HP, MP und eventuelle andere Zustände manuell heilen, oder einen Schalter einbauen, der aktiviert wird sobald er den Zustand erhält und dann je nachdem ob dieser Schalter aktiv ist, nach dem "Alles heilen"-Befehl den Zustand wieder hinzufügen.

  • Ich bin eben auch mal die Script Call Liste durch gegangen und habe speziell nach "Traits" gesucht. Leider fand ich dabei jedoch keinen vorbereiteten Code, um dynamisch die Liste während des Spielens erweitern oder reduzieren zu können.

    Ein unfertiger Frankenstein-Versuch wäre Folgendes:


    $gameActors.actor(X).addTrait(X);
    Das 1. X ersetzt Du durch die ID des Akteurs aus Deiner Liste, das 2. X durch die ID der Eigenschaft des betreffenden Charakters.

    Vielleicht hat ja jemand eine Idee, wie man das weiter herleiten könnte. "Trait" scheint im Code leider so auch nicht ganz korrekt zu sein, aber beschreibt zumindest in der englischen UI den betreffenden Bereich.
    Meine Idee wäre, dass man anfangs den Charakter mit allen Eigenschaften starten lässt (damit auch die XP erhalten bleiben, was bei einem Klassenwechsel - so glaube ich - nicht der Fall ist) und dann zum Start eines neuen Spielstandes alle Eigenschaften raus nimmt, welche er sich freischalten lassen soll.
    In der Hoffnung dass die IDs dabei beibehalten werden, würde dann in der Theorie die in der Datenbank hinterlegte ID mit dem "add" dazu führen, dass man beim Lehrer die entsprechende Eigenschaft erlernen kann.

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • damit auch die XP erhalten bleiben, was bei einem Klassenwechsel - so glaube ich - nicht der Fall ist)

    Die bleiben erhalten (sonst hätte ich das gar nicht vorgeschlagen, wäre ja schrecklich inpraktikabel^^). Beim Befehl "Klasse ändern" lässt sich "Level speichern" ankreuzen, dann nimmt man alle gewonnenen EXP mit. Tatsächlich ist die Bezeichnung etwas irreführend, weil nicht das "Level" gespeichert wird, sondern nur die EXP-Menge. Wenn die neue Klasse also weniger EXP zum aufsteigen braucht als die alte, hat man unter Umständen durch den Klassenwechsel ein höheres Level, aber dieselbe Menge EXP.

    Aber für den Vorschlag weiter oben, müssten die Klassen ja sowieso bis auf die Eigenschaft komplett gleich sein, da würde sich also gar nichts verändern.


    ChimaereJade

    Du meinst die TraitID ist nicht abhängig von der Eigenschaft selbst, sondern von der Reihenfolge in der sie bei einem Akteur in der Datenbank stehen und demnach bei jedem Akteur unterschiedlich? Das ist ja auch interessant. Das Entfernen der Traits zu beginn des Spiels würde dann auch via Script Call funktionieren?

    Die Script Calls habe ich auf jeden Fall noch sie so gesehen, müsste man mal ausprobieren^^

  • Wenn die EXP erhalten bleiben, ist der Klassenwechsel auf jeden Fall ein guter Workaround!

    Man müsste wahrscheinlich nur schauen, dass es mit solchen Eigenschaften nicht ausufert (da man entsprechende Klassenkombinationen für jede Situation erstellen und mittels Abfragen richtig zuordnen muss). Bei Fähigkeiten ist das ja wesentlich simpler mit den integrierten Funktionen machbar. :)


    Was meinen Ansatz betrifft, so ist das erst einmal nur eine Theorie, welche mehr dem Wunschdenken als wahrer Funktion gleicht. Aber die Grundformel wird so vom Maker verwendet - bis auf den letzten Teil. :D

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • Ja, wenn das für sehr viele Kombinationen der Fall sein soll, würde ich eher den Weg mit den Zuständen, den ich oben beschrieben habe oder ein Plugin empfehlen. Mit VisuStellas Skills and States Core kannst du einen permanenten Status erstellen, der dauerhaft die gewünschte Eigenschaft verleiht. Ich glaube allerdings, dass das nicht mehr kostenlos ist. Sieht sogar so aus, als ob die das nur noch im Bundle mit anderen Plugins verkaufen (was ich kaum glauben kann, weil's mir ultradämlich vorkommt o.O Wer gibt denn 100 $ aus, wenn er drei Viertel der Plugins gar nicht braucht?)


    Gibt aber eventuell noch alternative Plugins, bin da beim MZ nicht so drin. Nur für MV hätte ich noch ein paar andere Möglichkeiten ...

  • Servus.


    Also ich habe es tatsächlich so hinbekommen, wie ich es haben wollte; es gibt ein - ich habe es einfach mal so genannt - 'Buch der Schwertkunst' als Drop.

    Von Anfang an habe ich alle Waffenfähigkeiten in der DB bei dem Akteur entfernt, ein Kurzschwert kann er also net benutzen.

    Nun droppt der besiegte Gegner dieses Buch, sowie passenderweise das Kurzschwert.

    Nu muß der erst das Buch benutzen, danach kann er das Schwert auch nutzen. Klappt wunderbar, Zustand bleibt auch nach Mapwechsel und Spiel sichern/neu laden erhalten.


    Hierzu habe ich:

    Einen Zustand erstellt, der als Eigenschaft 'Schwert ausrüsten' hat.

    Danach das Item, welches den Zustand auf den Akteur überträgt.


    Funktioniert sowohl bei Benutzung im Kampf als auch danach; Zustand bleibt erhalten (Alle Aufhebungsbedingungen rausgenommen;).



    Einziges Manko ist der Umstand mit dem 'Alles heilen'-Befehl, wie von Coucassi erwähnt; vielen Dank für den Hinweis sowie die passende Lösung dazu!

    Auf den 'Alles heilen'-Befehl hätte ich so nie drauf geachtet und mich vermutlich irgendwann dumm und dusselig gesucht, warum die Chars plötzlich keine Schwerter mehr anlegen können; hat der Char bereits ein Schwert in der Hand, kann er dieses solange noch nutzen, wie es angelegt ist. Einmal abgelegt, Pech gehabt, da der Zustand durch 'Alles heilen' ja weg ist...^^


    Und Dank auch an ChimaereJade für den Script Call. Ich werde mal beides versuchen, um zu sehen, was praktikabler ist.


    Bis denn und einen schönen Abend noch;)



    Gruß Inu

  • Schön, dass es funktioniert!

    Falls du bei diesem Weg bleiben möchtest würde ich dir empfehlen die Lösung für das "Alles heilen"-Problem mit den Schaltern und samt den "Alles heilen"-Befehl in ein Gewöhnliches Ereignis zu packen und dann einfach immer das abzurufen, wenn du die Komplettheilung benutzen willst. Spart sehr viel Arbeit^^

  • Also als Scriptbefehl $gameActors.actor(x).addTrait(y) bekomme ich nur eine Fehlermeldung: 'Type Error - ...).addTrait is not a function'.

    Also werde ich das mal mit dem Schalter so zu lösen versuchen, wie Du es grad beschrieben hast. Danke nochmals;)



    Gruß inu

  • InuYasha

    Hat einen Beitrag als hilfreichste Antwort ausgewählt.
  • Ich bin auf das Thema gestoßen, weil ich mich schon vor einer Weile mit einem ähnlichen Problem beschäftigt habe. Die einfachste Lösung dafür wäre, einfach im Spiel einer Klasse ein Trait hinzuzufügen. Dann hätte ich für jeden Charakter eine eigene Klasse erstellt usw.

    Das war auch meine Hauptmotivation dafür, mich mit der Pluginentwicklung auseinanderzusetzen. Und letztendlich bin ich zu dem Schluss gekommen, dass es ohne Weiteres so nicht möglich ist.


    Nach vielem Rumgesuche glaube ich, dass es allgemein nicht (zumindest nicht ohne weiteres) möglich ist Daten aus der Datenbank über ein Plugin dauerhaft zu ändern. Auf jeden Fall gibt es keine offizielle Funktion dafür um Traits hinzuzufügen. Was man machen kann ist folgendes:


    $dataClasses[1].traits.push({code: 51, dataId: 5, value: 1})


    Das ändert die Klassen direkt.

    $dataClasses[1] -- Ist die Klasse in der Bibliothek

    code: 51 -- Ist die Art des Traits, in diesem Fall "Waffen ausrüsten"

    dataId: 5 -- Ist die Waffenart, in meinem Fall "Peitsche"

    value: 1 -- steht vermutlich dafür, dass der Trait aktiv ist


    Also das funktioniert! Fügt man auf diese Weise einen Trait hinzu, ist er auch sofort aktiv. Das Problem ist allerdings, dass das nicht gespeichert wird. Beim nächsten Laden würde zwar der Gegenstand immer noch ausgerüstet sein, der Trait ist aber nicht mehr Bestandteil der Klasse. Ein Möglichkeit wäre es jetzt natürlich immer zu prüfen, ob die Bedingung für den Trait erfüllt ist und es ihn dann jedes Mal wieder hinzuzufügen.


    Meine Idee war nun es genau umgekehrt zu machen. Den Trait einfach der Klasse hinzufügen und dann über ein Plugin nach Belieben aktivieren und deaktivieren. Aber den Value zu ändern bringt leider nichts. Und selbst wenn es funktionieren würde, würde dieser Wert auch nicht gespeichert werden. Habe auch ein Plugin ausprobiert "Dynamic Traits". Das ändert die Traits auf gleiche Weise. Aber auch hier werden die Werte nicht gespeichert.


    Ich glaube die Lösung über Traits ist etwas komplizierter als man denkt. Aber mal gucken, bin ja selbst noch anfänger

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!