Autosave Skript
wie man der Überschrift entnehmen kann, suche ich ein Autosave Skript,
welches ohne zutun des Spielers einen Speicherstand überschreibt.
D.h. es soll auch kein Fenster geöffnet werden, wo der Spieler den Speicherslot auswählt.
Habe hier im Forum gesucht, aber nur die Autosave-Erweiterung von Alexis gefunden, welche bei mir nicht funktioniert.
mfg Krisalis
|
|
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 |
#--------------------- # Autosave by Hindi #--------------------- class Scene_Load alias :method :on_decision def on_decision(filename) $autosave_name = filename method(filename) end end class Scene_Save alias :method :on_decision def on_decision(filename) $autosave_name = filename method(filename) end end def save file = File.open($autosave_name, 'wb') Scene_Save.new.write_save_data(file) file.close end def load file = File.open($autosave_name, "rb") Scene_Load.new.read_save_data(file) file.close Graphics.freeze sprite = Sprite.new sprite.bitmap = Bitmap.new(640, 480) sprite.bitmap.fill_rect(0, 0, 640, 480, Color.new(0, 0, 0)) Graphics.transition(10) $scene = Scene_Map.new end |
Es beinhaltet noch einen Bug, den ich aus Grudn von mangelnder Zeit nciht beseitigen kann, also es muss mindestens schon einmal gespeichert sein, ansonsten ist es genau das was du willst.
Du kannst irgendwo, z.B. Call_Script einfügen:
|
|
Ruby Quellcode |
1 |
save |
Um dein Game auf der Datei zu Speichern auf der sie schon gespeichert wurde oder welche geladen wurde.
Mit
|
|
Ruby Quellcode |
1 |
load |
Kannst du diese Datei wieder auslesen.
Viel Spaß damit und nicht vergessen, mich in den Credits erwähnen ;-)
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Hindis Skript ist extrem schlecht gemacht (tut mir Leid, ist nun mal so)
es kommt folgender Fehler bei Alexis Skript:
"Script 'Autosave' line 17: SyntaxError occurred."
Hier mal das Skript, sieht ein bischen kurz aus, ist aber das Skript von hier:
|
|
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 |
#============================================================================== # ** Autosave-Erweiterung V1.0 # AutosaveErweiterung.rb von Alexis Hiemis, Hindi (08.09.2009) #------------------------------------------------------------------------------ # http://www.rpg-studio.de/scriptdb/node/345 # http://www.rpg-studio.de/forum/index.php?page=Thread&threadID=30530 #============================================================================== module Autosave ID = 15 # das ist der Swicht in dem du Autosave an/abschalten kannst :3 def Autosave.enabled? return $game_switches[ID] == true end def Autosave.saved? return File.exist?('autosave.rxdata') and Autosave.enabled? end def Autosave.get file = File.open('autosave.rxdata', "r") # Read each type of game object Scene_Load.new.read_save_data(file) file.close end def Autosave.save file = File.open('autosave.rxdata', "w") # Write each type of game object Scene_Save.new.write_save_data(file) file.close end end |
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Ich habs ein bisschen verkürzt und ein ein bisschen verbessert, jetzt sollte es gehen:
|
|
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 |
#============================================================================== # ** Autosave-Erweiterung V1.0 # AutosaveErweiterung.rb von Alexis Hiemis, Hindi (08.09.2009) # ein bisschen verändert von Neo-Bahamut :D #------------------------------------------------------------------------------ # http://www.rpg-studio.de/scriptdb/node/345 # http://www.rpg-studio.de/forum/index.php?page=Thread&threadID=30530 #============================================================================== module Autosave ID = 15 # das ist der Swicht in dem du Autosave an/abschalten kannst :3 def Autosave.enabled? $game_switches[ID] end def Autosave.saved? FileTest.exist?("autosave.rxdata") and Autosave.enabled? end def Autosave.get File.open("autosave.rxdata", "rb") {|file| Scene_Load.new.read_save_data(file)} end def self.load self.get end def Autosave.save file = File.open("autosave.rxdata", "wb") {|file| Scene_Save.new.write_save_data(file)} end end |

