Project1

标题: 请教在状态50下使用攻击技能100结束后几率使用技能101再次... [打印本页]

作者: taeckle    时间: 2019-6-29 20:08
标题: 请教在状态50下使用攻击技能100结束后几率使用技能101再次...
我是这么想的:

条件1:装备第50号状态
条件2:已经学会第100号技能和第101号技能

结果:
当使用第100号技能攻击结束时自动触发第101号技能再次攻击


然后我发现我不知道要在哪个phase或者哪个step下写了。。。

求大神指点下思路,感激不尽!


作者: soulsaga    时间: 2019-6-29 20:22
技能调用公共事件强制行动就可以了吧?
作者: taeckle    时间: 2019-7-17 10:50
soulsaga 发表于 2019-6-29 20:22
技能调用公共事件强制行动就可以了吧?

那要是用下面猫大的连击脚本该怎么改呢?

这个是猫大的连击脚本:

# ===================================================================
# 连击效果(完美版) v1.2 by SailCat
# ===================================================================
# 数据库设定(特技):
#   名称:技能名称,连击次数(要用半角逗号)
#   例如:超究舞神霸斩,11
#         狮子心,16
#         陨石,9
# 注意这是连击次数,实际攻击的回数是这个回数+1回。
# 省略逗号连同后面的参数的话,连击次数默认为零。
# 连击次数是负数的话,将取绝对值处理。
# 视觉效果是发动动画只放1回,击中动画放N回,伤害值显示N次,
# 所以,如使用了齐时战斗的话,要修改倒数第四行,该行内容为:
#     @phase4_step = 4
# 改为@phase4_step = 3
# 其他:RTAB不适用
# ===================================================================
module RPG
class Skill
   def name
     name = @name.split(/,/)[0]
     return name != nil ? name : ""
   end
   def hit_count
     name = @name.split(/,/)[1]
     return name != nil ? name.to_i.abs : 0
   end
end
class Sprite < ::Sprite
   def effect?
     @_whiten_duration > 0 or
     @_appear_duration > 0 or
     @_escape_duration > 0 or
     @_animation_duration > 0
   end
   def damage_effect?
     @_damage_duration > 0 or
     @_collapse_duration > 0
   end
end
end
class Spriteset_Battle
def damage_effect?
   for sprite in @enemy_sprites + @actor_sprites
     return true if sprite.damage_effect?
   end
   return false
end
end  
class Scene_Battle
alias sailcat_update_phase4_step1 update_phase4_step1
alias sailcat_make_skill_action_result make_skill_action_result
alias sailcat_update_phase4_step5 update_phase4_step5
def update_phase4_step1
   @hit_count = 0
   sailcat_update_phase4_step1
end
def make_skill_action_result
   sailcat_make_skill_action_result
   @hit_count = @skill.hit_count
end
def update_phase4_step5
   sailcat_update_phase4_step5
   if @hit_count > 0
     for target in @target_battlers.clone
       if target.dead?
         if @target_battlers.size > 1
           @target_battlers.delete(target)
         else
           @target_battlers.delete(target)
           if target.is_a?(Game_Enemy)
             target = $game_troop.smooth_target_enemy(target.index)
           else
             target = $game_party.smooth_target_actor(target.index)
           end
           if target.is_a?(Game_Battler)
             @target_battlers.push(target)
           end
         end
       end
     end
     if @target_battlers.size == 0
       return
     end
     for target in @target_battlers
       if target.damage != nil
         @phase4_step = 5
         return
       end
       target.skill_effect(@active_battler, @skill)
     end
     # 如果你应用了23种战斗特效的公共事件版脚本请去掉下面几行的注释
      if @common_event_id > 0
        common_event = $data_common_events[@common_event_id]
        $game_system.battle_interpreter.setup(common_event.list, 0)
      end
     @hit_count -= 1
     @phase4_step = 3
   end
end
end
作者: soulsaga    时间: 2019-7-17 11:39
taeckle 发表于 2019-7-17 10:50
那要是用下面猫大的连击脚本该怎么改呢?

这个是猫大的连击脚本:

这个脚本只是单个技能的连击数..和你要求的无关..建议换脚本...
作者: taeckle    时间: 2019-7-17 16:19
本帖最后由 taeckle 于 2019-7-17 16:20 编辑
soulsaga 发表于 2019-7-17 11:39
这个脚本只是单个技能的连击数..和你要求的无关..建议换脚本...


这是默认的phase4:

  # ● 刷新画面 (主回合步骤 2 : 开始行动)
  #--------------------------------------------------------------------------
  def update_phase4_step2
    # 如果不是强制行动
    unless @active_battler.current_action.forcing
      # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 设置行动为攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
    end
    # 清除对像战斗者
    @target_battlers = []
    # 行动种类分支
    case @active_battler.current_action.kind
    when 0  # 基本
      make_basic_action_result
    when 1  # 特技
      make_skill_action_result
    when 2  # 物品
      make_item_action_result
    end
    # 移至步骤 3
    if @phase4_step == 2
      @phase4_step = 3
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成基本行动结果
  #--------------------------------------------------------------------------
  def make_basic_action_result
    # 攻击的情况下
    if @active_battler.current_action.basic == 0
      # 设置攻击 ID
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # 行动方的战斗者是敌人的情况下
      if @active_battler.is_a?(Game_Enemy)
        if @active_battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif @active_battler.restriction == 2
          target = $game_party.random_target_actor
        else
          index = @active_battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        end
      end
      # 行动方的战斗者是角色的情况下
      if @active_battler.is_a?(Game_Actor)
        if @active_battler.restriction == 3
          target = $game_party.random_target_actor
        elsif @active_battler.restriction == 2
          target = $game_troop.random_target_enemy
        else
          index = @active_battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
      end
      # 设置对像方的战斗者序列
      @target_battlers = [target]
      # 应用通常攻击效果
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    # 防御的情况下
    if @active_battler.current_action.basic == 1
      # 帮助窗口显示"防御"
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    # 逃跑的情况下
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
      #  帮助窗口显示"逃跑"
      @help_window.set_text("逃跑", 1)
      # 逃跑
      @active_battler.escape
      return
    end
    # 什么也不做的情况下
    if @active_battler.current_action.basic == 3
      # 清除强制行动对像的战斗者
      $game_temp.forcing_battler = nil
      # 移至步骤 1
      @phase4_step = 1
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置物品或特技对像方的战斗者
  #     scope : 特技或者是物品的范围
  #--------------------------------------------------------------------------
  def set_target_battlers(scope)
    # 行动方的战斗者是敌人的情况下
    if @active_battler.is_a?(Game_Enemy)
      # 效果范围分支
      case scope
      when 1  # 敌单体
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_party.smooth_target_actor(index))
      when 2  # 敌全体
        for actor in $game_party.actors
          if actor.exist?
            @target_battlers.push(actor)
          end
        end
      when 3  # 我方单体
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_troop.smooth_target_enemy(index))
      when 4  # 我方全体
        for enemy in $game_troop.enemies
          if enemy.exist?
            @target_battlers.push(enemy)
          end
        end
      when 5  # 我方单体 (HP 0)
        index = @active_battler.current_action.target_index
        enemy = $game_troop.enemies[index]
        if enemy != nil and enemy.hp0?
          @target_battlers.push(enemy)
        end
      when 6  # 我方全体 (HP 0)
        for enemy in $game_troop.enemies
          if enemy != nil and enemy.hp0?
            @target_battlers.push(enemy)
          end
        end
      when 7  # 使用者
        @target_battlers.push(@active_battler)
      end
    end
    # 行动方的战斗者是角色的情况下
    if @active_battler.is_a?(Game_Actor)
      # 效果范围分支
      case scope
      when 1  # 敌单体
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_troop.smooth_target_enemy(index))
      when 2  # 敌全体
        for enemy in $game_troop.enemies
          if enemy.exist?
            @target_battlers.push(enemy)
          end
        end
      when 3  # 我方单体
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_party.smooth_target_actor(index))
      when 4  # 我方全体
        for actor in $game_party.actors
          if actor.exist?
            @target_battlers.push(actor)
          end
        end
      when 5  # 我方单体 (HP 0)
        index = @active_battler.current_action.target_index
        actor = $game_party.actors[index]
        if actor != nil and actor.hp0?
          @target_battlers.push(actor)
        end
      when 6  # 我方全体 (HP 0)
        for actor in $game_party.actors
          if actor != nil and actor.hp0?
            @target_battlers.push(actor)
          end
        end
      when 7  # 使用者
        @target_battlers.push(@active_battler)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成特技行动结果
  #--------------------------------------------------------------------------
  def make_skill_action_result
    # 获取特技
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # 如果不是强制行动
    unless @active_battler.current_action.forcing
      # 因为 SP 耗尽而无法使用的情况下
      unless @active_battler.skill_can_use?(@skill.id)
        # 清除强制行动对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
    end
    # 消耗 SP
    @active_battler.sp -= @skill.sp_cost
    # 刷新状态窗口
    @status_window.refresh
    # 在帮助窗口显示特技名
    @help_window.set_text(@skill.name, 1)
    # 设置动画 ID
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    # 设置公共事件 ID
    @common_event_id = @skill.common_event_id
    # 设置对像侧战斗者
    set_target_battlers(@skill.scope)
    # 应用特技效果
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成物品行动结果
  #--------------------------------------------------------------------------
  def make_item_action_result
    # 获取物品
    @item = $data_items[@active_battler.current_action.item_id]
    # 因为物品耗尽而无法使用的情况下
    unless $game_party.item_can_use?(@item.id)
      # 移至步骤 1
      @phase4_step = 1
      return
    end
    # 消耗品的情况下
    if @item.consumable
      # 使用的物品减 1
      $game_party.lose_item(@item.id, 1)
    end
    # 在帮助窗口显示物品名
    @help_window.set_text(@item.name, 1)
    # 设置动画 ID
    @animation1_id = @item.animation1_id
    @animation2_id = @item.animation2_id
    # 设置公共事件 ID
    @common_event_id = @item.common_event_id
    # 确定对像
    index = @active_battler.current_action.target_index
    target = $game_party.smooth_target_actor(index)
    # 设置对像侧战斗者
    set_target_battlers(@item.scope)
    # 应用物品效果
    for target in @target_battlers
      target.item_effect(@item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  #--------------------------------------------------------------------------
  def update_phase4_step3
    # 行动方动画 (ID 为 0 的情况下是白色闪烁)
    if @animation1_id == 0
      @active_battler.white_flash = true
    else
      @active_battler.animation_id = @animation1_id
      @active_battler.animation_hit = true
    end
    # 移至步骤 4
    @phase4_step = 4
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  #--------------------------------------------------------------------------
  def update_phase4_step4
    # 对像方动画
    for target in @target_battlers
      target.animation_id = @animation2_id
      target.animation_hit = (target.damage != "Miss")
    end
    # 限制动画长度、最低 8 帧
    @wait_count = 8
    # 移至步骤 5
    @phase4_step = 5
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  #--------------------------------------------------------------------------
  def update_phase4_step5
    # 隐藏帮助窗口
    @help_window.visible = false
    # 刷新状态窗口
    @status_window.refresh
    # 显示伤害
    for target in @target_battlers
      if target.damage != nil
        target.damage_pop = true
      end
    end
    # 移至步骤 6
    @phase4_step = 6
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 6 : 刷新)
  #--------------------------------------------------------------------------
  def update_phase4_step6
    # 清除强制行动对像的战斗者
    $game_temp.forcing_battler = nil
    # 公共事件 ID 有效的情况下
    if @common_event_id > 0
      # 设置事件
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
    # 移至步骤 1
    @phase4_step = 1
  end
