static void Main(string[] args) { Console.CancelKeyPress += async(o, e) => { if (statusUpdate != null) { statusUpdate?.Dispose(); } if (bot != null) { await bot?.DisconnectAsync(); bot?.Dispose(); SuccessMessage("[Discord Bot] Disconnest."); } if (database != null) { database.Close(); database.Dispose(); SuccessMessage("[Database] Disconnest."); } Duels.Dispose(); }; MainAsync().ConfigureAwait(false).GetAwaiter().GetResult(); }
protected void secondTick(object sender, EventArgs e) { DateTime now = DateTime.Now; lock (Duels) Duels.RemoveAll(d => d.ExpireDate < now); lock (Trades) Trades.RemoveAll(d => d.ExpireDate < now); lock (High5s) High5s.RemoveAll(d => d.ExpireDate < now); { Tuple <DateTime, string, string> cacheItem; while (UserCommandCache.TryPeek(out cacheItem)) { if (cacheItem.Item1 < now) { UserCommandCache.TryDequeue(out cacheItem); } else { break; } } } }
private void _duelListBox_KeyDown(object sender, KeyEventArgs e) { // Remove selected duel if (e.Key != Key.Delete || _duelListBox.SelectedItem == null) { return; } Duels.Remove((Duel)_duelListBox.SelectedItem); }
private void _addDuelButton_Click(object sender, RoutedEventArgs e) { // Check for selected items if (_duel1ComboBox.SelectedItem == null || _duel2ComboBox.SelectedItem == null) { return; } Duels.Add(new Duel(((KeyValuePair <short, string>)_duel1ComboBox.SelectedItem).Key, ((KeyValuePair <short, string>)_duel1ComboBox.SelectedItem).Value, ((KeyValuePair <short, string>)_duel2ComboBox.SelectedItem).Key, ((KeyValuePair <short, string>)_duel2ComboBox.SelectedItem).Value)); }
internal void Dispose() { try{ Marshal.FreeHGlobal(m_buffer); }catch (Exception) { //Console.WriteLine(e.ToString()); } lock (Duels) Duels.Remove(m_pDuel); m_pDuel = IntPtr.Zero; }
internal Duel(IntPtr pDuel) { m_buffer = Marshal.AllocHGlobal(4096); m_pDuel = pDuel; lock (Duels){ if (!Duels.ContainsKey(m_pDuel)) { Duels.Add(m_pDuel, this); } } }
private void OnDepositCanceled(string guid) { DepositController trade; if (m_Boxes.TryGetValue(guid, out trade)) { global::RustyCore.Utils.Logger.Info($"DepositCanceled {trade.shop.net.ID}"); trade.shop.ReturnPlayerItems(trade.player1); trade.shop.ReturnPlayerItems(trade.player2); var hash = m_Hashes[trade]; m_Hashes.Remove(trade); DropDeposit(trade); Duels?.Call("OnDepositEnd", false, hash); } }
static async Task MainAsync() { if ((database = await GetSqliteConnectionAsync()) == null) { await Task.Delay(-1); } Subjects.database = database; Duels.database = database; Duelists.database = database; await Duels.LoadAsync(); config = await Config.LoadAsync(); if (config.Prefix == null) { config.Prefix = "!"; } bot = new DiscordClient(new DiscordConfiguration { Token = config.Token, TokenType = TokenType.Bot, UseInternalLogHandler = true, LogLevel = LogLevel.Debug }); bot.MessageCreated += MessageCreatedAsync; Duels.DuelReactionAddedInitialize(); bot.GuildMemberAdded += async e => { await e.Member.GrantRoleAsync(e.Guild.GetRole(704769580068765788u), "join the server"); }; await bot.ConnectAsync(); statusUpdate = new Timer(async o => { if (database?.State != ConnectionState.Open) { await database.OpenAsync(); } var members = await(await bot?.GetGuildAsync(config.Server))?.GetAllMembersAsync(); await bot?.UpdateStatusAsync(new DiscordGame($"{members[new Random().Next(0, members.Count)]?.DisplayName}."), UserStatus.Online); }, null, 0, 300000); await Task.Delay(-1); }
internal static void Initialize() { Resources.Logger = LogManager.GetCurrentClassLogger(typeof(Resources)); Factory.Initialize(); CSV.Initialize(); LevelFile.Initialize(); GameEvents.Initialize(); Globals.Initialize(); Settings.Initialize(); Fingerprint.Initialize(); if (Constants.Database == DBMS.Mongo) { Mongo.Initialize(); } Resources.Regex = new Regex("[ ]{2,}", RegexOptions.Compiled); Resources.Name = new Regex("^[a-zA-Z0-9- ]*$"); Resources.Processor = new Processor(); Resources.Devices = new Devices(); Resources.Accounts = new Accounts(); Resources.Battles = new Battles(); Resources.Clans = new Clans(); Resources.Chats = new Chats(); Resources.Duels = new Duels(); Resources.Random2 = new System.Random(DateTime.UtcNow.ToString().GetHashCode()); Resources.Random = new XorShift(); Resources.Gateway = new Gateway(); Resources.StartTime = DateTime.UtcNow; Resources.Timers = new Timers(); Resources.Started = true; Parser.Initialize(); EventsHandler.Initialize(); Console.WriteLine("We loaded " + Factory.Messages.Count + " messages, " + Factory.Commands.Count + " commands, and " + Factory.Debugs.Count + " debug commands.\n"); #if Debug Resources.Test = new Test(); #endif }
private void OnCompleteTrade(ShopFront shop) { var trade = m_Boxes.Select(p => p.Value).FirstOrDefault(p => p.shop.net.ID == shop.net.ID); if (trade != null) { global::RustyCore.Utils.Logger.Info($"OnCompleteTrade {trade.shop.net.ID}"); trade.Complete(); var competition = new Competition(); m_Instance.Puts("Ставка " + shop.customerPlayer); var customerItems = new List <Item>(); foreach (var item in shop.customerInventory.itemList.Where(p => p != null).ToList()) { m_Instance.Puts(item.info.shortname + " " + item.amount); item.RemoveFromContainer(); customerItems.Add(item); } m_Instance.Puts("Ставка " + shop.vendorPlayer); var vendorItems = new List <Item>(); foreach (var item in shop.vendorInventory.itemList.Where(p => p != null).ToList()) { m_Instance.Puts(item.info.shortname + " " + item.amount); item.RemoveFromContainer(); vendorItems.Add(item); } competitions.Add(competition); competition.Players.Add(shop.customerPlayer); competition.Players.Add(shop.vendorPlayer); competition.Bets = new Dictionary <BasePlayer, List <Item> >() { { shop.customerPlayer, customerItems }, { shop.vendorPlayer, vendorItems }, }; var hash = m_Hashes[trade]; m_Hashes.Remove(trade); Duels?.Call("OnDepositEnd", true, hash); DropDeposit(trade); } }
public IActionResult Create(Duels duels) { var game = _duelDataAccess.AddAsync(new Duels() { Id = ObjectId.GenerateNewId().ToString(), HomeUserId = duels.HomeUserId, AwayUserId = duels.AwayUserId, HomeScore = duels.HomeScore, AwayScore = duels.AwayScore, GameId = duels.GameId, DuelCoin = duels.DuelCoin, Award = duels.Award, Status = duels.Status, WinnerUserId = duels.WinnerUserId, EndTime = duels.EndTime }); if (game == null) { return(BadRequest(new { message = "Duello eklenemedi!" })); } return(Ok(new { game.Result })); }
private void defy(Player defieur, string cmd, string[] args) { if (args.Length < 1) { PrintToChat(defieur, GetMessage("IncorrectCmd", defieur.Id)); } else { if (!isOnline(args[0])) { PrintToChat(defieur, GetMessage("UnknownPlayer", defieur.Id)); } else { //joueur défié existant Player receveurDefi = Server.GetPlayerByName(args[0]); if (receveurDefi.Id == defieur.Id) { PrintToChat(defieur, GetMessage("NoSelfDefy", defieur.Id)); } else { if (DistancePointAPointB(getPosition(defieur), getPosition(receveurDefi)) > 15f) { // cible <= 15 mêtres? PrintToChat(defieur, GetMessage("MaxRange", defieur.Id)); } else { //check si déjà un défi Duels leDuel = null; foreach (Duels unDuel in _ListeDuels) { if (unDuel.joueurDefieur == defieur.Id && unDuel.joueurReceveurDefi == receveurDefi.Id || unDuel.joueurDefieur == receveurDefi.Id && unDuel.joueurReceveurDefi == defieur.Id) { leDuel = unDuel; } } if (leDuel != null) { //deja un duel prévu ou en cours entre les 2 joueurs Player adversaire = Server.GetPlayerById(leDuel.joueurReceveurDefi); if (defieur.Id == leDuel.joueurReceveurDefi) { adversaire = Server.GetPlayerById(leDuel.joueurDefieur); } if (leDuel.duelEnCours) { //deja un duel en cours PrintToChat(defieur, GetMessage("MaxRange", defieur.Id) + adversaire.Name); } else { //deja un duel pas validé if (defieur.Id == leDuel.joueurDefieur) { //relance défi PrintToChat(defieur, GetMessage("AlreadyAsk", defieur.Id) + adversaire.Name); } else { //acceptation duel PrintToChat(GetMessage("DefyStarted", defieur.Id) + "[0080FF]" + leDuel.joueurDefieurName + "[FFFFFF]" + GetMessage("And", defieur.Id) + "[0080FF]" + leDuel.joueurReceveurDefiName + "[FFFFFF] !"); leDuel.duelEnCours = true; } } } else { //rien de prévu entre les 2 joueurs on crée le défi _ListeDuels.Add( new Duels { joueurDefieur = defieur.Id, joueurDefieurName = defieur.Name, joueurReceveurDefi = receveurDefi.Id, joueurReceveurDefiName = receveurDefi.Name, positionDepart = getPosition(defieur), duelEnCours = false, timestampDebutDuel = getTimestamp() } ); PrintToChat(receveurDefi, defieur.Name + GetMessage("DefyReceived", receveurDefi.Id)); PrintToChat(defieur, GetMessage("DefySentTo", defieur.Id) + receveurDefi.Name); } } } } } }
internal void Dispose() { Marshal.FreeHGlobal(m_buffer); Duels.Remove(m_pDuel); }
internal Duel(IntPtr pDuel) { m_buffer = Marshal.AllocHGlobal(4096); m_pDuel = pDuel; Duels.Add(m_pDuel, this); }
static async Task MessageCreatedAsync(MessageCreateEventArgs e) { if (e.Author.IsBot || new ulong[3] { config.ChannelForDuels, config.ChannelForAdmins, config.ChannelForUsers }.All(c => c != e.Channel.Id)) { return; } if (e.Channel.Id == config.ChannelForDuels && await Duels.AnyAsync(e.Author.Id) == Duels.DuelState.Started && (e.Message.Attachments?.Any(a => Regex.IsMatch(a.FileName, @".*\.(png|jpg|jpeg)", RegexOptions.IgnoreCase))).GetValueOrDefault()) { await Duels.MessagesUpdateAsync(e.Message); return; } if (e.Message.Content?.Length > 0 && e.Message.Content.StartsWith(config.Prefix)) { string[] vals = Regex.Split(e.Message.Content, " "); if (vals?.Length < 1) { return; } string cmd = new string(vals[0].Skip(config.Prefix.Length).ToArray()); bool flag = false; StringBuilder b = new StringBuilder(); List <string> args = new List <string>(vals.Length > 1 ? vals.Length : 1); for (int i = 1; i < vals.Length; i++) { string s = vals[i]; if (!flag) { if (s[0] == '"') { flag = true; b.Append(s.Skip(1)); } else { args.Add(s); } } else { if (s[s.Length - 1] == '"') { flag = false; b.Append(s.Take(s.Length - 1)); args.Add(b.ToString()); b.Clear(); } else { b.Append(s); } } } if (e.Channel.Id == config.ChannelForDuels) { if (cmd != "duel") { await e.Message.DeleteAsync(); return; } string ping = null; DiscordMember user = null; if (!(e.Author.IsBot || args?.Count < 1 || await Duels.AnyAsync(e.Author.Id) != Duels.DuelState.None || (ping = Regex.Match(args[0], @"[0-9]+")?.Value) == null || (user = await e.Guild.GetMemberAsync(ulong.Parse(ping))) == null || user.IsBot || user.Id == e.Author.Id || await Duels.AnyAsync(user.Id) != Duels.DuelState.None)) { DiscordMessage mess = null; mess = await e.Channel.SendMessageAsync(string.Empty, false, e.Author.GetEmbed("A new duel?", $"<@{e.Author.Id}> has challenged You to the duel, <@{user.Id}>!", "Are You ready for it: <:upvote:604972398424621066> - **yes**, <:downvote:604973811154288660> - **no**?", "You have **30** minutes to answer!")); //mess = await e.Channel.SendMessageAsync(string.Empty, false, e.Author.GetEmbed("A new duel?", $"<@{e.Author.Id}> has challenged You to the duel!", "Are You ready for it: <:upvote:604972398424621066> - **yes**, <:downvote:604973811154288660> - **no**?")); if (mess != null) { await mess.CreateReactionAsync(await e.Guild.GetEmojiAsync(604972398424621066u)); await mess.CreateReactionAsync(await e.Guild.GetEmojiAsync(604973811154288660u)); new Duels.ChallengeDuel(e.Author, user, mess); } } await e.Message.DeleteAsync(); return; } else if (e.Channel.Id == config.ChannelForAdmins) { if (!await e.Message.Author.IsStaff()) { await e.Channel.SendMessageAsync("```diff\nYou don't have access to this command.\n```"); return; } switch (cmd) { case "subjects": { if (args?.Count < 1 || !(new string[] { "add", "del", "list" }).Any(s => s == args[0]) || (args[0] == "list" ? false : args.Count < 2)) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}subjects**", $"**{config.Prefix}subjects \"add|del|list\" \"subjects|page\"**, where **\"subjects\"** - comma-separated subjects. **add** - adding new subjects, **del** - removing old subjects, **list** - subjects list.")); } else if (args[0] != "list") { var subjects = Regex.Split(string.Join(string.Empty, args.Skip(1)), ",").Select(s => new string(s.SkipWhile(c => c == ' ').ToArray())).ToList(); if (args[0] == "add") { await Subjects.AddAsync(subjects); await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"New subjects have been added!", $"{string.Join(", ", subjects)}.")); } else { await Subjects.DeleteAsync(subjects); await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Old subjects have been removed!", $"{string.Join(", ", subjects)}.")); } } else { int page = 0; if (args.Count > 1 && (!int.TryParse(args[1], out page) || page < 0)) { page = 0; } var list = await Subjects.GetListAsync(page); await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Subjects list (page: {(page > list.Item2 ? list.Item2 : page)}/{list.Item2}) [count: {list.Item1.Count()}]", string.Join(", ", list.Item1))); } break; } case "prefix": { if (args?.Count < 1) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}prefix**", $"**{config.Prefix}prefix \"prefix\"**, where **\"prefix\"** - new bot prefix.")); } else { if (args[0].Length > 3) { await e.Channel.SendMessageAsync("```diff\n- Prefix length must not exceed **3** characters! -\n```"); } else { config.Prefix = args[0]; await config.SaveAsync(); await e.Channel.SendMessageAsync($"```diff\n+ New bot prefix: **{config.Prefix}**! +\n```"); } } break; } case "duelist": { string ping = null; if (args?.Count < 2 || (ping = Regex.Match(args[1], @"[0-9]+")?.Value) == null) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist**", $"**{config.Prefix}duelist \"info|add|del|change\" \"ping|user id\"**, where **\"ping|user id\"** - user ping or id.")); } else { DiscordUser u = await bot.GetUserAsync(ulong.Parse(ping)); if (u != null) { switch (args[0]) { case "info": { Duelists.Duelist d = await Duelists.GetDuellistAsync(u.Id); await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Duelist card for {u.Username}", $"Points count: **{d.points}**.", $"Duels count: **{d.duelsCount}**", $"Wins count: **{d.wins}**")); break; } case "add": { int points = 0, duelsCount = 0, wins = 0; if (args.Count < 5 || u.IsBot || !int.TryParse(args[2], out points) || !int.TryParse(args[3], out duelsCount) || !int.TryParse(args[4], out wins) || points < 0 || duelsCount < 0 || wins < 0) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist add**", $"**{config.Prefix}duelist add \"ping|user id\" \"points\" \"duels count\" \"wins\"**, where **\"ping|user id\"** - user ping or id.")); } else { await Duelists.AddAsync(u.Id, points, duelsCount, wins); await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); } break; } case "del": { await Duelists.DeleteAsync(u.Id); await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); break; } case "change": { int points = 0, duelsCount = 0, wins = 0; if (args.Count < 5 || !int.TryParse(args[2], out points) || !int.TryParse(args[3], out duelsCount) || !int.TryParse(args[4], out wins)) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist change**", $"**{config.Prefix}duelist change \"ping|user id\" \"points\" \"duels count\" \"wins\"**, where **\"ping|user id\"** - user ping or id.")); } else { await Duelists.UpdateAsync(u.Id, points, duelsCount, wins); await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); } break; } default: { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist**", $"**{config.Prefix}duelist \"info|add|del|change\" \"ping|user id\"**, where **\"ping|user id\"** - user ping or id.")); break; } } } else { await e.Channel.SendMessageAsync("```diff\n- I don’t seem to know him!\n```"); } } break; } case "disq": { string ping = null; if (args?.Count < 1 || (ping = Regex.Match(args[0], @"[0-9]+")?.Value) == null) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}disq**", $"**{config.Prefix}dusq \"ping|user id\" \"reason\"**, where **\"ping|user id\"** - user ping or id, **\"reason\"** - reason for disqualification.")); } else { if (await Duels.EndAsync(e.Author, ulong.Parse(ping), args.Count > 1 ? string.Join(" ", args.Skip(1)) : "none", true)) { await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); } else { await e.Channel.SendMessageAsync("```diff\n- Error! -\n```"); } } break; } case "duel": { string ping = null; if (args?.Count < 2 || (ping = Regex.Match(args[1], @"[0-9]+")?.Value) == null) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist**", $"**{config.Prefix}duel \"info|end|time\" \"ping|user id\" \"reason|minutes\"**, where **\"ping|user id\"** - user ping or id, **\"reason\"** - reason for duel end.")); } else { switch (args[0]) { case "end": { if (await Duels.EndAsync(e.Author, ulong.Parse(ping), args.Count > 1 ? string.Join(" ", args.Skip(1)) : "none")) { await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); } else { await e.Channel.SendMessageAsync("```diff\n- Error! -\n```"); } break; } case "time": { if (args.Count < 3 || !short.TryParse(args[2], out short mins) || mins < 0) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist**", $"**{config.Prefix}duel \"time\" \"ping|user id\" \"minutes\"**, where **\"ping|user id\"** - user ping or id.")); } else { if (await Duels.ChangeTimeAsync(e.Author, ulong.Parse(ping), mins)) { await e.Channel.SendMessageAsync("```diff\n+ Done! +\n```"); } else { await e.Channel.SendMessageAsync("```diff\n- Error! -\n```"); } } break; } case "info": { var d = Duels.GetDuel(ulong.Parse(ping)); if (d.duelist1 == 0 || d.duelist2 == 0) { await e.Channel.SendMessageAsync("```Duel not found.```"); } else { DiscordMember mem1 = null, mem2 = null; try { mem1 = await e.Channel.Guild.GetMemberAsync(d.duelist1); } catch { } try { mem2 = await e.Channel.Guild.GetMemberAsync(d.duelist2); } catch { } await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Duel info", $"Duelist №1: **{mem1?.DisplayName}**", $"Duelist №2: **{mem2?.DisplayName}**", $"Subject: **{d.subject}**", $"Status: **{(!d.flag ? "training" : "voting")}**", $"Time: **{d.minutes} minutes**", $"Message with work №1: **{d.message1}**", $"Message with work №2: **{d.message2}**")); } break; } default: { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duel**", $"**{config.Prefix}duel \"info|end|time\" \"ping|user id\" \"reason|minutes\"**, where **\"ping|user id\"** - user ping or id, **\"reason\"** - reason for duel end.")); break; } } } break; } case "help": default: { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed("How to manage me?", $"**{config.Prefix}subjects \"add|del|list\" \"subjects|page\"", $"{config.Prefix}prefix \"prefix\"", $"{config.Prefix}duelist \"info|add|del|change\" \"ping|user id\"", $"{config.Prefix}disq \"ping|user id\" \"reason\"", $"{config.Prefix}duel \"info|end|time\" \"ping|user id\" \"minutes\"**")); break; } } } else if (e.Channel.Id == config.ChannelForUsers) { switch (cmd) { case "top": { var top = await Duelists.TopAsync(); if (top == null) { await e.Channel.SendMessageAsync("```Duelists not found.```"); } else { var builder = new StringBuilder(); for (int i = 0; i < top.Count; i++) { builder.Append($"**{i + 1}** — **{(await bot.GetUserAsync(top[i].id)).Username}** (**{top[i].points}** points)\n"); } await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed("Top duelists by points", builder.ToString())); } break; } case "duelist": { string ping = null; DiscordUser u = null; if (args?.Count < 1 || (ping = Regex.Match(args[0], @"[0-9]+")?.Value) == null || (u = await bot.GetUserAsync(ulong.Parse(ping))) == null) { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed($"Command info for **{config.Prefix}duelist**", $"**{config.Prefix}duelist \"ping|user id\"**, where **\"ping|user id\"** - user ping or id.")); } else { Duelists.Duelist d = await Duelists.GetDuellistAsync(u.Id); await e.Channel.SendMessageAsync(string.Empty, false, u.GetEmbed($"Duelist card for {u.Username}", $"Points count: **{d.points}**.", $"Duels count: **{d.duelsCount}**", $"Wins count: **{d.wins}**")); } break; } case "help": default: { await e.Channel.SendMessageAsync(string.Empty, false, bot.GetEmbed("My commands", $"**{config.Prefix}duelist \"ping|user id\"**", $"**{config.Prefix}top**")); break; } } } } if (e.Channel.Id == config.ChannelForDuels && !await e.Author.IsStaff()) { await e.Message.DeleteAsync(); } }
internal Duel(IntPtr duelPtr) { _buffer = Marshal.AllocHGlobal(4096); _duelPtr = duelPtr; Duels.Add(_duelPtr, this); }
internal void Dispose() { Marshal.FreeHGlobal(_buffer); Duels.Remove(_duelPtr); }
private void _loadSimulationButton_Click(object sender, RoutedEventArgs e) { // Show dialog OpenFileDialog dialog = new OpenFileDialog { Filter = "Simulation files (*.balancingsim)|*.balancingsim", Title = "Load simulation..." }; if (!(dialog.ShowDialog() ?? false)) { return; } // Catch errors occuring while reading try { // Load file into buffer RAMBuffer buffer = new RAMBuffer(dialog.FileName); // Check version int version = buffer.ReadInteger(); if (version > Version) { throw new ArgumentException("The given file was created with a newer version of this program, please consider updating."); } // Read civs _civ1ComboBox.SelectedValue = buffer.ReadShort(); _civ2ComboBox.SelectedValue = buffer.ReadShort(); // Merge tech lists int count1 = buffer.ReadInteger(); HashSet <short> res1 = new HashSet <short>(); for (int i = 0; i < count1; i++) { res1.Add(buffer.ReadShort()); } foreach (var res in Researches1) { res.Checked = res1.Contains(res.Id); } int count2 = buffer.ReadInteger(); HashSet <short> res2 = new HashSet <short>(); for (int i = 0; i < count2; i++) { res2.Add(buffer.ReadShort()); } foreach (var res in Researches2) { res.Checked = res2.Contains(res.Id); } // Read duels int count = buffer.ReadInteger(); Duels.Clear(); for (int i = 0; i < count; i++) { short id1 = buffer.ReadShort(); short id2 = buffer.ReadShort(); if (!Units.ContainsKey(id1) || !Units.ContainsKey(id2)) { continue; } Duels.Add(new Duel(id1, Units[id1], id2, Units[id2])); } } catch (Exception ex) { // Error MessageBox.Show($"Unable to load given file: {ex.Message}"); } }