查看: 1590|回复: 13

[已经过期] 自动战斗与技能冷却脚本的问题?

[复制链接]
梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
发表于 2024-4-26 09:35:04 | 显示全部楼层 |阅读模式

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

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

×
为一些技能增加冷却时间之后
角色的自动战斗出现了空过的毛病
角色有行动次数追加
但因为复读同一个技能导致空过
请问如何去解决呢QAQ
[pre lang="ruby"]=begin #-----------------------------------------------------------------------

●スキル技能冷卻【RGSS3 by Declare War】

スキルに技能冷卻をつける

技能的备注栏里写<冷却时间:n> <クールタイム:n>
使用一次后n回合内不能使用

【事件指令】
$game_temp.loss_cool_time(n)       # 敌我全体CD减少
$game_temp.actor_loss_cool_time(n) # 我方全体CD减少
$game_temp.enemy_loss_cool_time(n) # 敌方全体CD减少

【使用规定】
不需要注明版权和使用报告,自由加工,禁止转载和发布

【版本信息】
v1.2 -提高并用性
v1.1 -从敌人的角度也能适应技能冷却。
v1.0 -公开

=end #-------------------------------------------------------------------------
class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  COOL_TIME = /<冷却时间:(\d+)>/
  #--------------------------------------------------------------------------
  # ● 技能CD的取得
  #--------------------------------------------------------------------------
  def cool_time
    return @cool_time if @cool_time != nil
    @cool_time = note =~ COOL_TIME ? $1.to_i + 1 : false
  end
end

class << BattleManager
  #--------------------------------------------------------------------------
  # ● 战斗结束(别名)
  #--------------------------------------------------------------------------
  alias cool_time_battle_end battle_end
  def battle_end(result)
    $game_temp.cool_time_variables_initialize
    cool_time_battle_end(result)
  end
  #--------------------------------------------------------------------------
  # ● 回合结束(别名)
  #--------------------------------------------------------------------------
  alias cool_time_turn_end turn_end
  def turn_end
    $game_temp.loss_cool_time
    cool_time_turn_end
  end
end

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 实例变量
  #--------------------------------------------------------------------------
  attr_accessor :cool_time
  #--------------------------------------------------------------------------
  # ● 对象初始化(别名)
  #--------------------------------------------------------------------------
  alias cool_time_initialize initialize
  def initialize
    cool_time_initialize
    cool_time_variables_initialize
  end
  #--------------------------------------------------------------------------
  # ● 技能冷却的变量的初始化
  #--------------------------------------------------------------------------
  def cool_time_variables_initialize
    @cool_time = Hash.new{|h, k| h[k] = Hash.new(0)}
  end
  #--------------------------------------------------------------------------
  # ● 技能冷卻減少
  #--------------------------------------------------------------------------
  def loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n}}  
  end
  #--------------------------------------------------------------------------
  # ● 只有角色技能CD减少
  #--------------------------------------------------------------------------
  def actor_loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n} if k.actor?}  
  end
  #--------------------------------------------------------------------------
  # ● 敌人技能CD减少
  #--------------------------------------------------------------------------
  def enemy_loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n} if k.enemy?}  
  end

end

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 技能的可用条件检查(别名)
  #--------------------------------------------------------------------------
  alias cool_time_skill_conditions_met? skill_conditions_met?
  def skill_conditions_met?(skill)
    return false if skill_cooling?(skill)
    cool_time_skill_conditions_met?(skill)
  end
end

class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● 技能CD取得
  #--------------------------------------------------------------------------
  def cool_time
    $game_temp.cool_time[self]
  end

  #--------------------------------------------------------------------------
  # ● 技能是否CD中
  #--------------------------------------------------------------------------
  def skill_cooling?(skill)
    skill.cool_time && cool_time[skill.id] > 0
  end
  #--------------------------------------------------------------------------
  # ● 技能/道具的使用(别名)
  #--------------------------------------------------------------------------
  alias cool_time_use_item use_item
  def use_item(item)
    count_cool_time(item)
    cool_time_use_item(item)
  end
  #--------------------------------------------------------------------------
  # ● 技能CD的通用
  #--------------------------------------------------------------------------
  def count_cool_time(skill)
    return if !($game_party.in_battle && RPG::Skill === skill)
    return if !skill.cool_time
    $game_temp.cool_time[self][skill.id] = skill.cool_time
  end

end   
class Window_BattleSkill < Window_SkillList
  #--------------------------------------------------------------------------
  # ● 绘制技能使用成本(alias)
  #--------------------------------------------------------------------------
  alias cool_time_draw_skill_cost draw_skill_cost
  def draw_skill_cost(rect, skill)
    return draw_cool_time(rect, skill) if @actor.skill_cooling?(skill)
    cool_time_draw_skill_cost(rect, skill)
  end
  #--------------------------------------------------------------------------
  # ● 技能冷却的绘制
  #--------------------------------------------------------------------------
  def draw_cool_time(rect, skill)
    change_color(text_color(27), false)
    draw_text(rect, "CD#{@actor.cool_time[skill.id]}", 2)
  end  
