Scribt Speicherslot per Event zugänglich machen
Ich suche ein Scribt das einen bestimmten Speicherlot nicht anzeigt sonder dass dieser erst durch ein Event zugänglich gemacht wird.
Ich weiß is vielleicht schwer wäre aba sehr gut.
Danke im voraus RPG Nullchecker
Ich weiß is vielleicht schwer wäre aba sehr gut.

Danke im voraus RPG Nullchecker
-
Mein Zeugs -
euer Google wenns um den Maker geht^^
Dieser Beitrag wurde bereits so oft editiert, dass der Zähler sich in die Luft gesprengt hat.
Was ähnliches hab ich mir gestern zusammen kopiert. Hier die für dich geänderte Version:
Aufrufen mit:
wenn du zB in den Slot Nummer 1 speichern möchtest.
Es ist nich Idiotenischer. D.h. wenn du "save(101345)" eingibst wird eine Savedatei angelegt, die die diese Nummer hat. Die is aber mit dem standard Scene_Load nicht zu laden.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
def save(filenumber) # Write save data file = File.open("Save#{filenumber}.rxdata", "wb") # Make character data for drawing save file characters = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] characters.push([actor.character_name, actor.character_hue]) end # Write character data for drawing save file Marshal.dump(characters, file) # Wrire frame count for measuring play time Marshal.dump(Graphics.frame_count, file) # Increase save count by 1 $game_system.save_count += 1 # Save magic number # (A random value will be written each time saving with editor) $game_system.magic_number = $data_system.magic_number # Write each type of game object Marshal.dump($game_system, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_screen, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) file.close end |
zum Lesen den Text mit der Maus markieren
Aufrufen mit:
|
|
Ruby Quellcode |
1 |
save(1) |
wenn du zB in den Slot Nummer 1 speichern möchtest.
Es ist nich Idiotenischer. D.h. wenn du "save(101345)" eingibst wird eine Savedatei angelegt, die die diese Nummer hat. Die is aber mit dem standard Scene_Load nicht zu laden.
Ich mein des so:
[info]Speicherslot 1
Speicherslot 2
Speicherslot 3
Speicherslot 4[/info]
Jetzt wurde ein bestimmtes Event aktiviert:
[info]Speicherslot 1
Speicherslot 2
Speicherslot 3
Speicherslot 4 Auf einer Map auf der man sonst nie war[/info]
Sozusagen ein Cheat
[info]Speicherslot 1
Speicherslot 2
Speicherslot 3
Speicherslot 4[/info]
Jetzt wurde ein bestimmtes Event aktiviert:
[info]Speicherslot 1
Speicherslot 2
Speicherslot 3
Speicherslot 4 Auf einer Map auf der man sonst nie war[/info]
Sozusagen ein Cheat
-
Mein Zeugs -
euer Google wenns um den Maker geht^^
Dieser Beitrag wurde bereits so oft editiert, dass der Zähler sich in die Luft gesprengt hat.
Ich glaub, er meint es so:
Normal
1. Speicherslot
2. Speicherslot
3. Speicherslot
Mit dem Event Aktiviert, ohne dieses Event gibt es keinen 4. Speicherslot
1. Speicherslot
2. Speicherslot
3. Speicherslot
4. Speicherslot->(Auf dem ist ein besonderer Speicher, z.b. eine Nachgeschichte oder eine Extrawelt im Spiel)
Normal
1. Speicherslot
2. Speicherslot
3. Speicherslot
Mit dem Event Aktiviert, ohne dieses Event gibt es keinen 4. Speicherslot
1. Speicherslot
2. Speicherslot
3. Speicherslot
4. Speicherslot->(Auf dem ist ein besonderer Speicher, z.b. eine Nachgeschichte oder eine Extrawelt im Spiel)
Ja, aber nur, wenn es ein "Speichern" vom Extraslot ist.
Im normalen Spiel nicht, vom Extraslot, den Speicher, wäre gut.
z.B.
Man spielt den normalen Spielverlauf (ohne Slot4) und den kann man nicht(also slot4) vom normalen spiel speichern.
aber wenn man den Speicher vom Slot4 spielt, sollte man das Speichern nur für Slot4 möglich machen.
Im normalen Spiel nicht, vom Extraslot, den Speicher, wäre gut.
z.B.
Man spielt den normalen Spielverlauf (ohne Slot4) und den kann man nicht(also slot4) vom normalen spiel speichern.
aber wenn man den Speicher vom Slot4 spielt, sollte man das Speichern nur für Slot4 möglich machen.
Die ganze Sache ist ein Bischen ekelig.
Ich habe jetzt nen Bsichen rumgeschraubt und bin dabei auf ein unerwartetes problem gestoßen. Mein Gedanke war, einen normalen Switch abzufragen und je nachdem ob der an oder aus is den Zugriff auf den letzten Slot, der also der "Geiheimslot" sein sollte zu ermöglichen. Das funktioniert auch gannz gut...
ABER es gibt ein Problem: Man muss immer erst einen Spielstand laden, in dem man den Gehiemslot frei gespielt hat, da der Schalter sonst natürlich nicht gesetzt ist.
Außerdem muss immer ein anderes Savegame vorhanden sein, um an den Geheimslot ran zukommen, da man sonst im Titel nich ins Lademenü kommt. Aus dem gleichen Grund wie oben.
Das ließe sich umgehen, in dem man den Schalter in einer Variable in Game_System speichert, die wird nämlich ganz am Anfang geladen. Da wäre es dann aber nich mehr möglich die per Event zu ändern. bzw es ginge schon, aber da müsste man über ein kurzes Codestück ran.
also hier erstmal die erste Version, in der das Problem noch besteht:
Über der Main einfügen!
Ganz oben muss die Nummer des Switches eingestellt werden, der den Geheimslot freischalten soll.
Das ganze ist absolut inkompatibel zu allen anderen Änderungen am Speichermenü.
Ich bin insgesamt absolut nicht zufrieden damit und werd mich wohl die Tage nochmal dran machen, aber ich bin grad etwas gestresst. Ihr könnt ja erstmal sagen, was ihr davon haltet...
Achja: der Geheimspeicherstand mus als "Secret.rxdata" im Gamordner liegen.
EDIT: Hab den Fehler ausgebessert, das man den Geheimslot überspeichern konnte.
Ich habe jetzt nen Bsichen rumgeschraubt und bin dabei auf ein unerwartetes problem gestoßen. Mein Gedanke war, einen normalen Switch abzufragen und je nachdem ob der an oder aus is den Zugriff auf den letzten Slot, der also der "Geiheimslot" sein sollte zu ermöglichen. Das funktioniert auch gannz gut...
ABER es gibt ein Problem: Man muss immer erst einen Spielstand laden, in dem man den Gehiemslot frei gespielt hat, da der Schalter sonst natürlich nicht gesetzt ist.
Außerdem muss immer ein anderes Savegame vorhanden sein, um an den Geheimslot ran zukommen, da man sonst im Titel nich ins Lademenü kommt. Aus dem gleichen Grund wie oben.
Das ließe sich umgehen, in dem man den Schalter in einer Variable in Game_System speichert, die wird nämlich ganz am Anfang geladen. Da wäre es dann aber nich mehr möglich die per Event zu ändern. bzw es ginge schon, aber da müsste man über ein kurzes Codestück ran.
also hier erstmal die erste Version, in der das Problem noch besteht:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
class Scene_File #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main $swnr=1 # <= Hier die Nummer des Switches einsetzten, der den Slot frei schalten soll # Make help window @help_window = Window_Help.new @help_window.set_text(@help_text) # Make save file window @savefile_windows = [] for i in 0..2 @savefile_windows.push(Window_SaveFile.new(i, make_filename(i))) end if $game_switches != nil and $game_switches[$swnr] @savefile_windows.push(Window_SaveFile.new(3, make_filename(i))) else @savefile_windows.push(Window_Base.new(0, 376, 640, 104)) end # Select last file to be operated if @savefile_windows[$game_temp.last_file_index].instance_of? Window_SaveFile @file_index = $game_temp.last_file_index else @file_index = 0 end @savefile_windows[@file_index].selected = true # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of windows @help_window.dispose for i in @savefile_windows i.dispose end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update windows @help_window.update for i in @savefile_windows i.update end # If C button was pressed if Input.trigger?(Input::C) # Call method: on_decision (defined by the subclasses) on_decision(make_filename(@file_index)) $game_temp.last_file_index = @file_index return end # If B button was pressed if Input.trigger?(Input::B) # Call method: on_cancel (defined by the subclasses) on_cancel return end if $game_switches != nil and $game_switches[$swnr] max=3 else max=2 end # If the down directional button was pressed if Input.repeat?(Input::DOWN) # If the down directional button pressed down is not a repeat, # or cursor position is more in front than 3 if Input.trigger?(Input::DOWN) or @file_index < max # Play cursor SE $game_system.se_play($data_system.cursor_se) # Move cursor down @savefile_windows[@file_index].selected = false @file_index = (@file_index + 1) % (max+1) @savefile_windows[@file_index].selected = true return end end # If the up directional button was pressed if Input.repeat?(Input::UP) # If the up directional button pressed down is not a repeat、 # or cursor position is more in back than 0 if Input.trigger?(Input::UP) or @file_index > 0 # Play cursor SE $game_system.se_play($data_system.cursor_se) # Move cursor up @savefile_windows[@file_index].selected = false @file_index = (@file_index + max) % (max+1) @savefile_windows[@file_index].selected = true return end end end #-------------------------------------------------------------------------- # * Make File Name # file_index : save file index (0-3) #-------------------------------------------------------------------------- def make_filename(file_index) if file_index<3 return "Save#{file_index + 1}.rxdata" else return "Secret.rxdata" end end end class Scene_Save #-------------------------------------------------------------------------- # * Decision Processing #-------------------------------------------------------------------------- def on_decision(filename) if (filename <=> "Secret.rxdata")==0 # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play save SE $game_system.se_play($data_system.save_se) # Write save data file = File.open(filename, "wb") write_save_data(file) file.close # If called from event if $game_temp.save_calling # Clear save call flag $game_temp.save_calling = false # Switch to map screen $scene = Scene_Map.new return end # Switch to menu screen $scene = Scene_Menu.new(4) end end class Window_SaveFile #-------------------------------------------------------------------------- # * Object Initialization # file_index : save file index (0-3) # filename : file name #-------------------------------------------------------------------------- def initialize(file_index, filename) super(0, 64 + file_index % 4 * 104, 640, 104) self.contents = Bitmap.new(width - 32, height - 32) @file_index = file_index if @file_index<3 @filename = "Save#{@file_index + 1}.rxdata" else @filename = "Secret.rxdata" end @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist file = File.open(@filename, "r") @time_stamp = file.mtime @characters = Marshal.load(file) @frame_count = Marshal.load(file) @game_system = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) @total_sec = @frame_count / Graphics.frame_rate file.close end refresh @selected = false end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear # Draw file number self.contents.font.color = normal_color if @file_index<3 name = "Save#{@file_index + 1}" else name = "Secret" end self.contents.draw_text(4, 0, 600, 32, name) @name_width = contents.text_size(name).width # If save file exists if @file_exist # Draw character for i in 0...@characters.size bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1]) cw = bitmap.rect.width / 4 ch = bitmap.rect.height / 4 src_rect = Rect.new(0, 0, cw, ch) x = 300 - @characters.size * 32 + i * 64 - cw / 2 self.contents.blt(x, 68 - ch, bitmap, src_rect) end # Draw play time hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) self.contents.font.color = normal_color self.contents.draw_text(4, 8, 600, 32, time_string, 2) # Draw timestamp self.contents.font.color = normal_color time_string = @time_stamp.strftime("%Y/%m/%d %H:%M") self.contents.draw_text(4, 40, 600, 32, time_string, 2) end end end |
zum Lesen den Text mit der Maus markieren
Über der Main einfügen!
Ganz oben muss die Nummer des Switches eingestellt werden, der den Geheimslot freischalten soll.
Das ganze ist absolut inkompatibel zu allen anderen Änderungen am Speichermenü.
Ich bin insgesamt absolut nicht zufrieden damit und werd mich wohl die Tage nochmal dran machen, aber ich bin grad etwas gestresst. Ihr könnt ja erstmal sagen, was ihr davon haltet...
Achja: der Geheimspeicherstand mus als "Secret.rxdata" im Gamordner liegen.
EDIT: Hab den Fehler ausgebessert, das man den Geheimslot überspeichern konnte.
ABER es gibt ein Problem: Man muss immer erst einen Spielstand laden, in dem man den Gehiemslot frei gespielt hat, da der Schalter sonst natürlich nicht gesetzt ist.
Außerdem muss immer ein anderes Savegame vorhanden sein, um an den Geheimslot ran zukommen
Das Ist ja gut. Wenn man den Speicherslot freispielt, ist es ja eigentlich dann in demSave gespeichert, den man dann speichert.
Wenn man diesesn Spielstand löscht, soll auch der Geheimslot verschwinden.
Aber wenn ich jetzt dieses Script ersetze, kommt ein Fehler bei Scene_Save (wrong argument)
Hab 2 Bugs entdeckt:
Doppelpost tut mir leid
- wenn ich scho nen fertigen speicher hab und den freigespielt hab werden im loadmenü keine personen angezeigt
- wenn ich den speicher hab, des spiel beende und wieder starte is der secretspeicher weg
Doppelpost tut mir leid
-
Mein Zeugs -
euer Google wenns um den Maker geht^^
Dieser Beitrag wurde bereits so oft editiert, dass der Zähler sich in die Luft gesprengt hat.
Ich hab bei deiner Demo mal was getestet. ich habe den Typen angesprochen und das Spiel abgebrochen, also nicht den Spielstand gespeichert.
Doch jetzt, wenn ich im Lademenü bin, ist der Secretslot da, obwohl ich den anderen Save NICHT gespeichert hab.
Ausserdem wäre das beste daran, wenn der Secretslot da ist, solange der Saveslot mit dem Event (für das Secretslot) da ist.
Wenn der Saveslot (z.b. Slot1, auf dem das Event gespeichert wurde) gelöscht wird, verschwindet der Secretslot. DAS WÄRE AM BESTEN.
Doch jetzt, wenn ich im Lademenü bin, ist der Secretslot da, obwohl ich den anderen Save NICHT gespeichert hab.
Ausserdem wäre das beste daran, wenn der Secretslot da ist, solange der Saveslot mit dem Event (für das Secretslot) da ist.
Wenn der Saveslot (z.b. Slot1, auf dem das Event gespeichert wurde) gelöscht wird, verschwindet der Secretslot. DAS WÄRE AM BESTEN.



