[Parity][net-world][S1][R] 0x8E / 0x74(尸体归属)被当成"自己死了",活着时也会弹出死亡遮罩并拦截全部点击;对其他玩家则改写组队/敌对状态 #564
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?
来源审计项:
net-world#3— [S1][R] F3 0x8E / 0x74(尸体归属)被当成"自己死了",活着时也会弹出死亡遮罩并拦截全部点击;对其他玩家则改写组队/敌对状态Party relation:src/netproto/d2gs/s2c/party.ts:84-97、181-194;src/client/world/client-world.ts:2258-2274(rawRel === 1 && rawUnitId === this.selfId→_isSelfDead = true),以及2249-2256(CorpseAssign类型同理);其他玩家走2276-2312:rawOtherId !== undefined && rawRel === 1→lootPermit = true、hostile = falsePlrModes.cpp:497-512生成独立的pDeadBody,648发 0x8E,此时本人已经复活);带着存档尸体进游戏(PlrSave.cpp:1653、PlrSave2.cpp:1201);尸体进入视野(SUnitMsg.cpp:140-145发 0x74)。尸体被捡回时发 assign=0(PlrModes.cpp:728)(V-src)。也就是说,收到"自己的尸体"恰恰说明本人是活着的。8E 01 <self=1> <corpse=77>,isSelfDead变 true;收到LifeMana(life>0)后变回 false;再 apply 0x74(自己的尸体进入视野),又变成 true。hud-manager.ts:1235-1240 / 1530-1535拦截所有点击,并把点击当成复活请求发出去,直到下一条 life>0 的 0x95 或点击后的本地复位才消失。对其他玩家,尸体包会把他们写进_party,并清掉敌对、打开拾取许可(PvP 敌对标记丢失)。CorpseAssign{ownerId, corpseId, assign},只用于把尸体单位和主人关联起来(名牌、拾取),不要动isSelfDead,也不要进组队状态机。