PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Script Fehler]



~Herakle~
12.05.2012, 13:37
Heyho Leute.
Ich versuche grade mein 5 oder 6 Jahre altes Projekt wieder ans Laufen zu kriegen. Bin bisher auch ganz gut zurecht gekommen, aber jetzt kommt mein Problem:
Bei einem Teleport (vermute ich) oder einem Switch auf Off stellen (glaube eher nicht) kommt folgende Fehlermeldung: 13656

Die Codezeilen 47 bis 49 (mit Kommentar) sind:
#--------------------Edit-----------------
# def: @cw = bitmap.width / 4
@cw = bitmap.width / @character.charset_tile_width

Ist der Fehler bekannt, oder kann jemand damit etwas anfangen?
Bin vom Coding her leider ein Vollanfänger und kann nur vermuten dass es irgendwas mit ungültigen Grafikgrößen zu tun hat?

Danke für alle Hilfe :)

-KD-
12.05.2012, 14:53
Welcher Maker? Die Methode #charset_tile_width sagt mir nichts, hast du da irgendwelche externen Scripte eingefügt?

Cornix
12.05.2012, 20:14
Der Fehler sagt aus, dass auf etwas zugegriffen wird was als Zahl interpretiert werden soll aber vom Typ her "nichts" ist, also nicht definiert.
Der Punkt ist aber, dass es existiert, es kann darauf zugegriffen werden, es ist nur zu dem Zeitpunkt noch nicht mit einem Wert belegt.
Die Bitmap breite "width" kann es nicht sein, da dass Bitmap scheinbar existiert (sonst wäre die Fehlermeldung eine andere). Demnach muss das "charset_tile_width" die undefinierte Variable sein. Das ist aber keine Standardfunktion und daher können wir dir dabei nicht helfen ohne den Code zu sehen wo es gesetzt werden sollte.

~Herakle~
13.05.2012, 13:47
Ist mir dem RMXP gemacht.
Benutzt eine etwas ältere Version der Project Zelda Engine, müsste von 2006 oder so sein...
Hab mal etwas durchgeschaut und nach der Methode gesucht in den externen Scripten, hab ein Script gefunden was anscheinend ziemlich viel mit der arbeitet. Da scheint auch eine Erklärung bei zu sein. Ich kann damit leider nichts anfangen. ._.

#--------------------------------------------------------------------------
# ● set_charset
# charname The name of the charset (character image) being used.
# Reads the name of the charset to determine the tile width of the
# character.
#--------------------------------------------------------------------------
def set_charset(charname)
@character_name=charname
# Default tile width.
@charset_tile_width = 4
charname.gsub(/w\_(\d+)/) {@charset_tile_width = $1.to_i}
end
end

Und hier nochmal das komplette Script wo der Fehler drin ist:
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
#  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
# 監視し、スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :character # キャラクター
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# character : キャラクター (Game_Character)
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
super(viewport)
@character = character
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# タイル ID、ファイル名、色相のどれかが現在のものと異なる場合
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
# タイル ID とファイル名、色相を記憶
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
# タイル ID が有効な値の場合
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
# タイル ID が無効な値の場合
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
#--------------------Edit-----------------
# def: @cw = bitmap.width / 4
@cw = bitmap.width / @character.charset_tile_width
#/--------------------Edit-----------------
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
# 可視状態を設定
self.visible = (not @character.transparent)
# グラフィックがキャラクターの場合
if @tile_id == 0
# 転送元の矩形を設定
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
# スプライトの座標を設定
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
# 不透明度、合成方法、茂み深さを設定
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
# アニメーション
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end


Danke für eure Hilfsbereitschaft!

~Herakle~
13.05.2012, 17:49
Oke. Ich hab die Lösung selber gefunden. Ist aber auch verständlich dass mir dabei niemand helfen kann. Hier aber die Lösung falls nochmal jemand das Problem hat, was ich nicht glaube:

Solltet ihr mit der Beta Version aus dem Jahr 2007 der Project Zelda Engine (Ich meine es wäre Version 2.X gewesen O.o) ein Spiel machen wollen, und der oben genannte Fehler taucht bei euch auf, habt ihr auf eurer Map ein Event erstellt dessen erste Eventseite durch einen Switch aktiviert wird.
Ihr müsst einfach eine neue 1. Projektseite für jedes Event machen, auf der nichts steht. Klingt blöd, funktioniert aber.
Danke trotzdem für eure Hilfe O.o
Kann geschlossen werden. :)

