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