进入游戏后起始位置错误:角色出生在罗格营地栅栏外 #539
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
现象
进入游戏后,角色出现在罗格营地(Rogue Encampment)木栅栏外的树林里,而不是营地内的起始位置。
截图中还能看到:
复现环境
play.html(本地 8080),分支refactor/remove-legacy-sp@3c1ed16www.laiseek.xyz(PvPGN + D2GS 1.13c),RealmSanctuarytroytt/troytt(刺客,1 级,资料片,软核,天梯,新建角色首次进入)期望(1.13c)
新角色进入 Act 1 时应位于罗格营地内的起始点(营地内部可行走区域),与 D2GS 下发的玩家坐标一致。
待排查方向(未验证,仅供定位)
0x59 AssignPlayer/0x15 ReassignPlayer坐标与客户端 DRLG 关卡原点(LoadAct / 房间 reveal)之间的坐标换算;验证要求
修复后应在无头浏览器 / bot 中对比服务器下发坐标与客户端渲染位置,并覆盖多个地图种子(城镇方向变体)。
已修复,合并到 main:
b3452a4(修复87b074d,测试c7331bf+b3452a4)。根因
服务器给的出生坐标一直是对的(玩家站在营地地面上),是客户端画错了位置,有两个原因:
viewport-profile.ts按 16×8 px 的格子投影 sub-tile,而 1.13c 地砖是 160×80 px = 5×5 个 32×16 px 的 sub-tile。所以玩家、相机和所有单位都画在离关卡原点一半距离的位置。0x31595789,服务器坐标对应营地地面 local (137,123),旧代码画到了 (68.5,61.5),正好是栅栏外面。修复
MapService.findLevelViewAtWorldSubTile:按玩家的服务器坐标选包含它的关卡。|| 1、坐标偏移猜测、LoadAct 吞异常、无地图时默认可行走。在关卡和服务器坐标都就绪之前,只显示黑屏加 HUD。验证
tests/client/spawn-position-539.test.ts:覆盖 5 份新录的 fresh game 抓包(10-d2gs-spawn-seed-*)、所有已有抓包,以及 3 种营地布局。断言渲染出的玩家和相机等于服务器坐标、站在营地可行走地面上、能走到 waypoint,并且 Blood Moor 的房间推送不会切换渲染的关卡。修复后截图(人物在营地内):
图里的黄褐色方块和绿色矩形是 object/NPC 缺美术时画的占位色块,另开了 #540 跟进。