end
作者: soulsaga    时间: 2019-7-17 16:32
RUBY 代码复制
  1. #==============================================================================
  2. # ■ XP-RGSS-13 スキル連撃 [Ver.3.3.0]    by Claimh
  3. #------------------------------------------------------------------------------
  4. # ・スキル攻撃時にタイミング良くキーを入力することで、追加攻撃が発動する。
  5. # ・オート発動、連続追加攻撃回数も設定可能
  6. # ・追加攻撃を発動させるキー入力のタイミング
  7. #      対象側のアニメーションが表示される直前
  8. # ・スキルアップデートと併用することで、スキルレベル制が導入できる。
  9. #   その際、連続回数は設定した連続回数+スキルレベルとなる
  10. #==============================================================================
  11.  
  12. module ExtraSkill
  13.   SKILL_CHASE = []
  14. #==============================================================================
  15. # □ カスタマイズSTART
  16. #==============================================================================
  17.   # 追加攻撃発動キー
  18.   SKILL_CHASE_KEY = Input::C
  19.  
  20.   # スキルレベル制を導入する
  21.   USE_SKILL_LEVEL = false      # 不要ならfalse
  22.  
  23.   # ダメージ一括表示
  24.   SKILL_CHASE_DMG_ALL = true          # 不要ならfalse
  25.   # 対象側アニメーションの間にウェイトを入れる
  26.   SKILL_CHASE_WAIT = 4                # 数値はフレーム数、不要ならnil
  27.  
  28.   # ミスなら追加攻撃しない
  29.   SKILL_CHASE_MISS = true               # 不要ならfalse
  30.   # クリティカル発生時にアニメーションを変化させる
  31.   SKILL_CHASE_CRITICAL = true           # 不要ならfalse
  32.  
  33.   # 物理攻撃系スキルの属性ID
  34.   CHASE_WEAPON = 19
  35.   # 魔法攻撃系スキルの属性ID
  36.   CHASE_MAGIC = 20
  37.  
  38.   # 成功時に鳴らすSE
  39.   SKILL_CHASE_SE = "020-Teleport03"     # 不要ならnil
  40.  
  41.   # 設定例
  42.   # SKILL_CHASE[スキルID] = [追加攻撃の攻撃力(%), 連鎖アニメID, オート発動フラグ,
  43.   #  成功率, 連続回数,クリティカル時アニメ]]
  44.   SKILL_CHASE[57] = [100, 31, false, 100, 5, 32]
  45.   SKILL_CHASE[61] = [100, 42, false, 100, 4, 43]
  46.  
  47. #==============================================================================
  48. # □ カスタマイズEND
  49. #==============================================================================
  50. end
  51.  
  52. class Scene_Battle
  53.   include ExtraSkill
  54.   attr_accessor   :skill_chase_exercise       # 追加攻撃実行中
  55.   attr_accessor   :skill_chase_end            # 追加攻撃終了
  56.   attr_accessor   :skill_chase_first          # 追加攻撃 第1攻撃[スキル]
  57.   attr_accessor   :skill_chase_set            # 追加攻撃 設定値
  58.   attr_accessor   :skill_atk_f                # 追加攻撃 威力
  59.   attr_accessor   :chase_skill_type           # 追加攻撃 スキルタイプ
  60.   #--------------------------------------------------------------------------
  61.   # ● 追尾判定用データ初期化
  62.   #--------------------------------------------------------------------------
  63.   def init_chase
  64.     @skill_chase_flg = false          # 追加攻撃開始
  65.     self.skill_chase_exercise = false # 追加攻撃実行中
  66.     self.skill_chase_end = false      # 追加攻撃終了
  67.     @skill_chase_check_key = false    # 追加攻撃判定実行中
  68.     @skill_chase_success = false      # 追加攻撃成功
  69.     @skill_chase_count = 0            # 追加攻撃数カウント
  70.     self.skill_chase_first = true     # 初期フラグ
  71.     self.skill_chase_set = []
  72.     self.skill_atk_f = 0
  73.     self.chase_skill_type = 0
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  77.   #--------------------------------------------------------------------------
  78.   alias update_phase4_step1_skill_chase update_phase4_step1
  79.   def update_phase4_step1
  80.     update_phase4_step1_skill_chase
  81.     init_chase
  82.   end
  83.  
  84.   #--------------------------------------------------------------------------
  85.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  86.   #--------------------------------------------------------------------------
  87.   alias update_phase4_step3_skill_chase update_phase4_step3
  88.   def update_phase4_step3
  89.     # 追加攻撃実行中ならステップ4に強制移行
  90.     if self.skill_chase_exercise
  91.       # ステップ 4 に移行
  92.       @phase4_step = 4
  93.       return
  94.     elsif @active_battler.current_action.kind == 1
  95.       if @active_battler.is_a?(Game_Actor)
  96.         # 追加攻撃チェック
  97.         skill_chase_check(@skill)
  98.       end
  99.     end
  100.     update_phase4_step3_skill_chase       # 原物
  101.   end
  102.  
  103.  
  104.   #--------------------------------------------------------------------------
  105.   # ● 判定・設定
  106.   #--------------------------------------------------------------------------
  107.   def skill_chase_check(skill)
  108.     unless SKILL_CHASE[skill.id].nil?
  109.       self.skill_chase_set = SKILL_CHASE[skill.id]
  110.       @skill_chase_flg = true
  111.     end
  112.   end
  113.  
  114.   #--------------------------------------------------------------------------
  115.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  116.   #--------------------------------------------------------------------------
  117.   alias update_phase4_step4_skill_chase update_phase4_step4
  118.   def update_phase4_step4
  119.     # 追加攻撃
  120.     if @skill_chase_flg
  121.       # キーチェックを開始する
  122.       @skill_chase_check_key = true
  123.       # 追加攻撃実行中ならアニメーション再セット
  124.       if self.skill_chase_exercise
  125.         @animation2_id = self.skill_chase_set[1]
  126.       end
  127.       # 対象側アニメーション
  128.       for target in @target_battlers
  129.         # クリティカルでアニメーション変化
  130.         if SKILL_CHASE_CRITICAL and target.critical and self.skill_chase_first
  131.           target.animation_id = self.skill_chase_set[5]
  132.         else
  133.           # 一度でもクリティカルがあった
  134.           if target.once_critical and SKILL_CHASE_DMG_ALL
  135.             target.critical = true
  136.           end
  137.           target.animation_id = @animation2_id
  138.         end
  139.         target.animation_hit = (target.damage != "Miss")
  140.       end
  141.       # ウェイトを入れる
  142.       if SKILL_CHASE_WAIT != nil
  143.         @wait_count = SKILL_CHASE_WAIT
  144.       end
  145.       # ステップ 5 に移行
  146.       @phase4_step = 5
  147.       return
  148.     end
  149.     update_phase4_step4_skill_chase     # 原物
  150.   end
  151.  
  152.   #--------------------------------------------------------------------------
  153.   # ● 追加攻撃力設定
  154.   #--------------------------------------------------------------------------
  155.   def skill_chase_atk
  156.     # 物理攻撃系
  157.     if @skill.element_set.include?(CHASE_WEAPON)
  158.       self.chase_skill_type = 1
  159.       self.skill_atk_f = @skill.atk_f/100
  160.     # 魔法攻撃系
  161.     elsif @skill.element_set.include?(CHASE_MAGIC)
  162.       self.chase_skill_type = 2
  163.       self.skill_atk_f = @skill.int_f/100
  164.     else
  165.       p "設定ミス"
  166.     end
  167.     self.skill_chase_set[0] = @skill.power * self.skill_chase_set[0]/100
  168.   end
  169.  
  170.   #--------------------------------------------------------------------------
  171.   # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  172.   #--------------------------------------------------------------------------
  173.   alias update_phase4_step5_skill_chase update_phase4_step5
  174.   def update_phase4_step5
  175.     # キーチェック終了
  176.     @skill_chase_check_key = false
  177.     # 追加攻撃成功
  178.     if @skill_chase_success
  179.       skill_chase_atk
  180.       # 追加攻撃実行中に移行
  181.       self.skill_chase_exercise = true
  182.     end
  183.     # ダメージ一括表示
  184.     if SKILL_CHASE_DMG_ALL and self.skill_chase_exercise
  185.       # 追加攻撃終了or追加攻撃失敗
  186.       if self.skill_chase_end or !@skill_chase_success
  187.         self.skill_chase_exercise = false
  188.         @skill_chase_flg = false
  189.         self.skill_chase_end = false
  190.         # ヘルプウィンドウを隠す
  191.         @help_window.visible = false
  192.         # ステータスウィンドウをリフレッシュ
  193.         @status_window.refresh
  194.         # 積算ダメージの描写
  195.         for target in @target_battlers
  196.           if target.skill_chase_all_dmg != nil
  197.             target.damage = target.skill_chase_all_dmg
  198.             target.damage_pop = true
  199.             target.skill_chase_all_dmg = nil
  200.             # 途中で死んでたらトドメをさす
  201.             if target.skill_chase_dead_end
  202.               target.hp = 0
  203.               target.skill_chase_dead_end = false
  204.             end
  205.             # クリティカルが発生している
  206.             if target.once_critical
  207.               target.critical = true
  208.               target.once_critical = false
  209.             end
  210.           end
  211.         end
  212.         # ステップ 6 に移行
  213.         @phase4_step = 6
  214.         return
  215.       end
  216.     else
  217.       update_phase4_step5_skill_chase       # 原物
  218.     end
  219.     # 追加攻撃終了or追加攻撃失敗
  220.     if self.skill_chase_end or !@skill_chase_success
  221.       self.skill_chase_exercise = false
  222.       @skill_chase_flg = false
  223.       self.skill_chase_end = false
  224.       if SKILL_CHASE_DMG_ALL
  225.         for target in @target_battlers
  226.           target.skill_chase_all_dmg = nil
  227.           if target.skill_chase_dead_end
  228.             target.hp = 0
  229.             target.skill_chase_dead_end = false
  230.           end
  231.         end
  232.       end
  233.     end
  234.     if self.skill_chase_exercise
  235.       @skill_chase_success = false
  236.       # 追加攻撃開始
  237.       @phase4_step = 2
  238.       @active_battler.current_action.kind = 0
  239.       @active_battler.current_action.basic = 0
  240.     end
  241.   end
  242.  
  243.   #--------------------------------------------------------------------------
  244.   # ● フレーム更新
  245.   #--------------------------------------------------------------------------
  246.   alias update_skill_chase update
  247.   def update
  248.     if @skill_chase_check_key and @skill_chase_flg
  249.       # 追加攻撃発動チェック
  250.       if (Input.trigger?(SKILL_CHASE_KEY) or self.skill_chase_set[2])
  251.         # 確率チェック
  252.         if rand(100) <= self.skill_chase_set[3]
  253.           @skill_chase_success = true
  254.           @skill_chase_check_key = false
  255.           @skill_chase_count += 1
  256.           # 追加攻撃回数チェック
  257.           if @skill_chase_count >= self.skill_chase_set[4] or self.skill_chase_end
  258.             self.skill_chase_end = true
  259.           else
  260.             # 追加攻撃成功SEを鳴らしてみる
  261.             if SKILL_CHASE_SE != nil and !self.skill_chase_end
  262.               Audio.se_play("Audio/SE/" + SKILL_CHASE_SE)
  263.             end
  264.           end
  265.         end
  266.       end
  267.     end
  268.     update_skill_chase              # 原物
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  272.   #--------------------------------------------------------------------------
  273.   alias update_phase4_step6_add_atk update_phase4_step6
  274.   def update_phase4_step6
  275.     init_chase
  276.     for target in @target_battlers
  277.       target.skill_chase_all_dmg = nil
  278.       target.skill_chase_dead_end = false
  279.       target.once_critical = false
  280.     end
  281.     update_phase4_step6_add_atk
  282.   end
  283. end
  284.  
  285.  
  286. #==============================================================================
  287. # ■ Game_Battler
  288. #==============================================================================
  289. class Game_Battler
  290.   include ExtraSkill
  291.   attr_accessor :skill_chase_all_dmg           # 積算ダメージ
  292.   attr_accessor :skill_chase_dead_end          # 死亡フラグ
  293.   attr_accessor :once_critical           # クリティカルフラグ(一括表示用)
  294.   #--------------------------------------------------------------------------
  295.   # ● オブジェクト初期化
  296.   #--------------------------------------------------------------------------
  297.   alias initialize_skill_chase initialize
  298.   def initialize
  299.     initialize_skill_chase
  300.     @skill_chase_all_dmg = nil
  301.     @skill_chase_dead_end = false
  302.     @once_critical = false
  303.   end
  304.  
  305.   #--------------------------------------------------------------------------
  306.   # ● 通常攻撃の効果適用
  307.   #     attacker : 攻撃者 (バトラー)
  308.   #--------------------------------------------------------------------------
  309.   alias attack_effect_skill_chase attack_effect
  310.   def attack_effect(attacker)
  311.     if $scene.skill_chase_exercise
  312.       # クリティカルフラグをクリア
  313.       self.critical = false
  314.       # 基本ダメージを計算
  315.       if $scene.chase_skill_type == 1
  316.         atk_skill = (attacker.atk * $scene.skill_atk_f + $scene.skill_chase_set[0])/1.2
  317.       elsif $scene.chase_skill_type == 2
  318.         atk_skill = (attacker.int * $scene.skill_atk_f + $scene.skill_chase_set[0])/1.2
  319.       else
  320.         p "設定ミス2"
  321.       end
  322.       atk = [atk_skill.to_int - self.pdef / 2, 0].max
  323.       self.damage = atk * (20 + attacker.str) / 20
  324.       # 属性修正
  325.       self.damage *= elements_correct(attacker.element_set)
  326.       self.damage /= 100
  327.       # ダメージの符号が正の場合
  328.       if self.damage > 0
  329.         # クリティカル修正
  330.         if rand(100) < 4 * attacker.dex / self.agi
  331.           self.damage *= 2
  332.           self.critical = true
  333.           self.once_critical = true
  334.         end
  335.         # 防御修正
  336.         if self.guarding?
  337.           self.damage /= 2
  338.         end
  339.       end
  340.       # 分散
  341.       if self.damage.abs > 0
  342.         amp = [self.damage.abs * 15 / 100, 1].max
  343.         self.damage += rand(amp+1) + rand(amp+1) - amp
  344.       end
  345.       # 第二命中判定
  346.       eva = 8 * self.agi / attacker.dex + self.eva
  347.       hit = self.damage < 0 ? 100 : 100 - eva
  348.       hit = self.cant_evade? ? 100 : hit
  349.       hit_result = (rand(100) < hit)
  350.       # 命中の場合
  351.       if hit_result == true
  352.         # ステート衝撃解除
  353.         remove_states_shock
  354.         # HP からダメージを減算
  355.         self.hp -= self.damage
  356.         # ステート変化
  357.         @state_changed = false
  358.         states_plus(attacker.plus_state_set)
  359.         states_minus(attacker.minus_state_set)
  360.       # ミスの場合
  361.       else
  362.         # ダメージに "Miss" を設定
  363.         self.damage = "Miss"
  364.         # クリティカルフラグをクリア
  365.         self.critical = false
  366.       end
  367.     else
  368.       attack_effect_skill_chase(attacker)      # 原物
  369.     end
  370.     if self.dead?
  371.       # こいつはもう死んでいる
  372.       @skill_chase_dead_end = true
  373.       # ダメージ一括表示
  374.       if SKILL_CHASE_DMG_ALL and $scene.skill_chase_exercise
  375.         # とりあえず生かしておく
  376.         self.hp = 1
  377.       else
  378.         $scene.skill_chase_end = true
  379.       end
  380.     end
  381.     # ダメージ一括表示ならダメージの蓄積
  382.     if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_exercise
  383.       @skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
  384.       @skill_chase_all_dmg += self.damage
  385.       self.damage = nil
  386.     elsif SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_first
  387.       @skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
  388.       @skill_chase_all_dmg += self.damage
  389.       $scene.skill_chase_first = false
  390.     else
  391.       # ダメージミスなら終了
  392.       if SKILL_CHASE_MISS and self.damage == "Miss"
  393.         $scene.skill_chase_end = true
  394.         if SKILL_CHASE_DMG_ALL and @skill_chase_all_dmg == nil
  395.           @skill_chase_all_dmg = "Miss"
  396.         end
  397.       end
  398.     end
  399.     # メソッド終了
  400.     return true
  401.   end
  402.  
  403.   #--------------------------------------------------------------------------
  404.   # ● スキルの効果適用
  405.   #     user  : スキルの使用者 (バトラー)
  406.   #     skill : スキル
  407.   #--------------------------------------------------------------------------
  408.   alias skill_effect_skill_chase skill_effect
  409.   def skill_effect(user, skill)
  410.     ret = skill_effect_skill_chase(user, skill)
  411.     if self.dead?
  412.       # こいつはもう死んでいる
  413.       @skill_chase_dead_end = true
  414.       # ダメージ一括表示
  415.       if SKILL_CHASE_DMG_ALL and ($scene.skill_chase_exercise or $scene.skill_chase_first)
  416.         # とりあえず生かしておく
  417.         self.hp = 1
  418.       else
  419.         $scene.skill_chase_end = true
  420.       end
  421.     end
  422.     # ダメージ一括表示ならダメージの蓄積
  423.     if SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_exercise
  424.       @skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
  425.       @skill_chase_all_dmg += self.damage
  426.       self.damage = nil
  427.     elsif SKILL_CHASE_DMG_ALL and self.damage != "Miss" and $scene.skill_chase_first
  428.       @skill_chase_all_dmg = (@skill_chase_all_dmg == nil ? 0 : @skill_chase_all_dmg)
  429.       @skill_chase_all_dmg = self.damage
  430.       $scene.skill_chase_first = false
  431.     else
  432.       # ダメージミスなら終了
  433.       if SKILL_CHASE_MISS and self.damage == "Miss"
  434.         $scene.skill_chase_end = true
  435.         if SKILL_CHASE_DMG_ALL and @skill_chase_all_dmg == nil
  436.           @skill_chase_all_dmg = "Miss"
  437.         end
  438.       end
  439.     end
  440.     return ret
  441.   end
  442. end

