질문과 답변

Extra Form

제가 KGC 패시브스킬 스크립트 VX버전을 바탕으로 VXACE 패시브 스크립트를 만들어보려고

 

이래저래 주무르고 있었습니다.

 

스킬을 익혔을 때, 스탯 상승이 보였기에 나름 성과가 있다 싶었는 데

 

장비창만 열면 SystemStackError가 뜨지 뭡니까... oTz

 

그래서 이래저래 만져보다가 도저히 모르겠어서 포기해야겠다... 이렇게 맘 먹고 있었는데

 

마침 제가 쓰던게 BlueSky님이 한글화 하셨다던 스크립트 한글화를 적용한 프로젝트였습니다.

 

제가 설마... 하면서 새로 프로젝트를 만들어서 스크립트 한글화를 적용하지 않고

 

새로 만들던 스크립트를 붙여넣어 보았습니다...

 

...

 

장비창이 아무 이상없이 열립니다 ;ㅁ; 스탯 적용도 되고...

 

뭐가 문제인지 알고 싶어서 질문드립니다...

 

 

 

아래는 제가 끄적이던 스크립트 본문입니다.

 

------------------------------------------------------------------------------------------------------------------------------------

# 패시브 스킬을 만들어보자.

module PassiveSkill
  # 패시브 스킬용 파라미터 리스트
  PARAMS = {
    :mhp => "MHP|최대HP",
    :mmp => "MMP|최대MP",
    :atk => "ATK|공격력",
    :def => "DEF|방어력",
    :mat => "MAT|마법력",
    :mdf => "MDF|마법방어",
    :agi => "AGI|민첩성",
    :luk => "LUK|운",
  }
 
  XPARAMS = {
    :hit => "HIT|명중율",
    :eva => "EVA|회피율",
    :cri => "CRI|회심율",
    :cev => "CEV|회심회피",
    :mev => "MEV|마법회피",
    :mrf => "MRF|마법반사",
    :cnt => "CNT|반격율",
    :hrg => "HRG|HP재생",
    :mrg => "MRG|MP재생",
    :trg => "TRG|TP재생",
  }
 
  SPARAMS = {
    :tgr => "TGR|표적율",
    :grd => "GRD|방어효과",
    :rec => "REC|회복효과",
    :pha => "PHA|약의지식",
    :mcr => "MCR|MP소비",
    :tcr => "TCR|TP소비",
    :pdr => "PDR|물리피해",
    :mdr => "MDR|마법피해",
    :fdr => "FDR|마루피해",
    :exr => "EXR|경험획득",
  }

  # 정규 표현
  module Regexp
    # 스킬
    module Skill
      # 패시브 스킬 개시
      BEGIN_PASSIVE = /<(?:PASSIVE|패시브)>/i
      # 패시브 스킬 종료
      END_PASSIVE = /<\/(?:PASSIVE|패시브)>/i

      # 파라미터 수정 exa) MHP +20  등
      PASSIVE_PARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)([%%])?\s*$/
      PASSIVE_XPARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)\s*$/
      PASSIVE_SPARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)\s*$/

    end
  end
end

module IMIR_Commands
  module_function
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 수정치를 재설정
  #--------------------------------------------------------------------------
  def restore_passive_rev
      (1...$data_actors.size).each { |i|
        actor = $game_actors[i]
        actor.restore_passive_rev
      }
  end
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================

class Game_Interpreter
  include IMIR_Commands
