Visustella Self-Variable Mathematik über Events hinweg: Rechenoperation wird nicht ausgeführt.

  • Hallo meine hübschlichen Mitmakernden,


    ich habe ein Problem beim Aufsetzen eines Event-Systems und kann mir nicht richtig erklären, woran es hapert.


    Zuerst einmal nutze ich das Visustella Events- and Movement Plugin und nutze die Benennung "<Self> ..." damit Variablen zu Self-Variablen werden.

    Ich kürze das im folgenden nur immer mit "SelfVar" ab - Die Benennung ist aber wie oben angegeben richtig für Visustella in der Datenbank hinterlegt.


    Es geht darum, dass man im Laden Dinge verkaufen kann. Das Geld bekommt man aber nicht sofort, denn die Ware wird dann erst ausgestellt (Event Spawning in bestimmter Region mit Charakter-Bild der Ware).
    Das funktioniert soweit.


    Ich nutze eine Template Map für Waren die man verkaufen können soll. (MapID = 247)

    Darauf dann eben die Eventvorlage "Ware1" mit der EventID 001.


    Dieses Event wird erfolgreich auf Map 248 gespawnt und erhält folgende Parameter:

    (Variable 35) SelfVar EventID= 1000Standard 1. ID bei spawned Events
    (Variable 32)SelfVar Sell Price = 50Wird bereits im Template "Ware1" auf Map 247 festgelegt
    (Variable 33) SelfVar Sell Amount = EingabeDas ist die Anzahl die der Spieler verkaufen möchte (die Anzahl der ausgestellten Ware also)
    (Variable 34) SelfVar Sell Volume = 10 Das ist die Anzahl die von Sell Amount abgezogen werden soll pro Tag. Also die Anzahl von Ware1 die pro Tag verkauft werden kann.



    Die Variablen werden alle gespeichert und haben den richtigen Wert. Das Event wird also gespawnt und alles passt soweit. Jedes gespawnte Event hat auch eine eigene ID und die wird in der SelfVar EventID gespeichert und das lass ich mir zu Testzwecken per Textbox anzeigen. Hier passt alles. Ich hab momentan zwei Slots (Regions-Felder) in die ich Ware1 packen kann. Ich kann z.B. 10x Ware1 platzieren und zusätzlich nochmal 20x Ware1 platzieren und dann sind meine beiden Slots belegt und fertig. Jedes der beiden gespawnten Events hat dann auch die richtige EventID (1000,... 1001, ...) in der SelfVar gespeichert, Sell Price, Sell Amount und Sell Volume.


    Wenn der Spieler schlafen geht wird ein Common Event ausgelöst, dass durch alle gespawnten Events auf der Map 248 (Mein Testladen, wo die Events gespawnt werden) cyclet. Das funktioniert auch. Ich habe da einen Schalter eingebaut, der aktiviert wird und wenn das Common Event durch die Events gecyclet ist, wird mir an der ausgestellten Ware ebenfalls per Textbox ausgegeben, dass das Common Event hier durchgelaufen ist. Das passt also alles soweit (augenscheinlich).


    Nun ist das Problem aber, dass in diesem Common Event festgelegt ist, dass die SelfVar Sell Volume von der SelfVar Sell Amount abgezogen werden soll, dies aber nicht geschieht.


    Ich hab das zunächst mit dem ganz normalen Plugin Command Self Variables umgesetzt, hat aber nicht funktioniert. Danach hab ich einen Script Call geschrieben - wobei ich anmerken muss, dass ich kein erfahrener Scripter bin... Klappt auch nicht, aber hier der Call:


    var mapId = $gameVariables.value(4); Momentan auf 248 gesetzt

    var eventId = $gameVariables.value(5); cyclet von ID 1000 bis 2000 in einem Loop durch)

    var variableID = 33; Die ID der SelfVar Sell Amount

    var difference = $gameVariables.value(33) - $gameVariables.value(34); Differenz zwischen Sell Amount und Sell Volume


    setSelfVariableValue(mapId, eventId, variableID, difference); Laut dem Beispiel von Visustella (unten eingefügt)

    Code
    1. Example: setSelfVariableValue(12, 34, 56, 88888)

    http://www.yanfly.moe/wiki/Eve…vement_Core_VisuStella_MZ


    Ich habe es vorher wie folgt probiert und weiß, dass der obere Call nicht super effizient geschrieben ist.^^:


    setSelfVariableValue($gameVariables.value(4), $gameVariables.value(5), 33, $gameVariables.value(33) - $gameVariables.value(34));


    Da wäre ja eigentlich alles drinnen, was von Bedeutung ist. Funktioniert aber genau so wenig wie der obere Script Call oder ein Plugin Command, der genau das gleiche beinhaltet.


    Wenn ich also am nächsten Tag (nachdem gecyclet wurde) wieder an die ausgestellte Ware gehe, wurde Sell Volume nicht von Sell Amount abgezogen, sondern bleibt gleich. Hab ich 20 hingestellt bleiben 20 übrig, obwohl 10 abgezogen werden sollten. Habe ich 10 Ware1 hingestellt bleiben es am nächsten Tag auch 10 Ware1.

    Damit kann ich natürlich niemals an den Punkt kommen, dass die Ware irgendwann mal ausverkauft ist und das Event nicht anhand seiner eigenen ID despawnen, wenn es soweit ist.


    Testweise habe ich auch mal die Variable Sell Volume einfach mit 1 ersetzt, um zu sehen, ob am nächsten Tag statt z.B. 10 x Ware1 nur noch 9 x Ware1 vorhanden ist... Aber dem war nicht so.


    Seltsam ist halt, dass ich aber durchaus über ein Common Event für mein Foraging System bei gespawnten Events mit einem Loop SelfVars ganz normal mit Script Call oder Plugin Command mathematischen Operationen unterziehen kann... (für den Respawn Timer). Nur bei meinen ausgestellten Waren will das nicht funktionieren.



    Ich habe jetzt den Script Call verworfen und wieder den Plugin Command genutzt, mit dem gleichen Ergebnis.


    Hier jetzt noch die ganzen Events:


    Das Warentemplate:


    CE SellItem Cycle:

    (Hups... Der Part hatte noch gefehlt... Das ist noch von einem Stand, als der Plugin Command ein Script Call war (Also erste Zeile ruhig ignorieren)


    Hier noch das Event zum Spawnen der Ware im Testladen:


    So... Meine Fragen:


    Benutze ich $gameVariables.value(...) falsch? Skripte ich falsch? Was ist dieses Java und was macht es im Script? Spaß beiseite, aber ich meine... Das muss doch so oder so ähnlich irgendwie gehen oder? xD

  • Okay, ich hab's nach 'ner Woche Scheitern aufgegeben.


    Ziemlich enttäuschend.


    Ich hab noch viel mehr Zeug ausprobiert und nichts ändert einfach mal die Werte bei gespawnten Events. Gecallte Events werden einfach nicht ausgeführt, sofern sie gespawnt wurden usw. Ich kann nichtmal Item1 - 1 rechnen und nix.

    Dann wird es halt fürs erste genau das was es nicht sein sollte: Ein normales Shop-System.

  • Das wäre cool.

    Ich hab sowas auch mal im MV gebaut. Aber da dann eben umständlich mit mehreren globalen Variablen und Schaltern pro Item usw... Das hat zwar funktioniert, ist aber eben dann auch sehr unübersichtlich. Das wollte ich mir nach Möglichkeit ersparen.^^

  • Aaaah hab den Fehler entdeckt:


    Du machst ja im Common Event "SellItem Cycle" beim ersten Plugin-Command - $gameVariables.value(34), jedoch ist diese Variable ja auch eine Self-Var. Mit $gameVariables.value(...) kannst du diese im Common-Event nicht auslesen bzw. diese wurde für das Common-Event noch nicht gesetzt = der Wert ist noch 0. Um den Wert in einem Event auszulesen müsstest du unter "Value" den Script-Call hier benutzen:

    getSelfVariableValue(mapID, eventID, Var-ID)


    Sollte dann so aussehen: getSelfVariableValue($gameVariables.value(4), $gameVariables.value(5), 34)



    Der Script-Call kommt von dem Plugin. ^^ Hoffe das hilft.

  • Danke dir! Ich hatte mir schon überlegt, ob ich an irgendeiner Stelle die Variablen vorher auslesen und dann erst setzen / sie benutzen kann oder so. Sooo jetzt muss ich nur noch alles zurückbauen, was ich sonst so versucht hab und dann probiere ich das direkt mal aus! Wenn das klappt erspart mir das in Zukunft einfach soooo viel Arbeit für die ganzen Items. Das wäre schon ein Träumchen.^^


    EDIT: Wie ärgerlich, dass man erst alles richtig machen muss, bevor es funktionieren will ;).


    danke dir für dein scharfes Auge und die Erklärung, dass ich dem Common Event (oder vermutlich auch anderen Events) erst die Info über die SelfVar des jeweiligen anderen Events mitgeben muss, bevor damit auch etwas passieren kann. :) Klingt logisch!

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von AcoBaco ()