Example #1
0
        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();
        }
Example #2
0
        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);
         }
     }
 }
Example #7
0
        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);
            }
        }
Example #8
0
        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);
        }
Example #9
0
        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
        }
Example #10
0
        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);
            }
        }
Example #11
0
        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 }));
        }
Example #12
0
 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);
                     }
                 }
             }
         }
     }
 }
Example #13
0
 internal void Dispose()
 {
     Marshal.FreeHGlobal(m_buffer);
     Duels.Remove(m_pDuel);
 }
Example #14
0
 internal Duel(IntPtr pDuel)
 {
     m_buffer = Marshal.AllocHGlobal(4096);
     m_pDuel  = pDuel;
     Duels.Add(m_pDuel, this);
 }
Example #15
0
        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();
            }
        }
Example #16
0
 internal Duel(IntPtr duelPtr)
 {
     _buffer  = Marshal.AllocHGlobal(4096);
     _duelPtr = duelPtr;
     Duels.Add(_duelPtr, this);
 }
Example #17
0
 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}");
            }
        }