设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1762|回复: 3
打印 上一主题 下一主题

[已经解决] 头疼啊,这个反射脚本是怎么设置的啊

[复制链接]

Lv2.观梦者

梦石
0
星屑
381
在线时间
238 小时
注册时间
2013-8-20
帖子
496
跳转到指定楼层
1
发表于 2013-11-12 17:52:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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

在哪行设置状态编号的呀,只能设置动画和文字而已
不定期回来6R玩。
下方广告帖,欢迎点击

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

2
发表于 2013-11-12 18:20:33 | 只看该作者
在状态的备注里写上:
   <REFLECT_PHYSIC> 或者 <物理反射> 可以反射物理
  <REFLECT_MAGIC>  或者 <魔法发射> 可以反射魔法
  <PENETRATE_REFLECT> <反射貫通>
然后继续写上:
   <REFLECT_ELEMENT 状态ID,状态ID...> 好像是表示可以反射的状态

点评

这个不懂日语也可以从脚本上知道大概的吧  发表于 2013-11-12 19:43
我是来围观日语大触的…  发表于 2013-11-12 19:39

评分

参与人数 1星屑 +90 收起 理由
怪蜀黍 + 90 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
381
在线时间
238 小时
注册时间
2013-8-20
帖子
496
3
 楼主| 发表于 2013-11-13 19:41:16 | 只看该作者
铃仙·优昙华院·因幡 发表于 2013-11-12 18:20
在状态的备注里写上:
    或者  可以反射物理
    或者  可以反射魔法

谢了,我应该知道怎么用它了
但是,那个<REFLECT_ELEMENT 状态ID,状态ID...> 不是状态ID吧,
应该是属性的ID号

点评

多谢补充,问题解决了。麻烦版主结贴  发表于 2013-11-13 19:49
确切的说应该是 抵御的属性 ID  发表于 2013-11-13 19:46
能用就好.  发表于 2013-11-13 19:42
不定期回来6R玩。
下方广告帖,欢迎点击
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 10:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表