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

Project1

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

[讨论] RGSS1的bug真是捉不完啊

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23201
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

跳转到指定楼层
1
发表于 2020-4-26 05:02:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这个bug藏得非常隐蔽,默认数据库中没有狂暴,而混乱是2回合25%解除……不是战斗测试根本发现不了

混乱/狂暴状态最后一回合角色强制不行动bug……

默认的战斗系统中,能不能输入的判定是看身上的状态,而在输入前会把全队的动作清除为“不行动”,如果这个队员是狂暴或者混乱,那么它就无法输入指令,也就是默认将要执行“不行动”动作。
然后在phase4 step1中,会按照回合来解除状态,如果是最后一个判定回合,那么这个状态就给解除掉了
到了phase4 step2对动作进行修正的时候,因为角色身上没有这个状态了,就不会再去进行普通攻击敌人/同伴的动作,然后这个回合就强制不行动了……
但敌人侧的情况却不是这样,因为敌人的动作生成是在start_phase4里面做的(也就是角色全部输入完指令之后),并且make_action方法中只有对不行动限制的处理,也就是如果敌人行动时,部分限制行动的状态消失了,将正常执行原来会生成的动作。这样一来,你因为在输入指令的时候发现敌人比如中着沉默,没去管,然后等敌人行动时沉默刚好解除,一个大魔法全灭你……

这个bug非常不好修
首先是逻辑正确化,也就是在phase4 step2进行动作修正时,角色身上的任何限制状态都是不能解除的
然后是规则公平化,考虑到不能使用魔法这种状态,当敌人中了沉默的时候,那么最多一直到make_skill_action_result之前,这个沉默都是不能解除的,不然敌人会通过skill_can_use?的判定,大招全灭你。但你中了沉默在当回合是输入不了魔法指令的。

首先想到改remove_states_auto的执行时机:
这个remove_states_auto到底在什么情况下执行呢
我们注意到凡是@phase4_step在以下几种情况下会被设定为1:
1. start_phase4 主回合开始时
2. update_p4s2中,当因为无法行动的限制清除了行动时
3. make_basic_action_result中,p4s2执行基本的结果是“不行动”时
4. make_skill_action_result中,p4s2执行特技的结果是“无法通过判定(沉默、SP耗尽)”时
5. make_item_action_result中,p4s2执行物品的结果是物品不够了时
6. update_p4s6中,当执行完毕主效果,预约调用技能公共事件或物品公共事件时
当@phase4_step被设定为1时,战斗引擎回主控,执行update_p4s1,主要功能就是切到下一个要行动的战斗者。
所以从@active_battler的视角来看,一个完整流程中的@phase4_step变化其实是2-3-4-5-6-1,而不是1-2-3-4-5-6的。
根据上面的讨论,我们需要在@phase4_step被设定为1后,但还没有执行update_p4s1时(此时为前一个战斗者行动完毕),去更改前一个战斗者的状态
但是这样一改,就会有另一个问题,假如这种状态(其实也包括任何状态)是在行动中自己给自己加上的……那就会多减了一个回合……

其次想到的是改make_actions的规则,模拟人输入的过程(也就是增加对inputable?和沉默等的判定,不合法的不让选)。角色侧也是添加一个make_actions在不能输入的情况下生成攻击动作
但是又有新bug来:假如敌人的设定是没有普通攻击的,你让它混乱了,它在make_actions里面普攻敌人同伴。但是等到行动的时候混乱解除了,restriction变成了0,它会变成普攻你,相当于执行了一个非法动作了……

还没想好有什么好的改法……

评分

参与人数 1+1 收起 理由
taeckle + 1 大神威武!

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2020-4-26 05:54:01 | 只看该作者
反向操作,改成即使是沉默或者不能行动,也可以输入指令怎么样?

点评

+1  发表于 2020-4-26 10:14
你已经Lv3了……还是少水几贴吧  发表于 2020-4-26 09:08
你已经Lv3了……还是少水几贴吧  发表于 2020-4-26 07:56
6666666  发表于 2020-4-26 07:49
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

3
发表于 2020-4-26 11:12:31 手机端发表。 | 只看该作者
全程在想象楼主的表情“大招全灭你”!哈哈哈。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4598
在线时间
1206 小时
注册时间
2016-4-7
帖子
982

开拓者

4
发表于 2020-4-26 12:02:56 | 只看该作者
大部分的bug都是偷懒造成的(比如之前rb提过的战斗事件刷新状态窗口导致卡顿的bug) 甚至rm一贯的一些糟糕的代码写法也是偷懒造成的(比如至今不愿意提供基础的ui组件而是window那套套来套去的一把梭)
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39028
在线时间
5722 小时
注册时间
2006-11-10
帖子
6621
5
发表于 2020-4-26 21:38:42 | 只看该作者
本帖最后由 灯笼菜刀王 于 2020-4-26 21:41 编辑

应该有人发现了, 我方角色战斗不能后, 下回合复活起来还要傻站一回合.....  理由和这个BUG一样~~

曾经看过一个作品, 作者简单粗暴的改为"被控制了也一样可以进行指令输入",这到不失为一个好方法, 就是躺地上也可以输入....被吐槽不少就是了, 感觉一些守旧派难以接受吧

如果把状态判断放到 start_phase2 呢, 先全员一起蹦毒伤害,然后状态结算后,再开始玩家输入回合, 就可以规避这个BUG了吧, 不过这样一来速度低的人的持续回合0的控制技能就完全废了就是了... 偏偏"击晕"这种又是低敏高力角色的常用招式

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2822
在线时间
396 小时
注册时间
2015-8-8
帖子
443

R考场第七期纪念奖

6
发表于 2020-4-27 11:35:25 | 只看该作者
从狂暴中苏醒会楞一会,因此不是bug是feature,此贴完结

评分

参与人数 1+1 收起 理由
enghao_lim + 1 我平时就是这样和别人解释bug的 XD~.

查看全部评分

旧作《邵彦朝的大冒险》下载

默默无闻的论坛观察者
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
7
发表于 2020-4-28 15:52:19 | 只看该作者
给每个角色都安上了各自的phase与step表示没有问题飘过,解除后再输入行动即可……
你说默认战斗?已经不存在了……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23201
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

8
 楼主| 发表于 2021-3-2 01:40:34 | 只看该作者
(部分)解决了,实现了敌我公平化。因为可以设置为机率消散,所以认为最后一回合强制不行动不是bug。但现在敌人方的最后一回合也会强制不行动或者不进行不合法的行动。
(更新在核心插件1.6版中)
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 18:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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