end[/pre]
梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2024-4-26 20:16:39 | 显示全部楼层
按照道理来说,并不会存在这种问题
所以你可以全局查找一下以下4个方法,看看有没有别的脚本重定义过
skill_conditions_met?
usable?
usable_skills
make_action_list
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-4-27 13:57:46 | 显示全部楼层
本帖最后由 salt 于 2024-4-27 14:10 编辑
魔法丶小肉包 发表于 2024-4-26 20:16
按照道理来说,并不会存在这种问题
所以你可以全局查找一下以下4个方法,看看有没有别的脚本重定义过
skill ...


确实有别的脚本定义skill_conditions_met?
请问需要如何修改?
我试着移动cd脚本位置到下面
发现还是会复读同一个有cd的技能
但那个技能并不会因为cd存在而无法使用
约等于无cd
但手动还是有cd

点评

先把那段skill_conditions_met?发出来看一下  发表于 2024-4-30 14:13
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-5-1 00:22:20 | 显示全部楼层
魔法丶小肉包 发表于 2024-4-26 20:16
按照道理来说,并不会存在这种问题
所以你可以全局查找一下以下4个方法,看看有没有别的脚本重定义过
skill ...

  def skill_conditions_met?(skill)
    return false unless hzm_vxa_quickSkill_skill_conditions_met?(skill)
    return true unless $game_party.in_battle
    if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
    end
    true
  end
回复

使用道具 举报

梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2024-5-5 17:52:34 | 显示全部楼层
salt 发表于 2024-5-1 00:22
def skill_conditions_met?(skill)
    return false unless hzm_vxa_quickSkill_skill_conditions_met ...

你这脚本都没发完整呢,根据猜测,我觉得差不多是酱紫可以试一下,↓这段放在最下面好了
[pre lang="ruby"]class Game_BattlerBase
  def skill_conditions_met?(skill)
    return false if skill_cooling?(skill)
    return false unless usable_item_conditions_met?(skill) && skill_wtype_ok?(skill) && skill_cost_payable?(skill) && !skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id)
    return true unless $game_party.in_battle
    if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
    end
    true
  end
end[/pre]

点评

先这样试一下看看有没有解决再说  发表于 2024-5-5 17:53
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-5-5 20:19:18 | 显示全部楼层
魔法丶小肉包 发表于 2024-5-5 17:52
你这脚本都没发完整呢,根据猜测,我觉得差不多是酱紫可以试一下,↓这段放在最下面好了
class Game_Batt ...

放最下面试了试 并没有解决
自动战斗依旧会重复读CD状态的技能
还是空过

点评

先问一下,另一个脚本是做什么的呢  发表于 2024-5-5 20:30
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-5-6 00:16:51 | 显示全部楼层
本帖最后由 salt 于 2024-5-6 00:33 编辑
魔法丶小肉包 发表于 2024-5-5 17:52
你这脚本都没发完整呢,根据猜测,我觉得差不多是酱紫可以试一下,↓这段放在最下面好了
class Game_Batt ...


那个是让 物品/技能 不消耗回合立即发动
但自动战斗使用这类技能时 不消耗回合不生效
不过那个影响不大
主要还是自动战斗时一直想连发同一个技能导致的
例如这样
技能1 有8回合cd时间 但伤害最高
技能2 没有cd 但伤害低
但自动战斗好像是在确定回合开始时可用的技能然后选用
在有行动次数增加时 例如3动的情况
回合1 技能1处于可用状态 然后选择的出招就是 技能1 x3
但是技能1有cd 于是实际情况是 技能1 空过 空过
回合2 则是 技能2 x3
预期的效果是
回合1 技能1 技能2 x2
回合2 则是 技能2 x3

回复

使用道具 举报

梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2024-5-6 11:59:05 | 显示全部楼层
本帖最后由 魔法丶小肉包 于 2024-5-6 12:19 编辑
salt 发表于 2024-5-6 00:16
那个是让 物品/技能 不消耗回合立即发动
但自动战斗使用这类技能时 不消耗回合不生效
不过那个影响不大


信息实在有限,我只能根据你说的效果来猜测,你把这段放在最下面试一下,应该来说呢,现在在自动战斗中的时候会自动判断技能是不是在冷却中,如果在冷却中就会继续判断下一个技能,直到获取到某个没有在冷却中的技能然后进行使用操作
但是如果所有技能都在冷却中的话,还是会空过的。
你先测试一下吧,如果还是不行的话请把相关脚本发发全

[pre lang="ruby"]class Game_BattlerBase
  def skill_conditions_met?(skill)
    return false unless usable_item_conditions_met?(skill) && skill_wtype_ok?(skill) && skill_cost_payable?(skill) && !skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id)
    return true unless $game_party.in_battle
    if skill_cooling?(skill) && self.is_a?(Game_Actor)
      return false unless auto_battle?
      skills.each do |i|
        if !skill_cooling?(i)
          skill = i
          break
        end
        return false if i == skills[-1]
      end
    end
    if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
    end
    true
  end
end[/pre]
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-5-6 14:43:03 | 显示全部楼层
本帖最后由 salt 于 2024-5-6 14:46 编辑

