查看: 2155|回复: 21

[随意闲聊] 当你尝试用AI解决关于脚本的疑惑时(答案在最后)

[复制链接]

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2025-7-16 05:25:39 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 无忧谷主幻 于 2025-7-16 08:11 编辑

提问:如果想制作一个让全部伤害减半的状态,该怎么做?
[fold=以下的AI的回答(有点长)]
  1. 要添加“所有伤害减半”的状态,需从状态判定和伤害计算两方面修改代码,具体步骤如下:

  2. 1. 新增状态判定辅助方法

  3. 在 Game_Battler 类中添加一个方法,判断当前是否处于“伤害减半”状态(假设该状态的ID为 X ,需根据实际状态配置修改):

  4. # 判断是否处于伤害减半状态(假设状态ID为5,可自定义)
  5. def damage_half_state?
  6.   states.include?($data_states[5])  # 替换5为实际的状态ID
  7. end
  8.  

  9. 2. 在伤害计算处应用减半效果

  10. 在所有计算伤害的地方(普通攻击、特技、物品、持续伤害)添加判断,若处于该状态则伤害减半。

  11. (1)普通攻击伤害减半( attack_effect 方法)

  12. 在“防御修正”后添加状态判定:

  13. # 原有防御修正
  14. if self.guarding?
  15.   self.damage /= 2
  16. end
  17. # 新增:伤害减半状态判定
  18. if self.damage_half_state? && self.damage > 0
  19.   self.damage /= 2
  20. end
  21.  

  22. (2)特技伤害减半( skill_effect 方法)

  23. 在“防御修正”后添加:

  24. # 原有防御修正
  25. if self.guarding?
  26.   self.damage /= 2
  27. end
  28. # 新增:伤害减半状态判定
  29. if self.damage_half_state? && self.damage > 0
  30.   self.damage /= 2
  31. end
  32.  

  33. (3)物品伤害减半( item_effect 方法)

  34. 在“防御修正”后添加:

  35. # 原有防御修正
  36. if self.guarding?
  37.   recover_hp /= 2
  38. end
  39. # 新增:伤害减半状态判定(物品伤害用recover_hp表示,负数为伤害)
  40. if self.damage_half_state? && recover_hp < 0
  41.   recover_hp /= 2
  42. end
  43.  

  44. (4)持续伤害减半( slip_damage_effect 方法)

  45. 在计算伤害后添加:

  46. # 原有伤害计算
  47. self.damage = self.maxhp / 10
  48. # 新增:伤害减半状态判定
  49. if self.damage_half_state?
  50.   self.damage /= 2
  51. end
  52. # 保留原有的分散处理
  53. if self.damage.abs > 0
  54.   amp = [self.damage.abs * 15 / 100, 1].max
  55.   self.damage += rand(amp+1) + rand(amp+1) - amp
  56. end
  57.  

  58. 3. 注意事项

  59. - 状态ID:需将代码中的 5 替换为实际在数据库中配置的“伤害减半”状态ID。
  60. - 伤害方向:仅对正伤害(受到的伤害)生效,不影响回复效果(如治疗类技能/物品)。
  61. - 叠加逻辑:若与防御状态( guarding? )同时存在,会先触发防御减半,再触发状态减半(即最终为原伤害的1/4),可根据需求调整顺序。

  62. 通过以上修改,当战斗者处于指定状态时,所有受到的伤害(普通攻击、特技、物品、持续伤害)都会减半。
复制代码
[/fold]
当然,实际操纵仅需普通攻击减半和特技伤害减半
[fold=AI回答]
  1. 若只需让普通攻击和特技伤害减半,可按以下方式修改代码(假设“伤害减半”状态ID为5,需替换为实际ID):

  2. 1. 新增状态判定方法

  3. 在 Game_Battler 类中添加判断是否处于伤害减半状态的方法:

  4. # 判断是否处于伤害减半状态(替换5为实际状态ID)
  5. def damage_half_state?
  6.   states.include?($data_states[5])
  7. end
  8.  

  9. 2. 普通攻击伤害减半(修改 attack_effect 方法)

  10. 在“防御修正”后添加状态判定,对伤害减半:

  11. # 原有防御修正
  12. if self.guarding?
  13.   self.damage /= 2
  14. end
  15. # 新增:伤害减半状态判定(仅对正伤害生效)
  16. if self.damage_half_state? && self.damage > 0
  17.   self.damage /= 2
  18. end
  19.  

  20. 3. 特技伤害减半(修改 skill_effect 方法)

  21. 在“防御修正”后添加状态判定,对伤害减半:

  22. # 原有防御修正
  23. if self.guarding?
  24.   self.damage /= 2
  25. end
  26. # 新增:伤害减半状态判定(仅对正伤害生效)
  27. if self.damage_half_state? && self.damage > 0
  28.   self.damage /= 2
  29. end
  30.  

  31. 说明

  32. - 仅对普通攻击( attack_effect )和特技( skill_effect )的正伤害生效(不影响回复类效果)。
  33. - 若与防御状态( guarding? )同时存在,伤害会先经防御减半,再经状态减半(最终为原伤害的1/4)。
  34. - 需将代码中的 5 替换为实际在数据库中配置的“伤害减半”状态ID。
复制代码
[/fold]

马上来测试一下吧
这是正常的伤害
1.png
这是伤害减半时的伤害……减你妹啊!
2.png


