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
257 몬스터 도감 [수정] 68 file RPGbooster 2008.10.08 6074
256 기타 몬스터 리얼한 효과 27 file 사람이라면? 2010.08.16 5074
255 메뉴 몬스터도감 Tankentai사이드뷰에 작동하도록 수정 13 카르와푸딩의아틀리에 2009.05.22 3775
254 메뉴 몬스터도감 심플버전! 52 file 카르와푸딩의아틀리에 2009.06.30 6907
253 메뉴 몬스터도감(유즈미짱님의엘카르디아같은종류) 1 작은샛별 2010.03.07 4201
252 스킬 무기 업그레이드 시스템 27 file 담먹캐 2009.11.01 5757
251 스킬 무기성장 랭크 시스템. 20 file 카르와푸딩의아틀리에 2009.07.08 4820
250 무기에 초필살기를 장착! 19 file RPGbooster 2008.10.08 4131
249 무슨 스크립트인지 모름 7 Man... 2008.10.26 1453
248 오디오 무작위 전투음악 12 file RPGbooster 2008.10.08 2335
247 메시지 문자픽쳐 표시 스크립트 7 file 좀비사냥꾼 2009.03.19 4144
246 메시지 문장 넘길대 소리나게 하는스크립트 19 아방스 2008.01.24 4180
245 메시지 문장 및 페이스 정렬 바꾸기 (Neonblack's Text Alignment and Face Flip script) MinaAubert 2012.09.19 2214
244 메시지 문장에서1글자마다소리내기 19 작은샛별 2010.03.07 3951
243 기타 문장의 스크롤! 13 루시페르 2009.06.06 2524
242 물반사 효과 32 file RPGbooster 2008.10.08 3722
241 기타 미니게임 로또??일까? 14 file 카르와푸딩의아틀리에 2009.06.30 2577
240 기타 미니게임테트리스 스크립트 ㅋㅋㅋ 27 file 카르와푸딩의아틀리에 2009.06.30 3689
239 미니맵 미니맵 띠우는 스크립트 ^^ 37 file 아방스 2008.06.02 7247
238 미니맵 미니맵 스크립트(아랫거랑 다른거) 75 file 츠키아 2008.08.08 6145
Board Pagination Prev 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 32 Next
/ 32