public void OpenBattleRoom(string modname, string mapname, bool now = true) { if (!now && spring.IsRunning) { spring.WaitForExit(); } Stop(); bossName = ""; lastMapChange = DateTime.Now; if (String.IsNullOrEmpty(modname)) { modname = config.Mod; } if (String.IsNullOrEmpty(mapname)) { mapname = config.Map; } string title = config.Title.Replace("%1", MainConfig.SpringieVersion); string password = null; if (!string.IsNullOrEmpty(config.BattlePassword)) { password = config.BattlePassword; } int maxPlayers = config.MaxPlayers; string engine = springPaths.SpringVersion; if (SpawnConfig != null) { modname = SpawnConfig.Mod; if (SpawnConfig.MaxPlayers > 0) { maxPlayers = SpawnConfig.MaxPlayers; } if (!String.IsNullOrEmpty(SpawnConfig.Map)) { mapname = SpawnConfig.Map; } title = SpawnConfig.Title; if (!String.IsNullOrEmpty(SpawnConfig.Password)) { password = SpawnConfig.Password; } if (!String.IsNullOrEmpty(SpawnConfig.Engine)) { engine = SpawnConfig.Engine; } { //Something needs to go here to properly tell Springie to use a specific engine version, //attempted code below may or may not be responsible for recent springie drops, so commenting. //the below may be causing a rehost //requestedEngineChange = SpawnConfig.Engine; //alternate attempt /* * Program.main.Downloader.GetAndSwitchEngine(SpawnConfig.Engine); * config.SpringVersion = SpawnConfig.Engine; * springPaths.SetEnginePath(Program.main.paths.GetEngineFolderByVersion(SpawnConfig.Engine)); */ } } //title = title + string.Format(" [engine{0}]", springPaths.SpringVersion); // no mod was provided, auto update is on, check if newer version exists, if it does use that instead of config one if (string.IsNullOrEmpty(modname) && !String.IsNullOrEmpty(config.AutoUpdateRapidTag)) { var ver = Program.main.Downloader.PackageDownloader.GetByTag(config.AutoUpdateRapidTag); if (ver != null && cache.GetResourceDataByInternalName(ver.InternalName) != null) { modname = config.AutoUpdateRapidTag; } } PackageDownloader.Version version = Program.main.Downloader.PackageDownloader.GetByTag(modname); if (version != null && version.InternalName != null) { modname = version.InternalName; } hostedMod = new Mod() { Name = modname }; cache.GetMod(modname, (m) => { hostedMod = m; }, (m) => {}); if (hostedMod.IsMission && !String.IsNullOrEmpty(hostedMod.MissionMap)) { mapname = hostedMod.MissionMap; } //Map mapi = null; //cache.GetMap(mapname, (m, x, y, z) => { mapi = m; }, (e) => { }, springPaths.SpringVersion); //int mint, maxt; if (!springPaths.HasEngineVersion(engine)) { Program.main.Downloader.GetAndSwitchEngine(engine, springPaths); } else { springPaths.SetEnginePath(springPaths.GetEngineFolderByVersion(engine)); } var b = new Battle(engine, password, hostingPort, maxPlayers, mapname, title, modname); b.Ip = Program.main.Config.IpOverride; tas.OpenBattle(b); }
public void Start(string modname, string mapname, bool now = true) { if (!now && spring.IsRunning) { spring.WaitForExit(); } Stop(); lastMapChange = DateTime.Now; if (String.IsNullOrEmpty(modname)) { modname = config.Mod; } if (String.IsNullOrEmpty(mapname)) { mapname = config.Map; } string title = config.Title.Replace("%1", MainConfig.SpringieVersion); string password = "******"; if (!string.IsNullOrEmpty(config.BattlePassword)) { password = config.BattlePassword; } if (SpawnConfig != null) { modname = SpawnConfig.Mod; mapname = SpawnConfig.Map; title = SpawnConfig.Title; if (!String.IsNullOrEmpty(SpawnConfig.Password)) { password = SpawnConfig.Password; } if (!String.IsNullOrEmpty(SpawnConfig.Engine)) { //Something needs to go here to properly tell Springie to use a specific engine version, //attempted code below may or may not be responsible for recent springie drops, so commenting. //the below may be causing a rehost //requestedEngineChange = SpawnConfig.Engine; //alternate attempt /* * Program.main.Downloader.GetAndSwitchEngine(SpawnConfig.Engine); * config.SpringVersion = SpawnConfig.Engine; * springPaths.SetEnginePath(Program.main.paths.GetEngineFolderByVersion(SpawnConfig.Engine)); */ } } //title = title + string.Format(" [engine{0}]", springPaths.SpringVersion); // no mod was provided, auto update is on, check if newer version exists, if it does use that instead of config one if (string.IsNullOrEmpty(modname) && !String.IsNullOrEmpty(config.AutoUpdateRapidTag)) { var ver = Program.main.Downloader.PackageDownloader.GetByTag(config.AutoUpdateRapidTag); if (ver != null && cache.GetResourceDataByInternalName(ver.InternalName) != null) { modname = config.AutoUpdateRapidTag; } } PackageDownloader.Version version = Program.main.Downloader.PackageDownloader.GetByTag(modname); if (version != null && cache.GetResourceDataByInternalName(version.InternalName) != null) { modname = version.InternalName; } hostedMod = new Mod(); cache.GetMod(modname, (m) => { hostedMod = m; }, (m) => { }, springPaths.SpringVersion); if (hostedMod.IsMission && !String.IsNullOrEmpty(hostedMod.MissionMap)) { mapname = hostedMod.MissionMap; } Map mapi = null; cache.GetMap(mapname, (m, x, y, z) => { mapi = m; }, (e) => { }, springPaths.SpringVersion); //int mint, maxt; var b = new Battle(springPaths.SpringVersion, password, hostingPort, config.MaxPlayers, 0, mapi, title, hostedMod, new BattleDetails()); // if hole punching enabled then we use it if (Program.main.Config.UseHolePunching) { b.Nat = Battle.NatMode.HolePunching; } else if (Program.main.Config.GargamelMode) { b.Nat = Battle.NatMode.FixedPorts; } else { b.Nat = Battle.NatMode.None; // else either no nat or fixed ports (for gargamel fake - to get client IPs) } tas.OpenBattle(b); tas.SetScriptTag("GAME/hosttype=SPRINGIE"); }