[pre lang="ruby"]# coding: utf-8
#===============================================================================
# ■ [hzm]メモ欄拡張共通部分さん+ for RGSS3
#-------------------------------------------------------------------------------
# 2014/09/27 Ru/むっくRu
#-------------------------------------------------------------------------------
#  データベースのメモ欄の情報を読み取るための共通処理.
#  メモ欄の各行に特定もフレーズがついたものだけを取得します.
#
#  鳥小屋.txtのメモ欄を使うスクリプト群を使う場合に必須になります.
#  (※スクリプト名の頭に[hzm]が付いているスクリプト)
#-------------------------------------------------------------------------------
# 【注意】
#  「[hzm]メモ欄拡張共通部分 for RGSS3」の機能を内包しています.
#  このスクリプトを導入する場合は,
#  [hzm]メモ欄拡張共通部分 for RGSS3は導入しないでください.
#-------------------------------------------------------------------------------
# 【旧バージョン([hzm]メモ欄拡張共通部分 for RGSS3)からの仕様変更点】
#  ・メモ欄のヘッダ文字([hzm])の他にも複数指定することを可能に
#    指定のメソッドを呼び出すことで,
#    [hzm]以外のヘッダ文字をつけたものを認識させることを可能に.
#    (僕が)派生スクリプトを作りやすくするのが目的.
#
#  ・同一項目の複数記述に正式対応
#    [hzm]属性耐性:炎,50
#    [hzm]属性耐性:水,100
#    みたいに同じ項目を複数書いても使えるようになります.
#    ※注意:別にこのスクリプトに属性耐性の機能があるわけではないです
#
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2014/09/27 キャッシュが存在しない場合に再生成するように変更
# 2012/06/04 バージョンチェック用メソッド名修正
# 2012/06/04 [hzm]メモ欄拡張共通部分 for RGSS3から派生
#-------------------------------------------------------------------------------

#===============================================================================
# ↓ 以下、スクリプト部 ↓
#===============================================================================

# 旧スクリプト導入時にエラー処理を行う
raise "「[hzm]メモ欄拡張共通部分 for RGSS3」が導入されています.\n「[hzm]メモ欄拡張共通部分 for RGSS3」は既に不要なので,\n削除してください." if defined?(HZM_VXA::Note)

module HZM_VXA
  module Note2
    # ● デフォルトのマークフレーズ
    #    (※変更しないでください)
    DEFAULT_MARK = '[hzm]'
    # ● 「[hzm]メモ欄拡張共通部分 for RGSS3」との互換性を保持するか?
    USE_OLD_STYLE = true
  end
end

module HZM_VXA
  module Note2
    #---------------------------------------------------------------------------
    # ● メモスクリプトのバージョン
    #    .区切りの3つの数字で表現
    #    1桁目:メジャーバージョン(仕様変更=互換性破たん時に変更)
    #    2桁目:マイナーバージョン(機能追加時に変更)
    #    3桁目:パッチバージョン(不具合修正時に変更)
    #---------------------------------------------------------------------------
    VERSION = '3.0.0'
    #---------------------------------------------------------------------------
    # ● バージョン比較処理
    #---------------------------------------------------------------------------
    def self.check_version?(version_str)
      version     = version2array(VERSION)
      req_version = version2array(version_str)
      # メジャーバージョンが要求と一致するか?
      return false unless version[0] == req_version[0]
      # マイナーバージョンが要求より低くないか?
      return false unless version[1] >= req_version[1]
      true
    end
    #---------------------------------------------------------------------------
    # ● バージョン文字列の分解
    #---------------------------------------------------------------------------
    def self.version2array(version_str)
      version_str.split('.').map{|n| n.to_i}
    end
    #---------------------------------------------------------------------------
    # ● ヘッダマーク配列
    #---------------------------------------------------------------------------
    @header_mark = []
    #---------------------------------------------------------------------------
    # ● ヘッダマークの取得
    #---------------------------------------------------------------------------
    def self.header_mark
      @header_mark
    end
    #---------------------------------------------------------------------------
    # ● ヘッダマークの追加
    #---------------------------------------------------------------------------
    def self.add_header_mark(mark_str)
      @header_mark.push(mark_str) unless @header_mark.include?(mark_str)
    end
    #---------------------------------------------------------------------------
    # ● メモ欄の内容を解析
    #---------------------------------------------------------------------------
    def self.setup
      add_header_mark(DEFAULT_MARK)
      list = [
        $data_actors,
        $data_classes,
        $data_skills,
        $data_items,
        $data_weapons,
        $data_armors,
        $data_enemies,
        $data_states,
        $data_tilesets,
      ]
      list.each do |data|
        data.each do |d|
          d.hzm_vxa_note2_init if d
        end
      end
    end
    #---------------------------------------------------------------------------
    # ■ メモ欄を持つクラスに追加するメソッド類
    #---------------------------------------------------------------------------
    module Utils
      #-------------------------------------------------------------------------
      # ● メモ欄のチェック
      #-------------------------------------------------------------------------
      def hzm_vxa_note2_init
        hzm_vxa_note2_clear
        self.note.split(/\r?\n/).each do |line|
          HZM_VXA::Note2.header_mark.each do |mark|
            next unless line.index(mark) == 0
            l = line.sub!(mark, '')
            if l =~ /^([^\:]+)\:(.+)$/
              hzm_vxa_note2_add(mark, $1, $2)
            else
              hzm_vxa_note2_add(mark, l, '')
            end
          end
        end
      end
      #-------------------------------------------------------------------------
      # ● メモ欄情報の追加
      #-------------------------------------------------------------------------
      def hzm_vxa_note2_add(mark, key, str)
        # 文字列として保存
        @hzm_vxa_note2_str[mark][key] ||= []
        @hzm_vxa_note2_str[mark][key].push(str.to_s)
        # カンマ区切りのデータとして保存
        @hzm_vxa_note2_data[mark][key] ||= []
        data = str.split(/\s*\,\s*/).map do |d|
          if d =~ /^\-?\d+$/
            d.to_i
          elsif d =~ /^\-?\d+\.\d+$/
            d.to_f
          else
            d.to_s
          end
        end
        @hzm_vxa_note2_data[mark][key].push(data)
      end
      #-------------------------------------------------------------------------
      # ● メモ欄情報の削除
      #-------------------------------------------------------------------------
      def hzm_vxa_note2_clear
        @hzm_vxa_note2_str = {}
        @hzm_vxa_note2_data = {}
        HZM_VXA::Note2.header_mark.each do |mark|
          @hzm_vxa_note2_str[mark] = {}
          @hzm_vxa_note2_data[mark] = {}
        end
      end
      #-------------------------------------------------------------------------
      # ● メモ内容取得
      #-------------------------------------------------------------------------
      def hzm_vxa_note2_match(mark, keys)
        hzm_vxa_note2_matches(mark, keys).last
      end
      def hzm_vxa_note2_match_str(mark, keys)
        hzm_vxa_note2_matches_str(mark, keys).last
      end
      def hzm_vxa_note2_matches(mark, keys)
        mark ||= HZM_VXA::Note2::DEFAULT_MARK
        ret = []
        keys.each do |key|
          ret += self.hzm_vxa_note2_data[mark][key] if self.hzm_vxa_note2_data[mark].include?(key)
        end
        ret
      rescue => e
        puts "#{$!} - #{$@}"
      end
      def hzm_vxa_note2_matches_str(mark, keys)
        mark ||= HZM_VXA::Note2::DEFAULT_MARK
        ret = []
        keys.each do |key|
          ret += self.hzm_vxa_note2_str[mark][key] if self.hzm_vxa_note2_str[mark].include?(key)
        end
        ret
      end
      def hzm_vxa_note2_data
        hzm_vxa_note2_init unless @hzm_vxa_note2_data
        @hzm_vxa_note2_data
      end
      def hzm_vxa_note2_str
        hzm_vxa_note2_init unless @hzm_vxa_note2_str
        @hzm_vxa_note2_str
      end
    end
  end
