질문과 답변

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 12446
사이트 이용 rpg vx 캐릭터칩 만들기 어케 해요? 2 최고가될거야 2013.11.25 1711
RMVX 캐릭터 키 질문 2 file 뉴리키 2013.11.25 1012
RMVXA 이벤트로 캐릭터를 만들었는데 계속해서 걷는 모션을 넣고싶어요. 2 Virtus 2013.11.25 999
RMVX 불빛이 대화를 하면 꺼져버려요.. (light) 10 onicole 2013.11.25 1078
기타 스크립트 오류 해결좀해주실분 1 sakuragi 2013.11.26 927
RMVX 적 캐릭터가 스킬을 하나밖에 사용 못하네요 1 IU[아이유] 2013.11.26 772
RMVXA RPG VX ACE 를 이용해서 총 게임을 만들고 싶습니다.. 1 Erudito 2013.11.26 1087
RMVX 이 두 개의 스크립트를 합쳤으면 합니다 1 file IU[아이유] 2013.11.26 676
RMVX 캐릭터 주위에 불빛 나는 거 어떻게 하나요? 8 file cityhall 2013.11.26 1289
RMVXA 이벤트가 사라지게 하고싶습니다ㅜㅜ 2 file Virtus 2013.11.26 871
RMVXA 플레이어 뒤에 이벤트가 따라붙게 하고싶어요. 4 Virtus 2013.11.27 1183
RMVXA 폰트가 깨져서 나오네요... %#$@$언어랑 네모언어로... 2 file 요툰헤임 2013.11.27 1857
RMVX 아오오니 AI... 5 하드웰 2013.11.27 1324
RMXP rpgxp 심각한 질문이요.ㅠㅠ 5 file 운운 2013.11.28 990
RMVXA 타이머 시간 늘리고픈데.. 1 카시어스 2013.11.29 901
RMVXA 이런 스크립트가 있나요? 2 hckjj 2013.11.29 861
RM2k rm 2000 해상도에 관한 질문입니다. EB 2013.11.29 948
RMVX Rpg Vx 통행설정에 대해서ㅜㅜ 1 광글이 2013.11.29 956
기타 캐릭터 생성기 불러오기 문제 2 아마추어게임즈 2013.11.29 1298
RMVX RPGVX 테스트플레이 로딩시간 1 아마추어게임즈 2013.11.29 994
Board Pagination Prev 1 ... 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 ... 516 Next
/ 516