end

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 캐쉬를 생성
  #--------------------------------------------------------------------------
  def create_passive_skill_cache
    @_passive = false
    @_passive_params = {}
    @_passive_params_rate = {}
    @_passive_xparams = {}
    @_passive_sparams = {}

    passive_flag = false
    self.note.each_line { |line|
      case line
      when PassiveSkill::Regexp::Skill::BEGIN_PASSIVE
        # 패시브 스킬 정의 개시
        passive_flag = true
        @_passive = true
      when PassiveSkill::Regexp::Skill::END_PASSIVE
        # 패시브 스킬 정의 종료
        passive_flag = false
      when PassiveSkill::Regexp::Skill::PASSIVE_PARAMS
        # param 수정
        if passive_flag
          apply_passive_params($1, $2.to_i, $3 != nil)
        end
      when PassiveSkill::Regexp::Skill::PASSIVE_XPARAMS
        # xparam 수정
        if passive_flag
          apply_passive_xparams($1, $2.to_i)
        end
      when PassiveSkill::Regexp::Skill::PASSIVE_SPARAMS
        # sparam 수정
        if passive_flag
          apply_passive_sparams($1, $2.to_i)
        end
      else
        break
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 param 수정을 적용
  #     param : 대상 파라미터
  #     value : 수정치
  #     rate  : true (이)라면 % 지정
  #--------------------------------------------------------------------------
  def apply_passive_params(param, value, rate)
    PassiveSkill::PARAMS.each { |k, v|
      if param =~ /(?:#{v})/i
        if rate
          @_passive_params_rate[k] = 0 if @_passive_params_rate[k] == nil
          @_passive_params_rate[k] += value
        else
          @_passive_params[k] = 0 if @_passive_params[k] == nil
          @_passive_params[k] += value
        end
        break
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 xparam 수정을 적용
  #     param : 대상 파라미터
  #     value : 수정치
  #     rate  : true (이)라면 % 지정
  #--------------------------------------------------------------------------
  def apply_passive_xparams(param, value)
    PassiveSkill::XPARAMS.each { |k, v|
      if param =~ /(?:#{v})/i
        @_passive_xparams[k] = 0 if @_passive_xparams[k] == nil
        @_passive_xparams[k] += value
        break
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 sparam 수정을 적용
  #     param : 대상 파라미터
  #     value : 수정치
  #     rate  : true (이)라면 % 지정
  #--------------------------------------------------------------------------
  def apply_passive_sparams(param, value)
    PassiveSkill::SPARAMS.each { |k, v|
      if param =~ /(?:#{v})/i
        @_passive_sparams[k] = 0 if @_passive_sparams[k] == nil
        @_passive_sparams[k] += value
        break
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬일까
  #--------------------------------------------------------------------------
  def passive
    create_passive_skill_cache if @_passive == nil
    return @_passive
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 param 수정 (즉치)
  #--------------------------------------------------------------------------
  def passive_params
    create_passive_skill_cache if @_passive_params == nil
    return @_passive_params
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 param 수정 (비율)
  #--------------------------------------------------------------------------
  def passive_params_rate
    create_passive_skill_cache if @_passive_params_rate == nil
    return @_passive_params_rate
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 xparam 수정
  #--------------------------------------------------------------------------
  def passive_xparams
    create_passive_skill_cache if @_passive_xparams == nil
    return @_passive_xparams
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 sparam 수정
  #--------------------------------------------------------------------------
  def passive_sparams
    create_passive_skill_cache if @_passive_sparams == nil
    return @_passive_sparams
  end
end

#==============================================================================
# ■ Game_BattlerBase
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 통상 능력치의 기본치 취득
  #--------------------------------------------------------------------------
  def passive_param_base(param_id)
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 통상 능력치의 취득
  #--------------------------------------------------------------------------
  def param(param_id)
    value = param_base(param_id) + param_plus(param_id)
    value += passive_param_base(param_id)
    value *= param_rate(param_id) * param_buff_rate(param_id)
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  end

end

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler < Game_BattlerBase
 
end

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler

  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias setup_IMIR_PassiveSkill setup
  def setup(actor_id)
    reset_passive_rev
    setup_IMIR_PassiveSkill(actor_id)
    restore_passive_rev
  end
 
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 수정치를 초기화
  #--------------------------------------------------------------------------
  def reset_passive_rev
    @passive_params = {}
    @passive_params_rate = {}
    @passive_xparams = {}
    @passive_sparams = {}
    PassiveSkill::PARAMS.each_key { |k|
      @passive_params[k] = 0
      @passive_params_rate[k] = 100
    }
    PassiveSkill::XPARAMS.each_key { |k| @passive_xparams[k] = 0 }
    PassiveSkill::SPARAMS.each_key { |k| @passive_sparams[k] = 0 }
   
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬의 수정치를 재설정
  #--------------------------------------------------------------------------
  def restore_passive_rev
    reset_passive_rev

    # 수정치를 취득
    skills.each { |skill|
      next unless skill.passive

      skill.passive_params.each { |k, v| @passive_params[k] += v }
      skill.passive_params_rate.each { |k, v| @passive_params_rate[k] += v }
      skill.passive_xparams.each { |k, v| @passive_xparams[k] += v }
      skill.passive_sparams.each { |k, v| @passive_sparams[k] += v }
    }
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬에 의한 param 수정치 (즉치)
  #--------------------------------------------------------------------------
  def passive_params
    restore_passive_rev if @passive_params == nil
    return @passive_params
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬에 의한 param 수정치 (비율)
  #--------------------------------------------------------------------------
  def passive_params_rate
    restore_passive_rev if @passive_params_rate == nil
    return @passive_params_rate
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬에 의한 xparam 수정치 (즉치)
  #--------------------------------------------------------------------------
  def passive_xparams
    restore_passive_rev if @passive_xparams == nil
    return @passive_xparams
  end
  #--------------------------------------------------------------------------
  # ○ 패시브 스킬에 의한 param 수정치 (즉치)
  #--------------------------------------------------------------------------
  def passive_sparams
    restore_passive_rev if @passive_sparams == nil
    return @passive_sparams
  end
  #--------------------------------------------------------------------------
  # ● 패시브 param의 취득
  #--------------------------------------------------------------------------
  def passive_param_base(param_id)
    n = 0 
    case param_id
    when 0; n += passive_params[:mhp]
    when 1; n += passive_params[:mmp]
    when 2; n += passive_params[:atk]
    when 3; n += passive_params[:def]
    when 4; n += passive_params[:mat]
    when 5; n += passive_params[:mdf]
    when 6; n += passive_params[:agi]
    when 7; n += passive_params[:luk]
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 스킬을 기억한다
  #     skill_id : 스킬 ID
  #--------------------------------------------------------------------------
  alias learn_skill_IMIR_PassiveSkill learn_skill
  def learn_skill(skill_id)
    learn_skill_IMIR_PassiveSkill(skill_id)

    restore_passive_rev
  end
  #--------------------------------------------------------------------------
  # ● 스킬을 잊는다
  #     skill_id : 스킬 ID
  #--------------------------------------------------------------------------
  alias forget_skill_IMIR_PassiveSkill forget_skill
  def forget_skill(skill_id)
    forget_skill_IMIR_PassiveSkill(skill_id)

    restore_passive_rev
  end
 
end

------------------------------------------------------------------------------------------------------------------------------

 

도중이라서 중간에 빈 곳도 있고 모듈은 잡아놓고 안만든 곳도 많지만

 

한번 좀 봐주세요 oTz

Who's 아이미르

?

허루쿠... 임용고시 공부해야되는데 이러고 있다....

 

알만툴의 중독성은 쩔어준다는;;;

Comment '4'
  • profile
    JACKY 2012.03.03 13:02
    스택에러는 주로 같은 기능이나 메서드가 중복될때
    일어납니다. 이말인즉슨 뭔가 기능이 겹쳤단거죠.
    특히나 인터넷에 배포되는 스크립트들은
    넣으면 바로바로 작동하도록 기존 기능들을
    편집하는 부분이 있는데, 스크립트를 많이
    추가할수록 이 부분이 많이 겹칩니다.

    가장 시원한 해결책은 스크립트를 고쳐
    중복되는 부분을 줄여주는 것입니다.

    스크립트를 잘 모르신다면 고수분들에게
    부탁드려보세요
  • ?
    Bluesky(新) 2012.03.03 17:32

    제가 원인이군요 ㅠㅠㅠㅠ

    저 같은 경우에는 말씀드렸다 싶이 네이버 번역기로 무작정 번역을 시켰기 때문에 번역 하면서 오류가 발생 할수도 있겠지요.

    예을 들면 필요 부분만 한글로 번역된 스크립트을 무작정 네이버 번역기로 번역 시키면 부분 번역된 부분이 다시 한번 더 번역 되면서 문제가 발생하는 경우. 그때는 원본 스크립트와 비교해서 수정하면 해결이 되던..

    아니면 말고요....

  • ?
    아이미르 2012.03.03 18:27
    아직 확인된 사항은 아닙니다 단지 뭐가 문제인지 궁금해서 물어보는 거죠 BlueSky님의 번역본 덕을 많이 보고 있답니다
  • ?
    Bluesky(新) 2012.03.03 18:41

    누구든 할수 있는 행동을 그냥 심심 + 스크립트 연구 목적으로 네이버 번역기에 ctrl+x ctrl+v 만 했을뿐인데..


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12392
이벤트 작성 RMVXA 파티원들을 특정타일에서 제 캐릭터 좌우로 수평위치시키고 싶어요. 8 윈터. 2020.11.01 225
이벤트 작성 RMVXA 맵을 확대하는 이벤트도 만들 수 있나요? 2 머리큰두두 2022.07.21 127
이벤트 작성 RMVXA 전투 시작시 캐릭터 목소리(혹은 효과음) 나오게 하는 법 1 초보노인 2022.05.30 258
이벤트 작성 RMVXA 원거리 액알 질문이요 1 그냥사람777 2021.01.31 88
이벤트 작성 RMVXA 대사 방향? 이걸 뭐라 해야 하지 암튼 대사 쪽 질문이요 2 둣녀 2021.05.14 87
이벤트 작성 RMVXA 화면 흔들림이 대화도중에 끊기지 않게 나오는법 있나요? 겜만들고싶다앙 2021.04.24 53
이벤트 작성 RMVXA 대화창 이벤트 발생 2 file 스타후르츠 2021.06.10 114
이벤트 작성 RMVXA 이벤트 1 에이에스디에프 2021.08.11 31
이벤트 작성 RMVXA 아이템 선택에따라 다른 이벤트 2 핑크공주곽배철 2021.12.26 155
이벤트 작성 RMVXA 특정 조건 달성시 게임 폴더에 메모장 추가하기 5 무해 2022.01.26 252
이벤트 작성 RMVXA 추격자 잔움직임 제거 1 다크크리에이터 2022.01.27 187
이벤트 작성 RMVXA 텍스트 출력방식 변경하는 방법이 뭔가요? 1 먹사 2022.11.26 66
이벤트 작성 RMVXA vx ace 커스텀 메뉴 노가다법 질문드립니다 2 file lownis 2022.10.23 114
이벤트 작성 RMVXA 이벤트 작동 방식 중 Player Touch를 다루기 조금 어렵습니다. 3 file zx히어로zx 2022.11.09 65
이벤트 작성 RMVXA 스위치가 꺼질 경우 이미지를 끄게 하고 싶습니다. 1 Payroy 2024.01.05 15
이벤트 작성 RMVXA 대화 중 이벤트 멈춤 해결 방안 질문 1 이름뭐하지 2024.05.19 15
이벤트 작성 RMVXA 오브젝트 상호작용에 대한 질문입니다 3 file 헤와 2024.05.02 51
이벤트 작성 RMVXA 스톱워치 하는 법 3 홍홍이1 2023.09.16 34
이벤트 작성 RMVXA 난수 여러개를 한번에 받을때 중간값만 제외하는법 1 file 유리컵 2023.09.21 24
이벤트 작성 RMVXA 플레이어 x,y 좌표 기억법? 2 유리컵 2023.10.07 25
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19