#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# 메뉴 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
# menu_index : 커멘드의 커서 초기 위치
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
def main
# 커멘드 윈도우를 작성
s1 = $data_system.words.item
s2 = "스테이터스"
s3 = "세이브"
s4 = "게임 종료"
@command_window = Window_Command.new(160, [s1, s2, s3, s4])
@command_window.index = @menu_index
# 파티 인원수가 0 명의 경우
if $game_party.actors.size == 0
# 아이템, 스킬, 장비, 스테이터스를 무효화
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
# 세이브 금지의 경우
if $game_system.save_disabled
# 세이브를 무효로 한다
@command_window.disable_item(4)
end
# 플레이 시간 윈도우를 작성
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
# 보수 윈도우를 작성
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# 골드 윈도우를 작성
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# 스테이터스 윈도우를 작성
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# 트란지션 실행
Graphics.transition
# 메인 루프
loop do
# 게임 화면을 갱신
Graphics.update
# 입력 정보를 갱신
Input.update
# 프레임 갱신
update
# 화면이 바뀌면 루프를 중단
if $scene != self
break
end
end
# 트란지션 준비
Graphics.freeze
# 윈도우를 해방
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
# 윈도우를 갱신
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
# 커멘드 윈도우가 액티브의 경우: update_command 를 부른다
if @command_window.active
update_command
return
end
# 스테이터스 윈도우가 액티브의 경우: update_status 를 부른다
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (커멘드 윈도우가 액티브의 경우)
#--------------------------------------------------------------------------
def update_command
# B 버튼이 밀렸을 경우
if Input.trigger?(Input::B)
# 캔슬 SE 를 연주
$game_system.se_play($data_system.cancel_se)
# 맵 화면으로 전환해
$scene = Scene_Map.new
return
end
# C 버튼이 밀렸을 경우
if Input.trigger?(Input::C)
# 파티 인원수가 0 명으로, 세이브, 게임 종료 이외의 커멘드의 경우
if $game_party.actors.size == 0 and @command_window.index < 4
# 버저 SE 를 연주
$game_system.se_play($data_system.buzzer_se)
return
end
# 커멘드 윈도우의 커서 위치에서 분기
case @command_window.index
when 0 # 아이템
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 아이템 화면으로 전환해
$scene = Scene_Item.new
when 1 # 스테이터스
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 스테이터스 윈도우를 액티브하게 한다
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # 세이브
# 세이브 금지의 경우
if $game_system.save_disabled
# 버저 SE 를 연주
$game_system.se_play($data_system.buzzer_se)
return
end
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 세이브 화면으로 전환해
$scene = Scene_Save.new
when 3 # 게임 종료
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 게임 종료 화면으로 전환해
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (스테이터스 윈도우가 액티브의 경우)
#--------------------------------------------------------------------------
def update_status
# B 버튼이 밀렸을 경우
if Input.trigger?(Input::B)
# 캔슬 SE 를 연주
$game_system.se_play($data_system.cancel_se)
# 커멘드 윈도우를 액티브하게 한다
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# C 버튼이 밀렸을 경우
if Input.trigger?(Input::C)
# 커멘드 윈도우의 커서 위치에서 분기
case @command_window.index
when 1 # 스테이터스
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 스테이터스 화면으로 전환해
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
일단 이게 스크립트 전문입니다.
어떤 분은 스테이터스 누르면 오류 있다고 하시고,
뭣보다 저장을 누른뒤 메뉴로 돌아가면 왠지 메뉴 맨 밑창(원래 아무것도 없어야 하는 칸)에 들어가는 오류가 생깁니다.
어느 부분을 수정해야 할까요?