作者: soulsaga    时间: 2019-7-17 16:42
soulsaga 发表于 2019-7-17 16:32
#==============================================================================
# ■ XP-RGSS-13 スキ ...

# 設定例
  # SKILL_CHASE[スキルID] = [追加攻撃の攻撃力(%), 連鎖アニメID, オート発動フラグ,
  #  成功率, 連続回数,クリティカル時アニメ]]
  SKILL_CHASE[57] = [100, 31, false, 100, 5, 32]
  SKILL_CHASE[61] = [100, 42, false, 100, 4, 43]
作者: taeckle    时间: 2019-7-17 23:29
soulsaga 发表于 2019-7-17 16:42
# 設定例
  # SKILL_CHASE[スキルID] = [追加攻撃の攻撃力(%), 連鎖アニメID, オート発動フラグ,
  #   ...

还有为什么有时候每楼的点评一栏我看不到。。
作者: soulsaga    时间: 2019-7-18 10:14
taeckle 发表于 2019-7-17 23:29
还有为什么有时候每楼的点评一栏我看不到。。

在那楼再点评就看到了..
另外我是叫你还不如用技能调用公用事件强制行动做好过..
作者: taeckle    时间: 2019-7-18 23:24
soulsaga 发表于 2019-7-18 10:14
在那楼再点评就看到了..
另外我是叫你还不如用技能调用公用事件强制行动做好过.. ...

