Project1
标题: 当你尝试用AI解决关于脚本的疑惑时(答案在最后) [打印本页]
作者: 无忧谷主幻 时间: 2025-7-16 05:25
标题: 当你尝试用AI解决关于脚本的疑惑时(答案在最后)
本帖最后由 无忧谷主幻 于 2025-7-16 08:11 编辑
提问:如果想制作一个让全部伤害减半的状态,该怎么做?
以下的AI的回答(有点长)
当然,实际操纵仅需普通攻击减半和特技伤害减半
AI回答
马上来测试一下吧
这是正常的伤害
这是伤害减半时的伤害……减你妹啊!
至于真的的伤害减半怎么做?姑且试了一下,还是在Game_Battler 3中,分别找到第62行和第147行
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- end
复制代码
将其改为
- # 防御修正
- if self.guarding? or self.state?(68)
- self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
- end
- end
复制代码
作者: 百里_飞柳 时间: 2025-7-16 07:38
其实很不错了,具体思路都给了,只是一些代码细节错误
比如states里存的是状态的数字id,而不是状态对象,导致它的那个判定是否有伤害减半状态只会返回false
作者: 无忧谷主幻 时间: 2025-7-16 08:24
if self.guarding? or self.state?(58)
self.damage /= 2
end
end
if self.guarding? or self.state?(58)
self.damage /= 2
end
end
根据上面代码,让AI修改成状态存在并使用防御的情况下,受到的伤害变为四分之一
然后,果然还是不行
# 防御修正
if self.guarding? && self.state?(68)
# 同时满足,伤害变为1/4
self.damage /= 4
elsif self.guarding? || self.state?(68)
# 只满足一个,伤害变为1/2
self.damage /= 2
end
# 防御修正
if self.guarding? && self.state?(68)
# 同时满足,伤害变为1/4
self.damage /= 4
elsif self.guarding? || self.state?(68)
# 只满足一个,伤害变为1/2
self.damage /= 2
end
最后我让AI将代码整合在一起才解决
(目前测试并没有发现问题)
# 防御修正
if self.guarding? || self.state?(68)
self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
end
end
# 防御修正
if self.guarding? || self.state?(68)
self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
end
end
作者: 灯笼菜刀王 时间: 2025-7-16 09:29
本帖最后由 灯笼菜刀王 于 2025-7-16 09:34 编辑
没问题? 你这不就多了个end么
ruby的大数据太少了, 而且XP的RGSS1版本也太低, 所以AI写的并不好用, 还很啰嗦
像你这个, 实际上
self.damage /= 2 if self.guarding?
self.damage /= 2 if self.state?(58)
这样就解决了, 目前AI不会把你输入的问题分别单独处理, 你问"防御且带状态时", 那它一定会用 and 语句来处理, 不懂变通, 摊手
作者: fux2 时间: 2025-7-16 10:00
AI显然是一个程序员辅助开发工具,而不是可以让不懂程序的人写代码的玩意儿。
如果使用者完全不懂程序,首先使用者没法判断AI给出的答案是否正确,或者是否有隐患,
如果是报错或者效果错误还好,要是恰好顺利运行起来了才是灾难,会堆积更多毛病。
其次AI其实并不能很好的得知使用者目前的工程情况,他都是通过“经验学”给出的答案,
而且其大型架构能力目前还比较欠缺。
总而言之就是不要搞错了AI的功能定位,即使是程序员使用AI也是需要人工检查和修改的,如果没有对应能力使用它就是纯帮倒忙
作者: 无忧谷主幻 时间: 2025-7-16 19:10
# 防御修正
if self.guarding? || self.state?(68)
self.damage /= (self.guarding? && self.state?(68)) ? 4 : 2
end
end
这段代码有什么问题吗?我测试了好几次,并没有发生什么问题
作者: soulsaga 时间: 2025-7-18 01:21
不知能不能找AI聊个XP用的阵形脚本
作者: 无忧谷主幻 时间: 2025-7-18 04:36
多了一个吗?那我删掉试试
呃(脚本的最后一行)
作者: 无忧谷主幻 时间: 2025-7-18 04:40
理论上可以,不过写出来的估计会报错,之后就是让AI无尽的修改环节了,甚至最后能不能成还要看运气
作者: soulsaga 时间: 2025-7-18 05:24
没事..你可以发出来让大家研究一下
作者: 无忧谷主幻 时间: 2025-7-18 06:18
不过阵型脚本没有,倒是让AI改了一下真实商店脚本,其实也就是去掉了卖出的功能
然后不出所料的报错了
真实商店改 这是修改之前
作者: soulsaga 时间: 2025-7-18 06:55
本帖最后由 soulsaga 于 2025-7-20 21:33 编辑
就是沒有才要AI写一个..至於能不能用不重要..有个基本的就行
作者: soulsaga 时间: 2025-7-18 06:58
本帖最后由 soulsaga 于 2025-7-21 12:17 编辑
def main
# 生成帮助窗口
@help_window = Window_Help.new
# 生成指令窗口
@command_window = Window_ShopCommand.new
@command_window.commands = ["买", "取消"]#修改成只剩下买和取消
@command_window.refresh
# 生成金钱窗口
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 64
# 生成时间窗口
@dummy_window = Window_Base.new(0, 128, 640, 352)
# 生成购买窗口
@buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
# 生成卖出窗口
@sell_window = Window_ShopSell.new
@sell_window.active = false
@sell_window.visible = false
@sell_window.help_window = @help_window
# 生成数量输入窗口
@number_window = Window_ShopNumber.new
@number_window.active = false
@number_window.visible = false
# 生成状态窗口
@status_window = Window_ShopStatus.new
@status_window.visible = false
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@help_window.dispose
@command_window.dispose
@gold_window.dispose
@dummy_window.dispose
@buy_window.dispose
@sell_window.dispose
@number_window.dispose
@status_window.dispose
end
def main
# 生成帮助窗口
@help_window = Window_Help.new
# 生成指令窗口
@command_window = Window_ShopCommand.new
@command_window.commands = ["买", "取消"]#修改成只剩下买和取消
@command_window.refresh
# 生成金钱窗口
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 64
# 生成时间窗口
@dummy_window = Window_Base.new(0, 128, 640, 352)
# 生成购买窗口
@buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
# 生成卖出窗口
@sell_window = Window_ShopSell.new
@sell_window.active = false
@sell_window.visible = false
@sell_window.help_window = @help_window
# 生成数量输入窗口
@number_window = Window_ShopNumber.new
@number_window.active = false
@number_window.visible = false
# 生成状态窗口
@status_window = Window_ShopStatus.new
@status_window.visible = false
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@help_window.dispose
@command_window.dispose
@gold_window.dispose
@dummy_window.dispose
@buy_window.dispose
@sell_window.dispose
@number_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面 (指令窗口激活的情况下)
#--------------------------------------------------------------------------
def update_command
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口光标位置分支
case @command_window.index
when 0 # 购买
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 窗口状态转向购买模式
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.refresh
@status_window.visible = true
when 2 # 卖出
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 窗口状态转向卖出模式
@command_window.active = false
@dummy_window.visible = false
@sell_window.active = true
@sell_window.visible = true
@sell_window.refresh
when 1 # 取消 改成第2个选项
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 切换到地图画面
$scene = Scene_Map.new
end
return
end
end
class Window_ShopCommand < Window_Selectable
attr_accessor :commands
def commands;return @commands||[];end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (指令窗口激活的情况下)
#--------------------------------------------------------------------------
def update_command
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口光标位置分支
case @command_window.index
when 0 # 购买
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 窗口状态转向购买模式
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.refresh
@status_window.visible = true
when 2 # 卖出
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 窗口状态转向卖出模式
@command_window.active = false
@dummy_window.visible = false
@sell_window.active = true
@sell_window.visible = true
@sell_window.refresh
when 1 # 取消 改成第2个选项
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 切换到地图画面
$scene = Scene_Map.new
end
return
end
end
class Window_ShopCommand < Window_Selectable
attr_accessor :commands
def commands;return @commands||[];end
end
作者: soulsaga 时间: 2025-7-20 21:34
没有回应了呀
作者: 无忧谷主幻 时间: 2025-7-21 05:45
其实我已经放弃弄只能买的真实商店了,另外你的我也试了一下
作者: soulsaga 时间: 2025-7-21 12:18
脚本已修
作者: 无忧谷主幻 时间: 2025-7-24 05:19
啊这
作者: 风吹处阴凉 时间: 2025-8-16 23:09
XP劝退的原因就是这个了,RGSS简直就是上个时代的产物(就跟现在还在写汇编一样的感觉)。语法复杂,结构混乱,没有编辑器支持等等,而且谁也不知道它的默认行为到底是什么...简直了。
所以能用JS就用JS吧(MV/MZ),虽然我也不清楚RPGMaker对JS的支持情况......
反正永远就是这样,越想自定义,就只能越摆脱既有系统。然而摆脱既有系统,又要面临从头开始构建的代价。
希望能不断更新,未来能出现真正方便的RPG游戏制作工具吧。语言换成先进的C#!(最重要的一定要有编辑器支持:VS/JB系列等)
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |