using System; using System.IO; using System.Net; using System.Linq; using System.Data; using System.Timers; using System.Data.SqlClient; using System.Collections.Generic; using Filter.Handlers.Login; using Filter.Handlers.Manager; using Filter.Handlers.Zone; using Filter.Networking.Login; using Filter.Networking.Manager; using Filter.Networking.RemoteConsole; using Filter.Networking.Zone; using Filter.Utilities; namespace Filter { internal class Program { public static ConfigLoader Config; public static CurrencyLoader CustomCurrency; public static Lottery ServerLottery; public static SqlConnectionStringBuilder ConnectionBuilder; public static Dictionary LoginToManagerTransfer; public static LoginHandlerLoader LoginHandlers; public static ManagerHandlerLoader ManagerHandlers; public static ZoneHandlerLoader ZoneHandlers; public static Dictionary ManagerLoggedIn; public static List RemoteLoggedIn; public static Timer WOnlineTimer; public static Timer MoneyTimer; private static void Main() { Config = new ConfigLoader(); Console.Title = String.Format("{0} Heroes of Isya: {1}", Config.SName, DateTime.Now.Year); AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; if (Config.CCEnabled) { CustomCurrency = new CurrencyLoader(); } if (Config.LotteryEnabled) { ServerLottery = new Lottery(); } ConnectionBuilder = new SqlConnectionStringBuilder(); ConnectionBuilder.DataSource = Config.SQLDataSource; ConnectionBuilder.Password = Config.SQLPassword; ConnectionBuilder.UserID = Config.SQLUsername; LoginToManagerTransfer = new Dictionary(); LoginHandlers = new LoginHandlerLoader(); ManagerHandlers = new ManagerHandlerLoader(); ZoneHandlers = new ZoneHandlerLoader(); ManagerLoggedIn = new Dictionary(); RemoteLoggedIn = new List(); if (Config.OTEnabled) { WOnlineTimer = new Timer(); WOnlineTimer.AutoReset = true; WOnlineTimer.Elapsed += WOnlineTimer_Elapsed; WOnlineTimer.Interval = Config.OTInterval * 1000; WOnlineTimer.Start(); } if (Config.MoneyEnabled) { MoneyTimer = new Timer(); MoneyTimer.AutoReset = true; MoneyTimer.Elapsed += MoneyTimer_Elapsed; MoneyTimer.Interval = Program.Config.MoneyInterval * 1000; MoneyTimer.Start(); } LoginListener LoginListen = new LoginListener(Config.LoginBind, Config.LoginConnect); ManagerListener ManagerListen = new ManagerListener(Config.ManagerBind, Config.ManagerConnect); foreach (Zone Z in Config.Zones) { ZoneListener ZoneListen = new ZoneListener(Z.ZoneID, Z.BindPort, Z.ConnectPort); } if (Config.RemoteEnabled) { RemoteListener RemoteListen = new RemoteListener(Config.RemoteBindPort); } Console.ReadLine(); } private static void WOnlineTimer_Elapsed(Object Sender, ElapsedEventArgs Args) { if (Config.OTType == MessageType.Whisper) { Echo.SendWhisper(true, Config.OTMessage.Replace("{PLAYER_COUNT}", Convert.ToString(ManagerLoggedIn.Count))); } else { Echo.SendWorldMessage(true, Config.OTMessage.Replace("{PLAYER_COUNT}", Convert.ToString(ManagerLoggedIn.Count))); } } private static void MoneyTimer_Elapsed(Object Sender, ElapsedEventArgs Args) { using (var Connection = new SqlConnection()) { Connection.ConnectionString = Program.ConnectionBuilder.ConnectionString; try { Connection.Open(); } catch { } if (Connection.State == ConnectionState.Open) { using (var Command = Connection.CreateCommand()) { foreach (var MClient in ManagerLoggedIn.Values.Where(AccountID => AccountID.AccountID != -1).Where(Character => Character.CharacterName != String.Empty)) { Command.CommandText = String.Format("SELECT COUNT(*) FROM {0}..tUserMoney WHERE nUserNo = '{1}'", Program.Config.SQLCharacter, MClient.AccountID); Int32 Count = Convert.ToInt32(Command.ExecuteScalar()); if (Count == 0) { Command.CommandText = String.Format("INSERT INTO {0}..tUserMoney (nUserNo, nUserMoney) VALUES('{1}', {2})", Config.SQLCharacter, MClient.AccountID, Config.MoneyGive); try { Command.ExecuteNonQuery(); } catch { } } else { Command.CommandText = String.Format("UPDATE {0}..tUserMoney SET nUserMoney = (nUserMoney + {1}) WHERE nUserNo = '{2}'", Config.SQLCharacter, Config.MoneyGive, MClient.AccountID); try { Command.ExecuteNonQuery(); } catch { } } if (Config.MoneyType == MessageType.Whisper) { Echo.SendWhisper(MClient, Config.MoneyMessage); } else { Echo.SendWorldMessage(MClient, Config.MoneyMessage); } } } } Connection.Close(); } } private static void CurrentDomain_UnhandledException(Object Sender, UnhandledExceptionEventArgs Args) { Console.WriteLine(((Exception)Args.ExceptionObject).ToString()); Console.ReadLine(); } } }