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 5462
297 메뉴 몬스터도감 Tankentai사이드뷰에 작동하도록 수정 13 카르와푸딩의아틀리에 2009.05.22 3777
296 기타 스크립트강좌 4 아하!잘봤어요. 2009.05.04 2160
295 이동 및 탈것 대각선 이동 스크립트 17 아방스 2009.05.02 3686
294 이동 및 탈것 A* 알고리즘을 이용한 길찾기 스크립트 3 file 허걱 2009.04.20 3532
293 기타 KGC 리버스 데미지! 28 루시페르 2009.04.13 2980
292 타이틀/게임오버 [자작] 타이틀 화면 없이 게임을 시작하자! Title Skiper 29 케류 2009.04.05 4425
291 기타 [자작] 횡스크롤 점프스크립트 18 file 좀비사냥꾼 2009.04.03 4277
290 키입력 답을 입력하는 텍스트박스 스크립트!! 21 file 좀비사냥꾼 2009.03.29 4208
289 기타 캐릭터 소개화면 16 file 좀비사냥꾼 2009.03.29 6050
288 장비 KGC장비종류 추가 스크립트. 36 file 루시페르 2009.03.28 4679
287 장비 KGC확장장비창 스크립트 15 file 티라엘 2009.03.27 3627
286 상태/속성 어떤 상태일때에만 사용가능한 스킬 14 file 좀비사냥꾼 2009.03.25 3269
285 메뉴 [자작]명성치 사용 시스템(메뉴 출력) 16 Rainsy 2009.03.22 4365
284 기타 시야범위 스크립트 18 file 좀비사냥꾼 2009.03.19 4048
283 메시지 문자픽쳐 표시 스크립트 7 file 좀비사냥꾼 2009.03.19 4149
282 이름입력 한글로 이름 입력하는 스크립트입니다. 55 file 헤르코스 2009.03.18 6667
281 타이틀/게임오버 타이틀화면 커스터마이즈 29 file 可わいい 2009.03.16 6147
280 전투 ORBS [새로운 전투 방식] 48 file 아방스 2009.03.04 10215
279 기타 액터선택지제작 간편화 스크립트 7 Evangelista 2009.02.26 4085
» 이름입력 아이템 이름을 내마음대로 정하자! name_changer 1.0v 26 file Last H 2009.02.25 4069
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ... 32 Next
/ 32