查看: 299|回复: 1

[有事请教] 请问怎么样才能每回合溅射三个

[复制链接]
梦石
0
星屑
312
在线时间
126 小时
注册时间
2010-7-10
回帖
39
发表于 2026-8-27 21:23:21 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 lin2117245 于 2026-8-27 21:33 编辑

请问怎么样才能每回合溅射三个..而不是叠加的.固定每回合溅射三个呢
QQ浏览器截图20260827211531.png
QQ浏览器截图20260827211917.png
QQ浏览器截图20260827211934.png
QQ浏览器截图20260827212032.png
梦石
0
星屑
2874
在线时间
663 小时
注册时间
2012-5-3
回帖
77

开拓者

发表于 前天 01:05 | 显示全部楼层
你遇到的“叠加”问题,主要是因为第 4 步的伤害逻辑是遍历“所有带该状态的敌人”(alive_targets.each),而不是只打“本轮刚选中的 3 个”。
如果状态 17 每回合都会触发一次这个方法,旧目标没消失就会越积越多,导致后续伤害目标不断叠加。要实现“每回合只溅射(命中)固定的最多 3 个,不叠加”,核心是:选人时限制数量,伤害时只打这 3 个。

  1. # ■ 状态25溅射伤害处理(每回合固定最多3个,不叠加伤害目标)
  2. class Game_Troop
  3.   # 对随机最多3个敌人附加状态25,并对本轮选中的敌人造成主角1攻击力的伤害
  4.   def splash_state25_damage
  5.     # 1. 筛选出所有存活的敌人
  6.     alive_targets = @enemies.select { |e| e.hp > 0 }

  7.     # 2. 从存活敌人中随机选取最多3个(不重复)
  8.     pick_count = [3, alive_targets.size].min
  9.     targets_to_add_state = alive_targets.sample(pick_count)

  10.     # 3. 为选中的目标附加状态25(已存在则不重复添加)
  11.     targets_to_add_state.each do |enemy|
  12.       enemy.add_state(25) unless enemy.state?(25)
  13.     end

  14.     # 4. 【关键】只对本轮选中的目标造成伤害(不再遍历所有带状态25的敌人,避免叠加)
  15.     targets_to_add_state.each do |enemy|
  16.       # 获取主角1的基础攻击力
  17.       base_atk = $game_party.actors[0].atk
  18.       # 生成±10%的随机浮动系数(0.9 ~ 1.1)
  19.       fluct = 0.9 + rand * 0.2
  20.       # 计算最终伤害(向下取整,确保为整数)
  21.       dmg = (base_atk * fluct).to_i
  22.       # 保底1点伤害,避免出现0伤
  23.       dmg = [dmg, 1].max

  24.       enemy.hp -= dmg
  25.       enemy.damage = dmg
  26.       enemy.critical = false
  27.       enemy.animation_id = 101
  28.       enemy.damage_pop = true
  29.     end
  30.   end
  31. end
复制代码
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部