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

@@ -3137,6 +3137,8 @@ internal static class MethodId
internal const uint SyncGadgetAOIAddAndRemove = 68169646;
internal const uint SyncTurnToPosPosition = 68169791;
internal const uint SyncAttractPointPosition = 68172618;
// PHANTOM ID — not in the 4229938 client's method table (dump + RPCMethodIdToName.lua).
// The real Aether NPC remove is SyncAetherAINpcRemove = 68332284. Do not send this.
internal const uint SyncAetherAIVehicleNpcRemove = 68173578;
internal const uint SyncPlateRemoveList = 68174318;
internal const uint SyncFightGamePlayerLeave = 68176524;
@@ -3444,6 +3446,9 @@ internal static class MethodId
internal const uint SyncDebugPlotBT = 68568004;
internal const uint IGameSceneToClient_SyncDiceRoundSettle = 68568673;
internal const uint IGameSceneToClient_SyncLoadChefNpcIds = 68570971;
// PHANTOM ID — there is NO batch vehicle AddDatas in the 4229938 client (its method table
// only has the single SyncAetherAIVehicleAddData = 68916691). Batches sent here were
// silently dropped (cars never rendered). Do not send this.
internal const uint SyncAetherAIVehicleAddDatas = 68571034;
internal const uint IGameSceneToClient_SyncMahjongReadyStart = 68572064;
internal const uint SyncRemoveClientGameplayTag = 68572571;
@@ -4560,6 +4565,10 @@ internal static class MethodId
internal const uint ReportCreationVehicleEnterOrLeaves = 67004409;
internal const uint AskControlPowerHoldEnemyFallGround = 67043294;
// Aether client-driven traffic — intersection period update (the only Aether sync id
// missing from the original set; all others already exist above with verified values).
internal const uint SyncAetherAIIntersectionUpdateData = 68819947;
internal static void RegisterKnownNames(RpcRouter router)
{
foreach (var field in typeof(MethodId).GetFields(BindingFlags.Static | BindingFlags.NonPublic))
@@ -58,6 +58,20 @@ internal sealed class WorldEntryState
internal int WorldEntryControlFinalizingGeneration { get; set; }
internal int WorldEntryLogicProjectionPublishedGeneration { get; set; }
internal int WorldEntryCurrentMetadataPublishedGeneration { get; set; }
// Vehicle shop / tuning purchases (GameRouter.Shop): bought parts per vehicle config
// merged into spawns and the owned list; suits recorded separately (SuitId base).
internal Dictionary<uint, List<(uint Type, uint PartId)>> VehiclePartsByConfig { get; } = [];
internal Dictionary<uint, uint> VehicleSuitByConfig { get; } = [];
internal HashSet<uint> SessionUnlockedVehicleConfigs { get; } = [];
// Story/intro chain (GameRouter.StoryFlow): the intro cutscene is driven by the
// story root task 60004938 + its NextTasks chain in TaskConfig.
internal Dictionary<uint, byte> QuestStates { get; } = [];
internal Dictionary<uint, int[]> QuestCounterValues { get; } = [];
internal List<uint> StoryChain { get; } = [];
internal HashSet<uint> UnlockedQuestIds { get; } = [];
internal uint CurrentQuestTaskId { get; set; }
internal ulong WorldEntrySceneId4229938 { get; set; }
internal ulong WorldEntrySessionId4229938 { get; set; }
internal Vec3 WorldEntryCreateHeroPosition { get; set; } = Profile.WorldSpawn;