设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4170|回复: 21
打印 上一主题 下一主题

[讨论] 脚本小白学脚本@简单技能连击效果

[复制链接]

Lv2.观梦者

梦石
0
星屑
853
在线时间
85 小时
注册时间
2005-11-21
帖子
86
跳转到指定楼层
1
发表于 2021-12-10 19:33:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 黑夜守望者 于 2021-12-12 20:12 编辑

警告:后来发现本脚本修改有问题,暂时先不要用,仅供学习
有关连击推荐使用guoxiaomi大人的战斗公共事件脚本:
https://rpg.blue/thread-399295-1-13.html


看到论坛有人提问,自己琢磨了一个解决方法,不知道有没BUG
修改Scene_Battle 4里面的3处内容:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 开始主回合
  3.   #--------------------------------------------------------------------------
  4.   def start_phase4
  5.     #+++++++++++++++++++++++++++++++++++++
  6.     #连击次数初始化
  7.     @times = 0
  8.     @has_act = 0
  9.     #+++++++++++++++++++++++++++++++++++++++
  10.     # 转移到回合 4
  11.     @phase = 4
  12.     # 回合数计数
  13.     $game_temp.battle_turn += 1
  14.     # 搜索全页的战斗事件
  15.     for index in 0...$data_troops[@troop_id].pages.size
  16.       # 获取事件页
  17.       page = $data_troops[@troop_id].pages[index]
  18.       # 本页的范围是 [回合] 的情况下
  19.       if page.span == 1
  20.         # 设置已经执行标志
  21.         $game_temp.battle_event_flags[index] = false
  22.       end
  23.     end
  24.     # 设置角色为非选择状态
  25.     @actor_index = -1
  26.     @active_battler = nil
  27.     # 有效化同伴指令窗口
  28.     @party_command_window.active = false
  29.     @party_command_window.visible = false
  30.     # 无效化角色指令窗口
  31.     @actor_command_window.active = false
  32.     @actor_command_window.visible = false
  33.     # 设置主回合标志
  34.     $game_temp.battle_main_phase = true
  35.     # 生成敌人行动
  36.     for enemy in $game_troop.enemies
  37.       enemy.make_action
  38.     end
  39.     # 生成行动顺序
  40.     make_action_orders
  41.     # 移动到步骤 1
  42.     @phase4_step = 1
  43.   end

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成特技行动结果
  3.   #--------------------------------------------------------------------------
  4.   def make_skill_action_result
  5.     # 获取特技
  6.     @skill = $data_skills[@active_battler.current_action.skill_id]
  7.     # 如果不是强制行动
  8.     unless @active_battler.current_action.forcing
  9.       # 因为 SP 耗尽而无法使用的情况下
  10.       unless @active_battler.skill_can_use?(@skill.id)
  11.         # 清除强制行动对像的战斗者
  12.         $game_temp.forcing_battler = nil
  13.         # 移至步骤 1
  14.         @phase4_step = 1
  15.         return
  16.       end
  17.     end
  18.     # 消耗 SP
  19.     @active_battler.sp -= @skill.sp_cost
  20.     # 刷新状态窗口
  21.     @status_window.refresh
  22.     # 在帮助窗口显示特技名
  23.     @help_window.set_text(@skill.name, 1)
  24.     # 设置动画 ID
  25.     @animation1_id = @skill.animation1_id
  26.     @animation2_id = @skill.animation2_id
  27.     # 设置公共事件 ID
  28.     @common_event_id = @skill.common_event_id
  29.     # 设置对像侧战斗者
  30.     set_target_battlers(@skill.scope)
  31.     # 应用特技效果
  32.     for target in @target_battlers
  33.       target.skill_effect(@active_battler, @skill)
  34.     end
  35.     #++++++++++++++++++++++++++++++++++++
  36.      if @skill.id == 82 && @has_act == 0# 连击特技id&&每步只赋值一次,如果多个连击技能就用case分歧
  37.        @times = 2  #连击次数(攻击@times+1次)
  38.      end
  39.      #+++++++++++++++++++++++++++++++++++
  40.   end

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  3.   #--------------------------------------------------------------------------
  4.   def update_phase4_step6
  5.     # 清除强制行动对像的战斗者
  6.     $game_temp.forcing_battler = nil
  7.     # 公共事件 ID 有效的情况下
  8.     if @common_event_id > 0
  9.       # 设置事件
  10.       common_event = $data_common_events[@common_event_id]
  11.       $game_system.battle_interpreter.setup(common_event.list, 0)
  12.     end
  13.     # 移至步骤 1
  14. #++++++++++++++++++++++++++++++++++++++++++++++++
  15.     if @times != 0
  16.       @times -= 1
  17.       @has_act = 1
  18.     for enemy in $game_troop.enemies
  19.       if enemy.exist?     #敌人全部消灭就停止连击
  20.         @phase4_step = 2
  21.       else
  22.         @phase4_step = 1
  23.       end
  24.     end
  25.     else
  26.       @phase4_step = 1
  27.     end
  28. #++++++++++++++++++++++++++++++++++++++++++
  29. #   @phase4_step = 1
  30.   end

