Files

35 lines
2.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package methods
//
// Client 4229938: IClientToGameScene.ReportCanAssassinateEnemies(List<ulong> enemyids) — NOTIFY,67161256。
// 客户端 StealthManager(dump.cs:321145 起)每 CROUCH_ASSASS_CHECK_INTERVAL = 0.4 秒
// 跑一次 CrouchAssassinationUpdate():CrouchAssassinationUnitCheck 做粗筛,
// CalculateCrouchAssassinationDetectValue(detectorPos, detectorEyeDir, detectedPos) 算背后夹角,
// CrouchAssassinationVisibilityRaycastCheck 补可见性,最后由 SendCrouchAssassinationReport()
// 把候选名单报上来(REPORT_LIST_LIMIT = 40)。
// 线格式证据:ClientToGameSceneDelegate.lua:1027
// SerializeBase.WriteList7Bit(writer, enemyids, writer.WriteUInt64, 0, "enemyids", false, 256, nil)
// ⇒ Int7 计数(带 +1 偏置,规则 182)。与 ReportBeHacked(lua:595)完全同形,
// 后者已实机解码成功 ⇒ 照抄它的标注。
// ⛑ 解码只用于驱动裁决回包;Notify 无 ack,解析失败不会卡住客户端。
//
//
// Client 4229938: IGameSceneToClient.SyncEnemyCanAssassinate(ulong agentId, bool canAssassinate) — 68218494。
// 契约来源:dump.cs:171433 GameSceneToClientImpl.SyncEnemyCanAssassinate(ulong, bool)
// (真实现 override,不是 Null 桩);dump.cs:1873111 常量 = 68218494。
// ★ 为什么非发不可:这是服务端裁决回包。客户端只负责「我觉得这几个能暗杀」,
// 真正的授权在这一条。收到 true 后 EnemyInteractCore.TrySetFeisuoCrouchAssassinInteract(true)
// (dump.cs:537731)置 isFeisuoCrouchAssassinActive,再由 C# 回调 Lua
// FeisuoAssassMgr:SetCanFeiSuoCrouchAss(canAssassin, LockEnemyId, t1, t2)
// → UpdateAssinateGps() → gHackManager:AddFocusDangerEffect,
// 同时 UnitStateConfig.CrouchAssass 点亮 HUD 的 ControlPower 暗杀按钮
// (MainMenuMgr.CheckInCrouchAssassination)。
// ⇒ 本服从不发这一条 ⇒ canAssassinate 恒 false ⇒ HUD 永远不出暗杀提示。
// ⛑⛑ 极性 Inline:CSharpOnly(lua 全仓只有 RPCMethodIdToName.lua:2940 的名字条目,
// 没有 reader、没有 handler)⇒ 不能靠 lua 判 ReadStruct/ReadComplex(规则 183),
// 只能靠同形先例。同 service、同为 CSharpOnly、同为「目标可交互」二态包的
// SyncUnitHackableState(68941159) 与 SyncVehicleHackableState 都用
// Inline = true 且已实机跑通 ⇒ 这里跟着用 Inline。
// 若实机报 ReadBuffer invalid size=N remain=N-1,唯一改法就是去掉 Inline(加 0xFF presence)。
//