PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [RmVX] Scripter für RosaArts gesucht (Save-Menü-Änderung)



Rosa Canina
28.05.2012, 17:10
Oh Gott, so tief musste ich schon sinken... XD

Eigentlich bin ich jemand, der alles absolut 100% selber macht und nur musikalisch auf die fantastische Arbeit meines Musikers setzt, aber jetzt bin ich doch an meine Grenzen gestoßen.
Nach einiger Herumprobiererei habe ich das Savemenü jederzeit während eines Noveltextes aufrufbar bekommen. Das war ein großer Fortschritt, aber das normale Savemenü des RmVX ist
einfach unübersichtlich und hässlich bei Visual Noveln.

Mein erster Gedanke war ein Internet-Script, dass quasi alles brachte, was ich wollte. Ich baute mit einem weinenden Auge das Fremdscript "Neo Save System" von Woratana und Helladen ein
und war schnell damit zufrieden. Goldanzahl wurde in %-Fertigstellung geändert, Ortsname in Abschnittsnamen und das Heldenface ergab einen schönen Platz für die Kapitel-Info... dazu der
hübsche Screenshoot in der Mitte. Im Prinzip war das System perfekt... bis ich merkte, dass die Spielstände dann zwar noch "Save.X.rvdata" hießen, aber irgendwie anders gespeichert wurden
und daher von mir nicht mehr ausgelesen werden konnten.
Einen halben Tag später habe ich alles durchprobiert und das Script tausendmal mit meinen rudimentären Kenntnissen verändert... ohne Erfolg. :(


Jetzt gäbe es also zwei Möglichkeiten... mein Auslese-Snippet so umändern, dass es mit Neo Save System 6 funktioniert oder das Standard-Savemenü so umschreiben , dass es diverse Werte ausliest
und anzeigt (Screenshot wäre dabei gar nicht mal so wichtig...).


Ich gebe mal Links zu den Systemen und meinem Code-Snippet:
Das hier ist das Neo Save System 6:
Link zum Script (http://www.mediafire.com/?cglkl7nr6trrbdl)
Und das hier ist mein Code-Snippet, mit dem ich Switch-Stati auslese, um speicherübergreifend CGs und andere Dinge freischaltbar zu machen:

class Game_Interpreter
def check_extras
for i in 1..99
@dumb = nil
if File.exist?("Save"+i.to_s+".rvdata")
file = File.open("Save"+i.to_s+".rvdata", "rb")
for i in 1..7
@dumb = Marshal.load(file)
end
for i in 101..200
$game_switches[i] = true if @dumb[i]
end
end
end
end
end

Belohnung:
Für den netten Scripter, der mir das Snippet so umändern kann, dass es die Switches in den - anscheinend irgendwie anders gespeicherten - NeoSaves ausliest oder mir ein Savemenü schreibt, dass
die nötigen Werte übersichtlich ausliest und anzeigt, werde ich - falls gewollt - eine PDF-Version einer meiner beiden Bücher (nach Wahl) schenken. Gerne auch mit Widmung und so ^^


Ich denke mal, dass für einen geübten Scripter das Umschreiben des Snippets keinerlei Probleme darstellt. Mir wurde es damals von hellminor in wenigen Minuten erstellt (wenn nicht gar Sekunden XD) und
sollte daher eigentlich recht einfach passend umzuändern sein... denke ich.

Cornix
28.05.2012, 17:56
Ich will das richtig verstehen, du willst alle Speicherstände von 1 bis 99 hintereinander laden, dann die 7 Datei aus dem Savefile auslesen und aus dieser dann alle switches von 101 bis 200 setzen lassen?

Also sozusagen wahrscheinlich alle Speicherstände welche es von deinem Projekt gibt nacheinander laden lassen, dann hoffentlich die Game_Switch-Instanz laden und die Switchwerte auf den derzeitigen Speicherstand übertragen lassen?

Rosa Canina
28.05.2012, 18:07
Kurz und einfach ausgedrückt:

Ich will Switches aus den vorhanden Spielständen lesen lassen (am besten konfigurierbar, welche Switches genau... das kann ich in dem Snippet ja einfach umändern ^^) und sie entsprechend
im aktuellen Spiel ON oder OFF gesetzt haben.
Es müssen keine 99 sein (ich komm auch mit weniger Savegames zurecht, das Script hat halt standardmäßig 99)... hauptsache es funktioniert zusammen :/
Im Standardsavemenü funktioniert nämlich das Snippet ohne Probleme. KA, was das Savesystem anders macht (zumal die Datei auch Save.rvdata heißt), aber die Switches lassen sich nicht
auslesen.

Cornix
28.05.2012, 18:19
Diese Funktion
check_extras hast du diese selbst geschrieben oder hat dir jemand dabei geholfen?

Rosa Canina
28.05.2012, 19:45
Das Snippet stammte damals von einem User namens hellminor... Ich weiß nicht, ob dir das etwas bringt oder ob es nötig ist, es zu wissen... aber hellminor war derjenige, der mir anfangs mit meinen Noveln scripttechnisch aushalf.
Von ihm stammte das Snippet und verschiedene kleine, kaum merkbare Dinge in meinen Noveln, die über Events einfach unlösbar waren (z.B. Wetter über Bildern, Bilder mitshaken lassen... diese Dinge halt). Ist ja dafür auch immer
credited worden ^^

Cornix
28.05.2012, 21:05
Man kann bereits ziemlich einfach an der Struktur des Scriptes erkennen was möglicherweise zu einem Fehler führen sollte.
Außerdem bringt die Art und Weise wie das Script gemacht ist ein paar Probleme mit sich.

Zum einen ist es natürlich zu bedenken, dass es wirklich sehr sehr lange dauern könnte über 99 Speicherstände (falls diese existieren) zu iterieren und alle komplett zu laden und die Switches zu überprüfen.

Was für eine Art von Fehlermeldung bekommst du wenn du es mit dem derzeitigen Script versuchst? Oder gibt es überhaupt keine Fehlermeldung?

Rosa Canina
28.05.2012, 21:35
Ich hab die Save-Anzahl mal auf 20 beschränkt... mehr braucht man auch im Maximalfall eh nicht.
Das sollte Problem A, welches bis jetzt noch nicht auftauchte (lange Ladezeit der Spielstände, wie du geschrieben hast) beheben.


Im Moment passiert einfach gar nichts. Ich mach meinen check_extras-Befehl, wie immer... und es passiert absolut gar nichts.

Cornix
28.05.2012, 22:06
Zuallererst muss ich dir leider sagen, das Script welches du verlinkt hast, sollte eigentlich keinerlei Einfluss haben auf die Funktionalität deines zweiten Scriptes.

Denn die Funktion in welcher das eigentliche Erstellen eines Save-Files geschieht, wo also die Struktur mit welcher die Dateien in dem File angelegt werden festgelegt wird, ist in dem Script garnicht definiert.
Die Funktion lautet:

write_save_data(file)
Und in dem angegebenen Script ist sie nicht zu finden.
Das heist, sie wurde nicht überschrieben und sollte daher auch noch genauso arbeiten wie zuvor. (wenn wir davon ausgehen, dass du keine anderen Scripte hast welche diese Funktion vielleicht überschreiben könnten)

Da du keine Fehlermeldung bekommst kann man auch davon ausgehen, dass dein Script die Save-files auch immernoch korrekt lädt. Zumindest besitzt die Klasseninstanz an siebter Stelle im File (eben die welche in deinem Script geladen wird) die benötigte Funktion
[].

Könnte es vielleicht sein, dass du vielleicht an einer anderen Stelle kürzlich etwas an dem System geändert hast und es dadurch nichtmehr korrekt arbeiten könnte?

Rosa Canina
28.05.2012, 22:28
Also ich habe es noch einmal durchgetestet und es kommt definitiv vom Neo Save System VI.

Folgende Situation:
Ich erstell auf einer leeren Map einen Spielstand, bei dem mein Switch 101 [Savegame vorhanden] AN ist. Dieser Switch wird auch angeschaltet, sobald man Speichern kann.
Anschließend lade ich meinen Titelscreen, welcher bei check_extras "Conditional Branch IF Switch 101 AN" die Möglichkeit bietet das Introzeug zu überspringen und im eigenen
Titelbild zu landen (alles auf der gleichen Map).

WENN der Spielstand im Neo Save System erstellt wurde (kein Save-Ordner definiert, Spielstände noch immer im Standardverzeichnis mit der Standardbezeichnung), dann wird der
Switch durch check_extras NIE angeschaltet.
ABER wenn der Switch im Standard-Savemenü erstellt wurde, dann wird der Switch korrekt angeschaltet, sobald man check_extras aufruft.
Dabei ist es vollkommen egal, ob das Neo Save Script importiert ist, oder nicht... es scheint nur darauf anzukommen, womit der Spielstand gespeichert wurde - was wiederum bedeutet,
dass es am Savesystem liegen muss.

Irgendwas... vielleicht ist es nur eine Kleinigkeit, macht das SaveSystem beim Speichern anders...


Edit:
Neo Save System:

def do_save
if SCREENSHOT_IMAGE
File.rename(SAVE_PATH + 'temp' + IMAGE_FILETYPE,
make_filename(@last_slot_index).gsub(/\..*$/){ '_ss' } + IMAGE_FILETYPE)
end

file = File.open(make_filename(@last_slot_index), "wb")
write_save_data(file)
file.close

VX-Save-Art:

def do_save
file = File.open(@savefile_windows[@index].filename, "wb")
write_save_data(file)
file.close
return_scene
end


Es funktioniert, wenn ich das Screenshotfeature deaktiviere!
Damit hätten wir den Fehlerbereich schon einmal eingegrenzt :D

Cornix
28.05.2012, 22:42
Der von dier zitierte Bereich zeigt bereits, die Art und Weise wie das Save-File angelegt wird ist in dem Script nicht geändert.
Der einzige Unterschied liegt daran, wie sich der Name des Files zusammen setzt. Hast du einmal geschaut ob die Namen der Save-Files anders lauten falls sie mit dem Script gespeichert werden?
Das wäre nämlich dann ein ziemlich einfacher Schluss worauf es hinausläuft.

Rosa Canina
28.05.2012, 22:46
Du hast Recht... bei einem ist ein Leerzeichen zwischen Save und ID-Nummer und beim anderen nicht >_<

Das heißt also, ich muss nur irgendwo ein Leerzeichen weg/dazufügen und es sollte gehen... *anfängt rumzuprobieren*


Edit:

Manchmal hasse ich RUBY echt... das Leerzeichen war im Explorer nicht wirklich zu sehen und wenn ich jetzt den Code vom Snippet von dem hier:

if File.exist?("Save"+i.to_s+".rvdata")
file = File.open("Save"+i.to_s+".rvdata", "rb")
auf das hier ändere:

if File.exist?("Save "+i.to_s+".rvdata")
file = File.open("Save "+i.to_s+".rvdata", "rb")
scheint es zu funktionieren >_>

Und ich hab jetzt den kompletten Nachmittag und Abend damit vergeudet da rumzuprobieren >_<

Cornix
28.05.2012, 23:01
Das hat mit Ruby nichts zu tun.
Wenn die Datei den falschen Namen hat dann funktioniert es nunmal nicht sie zu öffnen.
Daher ist es immer sehr hilfreich Debug-Nachrichten in seine Scripte einzubauen um auf ungewöhnliches Verhalten des Programms hinzuweisen. Diese kann man dann für die Veröffentlichung des Projekts relativ leicht wieder entfernen.

In solch einer Situation würde es sich zum Beispiel lohnen eine Debug-Message einzufügen welche dir sagt ob überhaupt mindestens ein File gefunden wurde. Bei deinen Tests sollte es wohl fast immer der Fall sein, also eine Fehlernachricht auszugeben falls keines gefunden sein sollte würde hier schon enorm helfen und nur selten stören.

Rosa Canina
28.05.2012, 23:16
Ja, da hast du schon Recht. Ich scripte im Normalfall ja gar nicht und kenn mich daher fast 0 mit dem Zeug aus (ich könnte nicht einmal "Hello World" anzeigen lassen XD)...
Meine größte Errungenschaft in Ruby, war es... nach 100 Fehlschlägen... einen Switch bei Messagestart an und beim Erreichen des Endes (bevor man sie schließt - also, wenn
sie nur dasteht) wieder auf aus zu setzen. XD

Und ganz ehrlich... ich habe sogar die Dateinamen der Saves umbenannt, in der Hoffnung, dass es dann funktionieren würde. Aber mir ist nie das eine dumme Leerzeichen aufgefallen. :/
Das ist noch ein Grund, warum ich lieber mit dem Maker einen Novel mache, als mit Renpy... jeder Mensch verschreibt sich halt mal oder übersieht so winzige Minifehlerchen XD

Aber danke für deine Hilfe, cornix.
Dank dir läuft meine Visual Novel-Engine nun so perfekt, wie noch nie. Von einem kommerziellen Novel unterscheidet sie jetzt nur noch die fehlende Textlog-Funktion. :3