本帖最后由 幽冥冥灬 于 2023-2-14 10:52 编辑
RT
spigot 1.12.2,服务器为 RPG,安装了 AttributePlus 作为属性插件。
目前的情况是:玩家走路或切换地图都有极低几率卡假死(这个很难复现),以及切换装备时若同时回血和扣血,依旧会卡假死。
目前BBS上的插件均无效果,因为我这里的玩家的 NBT 数据 getFloat("AbsorptionAmount") 和 getFloat("Health") 均为正常数字,而非 NaN

RT
spigot 1.12.2,服务器为 RPG,安装了 AttributePlus 作为属性插件。
目前的情况是:玩家走路或切换地图都有极低几率卡假死(这个很难复现),以及切换装备时若同时回血和扣血,依旧会卡假死。
目前BBS上的插件均无效果,因为我这里的玩家的 NBT 数据 getFloat("AbsorptionAmount") 和 getFloat("Health") 均为正常数字,而非 NaN
本帖最后由 副耳机 于 2023-2-14 11:02 编辑
你装的假死修复插件 都会有一个NBT前置插件 你需要先装前置插件启动服务器 才能装假死修复插件 不然没效果
可以安装NaNHealthFix 先加入NBTLibrary启动服务器 然后关服 再加入NaNHealthFix
你装的假死修复插件 都会有一个NBT前置插件 你需要先装前置插件启动服务器 才能装假死修复插件 不然没效果
可以安装NaNHealthFix 先加入NBTLibrary启动服务器 然后关服 再加入NaNHealthFix
本帖最后由 幽冥冥灬 于 2023-2-14 11:06 编辑
没用,事实上就是人物抽搐,NBT数据中的 AbsorptionAmount 为非NaN
什么都不装的情况下,重进就行了
副耳机 发表于 2023-2-14 10:58
你装的假死修复插件 都会有一个NBT前置插件 你需要先装前置插件启动服务器 才能装假死修复插件 不然没效果 ...
没用,事实上就是人物抽搐,NBT数据中的 AbsorptionAmount 为非NaN
什么都不装的情况下,重进就行了
幽冥冥灬 发表于 2023-2-14 11:05
没用,事实上就是人物抽搐,NBT数据中的 AbsorptionAmount 为非NaN什么都不装的情况下,重进就行了
...
删除原先的NBTLibrary文件
本帖最后由 幽冥冥灬 于 2023-2-14 11:13 编辑
我现在用的是PowerNBT调出玩家NBT数据,之前已经试过NaNHealthFix了,那个无效。
目前一直都是 Float.valueOf(PowerNBT.getApi().read(player).getFloat("AbsorptionAmount")) 输出为正常数值,而非 NaN
除了人物抽搐外,其余什么都不影响,依旧会被正常击杀、可拾取掉落物品、打开箱子等
我目前想解决的就是这卡假死一样的抽搐问题
副耳机 发表于 2023-2-14 11:06
删除原先的NBTLibrary文件
我现在用的是PowerNBT调出玩家NBT数据,之前已经试过NaNHealthFix了,那个无效。
目前一直都是 Float.valueOf(PowerNBT.getApi().read(player).getFloat("AbsorptionAmount")) 输出为正常数值,而非 NaN
除了人物抽搐外,其余什么都不影响,依旧会被正常击杀、可拾取掉落物品、打开箱子等
我目前想解决的就是这卡假死一样的抽搐问题
看你的描述,所谓的同时设置导致异常很像线程安全问题,但是否导致该问题无法确定,如果你是开发者请尝试 同步设置数值的方法,如果不是反馈作者吧
结冰的离季 发表于 2023-2-14 13:10
看你的描述,所谓的同时设置导致异常很像线程安全问题,但是否导致该问题无法确定,如果你是开发者请尝试 ...
就是死亡的瞬间恢复血量到正值,就会卡出假死状态
你说的是玩家呈现一个死亡的模型,但是并不像传统假死一样呈现无敌状态,是这个意思吗
本帖最后由 Neige 于 2023-2-14 19:20 编辑
我曾经操作healthscale(血条长度)时遇到过这种情况。
比如原版20血,血条长度为10心,我通过setHealthScale将其改变为1心,然后再设置回10心,再设置回1心。
这样客户端方面接收到的信息是:玩家受到9心伤害,玩家受到9心伤害。
从1心变10心的“加血”不会被客户端认知。于是最终客户端认为玩家承受了18心伤害,已经死亡,便呈现出了死亡模型,甚至还会弹一个死亡提示。
但客户端心里知道玩家还是活的,所以玩家运行正常。
你可以从这个方面入手进行研究,具体解决你问题的方法我并不知晓。
幽冥冥灬 发表于 2023-2-14 18:39
yep。
实际上这样并不会触发任何伤害和死亡事件。
我曾经操作healthscale(血条长度)时遇到过这种情况。
比如原版20血,血条长度为10心,我通过setHealthScale将其改变为1心,然后再设置回10心,再设置回1心。
这样客户端方面接收到的信息是:玩家受到9心伤害,玩家受到9心伤害。
从1心变10心的“加血”不会被客户端认知。于是最终客户端认为玩家承受了18心伤害,已经死亡,便呈现出了死亡模型,甚至还会弹一个死亡提示。
但客户端心里知道玩家还是活的,所以玩家运行正常。
你可以从这个方面入手进行研究,具体解决你问题的方法我并不知晓。
尝试自行编写插件,当有玩家受到的伤害符合Neige所述的情况时将玩家强制击杀或请出服务器。
此条回复仅作为抛砖引玉,若答案符合要求,请给予 Neige 最佳答案而不是我。不要给我评分。
此条回复仅作为抛砖引玉,若答案符合要求,请给予 Neige 最佳答案而不是我。不要给我评分。