Vielen Dank Bahamut.
Jedoch gibt es ein Problem beim Laden des Autosaves.
Das Spielstand wird geladen und es läuft Alles normal, jedoch sehe ich nach dem Laden
noch den Screen von vor dem Laden. [hört sich jetzt ein wenig dumm an ^^']
Naja, kann man Einstellen, dass das Autosave immer den 4ten Speicherslot benutzt?
Dann würde das Problem wahrscheinlich nicht mehr auftreten und wäre mir lieber als ein unabhängiger Speicherslot.
mfg Krisalis
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
|
|
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 |
#============================================================================== # ** Autosave-Erweiterung V1.0 # AutosaveErweiterung.rb von Alexis Hiemis, Hindi (08.09.2009) # ein bisschen verändert von Neo-Bahamut :D #------------------------------------------------------------------------------ # http://www.rpg-studio.de/scriptdb/node/345 # http://www.rpg-studio.de/forum/index.php?page=Thread&threadID=30530 #============================================================================== module Autosave ID = 15 # das ist der Swicht in dem du Autosave an/abschalten kannst :3 Filename = "Save4.rxdata" def Autosave.enabled? $game_switches[ID] end def Autosave.saved? FileTest.exist?(Filename) and Autosave.enabled? end def Autosave.get return unless self.saved? File.open(Filename, "rb") {|file| Scene_Load.new.read_save_data(file)} $game_map.update $scene = Scene_Map.new end def self.load self.get end def Autosave.save file = File.open(Filename, "wb") {|file| Scene_Save.new.write_save_data(file)} end end |
/edit: Oh, hab das mit dem vierten Speicherslot übersehen. Ich werds kurz ändern und reineditieren ^^
Done.
Naja, man könnte es noch in ein Modul packen, dann währe es perfekt... Dann speicherts immer genau auf dem Savestand den man geladen hatte, dann überschreibts nicht immer den 4. Slot, von daher finde ich es besser für geeignet als das Script was du vorgeschlagen hast.
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Du hast:
- alias verwendet, obwohl alias_method besser ist
- die neue Methode durch alias "method" genannt
- eine globale Variable benutzt
- die zwei neuen Methoden in Kernel eingetragen, obwohl Interpreter gereicht hätte
- dadurch die bereits vorhandene load-Methode ersetzt
- aus irgendeinem Grund nach dem Laden einen Sprite erstellt Oo
Ist nicht besser, wenn man will, dass das alias_method wie es vom SDK modifiziert wird, im eigenen Script keine Anwendung findet ^^alias verwendet, obwohl alias_method besser ist
Ich will jetzt Hindis schlechtes Skript nicht verteidigen, aber du hättest ihm auch gleich sagen können was daran nicht gut ist, anstatt einfach nur unkonstruktiv zu sagen "ist extrem schlecht gemacht (tut mir Leid, ist nun mal so)". Das find ich persönlich irgendwie mies.
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Ich hätt auch einfach sagen können: ist extrem schlecht gemacht bzw. enthält fast alle Grundfehler die ich kenne
Zitat
Ich will jetzt Hindis schlechtes Skript nicht verteidigen, aber du hättest ihm auch gleich sagen können was daran nicht gut ist, anstatt einfach nur unkonstruktiv zu sagen "ist extrem schlecht gemacht (tut mir Leid, ist nun mal so)". Das find ich persönlich irgendwie mies.
|
|
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 |
#--------------------- # Autosave by Hindi #--------------------- class Game_Temp attr_accessor :auto_save_name end class Scene_Load alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end class Scene_Save alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end module Auto def self.save() return false if temp().nil? file = File.open(self.temp(), 'wb') Scene_Save.new.write_save_data(file) file.close end def self.load() return false if temp().nil? file = File.open(self.temp(), "rb") Scene_Load.new.read_save_data(file) file.close Graphics.freeze Graphics.transition(10) $scene = Scene_Map.new end def self.temp() $game_temp.auto_save_name end end |
Dieses Script ist aus meiner Sicht das beste dafür geeignet, weil es einfach Automatisch genau auf dem richtigem Slot Speichert...
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (12. Oktober 2009, 17:27)
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
File.open besser mit einem Block machne
|
|
Ruby Quellcode |
1 2 3 4 5 6 |
# Schlecht file = File.open("a", "a") file.write(1) file.close # Gut File.open("a", "a") {|file| file.write(1)} |
Diese unnötigen Leerklammern weglassen, ich hasse das xD
|
|
Ruby Quellcode |
1 2 |
Graphics.freeze Graphics.transition(10) |
Naja, und wenn man jetzt läd ohne zu speichern (zB wenn man vorher manuell geladen hat) müsste das Spiel abstürzen, da Game_Temp nicht gespeichert wird.
|
|
Ruby Quellcode |
1 |
File.open("a", "a") {|file| file.write(1)} |
<= Einläuchtend XDDD werd ich mir in Zukunf aneignen, diese
|
|
Ruby Quellcode |
1 2 |
Graphics.freeze Graphics.transition(10) |
hab ich mir von nem anderem Quicksave-Script abgeschaun und da ich den ganzen Sinn von Graphics.freeze überhaupt nicht checke und ich es an ganz RGSS total unlogisch gefunden hab, hab ich erstmal nicht drüber nachgedacht, Graphics.transition(10) lässt den Bildschirm soweit wie ich weis langsam erschwärzen (sieht schöner aus)^^
Das mit dem abstürzen hab ich aber oben schon erkärt und deshalb hab ich in der nächsten Post auch eingebaut:
|
|
Ruby Quellcode |
1 |
return false if temp().nil?() |
Denn so kann man ganz einfach mit einem Conditional Branch abfragen:
|
|
Ruby Quellcode |
1 2 3 |
Auto.temp().nil? : Call_Save_Menu end |
Und das Script stürzt auch nicht ab, wenn man diese Conditional Branch abfrage nicht drin hat.
EDIT:
Man könnte es natürlich auch so machen:
|
|
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 |
#--------------------- # Autosave by Hindi #--------------------- class Game_Temp attr_accessor :auto_save_name end class Scene_Load alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end class Scene_Save alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end module Auto def self.pfad() # Hier kannst du den Slot auf den gespeichert wird verändern: $game_temp.auto_save_name = $game_temp.auto_save_name end def self.save() self.pfad() if self.pfad.nil? return false if temp().nil? File.open(self.temp(), 'wb') {|file| Scene_Save.new.write_save_data(file)} end def self.load() self.pfad() if self.pfad.nil? return false if temp().nil? File.open(self.temp(), 'rb') {|file| Scene_Load.new.read_save_data(file)} file = File.open(self.temp(), "rb") Scene_Load.new.read_save_data(file) file.close Graphics.freeze Graphics.transition(10) $scene = Scene_Map.new end def self.temp() $game_temp.auto_save_name end end |
Also plz versteh mich nich falsch^^, wenn dieses Script Verbesserungswürdig ist, lass es mich wissen, weil ich lern gern dazu.
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »Reborn« (12. Oktober 2009, 18:17)
Es fixiert die gesammte angezeigte Grafik sodas wenn man die angezeigte Grafik ändert bei möglichen Ladezeiten keine schwarzen Löcher entstehen wo Grafiken gerade gelöscht oder noch nicht fertig geladen sind. Es wird eben das Bild was vor dem Graphics.freeze zu sehen war gehalten, das bedeutet nicht das die gelöschten Grafiken nach Graphics.freeze nicht weg sind, die sind weg, nur werden sie noch so lange angezeigt bis Graphics.transition ausgeführt wird.
Dieses blendet über zu dem neuen grafischen Bild der Grafiken welche zwischen Graphics.freeze (Grafik einfrieren) und Graphics.transition (Grafik überblenden) geladen wurden. Wenn du gar keine neuen Grafiken erstellst hast, blendet es ins schwarze nichts über - ist ja keine Grafik da.
In einem Post den ich gerade nicht finde wurde dieser Teil sehr gut von einem anderen User erklährt, musst du mal suchen falls dir meine Erklährung zu wenig ist.
Also dieser Teil ist weder unlogisch noch schlecht, es sorgt für flüssige, schöne Übergänge -> nur das beste für den Nutzer =D
(persönliche Meinung: Graphics.freeze und Graphics.transition hintereinander ist doof wenn danach nicht noch ein Graphics.freeze kommt, erstmal: wozu auf schwarz ausblenden? Auch weil eine Scene die danach kommt die Grafiken ohne ein vorhergehendes Graphics.freeze sichtbar lädt - wenn danach eh nichts mehr kommt dann kannst dus gleich seien lassen)
Zu deinem Script:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 |
def self.pfad() # Hier kannst du den Slot auf den gespeichert wird verändern: $game_temp.auto_save_name = $game_temp.auto_save_name end def self.save() self.pfad() if self.pfad.nil? #Das versteh ich nicht, erläuter mal was du dir da gedacht hast. |

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch
Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.|
|
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 |
#--------------------- # Autosave by Hindi #--------------------- class Game_Temp attr_accessor :auto_save_name end class Scene_Load alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end class Scene_Save alias :iregend_ein_anderer_scheiss :on_decision def on_decision(filename) $game_temp.auto_save_name = filename iregend_ein_anderer_scheiss(filename) end end module Auto def self.save() return false if temp().nil? File.open(self.temp(), 'wb') {|file| Scene_Save.new.write_save_data(file)} end def self.load() return false if temp().nil? File.open(self.temp(), 'rb') {|file| Scene_Load.new.read_save_data(file)} file = File.open(self.temp(), "rb") Scene_Load.new.read_save_data(file) file.close Graphics.freeze Graphics.transition(10) $scene = Scene_Map.new end def self.temp() # Hier kannst du den Slot ändern wenn du möchtest, ersetzen die Variable einfach mit dem namen des Savestandes. Z.B. "name.iwas" $game_temp.auto_save_name end end |
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
|
|
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 |
#--------------------- # Autosave by Hindi #--------------------- class Game_Systen attr_accessor :auto_save_name end class Scene_Load alias_method :iregend_ein_anderer_scheiss, :on_decision def on_decision(filename) iregend_ein_anderer_scheiss($game_system.auto_save_name) end end class Scene_Save alias_method :iregend_ein_anderer_scheiss, :on_decision def on_decision(filename) iregend_ein_anderer_scheiss($game_system.auto_save_name = filename) end end module Auto def self.save File.open($game_system.auto_save_name, 'wb') {|file| Scene_Save.new.write_save_data(file)} end def self.load File.open($game_system.auto_save_name, 'rb') {|file| Scene_Load.new.read_save_data(file)} $scene = Scene_Map.new end end |
So isses gut :D
Benutzerinformationen überspringen
Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.
Ähnliche Themen
-
Sonstige »-
Autosave-Erweiterung V1.0
(4. April 2009, 14:23)
-
Einsteigerhilfe »-
Online Spiel?
(18. Januar 2009, 20:41)
-
Events & Technik »-
autosave&kein laden nach ame over
(2. September 2005, 08:44)
-
RGSS Archiv »-
Autosave im Maker
(22. März 2005, 20:36)


