VX 스크립트

아이템 메뉴에서 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

 


 

 


 

 


 

Comment '26'
  • ?
    허걱 2009.02.25 20:58
    음...스크립트를 아예 갈아주는식이면 호환이 힘들지 않을까요??
    예를들어서 Scene_Item 이라던가 Game_Temp 부분등...
    class Game_Temp < Game_Temp
    attr_accessor :추가내용
    def initialize
    super
    추가내용
    end
    end
    이런식으로 자신을 받아서 슈퍼클래스로 사용하는게 다른 스크립트랑도 호환이 있을 듯 한데...
    스크립트 길이도 줄어들고...이런 방법도 괜찮지 않을까 합니다...^^;
  • ?
    Last H 2009.02.25 21:04
    물론 저도 그생각을 했습니다만.. 제가 사실 RGSS는 잼병입니다.
    순수 C++하던거로 하던거라 ^^;
    alias라는 call of value구조로 함수를 호출하는 것 같은거 있는건 봤는데
    사실 써본적이 없어서  쉽게 손이 가질 않았죠.
    만약 시간이 된다면 다음에 1.1v이라도 해서 수정하는 쪽으로 생각하겠습니다.

  • ?
    Last H 2009.02.25 21:25
    수정했어요 ^^
  • ?
    나렌시아 2009.02.25 22:35
    헛.. 이런걸 만드시다니 정말 대단해요 ≡ㅅ≡ b

    우리 팀에 스크립터가 필요한데 ≡ㅅ≡ .. << 
  • ?
    쉴더 2009.02.25 23:59
    라스트님 xp 가동되겠..죠?
  • ?
    쉴더 2009.02.26 00:01
    어허헉!! 안된다니!! 안된다니!!!~
  • ?
    쉴더 2009.02.26 19:03
    네.. 흐흑...
  • ?
    Last H 2009.02.26 10:37
    뜨허헠 쉴더님 XP였나보군요!? ㄷㄷ;
  • ?
    쉴더 2009.02.28 20:44
    예기치 않은 오류 발견 : 인벤토리에 아이템이 한개도 있지 않을경우에 'Q' 키를 누를경우 아이템 명을 찾을 수 없다는 에러발생.

    저기.. 라스트님
    이 스크립트 변형해서 '어떠한 아이템'을 얻었을때 그 아이템의 이름을 변경하게 만들수는 없을까요 =-=?
    염치없지만...
  • ?
    Last H 2009.03.15 14:00
    아.. 이미 만들어 드린 ^^;
  • ?
    독한 2009.03.15 08:11
    혹시 수식어 같은거 말씀하시는거 아닐까요 ㄷㄷ .. 템획득시 랜덤하게 낡은 - 검, 빛나는 - 검 이런거..
  • ?
    Last H 2009.02.28 21:46
    에러 리포팅 감사합니다. 수정했습니다.

    그리고 말씀하신게
    정확히 무엇을 말씀하시는지 모르겠다는...;
  • ?
    백년술사 2009.03.01 11:58
    재밌겠다.
    유적게임 만들때나 새로운 나비를 찾아 이름을 정하는것
  • ?
    꿀꿀이 2009.03.02 01:38
    우오... 스크립트 만드시는 분들은 굇수들 ㅠ
  • ?
    칼맞은법사 2009.03.09 20:29
    초   공    감   질
  • ?
    시월 2009.03.14 21:49
    모그 메뉴창 풀버전이랑 같이 쓰니깐 ... 뭐랄까 ... 말로 설명을 못하겠는데 ..
    아무튼 스크립트가 겹치는듯 ... 아 ... Q키의 사용이 겹치는듯 ...
  • ?
    시월 2009.03.15 13:14
    우우우오오오 감사합니다 ^^
  • ?
    Last H 2009.03.14 21:52
    elsif Input.trigger?(Input::L)
    이부분을 수정하면 사용키를 변경할 수 있습니다.
    elsif Input.trigger?(Input:F5)
    로 바꾼다면 F5키로 되고요 만약 A로 바꾼다면 shift키로 사용가능합니다.
  • ?
    루시페르 2009.04.10 00:14
    우오오오!!1 감사합니다!
  • profile
    낚는놈 2009.04.11 13:03
    음...ㅇㅅㅇ...이런방법도있내요...
  • ?
    데비르 2009.04.22 18:40
    사용하신 분들 한글로 입력 되시나요?
    이름바꾸기 이벤으로는 잘 작동하는 한글 입력 스크립트가 이것을 사용하니 ㄱㅛㄱㅏ <-이런식으로 조합이 안되는데ㅠ
  • ?
    데비르 2009.04.22 23:32
    아^^; 사용하고 있는 스크립트가 많아서 찾아보진 못하구 혹시 다른 분들은 어떤가 해서 여쭤본거에요ㅋ
    직접 친절하게 답글 달아주셔서 감사합니다.
  • ?
    Last H 2009.04.22 19:21
    어떤 스크립트와 충돌이 있는지 좀 더 명확히 알려주시길 부탁드립니다.
    확인해 보게요. ^^
  • ?
    정검중 2009.04.25 15:18
    테스트 한번해봄니다 ^^
  • ?
    낙서 2010.02.16 19:30

  • ?
    ijsh515 2010.07.10 22:58


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
11 이름입력 한글로 이름 입력하는 스크립트입니다. 55 file 헤르코스 2009.03.18 6662
10 이름입력 [rpg vx]한글 스크립트(저번 것보단 업그레이드 된 것입니다.^^) 17 file 레시온 2008.03.28 4736
9 이름입력 한글 이름 입력 스크립트입니다.^^ 14 레시온 2008.03.18 4382
8 이름입력 모그 이름 바꾸기 한글 변역! 2 Man.... 2008.11.04 4114
7 이름입력 주인공이름으로 저장하는 스크립트 6 file 아방스 2009.02.07 4079
» 이름입력 아이템 이름을 내마음대로 정하자! name_changer 1.0v 26 file Last H 2009.02.25 4067
5 이름입력 아이템, 장비, 스킬 이름 색깔 바꾸기 14 까까까 2011.03.04 3732
4 이름입력 글자조합 (이름생성용) - 수정 12 file 허걱 2009.07.17 3636
3 이름입력 MOG 이름바꾸기 11 file RPGbooster 2008.10.08 3285
2 이름입력 아이템 이름 바꾸기 버전 (헤르코스님의 한글 입력) 7 Last H 2009.12.20 2722
1 이름입력 Etude87_HG_Hangul_Name_Scene file 습작 2012.06.14 1948
Board Pagination Prev 1 Next
/ 1