赞 | 5 |
VIP | 1 |
好人卡 | 2 |
积分 | 4 |
经验 | 20430 |
最后登录 | 2018-5-11 |
在线时间 | 238 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 381
- 在线时间
- 238 小时
- 注册时间
- 2013-8-20
- 帖子
- 496
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 反射ステート - KGC_Reflection ◆ VX ◆
#_/ ◇ Last update : 2009/09/26 ◇
#_/----------------------------------------------------------------------------
#_/ 相手の攻撃を跳ね返すステートを作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 - Customize BEGIN ★
#==============================================================================
module KGC
module Reflection
# ◆ 物理反射メッセージ
PHYSIC_MSG = "攻撃を跳ね返した!"
# ◆ 物理反射アニメーション ID
PHYSIC_ANIME_ID = 91
# ◆ 魔法反射メッセージ
MAGIC_MSG = "光の壁が魔法を跳ね返した!"
# ◆ 魔法反射アニメーション ID
MAGIC_ANIME_ID = 91
# ◆ 反射タイプ別メッセージ
# "タイプ" => "メッセージ",
TYPE_MSG = {
"息" => "追い風が攻撃を跳ね返した!",
} # ← { は消さないこと!
# ◆ 反射タイプ別アニメーション ID
# "タイプ" => ID,
TYPE_ANIME_ID = {
"息" => 92,
} # ← { は消さないこと!
end
end
#==============================================================================
# ☆ カスタマイズ項目終了 - Customize END ☆
#==============================================================================
$imported = {} if $imported == nil
$imported["Reflection"] = true
module KGC
module Reflection
module Regexp
# 反射タイプ
REFLECT_TYPE = /<(?:REFLECT_TYPE|反射タイプ)\s*([^>]+)>/i
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
# 反射貫通
PENETRATE_REFLECT = /<(?:PENETRATE_REFLECT|反射貫通)>/i
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
# 物理反射
ReflectPhysic = KGC::Reflection::PHYSIC_MSG
# 魔法反射
ReflectMagic = KGC::Reflection::MAGIC_MSG
# 反射タイプ別
ReflectType = KGC::Reflection::TYPE_MSG
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 反射ステートのキャッシュを生成
#--------------------------------------------------------------------------
def create_reflection_cache
@__reflect_type = nil
@__penetrate_reflect = false
self.note.each_line { |line|
if line =~ KGC::Reflection::Regexp::REFLECT_TYPE
@__reflect_type = $1
end
if line =~ KGC::Reflection::Regexp::UsableItem::PENETRATE_REFLECT
@__penetrate_reflect = true
end
}
@__reflect_cached = true
end
#--------------------------------------------------------------------------
# ○ 反射タイプ
#--------------------------------------------------------------------------
def reflection_type
create_reflection_cache unless @__reflect_cached
return @__reflect_type
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_type = nil
@__reflect_elements = []
@__penetrate_reflect = false
self.note.each_line { |line|
if line =~ KGC::Reflection::Regexp::REFLECT_TYPE
@__reflect_type = $1
end
if line =~ KGC::Reflection::Regexp::State::REFLECT_PHYSIC
@__reflect_physic = true
end
if line =~ KGC::Reflection::Regexp::State::REFLECT_MAGIC
@__reflect_magic = true
end
if line =~ KGC::Reflection::Regexp::State::REFLECT_ELEMENT
$1.scan(/\d+/).each { |num| @__reflect_elements << num.to_i }
@__reflect_elements.uniq!
end
if line =~ KGC::Reflection::Regexp::UsableItem::PENETRATE_REFLECT
@__penetrate_reflect = true
end
}
@__reflect_cached = true
end
#--------------------------------------------------------------------------
# ○ 反射ステートか
#--------------------------------------------------------------------------
def is_reflect?
return (physic_can_reflect? ||
magic_can_reflect? ||
reflection_type != nil
)
end
#--------------------------------------------------------------------------
# ○ 反射タイプ
#--------------------------------------------------------------------------
def reflection_type
create_reflection_cache unless @__reflect_cached
return @__reflect_type
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
#--------------------------------------------------------------------------
# ○ 反射貫通可否
#--------------------------------------------------------------------------
def can_penetrate_reflect
create_reflection_cache if @__penetrate_reflect == nil
return @__penetrate_reflect
end
alias can_penetrate_reflect? can_penetrate_reflect
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
#--------------------------------------------------------------------------
# ○ 反射貫通可否判定
#--------------------------------------------------------------------------
def can_penetrate_reflect?
states.each { |state|
return true if state.can_penetrate_reflect?
}
return false
end
#--------------------------------------------------------------------------
# ○ 反射効果の適用
# user : 行動者
# skill : スキル (nil なら通常攻撃)
#--------------------------------------------------------------------------
def reflection_effect(user, skill = nil)
@reflected = false
clear_action_results
return unless can_reflect?(user, skill)
@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 unless actor? ^ user.actor? # 味方なら反射しない
return false if user.can_penetrate_reflect? # 貫通なら反射しない
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.element_set)
else
element_set = user.element_set
end
physic = (skill == nil ? true : skill.physical_attack) # 物理フラグ
type = (skill == nil ? nil : skill.reflection_type) # 反射タイプ
states.each { |state|
next unless state.is_reflect?
r_elements = state.reflectable_elements
unless r_elements.empty?
# 反射不可能な属性があればダメ
return false if (r_elements & element_set).size != element_set.size
end
if type != nil
# 反射タイプ指定あり
return true if state.reflection_type == type
else
# 反射タイプ指定なし
return true if physic && state.physic_can_reflect?
return true if !physic && state.magic_can_reflect?
end
}
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)
type = (obj == nil ? nil : obj.reflection_type)
if type != nil
# 反射タイプ指定あり
text = Vocab::ReflectType[type]
anime = KGC::Reflection::TYPE_ANIME_ID[type]
else
text = (physic ? Vocab::ReflectPhysic : Vocab::ReflectMagic)
anime = (physic ?
KGC::Reflection::PHYSIC_ANIME_ID :
KGC::Reflection::MAGIC_ANIME_ID
)
end
@message_window.add_instant_text(text)
display_normal_animation([target], anime)
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
在哪行设置状态编号的呀,只能设置动画和文字而已 |
|