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 | = 1000 | Standard 1. ID bei spawned Events |
(Variable 32) | SelfVar Sell Price | = 50 | Wird bereits im Template "Ware1" auf Map 247 festgelegt |
(Variable 33) | SelfVar Sell Amount | = Eingabe | Das 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)
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