질문과 답변

Extra Form

Ace 스크립트 질문입니다.


아방스에서 찾을 수 있는 전체키 입력 확장, 조합 한글, 이름 입력의 처리, 한국어 조사 처리 스크립트 를 쓰고 있습니다.


외부에서 스크립트를 하나 찾아서 쓰려고 하는데, 이 스크립트가 게임 내부에서 액터의 이름과 칭호를 바꿔주는 스크립트입니다.


문제는, 액터의 이름을 바꿀시에는 아방스의 위 스크립트들이 제대로 작동하는데 비해, 액터의 칭호를 바꿀시에는 작동하지 않는다는 것입니다. 아방스 스크립트들 자체에 문제가 있는 것은 아닌것같고, 서로간의 상호작용 과정에서 누락된 부분이 있어서 문제가 일어나는 것 같은데..


이곳저곳 고쳐보긴 했는데, 오류만 일어나고 제대로 실행이 안됩니다. 사실 제가 루비언어나 스크립트쪽은 문외한이라, 사용하는것은 무리가 없습니다만 수정하는것은 조금 무리가 있네요. 전문가분들 답변 부탁드립니다..


그럼, 잘부탁드립니다..

P. S. 위에 정말 보기 쉽게 고지가 되어있는데 왜 보지 못했는지.. 붙여놓았던 전문을 텍스트 파일로 만들어서 첨부합니다. 수정 전의 글을 보신 분들께 불편을 끼쳐드렸다면 정말 죄송합니다. 지적해주신 렌님 정말 감사드립니다.

