private static void Main(string[] args) { #if DEBUG AllocConsole(); #endif try { args = new string[] { "-InstallerVersion", CurrentInstallerBuild.ToString(), "en" }; #if DEBUG Console.WriteLine("Nichosy " + DataExport.version); #endif DataExport.Fill(); bool flag = false; bool flag2 = false; string str = "en"; if ((args == null) || (args.Length < 1)) { flag = true; } if ((args != null) && (args.Length > 1)) { if (args[0].ToLowerInvariant() == "-installerversion") { if (Convert.ToInt32(args[1]) < CurrentInstallerBuild) { flag2 = true; } } else if (!(args[0].ToLowerInvariant() == "-installer")) { flag = true; } if (args.Length > 2) { if (args[2].Length > 0) { str = args[2]; } if ((args.Length > 3) && (args[3].Length > 0)) { if (args[3] == "st") { steamInstall = true; } if (args[3] == "bp") { bigpointInstall = true; } if (args[3] == "bp2") { bigpointPartnerInstall = true; } if (args[3] == "ae") { aeriaInstall = true; } if (args[3] == "gf") { gamersFirstInstall = true; if ((args.Length > 4) && (args[4].Length > 0)) { gamersFirstTokenMD5 = args[4]; } } if (args[3] == "arc") { if (args.Length > 4) { arcUsername = args[4]; arcInstall = true; if (arcUsername.Length <= 0) { arcLauncherStart = true; } } else { arcLauncherStart = true; } } } } } else { flag2 = true; } xmas_period = HolidayPeriods.xmas(DateTime.Now); if (arcLauncherStart) { arc_launchClient(str); } else if (flag) { MessageBox.Show(SK.Text("ProgramMain_Launch_Failure1", "This is not the game exe!") + Environment.NewLine + Environment.NewLine + SK.Text("ProgramMain_Launch_Failure2", "Please run Stronghold Kingdoms in the normal manner."), SK.Text("ProgramMain_Launch_Failure", "Stronghold Kingdoms Error"), MessageBoxButtons.OK); } else if (flag2 && !steamInstall) { MessageBoxButtons oKCancel = MessageBoxButtons.OKCancel; if (MessageBox.Show(SK.Text("ProgramMain_New_nInstaller", "A new version of the Updater/Installer is needed") + Environment.NewLine + SK.Text("ProgramMain_Must_Install", "You cannot Launch Stronghold Kingdoms until this is installed") + Environment.NewLine + Environment.NewLine + SK.Text("ProgramMain_Install_Now", "Do you wish to install this now?"), SK.Text("ProgramMain_Installer_Update", "Stronghold Kingdoms Installer Update"), oKCancel) == DialogResult.OK) { string path = InstallerUpdater.downloadSelfUpdater(new Uri("http://static.strongholdkingdoms.com/Kingdoms/kingdoms-setup-update-" + CurrentInstallerBuild.ToString() + ".exe")); if ((path != null) && (path.Length > 0)) { InstallerUpdater.runInstaller(path); } } } else { bool flag3; string name = @"Global\StrongholdKingdoms"; using (new Mutex(true, name, out flag3)) { bool flag4; try { OperatingSystem oSVersion = Environment.OSVersion; if ((oSVersion.Platform == PlatformID.Win32NT) && (oSVersion.Version.Major >= 6)) { SetProcessDPIAware(); } } catch (Exception) { } AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Program.CurrentDomain_UnhandledException); Application.ThreadException += new ThreadExceptionEventHandler(Program.CurrentDomain_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); communityLangs = SKLocalization.scanForLanguages(GameEngine.getLangsPath()); installedLangCode = str; mySettings = MySettings.load(); if (mySettings.LanguageIdent.Length == 0) { mySettings.LanguageIdent = str; } else if (mySettings.InstalledLanguageIdent != str) { mySettings.LanguageIdent = str; mySettings.InstalledLanguageIdent = str; } if (!mySettings.OwnLanguageAvailableAndChecked) { string str6 = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.ToLower(); if (str6 != mySettings.LanguageIdent) { if (str6 == "en") { mySettings.OwnLanguageAvailableAndChecked = true; } else if ((((str6 == "de") || (str6 == "fr")) || ((str6 == "ru") || (str6 == "es"))) || (((str6 == "pl") || (str6 == "it")) || ((str6 == "tr") || (str6 == "pt")))) { string str7 = SK.Text("ProgramMain_A_New_Language", "A New Language is available : "); switch (str6) { case "de": str7 = str7 + "Deutsch"; break; case "fr": str7 = str7 + "Fran\x00e7ais"; break; case "ru": str7 = str7 + "Русский"; break; case "es": str7 = str7 + "Espa\x00f1ol"; break; case "pl": str7 = str7 + "Polski"; break; case "it": str7 = str7 + "Italiano"; break; case "tr": str7 = str7 + "T\x00fcrk\x00e7e"; break; case "pt": str7 = str7 + "Portugu\x00eas do Brasil"; break; } if (MessageBox.Show(str7 + Environment.NewLine + SK.Text("ProgramMain_Use_New_Language", "Your system settings indicate you are using this language, do you wish to play Stronghold Kingdoms in this language?"), SK.Text("ProgramMain_NewLanguageAvailable", "New Language Available"), MessageBoxButtons.YesNo) == DialogResult.Yes) { mySettings.LanguageIdent = str6; } mySettings.OwnLanguageAvailableAndChecked = true; } } else { mySettings.OwnLanguageAvailableAndChecked = true; } } switch (mySettings.LanguageIdent) { case "en": case "de": case "fr": case "ru": case "es": case "pl": case "pt": case "tr": case "it": SKLocalization.LoadLocalization(Application.StartupPath + @"\Localization\", mySettings.LanguageIdent); goto Label_079B; default: flag4 = false; foreach (SKLang lang in communityLangs) { if (lang.id == mySettings.LanguageIdent) { SKLocalization.LoadLocalization(GameEngine.getLangsPath(), lang.id); if ((SKLocalization.Instance == null) || !SKLocalization.Instance.valid) { flag4 = false; } else { flag4 = true; } break; } } break; } if (!flag4) { mySettings.LanguageIdent = "en"; SKLocalization.LoadLocalization(Application.StartupPath + @"\Localization\", mySettings.LanguageIdent); } Label_079B: if (steamInstall) { bool flag5 = false; try { if (Steam_Init() > 0) { steamActive = true; Steam_getTicket(); string sessionid = BitConverter.ToString(steam_SessionTicket).Replace("-", ""); XmlRpcAuthRequest req = new XmlRpcAuthRequest("", "", "", "", sessionid, "", "", ""); XmlRpcAuthResponse response = XmlRpcAuthProvider.CreateForEndpoint(URLs.ProfileProtocol, URLs.ProfileServerAddressLogin, URLs.ProfileServerPort, URLs.ProfilePath).AuthenticateSteamAccount(req, null, null, 0x3a98); if (response.SuccessCode == 1) { flag5 = true; steamID = response.Message; steamEmail = response.UserGUID; mySettings.AutoLogin = false; if (steamEmail.Trim().Length > 0) { kingdomsAccountFound = true; } else { kingdomsAccountFound = false; } } } } catch (Exception) { steamActive = false; } if (!flag5) { MessageBox.Show(SK.Text("Steam_steam_required", "Stronghold Kingdoms requires the Steam Client to be running in Online mode."), SK.Text("Steam_error", "Steam Error")); Application.Exit(); return; } } if (!arcInstall || arc_login(arcUsername)) { if (gamersFirstInstall && (gamersFirstTokenMD5.Length == 0)) { MessageBox.Show(SK.Text("GF_token_error", "Unable to verify your GamersFirst identity. Please try again. If this issue persists, please contact support."), SK.Text("GF_Error", "GamersFirst Error")); Application.Exit(); } else { LoadingPanel panel = new LoadingPanel(); panel.init(); panel.Show(); panel.TopMost = true; panel.BringToFront(); panel.Focus(); panel.BringToFront(); panel.TopMost = false; string basePath = Application.StartupPath + @"\geckofx\xulrunner"; loadGeckoDLLs(basePath); Xpcom.Initialize(basePath); bool flag6 = testMutex(); if (!flag3 || flag6) { MessageBox.Show(SK.Text("ProgramMain_Already_Running", "Already running") + "...", "Stronghold Kingdoms"); } else { bool flag7 = true; TimerCaps caps = new TimerCaps(); timeGetDevCaps(ref caps, Marshal.SizeOf(caps)); timerPeriod = Math.Max(caps.periodMin, 1); timeBeginPeriod(timerPeriod); DXTimer.Init(); GameEngine engine = null; try { engine = new GameEngine(); } catch (FileNotFoundException exception) { if (exception.FileName.Contains("irectX")) { GameEngine.displayDirectXError(); } timeEndPeriod(timerPeriod); panel.Close(); return; } GraphicsMgr mgr = new GraphicsMgr(); int maxRes = 2; Screen primaryScreen = Screen.PrimaryScreen; int width = primaryScreen.Bounds.Width; int height = primaryScreen.Bounds.Height; if ((width < 0x400) || (height < 0x300)) { MessageBoxButtons yesNo = MessageBoxButtons.YesNo; panel.Close(); panel = null; if (MessageBox.Show(SK.Text("ProgramMain_Screen_Too_Small", "Your screen resolution is too small to run Stronghold Kingdoms") + Environment.NewLine + Environment.NewLine + SK.Text("ProgramMain_Try_Anyway", "Try to anyway?"), SK.Text("ProgramMain_Error", "Error"), yesNo) != DialogResult.Yes) { timeEndPeriod(timerPeriod); return; } } int num6 = width - 80; int num7 = height - 100; if (num6 < 0x3b0) { num6 = 0x3b0; } if (num7 < 0x29c) { num7 = 0x29c; } mySettings.Save(); CastleMap.displayCollapsed = mySettings.CastleWalls; MainWindow newParentMainWindow = null; Form form = null; form = new MainWindow { Visible = false }; if (arcInstall) { arc_init(form); } ((MainWindow)form).allowResizing(false); int screenWidth = num6; int screenHeight = num7; if (mySettings.ScreenWidth > 0) { screenWidth = mySettings.ScreenWidth; } if (mySettings.ScreenHeight > 0) { screenHeight = mySettings.ScreenHeight; } if (screenWidth > width) { screenWidth = width; } if (screenHeight > height) { screenHeight = height; } if (flag7) { form.MaximumSize = new Size(0xf00, 0x870); form.ClientSize = new Size(screenWidth, screenHeight); } else { form.ClientSize = new Size(0x3e8, 720); form.MaximumSize = new Size(0x41a, 760); } if (mySettings.Maximize) { form.WindowState = FormWindowState.Maximized; } form.Text = "Stronghold Kingdoms"; ((MainWindow)form).allowResizing(true); newParentMainWindow = (MainWindow)form; InterfaceMgr.Instance.registerForm(form, newParentMainWindow); if (!engine.Initialise(mgr, maxRes, 2)) { if (panel != null) { panel.Close(); panel = null; } } else { SVG_Source instance = SVG_Source.Instance; Sound.setMusicState(mySettings.Music); GameEngine.Instance.AudioEngine.setMP3MasterVolume(((float)mySettings.MusicVolume) / 100f, 0); Sound.setSFXState(mySettings.SFX); Sound.setBattleSFXState(mySettings.BattleSFX); GameEngine.Instance.AudioEngine.setSFXMasterVolume(((float)mySettings.SFXVolume) / 100f); Sound.setEnvironmentalState(mySettings.Environmentals); GameEngine.Instance.AudioEngine.setEnvironmentalMasterVolume(((float)mySettings.EnvironmentalVolume) / 100f); bool flag8 = true; if (panel != null) { panel.Close(); panel = null; } RemoteServices.Instance.initChannel(); while (flag8) { engine.reLogin(); flag8 = false; RemoteServices.Instance.UserID = -1; RemoteServices.Instance.set_CommonData_UserCallBack(null); while (RemoteServices.Instance.UserID < 0) { engine.installKeyboardHook(); GameEngine.Instance.reLogin(); GameEngine.Instance.clearServerDowntime(); profileLogin = engine.getLoginWindow(); if (profileLogin == null) { profileLogin = new ProfileLoginWindow(); GameEngine.Instance.setProfileLogin(profileLogin); profileLogin.Show(); profileLogin.init(); } else { profileLogin.openAfterCancel(); } RemoteServices.Instance.clearQueues(); while (profileLogin.Created && profileLogin.UserEntryMode) { RemoteServices.Instance.processData(); Thread.Sleep(1); DoEvents(); profileLogin.update(); StatTrackingClient.Instance().Update(0.01); } GameEngine.Instance.reLogin(); form.Text = "Stronghold Kingdoms"; if (WorldName != string.Empty) { form.Text = form.Text + " - " + WorldName; } if (RemoteServices.Instance.UserID == -1) { GameEngine.Instance.killLoadThread(); mySettings.Maximize = form.WindowState == FormWindowState.Maximized; form.Close(); shutdown(); return; } } engine.showConnectingPopup(); engine.World.loadLocalWorldData(); engine.World.updateWorldMapOwnership(); bool flag9 = true; while (flag9) { flag9 = false; VillageMap.loadVillageBuildingsGFX(); while (engine.isStillLoading()) { Thread.Sleep(10); DoEvents(); RemoteServices.Instance.processData(); GameEngine.Instance.updateConnectingPopup(); } GameEngine.Instance.World.initSprites(GameEngine.Instance.GFX); GameEngine.Instance.resumeCommonRemote(); engine.enableConnectingPopup(); while (!GameEngine.Instance.World.isDownloadComplete()) { Thread.Sleep(10); Application.DoEvents(); RemoteServices.Instance.processData(); GameEngine.Instance.updateConnectingPopup(); if (engine.loginCancelled()) { break; } } if (DataExport.controlForm != null) DataExport.controlForm.Close(); DataExport.controlForm = new ControlForm(); DataExport.controlForm.Show(); if (engine.pendingError()) { engine.updateConnectingPopup(); engine.forceRelogin(); } if (!engine.loginCancelled()) { engine.World.saveFactionData(); engine.World.saveNamesData(); #if DEBUG DataExport.saveFactionData(engine.World); DataExport.saveNamesData(engine.World); #endif engine.enableConnectingPopup2(); while (engine.waitForConnectingPopupToClose()) { Thread.Sleep(10); DoEvents(); RemoteServices.Instance.processData(); if (engine.loginCancelled()) { break; } } } if (RemoteServices.Instance.UserID == -1) { GameEngine.Instance.killLoadThread(); mySettings.Maximize = form.WindowState == FormWindowState.Maximized; form.Close(); shutdown(); return; } Sound.playMusic(); bool flag10 = false; if (!engine.reLogin()) { InterfaceMgr.Instance.setupVillageName(); form.Show(); form.Visible = true; newParentMainWindow.MainWindowLarge_SizeChanged(null, null); GameEngine.Instance.lateStart(); if ((GameEngine.Instance.World.numVillagesOwned() > 0) && RemoteServices.Instance.ShowAdminMessage) { AdminInfoPopup.showMessage(); } while (form.Created) { engine.run(); if (engine.reLogin()) { form.Hide(); form.Visible = false; engine.windowClosing(); if (!engine.quitting()) { flag8 = true; } flag10 = true; break; } StatTrackingClient.Instance().Update(0.01); RemoteServices.Instance.processData(); if (form.Created) { Thread.Sleep(1); } } } else { flag8 = true; flag10 = true; } if (!flag10) { form.Hide(); form.Visible = false; form = null; newParentMainWindow = null; } engine.World.saveFactionData(); engine.World.saveNamesData(); #if DEBUG DataExport.saveFactionData(engine.World); DataExport.saveNamesData(engine.World); #endif Sound.stopMusic(); } } try { if (form != null) { mySettings.Maximize = form.WindowState == FormWindowState.Maximized; } } catch (Exception) { } shutdown(); } } } } } } } catch (Exception ex) { Console.WriteLine(ex); File.WriteAllText("ex.txt", ex.ToString()); } finally { if (DataExport.controlForm != null) DataExport.controlForm.Close(); } }
public GameEngine() { Instance = this; }