VX 스크립트

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 반사 스테이트 - KGC_Reflection ◆ VX ◆
#_/    ◇ Last update : 2009/09/04 ◇
#_/----------------------------------------------------------------------------
#_/  상대의 공격을 뒤집는 스테이트를 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 커스터마이즈 항목 - Customize BEGIN ★
#==============================================================================

module KGC
module Reflection
  # ◆ 물리 반사 메세지
  PHYSIC_MSG      = "공격을 뒤집었다!"
  # ◆ 물리 반사 애니메이션 ID
  PHYSIC_ANIME_ID = 91

  # ◆ 마법 반사 메세지
  MAGIC_MSG      = "빛의 벽이 마법을 뒤집었다!"
  # ◆ 마법 반사 애니메이션 ID
  MAGIC_ANIME_ID = 91
end
end

#==============================================================================
# ☆ 커스터마이즈 항목 종료 - Customize END ☆
#==============================================================================

$imported = {} if $imported == nil
$imported["Reflection"] = true

module KGC
module Reflection
  module Regexp
    module UsableItem
      # 반사 관통
      PENETRATE_REFLECT = /<(?:PENETRATE_REFLECT|반사 관통)>/i
    end
    module State
      # 물리 반사
      REFLECT_PHYSIC = /<(?:REFLECT_PHYSIC|물리 반사)>/i
      # 마법 반사
      REFLECT_MAGIC = /<(?:REFLECT_MAGIC|마법 반사)>/i
      # 반사 속성
      REFLECT_ELEMENT = /<(?:REFLECT_ELEMENT|반사 속성)s*
        (d+(?:s*,s*d+)*)?>/ix
    end
  end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Vocab
#==============================================================================

module Vocab
  # 물리 반사
  ReflectPhysic = KGC::Reflection::PHYSIC_MSG
  # 마법 반사
  ReflectMagic  = KGC::Reflection::MAGIC_MSG
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================