end

# メモ欄を持つクラスに機能追加
class RPG::BaseItem
  include HZM_VXA::Note2::Utils
end
class RPG::Tileset
  include HZM_VXA::Note2::Utils
end

# メモ解析
if true
  class << DataManager
    alias hzm_vxa_note2_init init
    def init
      hzm_vxa_note2_init
      HZM_VXA::Note2.setup
    end
  end
end

# 旧スクリプトとの互換性保持
if HZM_VXA::Note2::USE_OLD_STYLE
  module HZM_VXA
    module Note
      #-------------------------------------------------------------------------
      # ● メモスクリプトのバージョン
      #-------------------------------------------------------------------------
      VERSION = 2.20
      #-------------------------------------------------------------------------
      # ● バージョンチェック機構
      #-------------------------------------------------------------------------
      def self.check_version(n)
        (n >= 2 and n < 3)
      end
    end
  end
  module HZM_VXA
    module Note2
      module Utils
        #-----------------------------------------------------------------------
        # ● メモ内容取得
        #-----------------------------------------------------------------------
        def hzm_vxa_note_match(keys)
          hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, keys)
        end
        def hzm_vxa_note(key)
          hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, [key])
        end
        #-----------------------------------------------------------------------
        # ● メモ内容(単一文字列)取得
        #-----------------------------------------------------------------------
        def hzm_vxa_note_str_match(keys)
          hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, keys)
        end
        def hzm_vxa_note_str(key)
          hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, [key])
        end
      end
    end
  end
end[/pre]