至于真的的伤害减半怎么做?姑且试了一下,还是在Game_Battler 3中,分别找到第62行和第147行
  1.         # 防御修正
  2.         if self.guarding?
  3.           self.damage /= 2
  4.         end
  5.       end
复制代码

将其改为
  1.         # 防御修正
  2. if self.guarding? or self.state?(68)
  3.   self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
  4.    end
  5. end
复制代码

3.png

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2025-7-16 07:38:12 | 显示全部楼层
其实很不错了,具体思路都给了,只是一些代码细节错误
比如states里存的是状态的数字id,而不是状态对象,导致它的那个判定是否有伤害减半状态只会返回false
回复 1 0

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2025-7-16 08:24:52 | 显示全部楼层
百里_飞柳 发表于 2025-7-16 07:38
其实很不错了,具体思路都给了,只是一些代码细节错误
比如states里存的是状态的数字id,而不是状态对象, ...

[pre lang="ruby"]if self.guarding? or self.state?(58)
         self.damage /= 2
        end
      end[/pre]
根据上面代码,让AI修改成状态存在并使用防御的情况下,受到的伤害变为四分之一
然后,果然还是不行
[pre lang="ruby"]# 防御修正
if self.guarding? && self.state?(68)
  # 同时满足,伤害变为1/4
  self.damage /= 4
elsif self.guarding? || self.state?(68)
  # 只满足一个,伤害变为1/2
  self.damage /= 2
end[/pre]
最后我让AI将代码整合在一起才解决
(目前测试并没有发现问题)
[pre lang="ruby"]        # 防御修正
if self.guarding? || self.state?(68)
  self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
end
end[/pre]
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2025-7-16 09:29:07 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2025-7-16 09:34 编辑
无忧谷主幻 发表于 2025-7-16 08:24
if self.guarding? or self.state?(58)
         self.damage /= 2
        end


没问题? 你这不就多了个end么

ruby的大数据太少了, 而且XP的RGSS1版本也太低, 所以AI写的并不好用, 还很啰嗦

像你这个, 实际上

self.damage /= 2 if self.guarding?
self.damage /= 2 if self.state?(58)

这样就解决了, 目前AI不会把你输入的问题分别单独处理, 你问"防御且带状态时", 那它一定会用  and 语句来处理, 不懂变通, 摊手
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45692
在线时间
7947 小时
注册时间
2009-7-6
回帖
13335

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2025-7-16 10:00:24 | 显示全部楼层
AI显然是一个程序员辅助开发工具,而不是可以让不懂程序的人写代码的玩意儿。

如果使用者完全不懂程序,首先使用者没法判断AI给出的答案是否正确,或者是否有隐患,
如果是报错或者效果错误还好,要是恰好顺利运行起来了才是灾难,会堆积更多毛病。
其次AI其实并不能很好的得知使用者目前的工程情况,他都是通过“经验学”给出的答案,
而且其大型架构能力目前还比较欠缺。

总而言之就是不要搞错了AI的功能定位,即使是程序员使用AI也是需要人工检查和修改的,如果没有对应能力使用它就是纯帮倒忙
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2025-7-16 19:10:53 | 显示全部楼层
灯笼菜刀王 发表于 2025-7-16 09:29
没问题? 你这不就多了个end么

ruby的大数据太少了, 而且XP的RGSS1版本也太低, 所以AI写的并不好 ...
# 防御修正
if self.guarding? || self.state?(68)
  self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
end
end

这段代码有什么问题吗?我测试了好几次,并没有发生什么问题

点评

否则就像上面黄鸡说的, 错误但是恰好能运行, 等以后发现造成了其他的问题, 那可就难找咯  发表于 2025-7-17 11:37
你复制的这一段是多了个end, 如果脚本还能执行, 那最好检查下end位置是否正确  发表于 2025-7-17 11:36
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2025-7-18 01:21:21 | 显示全部楼层
不知能不能找AI聊个XP用的阵形脚本
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2025-7-18 04:36:45 | 显示全部楼层
灯笼菜刀王 发表于 2025-7-16 09:29
没问题? 你这不就多了个end么

ruby的大数据太少了, 而且XP的RGSS1版本也太低, 所以AI写的并不好 ...

多了一个吗?那我删掉试试
1.png
呃(脚本的最后一行)
2.png

点评

需要检查end的位置是否正确, 毕竟 if a > 0 ; a += 1 ;end ; a += 2 和 if a > 0 ; a += 1 ;a += 2 ; end , 位置不同计算结果就不同,而这个很难查  发表于 2025-7-23 09:38
只是看起来多了1个..但是也得看你的这个全部脚本才知道是不是  发表于 2025-7-18 05:25
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2025-7-18 04:40:14 | 显示全部楼层
soulsaga 发表于 2025-7-18 01:21
不知能不能找AI聊个XP用的阵形脚本

理论上可以,不过写出来的估计会报错,之后就是让AI无尽的修改环节了,甚至最后能不能成还要看运气
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2025-7-18 05:24:01 | 显示全部楼层
无忧谷主幻 发表于 2025-7-18 04:40
理论上可以,不过写出来的估计会报错,之后就是让AI无尽的修改环节了,甚至最后能不能成还要看运气 ...

没事..你可以发出来让大家研究一下
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部