查看: 2116|回复: 2

[已经过期] 【ACE】魔法反射先是被攻击然后在反射的效果如何达成?

[复制链接]
梦石
0
星屑
2085
在线时间
185 小时
注册时间
2022-6-24
回帖
148
发表于 2022-7-6 06:08:39 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 ACRI 于 2022-7-6 19:30 编辑

[pre lang="ruby"]#==============================================================================
#                   「攻撃を受けてから反撃」(ACE) Ver.1.4
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   スクリプトの改変は自由に行って頂いて構いませんが
#   その場合も元のスクリプトの作成者として名前を載せて下さい。
#   また配布前に必ず、ブログにある利用規約を確認して下さい。
#
#------------------------------------------------------------------------------
#   
#   デフォルトの「反撃」は相手の攻撃を無効にして反撃しますが
#   これを相手の攻撃を受けた上で行動可能なら反撃するように変更します。
#   また、反撃にもアニメーションが表示されるようになります。
#   
#   技能和物品备注栏
#   <反撃不可> <反撃可能>
#   就是无法反击的技能和必定命中技能可以被物理反击。
#   
#   データベースのメモ欄に
#   <反撃スキル n>
#   放角色,职业,装备,敌人,装备里,效果是反击的时候用n里面写的ID的技能
#   如果有好几个技能ID,会用最大的那个
#   不论什么技能,随机,多次或者全体都是不行的,只会反击攻击你的敌人一次(用追加行动也没用)
#   
#   放技能里使用的,配合上面的
#   <確定反撃>  如果你使用这个技能进行反击,即使你失去行动能力,反击也会被激活。
#   <先行反撃>  如果你使用这个技能进行反击,你会先反击,然后被敌人攻击。
#   <従来反撃>  使用该技能进行反击时,与以往规格一样,敌人的攻击无效。
#   <固有文章>  显示技能使用信息而不是反击信息
#   と記述して仕様を調整できます。
#   
#==============================================================================

#==============================================================================
# ■ RPG::BaseItem
#------------------------------------------------------------------------------
#  アクター・装備・ステートなどを総括して扱うデータクラス。
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● 反撃スキルの指定
  #--------------------------------------------------------------------------
  def cnt_atk_skill_id
    @note[/\<\s*反撃スキル\s*(\d+)\s*\>/]
    return $1 ? $1.to_i : 0
  end
end

#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの反撃率計算
  #--------------------------------------------------------------------------
  alias item_cnt_mod item_cnt
  def item_cnt(user, item)
    return 0 unless opposite?(user)         # 味方には反撃しない
    return 0 if item.note.include?("<反撃不可>")
    return cnt if item.note.include?("<反撃可能>")
    return item_cnt_mod(user, item)
  end
end

#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
# の内部で使用され、Game_Party クラス($game_party)からも参照されます。
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 反撃のスキル ID を取得
  #--------------------------------------------------------------------------
  def cnt_atk_skill_id
    list = []
    self.states.each do |state|
      next unless state
      list.push(state.cnt_atk_skill_id)
    end
    self.equips.each do |equip|
      next unless equip
      list.push(equip.cnt_atk_skill_id)
    end
    list.push(self.actor.cnt_atk_skill_id)
    list.push(self.class.cnt_atk_skill_id)
    return list.sort.reverse[0] > 0 ? list.sort.reverse[0] : attack_skill_id
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の
# 内部で使用されます。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 反撃のスキル ID を取得
  #--------------------------------------------------------------------------
  def cnt_atk_skill_id
    list = []
    self.states.each do |state|
      next unless state
      list.push(state.cnt_atk_skill_id)
    end
    list.push(self.enemy.cnt_atk_skill_id)
    return list.sort.reverse[0] > 0 ? list.sort.reverse[0] : attack_skill_id
  end
end

#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 反撃の発動
  #--------------------------------------------------------------------------
  def invoke_counter_attack(target, item)
    attack_skill = $data_skills[target.cnt_atk_skill_id]
   
    #反撃前に攻撃を適用
    if !attack_skill.note.include?("<先行反撃>") && !attack_skill.note.include?("<従来反撃>")
      apply_item_effects(apply_substitute(target, item), item)
    end
   
    if target.movable? || (target.alive? && attack_skill.note.include?("<確定反撃>"))
      #反撃メッセージを表示
      if attack_skill.note.include?("<固有文章>")
        @log_window.display_use_item(target, attack_skill)
      else
        @log_window.display_counter(target, item)
      end
      
      #反撃のアニメーションを追加
      show_animation_counter(target, attack_skill.animation_id)
      
      #反撃
      @subject.item_apply(target, attack_skill)
      refresh_status
      @log_window.display_action_results(@subject, attack_skill)
    end
   
    #反撃後に攻撃を適用
    if @subject.movable? && attack_skill.note.include?("<先行反撃>")
      apply_item_effects(apply_substitute(target, item), item)
    end   
  end
  #--------------------------------------------------------------------------
  # ● 反撃用アニメーションの表示
  #--------------------------------------------------------------------------
  def show_animation_counter(target, animation_id)
    if animation_id < 0
      if target.actor?
        show_normal_animation([@subject], target.atk_animation_id1, false)
        show_normal_animation([@subject], target.atk_animation_id2, true)
      else
        Sound.play_enemy_attack
        abs_wait_short
      end
    else
      show_normal_animation([@subject], animation_id)
    end
    @log_window.wait
    wait_for_animation
  end
end[/pre]
类似于这个脚本的,但是是魔法反射的版本,如果可能的话,我还想要知道如何让魔法反射按自身的属性来计算反射的伤害,而不是敌方的属性计算
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
梦石
0
星屑
2085
在线时间
185 小时
注册时间
2022-6-24
回帖
148
 楼主| 发表于 2022-7-7 01:53:48 | 显示全部楼层
啊,没人啊

点评

这种得大幅修改脚本的提问,,,没人答很正常,,,zzz  发表于 2022-7-7 06:11
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部