[pre lang="ruby"]# coding: utf-8
#===============================================================================
# ■ [hzm]ターン消費無しスキルさん+ for RGSS3
# ※ このスクリプトには「[hzm]メモ欄拡張共通部分さん+ for RGSS3」が必要です
#    「[hzm]メモ欄拡張共通部分 for RGSS3」では動作しません
#-------------------------------------------------------------------------------
# 2014/06/22 Ru/むっくRu
#-------------------------------------------------------------------------------
# 【機能1:ターン消費無しスキル/アイテム】
#  ターンを消費せずに,選択した瞬間に発動するスキルを設定します.
#  「データベース」の「スキル」の「メモ」欄に以下のように記述してください.
#
#  [hzm]ターン消費無し:n
#  または
#  [hzm]即発動:n
#  
#  n の部分は1以上の数値に置き換えてください(例:[hzm]ターン消費無し:1)
#  この数字の部分の回数だけ,1ターン中にこのスキルを使用することができます.
#  (:nの部分を省略した場合、:1と記述した場合と同じになります)
#
#  同様にアイテムにも設定を行うことができます.
#  「データベース」の「アイテム」の「メモ」欄に同様に記述してください.
#-------------------------------------------------------------------------------
# 【機能2:行動順序をスキルごとに反映】
#  デフォルトのシステムだと,例えば2回行動のキャラクターが
#  「通常攻撃(速度補正:0)」,「防御(速度補正:2000)」の
#  2つを選択した場合に,速度補正が低い側(通常攻撃)のほうに統一されてしまい,
#  防御がターンの最初に発動しません.
#
#  このスクリプトでは,ターンの順番をキャラクターごとではなく,
#  そのキャラクターの行動ごとに順番を設定することによって,
#  各行動ごとの速度補正を適用できるようにします.
#
#  例)
#  エリック
#    素早さ: 30 行動:通常攻撃(速度補正:0),防御(速度補正:2000)
#  スライム
#    素早さ:100 行動:通常攻撃(速度補正:0)
#
#  ・デフォルトのシステムの場合
#  スライム通常攻撃→エリック通常攻撃→エリック防御
#
#  ・このスクリプト導入後
#  エリック防御→スライム通常攻撃→エリック通常攻撃
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2014/06/22 通常攻撃にも適用できるように
# 2014/06/07 次回行動アクター取得処理が正常に動いていないのを修正v2
# 2013/07/18 行動終了時に解除される行動制約ステートが解除されないのを修正
# 2013/03/17 エネミーの行動ターン数指定がおかしくなるのを修正。おまけ機能追加。
# 2013/02/16 ターン開始時に行動不能が解除された際にエラー落ちするのを修正
# 2013/01/11 コモンイベント呼び出しでアクターを離脱させるとエラー落ちしていたのを修正
# 2012/10/14 行動回数再計算ON時,エネミーが「逃げる」とエラー落ちしていたのを修正
# 2012/10/09 マップ上でアイテムを使用した際にエラー落ちしていたのを修正
# 2012/10/06 戦闘中にパーティ入れ替えを行った場合にエラー落ちしていたのを修正
#            ステータスウィンドウの更新が正常に行われていなかったのを修正
# 2012/10/05 大幅修正を行いました.
#            新メモスクリプト([hzm]メモ欄拡張共通部分さん+ for RGSS3)用に変更
#            行動回数の再計算機能(アクター/エネミー)を追加
#            1ターン内で使用できる回数の設定を追加
#            「各行動ごとに行動順を設定さん for RGSS3」の機能を内包
# 2012/10/03 行動回数の再計算(暫定)を追加
# 2012/06/01 エネミー用設定を追加
# 2012/04/21 複数回行動するアクターが正常に動作しない不具合を修正
# 2012/04/01 味方の行動不能状態を回復した際に強制終了する不具合を修正
# 2012/03/28 アイテムにも対応
# 2012/01/28 コモンイベント内で「戦闘行動の強制」を使用した際に強制終了するのを修正
# 2012/01/28 コモンイベントの呼び出しが正常に動作しないのを少し修正
# 2012/01/03 ぶっぱ
#-------------------------------------------------------------------------------

#===============================================================================
# ● 設定項目
#===============================================================================
module HZM_VXA
  module QuickSkill
    # ● ターン消費無し行動後に行動回数を再計算する(上級設定)
    #   [効果]
    #   ・エネミーも(疑似的に)ターン消費無しスキルを使用可能に
    #   ・行動回数を変化させるステートを即時反映
    #   [副作用]
    #   ・50%の確率で行動回数増加などの設定が使用不可に
    #     true  : する
    #     false : しない
    CHECK_ACTION_TIMES = false

    # ● オマケ機能:敵の行動パターンのターン数の仕様をVX化
    #    1ターン目(最初のターン)に指定の行動をさせたい場合、
    #    VX Aceでは行動パターンを0ターン目に設定する必要があります。
    #    この設定方法をVX同様の仕様に変更し、
    #    1ターン目の場合は1ターン目に設定できるようにします。
    #    (上級設定に関係なく使用できます)
    #    true  : VX仕様にする
    #    false : 変更しない
    ENEMY_TURN_NORMALIZE = false
  end
end

#===============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#===============================================================================

raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」を導入してください" unless defined?(HZM_VXA::Note2)
raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」のバージョンが一致しません" unless HZM_VXA::Note2.check_version?('3.0.0')

module HZM_VXA
  module QuickSkill
    # メモ欄から読み込む要素名の候補を設定
    QUICK_KEYS = ['ターン消費無し', '即発動',  'QuickSkill']
    #---------------------------------------------------------------------------
    # ● QuickSkill中か?
    #---------------------------------------------------------------------------
    def self.quickSkill?
      @quickSkill
    end
    #---------------------------------------------------------------------------
    # ● 即時行動開始
    #---------------------------------------------------------------------------
    def self.start
      @quickSkill = true
    end
    #---------------------------------------------------------------------------
    # ● 即時行動終了
    #---------------------------------------------------------------------------
    def self.finish
      @quickSkill = false
      # 全てのbattlerのアクションを戻す
      $game_party.hzm_vxa_quickSkill_force_action_reverse
      $game_troop.hzm_vxa_quickSkill_force_action_reverse
    end
    #---------------------------------------------------------------------------
    # ● スキル使用回数のリセット
    #---------------------------------------------------------------------------
    def self.reset_use_count
      $game_party.hzm_vxa_quickSkill_reset_use_count
      $game_troop.hzm_vxa_quickSkill_reset_use_count
    end
    # ターン消費無しアイテム管理対象
    ITEM_COUNT_PARTY = true
  end
end

