Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, August 25th 2006, 11:25pm

Ich wusste nicht, in welchen Thread das muss, deshalb habe ich es einfach hier rein gemacht.

Also, vielen Skriptern ist es bestimmt schon aufgefallen: An manchen Stellen verursacht der 'alias' Befehl eine Fehlermeldung wenn man das Spiel mit F12 neustartet.

Dann bekommt man folgende Meldung:

Quoted


System stack Error

stack level too deep


Doch diesen Bug kann man jedoch ganz einfach beheben.

1. Im Skript 'Main' erstellt man eine neue Globalvariabel die speichert, ob das Programm schon mal gestartet wurde, z.B.

Source code

1
$started = true


2. Hinter den alias Befehl kommt dann eine Abfrage ob das Programm schon mal gestartet wurde:

Source code

1
alias class_original class if $started == nil


Und dann sollte es schon funktionieren^^

Warscheinlich wissen es schon die meisten, aber ich habe noch keine Lösung im Netz dazu gefunden... Deshalb habe ich diesen Thread einfach mal aufgemacht.

Mfg Monsta

2

Friday, August 25th 2006, 11:30pm

Hi^^
Find ich gut von dir, dass du das gemacht hast.
Hab das nicht gewusst.
Danke^^
MfG
CloudMX

3

Saturday, August 26th 2006, 1:08pm

Danke, wird mir sicherlich bei einigen Scripten helfen. Da ich nicht sondelrich gut Scripten kann kannte ich es ebenfalls nicht :p

Chaosgod Espér

Enchanted lord of Shadows

  • Send private message

4

Thursday, March 8th 2007, 9:39pm

Weiß wer was folgendes heißt?

Quoted

TypeError occured while running script
cannot iterate from Float
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.

5

Thursday, March 8th 2007, 10:36pm

iteratte hat etwas mit Arrays zu tun und Float ist ein Datentyp.
Ich vermute eine schleife oder so aht versucht durch ein Array zu laufen, aber es war kein Array sondern eine var vom typ float und das klappt nicht.
Gamedev-Nation.org - Die freundliche Spieleentwickler Community

I am sick of it to be a beta nerd. So I have decided to become a alpha!

6

Thursday, March 8th 2007, 10:52pm

Kannst du mal die Zeile posten wo der Fehler auftritt?
Und was hat das mit meinem Tutorial zu tun? >.<

7

Monday, March 12th 2007, 10:06pm

@Topic: Aber das ist doch kein Bug!
Im Grunde kopiert die Alias-Methode nur eine Methode.

Source code

1
alias :copied_method :original_method

So wird die Methode :original_method kopiert und unter dem Namen :copied_method gespeichert. Alias wird häufig dazu verwendet, schon definierten Methoden weitere Anweisungen hinzuzufügen. Dabei wird erst die ursprüngliche Methode kopiert, dann überschrieben. In der neuen Methodendefinition wird dann die Kopie der alten Methode aufgerufen:

Source code

1
2
3
4
5
6
7
8
9
10
#alte Methode kopieren
alias :copied_method :original_method
 
#Methode neu definieren (überschreiben)
def original_method
  #Kopie der alten Methode aufrufen
  copied_method
  #neue Anweisungen hinzufügen
  blablabla
end


Auf diese Weise werden oft Standardscripts verändert, z.B. die Initialize-Methode von Game_Temp zur Initialisierung von neuen Instanzvariablen. Problematisch wird es aber dann, wenn dies mehrmals unter gleichem Namen passiert, denn führt der Aufruf einer der Alias-Methoden zu einer endlosen Rekursion, da immer wieder die gleiche Methode aufgerufen wird. Daher gibt es an dieser Stelle einen System Stack Error.

Man muss also nur darauf achten, dass nie zwei Methoden unter gleichem Namen kopiert werden, dann tritt der Fehler auch nicht auf. Ich gebe meinen Alias-Methoden inzwischen immer kontextbezogene Namen, z.B. "questlog_init" für die Game_Temp-Initialize-Erweiterung in meinem Questlog-Script, so dass keine Gefahr besteht, dass in einem anderen Script der gleiche Name für die gleiche Methode gebraucht wird.
Spoiler: Das neue RGSS Preisrätsel
Wie lassen sich die Werte zweier Integervariablen vertauschen? Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"? Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
highlight to read
Spoiler: Auflösung der letzten Runde
Die Aufgabe der letzten Runde lautete:

Quoted

Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:

Source code

1
2
3
4
5
6
7
8
9
10
11
P1
9 9
000010000
000010000
000101000
000101000
001000100
001111100
001000100
010000010
111000111
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def parse_pbm(filename)
  f = File.open(filename)
  return nil unless f.readline.chomp == "P1"
  width, height = f.readline.split(' ').collect {|i| i.to_i}
  bitmap = Bitmap.new(width, height)
  c0 = Color.new(255, 255, 255)
  c1 = Color.new(0, 0, 0)
  for iy in 0...height
    f.readline.chomp.split('').each_with_index do |v, k|
      bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
    end
  end
  return bitmap
end
highlight to read
Spoiler: Schon gewusst?
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen? Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:

Source code

1
if false
und ganz unten als letzte Zeile:

Source code

1
end
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
highlight to read

8

Monday, March 12th 2007, 11:21pm

Quoted from ""Caesar""

@Topic: Aber das ist doch kein Bug!
Im Grunde kopiert die Alias-Methode nur eine Methode.

Source code

1
alias :copied_method :original_method

So wird die Methode :original_method kopiert und unter dem Namen :copied_method gespeichert. Alias wird häufig dazu verwendet, schon definierten Methoden weitere Anweisungen hinzuzufügen. Dabei wird erst die ursprüngliche Methode kopiert, dann überschrieben. In der neuen Methodendefinition wird dann die Kopie der alten Methode aufgerufen:

Source code

1
2
3
4
5
6
7
8
9
10
#alte Methode kopieren
alias :copied_method :original_method
 
#Methode neu definieren (überschreiben)
def original_method
  #Kopie der alten Methode aufrufen
  copied_method
  #neue Anweisungen hinzufügen
  blablabla
end


Auf diese Weise werden oft Standardscripts verändert, z.B. die Initialize-Methode von Game_Temp zur Initialisierung von neuen Instanzvariablen. Problematisch wird es aber dann, wenn dies mehrmals unter gleichem Namen passiert, denn führt der Aufruf einer der Alias-Methoden zu einer endlosen Rekursion, da immer wieder die gleiche Methode aufgerufen wird. Daher gibt es an dieser Stelle einen System Stack Error.

Man muss also nur darauf achten, dass nie zwei Methoden unter gleichem Namen kopiert werden, dann tritt der Fehler auch nicht auf. Ich gebe meinen Alias-Methoden inzwischen immer kontextbezogene Namen, z.B. "questlog_init" für die Game_Temp-Initialize-Erweiterung in meinem Questlog-Script, so dass keine Gefahr besteht, dass in einem anderen Script der gleiche Name für die gleiche Methode gebraucht wird.


Und? Das weiss ich doch alles -.-
Aber es gibt einfach auch Leute, die die alias angabe nicht so eindeutig in ihre Skripte schreiben. Und wenn da ein Neuling einfach 2 Skripte hinein kopiert die zufällig die selbe Angabe im Alias haben, dann ist das ja wohl eine Ungewollte Codereaktion... Auch Bug genannt. Außerdem geht es nicht nur um 2 Skripte mit dem selben Alias, sondern hauptsächlich um das Problem, dass der alias Befehl an manchen Stellen den besagten Fehler auslöst, wenn man das Spiel mit F12 neustartet. Und das ist wohl auch nicht gewolt :)
Und deshalb sah ich keinen Grund dieses Tutorial nicht zu schreiben...

Mfg Monsta

9

Wednesday, March 28th 2007, 6:16pm

:D
wird schon in diversen scripts generell (die das verwenden) schon angewendet ^^. (wobei man dort schon auf globale variablen verzichtet und gleich solche "fehler" beim scripten neutralisiert)
Ist aber eh gut das du das thema mal direkt ansprichst!

Mal sollte aber beachten, das nicht nur mit alias'es so ein problem auftreten kann.

Bei einen einfachen neustart durch F11 können viele fehler auftreten, wobei das spiel normal vor so einen start sich spielen lassen.
Kann zb auftreten, weinn man wo ein bild mit einer globalen variable erstellt, aber dann vergisst diese auch wieder wo zu löschen wenn man es wieder erstellen will.
D.h. man könnte theroretisch noch bestimmte aktionen nach so einen "neustart" abrufen. (von globale variablen)

[COLOR="seagreen"]Mfg[/COLOR]
Markus

Social bookmarks