class RPG::UsableItem < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ 반사 스테이트의 캐쉬를 생성
  #--------------------------------------------------------------------------
  def create_reflection_cache
    @__penetrate_reflect = false

    self.note.each_line { |line|
      case line
      when KGC::Reflection::Regexp::UsableItem::PENETRATE_REFLECT
        @__penetrate_reflect = true
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 반사 관통 가부
  #--------------------------------------------------------------------------
  def can_penetrate_reflect
    create_reflection_cache if @__penetrate_reflect == nil
    return @__penetrate_reflect
  end
  alias can_penetrate_reflect? can_penetrate_reflect
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::State
#==============================================================================

class RPG::State
  #--------------------------------------------------------------------------
  # ○ 반사 스테이트의 캐쉬를 생성
  #--------------------------------------------------------------------------
  def create_reflection_cache
    @__reflect_physic   = false
    @__reflect_magic    = false
    @__reflect_elements = []

    self.note.each_line { |line|
      case line
      when KGC::Reflection::Regexp::State::REFLECT_PHYSIC
        @__reflect_physic = true
      when KGC::Reflection::Regexp::State::REFLECT_MAGIC
        @__reflect_magic = true
      when KGC::Reflection::Regexp::State::REFLECT_ELEMENT
        $1.scan(/d+/).each { |num| @__reflect_elements << num.to_i }
        @__reflect_elements.uniq!
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 반사 스테이트인가
  #--------------------------------------------------------------------------
  def is_reflect?
    return (physic_can_reflect? || magic_can_reflect?)
  end
  #--------------------------------------------------------------------------
  # ○ 물리 반사 가부
  #--------------------------------------------------------------------------
  def physic_can_reflect
    create_reflection_cache if @__reflect_physic == nil
    return @__reflect_physic
  end
  alias physic_can_reflect? physic_can_reflect
  #--------------------------------------------------------------------------
  # ○ 마법 반사 가부
  #--------------------------------------------------------------------------
  def magic_can_reflect
    create_reflection_cache if @__reflect_magic == nil
    return @__reflect_magic
  end
  alias magic_can_reflect? magic_can_reflect
  #--------------------------------------------------------------------------
  # ○ 반사 가능 속성
  #--------------------------------------------------------------------------
  def reflectable_elements
    create_reflection_cache if @__reflect_elements == nil
    return @__reflect_elements
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

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

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 공개 인스턴스 변수
  #--------------------------------------------------------------------------
  attr_accessor :unreflectable            # 반사 불가 플래그
  attr_accessor :reflected                # 반사가 끝난 플래그
  #--------------------------------------------------------------------------
  # ● 행동 효과의 보관 유지용 변수를 클리어
  #--------------------------------------------------------------------------
  alias clear_action_results_KGC_Reflection clear_action_results
  def clear_action_results
    clear_action_results_KGC_Reflection

    @reflected = false
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격의 효과 적용
  #     attacker : 공격자
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_Reflection attack_effect
  def attack_effect(attacker)
    reflection_effect(attacker)
    return if @skipped

    attack_effect_KGC_Reflection(attacker)
  end
  #--------------------------------------------------------------------------
  # ● 스킬의 효과 적용
  #     user  : 스킬의 사용자
  #     skill : 스킬
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_Reflection skill_effect
  def skill_effect(user, skill)
    reflection_effect(user, skill)
    return if @skipped

    skill_effect_KGC_Reflection(user, skill)
  end
  #--------------------------------------------------------------------------
  # ○ 반사 효과의 적용
  #     user  : 행동자
  #     skill : 스킬 (nil (이)라면 통상 공격)
  #--------------------------------------------------------------------------
  def reflection_effect(user, skill = nil)
    @reflected = false
    return unless can_reflect?(user, skill)

    clear_action_results
    @skipped   = true
    @reflected = true
    user.unreflectable = true
    if skill == nil
      user.attack_effect(user)
    else
      user.skill_effect(user, skill)
    end
    user.unreflectable = false
  end
  #--------------------------------------------------------------------------
  # ○ 반사 가부 판정
  #     user  : 스킬의 사용자
  #     skill : 스킬 (nil (이)라면 통상 공격)
  #--------------------------------------------------------------------------
  def can_reflect?(user, skill = nil)
    return false if unreflectable                # 반사 불가
    return false if actor? && user.actor?        # 아군이라면 반사하지 않는다
    if skill != nil && skill.can_penetrate_reflect?
      return false                               # 관통이라면 반사하지 않는다
    end

    if skill.is_a?(RPG::Skill)
      element_set = ($imported["SetAttackElement"] ?
        get_inherited_element_set(user, skill) : skill.elment_set)
    else
      element_set = user.element_set
    end

    physic = (skill == nil ? true : skill.physical_attack)
    states.each { |state|
      r_elements = state.reflectable_elements
      unless r_elements.empty?
        # 반사 불가능한 속성이 있으면 안 됨
        return false if (r_elements & element_set).size != element_set.size
      end

      return true if state.physic_can_reflect? &&  physic
      return true if state.magic_can_reflect?  && !physic
    }
    return false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 애니메이션의 표시
  #     targets      : 대상자의 배열
  #     animation_id : 애니메이션 ID (-1: 통상 공격과 같다)
  #--------------------------------------------------------------------------
  alias display_animation_KGC_Reflection display_animation
  def display_animation(targets, animation_id)
    display_animation_KGC_Reflection(
      remove_reflected_targets(targets), animation_id)
  end
  #--------------------------------------------------------------------------
  # ● 공격 애니메이션의 표시
  #     targets : 대상자의 배열
  #    적캐릭터의 경우는 [적의 통상 공격] 효과음을 연주해 일순간 기다린다.
  #    액터의 경우는 쌍수검을 고려 (왼손 무기는 반전해 표시) .
  #--------------------------------------------------------------------------
  alias display_attack_animation_KGC_Reflection display_attack_animation
  def display_attack_animation(targets)
    display_attack_animation_KGC_Reflection(remove_reflected_targets(targets))
  end
  #--------------------------------------------------------------------------
  # ○ 반사 가능한 대상자를 제거
  #     targets : 대상자의 배열
  #--------------------------------------------------------------------------
  def remove_reflected_targets(targets)
    action = @active_battler.action
    if !@reflected && (action.attack? || action.skill?)
      obj = (action.skill? ? action.skill : nil)
      targets = targets.clone
      targets.delete_if { |target| target.can_reflect?(@active_battler, obj) }
    end
    return targets
  end
  #--------------------------------------------------------------------------
  # ● 행동 결과의 표시
  #     target : 대상자
  #     obj    : 스킬 또는 아이템
  #--------------------------------------------------------------------------
  alias display_action_effects_KGC_Reflection display_action_effects
  def display_action_effects(target, obj = nil)
    if target.reflected
      @reflected = true
      display_reflect(target, obj)
      display_action_effects(@active_battler, obj)
      @reflected = false
      return
    end

    display_action_effects_KGC_Reflection(target, obj)
  end
  #--------------------------------------------------------------------------
  # ○ 반사시의 메세지를 표시
  #     target : 대상자
  #     obj    : 스킬 또는 아이템
  #--------------------------------------------------------------------------
  def display_reflect(target, obj)
    physic = (obj == nil ? true : obj.physical_attack)
    text   = (physic ? Vocab::ReflectPhysic : Vocab::ReflectMagic)
    @message_window.add_instant_text(text)

    display_normal_animation([target], physic ?
      KGC::Reflection::PHYSIC_ANIME_ID : KGC::Reflection::MAGIC_ANIME_ID)
    wait_for_animation
    if obj == nil
      display_attack_animation([@active_battler])
    else
      display_animation([@active_battler], obj.animation_id)
    end

    @message_window.back_one
  end
end

 

 

 

***사용법***

물리반사 스테이트작성.

스테이트의 메모란에 <물리 반사> (을)를 추가합니다.
이 기술을 추가한 스테이트가 부여되고 있는 동안은, 물리 공격을 반사

마법반사 스테이트작성.

스테이트의 메모란에 <마법 반사> (을)를 추가합니다.
이 기술을 추가한 스테이트가 부여되고 있는 동안은, 마법 공격을 반사

 

속성반사

스테이트의 메모란에 <반사 속성 n1, n2, ...> (을)를 추가합니다.
n1, n2, ...에는, 반사하는 속성을 , 단락으로 입력합니다.

<반사 속성 9>       # 불길만 반사
<반사 속성 15, 16>  # 신성, 암흑을 반사

공격이 가지는 속성이 반사 속성에모두포함되어 있는 경우만, 그 공격이 반사 대상이 됩니다.
(불길만을 반사 속성으로 해도, 불길+풍 등은 반사 불가)

반사 속성은, 물리 반사나 마법 반사와 함께 사용해 주세요.
단체에서는 기능하지 않습니다.

 

반사관통

스킬의 메모란에 <반사 관통> (을)를 추가하면, 그 스킬은 반사되지 않게 됩니다

Who's 카르와푸딩의아틀리에

profile

엘카르디아 제작자 (현재 MV로 리메이크중)

유튜브

https://www.youtube.com/channel/UCMwirNTR-pOEzJNB0jL3y_g

트위터

https://twitter.com/karsis98

블로그

https://blog.naver.com/karsis98

Comment '4'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
417 전투 불사신(무적) 스크립트 9 file 미얼 2009.10.29 3198
416 이동 및 탈것 부드럽게 이동, 8 방향이동 스크립트 25 file 사람이라면? 2010.08.16 3795
415 상점 보관함 스크립트 43 file 허걱 2009.02.02 5161
414 HUD 변수 표시 HUD 8 Tofuman 2009.02.15 2469
413 베틀 스크린 톤 체인지?? 무슨 말? 4 Man... 2008.10.28 1616
412 기타 범용 게이지 묘화 - KGC 14 file 카르와푸딩의아틀리에 2009.08.19 3476
411 배틀할때 몬스터의 HP표시 !! 5 file 미카엘 2008.08.17 7517
410 기타 배틀신에서 곡 넘기기 2 rukan 2009.07.02 1757
409 전투 방패가없어? 그럼 방어못하게하는 스크립트. 16 file 할렘 2009.02.07 3425
408 전투 방어를 했을경우 hp / mp 회복 되도록 하는 스크립트 15 아방스 2008.01.22 3746
407 장비 방어구 착용시 최대HP, MP증가 스크립트(턴알) 3 file 기관차 2014.11.06 1222
406 기타 밤낮의 변화에 따른 전투배경의 변화 스크립트 10 file 카르와푸딩의아틀리에 2009.07.01 2948
405 그래픽 밤낮 변환 스크립트 18 kram3 2008.01.31 3762
404 그래픽 밤낮 변환 VX용 26 독도2005 2008.03.23 4314
403 스킬 발상의전환 : 스킬과 아이템의 공격횟수를 동시에 증가시키기 14 star211 2010.02.16 3179
» 전투 반사 스테이트 -KGC 4 카르와푸딩의아틀리에 2009.09.12 2661
401 스킬 미완성 구버전. 2칸 위에 있는 글을 이용해주세요. 7 Last H 2009.02.23 1925
400 미니맵 미니맵 스크립트(아랫거랑 다른거) 75 file 츠키아 2008.08.08 6145
399 미니맵 미니맵 띠우는 스크립트 ^^ 37 file 아방스 2008.06.02 7247
398 기타 미니게임테트리스 스크립트 ㅋㅋㅋ 27 file 카르와푸딩의아틀리에 2009.06.30 3689
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 32 Next
/ 32