这样修改以后,ID为82的技能就能连续攻击3次
+号注释里面的是添加的内容

Lv2.观梦者

梦石
0
星屑
853
在线时间
85 小时
注册时间
2005-11-21
帖子
86
2
 楼主| 发表于 2021-12-10 20:27:01 | 只看该作者
本帖最后由 黑夜守望者 于 2021-12-10 20:50 编辑

另外提问者似乎需要连击的时候是随机目标的,于是再改这个地方:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 设置物品或特技对像方的战斗者
  3.   #     scope : 特技或者是物品的范围
  4.   #--------------------------------------------------------------------------
  5.   def set_target_battlers(scope)
  6.     # 行动方的战斗者是敌人的情况下
  7.     if @active_battler.is_a?(Game_Enemy)
  8.       # 效果范围分支
  9.       case scope
  10.       when 1  # 敌单体
  11.         index = @active_battler.current_action.target_index
  12.         @target_battlers.push($game_party.smooth_target_actor(index))
  13.       when 2  # 敌全体
  14.         for actor in $game_party.actors
  15.           if actor.exist?
  16.             @target_battlers.push(actor)
  17.           end
  18.         end
  19.       when 3  # 我方单体
  20.         index = @active_battler.current_action.target_index
  21.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  22.       when 4  # 我方全体
  23.         for enemy in $game_troop.enemies
  24.           if enemy.exist?
  25.             @target_battlers.push(enemy)
  26.           end
  27.         end
  28.       when 5  # 我方单体 (HP 0)
  29.         index = @active_battler.current_action.target_index
  30.         enemy = $game_troop.enemies[index]
  31.         if enemy != nil and enemy.hp0?
  32.           @target_battlers.push(enemy)
  33.         end
  34.       when 6  # 我方全体 (HP 0)
  35.         for enemy in $game_troop.enemies
  36.           if enemy != nil and enemy.hp0?
  37.             @target_battlers.push(enemy)
  38.           end
  39.         end
  40.       when 7  # 使用者
  41.         @target_battlers.push(@active_battler)
  42.       end
  43.     end
  44.     # 行动方的战斗者是角色的情况下
  45.     if @active_battler.is_a?(Game_Actor)
  46.       # 效果范围分支
  47.       case scope
  48.       when 1  # 敌单体
  49. #++++++++++++++++++++++++++++++++++++++++++++++++
  50.        if @has_act  &&  @skill_actor ==  @active_battler.id        #连击中判定&判定连击使用者
  51.          index = rand($game_troop.enemies.size)
  52.         else
  53.          index = @active_battler.current_action.target_index  
  54.        end
  55. #+++++++++++++++++++++++++++++++++++++++++++++++++
  56. #        index = @active_battler.current_action.target_index
  57.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  58.       when 2  # 敌全体
  59.         for enemy in $game_troop.enemies
  60.           if enemy.exist?
  61.             @target_battlers.push(enemy)
  62.           end
  63.         end
  64.       when 3  # 我方单体
  65.         index = @active_battler.current_action.target_index
  66.         @target_battlers.push($game_party.smooth_target_actor(index))
  67.       when 4  # 我方全体
  68.         for actor in $game_party.actors
  69.           if actor.exist?
  70.             @target_battlers.push(actor)
  71.           end
  72.         end
  73.       when 5  # 我方单体 (HP 0)
  74.         index = @active_battler.current_action.target_index
  75.         actor = $game_party.actors[index]
  76.         if actor != nil and actor.hp0?
  77.           @target_battlers.push(actor)
  78.         end
  79.       when 6  # 我方全体 (HP 0)
  80.         for actor in $game_party.actors
  81.           if actor != nil and actor.hp0?
  82.             @target_battlers.push(actor)
  83.           end
  84.         end
  85.       when 7  # 使用者
  86.         @target_battlers.push(@active_battler)
  87.       end
  88.     end
  89.   end