那个公共事件强制行动里的“战斗者”设定是神马意思啊?
作者: soulsaga    时间: 2019-7-19 11:08
RUBY 代码复制
  1. #==============================================================================
  2. #   组合键连续特技系统 By 绿发的Eclair
  3. #==============================================================================
  4. #   仿传说系列的效果,在使用一个特技中按照一定的顺序摁键可以再使用一个特技。
  5. #   使用方法:在下面的自定义部分里设定特技对应的组合键和连接上的特技。
  6. #   为了避免玩家二周目或者提前知道的情况下一开始就是用强力连续技能的事情发生,
  7. #   特别做了判断,只有$chain这个数组包括的技能才会被连出来。
  8. #   事件脚本中使用 add_chain(可以连出来的特技ID) 可以给这个数组添加新特技。
  9. #   就好像“学会新的”一样。
  10. #==============================================================================
  11. $chain = [ ]#可以使用的连续技
  12. module RPG
  13. class Skill
  14.   def chain
  15.   ############################################################自定义部分
  16.   case id
  17.     when 87
  18.     chain = ["上"]
  19.     #chain = ["上","上","A"]
  20.     chain_id = 88
  21.  
  22.     #夏娜
  23.     when 98               
  24.     chain = ["下","右","A"]
  25.     chain_id = 97
  26.     when 97               
  27.     chain = ["下","右","A"]
  28.     chain_id = 99
  29.     when 99               
  30.     chain = ["下","右","下","右","A"]
  31.     chain_id = 103
  32.     when 102               
  33.     chain = ["下","左","B"]
  34.     chain_id = 100
  35.     when 100               
  36.     chain = ["下","左","B"]
  37.     chain_id = 101
  38.  
  39.     #咲
  40.     when 122               
  41.     chain = ["下","右","A"]
  42.     chain_id = 120
  43.     when 120               
  44.     chain = ["下","右","A"]
  45.     chain_id = 121
  46.     when 123               
  47.     chain = ["上","下","A"]
  48.     chain_id = 124
  49.     when 124               
  50.     chain = ["上","下","A"]
  51.     chain_id = 126
  52.     when 126               
  53.     chain = ["上","下","上","下","A"]
  54.     chain_id = 127
  55.  
  56.     #奈叶
  57.     when 140               
  58.     chain = ["下","右","A"]
  59.     chain_id = 138
  60.     when 138               
  61.     chain = ["下","右","A"]
  62.     chain_id = 137
  63.     when 139               
  64.     chain = ["下","左","B"]
  65.     chain_id = 141
  66.      when 137               
  67.     chain = ["下","右","下","右","A"]
  68.     chain_id = 142
  69.  
  70.     #菲特
  71.     when 154               
  72.     chain = ["下","左","B"]
  73.     chain_id = 153
  74.     when 153               
  75.     chain = ["下","左","B"]
  76.     chain_id = 151
  77.     when 151               
  78.     chain = ["下","左","B"]
  79.     chain_id = 152
  80.     when 155               
  81.     chain = ["下","右","A"]
  82.     chain_id = 156
  83.     when 152               
  84.     chain = ["下","左","下","右","B"]
  85.     chain_id = 157
  86.  
  87.     #路易斯  
  88.     when 168               
  89.     chain = ["上","上","A"]
  90.     chain_id = 167
  91.     when 167               
  92.     chain = ["上","上","A"]
  93.     chain_id = 170
  94.       when 170               
  95.     chain = ["下","下","下","下","A"]
  96.     chain_id = 171
  97.  
  98.     #伊卡洛斯
  99.     when 183              
  100.     chain = ["下","右","A"]
  101.     chain_id = 181
  102.     when 181              
  103.     chain = ["下","右","A"]
  104.     chain_id = 185
  105.     when 184              
  106.     chain = ["下","右","B"]
  107.     chain_id = 182
  108.      when 185              
  109.     chain = ["下","右","下","右","A"]
  110.     chain_id = 186
  111.  
  112.     #妮姆芙
  113.     when 197              
  114.     chain = ["下","下","B"]
  115.     chain_id = 200
  116.     when 200         
  117.     chain = ["下","下","B"]
  118.     chain_id = 201
  119.  
  120.     when 198              
  121.     chain = ["上","下","A"]
  122.     chain_id = 199
  123.     when 199              
  124.     chain = ["上","下","A"]
  125.     chain_id = 202
  126.      when 202              
  127.     chain = ["上","下","上","下","A"]
  128.     chain_id = 203
  129.  
  130.     #约修亚
  131.     when 213              
  132.     chain = ["上","下","A"]
  133.     chain_id = 215
  134.     when 215              
  135.     chain = ["上","下","上","下","A"]
  136.     chain_id = 857
  137.    when 857            
  138.     chain = ["上","下","上","下","左","右","左","右","A"]
  139.     chain_id = 858
  140.  
  141.  
  142.     when 217              
  143.     chain = ["上","下","B"]
  144.     chain_id = 214
  145.     when 214              
  146.     chain = ["上","下","B"]
  147.     chain_id = 216
  148.     when 216              
  149.     chain = ["上","下","上","下","B"]
  150.     chain_id = 856
  151.     when 856              
  152.     chain = ["上","下","上","下","左","右","左","右","B"]
  153.     chain_id = 859
  154. #艾丝蒂尔
  155.      when 227                 
  156.     chain = ["下","右","B"]
  157.     chain_id = 228   
  158.     when 228                 
  159.     chain = ["下","右","A"]
  160.     chain_id = 229        
  161.     when 229               
  162.     chain = ["下","左","A"]
  163.     chain_id = 230                                             
  164.    when 230               
  165.     chain = ["下","左","下","右","B"]
  166.     chain_id = 864
  167.    when 864               
  168.     chain = ["下","左","下","右","A"]
  169.     chain_id = 865
  170.      when 865               
  171.     chain = ["下","左","下","右","下","左","下","右","A"]
  172.     chain_id = 866   
  173.  
  174.  
  175.     #在这里按照上面的格式添加   
  176.   #when n   
  177.   #chain = ["第一个摁键","第二个摁键","第三个摁键"]
  178.   #chain_id = 连接技能的ID
  179.  
  180.  
  181.   ############################################################
  182.   else
  183.     chain = []
  184.     chain_id = 0
  185.   end
  186.    return [chain,chain_id]
  187.   end
  188. end
  189. end
  190. class Interpreter
  191.   def add_chain(id)
  192.     $chain.push(id)
  193.   end
  194. end
  195. class Scene_Battle
  196.   alias update_phase4_step1_2 :update_phase4_step1
  197.   def update_phase4_step1
  198.     @result = [] if @result == nil
  199.     update_phase4_step1_2
  200.   end
  201.   alias update_e :update
  202.   def update
  203.     if (@phase4_step == 3 or @phase4_step == 4 or @phase4_step == 5) && @active_battler.current_action.kind == 1
  204.       @use = @active_battler.current_action.kind == 1 && $data_skills[@active_battler.current_action.skill_id].chain != [[],0] && $chain.include?($data_skills[@active_battler.current_action.skill_id].chain[1])  
  205.     if @use == true and $data_skills[@active_battler.current_action.skill_id].chain != [[],0]
  206.        @use = $data_skills[$data_skills[@active_battler.current_action.skill_id].chain[1]].sp_cost <= @active_battler.sp
  207.     end
  208.     if @use == true
  209.    if Input.trigger?(Input::A)
  210.      @result.push("A")
  211.    end
  212.    if Input.trigger?(Input::B)
  213.      @result.push("B")
  214.    end
  215.    if Input.trigger?(Input::C)
  216.      @result.push("C")
  217.    end
  218.    if Input.trigger?(Input::X)
  219.      @result.push("X")
  220.    end
  221.    if Input.trigger?(Input::Y)
  222.      @result.push("Y")
  223.    end
  224.    if Input.trigger?(Input::Z)
  225.      @result.push("Z")
  226.    end
  227.    if Input.trigger?(Input::L)
  228.      @result.push("L")
  229.    end
  230.    if Input.trigger?(Input::R)
  231.      @result.push("R")
  232.    end
  233.    if Input.trigger?(Input::UP)
  234.      @result.push("上")
  235.    end
  236.    if Input.trigger?(Input::DOWN)
  237.      @result.push("下")
  238.    end
  239.    if Input.trigger?(Input::LEFT)
  240.      @result.push("左")
  241.    end
  242.    if Input.trigger?(Input::RIGHT)
  243.      @result.push("右")
  244.    end
  245.    end
  246. end
  247.   if @phase == 4 and @phase4_step > 5 and @active_battler.current_action.kind == 1 and @use == true
  248.   if @result == $data_skills[@active_battler.current_action.skill_id].chain[0]
  249.     @active_battler.current_action.kind = 1
  250.     a = $data_skills[@active_battler.current_action.skill_id].chain[1]
  251.     @active_battler.current_action.skill_id = a
  252.     @action_battlers.unshift(@active_battler)
  253.     update_phase4_step1
  254.   end
  255. end
  256. update_e
  257. end
  258.   #--------------------------------------------------------------------------
  259.   # ● 生成特技行动结果
  260.   #--------------------------------------------------------------------------
  261.   def make_skill_action_result
  262.     # 获取特技
  263.     @skill = $data_skills[@active_battler.current_action.skill_id]
  264.  
  265.      #============================================================
  266.     #SP不足以支付对应特技的情况下,转为普通攻击(仅适用于敌人)
  267.     if @active_battler.is_a?(Game_Enemy) && @active_battler.sp < @skill.sp_cost #
  268.        # 设置攻击 ID
  269.       @animation1_id = @active_battler.animation1_id
  270.       @animation2_id = @active_battler.animation2_id
  271.         if @active_battler.restriction == 3
  272.           target = $game_troop.random_target_enemy
  273.         elsif @active_battler.restriction == 2
  274.           target = $game_party.random_target_actor
  275.         else
  276.           index = @active_battler.current_action.target_index
  277.           target = $game_party.smooth_target_actor(index)
  278.         end
  279.       # 设置对像方的战斗者序列
  280.       @target_battlers = [target]
  281.       # 应用通常攻击效果
  282.       for target in @target_battlers
  283.         target.attack_effect(@active_battler)
  284.       end
  285.       return
  286.     end
  287.     #============================================================
  288.  
  289.     # 如果不是强制行动
  290.     unless @active_battler.current_action.forcing || @result != nil && [] #Eclair
  291.       # 因为 SP 耗尽而无法使用的情况下
  292.       unless @active_battler.skill_can_use?(@skill.id)
  293.         # 清除强制行动对像的战斗者
  294.         $game_temp.forcing_battler = nil
  295.         # 移至步骤 1
  296.         @phase4_step = 1
  297.         return
  298.      end
  299.     end
  300.    if @skill.element_set.include?(20)      and   @active_battler.mp < 100
  301.     # return false
  302.     $game_temp.forcing_battler = nil
  303.         # 移至步骤 1
  304.         @phase4_step = 1
  305.         return
  306.      end
  307.     @result = [] #Eclair
  308.     # 消耗 SP
  309.     @active_battler.sp -= @skill.sp_cost
  310.    if @skill.element_set.include?(20) #★,消耗MP储存条
  311.            @active_battler.mp -= 100
  312.            @active_battler.mp += 1
  313.          end
  314.  
  315.  
  316.     # 刷新状态窗口
  317.     @status_window.refresh
  318.     # 在帮助窗口显示特技名
  319.     @help_window.set_text(@skill.name, 1)
  320.     # 设置动画 ID
  321.     @animation1_id = @skill.animation1_id
  322.     @animation2_id = @skill.animation2_id
  323.     # 设置公共事件 ID
  324.     @common_event_id = @skill.common_event_id
  325.     # 设置对像侧战斗者
  326.     set_target_battlers(@skill.scope)
  327.     # 应用特技效果
  328.     for target in @target_battlers
  329.       target.skill_effect(@active_battler, @skill)
  330.     end
  331.   end
  332. end
  333. #==============================================================================
  334. #   组合键连续特技系统 By 绿发的Eclair
  335. #==============================================================================


