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 5408
81 전투 2003식 사이드뷰 적들도 가까이와서 공격함 ㅇㅇ 51 배군 2008.05.02 6750
80 전투 ActBattle 전투 스크립트 13 file 사람이라면? 2010.08.16 5962
79 전투 Actor Battler Graphics 13 아방스 2008.03.07 3065
78 전투 Animated Battlers VX 3.4 by DerVVulfman 5 file Alkaid 2010.09.10 3117
77 전투 Animated Battlers VX 3.5 by DerVVulfman 2 Alkaid 2011.11.02 3101
76 전투 Animated Battlers VX 3.7 by DerVVulfman Alkaid 2012.09.07 2102
75 전투 ATB전투방식.(사이드뷰X 백발의카임전투방식O) 14 file 이피쿤 2009.06.24 9035
74 전투 Crissaegrim ABS 2.0.5 최신 48 file RPGbooster 2008.10.08 8768
73 전투 Etude87_Tankentai_Addon ver.1.0 7 file 습작 2012.06.03 2882
72 전투 Fomars indiviivdual battle 2 Man... 2008.10.28 1340
71 전투 GTBS 1.0 [스크립트] 24 아방스 2009.02.05 6141
70 전투 GTBS 1.5.1.4 - GubiD's Tactical Battle System 10 아방스 2010.12.11 4455
69 전투 GTBS for 2d_iso_x3 by Clarabel 2 습작 2013.05.13 1884
68 전투 GTBS_VX 1.0 택틱컬rpg 14 file RPGbooster 2008.10.08 3352
67 전투 GubiD's Tactical Battle System 1.5.1.4 (RMVX용) 2 Alkaid 2010.09.03 2858
66 전투 KGC]전투형태 오버드라이브(턴알) 13 찌나 2008.03.08 5656
65 전투 ORBS [새로운 전투 방식] 48 file 아방스 2009.03.04 10210
64 전투 ORBS_v1[1].06 전투시스템. 22 file 할렘 2009.02.06 7407
63 전투 PRABS 2.0 액션배틀시스템 58 file RPGbooster 2008.10.08 7575
62 전투 Requiem ABS 8 - 액션 배틀 시스템 8 36 아방스 2009.06.24 8540
Board Pagination Prev 1 2 3 4 5 Next
/ 5