아이템 메뉴에서 Q키를 입력하면
아이템, 무기 ,방어구 모두 입력테이블이 생겨서 자신이 원하는 이름으로 바꿀 수 있습니다.
저장후 로드해도 문제가 없습니다.
간단한 테스트는 해보았지만 혹시라도 얘기치 않은 버그가 발생할 시 덧글을 남겨주세요.
p.s이전에 만들었던 초기작은 내일 삭제 해도 될까요?
덧글남기신분들의 허락이 떨어지면 바로 삭제 하겠습니다.
아래에서 부터 복사~!
#2월 28일
#아이템을 소지한게 없을때 공란에서 이름변경 메뉴를 열때 생기던 에러를 수정.
#========================================================================================
module Last_H
MaxChar = 10 # 아이템 이름의 최대 문자열입니다. 숫자를 수정하시면
#글자의최대수가 늘어납니다. 더이상 늘리길 권장하지 않습니다.
end
#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
# 아이템 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
class Scene_Item < Scene_Base
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
@item = @item_window.item
if @item != nil
$game_party.last_item_id = @item.id
end
if $game_party.item_can_use?(@item)
Sound.play_decision
determine_item
else
Sound.play_buzzer
end
elsif Input.trigger?(Input::L)
Sound.play_decision
if @item_window.item ==nil
Sound.play_buzzer
else
case @item_window.item
when RPG::Item
$game_temp.item_kind = 1
when RPG::Weapon
$game_temp.item_kind = 2
when RPG::Armor
$game_temp.item_kind =3
end
$game_temp.name_item_id = @item_window.item.id
$scene = Scene_ItemName.new
end
end
end
end
#==============================================================================
# ■ Game_Temp
#------------------------------------------------------------------------------
# 세이브 데이터에 포함되지 않는, 일시적인 데이터를 취급하는 클래스입니다.
# 이 클래스의 인스턴스는 $game_temp 로 참조됩니다.
#==============================================================================
class Game_Temp< Game_Temp
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :name_item_id #아이템 이름 입력 id
attr_accessor :item_kind #아이템 이름 입력 id
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
def initialize
super
@name_item_id= 0
@item_kind = 0
end
end
#==============================================================================
# ■ Scene_ItemName
#------------------------------------------------------------------------------
# 아이템 이름 입력 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
class Scene_ItemName < Scene_Base
#--------------------------------------------------------------------------
# ● 개시 처리
#--------------------------------------------------------------------------
def start
super
create_menu_background
case $game_temp.item_kind
when 1
@item = $data_items[$game_temp.name_item_id]
when 2
@item = $data_weapons[$game_temp.name_item_id]
when 3
@item = $data_armors[$game_temp.name_item_id]
end
@edit_window = Window_ItemNameEdit.new(@item, Last_H::MaxChar)
@input_window = Window_NameInput.new
end
#--------------------------------------------------------------------------
# ● 종료 처리
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@edit_window.dispose
@input_window.dispose
end
#--------------------------------------------------------------------------
# ● 원래의 화면에 돌아온다
#--------------------------------------------------------------------------
def return_scene
$scene = Scene_Item.new
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
super
update_menu_background
@edit_window.update
@input_window.update
if Input.repeat?(Input::B)
if @edit_window.index > 0 # 문자 위치가 좌단은 아니다
Sound.play_cancel
@edit_window.back
end
elsif Input.trigger?(Input::C)
if @input_window.is_decision # 커서 위치가 [결정] 의 경우
if @edit_window.name == "" # 이름이 비어있는 경우
@edit_window.restore_default # 디폴트 이름으로 되돌린다
if @edit_window.name == ""
Sound.play_buzzer
else
Sound.play_decision
end
else
Sound.play_decision
@item.name = @edit_window.name # 아이템의 이름을 변경
return_scene
end
elsif @input_window.character != "" # 문자가 비어있지 않은 경우
if @edit_window.index == @edit_window.max_char # 문자 위치가 우단
Sound.play_buzzer
else
Sound.play_decision
@edit_window.add(@input_window.character) # 문자를 추가
end
end
end
end
end
#==============================================================================
# ■ Window_ItemNameEdit
#------------------------------------------------------------------------------
# 이름 입력 화면에서, 아이템 이름을 편집하는 윈도우입니다.
#==============================================================================
class Window_ItemNameEdit < Window_Base
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_reader :name # 이름
attr_reader :index # 커서 위치
attr_reader :max_char # 최대 문자수
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
# actor : 액터
# max_char : 최대 문자수
#--------------------------------------------------------------------------
def initialize(item,max_char)
super(88, 20, 368, 128)
@item = item
@name =item.name
@max_char = max_char
name_array = @name.split(//)[0...@max_char] # 최대 문자수에 거둔다
@name = ""
for i in 0...name_array.size
@name += name_array[i]
end
@default_name = @name
@index = name_array.size
self.active = false
refresh
update_cursor
end
#--------------------------------------------------------------------------
# ● 디폴트의 이름에 되돌린다
#--------------------------------------------------------------------------
def restore_default
@name = @default_name
@index = @name.split(//).size
refresh
update_cursor
end
#--------------------------------------------------------------------------
# ● 문자의 추가
# character : 추가하는 문자
#--------------------------------------------------------------------------
def add(character)
if @index < @max_char and character != ""
@name += character
@index += 1
refresh
update_cursor
end
end
#--------------------------------------------------------------------------
# ● 문자의 삭제
#--------------------------------------------------------------------------
def back
if @index > 0
name_array = @name.split(//) # 한 자 삭제
@name = ""
for i in 0...name_array.size-1
@name += name_array[i]
end
@index -= 1
refresh
update_cursor
end
end
#--------------------------------------------------------------------------
# ● 항목을 묘화 하는 구형의 취득
# index : 항목 번호
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new(0, 0, 0, 0)
rect.x = 220 - (@max_char + 1) * 12 + index * 24
rect.y = 36
rect.width = 24
rect.height = WLH
return rect
end
#--------------------------------------------------------------------------
# ● 리프레쉬
#--------------------------------------------------------------------------
def refresh
self.contents.clear
#~ draw_actor_face(@actor, 0, 0)
name_array = @name.split(//)
for i in 0...@max_char
c = name_array[i]
c = '_' if c == nil
self.contents.draw_text(item_rect(i), c, 1)
end
end
#--------------------------------------------------------------------------
# ● 커서의 갱신
#--------------------------------------------------------------------------
def update_cursor
self.cursor_rect = item_rect(@index)
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
def update
super
update_cursor
end
end
#==============================================================================
# ■ Scene_File을 재정의
#------------------------------------------------------------------------------
# 저장 파일 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● 세이브 데이터의 기록
# file : 쓰기용 파일 오브젝트 (오픈이 끝난 상태)
#--------------------------------------------------------------------------
alias last_H_write_save_data write_save_data
def write_save_data(file)
last_H_write_save_data(file)
Marshal.dump($data_items, file)
Marshal.dump($data_weapons, file)
Marshal.dump($data_armors, file)
end
#--------------------------------------------------------------------------
# ● 세이브 데이터의 읽기
# file : 읽기용 파일 오브젝트 (오픈이 끝난 상태)
#--------------------------------------------------------------------------
alias last_H_read_save_data read_save_data
def read_save_data(file)
last_H_read_save_data(file)
$data_items = Marshal.load(file)
$data_weapons = Marshal.load(file)
$data_armors = Marshal.load(file)
end
end