AnzhiZhang/MCDReforgedPlugins

[OnlinePlayerAPI] 关于统计海尔威的FZ-sDataPack-Plus-Plus数据包创建的假人

Closed this issue · 15 comments

大佬您好,目前发现通过FZ-sDataPack-Plus-Plus数据包创建的假人,只能在创建时添加到在线列表,kill时并不会从列表中移除,导致只要假人创建就会一直存在于列表。(这个数据包为了假人不被计分板统计在创建假人时给假人加了分组和tag,并且显示的名字前面会有“假的 ”前缀。)我读了您的源码判断这有可能是MCDR底层的原因,想向大佬求证一下,或者看看大佬有什么可行的解决方案,谢谢啦

这个数据包是不是创建假人加入的时候名字没有 假的 前缀?

这个数据包是不是创造假人加入的时候名字没有假的前缀?
看了下数据包源码,貌似创建和kill时就是单纯的调用了carpet的/player指令,前缀是通过设置假人的team前缀显示的,MCDR的player参数不知道是否会读取到team前缀

也就是假人先加入游戏再设置的前缀?

也就是假人先加入游戏再设置的附加?

可以这么理解吧,但是我也不太确定,本人不太熟悉mcfunc,也是挺吃力的才勉强读懂数据包的源码
WeChat72969c37d0c6063e6e61252c89264cd2

是的,先加入游戏再设置前缀
这样会导致加入游戏的名称为 player xxx joinde the game
而退出游戏时为 player Fake xxx leave the game
MCDR识别的玩家名称分别为 xxx 和 ``Fake xxx`
建议修改数据包删除添加前缀的部分使加入加入和离开游戏时使用同一个id

是的,先加入游戏再设置前缀
这样会导致加入游戏的名称为 player xxx joinde the game
而退出游戏时为 player Fake xxx leave the game
MCDR识别的玩家名称分别为 xxx 和 ``Fake xxx`
建议修改数据包删除添加前缀的部分使加入加入和离开游戏时使用同一个id

了解了,谢谢大佬。等我回家搭个本地环境调试一下,腐竹可能不会支持删除前缀所以我可能会改服务器上您的插件做一下兼容

大佬我在本地搭建了相同的环境,发现可能并不是名字的问题。用数据包创建的假人退出的时候根本就没走on_player_left这个方法,而创建的时候正常走on_player_joined,所以才导致了这个问题。

OT89A}O@TEU9)R8@UVA$R

请问一下你的MCDR解析器是什么呢

请问一下你的MCDR解析器是什么呢

解析器是vanilla_parser,Fabric 服务端

加入游戏

MCDR响应的是 \w{1,16}\[(?:/[\d.:]+|local)\] logged in with entity id \d+ at \([\dE\-., ]+\)
所以你的 Steve[local] logged in with entity id 3919 at (237.775632, 68.0, -99.033614) 可以被识别并触发 on_player_joined

离开游戏

MCDR响应的是 \w{1,16} left the game
所以你的 假的 Steve left the game 因为有 这3个字符不属于 \w 所以无法被识别并触发 on_player_left

MCDR并不能很好的支持队伍前缀后缀问题,参见 MCDReforged/MCDReforged#15
解决方案为删除你的假人插件的添加前缀功能
另外既然你的假人数据包使用的是carpet的 /player 你可以考虑使用我的 Bot 插件,是同样的原理,而且可以记忆机器人的位置

加入游戏

MCDR响应的是 \w{1,16}\[(?:/[\d.:]+|local)\] logged in with entity id \d+ at \([\dE\-., ]+\)
所以你的 Steve[local] logged in with entity id 3919 at (237.775632, 68.0, -99.033614) 可以被识别并触发 on_player_joined

离开游戏

MCDR响应的是 \w{1,16} left the game
所以你的 假的 Steve left the game 因为有 这3个字符不属于 \w 所以无法被识别并触发 on_player_left

MCDR并不能很好的支持队伍前缀后缀问题,参见 Fallen-Breath/MCDReforged#15
解决方案为删除你的假人插件的添加前缀功能
另外既然你的假人数据包使用的是carpet的 /player 你可以考虑使用我的 Bot 插件,是同样的原理,而且可以记忆机器人的位置

原来是这样!懂了懂了!那我就又多了一种解决方式(不过要改MCDR底层)

31605151321_ pic_hd

其实到这里我的需求就已经解决了(但其实写死这种操作并不完美),不过佛冷的issue我也大概想到了解决思路,等我去那个issue跟佛冷讨论一下!

  • 关于数据包删除添加前缀功能
    我感觉可能那个可能是服务器“刚需”,这个腐竹还是挺固执的,还想要完美还不想改太多东西。我想大佬应该跟哈尔威佛冷大佬他们很熟吧,如果能帮我稍微问下哈尔威通过修改数据包的解决思路 感激不尽(没法问也没关系,我现在脑中已经有了几种解决方案,我会一一尝试)

  • 关于您的Bot插件
    这个插件是否也具备创建的假人不被记分板(数据包记分板or插件记分板)统计的功能呢

数据包删除添加前缀您可以自行学习解决

我的Bot插件没有不被计分板记录的功能

数据包删除添加前缀您可以自行学习解决

我的Bot插件没有不被计分板记录的功能

haha我不是那个意思:laughing:,我不是那种伸手党,如果要删除前缀我肯定会自己研究的。我指的是在不删除添加前缀功能的情况下,有没有通过修改数据包(比如说修改数据包对控制台的返回之类的,这部分我不太了解)解决这个问题的思路

有这个办法
就是 将原来的 假人加入->添加前缀->假人退出 流程修改为这个流程 假人加入->添加前缀->删除前缀->假人退出
也需要修改数据包

有这个办法
就是 将原来的 假人加入->添加前缀->假人退出 流程修改为这个流程 假人加入->添加前缀->删除前缀->假人退出
也需要修改数据包

了解了,感谢感谢:pray:,大佬真是太有耐心了