然后make_skill_action_result要装入一个表示连击特技使用者的变量
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成特技行动结果
  3.   #--------------------------------------------------------------------------
  4.   def make_skill_action_result
  5.     # 获取特技
  6.     @skill = $data_skills[@active_battler.current_action.skill_id]
  7.     # 如果不是强制行动
  8.     unless @active_battler.current_action.forcing
  9.       # 因为 SP 耗尽而无法使用的情况下
  10.       unless @active_battler.skill_can_use?(@skill.id)
  11.         # 清除强制行动对像的战斗者
  12.         $game_temp.forcing_battler = nil
  13.         # 移至步骤 1
  14.         @phase4_step = 1
  15.         return
  16.       end
  17.     end
  18.     # 消耗 SP
  19.     @active_battler.sp -= @skill.sp_cost
  20.     # 刷新状态窗口
  21.     @status_window.refresh
  22.     # 在帮助窗口显示特技名
  23.     @help_window.set_text(@skill.name, 1)
  24.     # 设置动画 ID
  25.     @animation1_id = @skill.animation1_id
  26.     @animation2_id = @skill.animation2_id
  27.     # 设置公共事件 ID
  28.     @common_event_id = @skill.common_event_id
  29.     # 设置对像侧战斗者
  30.     set_target_battlers(@skill.scope)
  31.     # 应用特技效果
  32.     for target in @target_battlers
  33.       target.skill_effect(@active_battler, @skill)
  34.     end
  35.     #++++++++++++++++++++++++++++++++++++
  36.      if @skill.id == 82 && @has_act == 0# 连击特技id&&每步只赋值一次,如果多个连击技能就用case分歧
  37.        @times = 2  #连击次数(攻击@times+1次)
  38.        @skill_actor = @active_battler.id   #记录使用连击的角色id
  39.      end
  40.      #+++++++++++++++++++++++++++++++++++
  41.   end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4654
在线时间
431 小时
注册时间
2016-5-11
帖子
140
3
发表于 2021-12-11 12:15:30 | 只看该作者
感谢分享,顶支持一下
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
7517
在线时间
3542 小时
注册时间
2011-7-21
帖子
2284

极短24参与极短23参与极短22参与极短21参与

4
发表于 2021-12-11 21:02:32 | 只看该作者
试了一下,直接报错,无论是新工程还是改过的工程
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
853
在线时间
85 小时
注册时间
2005-11-21
帖子
86
5
 楼主| 发表于 2021-12-11 21:04:19 | 只看该作者
无忧谷主幻 发表于 2021-12-11 21:02
试了一下,直接报错,无论是新工程还是改过的工程

嗯,这个不完善,我还在进一步优化。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
7517
在线时间
3542 小时
注册时间
2011-7-21
帖子
2284

极短24参与极短23参与极短22参与极短21参与

6
发表于 2021-12-11 21:11:41 | 只看该作者
黑夜守望者 发表于 2021-12-11 21:04
嗯,这个不完善,我还在进一步优化。

不知是否可以实现连击时不消耗MP
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
853
在线时间
85 小时
注册时间
2005-11-21
帖子
86
7
 楼主| 发表于 2021-12-12 14:54:11 | 只看该作者
无忧谷主幻 发表于 2021-12-11 21:11
不知是否可以实现连击时不消耗MP

应该是可以,但是我也是脚本小白,容我慢慢研究研究
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13647
在线时间
3853 小时
注册时间
2013-7-18
帖子
2314
8
发表于 2021-12-12 17:38:10 | 只看该作者
不是有连击脚本吗?何必鱼刺辛苦...
山岚野人,快人快语,礼数不周,还望海涵....
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
853
在线时间
85 小时
注册时间
2005-11-21
帖子
86
9
 楼主| 发表于 2021-12-12 18:09:21 | 只看该作者
无忧谷主幻 发表于 2021-12-11 21:11
不知是否可以实现连击时不消耗MP

我发现版主大人有可以实现连击效果的脚本,你不妨参考一下
https://rpg.blue/thread-399295-1-13.html
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
7517
在线时间
3542 小时
注册时间
2011-7-21
帖子
2284

极短24参与极短23参与极短22参与极短21参与

10
发表于 2021-12-13 00:38:53 | 只看该作者
黑夜守望者 发表于 2021-12-12 18:09
我发现版主大人有可以实现连击效果的脚本,你不妨参考一下
https://rpg.blue/thread-399295-1-13.html ...

但是如果玩家能自由调整队员的位置,似乎就没用了

点评

哦..我也报错了..已修正脚本..试试?  发表于 2021-12-16 15:44
我测试过没报错..不过不知道你有没用了什么战斗脚本...  发表于 2021-12-16 15:02
确定改过了吗?用了以后还是报错了  发表于 2021-12-15 23:25
?我有写了用法吧?  发表于 2021-12-15 14:15
我试试看,如果是概率连击要怎么做?  发表于 2021-12-14 22:40
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 11:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表