Cornix
13.05.2012, 17:49
So wie es aussieht versucht das Script die Größe des Charakter-Sprites (in tiles) aus dem Namen der Bilddatei zu lesen welche für den Sprite benutzt werden soll.
Es kann sein, dass du deine Bilddateien in einem ungültigen Format benannt hast und dadurch das Lesen der Größe behinderst.

~Herakle~
13.05.2012, 20:47
Oke, darauf muss ich dann doch nochmal was fragen:
Man kann Datein in einem Format bennenen?
Ich kenn nur den Namen ändern und als ein bestimmtes Format speichern O.o

Cornix
13.05.2012, 22:57
Ungünstig ausgedrückt, ich habe natürlich gemeint, dass du den Namen der Bilddatei nicht so geschrieben hast wie es das Script erwartet hat.
Es erwartet wahrscheinlich ein gewisses Format wie der Name geschrieben werden soll, zum Beispiel zuerst ein Name, dann ein Zeichen wie zum Beispiel eckige Klammern, oder ein Kreuz, oder irgendetwas, und dann eine Zahl, oder andere Art von Parameter.

~Herakle~
19.05.2012, 14:44
Ich habe schon wieder einen Fehler bekommen und keine Ahnung wie ich damit umgehen soll...
13750
Die Codezeile:
313 name = ""
314 name = @game_party.actors[0].name if @file_exist

Cornix
19.05.2012, 15:00
Diese Fehlermeldung sagt aus, dass das Objekt dessen Namen du erfahren möchtest nicht existiert. Es wurde nicht initialisiert.
Das heist, "@game_party.actors[0]" ist auf keinen Wert gesetzt worden. Das wiederum heist, dass kein Charakter in deiner Party an erster Stelle steht.
Entweder du musst sicherstellen, bevor diese Funktion aufgerufen wird, dass an erster Stelle in deiner Party ein Held ist, oder aber eine zusätzliche Bedingung für die Abfrage hinzufügen. Aber welche Lösung besser wäre können wir dir erst sagen wenn wir mehr von dem Script zu lesen bekommen als diese zwei Zeilen.

~Herakle~
19.05.2012, 15:04
SAVES_MAX = 3
SAVE_PICTURE = "choose_save"
STARTING_HEARTS = 3


class Game_Temp
attr_accessor :name_fileproc
alias new_initialize initialize
def initialize
new_initialize
@name_fileproc = ""
end
end

class Game_System
attr_accessor :newgame_switch
attr_accessor :played_bgm
attr_accessor :played_bgs
attr_accessor :save_slot
alias new_initialize initialize
def initialize
new_initialize
@newgame_switch = false
@played_bgm = ""
played_bgs = ""
@save_slot = ""
end
end




#==============================================================================
# ¦ Window_NameEdit
#------------------------------------------------------------------------------
# ???????????????????????
#==============================================================================

