VX 스크립트

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

 

 

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

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

Comment '7'
  • ?
    SCUD 2009.08.30 00:19

    매직가드? 같은 개념인가요?

  • ?
    Genz 2009.08.30 01:26

    1. 마나쉴드. 상태 메모칸에 <MP흡수 100> 이런식으로 적어놓으면 데미지의 100만 MP로 흡수, 그 이상은 HP로 데미지를 받고 상태 해제. 물론 입는 데미지가 100이하일 경우엔 MP로 모두 흡수.

    좀 괜찮지 않나염

  • profile
    'ㅅ'b 아주 유용하게 잘쓰겟습니당~ㅋ
  • ?
    달표범 2009.08.30 15:58

    워크3/와우의 마나 보호막, 조조전의 용린갑옷이네요.

    이야, 이런것도 구현 가능하군요.

    와우의 신의 권능 : 보호막도 구현되면 좀 짱일듯(스킬에 정의된 수치..예를 들어 3000..만큼의 데미지를 흡수하고 자동으로 해제)

  • ?
    할퓨리어 2009.10.29 17:24
    음...이거 사용이 안 되네요 왜 그러져?ㅠㅠ
  • ?
    뾰롱뾰롱 2011.02.25 12:23

    Genz 님 말대로만은 안되고  케릭이나 아이템 id를 입력해줘야 하는거 같은데 당최어찌해야 될지 감히 안잡히네.


    좀더 자세히 알려주시길

  • profile
    재규어 2011.08.13 21:28

    감사함다!

    HP가 적은 마나형 캐릭에 유용하게 사용할 수 있겠네요 ㅎㅎ


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
337 기타 KGC 스크립트 라이브러리 7 훈덕 2009.05.31 2611
336 메뉴 시스템 옵션 스크립트의 사용방법 6 아방스 2009.06.04 2832
335 기타 (좀 이상한 or 쓸모없을 듯 한)화면상에 몬스터와 만나려면 몇걸음 남았는지 표시하는 스크립트! 2 루시페르 2009.06.06 2318
334 기타 던전에 적정 레벨이 어떤건지 스크린에 표시해주는 스크립트! 5 file 루시페르 2009.06.06 2907
333 기타 문장의 스크롤! 13 루시페르 2009.06.06 2524
332 기타 좀 뭐랄까... 어이없는 "비행선 더 높게 날아오르게 하기!"스크립트.... 8 루시페르 2009.06.06 2426
331 기타 적 선택시 스킬창 비표시 + 타겟 플래쉬 7 훈덕 2009.06.14 2094
330 메뉴 스테이터스 화면 개조 - 커스텀 버전 13 file 훈덕 2009.06.15 4932
329 타이틀/게임오버 맵 타이틀 스크립트 48 아방스 2009.06.17 5547
328 전투 카운트배틀 시스템(스크립트 한글살짝번역) 10 file 카르와푸딩의아틀리에 2009.06.17 5520
327 온라인 VX Phoenix 온라인 스크립트 1.3버전 12 아방스 2009.06.18 3486
326 메뉴 전투승리시 아이템 경험치팝업창 스크립트 18 file 카르와푸딩의아틀리에 2009.06.23 3760
325 전투 Requiem ABS 8 - 액션 배틀 시스템 8 36 아방스 2009.06.24 8540
324 전투 ATB전투방식.(사이드뷰X 백발의카임전투방식O) 14 file 이피쿤 2009.06.24 9035
323 메시지 조합한글 21 file 허걱 2009.06.27 4409
322 기타 그림을 각도로 회전시키기 1 허걱 2009.06.30 2327
321 기타 경험치 백분율 계산 2 허걱 2009.06.30 3093
320 직업 서브클래스 선택 시스템 Subclass Selection System 7 file 카르와푸딩의아틀리에 2009.06.30 3942
319 기타 미니게임테트리스 스크립트 ㅋㅋㅋ 27 file 카르와푸딩의아틀리에 2009.06.30 3689
318 기타 시야범위 스크립트 22 file 카르와푸딩의아틀리에 2009.06.30 4025
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 32 Next
/ 32