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
277 타이틀/게임오버 륀느님 요청] 전투 전멸후 Game over없이 특정위치로 이동 10 Last H 2009.02.24 2834
276 스킬 미완성 구버전. 2칸 위에 있는 글을 이용해주세요. 7 Last H 2009.02.23 1925
275 기타 [kcg] 슬립 데미지 상세화 19 BoneheadedAlien 2009.02.22 3242
274 기타 아키루냥님 요청 스크립트(자작) 4 file Last H 2009.02.22 2753
273 영상 동영상 재생 스크립트.-Game_Film II-(테스트) 7 할렘 2009.02.22 3741
272 기타 태양 스크립트. 15 file 할렘 2009.02.20 4463
271 메뉴 CogWheelBars 시스템. 13 file 할렘 2009.02.20 4362
270 메뉴 모그메뉴 스킨입니다. 1 file 아부리 2009.02.16 6866
269 기타 Kylock 밤낮 스크립트 부분 한글화 + 달력 모드 (모드는 자작) 31 file RMdude 2009.02.15 4100
268 HUD 변수 표시 HUD 8 Tofuman 2009.02.15 2469
267 메시지 여러항목 선택지 ... Scene처리.. 23 file 허걱 2009.02.14 5277
266 기타 게임시간&밤낮 54 file 허걱 2009.02.14 6111
265 이동 및 탈것 Wachunga님의 XP용 MapLink VX용으로 개조 6 file 허걱 2009.02.13 3039
264 기타 심플 마우스 시스템 1.5 애드온 11 file RMdude 2009.02.11 4325
263 메뉴 (모그메뉴 풀세트팩 SEL Style.) 유니크급 자료 147 file 할렘 2009.02.07 9558
262 기타 데이터베이스 자체 제한 해체 스크립트 [Database Limit Breaker] 13 file 할렘 2009.02.07 3562
261 메뉴 GuiRPG menu시스템 13 file 할렘 2009.02.07 4848
260 전투 방패가없어? 그럼 방어못하게하는 스크립트. 16 file 할렘 2009.02.07 3425
259 전투 Requiem SBABS (Requiem Squad Based Battle System) 14 vk 2009.02.07 7541
258 기타 라이트 이펙트 스크립트 12 file 아방스 2009.02.07 3262
Board Pagination Prev 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 32 Next
/ 32