module BattleManager
  #-----------------------------------------------------------------------------
  # ● 行動順序の作成(再定義)
  #-----------------------------------------------------------------------------
  def self.make_action_orders
    @action_battlers = []
    all_actions = []
    all_members = []
    all_members += $game_party.members unless @surprise
    all_members += $game_troop.members unless @preemptive
    all_members.each do |member|
      next unless member.movable?
      member.make_speed
      member.actions.each {|action| all_actions.push action }
    end
    all_actions.sort!{|a,b| b.speed - a.speed }
    all_actions.each {|action| @action_battlers.push action.subject}
  end
  #-----------------------------------------------------------------------------
  # ● 行動が未選択のアクターを先頭から探す(独自)
  #-----------------------------------------------------------------------------
  def self.hzm_vxa_quickSkill_can_action_actor_before(daemon)
    return false unless $game_party.members.index(daemon)
    for @actor_index in 0..$game_party.members.index(daemon)
      actor = $game_party.members[@actor_index]
      return true if actor.next_command
    end
    false
  end
end

class Game_Unit
  attr_accessor :hzm_vxa_quickSkill_can_use_item
  #-----------------------------------------------------------------------------
  # ● 戦闘開始処理(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_battle_start on_battle_start
  def on_battle_start
    hzm_vxa_quickSkill_on_battle_start
    hzm_vxa_quickSkill_reset_use_count
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の復元(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_force_action_reverse
    members.each {|member| member.hzm_vxa_quickSkill_force_action_reverse }
  end
  #-----------------------------------------------------------------------------
  # ● スキル使用回数のリセット(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_reset_use_count
    members.each {|member| member.hzm_vxa_quickSkill_reset_use_count }
    if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
      @hzm_vxa_quickSkill_can_use_item ||= []
      @hzm_vxa_quickSkill_can_use_item.clear
    end
  end
end

class Game_Battler < Game_BattlerBase
  #-----------------------------------------------------------------------------
  # ● 行動速度の決定(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_make_speed make_speed
  def make_speed
    # 空行動は削除する
    @actions.reject! {|a| a == nil}
    # 元の処理
    hzm_vxa_quickSkill_make_speed
    # アクションを速度順にソート
    @actions.sort! {|a,b| b.speed - a.speed }
  end
  #-----------------------------------------------------------------------------
  # ● スキルの使用可能条件チェック(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_skill_conditions_met? skill_conditions_met?
  def skill_conditions_met?(skill)
    # 元の処理
    return false unless hzm_vxa_quickSkill_skill_conditions_met?(skill)
    # 戦闘中でなければOK
    return true unless $game_party.in_battle
    # 指定回数チェック
    if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
    end
    true
  end
  #-----------------------------------------------------------------------------
  # ● アイテムの使用可能条件チェック(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_item_conditions_met? item_conditions_met?
  def item_conditions_met?(item)
    # 元の処理
    return false unless hzm_vxa_quickSkill_item_conditions_met?(item)
    # 戦闘中でなければOK
    return true unless $game_party.in_battle
    # 指定回数チェック
    if data = item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      cnt = data.first.to_i
      cnt = 1  unless cnt > 0
      if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        return false if cnt > 0 and $game_party.hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
      else
        return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
      end
    end
    true
  end
  #-----------------------------------------------------------------------------
  # ● スキル使用回数リセット(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_reset_use_count
      @hzm_vxa_quickSkill_can_use_skill ||= []
      @hzm_vxa_quickSkill_can_use_skill.clear
      unless HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        @hzm_vxa_quickSkill_can_use_item ||= []
        @hzm_vxa_quickSkill_can_use_item.clear
      end
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の強制(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_force_action force_action
  def force_action(skill_id, target_index)
    @hzm_vxa_quickSkill_actions = HZM_VXA::QuickSkill.quickSkill? ? @actions.clone : nil
    hzm_vxa_quickSkill_force_action(skill_id, target_index)
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の復元(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_force_action_reverse
    return unless @hzm_vxa_quickSkill_actions
    @actions = @hzm_vxa_quickSkill_actions
    @hzm_vxa_quickSkill_actions = nil
  end
  #-----------------------------------------------------------------------------
  # ● スキル/アイテムの使用(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_use_item use_item
  def use_item(item)
    # 戦闘中かどうか?
    if $game_party.in_battle
      # カウント可能か確認
      hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
      # スキル/アイテム使用回数カウント
      @hzm_vxa_quickSkill_can_use_skill.push(item.id) if item.is_a?(RPG::Skill)
      if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
        $game_party.hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
      else
        @hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
      end
    end
    # 元の処理
    hzm_vxa_quickSkill_use_item(item)
  end
end

class Game_Actor < Game_Battler
  #-----------------------------------------------------------------------------
  # ● アクションを先頭に入れ替え(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_swapAction
    tmp = @actions[0]
    @actions[0] = @actions[@action_input_index]
    @actions[@action_input_index] = tmp
  end
end

class Game_Action
  #-----------------------------------------------------------------------------
  # ● 行動速度の計算(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkillEnemy_speed speed
  def speed
    # ターン消費無し行動の行動速度を最速化
    item.speed = 999999 if item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
    # 元の処理
    hzm_vxa_quickSkillEnemy_speed
  end
end

class Scene_Battle < Scene_Base
  #-----------------------------------------------------------------------------
  # ● 情報表示ビューポートの更新(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_update_info_viewport update_info_viewport
  def update_info_viewport
    # 元の処理
    hzm_vxa_quickSkill_update_info_viewport
    # ターン消費無し行動中は非表示に
    move_info_viewport(64)   if @hzm_vxa_quickSkill_active
  end
  #-----------------------------------------------------------------------------
  # ● 次のコマンド入力へ(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_next_command next_command
  def next_command
    # ターン消費無し行動が選択されているか確認・実行
    if @hzm_vxa_quickSkill_skill and
       @hzm_vxa_quickSkill_skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
      # ターン消費無し行動の実行
      hzm_vxa_quickSkill_run
      # 行動を再選択
      if BattleManager.hzm_vxa_quickSkill_can_action_actor_before(@subject) or
          @subject.inputable?
        @subject.prior_command
        return start_actor_command_selection
      end
    end
    # 元の処理
    hzm_vxa_quickSkill_next_command
  end
  #-----------------------------------------------------------------------------
  # ● コマンド[攻撃](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_command_attack command_attack
  def command_attack
    @hzm_vxa_quickSkill_skill = $data_skills[BattleManager.actor.attack_skill_id]
    hzm_vxa_quickSkill_command_attack
  end
  #-----------------------------------------------------------------------------
  # ● スキル[決定](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_skill_ok on_skill_ok
  def on_skill_ok
    @hzm_vxa_quickSkill_skill = @skill_window.item
    hzm_vxa_quickSkill_on_skill_ok
  end
  #-----------------------------------------------------------------------------
  # ● スキル[キャンセル](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_skill_cancel on_skill_cancel
  def on_skill_cancel
    @hzm_vxa_quickSkill_skill = nil
    hzm_vxa_quickSkill_on_skill_cancel
  end
  #-----------------------------------------------------------------------------
  # ● アイテム[決定](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_item_ok on_item_ok
  def on_item_ok
    @hzm_vxa_quickSkill_skill = @item_window.item
    hzm_vxa_quickSkill_on_item_ok
  end
  #-----------------------------------------------------------------------------
  # ● アイテム[キャンセル](エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_on_item_cancel on_item_cancel
  def on_item_cancel
    @hzm_vxa_quickSkill_skill = nil
    hzm_vxa_quickSkill_on_item_cancel
  end
  #-----------------------------------------------------------------------------
  # ● アクターコマンド選択の開始(エイリアス)
  #-----------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_start_actor_command_selection start_actor_command_selection
  def start_actor_command_selection
    hzm_vxa_quickSkill_start_actor_command_selection
    BattleManager.actor.make_actions unless BattleManager.actor.input
  end
  #--------------------------------------------------------------------------
  # ● 強制された戦闘行動の処理(エイリアス)
  #--------------------------------------------------------------------------
  alias hzm_vxa_quickSkill_process_forced_action process_forced_action
  def process_forced_action
    @hzm_vxa_quickSkill_force_action = BattleManager.action_forced?

    # 元の処理
    hzm_vxa_quickSkill_process_forced_action

    @hzm_vxa_quickSkill_force_action = nil
  end
  #-----------------------------------------------------------------------------
  # ● 戦闘行動の処理(再定義)
  #-----------------------------------------------------------------------------
  def process_action
    return if scene_changing?

    # 強制行動の場合は次回アクターを計算しない
    unless @hzm_vxa_quickSkill_force_action
      if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
        HZM_VXA::QuickSkill.re_action_times if @hzm_vxa_quickSkill_re_action_times_flag
        @hzm_vxa_quickSkill_re_action_times_flag = false
      end

      BattleManager.make_action_orders
      @subject = BattleManager.next_subject
    end

    return turn_end unless @subject
    if @subject.current_action
      @subject.current_action.prepare
      if @subject.current_action.valid?
        @status_window.open
        execute_action
      end
      @subject.remove_current_action
    end
    process_action_end unless @subject.current_action
  end

  #-----------------------------------------------------------------------------
  # ● ターン消費無し行動の実行(独自)
  #-----------------------------------------------------------------------------
  def hzm_vxa_quickSkill_run
    return unless @hzm_vxa_quickSkill_skill
    @hzm_vxa_quickSkill_skill = nil
    # 行動の開始
    HZM_VXA::QuickSkill::start
    @actor_command_window.close if @actor_command_window
    @hzm_vxa_quickSkill_active = true
    # 行動アクター,行動内容の設定
    @subject = BattleManager.actor
    @subject.hzm_vxa_quickSkill_swapAction # 選んだ行動を先頭に引きずり出す
    # 行動
    execute_action
    # イベント処理
    process_event
    # おわり
    @subject.hzm_vxa_quickSkill_swapAction # 元の位置に戻す
    HZM_VXA::QuickSkill::finish
    # ウィンドウを戻す
    refresh_status
    @hzm_vxa_quickSkill_active = false
    @actor_command_window.open if @actor_command_window
    @status_window.open if @status_window
    # 行動回数の再計算
    HZM_VXA::QuickSkill.re_action_times if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  end
end

# 行動回数の再計算用 & エネミー行動ターン数正常化 共通処理
if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES or HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE
  class << BattleManager
    #---------------------------------------------------------------------------
    # ● ターン終了(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_turn_end turn_end
    def turn_end
      hzm_vxa_quickSkill_turn_end
      $game_troop.hzm_vxa_quickSkill_increase_turn2
    end
  end

  class Game_Troop < Game_Unit
    attr_reader :hzm_vxa_quickSkill_turn_count
    #---------------------------------------------------------------------------
    # ● クリア(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_clear clear
    def clear
      hzm_vxa_quickSkill_clear
      @hzm_vxa_quickSkill_turn_count = HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE ? 1 : 0
    end
    #---------------------------------------------------------------------------
    # ● クリア(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_increase_turn2
      @hzm_vxa_quickSkill_turn_count += 1
    end
  end

  class Game_Enemy < Game_Battler
    #--------------------------------------------------------------------------
    # ● 行動条件合致判定[ターン数](再定義)
    #--------------------------------------------------------------------------
    def conditions_met_turns?(param1, param2)
      n = $game_troop.hzm_vxa_quickSkill_turn_count
      if param2 == 0
        n == param1
      else
        n > 0 && n >= param1 && n % param2 == param1 % param2
      end
    end
  end
end

# 行動回数の再計算用
if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  module HZM_VXA
    module QuickSkill
      #-------------------------------------------------------------------------
      # ● 行動回数の再計算
      #-------------------------------------------------------------------------
      if CHECK_ACTION_TIMES
        def self.re_action_times
          $game_party.hzm_vxa_quickSkill_re_action_times
          $game_troop.hzm_vxa_quickSkill_re_action_times
        end
      end
    end
  end

  class Game_Unit
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_re_action_times
      members.each {|member| member.hzm_vxa_quickSkill_re_action_times }
    end
  end

  class Game_Actor < Game_Battler
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算
    #---------------------------------------------------------------------------
    if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
      def hzm_vxa_quickSkill_re_action_times
        action_cnt = make_action_times
        @actions.push Game_Action.new(self) while @actions.size < action_cnt
        @actions.pop while @actions.size > action_cnt
      end
    end
  end
  
  class Game_Enemy < Game_Battler
    #---------------------------------------------------------------------------
    # ● 行動回数の再計算(独自)
    #---------------------------------------------------------------------------
    def hzm_vxa_quickSkill_re_action_times
      action_cnt = make_action_times
      make_actions if @actions.size < action_cnt
      @actions.pop while @actions.size > action_cnt
    end
  end
  
  class Scene_Battle < Scene_Base
    #---------------------------------------------------------------------------
    # ● スキル/アイテムの使用(エイリアス)
    #---------------------------------------------------------------------------
    alias hzm_vxa_quickSkill_use_item use_item
    def use_item
      # 元の処理
      hzm_vxa_quickSkill_use_item
      # 行動回数の再計算フラグ(エネミーの場合)
      item = (@subject.enemy? and @subject.current_action) ?
        @subject.current_action.item : nil
      @hzm_vxa_quickSkill_re_action_times_flag =
        (item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS))
    end
  end
end[/pre]


也尝试找了一些别的代码
例如这个是检测tp mp消耗
想要类比一下使用后检测cd

[pre lang="ruby"]#==============================================================================
# ■ RGSS3 RGSS3自动战斗时多次行动的内容调整ver1.01 by星潟
#------------------------------------------------------------------------------
# 自动战斗时,通常会不计其他行动的成本而选择所有行动。
# 导入该脚本时,每次决定行动时关于MP成本和TP成本
# 从原来的MP和TP中减去,决定下一步行动。
# (根据素材脚本的不同,可能会产生其他成本,
#  说到底这里判定的只是默认假定的MP和TP
#  关于这一点,请您谅解。)
# 另外,减去的MP和TP会在行动决定后复原。
# 实际上MP和TP并没有减少。
#
# 这个脚本请导入到vxace_sp1的正下方。
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # 创建自动战斗时的战斗行动
  #--------------------------------------------------------------------------
  def make_auto_battle_actions
    mp_auto_clone = @mp
    tp_auto_clone = @tp
    @actions.size.times do |i|
      @actions = make_action_list.max_by {|action| action.value }
      if @actions && @actions.item
        i = @actions.item
        if i.is_a?(RPG::Skill)
          @mp -= skill_mp_cost(i)
          @tp -= skill_tp_cost(i)
        end
      end
    end
    @mp = mp_auto_clone
    @tp = tp_auto_clone
  end
end[/pre]

点评

测试了一下你发的脚本,发现自动战斗时并没有触发额外回合,但手动战斗是正常的,你是不是还有什么自动战斗相关的脚本没发完?  发表于 2024-5-6 17:03
回复

使用道具 举报

梦石
0
星屑
862
在线时间
94 小时
注册时间
2023-7-26
回帖
12
 楼主| 发表于 2024-5-6 18:56:05 | 显示全部楼层
本帖最后由 salt 于 2024-5-6 19:03 编辑
魔法丶小肉包 发表于 2024-5-6 11:59
信息实在有限,我只能根据你说的效果来猜测,你把这段放在最下面试一下,应该来说呢,现在在自动战斗中的 ...


我发下工程大佬你看看
我怀疑自动战斗的行动生成的问题
就如同它不考虑蓝耗一样
不考虑使用技能后
技能是否还是可用的

Project3.7z

1.4 MB, 下载次数: 0

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部