或且你研究一下这个脚本..
作者: taeckle    时间: 2019-7-21 17:19
soulsaga 发表于 2019-7-19 11:08
#==============================================================================
#   组合键连续特技 ...

大神你再帮我看看这个帖子是不是也跟咱的这个问题有联系:

https://rpg.blue/forum.php?mod=v ... p;page=1#pid2707512
作者: 灯笼菜刀王    时间: 2019-8-1 10:15
本帖最后由 灯笼菜刀王 于 2019-8-2 18:07 编辑

用公共事件就行了, 简单直接绿色无污染

  1. a=$scene.instance_variable_get(
  2. :@active_battler)
  3. b=$scene.instance_variable_get(
  4. :@target_battlers)
  5. return if b.all? {|i| !i.exist?}
  6. if rand(2) == 0
  7.   a.current_action.kind = 1
  8.   a.current_action.skill_id = 101
  9.   $game_temp.forcing_battler = a
  10. end
复制代码


把这段复制到公共事件里, 然后让100号技能调用它就OK了, 敌我都有效

不过之前还要做一件事, 到 game_actor 的脚本里, 找到 def skill_can_use? 这段, 它是用来限制"角色没学会的技能不能使用", 直接删了就行
作者: taeckle    时间: 2019-8-1 20:36
灯笼菜刀王 发表于 2019-8-1 10:15
用公共事件就行了, 简单直接绿色无污染