class Window_NameEdit < Window_Base
def refresh
self.contents.clear
@charset_index = 0 if @charset_index == nil
# ?????
name_array = @name.split(//)
for i in 0...@max_char
c = name_array[i]
if c == nil
c = "_"
end
x = 320 - @max_char * 14 + i * 28
self.contents.draw_text_outline(x, 32, 28, 32, c, 1)
end
# ?????????
bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
cw = bitmap.rect.width / 9.3
ch = bitmap.rect.height / 4
src_rect = Rect.new(@charset_index*120, 0, cw, ch)
self.contents.blt(840 - @max_char * 14 - 40 - (cw/2), 68 - ch, bitmap, src_rect)
end

def charset_index(index)
@charset_index = index
refresh
end
end




#==============================================================================
# ¦ Scene_Name
#------------------------------------------------------------------------------
# ??????????????????
#==============================================================================

class Scene_Name
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main

#-------------------------------
# Animated Background Setup
#-------------------------------

@back = Sprite.new
#@sprite.bitmap = RPG::Cache.title($data_system.title_name)
@backgroundList = ["Titlescreen1"]
@backgroundGameFrameCount = 0
# Number of game frames per background frame.
@backgroundG_BFrameCount = 3.4
@back.bitmap = RPG::Cache.title(@backgroundList[0])


@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# ???????
@actor = $game_actors[$game_temp.name_actor_id]
# ????????
@edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
@input_window = Window_NameInput.new
# ?????????
Graphics.transition
# ??????
loop do
# ????????
Graphics.update
# ???????
Input.update
# ??????
update
# ????????????????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ????????
@sprite.dispose
@back.dispose
@edit_window.dispose
@input_window.dispose
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
# ????????
@edit_window.update
@input_window.update
@backgroundGameFrameCount = @backgroundGameFrameCount + 1
if @backgroundGameFrameCount >= @backgroundG_BFrameCount
@backgroundGameFrameCount = 0
# Add current background frame to the end
@backgroundList = @backgroundList << @backgroundList[0]
# and drop it from the first position
@backgroundList.delete_at(0)
@sprite.bitmap = RPG::Cache.title(@backgroundList[0])
end
# B ??????????
if Input.repeat?(Input::B)
# ??????? 0 ???
if @edit_window.index == 0
return
end
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ?????
@edit_window.back
return
end
# C ??????????
if Input.trigger?(Input::C)
# ??????? [??] ???
if @input_window.character == nil
# ???????
if @edit_window.name == ""
# ???????????
@edit_window.restore_default
# ???????
if @edit_window.name == ""
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
return
end
# ??????????
@actor.name = @edit_window.name
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ??????????
#--------------------------------------------------------
# Things After this has been edited to fit the new system
#--------------------------------------------------------

$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update

$game_variables[8] = STARTING_HEARTS*2
$game_variables[41] = STARTING_HEARTS
$game_variables[42] = 0
$game_variables[50] = 0

file = $game_temp.name_fileproc
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(Time.new, file)
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
$game_system.magic_number = $data_system.magic_number
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_party, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_screen, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_troop, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
file.close
$game_party.remove_actor(1)
$scene = Scene_Map.new
$game_temp.name_calling = false
#--------------------------------------------------------
# Edits ends here
#--------------------------------------------------------
return
end
# ????????????
if @edit_window.index == $game_temp.name_max_char
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ???????
if @input_window.character == ""
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ?????
@edit_window.add(@input_window.character)
return
end
@wait = 3 if @wait == nil or @wait == 0
@charset_index = 0 if @charset_index == nil or @charset_index == 6
@wait -= 1
return if @wait > 0
@charset_index += 1
@edit_window.charset_index(@charset_index)
end
end




#==============================================================================
# ¦ Window_SaveFile
#------------------------------------------------------------------------------
# ???????????????????????????????????
#==============================================================================

class Window_NewLoadFile < Window_Base
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_reader :filename # ?????
attr_reader :selected # ????
#--------------------------------------------------------------------------
# ? ?????????
# file_index : ?????????????? (0~3)
# filename : ?????
#--------------------------------------------------------------------------
def initialize(file_index, filename)
super(50, 64 + file_index % 4 * 104 + (12*file_index) + 12, 540, 104)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype # "File" (File #) window font
self.contents.font.size = $defaultfontsize
@charset_index = 0
@file_index = file_index
@filename = "Save#{@file_index + 1}.sav"
@time_stamp = Time.at(0)
@file_exist = FileTest.exist?(@filename)
@yp = 12
if @file_exist
File.delete(@filename) if File.stat(@filename).size == 0
@file_exist = FileTest.exist?(@filename)
if @file_exist
file = File.open(@filename, "rb")
@time_stamp = Marshal.load(file)
@characters = Marshal.load(file)
@frame_count = Marshal.load(file)
@game_system = Marshal.load(file)
@game_switches = Marshal.load(file)
@game_variables = Marshal.load(file)
@game_party = Marshal.load(file)
@total_sec = @frame_count / Graphics.frame_rate
file.close
end
end
refresh
@selected = false
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# ?????????
self.contents.font.color = normal_color
if @file_index == SAVES_MAX
@exit = RPG::Cache.picture("exit")
self.z = 0
self.y = 390
src_rect = Rect.new(0, 0, @exit.rect.width, @exit.rect.height)
self.contents.blt(self.x + 8, 64 - @exit.rect.height, @exit, src_rect)
self.opacity = 0
end
name = ""
name = @game_party.actors[0].name if @file_exist
self.contents.draw_text_outline(4, 0, 600, 32, name)
@name_width = contents.text_size(name).width
# ??????????????
if @file_exist
for i in 0...@characters.size
bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
cw = bitmap.rect.width / 9.3
ch = bitmap.rect.height / 4
src_rect = Rect.new(@charset_index*120, 0, cw, ch)
x = 105 - @characters.size * 120 + i * 64 - cw / 2
self.contents.blt(x+35, 63 - ch, bitmap, src_rect)
heart_display(x+78, 83-ch)
end
# ????????
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_outline(4, 8, 600, 32, time_string, 2)
# ??????????
self.contents.font.color = normal_color
time_string = @time_stamp.strftime("%Y / %m/ %d %H:%M")
self.contents.draw_text_outline(self.width-self.contents.text_size(time_string).width-32, 40, self.contents.text_size(time_string).width, 32, time_string, 0)
else
@name_width = contents.text_size("New Game").width
self.contents.draw_text_outline(4, 0, 600, 32, "New Game") if self.opacity != 0
end
end
def heart_display(x, y)
@x = x
@y = y

@link_heart = @game_variables[8]
@link_maxheart = @game_variables[41]

if @link_heart == 1
insert_halfheart
elsif @link_heart >= 2
insert_fullheart
end
if @link_heart <= 2
insert_emptyheart
elsif @link_heart == 3
insert_halfheart
elsif @link_heart >= 4
insert_fullheart
end
if @link_maxheart >= 3
if @link_heart <= 4
insert_emptyheart
elsif @link_heart == 5
insert_halfheart
elsif @link_heart >= 6
insert_fullheart
end
end
if @link_maxheart >= 4
if @link_heart <= 6
insert_emptyheart
elsif @link_heart == 7
insert_halfheart
elsif @link_heart >= 8
insert_fullheart
end
end
if @link_maxheart >= 5
if @link_heart <= 8
insert_emptyheart
elsif @link_heart == 9
insert_halfheart
elsif @link_heart >= 10
insert_fullheart
end
end
if @link_maxheart >= 6
if @link_heart <= 10
insert_emptyheart
elsif @link_heart == 11
insert_halfheart
elsif @link_heart >= 12
insert_fullheart
end
end
if @link_maxheart >= 7
if @link_heart <= 12
insert_emptyheart
elsif @link_heart == 13
insert_halfheart
elsif @link_heart >= 14
insert_fullheart
end
end
if @link_maxheart >= 8
if @link_heart <= 14
insert_emptyheart
elsif @link_heart == 15
insert_halfheart
elsif @link_heart >= 16
insert_fullheart
end
end
if @link_maxheart >= 9
if @link_heart <= 16
insert_emptyheart
elsif @link_heart == 17
insert_halfheart
elsif @link_heart >= 18
insert_fullheart
end
end
if @link_maxheart >= 10
if @link_heart <= 18
insert_emptyheart
elsif @link_heart == 19
insert_halfheart
elsif @link_heart >= 20
insert_fullheart
end
end
if @link_maxheart >= 11
@y += 16
@x = x
if @link_heart <= 20
insert_emptyheart
elsif @link_heart == 21
insert_halfheart
elsif @link_heart >= 22
insert_fullheart
end
end
if @link_maxheart >= 12
if @link_heart <= 22
insert_emptyheart
elsif @link_heart == 23
insert_halfheart
elsif @link_heart >= 24
insert_fullheart
end
end
if @link_maxheart >= 13
if @link_heart <= 24
insert_emptyheart
elsif @link_heart == 25
insert_halfheart
elsif @link_heart >= 26
insert_fullheart
end
end
if @link_maxheart >= 14
if @link_heart <= 26
insert_emptyheart
elsif @link_heart == 27
insert_halfheart
elsif @link_heart >= 28
insert_fullheart
end
end
if @link_maxheart >= 15
if @link_heart <= 28
insert_emptyheart
elsif @link_heart == 29
insert_halfheart
elsif @link_heart >= 30
insert_fullheart
end
end
if @link_maxheart >= 16
if @link_heart <= 30
insert_emptyheart
elsif @link_heart == 31
insert_halfheart
elsif @link_heart >= 32
insert_fullheart
end
end
if @link_maxheart >= 17
if @link_heart <= 32
insert_emptyheart
elsif @link_heart == 33
insert_halfheart
elsif @link_heart >= 34
insert_fullheart
end
end
if @link_maxheart >= 18
if @link_heart <= 34
insert_emptyheart
elsif @link_heart == 35
insert_halfheart
elsif @link_heart >= 36
insert_fullheart
end
end
if @link_maxheart >= 19
if @link_heart <= 36
insert_emptyheart
elsif @link_heart == 37
insert_halfheart
elsif @link_heart >= 38
insert_fullheart
end
end
if @link_maxheart >= 20
if @link_heart <= 38
insert_emptyheart
elsif @link_heart == 39
insert_halfheart
elsif @link_heart >= 40
insert_fullheart
end
end end
def insert_fullheart
bitmap = RPG::Cache.picture("FullHeart")
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(@x - cw / 2, @y - ch, bitmap, src_rect)
@x += cw
end
def insert_halfheart
bitmap = RPG::Cache.picture("HalfHeart")
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(@x - cw / 2, @y - ch, bitmap, src_rect)
@x += cw
end
def insert_emptyheart
bitmap = RPG::Cache.picture("EmptyHeart")
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(@x - cw / 2, @y - ch, bitmap, src_rect)
@x += cw
end
#--------------------------------------------------------------------------
# ? ???????
# selected : ??????? (true=?? false=???)
#--------------------------------------------------------------------------
def selected=(selected)
@selected = selected
update_cursor_rect
end
def charset_index(index)
@charset_index = index
refresh
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_cursor_rect
if @selected
if @file_index == SAVES_MAX
self.cursor_rect.set(self.x + 7, 63 - @exit.rect.height, @exit.rect.width+2, @exit.rect.height+2)
else
self.cursor_rect.set(0, 0, @name_width + 8, 32)
end
else
self.cursor_rect.empty
end
end
end





#==============================================================================
# ¦ Scene_File
#------------------------------------------------------------------------------
# ????????????????????????
#==============================================================================

class Scene_NewLoadFile
#--------------------------------------------------------------------------
# ? ?????????
# help_text : ????????????????
#--------------------------------------------------------------------------
def initialize(help_text)
@help_text = help_text
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main

$game_party.setup_starting_members

#-------------------------------
# Animated Background Setup
#-------------------------------

@back = Sprite.new
#@sprite.bitmap = RPG::Cache.title($data_system.title_name)
@backgroundList = ["SaveScreen1","SaveScreen1","SaveScreen1",
"SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
"SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
"SaveScreen2","SaveScreen3","SaveScreen4","SaveScreen5","SaveScreen6",
"SaveScreen6","SaveScreen5","SaveScreen4","SaveScreen3","SaveScreen2",
"SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",
"SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1","SaveScreen1",]
@backgroundGameFrameCount = 0
# Number of game frames per background frame.
@backgroundG_BFrameCount = 3.4
@back.bitmap = RPG::Cache.title(@backgroundList[0])


@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# ???????????
@save_sprite = Sprite.new
@save_sprite.bitmap = RPG::Cache.title(SAVE_PICTURE)
@save_sprite.x = 0
@save_sprite.y = 0
# ???????????????
@savefile_windows = []
for i in 0..SAVES_MAX
@savefile_windows.push(Window_NewLoadFile.new(i, make_filename(i)))
end
# ??????????????
@file_index = $game_temp.last_file_index
@savefile_windows[@file_index].selected = true
# ?????????
Graphics.transition
# ??????
loop do
# ????????
Graphics.update
# ???????
Input.update
# ??????
update
# ????????????????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ????????
@sprite.dispose
@back.dispose
@save_sprite.dispose
for i in @savefile_windows
i.dispose
end
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
@backgroundGameFrameCount = @backgroundGameFrameCount + 1
if @backgroundGameFrameCount >= @backgroundG_BFrameCount
@backgroundGameFrameCount = 0
# Add current background frame to the end
@backgroundList = @backgroundList << @backgroundList[0]
# and drop it from the first position
@backgroundList.delete_at(0)
@sprite.bitmap = RPG::Cache.title(@backgroundList[0])
end
for i in @savefile_windows
i.update
end
# ????????
@save_sprite.update
# C ??????????
if Input.trigger?(Input::C)
if @file_index == SAVES_MAX
$scene = nil
else
$game_system.se_play($data_system.decision_se)
if FileTest.exist?(make_filename(@file_index))
on_decision(make_filename(@file_index))
$game_temp.last_file_index = @file_index
else
$game_system.save_slot = make_filename(@file_index)
file = File.new(make_filename(@file_index), "wb")
on_new(file)
$game_temp.last_file_index = @file_index
end
end
end
# B ??????????
if Input.trigger?(Input::B)
# ???? on_cancel (??????) ???
on_cancel
return
end
# ??????????????
if Input.repeat?(Input::DOWN)
# ????????????????????????
# ?????????? 3 ??????
if Input.trigger?(Input::DOWN) or @file_index < 3
# ???? SE ???
$game_system.se_play($data_system.cursor_se)
# ?????????
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 1) % 4
@savefile_windows[@file_index].selected = true
return
end
end
# ??????????????
if Input.repeat?(Input::UP)
# ????????????????????????
# ?????????? 0 ???????
if Input.trigger?(Input::UP) or @file_index > 0
# ???? SE ???
$game_system.se_play($data_system.cursor_se)
# ?????????
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 3) % 4
@savefile_windows[@file_index].selected = true
return
end
end
@wait = 3 if @wait == nil or @wait == 0
@charset_index = 0 if @charset_index == nil or @charset_index == 6
@wait -= 1
return if @wait > 0
@charset_index += 1
for i in 0..@savefile_windows.size-1
@savefile_windows[i].charset_index(@charset_index)
next
end
end
#--------------------------------------------------------------------------
# ? ????????
# file_index : ?????????????? (0~3)
#--------------------------------------------------------------------------
def make_filename(file_index)
return "Save#{file_index + 1}.sav"
end
end




