전투

대미지 MP전환 스테이트 : 수정 => 마나쉴드

by Evangelista posted Aug 29, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

#=========================================================
#
# 대미지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

 

 

...참고로 기본스크립에 그대로 삽입한건 실행해서 정상작동 확인했지만...

소재화한 이 스크립트는 써본적 없습니다... 흐흐흐....