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

Project1

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

[已经解决] 關於反射物理傷害問題

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-3-24
帖子
8
跳转到指定楼层
1
发表于 2015-10-17 22:14:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 kk01127 于 2015-10-17 22:16 编辑

1.這腳本是在網路上找到的

=begin
===============================================================================
  物理伤害反弹 By喵呜喵5
===============================================================================

【说明】
  
  当满足条件时,角色原本应该发动的物理反击效果会变成物理反弹
  物理反弹效果是指敌人无法攻击自己同时自己会用相同的技能进行反击
  与物理反击不同,攻击方和防御方的各项能力仍然沿用原来的数据
  即
  用敌人的攻击力和自己的防御力计算敌人所受到的伤害

=end
$m5script = {} if $m5script.nil?
$m5script["M5Reflect"] = true
module M5Reflect
#==============================================================================
#  设定部分
#==============================================================================
  
  HINT = "%s反弹了物理伤害!"
  
  #这里设置物理反弹时的提示文字
  # %s 表示对象的名字
  
  STATE = [10,11,12,13]
  
  #当角色处于上面数字对应ID的状态时,物理反击的效果变成物理反弹的效果
  
  WEAPON = [6,12,18,24]
  
  #当角色装备上面数字对应ID的武器时,物理反击的效果变成物理反弹的效果
  
  ARMOR = [15,50]
  
  #当角色装备上面数字对应ID的防具时,物理反击的效果变成物理反弹的效果

#==============================================================================
#  设定结束
#==============================================================================
end
class Window_BattleLog < Window_Selectable
  def display_m5_reflection(target, item)
    Sound.play_evasion
    add_text(sprintf(M5Reflect::HINT , target.name))
    wait
    back_one
  end
end
class Scene_Battle < Scene_Base
  alias m5_20131123_invoke_counter_attack invoke_counter_attack
  def invoke_counter_attack(target, item)   
    if (m5_state_include(target.states)) or (m5_equip_include(target))
      @log_window.display_m5_reflection(target, item)
      apply_item_effects(@subject, item)
    else
      m5_20131123_invoke_counter_attack(target, item)
    end
  end  
  def m5_state_include(state)
    state = state.collect {|state| state.id }
    (state | M5Reflect::STATE).size != state.size + M5Reflect::STATE.size
  end
  def m5_equip_include(actor)
    weapon = actor.weapons.collect {|weapons| weapons.id }
    armor = actor.armors.collect {|armors| armors.id }
    (weapon | M5Reflect::WEAPON).size != weapon.size + M5Reflect::WEAPON.size or\
    (armor | M5Reflect::ARMOR).size != armor.size + M5Reflect::ARMOR.size
  end
end     


這下面的ID指的是

STATE = [10,11,12,13]
  
  #当角色处于上面数字对应ID的状态时,物理反击的效果变成物理反弹的效果
  
  WEAPON = [6,12,18,24]
  
  #当角色装备上面数字对应ID的武器时,物理反击的效果变成物理反弹的效果
  
  ARMOR = [15,50]
  
  #当角色装备上面数字对应ID的防具时,物理反击的效果变成物理反弹的效果



我上圖圈起來的那些嘛??
是的話我怎麼使用時候還是反擊的效果不是反射的效果??



2.那這下面的腳本使用方法是在註解那 填入向下圖這樣?



#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 反射ステート - 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



拜託高手幫忙解答了

Lv2.观梦者

梦石
0
星屑
515
在线时间
282 小时
注册时间
2015-2-17
帖子
136
2
发表于 2015-10-18 09:50:05 | 只看该作者
首先第一个脚本是可以用的
但是你指出的状态武器防具,统统都没加入数组所以是使用方法错了
第二个脚本的话。
那是VX,VX,VX!,看好版本行不行。

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
3
发表于 2015-10-18 14:12:30 | 只看该作者
#==============================================================================
#  设定部分
#==============================================================================
  
  HINT = "%s反弹了物理伤害!"
  
  #这里设置物理反弹时的提示文字
  # %s 表示对象的名字
  
  STATE = [10,11,12,13]
  
  #当角色处于上面数字对应ID的状态时,物理反击的效果变成物理反弹的效果
  
  WEAPON = [6,12,18,24]
  
  #当角色装备上面数字对应ID的武器时,物理反击的效果变成物理反弹的效果
  
  ARMOR = [15,50]
  
  #当角色装备上面数字对应ID的防具时,物理反击的效果变成物理反弹的效果

这这里加入你想设定物理反射的ID,比如说添加2号装甲反射ARMOR = [2,15,50]

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-3-24
帖子
8
4
 楼主| 发表于 2015-10-18 22:21:05 | 只看该作者
LHY4118 发表于 2015-10-18 09:50
首先第一个脚本是可以用的
但是你指出的状态武器防具,统统都没加入数组所以是使用方法错了
第二个脚本的话 ...

喔喔原來第2個是VX的 不好意思沒看清楚
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-3-24
帖子
8
5
 楼主| 发表于 2015-10-18 22:46:08 | 只看该作者
lirn 发表于 2015-10-18 14:12
#==============================================================================
#  设定部分
#======= ...

不好意思 在問一下

我如果想讓皮衣能夠反射物理傷害

是否就是
加上ARMOR = [2,15,50] 這樣?
然後在皮衣裡設定

像紅圈圈起來的地方 還是皮衣不是ID2??
不然怎麼還是只有反擊的效果{:2_263:}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-3-24
帖子
8
6
 楼主| 发表于 2015-10-18 22:56:09 | 只看该作者
lirn 发表于 2015-10-18 14:12
#==============================================================================
#  设定部分
#======= ...

喔喔 成功了 感謝大大的指導{:2_275:}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 07:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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