Ergebnis 1 bis 14 von 14

Thema: Switch spielstandübergreifend AN/AUS

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ich habe nicht recht darüber nachgedacht, ich dachte es würde nichts desto trotz funktionieren.
    Das Problem liegt einfach daran, dass die Save-Files des RMVX anders benannt sind als diejenigen des RPG-Makers XP.
    Anstatt .rxdata ist das Appendix beim VX .rvdata.

    Das Script von -KD- jedoch wird den Switch-Zustand nicht ändern sofern er bereits richtig gesetzt ist. Das könnte gefährlich sein in dem Fall, dass er bereits an anderer Stelle lokal verändert wurde.

    In dem Script (welches wirklich sehr viel besser als meines aussieht) sollte diese Zeile heraus genommen werden:
    Code:
    return if @switch_state[index] == value
    Damit das Endergebnis so aussieht:
    Code:
    module GlobalSwitches
      @switch_state = {} # caches switch values
      def self.set(index, value)
        @switch_state[index] = value
        (0..3).each do |i| 
          filename = "Save#{file_index + 1}.rvdata"
          next unless FileTest.exist?(filename)
          data = []
          File.open(filename, "rb") do |io|
            until io.eof?
              data << Marshal.load(io)
            end
          end
          sw = data.find {|s| s.kind_of?(Game_Switches)}
          if sw[index] != value then
            sw[index] = value
            File.open(filename, "wb") do |io|
              data.each do |d| 
                Marshal.dump(d, io)
              end
            end
          end
        end
      end
    end
    Das Problem nämlich welches ich sonst sehe wäre folgendes:
    Gemäß dem Fall jeder Switch wird als "false" initialisiert würde der Switch in jedem neu erstellten Speicherstand immer false sein und könnte, wenn er bereits auf false gesetzt ist nichtmehr für alle anderen Speicherstände auf false gesetzt werden, auch wenn dieser Switch bei anderen Speicherständen auf true stehen würde.
    Außer natürlich ich habe irgendetwas übersehen.

  2. #2
    @-KD-
    Ja, sorry. Tut mir echt leid. Ich war mir sicher es geschrieben zu haben und hab es dann doch iwie übersehen. Doof, da mir das schon einmal
    bei einer Frage hier passiert ist (und ich frage scripttechnisch nun wirklich nur alle Jubeljahre mal was :'D)



    Hab beide Varianten jetzt ausprobiert und bekomme eine Fehlermeldung für diese Zeile: filename = "Save#{file_index + 1}.rvdata" (Zeile 7 bzw 6, je nach Version des Scriptes)
    KA, was an ihr falsch sein soll O_o

    Fehlermeldung besagt:


    Script "Global Variable" line 6 (oder 7): NameError occured.
    undefined local variable or method "file_index" for
    GlobalSwitches:Module


    Zitat Zitat
    Ich habe nicht recht darüber nachgedacht, ich dachte es würde nichts desto trotz funktionieren.
    Eine Umbenennung der Dateiendung im Script hat leider auch Fehlermeldungen ausgegeben. ._.


    Gibts doch gar nicht ^^°

  3. #3
    Sry, die späte Uhrzeit ^^
    Es muss
    Code:
    filename = "Save#{i + 1}.rvdata"
    heißen.

    @Cornix: Hm, ja, es kann zu Fehlern kommen wenn man diesen globalen Switch über ein normales control switches verändert, ohne diese Methode aufzurufen, und danach das Spiel abspeichert. Man könnte in Game_Switches einen Code einfügen, der den Cache leert, sobald ein Switch gesetzt wird.

    Das würde dann so aussehen:
    Code:
    class Game_Switches
      alias set_global_switch []=
      def []=(switch_id, value)
        GlobalSwitches.remove_from_cache(switch_id, value)
        set_global_switch(switch_id, value)
      end
    end
    module GlobalSwitches
      @switch_state = {} # caches switch values
      def self.remove_from_cache index, value
        @switch_state.delete(index) if @switch_state[index] != value
      end
      def self.set(index, value)
        return if @switch_state[index] == value
        $game_switches.set_global_switch(index, value)
        @switch_state[index] = value
        (0..3).each do |i| 
          filename = "Save#{i + 1}.rvdata"
          next unless FileTest.exist?(filename)
          data = []
          File.open(filename, "rb") do |io|
            until io.eof?
              data << Marshal.load(io)
            end
          end
          sw = data.find {|s| s.kind_of?(Game_Switches)}
          if sw[index] != value then
            sw[index] = value
            File.open(filename, "wb") do |io|
              data.each do |d| 
                Marshal.dump(d, io)
              end
            end
          end
        end
      end
    end

  4. #4
    Vielen Dank, -KD- (und auch an dich cornix).
    Bei meinem Test gerade lief es vorzüglich.
    Ich schreib euch in die Credits von SSM:SF Akte1 rein. ^^
    (Release ist vermutlich nächste Woche, dies war, neben dem Betatest das einzige, was noch fehlte)

Berechtigungen

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