#-------------------------------------------------------------------------- # ● 开始主回合 #-------------------------------------------------------------------------- def start_phase4 #+++++++++++++++++++++++++++++++++++++ #连击次数初始化 @times = 0 @has_act = 0 #+++++++++++++++++++++++++++++++++++++++ # 转移到回合 4 @phase = 4 # 回合数计数 $game_temp.battle_turn += 1 # 搜索全页的战斗事件 for index in 0...$data_troops[@troop_id].pages.size # 获取事件页 page = $data_troops[@troop_id].pages[index] # 本页的范围是 [回合] 的情况下 if page.span == 1 # 设置已经执行标志 $game_temp.battle_event_flags[index] = false end end # 设置角色为非选择状态 @actor_index = -1 @active_battler = nil # 有效化同伴指令窗口 @party_command_window.active = false @party_command_window.visible = false # 无效化角色指令窗口 @actor_command_window.active = false @actor_command_window.visible = false # 设置主回合标志 $game_temp.battle_main_phase = true # 生成敌人行动 for enemy in $game_troop.enemies enemy.make_action end # 生成行动顺序 make_action_orders # 移动到步骤 1 @phase4_step = 1 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 #++++++++++++++++++++++++++++++++++++ if @skill.id == 82 && @has_act == 0# 连击特技id&&每步只赋值一次,如果多个连击技能就用case分歧 @times = 2 #连击次数(攻击@times+1次) end #+++++++++++++++++++++++++++++++++++ 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 #++++++++++++++++++++++++++++++++++++++++++++++++ if @times != 0 @times -= 1 @has_act = 1 for enemy in $game_troop.enemies if enemy.exist? #敌人全部消灭就停止连击 @phase4_step = 2 else @phase4_step = 1 end end else @phase4_step = 1 end #++++++++++++++++++++++++++++++++++++++++++ # @phase4_step = 1 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 # 敌单体 #++++++++++++++++++++++++++++++++++++++++++++++++ if @has_act && @skill_actor == @active_battler.id #连击中判定&判定连击使用者 index = rand($game_troop.enemies.size) else index = @active_battler.current_action.target_index end #+++++++++++++++++++++++++++++++++++++++++++++++++ # 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 #++++++++++++++++++++++++++++++++++++ if @skill.id == 82 && @has_act == 0# 连击特技id&&每步只赋值一次,如果多个连击技能就用case分歧 @times = 2 #连击次数(攻击@times+1次) @skill_actor = @active_battler.id #记录使用连击的角色id end #+++++++++++++++++++++++++++++++++++ end
无忧谷主幻 发表于 2021-12-11 21:02
试了一下,直接报错,无论是新工程还是改过的工程
黑夜守望者 发表于 2021-12-11 21:04
嗯,这个不完善,我还在进一步优化。
无忧谷主幻 发表于 2021-12-11 21:11
不知是否可以实现连击时不消耗MP
无忧谷主幻 发表于 2021-12-11 21:11
不知是否可以实现连击时不消耗MP
黑夜守望者 发表于 2021-12-12 18:09
我发现版主大人有可以实现连击效果的脚本,你不妨参考一下
https://rpg.blue/thread-399295-1-13.html ...
class Game_Temp #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_accessor :连击FLAG def 连击FLAG;return @连击FLAG||=false;end end module RPG class Skill attr_accessor :连击 attr_accessor :desc attr_accessor :几率 def 连击;return @连击||=0;end def description description = @description.split(/@/)[0] return description != nil ? description : '' end def desc desc = @description.split(/@/)[1] return desc != nil ? desc.to_i : 0 end def 几率 desc = @description.split(/@/)[2] return desc != nil ? desc.to_i : 0 end end end #============================================================================== # ■ Scene_Battle (分割定义 4) #------------------------------------------------------------------------------ # 处理战斗画面的类。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● 刷新画面 (主回合步骤 5 : 显示伤害) #-------------------------------------------------------------------------- alias update_phase4_step5_20211213 update_phase4_step5 def update_phase4_step5 update_phase4_step5_20211213 敌全灭=true for enemy in $game_troop.enemies 敌全灭=false if enemy.exist? end if @active_battler.current_action.skill_id != 0 and !敌全灭 skill=$data_skills[@active_battler.current_action.skill_id].dup @连击||=skill.desc # 移至步骤 2 if @连击 > 0 and skill.几率 > rand(100) @phase4_step = 2 $game_temp.连击FLAG=true end @连击-=1 end end #-------------------------------------------------------------------------- # ● 刷新画面 (主回合步骤 6 : 刷新) #-------------------------------------------------------------------------- alias update_phase4_step6_20211213 update_phase4_step6 def update_phase4_step6 update_phase4_step6_20211213 skill=$data_skills[@active_battler.current_action.skill_id].dup if @active_battler.current_action.skill_id != 0 @连击=nil 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 if $game_temp.连击FLAG $game_temp.连击FLAG=false else @active_battler.sp -= @skill.sp_cost end # 刷新状态窗口 @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 end class Game_Battler #-------------------------------------------------------------------------- # ● 可以使用特技的判定 # skill_id : 特技 ID #-------------------------------------------------------------------------- def skill_can_use?(skill_id) return true if $game_temp.连击FLAG # SP 不足的情况下不能使用 if $data_skills[skill_id].sp_cost > self.sp return false end # 战斗不能的情况下不能使用 if dead? return false end # 沉默状态的情况下、物理特技以外的特技不能使用 if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 return false end # 获取可以使用的时机 occasion = $data_skills[skill_id].occasion # 战斗中的情况下 if $game_temp.in_battle # [平时] 或者是 [战斗中] 可以使用 return (occasion == 0 or occasion == 1) # 不是战斗中的情况下 else # [平时] 或者是 [菜单中] 可以使用 return (occasion == 0 or occasion == 2) end end end
soulsaga 发表于 2021-12-13 23:45
class Game_Temp
#--------------------------------------------------------------------------
# ● ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |