public static void SetupMap(Map map) { Log.Message("New map " + map.uniqueID); Log.Message("Unique ids " + Multiplayer.GlobalIdBlock.currentWithinBlock); Log.Message("Rand " + Rand.StateCompressed); var async = new AsyncTimeComp(map); Multiplayer.game.asyncTimeComps.Add(async); var mapComp = new MultiplayerMapComp(map); Multiplayer.game.mapComps.Add(mapComp); InitFactionDataFromMap(map, Faction.OfPlayer); async.mapTicks = Find.Maps.Where(m => m != map).Select(m => m.AsyncTime()?.mapTicks).Max() ?? Find.TickManager.TicksGame; async.storyteller = new Storyteller(Find.Storyteller.def, Find.Storyteller.difficultyDef, Find.Storyteller.difficulty); async.storyWatcher = new StoryWatcher(); if (!Multiplayer.GameComp.asyncTime) { async.TimeSpeed = Find.TickManager.CurTimeSpeed; } }
static void Postfix(MapFileCompressor __instance, ref IEnumerable <Thing> __result) { if (!SaveCompression.doSaveCompression) { return; } MultiplayerMapComp comp = __instance.map.MpComp(); __result = comp.tempLoadedThings; comp.tempLoadedThings = null; }
private static void CreateCaravanFormingSession(MultiplayerMapComp comp, bool reform) { var session = comp.CreateCaravanFormingSession(reform, null, false); if (TickPatch.currentExecutingCmdIssuedBySelf) { session.OpenWindow(); AsyncTimeComp.keepTheMap = true; Current.Game.CurrentMap = comp.map; Find.World.renderer.wantedMode = WorldRenderMode.None; } }
static void DoDebugInfo() { if (MpVersion.IsDebug && Multiplayer.Client != null) { int timerLag = (TickPatch.tickUntil - TickPatch.Timer); string text = $"{Find.TickManager.TicksGame} {TickPatch.Timer} {TickPatch.tickUntil} {timerLag} {Time.deltaTime * 60f}"; Rect rect = new Rect(80f, 60f, 330f, Text.CalcHeight(text, 330f)); Widgets.Label(rect, text); } if (MpVersion.IsDebug && Multiplayer.Client != null && Find.CurrentMap != null) { var async = Find.CurrentMap.AsyncTime(); StringBuilder text = new StringBuilder(); text.Append(async.mapTicks); text.Append($" d: {Find.CurrentMap.designationManager.allDesignations.Count}"); if (Find.CurrentMap.ParentFaction != null) { int faction = Find.CurrentMap.ParentFaction.loadID; MultiplayerMapComp comp = Find.CurrentMap.MpComp(); FactionMapData data = comp.factionMapData.GetValueSafe(faction); if (data != null) { text.Append($" h: {data.listerHaulables.ThingsPotentiallyNeedingHauling().Count}"); text.Append($" sg: {data.haulDestinationManager.AllGroupsListForReading.Count}"); } } text.Append($" {Multiplayer.GlobalIdBlock.current}"); text.Append($"\n{Sync.bufferedChanges.Sum(kv => kv.Value.Count)}"); text.Append($"\n{((uint)async.randState)} {(uint)(async.randState >> 32)}"); text.Append($"\n{(uint)Multiplayer.WorldComp.randState} {(uint)(Multiplayer.WorldComp.randState >> 32)}"); text.Append($"\n{async.cmds.Count} {Multiplayer.WorldComp.cmds.Count} {async.slower.ForcedNormalSpeed}"); Rect rect1 = new Rect(80f, 110f, 330f, Text.CalcHeight(text.ToString(), 330f)); Widgets.Label(rect1, text.ToString()); } }
static void Postfix(Map __instance) { if (Multiplayer.Client == null) { return; } var asyncTime = __instance.AsyncTime(); var comp = __instance.MpComp(); if (Scribe.mode == LoadSaveMode.LoadingVars || Scribe.mode == LoadSaveMode.Saving) { Scribe_Deep.Look(ref asyncTime, "mpAsyncTime", __instance); Scribe_Deep.Look(ref comp, "mpMapComp", __instance); } if (Scribe.mode == LoadSaveMode.LoadingVars) { if (asyncTime == null) { Log.Error($"{typeof(MapAsyncTimeComp)} missing during loading"); // This is just so the game doesn't completely freeze asyncTime = new MapAsyncTimeComp(__instance); } Multiplayer.game.asyncTimeComps.Add(asyncTime); if (comp == null) { Log.Error($"{typeof(MultiplayerMapComp)} missing during loading"); comp = new MultiplayerMapComp(__instance); } Multiplayer.game.mapComps.Add(comp); } }
static void DoDebugInfo() { if (Multiplayer.ShowDevInfo) { int timerLag = (TickPatch.tickUntil - TickPatch.Timer); StringBuilder text = new StringBuilder(); text.Append($"{Faction.OfPlayer.loadID} {Multiplayer.RealPlayerFaction?.loadID} {Find.UniqueIDsManager.nextThingID} j:{Find.UniqueIDsManager.nextJobID} {Find.TickManager.TicksGame} {TickPatch.Timer} {TickPatch.tickUntil} {timerLag} {TickPatch.maxBehind}"); text.Append($"\n{Time.deltaTime * 60f:0.0000} {TickPatch.tickTimer.ElapsedMilliseconds}"); text.Append($"\n{avgDelta = (avgDelta * 59.0 + Time.deltaTime * 60.0) / 60.0:0.0000}"); text.Append($"\n{avgTickTime = (avgTickTime * 59.0 + TickPatch.tickTimer.ElapsedMilliseconds) / 60.0:0.0000} {Find.World.worldObjects.settlements.Count}"); text.Append($"\n{Multiplayer.session?.localCmdId} {Multiplayer.session?.remoteCmdId} {Multiplayer.session?.remoteTickUntil}"); Rect rect = new Rect(80f, 60f, 330f, Text.CalcHeight(text.ToString(), 330f)); Widgets.Label(rect, text.ToString()); if (Input.GetKey(KeyCode.End)) { avgDelta = 0; avgTickTime = 0; } } if (Multiplayer.ShowDevInfo && Multiplayer.Client != null && Find.CurrentMap != null) { var async = Find.CurrentMap.AsyncTime(); StringBuilder text = new StringBuilder(); text.Append($"{Multiplayer.game.sync.knownClientOpinions.FirstOrDefault()?.isLocalClientsOpinion} {async.mapTicks} {TickPatch.shouldPause} {TickPatch.pausedAt} "); text.Append($"z: {Find.CurrentMap.haulDestinationManager.AllHaulDestinationsListForReading.Count()} d: {Find.CurrentMap.designationManager.allDesignations.Count} hc: {Find.CurrentMap.listerHaulables.ThingsPotentiallyNeedingHauling().Count}"); if (Find.CurrentMap.ParentFaction != null) { int faction = Find.CurrentMap.ParentFaction.loadID; MultiplayerMapComp comp = Find.CurrentMap.MpComp(); FactionMapData data = comp.factionData.GetValueSafe(faction); if (data != null) { text.Append($" h: {data.listerHaulables.ThingsPotentiallyNeedingHauling().Count}"); text.Append($" sg: {data.haulDestinationManager.AllGroupsListForReading.Count}"); } } text.Append($" {Multiplayer.GlobalIdBlock.Current} {Find.IdeoManager.IdeosInViewOrder.FirstOrDefault()?.id}"); text.Append($"\n{SyncFieldUtil.bufferedChanges.Sum(kv => kv.Value.Count)} {Find.UniqueIDsManager.nextThingID}"); text.Append($"\n{DeferredStackTracing.acc} {MpInput.Mouse2UpWithoutDrag} {Input.GetKeyUp(KeyCode.Mouse2)} {Input.GetKey(KeyCode.Mouse2)}"); text.Append($"\n{(uint)async.randState} {(uint)(async.randState >> 32)}"); text.Append($"\n{(uint)Multiplayer.WorldComp.randState} {(uint)(Multiplayer.WorldComp.randState >> 32)}"); text.Append($"\n{async.cmds.Count} {Multiplayer.WorldComp.cmds.Count} {async.slower.forceNormalSpeedUntil} {Multiplayer.GameComp.asyncTime}"); text.Append($"\nt{DeferredStackTracing.maxTraceDepth} p{SimplePool<StackTraceLogItemRaw>.FreeItemsCount} {DeferredStackTracingImpl.hashtableEntries}/{DeferredStackTracingImpl.hashtableSize} {DeferredStackTracingImpl.collisions}"); text.Append(Find.WindowStack.focusedWindow is ImmediateWindow win ? $"\nImmediateWindow: {MpUtil.DelegateMethodInfo(win.doWindowFunc?.Method)}" : $"\n{Find.WindowStack.focusedWindow}"); text.Append($"\n{UI.CurUICellSize()} {Find.WindowStack.windows.ToStringSafeEnumerable()}"); Rect rect1 = new Rect(80f, 170f, 330f, Text.CalcHeight(text.ToString(), 330f)); Widgets.Label(rect1, text.ToString()); } //if (Event.current.type == EventType.Repaint) // RandGetValuePatch.tracesThistick = 0; }