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 디러그 시스템?? 1 Man... 2008.10.28 1247
296 기타 디스크 체인져 VX!! (업데이트..) 30 file Tofuman 2008.12.02 3168
295 퀘스트 디아블로 스타일 퀘스트 시스템(번역) 38 file 훈덕 2009.02.03 6049
294 기타 땅파기 18 file 비극ㆍ 2010.04.19 3013
293 기타 라이트 이펙트 스크립트 12 file 아방스 2009.02.07 3262
292 타이틀/게임오버 랜덤 타이틀화면 8 file RPGbooster 2008.10.08 2832
291 아이템 레벨,능력치,아이템소지갯수,소지금의 한계돌파스크립트 21 file 이탁 2009.01.28 4547
290 메뉴 레벨업 시 자세한 정보 나오는 스크립트 23 아방스 2009.01.20 3895
289 기타 레벨업 시 증가분의 HP/MP 회복 10 시트르산 2010.09.12 2427
288 기타 레벨업 이펙트... 20 비극ㆍ 2010.04.19 3768
287 레벨업 할경우 hp/mp 등을 채워주는 스크립트 49 아방스 2008.09.09 4473
286 레벨업시 자세한 능력치화면 31 file RPGbooster 2008.10.08 4181
285 레오 저장 스크립트 9 Man... 2008.10.28 2529
284 맵/타일 레이 월드맵 스크립트 14 file 카르와푸딩의아틀리에 2009.07.04 4813
283 기타 로딩중 스크립트 24 file NO.0 2009.07.11 4462
282 장비 루시퍼님이올리신 rei의 보이는 장비 아주 조금 해석본 2 file 비류 2010.01.08 2184
281 타이틀/게임오버 륀느님 요청] 전투 전멸후 Game over없이 특정위치로 이동 10 Last H 2009.02.24 2834
280 키입력 마우스 시스템 Simple Mouse System (수정) 42 Incubus 2008.05.24 5693
279 기타 말풍선 그림 바꾸기 6 file 허걱 2009.08.15 3565
278 메뉴 매우 간단명료한 메뉴. 32 file 비극ㆍ 2010.04.23 6619
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