제가 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