=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
魔法丶小肉包 发表于 2024-4-26 20:16
按照道理来说,并不会存在这种问题
所以你可以全局查找一下以下4个方法,看看有没有别的脚本重定义过
skill ...
魔法丶小肉包 发表于 2024-4-26 20:16
按照道理来说,并不会存在这种问题
所以你可以全局查找一下以下4个方法,看看有没有别的脚本重定义过
skill ...
salt 发表于 2024-5-1 00:22
def skill_conditions_met?(skill)
return false unless hzm_vxa_quickSkill_skill_conditions_met ...
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
魔法丶小肉包 发表于 2024-5-5 17:52
你这脚本都没发完整呢,根据猜测,我觉得差不多是酱紫可以试一下,↓这段放在最下面好了
class Game_Batt ...
魔法丶小肉包 发表于 2024-5-5 17:52
你这脚本都没发完整呢,根据猜测,我觉得差不多是酱紫可以试一下,↓这段放在最下面好了
class Game_Batt ...
salt 发表于 2024-5-6 00:16
那个是让 物品/技能 不消耗回合立即发动
但自动战斗使用这类技能时 不消耗回合不生效
不过那个影响不大
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
# 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
# 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
#============================================================================== # ■ 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[i] = make_action_list.max_by {|action| action.value } if @actions[i] && @actions[i].item i = @actions[i].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
魔法丶小肉包 发表于 2024-5-6 11:59
信息实在有限,我只能根据你说的效果来猜测,你把这段放在最下面试一下,应该来说呢,现在在自动战斗中的 ...
1.4 MB, 下载次数: 0
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |