feat: Add metro transit, gadgets, shop, social apps, and traffic models checkpoint

This commit is contained in:
CAtlas0784 committed 2026-10-29 01:55:01 +07:00
1 parent caa42b84ed
commit 74e2963a12
79 files changed
+527962 -496

No files matched your search

@@ -205,6 +205,16 @@ internal sealed partial class GameRouter
await session.NotifyAsync(MethodId.SyncManagedLogicAgent,
UxSerializer.Serialize(WorldCodec.ManagedLogicAgent(id, Profile.PlayerPid, 0)), CancellationToken.None);
// Gate-opener for NPC interaction: EnableInteract=true is what makes the client
// show the F prompt / interaction menu for this NPC (AgentPropertyType 0).
await session.NotifyAsync(MethodId.IGameSceneToClient_SyncAgentPropertyChange,
UxSerializer.Serialize(new SceneMethods.SyncAgentPropertyBoolChange4229938
{
AgentId = id,
Type = 0, // AgentPropertyType.EnableInteract
V = new SceneMethods.AgentPropertyDataBool4229938 { V = true },
}), CancellationToken.None);
if (poi is { UsageId: not 0 })
{
await session.NotifyAsync(MethodId.SyncAgentBelongings,
@@ -244,8 +254,15 @@ internal sealed partial class GameRouter
}
}
private const string AetherNpcInitSentKey = "aetherNpcInitSent";
private static async Task SendAetherInitForNpcAsync(TcpSession session)
{
// One init per session — re-sending the same AetherAIInitDatas repeatedly right
// after world entry is redundant (and noisy).
if (session.Items.ContainsKey(AetherNpcInitSentKey))
return;
session.Items[AetherNpcInitSentKey] = true;
var settings = PrivateServerConfigStore.Current.Gameplay.Vehicles;
var activeRaidId = GetStateIfExists(session)?.ActiveRaidId ?? Profile.RaidId;
var hasZoneGraph = activeRaidId == PrivateServerConfigStore.Current.World.RaidId;
@@ -254,9 +271,9 @@ internal sealed partial class GameRouter
RaidId = activeRaidId,
HasZoneGraph = hasZoneGraph,
ZoneStorageDataHandle = hasZoneGraph ? settings.ZoneStorageDataHandle : 0,
Intersections = [],
Intersections = BuildAetherIntersectionInitList(),
}), CancellationToken.None);
session.Log.Info($"[AETHER] init sent raid={activeRaidId} zoneGraph={hasZoneGraph} intersections=empty");
session.Log.Info($"[AETHER] init sent raid={activeRaidId} zoneGraph={hasZoneGraph} intersections={BuildAetherIntersectionInitList().Count}");
}
internal static GameMethods.NpcAgentSyncClientInfo4229938 CreateStaticNpcSyncInfo(