class Scene_NewLoad < Scene_NewLoadFile
def initialize
$game_temp.last_file_index = 0
latest_time = Time.at(0)
for i in 0..3
filename = make_filename(i)
if FileTest.exist?(filename)
file = File.open(filename, "rb")
if file.mtime > latest_time
latest_time = file.mtime
$game_temp.last_file_index = i
end
file.close
end
end
super("Load from which file")
end

def on_new(file)

$game_map.setup($data_system.start_map_id)

$game_system.newgame_switch = true
$game_temp.name_fileproc = file
$game_temp.name_calling = true
$game_temp.name_actor_id = 1
$game_temp.name_max_char = 8
$scene = Scene_Name.new
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def on_decision(filename)
unless FileTest.exist?(filename)
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ??? SE ???
$game_system.se_play($data_system.load_se)
# ???????????
file = File.open(filename, "rb")
read_save_data(file, $game_system.newgame_switch)
file.close
Audio.bgm_stop
$game_system.bgm_play($game_system.playing_bgm) if !$game_system.newgame_switch
$game_system.bgs_play($game_system.playing_bgs) if !$game_system.newgame_switch
$game_map.autoplay
# ?????? (????????)
$game_map.update
$game_party.remove_actor(1) if $game_system.newgame_switch
# ?????????
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def on_cancel
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ???????????
$scene = Scene_Title.new
end
#--------------------------------------------------------------------------
# ? ???????????
# file : ??????????????? (??????)
#--------------------------------------------------------------------------
def read_save_data(file, newgame)
if !newgame
Audio.bgm_stop
# ?????????????????????????
time = Marshal.load(file)
characters = Marshal.load(file)
# ??????????????????????
Graphics.frame_count = Marshal.load(file)
# ????????????????
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_party = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
if $game_system.magic_number != $data_system.magic_number
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
$game_player.refresh
end
else
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
time = Time.new
# ??????????????????????
Graphics.frame_count = 0
# ????????????????
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_party = Game_Party.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
#$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
end
# ???????????????????
# (?????????????????)
# ???????????????
$game_party.refresh
end
end
Das ist der Code. Welche Stellen da von Belang sind würde ich zwar gerne aussortieren, kann ich aber wegen fehlender Kenntnis nicht.
Das Problem ist leider, dass der Fehler kommt sobald ich das Spiel starte, also den Ladebildschirm betrete, daher kann ich keine nachträglichen Änderungen mehr vornehmen, also einen Helden an die erste Stelle setzen, da sonst mein Testspeicherstand verloren geht, mit dem ich das Spiel im Moment durchteste, was mich ziemlich viel Arbeit kosten würde...

Cornix
19.05.2012, 16:04
Es ist also ein Script zum Laden von Savefiles. So wie es aussieht wurde es nicht dafür konzipiert ein Savefile darzustellen welches keine Helden in der Party enthält.
Du kannst natürlich probieren eine Bedingung davor zu schachteln damit dieser Fall an diesem einen Punkt abgefangen wird, aber ich kann dir nicht sagen ob dann nicht anschließend ein nächster Fehler an anderer Stelle auftauchen wird.

Du kannst es ja ausprobieren. An der von dir zitierten Zeile 314 ersetzt du einfach:

name = @game_party.actors[0].name if @file_exist
durch:

if @game_party.actors[0] != nil
name = @game_party.actors[0].name if @file_exist
end

Und probierst es nocheinmal aus. Es könnte allerdings passieren, dass dann der selbe Fehler an anderer Stelle auftaucht da der Autor des Scriptes diese Situation scheinbar nicht eingeplant hat.