package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // 嘉姆入侵敌方地盘(Gangster Area / 势力地盘占领)。 // 官方这套玩法客户端是全的:MapSubSystem_Gangster.lua、GangsterAreaClientState.lua、 // BigMapComp_GangsterArea.lua,占领结果只是一个 S2C 推送 // SyncFactionInfluenceAreaOccupy(payload 只有 areaId + occupy 两个字段)。 // 服务端这边主线原本**一个字节都没有**,所以这是纯新增,不动任何既有琉轮。 // 一次入侵 = 三步,每步都能单独触发,方便蹚: // 1. 传送到入侵点用现成的 TeleportWithLoadingAsync; // 2. 两个随从用 SpawnAgentAsync(SpawnNpcAsync 那条走不通 —— 它们是 companion,没有自己的 FightSpirit); // 3. 占领 = 推一个 Notify。 // ⛑ 本文件不负责把玩家变成嘉姆:切换角色是另一套琉轮,玩家自己在角色界面切到嘉姆后再用这里。 // 服务端只是「把人送到地方、把小弟放出来、tell 客户端这块地占了」。 // // // 推一次 SyncFactionInfluenceAreaOccupy(64830440):uint32 areaId + bool occupy。 // wire 已对着客户端 RPCDeserializeAuto.lua 的 midToReader[64830440] 核过 —— // 它不是登录包,lua 那份是权威源(硬规则 239)。UxWriter.Bool 写 1 字节 0/1, // 正好对 reader:ReadBoolean()。 // func GameRouter_FactionInvasion_SyncAreaOccupyAsync(ctx context.Context, areaId uint32, occupy bool) any { // Router implementation for GameRouter_FactionInvasion_SyncAreaOccupyAsync var zero any; return zero } // // 放一个随从。 // ⛑⛑ hostile 必须传 true:SpawnAgentAsync 开头就按 // AgentSummonCatalog 里登记的敌友属性对账,不一致直接拒 // (IsHostileClass(enemyClassType) => ect is 1 or 2 or 4 or 6 or 7, // 而 40651920/40651921 的 EnemyClassType=1 ⇒ 在目录里算敌对单位)。 // 换来不被追打的是后面三个开关:engage=false 不给攻击 AI(也就不进敌人账本, // 主线 EnemyAiActions 因此不会插手它), // forceEnemyRelation=false 不标敌对关系(否则玩家能锁定自己人)。 // ⛑⛑ 2026-10-01:camp 原来是硬编码 0 ⇒ UnitCamp.MonsterDefault ⇒ 客户端把它当敌人 // (挂血条、可锁定、Companion 行为树不接管、空手出招)。而这两个模板在 AgentConfig 里 // 的 Camp 本来就是 1 = UnitCamp.PlayerDefault,它们的树分别是 // Companion_JiaMu_Shuangmawei(晴)/ Companion_Guys(盖斯)—— 战斗能力写在 // 行为树里、不在 AI 行为集里,所以服务端查不到攻击模组是正常的,别硬配。 // 现在读 gameplay.aether.companionCamp(默认 1)。 // func GameRouter_FactionInvasion_SpawnCompanionAsync(ctx context.Context, agentId uint32, x float32, y float32, z float32, facing float32) any { // Router implementation for GameRouter_FactionInvasion_SpawnCompanionAsync var zero any; return zero } // // 一次完整的入侵。三步都能单跑:对应布尔开关。返回给人看的多行明细。 // func GameRouter_FactionInvasion_RunFactionInvasionAsync(ctx context.Context, eventId int32, teleport bool, summon bool, occupy bool) any { // Router implementation for GameRouter_FactionInvasion_RunFactionInvasionAsync var zero any; return zero }