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
297 폰 시스템 29 RPGbooster 2008.10.11 3454
296 직업 [직업 변경] TBK_JobChanger_Demo_v1.2 10 아방스 2009.02.05 3468
295 기타 범용 게이지 묘화 - KGC 14 file 카르와푸딩의아틀리에 2009.08.19 3476
294 파티 전투중 파티 변경 스크립트 21 아방스 2008.03.09 3477
293 온라인 VX Phoenix 온라인 스크립트 1.3버전 12 아방스 2009.06.18 3486
292 메뉴 Final Fantasy VII Menu System 8 비극ㆍ 2010.04.19 3506
291 메시지 MessageSound v2.0 글자에 소리 다다닥 스크립트 21 할렘 2009.02.02 3510
290 상점 상점에서 아이템 분류 5 file 파이어 2011.01.23 3510
289 새로운 종류의 세이브 스크립트!! 8 Man... 2008.10.28 3517
288 기타 Staff Roll 13 file 허걱 2009.01.31 3523
287 이동 및 탈것 A* 알고리즘을 이용한 길찾기 스크립트 3 file 허걱 2009.04.20 3527
286 기타 경험치, HP, MP 백분율계산 (실시간) 8 file 허걱 2009.08.01 3540
285 메뉴 지난 메뉴 스크립트에 이은 스테이터스 스크립트! 5 file 독사 2008.06.29 3545
284 기타 KGC패시브 스크립트 30 카르와푸딩의아틀리에 2009.10.07 3551
283 전투 XAS Hero Edition VX Manual 번역 1 케이언 2012.01.02 3554
282 기타 데이터베이스 자체 제한 해체 스크립트 [Database Limit Breaker] 13 file 할렘 2009.02.07 3562
281 기타 말풍선 그림 바꾸기 6 file 허걱 2009.08.15 3565
280 타이틀/게임오버 타이틀전 공지사항 19 file AYARSBMA 2010.01.23 3583
279 스킬장착 시스템 17 file RPGbooster 2008.10.11 3585
278 메시지 Display Flipped Picture 스크립트 11 Love♡ 2009.11.09 3585
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