질문과 답변

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 12395
RMVXA 저기 만들다가.... 2 Noren 2013.08.31 762
RMXP 전투 도중에 몇턴지나면 캐릭터가 아무것도 안해요. 3 닉넴크 2012.12.22 762
RMXP 픽쳐 1번의 z좌표가 몇인지 알고싶어요 2 /여우비/ 2013.07.01 762
RMVX 오토타일 1 파이군 2011.01.10 762
RMXP 스크립트 작성 도와주세요 2 SPMgames 2014.01.30 761
RMVXA (해결)플레이어에 방해받지 않고 npc를 이동시키는 방법? 7 sudoxe 2014.01.25 761
RMVXA 메뉴의 '아이템'을 바꿀수 있는 방법이 있나요 4 전파개구리 2014.01.10 761
RMVX 스크립트를 끼워넣었는데 작동을 안합니다 18 file KeV 2012.12.31 761
RMVXA 액터 이름과 칭호 바꾸기 <문제 해결되었습니다.> 10 file Ain 2013.11.16 761
RMVXA Animated Battle 스크립트 적용방법 현사이 2012.10.20 761
RMVXA 상태이상일 때 다른상태이상 걸리기 6 Antimatter 2013.04.13 761
RMVXA 샘플맵 불러오기가 안됩니다.. 1 고향알밤 2013.04.01 761
RMVX 시야 스크립트의 문제ㅠㅠ 4 지혈이 2013.07.16 761
RMVX 메세지(대화창)의 명령어를 가르쳐주세요. 3 넷카마 2011.02.17 761
RMVX 타이틀음악 1 프라임헌터즈 2010.09.24 761
RMVXA 폰트 변경이 안됩니다. 2 참깨빵위에순쇠고기패티두장특별한소스양상추치즈피클양파까지 2014.10.09 760
RMVXA vx ace 게임이 실행이 안됩니다..ㅠ file hoguhogu 2014.03.26 760
RMXP 턴알피지에서 맨손으로 때릴 때 타격음 집어넣는 방법. 2 아미상 2012.12.20 760
RMVX 사용자가 커맨드입력하지않아도 자동으로 움직이게할수있나요? 4 세비 2013.11.21 760
RMVX KGC 패시브 스킬 스크립트 딩소앙 2011.01.20 760
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