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
61 전투 사이드 뷰 시스템 [시트르산님 제공] 56 아방스 2010.11.29 7499
60 전투 RPG tankentai에서의 치명적 문제점을 보완한 스크립트 2 file 톰소여동생 2010.11.03 3117
59 전투 포켓몬 스크립트 한글화 완료 26 file 서울냥이 2010.10.11 6030
58 전투 sbs battler configuration 한글 번역 13 file 시트르산 2010.09.23 4475
57 전투 Animated Battlers VX 3.4 by DerVVulfman 5 file Alkaid 2010.09.10 3117
56 전투 RPG Tankentai SBS 3.4d + ATB 1.2c Kaduki 18 시트르산 2010.09.10 6449
55 전투 GubiD's Tactical Battle System 1.5.1.4 (RMVX용) 2 Alkaid 2010.09.03 2858
54 전투 VX SRPG 한글번역 (최종수정) 26 file 에틴 2010.08.25 7418
53 전투 사이드뷰 애드온 7 비극ㆍ 2010.08.21 6758
52 전투 ActBattle 전투 스크립트 13 file 사람이라면? 2010.08.16 5962
51 전투 전투후렙업시나오는상세창 11 작은샛별 2010.03.07 3128
50 전투 파이널 판타지 XIII 배틀 시스템 [출처:RRR포럼] 56 file WolV 2010.02.03 6795
49 전투 Spin Battle System [완성버젼] 38 file 할렘 2009.11.14 6835
48 전투 vampyr SBABS-Requiem ABS 9(액알) 101 file 담먹캐 2009.11.01 12000
47 전투 불사신(무적) 스크립트 9 file 미얼 2009.10.29 3198
46 전투 사이드뷰배틀에서 시각적으로 위치 지정하기 9 file 078656577er 2009.10.14 4910
45 전투 사이드뷰배틀에서 찌르기 공격 가능하게 7 078656577er 2009.09.16 3223
» 전투 반사 스테이트 -KGC 4 카르와푸딩의아틀리에 2009.09.12 2661
43 전투 대미지%MP흡수 스크립트 4 Evangelista 2009.08.31 2279
42 전투 대미지 MP전환 스테이트 : 수정 => 마나쉴드 7 Evangelista 2009.08.29 2384
Board Pagination Prev 1 2 3 4 5 Next
/ 5