Luohuayu / CatServer

高性能和高兼容性的1.12.2/1.16.5/1.18.2版本Forge+Bukkit+Spigot服务端 (A high performance and high compatibility 1.12.2/1.16.5/1.18.2 version Forge+Bukkit+Spigot server)
https://catmc.org
GNU Lesser General Public License v3.0
1.98k stars 211 forks source link

[1.18.2] 村庄袭击(劫掠Raid)事件时,事件外围的(自然刷新出的)劫掠者不会加入到袭击事件中 #844

Open NattoCB opened 9 months ago

NattoCB commented 9 months ago

运行环境

Minecraft版本(1.12.2/1.16.5/1.18.2): 1.18.2 构建版本(从/version指令获取): bc64e1f 相关模组/插件: 无

描述这个BUG

村庄袭击(劫掠Raid)事件时,事件外围的(自然刷新出的)劫掠者不会加入到袭击事件中

看起来是自然刷新的劫掠者的 AI target 并没有设置,所以大多数只会站立不动,不会寻找村民

测试: forge 、原版,外围刷新劫掠者可以正常加入Raid事件,主动寻找村民

导致的问题

劫掠事件的外围的劫掠者有点呆呆的,连玩家也不会攻击

复现方法

(方式1)制造一个简易的劫掠刷怪塔测试:

https://www.bilibili.com/video/BV1t14y1Q7

(方式2)直接在村庄测试

开启Raid后,观察外围刷新出的劫掠者,会发现 AI target 存在问题

NattoCB commented 3 months ago

通过 RaidTriggerEvent 记录 raids 实例,后对 pillager entity 在 raid 实例的 raiders list 中遍历查询

排除了 (自然刷新出的)劫掠者不会加入到袭击事件中 的可能性

测试结果是:所有范围内 raider 如 pillager 都可自动加入袭击事件,无论是袭击塔附近自然生成的,还是刷怪蛋在袭击范围内生成的,或袭击波次触发时批量生成的,也无论是否在劫掠塔结构中,都能够正常加入。

image

但现状还是:AI target 存在问题,袭击塔和原版效果不同,生成的 pillager 有一部分无 AI,不会攻击玩家,也不会寻路村民,只会 look at player

image

目前的场景排查:

但只要走出劫掠塔结构,在任意地方放置 pillager,均可自动寻路攻击 villager

只要走进劫掠塔结构,若无袭击事件,则,在任意地方放置 pillager,均可自动寻路攻击 villager

只要走进劫掠塔结构,若有袭击事件,且事件中心坐标的 y 轴高于 pillager 生成位置(50-70 格)则在约 50 % 的几率下,它的全部 AI 失效(注:这些 无 AI 的 pillager,在此场景下,依然属于 raider list 中,被成功自动加入)

结论

怀疑因素:事件中心坐标、与生成 pillager 之间的 y轴 距离

image

NattoCB commented 2 months ago

进一步排除一个变化量:袭击塔 structure 和该 bug 也无关

bug 描述:pillager 在特定条件下无 AI

bug 触发条件:

在袭击事件中心 y 轴 正负 30 以上,刷新的、手动放置的 pillager 虽然会自动加入袭击事件的 raider list,但无 ai,只会 lookat player。y轴相差不远的 pillager ai 正常,可攻击玩家。