#=========================================================
#
# 대미지MP전환 by dest21c(Evangelista)
#
#=========================================================
# 기능 : 해당 스테이트가 걸려 있을 경우 HP대신 MP에 대미지가 가도록 합니다.
# 상세 및 주의사항
# 1. 어떤 형식의 대미지이건 HP대미지는 MP대미지가 됩니다.
# 2. 현재MP보다 HP대미지가 클 경우 무효가 됩니다. (그대로 HP대미지가 됩니다.)
# 3. 가능한 아래쪽 섹션에 배치해 주십시오. (거의 필수라 해도 됩니다.)
# 4. 스테이트추가후 누적된 대미지가 리미트치를 초과하면 해당 대미지는 리미트치가 될 때까진 MP로 빠지며
# 남는 대미지는 HP대미지로 돌아갑니다. 그리고 스테이트는 해제되게 됩니다.
# 5. MP잔량이 0이 되면 자동으로 스테이트는 해제됩니다.
# 6. MP잔량이 0보다 크지만 HP대미지보다 적은 상태에서 리미트치보다도 적다면 남은 MP만이 빠지며
# 나머지 대미지는 모두 HP대미지가 됩니다.
# 7. MP가 모자라 HP대미지로 돌아온 부분에서 전투불능시 MP가 빠지지 않고 남아있는 것은
# 기본사양상 전투불능처리가 우선하기 때문으로 다른 정의부를 수정하지 않는 한 어쩔 수 없습니다.
module DEST21C
module Damage_to_MP
# 해당 기능을 사용할 스테이트ID
DTM_STATE_ID = 20
# 누적되면 스테이트가 해제되는 대미지량의 한계 (미사용시 0)
Damage_Limit = 500
end
end
class Game_Battler
attr_reader :dtm_limits
alias dest21c_dtm_initialize initialize
def initialize
dest21c_dtm_initialize
@dtm_limits = 0 if dtm_limits == nil
end
alias dest21c_dtm_make_attack_damage_value make_attack_damage_value
def make_attack_damage_value(attacker)
dest21c_dtm_make_attack_damage_value(attacker)
for state in self.states
if state.id == DEST21C::Damage_to_MP::DTM_STATE_ID and @hp_damage > 0
dtm_limits_dummy = @dtm_limits + @hp_damage
unless DEST21C::Damage_to_MP::Damage_Limit == 0
if dtm_limits_dummy < DEST21C::Damage_to_MP::Damage_Limit
if self.mp < @hp_damage
@mp_damage += self.mp
@hp_damage -= self.mp
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
else
@mp_damage += @hp_damage
@hp_damage = 0
@dtm_limits = dtm_limits_dummy
end
else
if self.mp < @hp_damage
@mp_damage += self.mp
@hp_damage -= self.mp
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
else
hp_damage_dummy = @hp_damage
@hp_damage = dtm_limits_dummy - DEST21C::Damage_to_MP::Damage_Limit
@mp_damage += hp_damage_dummy - @hp_damage
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
end # if
end # if
end # unless
end # if
end # for
end # def
alias dest21c_dtm_make_obj_damage_value make_obj_damage_value
def make_obj_damage_value(user, obj)
dest21c_dtm_make_obj_damage_value(user,obj)
for state in self.states
if state.id == DEST21C::Damage_to_MP::DTM_STATE_ID and @hp_damage > 0
dtm_limits_dummy = @dtm_limits + @hp_damage
unless DEST21C::Damage_to_MP::Damage_Limit == 0
if dtm_limits_dummy < DEST21C::Damage_to_MP::Damage_Limit
if self.mp < @hp_damage
@mp_damage += self.mp
@hp_damage -= self.mp
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
else
@mp_damage += @hp_damage
@hp_damage = 0
@dtm_limits = dtm_limits_dummy
end
else
if self.mp < @hp_damage
@mp_damage += self.mp
@hp_damage -= self.mp
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
else
hp_damage_dummy = @hp_damage
@hp_damage = dtm_limits_dummy - DEST21C::Damage_to_MP::Damage_Limit
@mp_damage += hp_damage_dummy - @hp_damage
@dtm_limits = 0
remove_state(DEST21C::Damage_to_MP::DTM_STATE_ID)
end # if
end # if
end # unless
end # if
end # for
end # def
end # class
...참고로 기본스크립에 그대로 삽입한건 실행해서 정상작동 확인했지만...
소재화한 이 스크립트는 써본적 없습니다... 흐흐흐....