Comment '10'
  • profile
    2013.11.16 18:43
    답변은 아니지만

    5. 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.

    답변자를 포함한 독자들에게 상당한 불편이 됩니다.
  • ?
    Ain 2013.11.16 18:52

    지적 정말 감사드립니다, 렌님. 위에 정말 보기 쉽게 고지가 되어있었는데 왜 못봤는지 모르겠네요..

    렌님을 비롯하여 수정 전의 글을 보신 모든분들, 불편을 끼쳐드렸다면 정말 죄송합니다. 수정 완료하였습니다.

  • profile
    습작 2013.11.16 22:12
    Rename Actor 스크립트에서 

    class Window_TitleEdit < Window_NameEdit
      
      #--------------------------------------------------------------------------
      # initialize
      #--------------------------------------------------------------------------
      def initialize(actor, max_char)
        super(actor, max_char)
        @default_name = @name = actor.nickname[0, @max_char]
        @index = @name.size
        refresh
      end
      
      #--------------------------------------------------------------------------
      # refresh
      #--------------------------------------------------------------------------
      def refresh
        contents.clear
        draw_actor_face(@actor, 0, 0)
        draw_actor_name(@actor, left, item_rect(0).y - line_height)
        @max_char.times {|i| draw_underline(i) }
        @name.size.times {|i| draw_char(i) }
        cursor_rect.set(item_rect(@index))
      end
      
    end # Window_TitleEdit

    위 내용을 삭제하시고 아래 스크립트를 추가하세요.

    #==============================================================================
    #==============================================================================
    class Window_TitleEdit < Window_Base
      #--------------------------------------------------------------------------
      def initialize(actor, max_char)
        @actor = actor
        @max_char = max_char
        @draw_face = NameInputConfig::DRAW_FACE
        width = NameInputConfig::WIDTH + (@draw_face ? 96 : 0)
        height = NameInputConfig::HEIGHT
        x = Graphics.width/2 - width/2
        y = Graphics.height/2 - height/2
        super(x, y, width, height)
        @handler = {}
        @name = Korean.new
        @name.set_text(@actor.nickname)
        refresh
      end
      #--------------------------------------------------------------------------
      def name
        @name.text
      end
      #--------------------------------------------------------------------------
      def set_handler(symbol, method)
        @handler[symbol] = method
      end
      #--------------------------------------------------------------------------
      def update
        super
        update_toggle_korean
        update_input
      end
      #--------------------------------------------------------------------------
      def update_toggle_korean
        key = NameInputConfig::KOREAN_TOGGLE_KEY
        @name.toggle_korean if Input.trigger?(key)
      end
      #--------------------------------------------------------------------------
      def update_input
        if Input.trigger?(Keys::Enter)
          @handler[:ok].call
        elsif Input.trigger?(Keys::Esc)
          @handler[:cancel].call
        elsif Input.repeat?(Keys::Back) && name.size == 0
          Sound.play_buzzer
        else
          update_name
        end
      end
      #--------------------------------------------------------------------------
      def update_name
        last_name = name.dup
        @name.add(Input.get_key) if Input.any_key?
        if last_name != name
          if name.size > @max_char
            @name.delete_other
            @name.add_text("", false)
            Sound.play_buzzer
          end
          refresh
        end
      end
      #--------------------------------------------------------------------------
      def refresh
        contents.clear
        refresh_face
        refresh_title
        refresh_text
      end
      #--------------------------------------------------------------------------
      def refresh_face
        return unless @draw_face
        draw_face(@actor.face_name, @actor.face_index, 0, 0)
      end
      #--------------------------------------------------------------------------
      def refresh_title
        text = NameInputConfig::TITLE
        contents.font.color = system_color
        size = contents.text_size(text)
        x = @draw_face ? 48 : 0
        x += contents.width/2 - size.width/2
        draw_text(x, 20, width, calc_line_height(text), text)
      end
      #--------------------------------------------------------------------------
      def refresh_text
        contents.font.color = normal_color
        text = name.dup.scan(/./)
        space = NameInputConfig::SPACE
        x = @draw_face ? 48 : 0
        x += (contents.width - (space*@max_char))/2
        y = 60
        h = calc_line_height(name)
        @max_char.times {|i|
        if i < text.size
          draw_text(x, y, space, h, text[i])
        else
          draw_text(x, y, space, h, '_')
        end
        x += space
        }
      end
    end
    #==============================================================================
    #==============================================================================
    class Scene_Retitle < Scene_MenuBase
      #--------------------------------------------------------------------------
      def prepare(actor_id, max_char)
        @actor_id = actor_id
        @max_char = max_char
      end
      #--------------------------------------------------------------------------
      def start
        super
        @actor = $game_actors[@actor_id]
        @edit_window = Window_Name.new(@actor, @max_char)
        @edit_window.set_handler(:ok, method(:on_ok))
        @edit_window.set_handler(:cancel, method(:on_cancel))
      end
      #--------------------------------------------------------------------------
      def on_ok
        if @actor.nickname != @edit_window.name
          @actor.nickname = @edit_window.name
          Sound.play_ok
        else
          Sound.play_cancel
        end
        return_scene
      end
      #--------------------------------------------------------------------------
      def on_cancel
        Sound.play_cancel
        return_scene
      end
    end
  • ?
    Ain 2013.11.17 23:43
    def initialize(actor, max_char)
        @actor = actor
        @max_char = max_char
        @draw_face = NameInputConfig::DRAW_FACE
        width = NameInputConfig::WIDTH + (@draw_face ? 96 : 0)
        height = NameInputConfig::HEIGHT
        x = Graphics.width/2 - width/2
        y = Graphics.height/2 - height/2
        super(x, y, width, height)
        @handler = {}
        @name = Korean.new
        @name.set_text(@actor.nickname)
        refresh
      end

    이부분에서, NameInputConfig::WIDTH 가 initialize 되지 않았다고 오류가 뜹니다 @습작님 ㅠㅠ
  • profile
    습작 2013.11.18 03:06
    허걱님의 이름잊력 스크립트들 보다 아래쪽에 추가했는지 확인하세요
  • ?
    Ain 2013.11.18 03:18
    네 아래쪽 맞는데.. 뭐가 문제일까요 ㅠㅠ
  • profile
    습작 2013.11.18 09:10
    작업했던 파일을 올립니다.
    http://www.mediafire.com/download/ztzfe0m9cj64zzu/Ace_QA_Project.zip
  • ?
    허걱 2013.11.19 00:28
    아래쪽이 맞는데도 오류가 생긴다면 다른 스크립트와의 충돌은 아닌지 확인해 보시기 바랍니다.

    또는 Rename Actor 에서 Scene_Retitle 클래스, Window_TitleEdit 클래스를 삭제한 후,
    다음 스크립트를 사용해 보시기 바랍니다. (습작님의 스크립트와 동일한 스크립트입니다만;;)
    ※ 추가로, Rename Actor 에 있는 RETITLE_MAX_CHARACTER 설정으로 닉네임의 최대값을 줄이거나 NameInputConfig (NameInput Ex 설정부분)에 있는 WIDTH 값을 바꿔서 사용해야 할듯 하네요.



    #칭호 변경 입력 호환 스크립트
    #Yanfly Engine Ace, Rename Actor, Input Ex, The Korean, NameInput Ex 필요
    #위의 필요 스크립트들 보다 아래쪽에 위치시켜 주세요.

    class Window_NickName < Window_Name
    def initialize(actor, max_char)
    super(actor, max_char)
    @name.set_text(@actor.nickname)
    refresh
    end
    end


    class Scene_Retitle < Scene_Name
    def start
    super
    @actor = $game_actors[@actor_id]
    @edit_window = Window_NickName.new(@actor, @max_char)
    @edit_window.set_handler(:ok, method(:on_ok))
    @edit_window.set_handler(:cancel, method(:on_cancel))
    end
    def on_ok
    if @actor.nickname != @edit_window.name
    @actor.nickname = @edit_window.name
    Sound.play_ok
    else
    Sound.play_cancel
    end
    return_scene
    end
    end





    #presented by 허걱
  • ?
    Ain 2013.11.19 00:45
    습작님이 보내주신 스크립트들을 약간의 수정을(?) 걸쳐서 오늘 막 문제가 해결되었습니다.

    정말 죄송합니다, 괜히 제가 소중한 시간을 잡아먹은것같네요.. 해결되자마자 이 게시글에 덧글부터 달았어야 했나봅니다.

    하지만 언제나 감사하게 생각하고 있습니다, 허걱님! 앞으론 이런 낭비적인 일이 없도록 더 신경쓰겠습니다 ㅠㅠ
  • ?
    허걱 2013.11.19 20:06

    시간은 그렇게 안걸렸으니 그리 심하게 반응 안하셔도 될것 같은데..ㅋ
    해결되었다니 다행이네요.. 재밌는 게임 만드세요^^


    추가로... 본문의 글은 취소선 처리 안하는게 좋을듯 합니다.

    여긴 1:1 Q&A 게시판이 아니라 묻고답하기 게시판으로 여러사람에게 공개되어 있습니다.

    혹시 똑같은 문제로 고민하는 사람이 있을수도 있으니 그냥 두는게 좋겠네요.


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 13184
RMVX 마녀의 집 오프닝 효과 및 이벤트 질문 4 Kito 2013.11.21 1072
RMVXA 정수형으로 만드는함수가 뭔가요? 2 wkdrn33 2013.11.21 764
RMVX 스테이지 씬 만들려고하는대 도와주세요 3 file 초보입니다헤헤헤 2013.11.21 851
RMVX 사용자가 커맨드입력하지않아도 자동으로 움직이게할수있나요? 4 세비 2013.11.21 761
기타 1024x768 질문 6 츠키코로 2013.11.20 991
RMVXA 변수 처리 말인데요 2 연무 2013.11.20 726
RMVXA VXA 해상도 관련 스크립트인거 같은데.. 사용하는 방법좀 알려주세요..! 7 file 수수미 2013.11.20 1270
RMVX 그림표시 최대 크기 1 뻘짓킹파야 2013.11.19 1569
RMVXA 스킬 사용시 커먼이벤트 우선순위 질문 구리더 2013.11.19 795
RMVXA rpg vx ace 게임테스트 가실행이안되네요. 4 굵은혀 2013.11.19 954
기타 게임 개발부터 정식 오픈까지.. Gic2000 2013.11.18 828
RMVXA 몬스터에따라 BGM을 달리 하는법 1 잉여한마리9226 2013.11.18 787
RM2k 한글화한 게임을 디스크화 할 때 2 file 고봉도봉 2013.11.17 946
RMVXA 방금 전까지 멀쩡하던 VX Ace 툴이... 1 file 엿데브 2013.11.17 830
RMVXA 공격대상이 될 확률에 대한 질문 1 마스터G 2013.11.17 888
RMVXA ace에서 속성은 집적 제작하지 못하나요? 2 ada 2013.11.16 758
RMVXA 액터 이름과 칭호 바꾸기 <문제 해결되었습니다.> 10 file Ain 2013.11.16 762
RMVX 그 공포 게임에 후레쉬 기능 3 뻘짓킹파야 2013.11.16 976
RMVXA 일정시간간격으로 액션(행동)을하는 스크립트 만들기.. 2 wkdrn33 2013.11.15 980
RMVXA 무기에 상태이상을 추가시키려하는데 4 file 데릴론 2013.11.15 697
Board Pagination Prev 1 ... 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 ... 517 Next
/ 517