Ergebnis 1 bis 13 von 13

Thema: Ruby-Variable definieren und nach Scene_Load.new abrufen

  1. #1

    Ruby-Variable definieren und nach Scene_Load.new abrufen

    Hey Leute.

    Ich bin ein absoluter Scripting-Schwachmat, kann mir nur ein paar Sachen selbst erklären und durch Ausprobieren zusammenfummeln (und nunja, die Scriptsprache hab ich mir auch noch nie wirklich ernsthaft angeschaut). Ich bin mir aber ziemlich sicher, dass man Folgendes nur über ein Script lösen kann, wenn das überhaupt funktionieren sollte:

    Gibt es eine Möglichkeit, vor dem Laden festzulegen, was nach dem Ladevorgang passieren soll?

    Ganz konkret: Der Spieler kommt über einen Show-Choices-Dialog, in dem er seine Sprache auswählt, auf den üblichen Start-Laden-Zurück-Screen. Nun will ich, dass wenn der Spieler das Spiel bereits in einer anderen Sprache begonnen hat, er durch die Auswahl vor dem Ladebildschirm seinen Spielstand in der gewählten Sprache fortsetzen kann. Um welche Sprache es sich handelt, hängt dabei von Switches ab. Der Spielstand soll also geladen werden und dann der entsprechende vor dem Ladebildschirm relevant gemachte Switch auf ON und die anderen Sprach-Switches auf OFF gesetzt werden.

    Hat jemand eine Idee?

    Geändert von Mordechaj (08.07.2011 um 16:26 Uhr)

  2. #2

    Doktor von Stein Gast
    Switches kannst du im Event über Skript so ändern:
    $game_switches[ID] = true/false
    ID steht hierbei für die übliche ID des Switches, angefangen bei 1.

  3. #3
    Das löst leider das Problem in keinster Weise. =(

  4. #4
    wenn ein Speicherstand geladen wird, werden gewiss alle GameSwitches und GameVaribales mit jenem aus dem SaveGame überschrieben, aber die Ruby-Variablen sollten nicht resettet werden, denke ich. Lege deine Auswahl also in einer globalen Variable ($name) fest, und lasse nach jedem Ladevorgang den Wert dieser Variable in eine GameVariable schreiben ($game_variables[1] = $name), damit du damit schöner im Event-Editor arbeiten kannst.

  5. #5
    Vielen Dank!
    Das ist schonmal um einiges vielversprechender und dürfte glaube ich genau das machen, was ich haben möchte.


    Ein Problem besteht aber noch: Ich bin irgendwie zu doof, der Ruby-Variable einen festen Wert zu geben.

    Momentan habe ich eigentlich folgendes vor ...
    Über den Scriptbefehl:
    Code:
    $language = value
    $scene = Scene_Load.new
    dann eben
    Code:
    $game_variables[1] = $language
    Auf der jeweiligen Eventpage soll es dann eine Condition geben:
    Zitat Zitat
    Variable "0001: game language" is
    _______"value" or above

    Allerdings ruft er mit dieser Methode leidglich die Eventpage mit dem höchsten Wert auf,
    ich gebe also beispielsweise an
    Code:
    §language = 2
    $scene = Scene_Load.new
    Code:
    $game_variables[1] = $language
    kommt beim Aktivieren des Events die Eventpage mit der Bedingung
    Zitat Zitat
    Variable "0001: game language" is
    _______"5" or above
    und nicht etwa die, wo die Variable den Wert "2" hat.


    Oh Gott, ich hoffe, man kann verstehen, worauf ich hinaus will. .____."

    Geändert von Mordechaj (09.07.2011 um 12:35 Uhr)

  6. #6
    Zitat Zitat von Mordechaj Beitrag anzeigen
    Code:
    §language = 2
    $scene = Scene_Load.new
    § ? ^^
    Ist ggf. dieser Tippfehler dein Problem, oder hast du den nur beim Erstellen von diesem Beitrag gemacht?
    Wenn das nicht dein Problem ist, schaue ich heute Abend noch einmal wie dir da weiter geholfen werden kann. Oder auch nicht, falls jemand anderes schneller ist. Bis später.

  7. #7
    Nope, der Tippfehler ist mir auch grad aufgefallen, den hab ich nur hier im Thread gemacht. ^^"

    Dann setze ich mich mal brav hin und warte auf weitere Hilfe, vielen Dank. =3

    Geändert von Mordechaj (09.07.2011 um 13:43 Uhr)

  8. #8
    Eigentlich sehe ich keinen Fehler (von dem Tippfehler mal abgesehen), daher ist erstmal Fehlersuche angesagt.
    1. Überprüfe mal im Spiel (über den Maker starten) mittels F9 mal welchen Wert die Variable 1 tatsächlich hat. Falls dort tatsächlich 2 steht, liegt der Fehler im Event.
    2. Sicher, daß die Variable "$language" nirgendwo anders verwendet wird? Ersetz testweise an beiden Stellen mal die Variable durch eine garantiert neue Variable
    3. Falls das auch nichts hilft füge im zweiten Teil (wo du den Wert der Sprach-Variable in einer Game-Variable speicherst) mal folgendes ein:
    Code:
    p($language)
    Wenn du das jetzt ausführst, solltest du ein einfaches Windows-Popup kriegen, in dem der Wert der $language-Variable steht.

    Am sichersten testet du sowas in der Regel erstmal in einem leeren/neuen Testprojekt aus, bevor du es in ein bestehendes Projekt integrierst.

  9. #9
    Also den Wert der globalen Variable definiert es auf jeden Fall richtig und setzt dann den Befehl "$game_variables[1] = language" auch richtig um, beim Ausgeben über \v[1] zeigt er mir nämlich den für $language definierten Wert richtig an (und mit p($language) wird dieselbe Zahl angezeigt).

    Danach aber passiert irgendwie mit dem Event nichts, das die Werte der Variable als Condition hat. Wenn ich mich von der Map teleportiere und dann wieder auf die Map zurück, hat das Event offenbar gemerkt, dass sich die Variable verändert hat.

    Wie kann ich dem Teil sagen, dass es die Information zu diesem einen bestimmten Zeitpunkt, wenn ich die globale Variable in eine game_variable geschrieben habe, aktualisieren soll, sodass das Event mitbekommt, dass die Bedingung nun erfüllt ist?

    Geändert von Mordechaj (09.07.2011 um 13:48 Uhr)

  10. #10
    Oh, sorry, völlig vergessen. Bitte füge mal das hier ein, nach dem die GameVariable definiert wird:
    $game_map.need_refresh = true

  11. #11
    Zitat Zitat von Holly Beitrag anzeigen
    Oh, sorry, völlig vergessen. Bitte füge mal das hier ein, nach dem die GameVariable definiert wird:
    $game_map.need_refresh = true
    Supi, das wirkt, vielen Dank!


    Nun da alles funktioniert, gibt es nur noch ein Problem: die globalen Variablen werden nicht über den Ladebildschirm hinweg übernommen, nach dem Laden wird der Wert der Variable aus dem Spielstand wiederhergestellt.
    Sprich ich weiß jetzt zwar, wie das alles so gehen kann, allerdings passiert nicht wirklich das, was ich wollte. XD

    Oh Mann.

  12. #12
    Bist du dir sicher? Ich war mir eigentlich ziemlich sicher, dass ausschließlich die GameVariablen in den Savegames festgehalten werden, und nicht die Ruby-Variablen. Sprichst du von der $language, von $game_variables[1], oder von beidem, wenn du sagst, dass sie überschrieben werden?

    Geändert von Holly (10.07.2011 um 01:04 Uhr)

  13. #13
    Zitat Zitat von Holly Beitrag anzeigen
    Bist du dir sicher? Ich war mir eigentlich ziemlich sicher, dass ausschließlich die GameVariablen in den Savegames festgehalten werden, und nicht die Ruby-Variablen.
    Und du hast völlig recht, weil ich einfach nur ein Trottel bin. Ich hatte vergessen, den Wert von $language nach dem Laden im Testprojekt wieder in $game_variables[1] zu übernehmen, deswegen hat es für mich den (völlig falschen) Anschein gemacht, als hätte es nicht funktioniert.

    Ich bedanke mich riesig bei dir für die Hilfe und Geduld. Es klappt nun dank dir genau so wie ich es haben will. Yay!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •