// Token: 0x06000683 RID: 1667 public bool InitializeRecordingSession(string sessionName, int randomSeed, NetworkPlayerID localPlayerID, CommanderManager commanderManager, GameModeBase gameMode) { ReplayHelpers.MostRecentReplayFile = string.Empty; if (this.mReplayMode == ReplayMode.ReplaysDisabled) { return(false); } string locationForReplay = ReplayHelpers.GetLocationForReplay(sessionName); if (BBI.Core.IO.File.Exists(locationForReplay)) { BBI.Core.IO.File.Delete(locationForReplay); // MOD: load replay files BBI.Core.IO.File.Delete(locationForReplay + "x"); } List <byte> bytes = new List <byte>(); byte[] layout = Encoding.UTF8.GetBytes(MapModManager.GetLayoutData()); byte[] patch = Encoding.UTF8.GetBytes(Subsystem.AttributeLoader.GetPatchData()); bytes.AddRange(new byte[] { (byte)((layout.Length >> 0) & 0xff), (byte)((layout.Length >> 8) & 0xff), (byte)((layout.Length >> 16) & 0xff), (byte)((layout.Length >> 24) & 0xff) }); bytes.AddRange(new byte[] { (byte)((patch.Length >> 0) & 0xff), (byte)((patch.Length >> 8) & 0xff), (byte)((patch.Length >> 16) & 0xff), (byte)((patch.Length >> 24) & 0xff) }); bytes.AddRange(new byte[] { 0x00, 0x00, 0x00, 0x00 }); bytes.AddRange(new byte[] { 0x00, 0x00, 0x00, 0x00 }); bytes.AddRange(layout); bytes.AddRange(patch); System.IO.File.WriteAllBytes(locationForReplay + "x", bytes.ToArray()); // MOD GameSessionSettings gameSessionSettings = (gameMode != null) ? gameMode.GameSessionSettings : null; this.mGameSession = new ReplayableGameSession(sessionName, this.mCurrentGameVersion, BBI.Core.IO.File.CreateText(locationForReplay, true), localPlayerID, commanderManager, randomSeed, gameSessionSettings); this.mReplayMode = ReplayMode.RecordingGame; ReplayHelpers.MostRecentReplayFile = locationForReplay; return(true); }
// Token: 0x06001279 RID: 4729 RVA: 0x000671F0 File Offset: 0x000653F0 private void OnStartButtonPress() { if (m_LobbyView != null) { m_LobbyView.UnloadPreviewImageStreamedAssets(); // MOD: tell the mod what level is being loaded MapModManager.SetMap(m_LobbyView.SelectedMap, GameMode.AISkirmish, m_LobbyView.ActiveTeamSetting, m_LobbyView.GetPlayerTeamIDs()); // MOD mLevelManager.StartLoadLevel(GameMode.AISkirmish, ReplayMode.RecordingGame, m_LobbyView.SelectedMap, GetStartDependencies()); return; } Log.Error(Log.Channel.UI, "Cannot start game. No lobby view specified!", new object[0]); }
// Token: 0x0600141C RID: 5148 internal void PostMapProcessInit() { if (this.mSimInitializationState != Sim.InitializationState.MapLoaded) { return; } SimMapDependencies mapDependencies; this.mSimStartupDependencies.Get <SimMapDependencies>(out mapDependencies); this.AIManager = new AIManager(this.SimEventSystem, this.CommanderManager.CPUCommanders); if (this.Settings.GameMode != null) { this.Settings.GameMode.Initialize(); } SessionChangeReason sessionChangeReason; if (!this.mSimStartupDependencies.Get <SessionChangeReason>(out sessionChangeReason)) { sessionChangeReason = SessionChangeReason.NewGame; } MissionDependencies missionDependencies; if (this.mSimStartupDependencies.Get <MissionDependencies>(out missionDependencies) && !missionDependencies.EntityDescriptors.IsNullOrEmpty <SceneEntityDescriptor>()) { SceneEntityCreator.CreateSceneEntitiesForGameSession(missionDependencies.EntityGroupDescriptors, missionDependencies.EntityDescriptors, missionDependencies.RandomWreckArtifacts, missionDependencies.MaxSpawnedWreckArtifacts, sessionChangeReason == SessionChangeReason.Transition); } AllEntityProcessor.Initialize(); if (sessionChangeReason != SessionChangeReason.LoadGame) { foreach (KeyValuePair <CommanderID, CommanderAttributes> keyValuePair in this.Settings.CommanderAttributesMap) { Commander commanderFromID = Sim.Instance.CommanderManager.GetCommanderFromID(keyValuePair.Key); if (commanderFromID != null) { this.InitializeResearchForCommander(commanderFromID); this.ApplyInitialBuffsForCommander(commanderFromID, true); this.GrantStartingGrantedAbilitiesForCommander(commanderFromID, true); this.SpawnInitialUnitsForCommander(commanderFromID, this.Settings, mapDependencies); commanderFromID.GrantStartingWreckArtifacts(); } } } // MOD MapModManager.LoadMapLayout(); // MOD this.mSimInitializationState = Sim.InitializationState.Initialized; }
// Token: 0x06001822 RID: 6178 RVA: 0x00083DB0 File Offset: 0x00081FB0 private void BeginLevelLoad() { DependencyContainer <SessionBase> dependencies = new DependencyContainer <SessionBase>(new NullSession()); this.mLevelToLoad.Difficulty = this.mSelectedDifficulty; if (this.m_UseDefaultFleet != null) { this.mLevelToLoad.CampaignPersistenceToggled = !this.m_UseDefaultFleet.value; } else { Log.Error(Log.Channel.Data, "The UseDefaultFleet toggle has become unhooked from the MissionSelect window - The default fleet will always be used!", new object[0]); } // MOD MapModManager.SetMap(mLevelToLoad, GameMode.SinglePlayer, TeamSetting.Invalid, new Dictionary <CommanderID, TeamID>()); // MOD this.mLevelManager.StartLoadLevel(GameMode.SinglePlayer, ReplayMode.ReplaysDisabled, this.mLevelToLoad, dependencies); }
// Token: 0x06001415 RID: 5141 RVA: 0x0006A47C File Offset: 0x0006867C internal Checksum Tick(SimFrameNumber frameNumber) { Checksum checksum = new Checksum(); this.UnitManager.Tick(checksum, frameNumber); this.CommanderManager.Tick(checksum); // MOD MapModManager.Tick(frameNumber); // MOD AllEntityProcessor.Process(this.Settings.EntitySystem, checksum); if (this.Settings.GameMode != null && frameNumber > SimFrameNumber.First) { this.Settings.GameMode.EvaluateGameConditions(frameNumber, checksum); } if (this.AIManager != null) { this.AIManager.Tick(checksum); } checksum.Add((int)this.GlobalFrameCount.FrameNumber); return(checksum); }
// Token: 0x06000912 RID: 2322 RVA: 0x000378B0 File Offset: 0x00035AB0 protected virtual bool StartLoadingGame() { Log.Info(Log.Channel.Online, "Player {0} starting game...", new object[] { this.mLobby.LocalPlayerID }); if (this.m_ClanChatPanel != null) { this.m_ClanChatPanel.Leave(); } this.StopAllLobbyCoroutines(); LevelDefinition level = this.mLevelManager.FindLevelByIndex(this.mSharedLobbyData.SelectedSceneIndex, GameMode.Multiplayer); // MOD Dictionary <CommanderID, TeamID> commanderTeamIDs; TeamSetting teamSettings; TryGetTeams(out commanderTeamIDs, out teamSettings); MapModManager.SetMap(level, GameMode.Multiplayer, teamSettings, commanderTeamIDs); // MOD this.mLevelManager.StartLoadLevel(GameMode.Multiplayer, ReplayMode.RecordingGame, level, this.GetStartDependencies()); return(true); }
private void OnChatAdded(string s) { // Don't allow commands in automatch if (this.SetupLobbyRole != LobbyRole.CustomMP) { return; } Func <AttributesPatch, string> getPatchVersionStr = delegate(AttributesPatch patch) { string versionStr = ""; if (patch.Meta.Version.Length > 0) { versionStr = patch.Meta.Version; if (patch.Meta.LastUpdate.Length > 0) { versionStr += String.Format(" {0}", patch.Meta.LastUpdate); } versionStr += " "; } else if (patch.Meta.LastUpdate.Length > 0) { versionStr = String.Format("{0} ", patch.Meta.LastUpdate); } return(versionStr); }; string d = s.Substring(0, s.Length - 3); string[] words = d.Split(' '); for (int i = 1; i < words.Length; i++) { string command = words[i].ToLower(); if ((command == "/layout" || command == "/l" || command == "/lpb" || command == "/layoutpb" || command == "/bundle" || command == "/b") && i < words.Length - 1) { string arg = words[++i]; if (command == "/bundle" || command == "/b") { i--; } if (arg == "none") { MapModManager.MapXml = ""; MapModManager.LayoutName = ""; Print(SteamAPIIntegration.SteamUserName + " cleared layout"); return; } // Set the address string address = (command == "/lpb" || command == "/layoutpb") ? String.Format("https://pastebin.com/raw/{0}", arg) : String.Format("http://frejwedlund.se/jaraci/index.php?l={0}", arg); // Download the layout try { string layoutData = MapModUtil.DownloadWebPage(address); if (layoutData == "") { Print(String.Format("[FF0000][b][i]{0}: '{1}' FAILED (EMPTY)", SteamAPIIntegration.SteamUserName, command)); } else { Print(SteamAPIIntegration.SteamUserName + " received layout [ " + MapModUtil.GetHash(layoutData) + " ]"); MapModManager.MapXml = layoutData; MapModManager.LayoutName = arg; // Select the correct map if (this.IsLobbyHost) { try { bool cont = true; XmlTextReader xmlDokmapReader = new XmlTextReader(new System.IO.StringReader(layoutData)); while (xmlDokmapReader.Read() && cont) { if (xmlDokmapReader.NodeType == XmlNodeType.Element) { switch (xmlDokmapReader.Name) { default: Debug.LogWarning(string.Format("[GE mod] WARNING: Unknown tag '{0}'", xmlDokmapReader.Name)); break; case "meta": case "dokmap": break; case "layout": string[] maps = Regex.Replace(xmlDokmapReader.GetAttribute("map"), @"\s+", "").Split(','); string map = maps[0]; TeamSetting mode = (TeamSetting)Enum.Parse(typeof(TeamSetting), xmlDokmapReader.GetAttribute("mode")); cont = false; if (map == "*") { break; // Can't switch to a map if its meant for all of them } // Code to switch to map here for (int j = 0; j < this.mLevelManager.LevelEntriesMP.Length; j++) { if (this.mLevelManager.LevelEntriesMP[j].SceneName == map && this.mLevelManager.LevelEntriesMP[j].IsFFAOnly == (mode == TeamSetting.FFA)) { MultiplayerMissionPanel ths = ((MultiplayerMissionPanel)this); Network.VictorySettings currentVictory = new Network.VictorySettings(ths.m_LobbyViewPanel.ActiveVictorySettings.VictoryConditions, mode); GameModeSettings currentSettings = ths.m_LobbyViewPanel.ActiveGameModeSettings; ths.m_LobbyViewPanel.SetActiveSettings(currentVictory, currentSettings, j); } } break; } } } } catch {} } } } catch (WebException e) { string reason = (e.Status == WebExceptionStatus.Timeout) ? "TIMEOUT" : "NOT FOUND"; Print(String.Format("[FF0000][b][i]{0}: '{1}' FAILED ({2})", SteamAPIIntegration.SteamUserName, command, reason)); } } // Deliberate missing else to run both the patch and layout command if /bundle is typed if ((command == "/patchpb" || command == "/ppb" || command == "/patch" || command == "/p" || command == "/bundle" || command == "/b") && i < words.Length - 1) { string arg = words[++i]; if (arg == "none") { Subsystem.AttributeLoader.PatchOverrideData = ""; MapModManager.PatchName = ""; Print(SteamAPIIntegration.SteamUserName + " cleared patch"); return; } // Set the address string address = (command == "/patchpb" || command == "/ppb") ? String.Format("https://pastebin.com/raw/{0}", arg) : String.Format("http://frejwedlund.se/jaraci/index.php?p={0}", arg); // Download the patch try { string patchData = MapModUtil.DownloadWebPage(address); try { if (patchData == "") { Print(String.Format("[FF0000][b][i]{0}: '{1}' FAILED (EMPTY)", SteamAPIIntegration.SteamUserName, command)); } else { AttributesPatch patch = AttributeLoader.GetPatchObject(patchData); Print(SteamAPIIntegration.SteamUserName + " received patch [ " + MapModUtil.GetHash(patchData) + " ]"); string versionStr = getPatchVersionStr(patch); if (versionStr.Length > 0) { Print(String.Format(" {0}", versionStr)); } Subsystem.AttributeLoader.PatchOverrideData = patchData; MapModManager.PatchName = arg; } } catch (Exception e) { Print(String.Format("[FF0000][b][i]{0}: '{1}' PARSE FAILED: {2}", SteamAPIIntegration.SteamUserName, command, e.Message)); } } catch (WebException e) { string reason = (e.Status == WebExceptionStatus.Timeout) ? "TIMEOUT" : "NOT FOUND"; Print(String.Format("[FF0000][b][i]{0}: '{1}' FAILED ({2})", SteamAPIIntegration.SteamUserName, command, reason)); } } else if (command == "/praise") // Praise the almighty Sajuuk { Print("[FF00FF][b][i]" + SteamAPIIntegration.SteamUserName + " PRAISES SAJUUK"); } else if (command == "/clear") // Clear both layout and patch { MapModManager.MapXml = ""; MapModManager.LayoutName = ""; Subsystem.AttributeLoader.PatchOverrideData = ""; MapModManager.PatchName = ""; Print(SteamAPIIntegration.SteamUserName + " cleared layout and patch"); } else if (command == "/zoom") // Get the zoom of all players in lobby { Print(SteamAPIIntegration.SteamUserName + "'s zoom extended by " + MapModManager.GetMaxCameraDistance(0).ToString()); } else if (command == "/tip") // Give your respects to the rest of the lobby { Print("[FF8800][b][i]" + SteamAPIIntegration.SteamUserName + " TIPS FEDORA"); } else if (command == "/42348973457868203402395873406897435823947592375-892356773534598347508346578307456738456") // WMD DO NOT USE { try { BBI.Steam.SteamFriendsIntegration.ActivateGameOverlayToWebPage("https://www.youtube.com/watch?v=xfr64zoBTAQ"); } catch {} } else if (command == "/check" || command == "/c") // Advanced state check { Print(String.Format("{0}: {1} [ {2} ] [ {3} ]", SteamAPIIntegration.SteamUserName, MapModManager.ModVersion, MapModUtil.GetHash(MapModManager.MapXml), MapModUtil.GetHash(Subsystem.AttributeLoader.PatchOverrideData))); } else if (command == "/pm" || command == "/patchmeta") { if (this.IsLobbyHost) { if (AttributeLoader.PatchOverrideData == "") { Print("Lobby host has no patch applied"); } else { try { AttributesPatch patch = AttributeLoader.GetPatchObject(AttributeLoader.PatchOverrideData); string outputStr = String.Format("Lobby host patch: {0}", MapModManager.PatchName); if (patch.Meta.Name.Length > 0) { outputStr += String.Format("\n [b]{0}[/b]", patch.Meta.Name); if (patch.Meta.Version.Length > 0) { outputStr += String.Format(" {0}", patch.Meta.Version); } } else if (patch.Meta.Version.Length > 0) { outputStr += String.Format("\n Version: {0}", patch.Meta.Version); } if (patch.Meta.Author.Length > 0) { outputStr += String.Format("\n By: {0}", patch.Meta.Author); } if (patch.Meta.LastUpdate.Length > 0) { outputStr += String.Format("\n Updated: {0}", patch.Meta.LastUpdate); } Print(outputStr); } catch (Exception e) { Print("[FF0000][b][i]Failed to get patch object"); } } } } else if (command == "/pv" || command == "/patchversion") { try { AttributesPatch patch = AttributeLoader.GetPatchObject(AttributeLoader.PatchOverrideData); Print(String.Format("{0}: {1}[ {2} ]", SteamAPIIntegration.SteamUserName, getPatchVersionStr(patch), MapModUtil.GetHash(Subsystem.AttributeLoader.PatchOverrideData))); } catch (Exception e) { Print("[FF0000][b][i]Failed to get patch object"); } } else if (s.IndexOf("[FFFFFF]" + SteamAPIIntegration.SteamUserName + ": ", StringComparison.Ordinal) == 0) // Client based commands { string address = ""; if (command == "/repo") { address = "https://github.com/AGameAnx/dok-repo"; } else if (command == "/layouts" || command == "/ls") { address = "https://github.com/AGameAnx/dok-repo#tournament-layouts"; } else if (command == "/patches" || command == "/ps") { address = "https://github.com/AGameAnx/dok-repo#patches"; } else if (command == "/help") { address = "https://github.com/AGameAnx/dok-repo/blob/master/info/help.md#help"; } else if (command == "/pn" || command == "/patchnotes") { try { AttributesPatch patch = AttributeLoader.GetPatchObject(AttributeLoader.PatchOverrideData); if (patch.Meta.Link.Length > 0) { address = patch.Meta.Link; } else if (patch.Meta.LastUpdate.Length > 0) { Print("Patch doesn't have link meta"); } } catch (Exception e) { Print("[FF0000][b][i]Failed to get patch object"); } } if (address != "") { try { BBI.Steam.SteamFriendsIntegration.ActivateGameOverlayToWebPage(address); } catch { Print("[FF0000][b][i]Failed to open steam overlay"); } } } } }
// Token: 0x06000B87 RID: 2951 RVA: 0x0004090C File Offset: 0x0003EB0C private void LoadReplay() { LevelDefinition levelDefinition = this.mLevelManager.FindLevelFromSceneName(this.mSelectedReplay.SceneName, this.mSelectedReplay.GameSessionSettings.GameMode); if (levelDefinition != null) { // MOD: tell the mod what map is being loaded try { byte[] replayX = System.IO.File.ReadAllBytes(mSelectedReplay.FilePath + "x"); int layoutLength = (replayX[0] << 0) + (replayX[1] << 8) + (replayX[2] << 16) + (replayX[3] << 24); int patchLength = (replayX[4] << 0) + (replayX[5] << 8) + (replayX[6] << 16) + (replayX[7] << 24); int reserved0 = (replayX[8] << 0) + (replayX[9] << 8) + (replayX[10] << 16) + (replayX[11] << 24); int reserved1 = (replayX[12] << 0) + (replayX[13] << 8) + (replayX[14] << 16) + (replayX[15] << 24); MapModManager.MapXml = Encoding.UTF8.GetString(replayX, 16, layoutLength); Subsystem.AttributeLoader.PatchOverrideData = Encoding.UTF8.GetString(replayX, 16 + layoutLength, patchLength); } catch {} Dictionary <CommanderID, TeamID> teams = new Dictionary <CommanderID, TeamID>(); foreach (var tuple in mSelectedReplay.SessionPlayers) { teams[new CommanderID(tuple.CID)] = new TeamID(tuple.TeamID); } MapModManager.SetMap(levelDefinition, mSelectedReplay.GameSessionSettings.GameMode, mSelectedReplay.GameSessionSettings.TeamSetting, teams); // MOD Dictionary <CommanderID, PlayerSelection> dictionary = new Dictionary <CommanderID, PlayerSelection>(this.mSelectedReplay.SessionPlayers.Length); List <NetworkPlayerID> list = new List <NetworkPlayerID>(this.mSelectedReplay.SessionPlayers.Length); for (int i = 0; i < this.mSelectedReplay.SessionPlayers.Length; i++) { ReplayHelpers.ReplayDataTuple replayDataTuple = this.mSelectedReplay.SessionPlayers[i]; CommanderAttributes commanderAttributes = null; foreach (DLCAssetBundleBase dlcassetBundleBase in this.mDLCManager.GetAllLoadedHeadersOfType(DLCType.Faction)) { UnitFactionDLCPack unitFactionDLCPack = dlcassetBundleBase as UnitFactionDLCPack; if (unitFactionDLCPack != null && unitFactionDLCPack.CommanderAttrs != null && unitFactionDLCPack.CommanderAttrs.Name == replayDataTuple.CommanderAttributesName) { commanderAttributes = unitFactionDLCPack.CommanderAttrs; break; } } int j = 0; if (commanderAttributes == null) { for (j = 0; j < this.mLevelManager.CommanderAttributes.Length; j++) { CommanderAttributes commanderAttributes2 = this.mLevelManager.CommanderAttributes[j]; if (commanderAttributes2.Name == replayDataTuple.CommanderAttributesName) { commanderAttributes = commanderAttributes2; break; } } } if (commanderAttributes == null) { Log.Error(Log.Channel.Data, "Couldn't resolve commander attributes from saved replay. The replay that was saved didn't have commander attributes that match the commander attributes in the level ({0})", new object[] { replayDataTuple.CommanderAttributesName }); } else { CommanderDescription commanderDescription = new CommanderDescription(replayDataTuple.PlayerName, new CommanderID(replayDataTuple.CID), replayDataTuple.PlayerID, replayDataTuple.SpawnIndex, j, new TeamID(replayDataTuple.TeamID), replayDataTuple.PlayerType, replayDataTuple.UnitColors, replayDataTuple.AIDifficulty, replayDataTuple.UnitSkinPack, replayDataTuple.RandomFaction); dictionary.Add(commanderDescription.CommanderID, new PlayerSelection(commanderAttributes, commanderDescription)); if (replayDataTuple.PlayerID != NetworkPlayerID.kInvalidID) { list.Add(replayDataTuple.PlayerID); } } } DependencyContainer <GameStartSettings, ReplayHelpers.ReplayableGameSessionHeader, SessionBase> dependencies = new DependencyContainer <GameStartSettings, ReplayHelpers.ReplayableGameSessionHeader, SessionBase>(new GameStartSettings(dictionary, this.mSelectedReplay.GameSessionSettings.VictoryConditions, this.mSelectedReplay.GameSessionSettings.TeamSetting, this.mSelectedReplay.GameSessionSettings.GameModeSettings, this.mSelectedReplay.RandomSeed, false, false, AutomatchSizeType.ThreeVSThree), this.mSelectedReplay, new NullSession(list)); this.mLevelManager.LoadLevelForSave(levelDefinition, this.mSelectedReplay.GameSessionSettings.GameMode, ReplayMode.ReplayingGame, dependencies); return; } Log.Error(Log.Channel.Data, "The level associated with {0} could not be found", new object[] { this.mSelectedReplay.SceneName }); }