多谢大神!
作者: taeckle    时间: 2019-8-2 07:59
灯笼菜刀王 发表于 2019-8-1 10:15
用公共事件就行了, 简单直接绿色无污染

大神请问下在哪让100号攻击技能调用你写的这个公共事件啊?phase4_step3?
你这个脚本貌似没确定释放技能的目标就是上一次行动的目标啊?
作者: taeckle    时间: 2019-8-2 12:38
灯笼菜刀王 发表于 2019-8-1 10:15
用公共事件就行了, 简单直接绿色无污染

报告大神,发现了一个BUG,当使用第100号技能后把怪全部打完时会卡死..动不了了。。
作者: taeckle    时间: 2019-8-2 15:31
taeckle 发表于 2019-8-2 12:38
报告大神,发现了一个BUG,当使用第100号技能后把怪全部打完时会卡死..动不了了。。 ...


大神就是大神,判定敌方或是我方是否还有人存在用3行就表达出来了,我这边用for语句写了半页纸..



作者: taeckle    时间: 2019-8-3 00:48
灯笼菜刀王 发表于 2019-8-1 10:15
用公共事件就行了, 简单直接绿色无污染

报告大神,又发现了一个问题,目前的脚本貌似当敌方第1个NPC死亡后就不再触发连击了...
作者: guoxiaomi    时间: 2019-8-10 14:24
看看我签名里的《战斗调用公共事件》吧~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1