Esempio n. 1
0
        public override void run()
        {
            L2Player player = Client.CurrentPlayer;

            if (player.Clan == null)
            {
                player.sendActionFailed();
                return;
            }


            L2Clan clan = player.Clan;

            ClanMember m = null;

            foreach (ClanMember cm in clan.getClanMembers())
            {
                if (cm.Name.Equals(_player))
                {
                    m = cm;
                    break;
                }
            }

            if (m == null)
            {
                player.sendActionFailed();
                return;
            }

            player.sendPacket(new PledgeReceiveMemberInfo(m));
        }
		public override void Parse(byte[] buffer)
		{
			Reader reader = new Reader(new MemoryStream(buffer));

			reader.ReadByte(); // Id
			ClanId = reader.ReadInt32();
			ClanName = reader.ReadString(Encoding.Unicode);
			LeaderName = reader.ReadString(Encoding.Unicode);
			ClanCrestId = reader.ReadInt32();
			ClanLevel = reader.ReadInt32();
			HasCastle = reader.ReadInt32() != 0;
			HasClanhall = reader.ReadInt32() != 0;
			reader.ReadInt32();
			CharLevel = reader.ReadInt32();
			reader.ReadInt32();
			reader.ReadInt32();
			AllyId = reader.ReadInt32();
			AllyName = reader.ReadString(Encoding.Unicode);
			AllyCrestId = reader.ReadInt32();
			InWar = reader.ReadInt32() != 0;

			int count = reader.ReadInt32();
			Members = new ClanMember[count];
			for (int i = 0; i < count; i++)
			{
				ClanMember Member = new ClanMember();
				Member.Name = reader.ReadString(Encoding.Unicode);
				Member.Level = reader.ReadInt32();
				Member.ClassId = reader.ReadInt32();
				reader.ReadInt32();
				reader.ReadInt32();
				Member.ObjectId = reader.ReadInt32();
				Members[i] = Member;
			}
		}
Esempio n. 3
0
        public static void OnClanCreated(ClanMember member, string clanname)
        {
            if (ClanCreated == null)
            return;

              ClanCreated(new ClanCreatedEventArgs() { Member = member, ClanName = clanname });
        }
Esempio n. 4
0
        public static void OnClanLeave(ClanMember member, Clan clan)
        {
            if (ClanLeave == null)
            return;

              ClanLeave(new ClanLeaveEventArgs() { Member = member, Clan = clan });
        }
Esempio n. 5
0
        public static void OnClanLogin(ClanMember member, Clan clan)
        {
            if (ClanLogin == null)
            return;

              ClanLogin(new ClanLoginEventArgs() { Member = member, Clan = clan });
        }
        private List <ClanMember> GetClanStatistics(ClashRoyaleApi clashRoyaleApi)
        {
            using (var entities = new ClanManagerEntities())
            {
                var dbMembers = entities.Member;

                List <ClanWar> latestWars      = clashRoyaleApi.GetLatestClanWars();
                var            lastInfoPlayers = clashRoyaleApi.GetClanInfo();

                List <ClanMember> members = new List <ClanMember>();

                foreach (var player in lastInfoPlayers.members)
                {
                    var clanMember = new ClanMember
                    {
                        Name = player.name,
                        Tag  = player.tag
                    };
                    members.Add(clanMember);

                    var dbMember = dbMembers.FirstOrDefault(s => s.Tag == player.tag);

                    if (dbMember != null)
                    {
                        clanMember.JoinDate = dbMember.JoinDate;
                    }
                    else
                    {
                        clanMember.JoinDate = DateTime.Now;
                    }
                }

                if (latestWars != null)
                {
                    foreach (ClanWar war in latestWars)
                    {
                        foreach (var participant in war.participants)
                        {
                            var clanMember = members.FirstOrDefault(s => s.Tag == participant.tag);
                            if (clanMember != null)
                            {
                                clanMember.ClanWars += participant.battlesPlayed;
                                clanMember.ClanWins += participant.wins;

                                clanMember.Percent = Math.Round((((double)(clanMember.ClanWins * 100)) / clanMember.ClanWars), 2);
                            }
                        }
                    }
                }

                List <ClanMember> loyalMembers = members.Where(s => s.ClanWars > 5).ToList();
                var newMembers = members.Where(s => s.ClanWars <= 5).ToList();

                loyalMembers = loyalMembers.OrderByDescending(p => p.Percent).ToList();
                newMembers   = newMembers.OrderByDescending(p => p.Percent).ToList();
                loyalMembers.AddRange(newMembers);
                return(loyalMembers);
            }
        }
Esempio n. 7
0
        public Donation(ClanMember clanMember, int oldValue, int newValue)
        {
            ClanMember = clanMember;

            OldValue = oldValue;

            NewValue = newValue;
        }
Esempio n. 8
0
 private static string DonationRatio(ClanMember member)
 {
     if (member.DonationsReceived == 0)
     {
         return(string.Empty);
     }
     else
     {
         return($"{member.Donations / (float)member.DonationsReceived:0.00}");
     }
 }
 private static void FromMySqlDataReader(ClanMember member, DbDataReader reader)
 {
     member.Id             = (long)reader["user_id"];
     member.Role           = (ClanMemberRole)reader["role"];
     member.TroopsDonated  = (int)reader["troops_donated"];
     member.TroopsReceived = (int)reader["troops_received"];
     member.Rank           = (int)reader["rank"];
     member.PreviousRank   = (int)reader["rank_prev"];
     member.NewMember      = (bool)reader["new_member"];
     member.WarCooldown    = (int)reader["war_cooldown"];
     member.WarPreference  = (int)reader["war_preference"];
 }
Esempio n. 10
0
        public async Task <CharacterInformation> ForEachPlog_GetInformation(ClanMember plog)
        {
            var start = DateTime.UtcNow;

            var tasks = new Task[]
            {
                _bladeAndSoulService.GetBladeAndSoulCharacter(plog.Name),
                _bladeAndSoulService.GetBladeAndSoulCharacterAbilities(plog.Name),
                _bladeAndSoulService.GetBladeAndSoulItemsAsync(plog.Name)
            };

            await Task.WhenAll(tasks);

            var character = ((Task <BladeAndSoulCharacter>)tasks[0]).Result;
            var stats     = ((Task <AbilitiesResult>)tasks[1]).Result;
            var items     = ((Task <BladeAndSoulItems>)tasks[2]).Result;

            if (character == null || stats == null || items == null)
            {
                // Try again later?
                return(null);
            }

            var isInClan = "Ploggystyle".Equals(character.Clan, StringComparison.OrdinalIgnoreCase);

            if (!isInClan && plog.Active)
            {
                await _webhookService.ExecuteInactivePlogWebhook($"{plog.Name} ({plog.RealName})");

                plog.Active = false;
                return(new CharacterInformation
                {
                    Plog = plog
                });
            }

            if (!plog.Active)
            {
                // Don't process
                return(null);
            }

            var end = DateTime.UtcNow;
            await _loggingService.LogAsync($"Processing time for {plog.Name}: {(end - start).TotalMilliseconds}");

            return(new CharacterInformation
            {
                Plog = plog,
                Character = character,
                AbilitiesResult = stats,
                Items = items
            });
        }
Esempio n. 11
0
        private async Task ProcessAdd(List <string> args)
        {
            if (args.Count == 1)
            {
                var name = args[0];
                var plog = await _plogDbContext.Plogs.Where(p => p.Name.ToLower() == name.ToLower()).FirstOrDefaultAsync();

                if (plog == null)
                {
                    var character = await _bladeAndSoulService.GetBladeAndSoulCharacter(name);

                    if (character == null || character.Clan.ToLower() != "ploggystyle")
                    {
                        _response = $"{name} is not in Ploggystyle.";
                    }
                    else
                    {
                        plog = new ClanMember
                        {
                            RealName = character.AccountName,
                            Name     = name,
                            Active   = true,
                            Class    = character.Class,
                            Created  = DateTime.UtcNow,
                            ImageUrl = character.ProfileImageUrl
                        };
                        _plogDbContext.Add(plog);
                        await _plogDbContext.SaveChangesAsync();

                        _response = $"{name} has been added to the clan.";
                    }
                }
                else
                {
                    _response = "This plog already exists!";
                    if (plog.DiscordId.HasValue && plog.DiscordId.Value != _event.Message.Author.Id)
                    {
                        _response += $" <@{plog.DiscordId}> has claimed this character.";
                    }
                }
            }
            else
            {
                _response = "Incorrect command format: !plog add [name]";
            }

            await _messageService.SendMessage(_event.Message.ChannelId, new OutgoingMessage
            {
                Content = _response
            });
        }
Esempio n. 12
0
        private void AddRows(Dictionary <string, ClanMember> Members)
        {
            table.Rows.Clear();
            foreach (KeyValuePair <string, ClanMember> mem in Members)
            {
                ClanMember member = mem.Value;
                DataRow    row    = table.NewRow();
                row[0] = member.Name;
                row[1] = member.Role;
                row[2] = Commons.ConvertDateToLocalFormat(Commons.ConvertToDate(member.MemberSince), Properties.Settings.Default.Locale);
                table.Rows.Add(row);
            }

            members.Sort(members.Columns[0], ListSortDirection.Ascending);
        }
Esempio n. 13
0
        private void HandleClanMemberRemoved(ParseData pd)
        {
            DataReader dr         = new DataReader(pd.Data);
            string     memberName = dr.ReadCString();
            ClanMember member     = m_clanList[memberName];

            m_clanList.Remove(memberName);

            ClanMemberStatusEventArgs args = new ClanMemberStatusEventArgs(member)
            {
                EventData = pd
            };

            OnClanMemberRemoved(args);
        }
Esempio n. 14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="line"></param>
 public void DecompileMembers(string line)
 {
     Members = new List <ClanMember>();
     string[] split = line.Split(","[0]);
     for (int i = 0; i < split.Length; i++)
     {
         if (string.IsNullOrEmpty(split[i]))
         {
             continue;
         }
         string[]   info   = split[i].Split("-"[0]);
         ClanMember member = new ClanMember();
         member.ID   = int.Parse(info[0]);
         member.Role = (ClanMemberRole)int.Parse(info[1]);
         Members.Add(member);
     }
 }
Esempio n. 15
0
        public async Task youtube(CommandContext ctx, string YoutubeURL)
        {
            DiscordEmbedBuilder           Embed      = new DiscordEmbedBuilder();
            ClanMember                    clanMember = new ClanMember();
            IMongoDatabase                Local      = Program.Database.GetDatabase("local");
            IMongoCollection <Player>     Player     = Local.GetCollection <Player>("players");
            IMongoCollection <ClanMember> Membros    = Local.GetCollection <ClanMember>("membros");
            IAsyncCursor <Player>         query      = await Player.FindAsync(x => x.DiscordID == ctx.Member.Id);

            List <Player> resultado = query.ToList();

            if (resultado.Count == 0)
            {
                Player.InsertOne(new Player {
                    DiscordID = ctx.Member.Id, CurrentXP = 0, CurrentLevel = 0
                });
            }
            else
            {
                Player player = resultado[0];
                IAsyncCursor <ClanMember> query2 = await Membros.FindAsync(x => x.PlayerID == player._id);

                List <ClanMember> resultado2 = query2.ToList();

                if (resultado2.Count > 0)
                {
                    clanMember           = resultado2[0];
                    clanMember.YoutubeID = YoutubeURL;

                    Membros.UpdateOne(Builders <ClanMember> .Filter.Eq("PlayerID", player._id), Builders <ClanMember> .Update.Set("YoutubeID", clanMember.YoutubeID));
                    Embed
                    .WithAuthor("Link do youtube alterado com sucesso!")
                    .WithColor(Colors.SagiriBlue);
                    await ctx.RespondAsync(embed : Embed);

                    await ctx.Message.DeleteAsync();
                }
                else
                {
                    Embed
                    .WithAuthor("Você não possui um cadastro no sistema, peça um `protagonista de light novel` para te cadastrar!")
                    .WithColor(Colors.SagiriPink);
                    await ctx.RespondAsync(embed : Embed);
                }
            }
        }
        private static MySqlCommand ToMySqlCommand(ClanMember member, ClanSave clan)
        {
            var command = new MySqlCommand(MySqlDbManagerQueries.InsertUpdateClanMember);

            command.Parameters.AddWithValue("UserId", member.Id);
            command.Parameters.AddWithValue("ClanId", clan.ClanId);
            command.Parameters.AddWithValue("Role", (int)member.Role);
            command.Parameters.AddWithValue("TroopsDonated", member.TroopsDonated);
            command.Parameters.AddWithValue("TroopsReceived", member.TroopsReceived);
            command.Parameters.AddWithValue("Rank", member.Rank);
            command.Parameters.AddWithValue("PreviousRank", member.PreviousRank);
            command.Parameters.AddWithValue("NewMember", member.NewMember);
            command.Parameters.AddWithValue("WarCooldown", member.WarCooldown);
            command.Parameters.AddWithValue("WarPreference", member.WarPreference);

            return(command);
        }
Esempio n. 17
0
        private void HandleClanMemberRankChange(ParseData pd)
        {
            DataReader dr         = new DataReader(pd.Data);
            ClanRank   old        = (ClanRank)dr.ReadByte();
            ClanRank   newRank    = (ClanRank)dr.ReadByte();
            string     memberName = dr.ReadCString();
            ClanMember member     = null;

            if (m_clanList.ContainsKey(memberName))
            {
                member = m_clanList[memberName];
            }

            ClanMemberRankChangeEventArgs args = new ClanMemberRankChangeEventArgs(old, newRank, member);

            args.EventData = pd;
            OnClanMemberRankChanged(args);
        }
Esempio n. 18
0
        public async Task WhoIs(CommandContext ctx, DiscordMember member)
        {
            DiscordEmbedBuilder Embed = new DiscordEmbedBuilder();

            ClanMember     m     = new ClanMember();
            IMongoDatabase Local = Program.Database.GetDatabase("local");
            IMongoCollection <ClanMember> Membros = Local.GetCollection <ClanMember>("membros");
            IMongoCollection <Player>     Player  = Local.GetCollection <Player>("players");
            IAsyncCursor <Player>         query   = await Player.FindAsync(x => x.DiscordID == member.Id);

            List <Player> resultado = query.ToList();

            if (resultado.Count == 0)
            {
                Player.InsertOne(new Player {
                    DiscordID = member.Id, CurrentXP = 0, CurrentLevel = 0, _id = new ObjectId()
                });
            }
            else
            {
                Player player = resultado[0];
                IAsyncCursor <ClanMember> query2 = await Membros.FindAsync(x => x.PlayerID == player._id);

                List <ClanMember> resultado2 = query2.ToList();
                if (resultado2.Count > 0)
                {
                    m = resultado2[0];
                    Embed

                    .WithDescription($"Informações do membro {member.Username}\n\n\n[<:steam:570974606354284584>]({m.SteamID}) | [<:youtube:570974841763528706>]({m.YoutubeID})")
                    .WithColor(Colors.SagiriBlue)
                    .WithAuthor($"Whois [GTdL - {member.Username}]");

                    await ctx.RespondAsync(embed : Embed);
                }
                else
                {
                    Embed
                    .WithAuthor("Este usuário não é um membro oficial do clã")
                    .WithColor(Colors.SagiriPink);
                    await ctx.RespondAsync(embed : Embed);
                }
            }
        }
Esempio n. 19
0
        public async Task addMember(CommandContext ctx, DiscordMember m)
        {
            DiscordEmbedBuilder           Embed      = new DiscordEmbedBuilder();
            ClanMember                    clanMember = new ClanMember();
            IMongoDatabase                Local      = Program.Database.GetDatabase("local");
            IMongoCollection <ClanMember> Membros    = Local.GetCollection <ClanMember>("membros");
            IMongoCollection <Player>     Player     = Local.GetCollection <Player>("players");
            IAsyncCursor <Player>         query      = await Player.FindAsync(x => x.DiscordID == m.Id);

            List <Player> resultado = query.ToList();

            if (resultado.Count == 0)
            {
                Player.InsertOne(new Player {
                    DiscordID = m.Id, CurrentXP = 0, CurrentLevel = 0, _id = new ObjectId()
                });
            }
            else
            {
                Player player = resultado[0];
                IAsyncCursor <ClanMember> query2 = await Membros.FindAsync(x => x.PlayerID == player._id);

                List <ClanMember> resultado2 = query2.ToList();

                if (resultado2.Count > 0)
                {
                    Embed
                    .WithAuthor($"O membro [GTdL - {m.Username}] já foi cadastrado.")
                    .WithColor(Colors.SagiriPink);

                    await ctx.RespondAsync(embed : Embed);
                }
                else
                {
                    clanMember.PlayerID = player._id;
                    Membros.InsertOne(clanMember);
                    Embed
                    .WithAuthor($"O membro [GTdL - {m.Username}] foi cadastrado com sucesso!")
                    .WithColor(Colors.SagiriBlue);
                    await ctx.RespondAsync(embed : Embed);
                }
            }
        }
Esempio n. 20
0
        private void HandleClanMemberStatusChanged(ParseData pd)
        {
            DataReader dr       = new DataReader(pd.Data);
            string     userName = dr.ReadCString();

            if (m_clanList.ContainsKey(userName))
            {
                ClanMember       member   = m_clanList[userName];
                ClanRank         rank     = (ClanRank)dr.ReadByte();
                ClanMemberStatus status   = (ClanMemberStatus)dr.ReadByte();
                string           location = dr.ReadCString();
                member.Rank          = rank;
                member.CurrentStatus = status;
                member.Location      = location;

                ClanMemberStatusEventArgs args = new ClanMemberStatusEventArgs(member);
                args.EventData = pd;
                OnClanMemberStatusChanged(args);
            }
        }
Esempio n. 21
0
        public async Task CreateClan(string name, ulong ownerId) =>
        await _soraTransactor.DoInTransactionAsync(async context =>
        {
            // Check if user is in clan already
            if (await context.ClanMembers
                .Where(x => x.UserId == ownerId)
                .CountAsync() > 0)
            {
                return;
            }
            // Check if clan with this name already exists, abort if it does
            if (await context.Clans.Where(x => x.Name == name)
                .CountAsync() > 0)
            {
                return;
            }

            // Now get or create user we attach to the clan
            var _    = await context.Users.GetOrCreateUserNoSaveAsync(ownerId);
            var clan = new Clan()
            {
                Name    = name,
                OwnerId = ownerId,
                Created = DateTime.UtcNow,
                Level   = 0
            };

            context.Clans.Add(clan);
            await context.SaveChangesAsync();

            // Create clan member for the owner
            var member = new ClanMember()
            {
                ClanId = clan.Id,
                UserId = ownerId
            };
            context.ClanMembers.Add(member);

            await context.SaveChangesAsync();
        });
Esempio n. 22
0
        public override void RunImpl()
        {
            L2Player player = _client.CurrentPlayer;

            if (player.Clan == null)
            {
                player.SendActionFailed();
                return;
            }

            L2Clan clan = player.Clan;

            ClanMember m = clan.GetClanMembers().FirstOrDefault(cm => cm.Name.Equals(_player));

            if (m == null)
            {
                player.SendActionFailed();
                return;
            }

            player.SendPacket(new PledgeReceiveMemberInfo(m));
        }
        public void DrawItem(CustomItemDrawData e)
        {
            e.DrawBackground();
            if ((e.State & DrawItemState.Focus) == System.Windows.Forms.DrawItemState.Focus)
            {
                e.DrawFocusRectangle();
            }

            ClanMember clanMember = e.Item as ClanMember;
            Color      textColor  = e.ForeColor;

            if (clanMember.CurrentStatus == ClanMemberStatus.Offline)
            {
                if ((e.State & DrawItemState.Selected) == System.Windows.Forms.DrawItemState.Selected)
                {
                    textColor = Color.Black;
                }
                else
                {
                    textColor = Color.SlateGray;
                }
            }
            using (SolidBrush textBrush = new SolidBrush(textColor))
                using (StringFormat nameFormat = new StringFormat()
                {
                    Trimming = StringTrimming.EllipsisCharacter
                })
                {
                    PointF iconPosition = new PointF((float)e.Bounds.Location.X + 1.0f, (float)e.Bounds.Location.Y + 1.0f);
                    e.Graphics.DrawImage(m_provider.GetImageFor(clanMember.Rank), (PointF)iconPosition);

                    SizeF      nameSize = e.Graphics.MeasureString(clanMember.Username, e.Font);
                    RectangleF nameArea = new RectangleF((float)e.Bounds.X + (float)m_provider.IconSize.Width + 1.0f + 4.0f,
                                                         (float)e.Bounds.Y + (((float)e.Bounds.Height - nameSize.Height) / 2.0f),
                                                         (float)e.Bounds.Width - (float)m_provider.IconSize.Width - 2.0f - 4.0f,
                                                         (float)nameSize.Height);
                    e.Graphics.DrawString(clanMember.Username, e.Font, textBrush, nameArea, nameFormat);
                }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ClanMemberMessageComponent"/> class with
        /// the specified <see cref="ClanMember"/>.
        /// </summary>
        /// <param name="member"><see cref="ClanMember"/> from which to initialize this <see cref="ClanMemberMessageComponent"/>.</param>
        /// <exception cref="ArgumentNullException"><paramref name="member"/> is null.</exception>
        public ClanMemberMessageComponent(ClanMember member)
        {
            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            Id             = member.Id;
            Name           = member.Name;
            Role           = member.Role;
            Level          = member.ExpLevels;
            LeagueLevel    = member.League;
            Trophies       = member.Trophies;
            TroopsDonated  = member.TroopsDonated;
            TroopsReceived = member.TroopsReceived;
            Rank           = member.Rank;
            PreviousRank   = member.PreviousRank;
            NewMember      = member.NewMember;
            WarCoolDown    = member.WarCooldown;
            WarPreference  = member.WarPreference;
            Id2            = member.Id;
        }
Esempio n. 25
0
        private void HandleClanMemberList(ParseData pd)
        {
            DataReader dr = new DataReader(pd.Data);

            dr.Seek(4);
            byte memCount = dr.ReadByte();

            for (int i = 0; i < memCount; i++)
            {
                string           userName = dr.ReadCString();
                ClanRank         rank     = (ClanRank)dr.ReadByte();
                ClanMemberStatus status   = (ClanMemberStatus)dr.ReadByte();
                string           location = dr.ReadCString();
                m_clanList.Add(userName, new ClanMember(userName, rank, status, location));
            }

            ClanMember[] members = new ClanMember[m_clanList.Count];
            m_clanList.Values.CopyTo(members, 0);

            ClanMemberListEventArgs args = new ClanMemberListEventArgs(members);

            args.EventData = pd;
            OnClanMemberListReceived(args);
        }
        public override void Parse(byte[] buffer)
        {
            Reader reader = new Reader(new MemoryStream(buffer));

            reader.ReadByte();             // Id
            ClanId      = reader.ReadInt32();
            ClanName    = reader.ReadString(Encoding.Unicode);
            LeaderName  = reader.ReadString(Encoding.Unicode);
            ClanCrestId = reader.ReadInt32();
            ClanLevel   = reader.ReadInt32();
            HasCastle   = reader.ReadInt32() != 0;
            HasClanhall = reader.ReadInt32() != 0;
            reader.ReadInt32();
            CharLevel = reader.ReadInt32();
            reader.ReadInt32();
            reader.ReadInt32();
            AllyId      = reader.ReadInt32();
            AllyName    = reader.ReadString(Encoding.Unicode);
            AllyCrestId = reader.ReadInt32();
            InWar       = reader.ReadInt32() != 0;

            int count = reader.ReadInt32();

            Members = new ClanMember[count];
            for (int i = 0; i < count; i++)
            {
                ClanMember Member = new ClanMember();
                Member.Name    = reader.ReadString(Encoding.Unicode);
                Member.Level   = reader.ReadInt32();
                Member.ClassId = reader.ReadInt32();
                reader.ReadInt32();
                reader.ReadInt32();
                Member.ObjectId = reader.ReadInt32();
                Members[i]      = Member;
            }
        }
Esempio n. 27
0
 public PledgeReceiveMemberInfo(ClanMember cm)
 {
     _member = cm;
 }
        private async Task HandleCreateAlliance(IClient client, Message message, CancellationToken cancellationToken)
        {
            var caMessage = (CreateAllianceMessage)message;

            var level = client.Session.Level;

            // Look up what it is gonna cost and how its gonna cost
            // from the /logic/globals.csv table.
            var globals  = Server.Assets.DataTables.GetTable <GlobalData>();
            var resource = globals.Rows["ALLIANCE_CREATE_RESOURCE"][0].TextValue;
            var cost     = globals.Rows["ALLIANCE_CREATE_COST"][0].NumberValue;

            level.Avatar.UseResource(resource, cost);

            // Request the db for a new clan.
            var clanSave = await Server.Db.NewClanAsync(cancellationToken);

            var clan = clanSave.ToClan();

            // Set the values as specified in the message.
            clan.Name             = caMessage.Name;
            clan.Description      = caMessage.Description;
            clan.Badge            = caMessage.Badge;
            clan.InviteType       = caMessage.InviteType;
            clan.RequiredTrophies = caMessage.RequiredTrophy;
            clan.WarFrequency     = caMessage.WarFrequency;
            clan.Location         = caMessage.Origin;
            clan.RequiredTrophies = caMessage.RequiredTrophy;

            // Add client that created the clan as a member of the clan
            // with role as the leader.
            var member = new ClanMember(client.Session.Level)
            {
                Role         = ClanMemberRole.Leader,
                Rank         = 1,
                PreviousRank = 1,
            };

            clan.Members.Add(member);

            // Set the clan of the creator to the created clan.
            level.Avatar.Alliance = clan;

            // Save the level which contains a ref to the ID of the clan.
            var levelSave = client.Save;
            await Server.Db.SaveLevelAsync(levelSave, cancellationToken);

            clanSave.FromClan(clan);
            // Save the clan to the db.
            await Server.Db.SaveClanAsync(clanSave, cancellationToken);

            // Let the client know he was added to the clan.
            var ascCommand1 = new AvailableServerCommandMessage
            {
                Command = new AllianceJoinedCommand
                {
                    ClanId    = clan.Id,
                    Name      = clan.Name,
                    Badge     = clan.Badge,
                    ExpLevels = clan.ExpLevels,

                    Tick = -1,
                }
            };

            // Let the client know he is the leader of the clan.
            var ascCommand2 = new AvailableServerCommandMessage
            {
                Command = new AllianceRoleUpdatedCommand
                {
                    ClanId = clan.Id,
                    Role   = member.Role,

                    Tick = -1
                }
            };

            client.SendMessage(ascCommand1);
            client.SendMessage(ascCommand2);
        }
Esempio n. 29
0
        /// <summary>
        /// 读取部落列表
        /// </summary>
        private static void LoadClanList()
        {
            bool    l_bIsReturn = false;
            Session l_Session   = new Session(BaseDatabase.Domain);

            l_Session.BeginTransaction();
            {
                do
                {
                    Query       l_QueryListClan  = new Query(l_Session, "Select ListClan instances");
                    QueryResult l_ListClanResult = l_QueryListClan.Execute();

                    if (l_ListClanResult == null)
                    {
                        Debug.WriteLine("Program.LoadClanList(...) - l_ListClanResult == null error!");

                        l_bIsReturn = true;
                        break;
                    }

                    for (int iIndex = 0; iIndex < l_ListClanResult.Count; iIndex++)
                    {
                        ListClan l_ListClan = l_ListClanResult[iIndex] as ListClan;
                        if (l_ListClan == null)
                        {
                            Debug.WriteLine("Program.LoadClanList(...) - l_ListClan == null error!");

                            l_bIsReturn = true;
                            break;
                        }

                        Clan l_Clan = new Clan();
                        l_Clan.ClanGuid = l_ListClan.ClanGuid;
                        l_Clan.ClanName = l_ListClan.ClanName;
                        l_Clan.Logo     = l_ListClan.Logo;
                        l_Clan.Back     = l_ListClan.Back;
                        l_Clan.Grade    = l_ListClan.Grade;
                        l_Clan.CP       = l_ListClan.CP;
                        l_Clan.Slogan   = l_ListClan.Slogan;
                        l_Clan.News     = l_ListClan.News;

                        //////////////////////////////////////////////////////////////////////////
                        // 获取部落的成员信息

                        Query l_QueryCharacters = new Query(l_Session, "Select Characters instances where {ClanGuid}=@ClanGuid");
                        l_QueryCharacters.Parameters.Add("@ClanGuid", l_ListClan.ClanGuid);
                        QueryResult l_CharactersResult = l_QueryCharacters.Execute();

                        if (l_CharactersResult == null)
                        {
                            Debug.WriteLine("Program.LoadClanList(...) - l_CharactersResult == null error!");

                            l_bIsReturn = true;
                            break;
                        }

                        for (int iIndex2 = 0; iIndex2 < l_CharactersResult.Count; iIndex2++)
                        {
                            Characters l_Characters = l_CharactersResult[iIndex2] as Characters;
                            if (l_Characters == null)
                            {
                                Debug.WriteLine("Program.LoadClanList(...) - l_Characters == null error!");

                                l_bIsReturn = true;
                                break;
                            }

                            ClanMember l_ClanMember = new ClanMember();

                            l_ClanMember.CharacterName = l_Characters.CharacterName;
                            l_ClanMember.ClanGuid      = l_Characters.ClanGuid;
                            l_ClanMember.ClanRank      = l_Characters.ClanRank;

                            l_Clan.AddClanMemberList(l_ClanMember);
                        }

                        if (l_bIsReturn == true)
                        {
                            break;
                        }

                        Program.AddClanList(l_Clan);
                    }
                } while (false);
            }
            l_Session.Commit();

            if (l_bIsReturn == true)
            {
                throw new Exception("读取部落列表 错误!");
            }

            LOGs.WriteLine(LogMessageType.MSG_INFO, "信息: 部落列表读取完成!");
        }
Esempio n. 30
0
        public async Task Cor(CommandContext ctx)
        {
            IMongoDatabase                Local  = Program.Database.GetDatabase("local");
            DiscordEmbedBuilder           Embed  = new DiscordEmbedBuilder();
            IMongoCollection <ClanMember> Member = Local.GetCollection <ClanMember>("membros");
            IMongoCollection <Player>     Player = Local.GetCollection <Player>("players");
            IAsyncCursor <Player>         query  = await Player.FindAsync(x => x.DiscordID == ctx.Member.Id);

            List <Player> responce = query.ToList();

            if (responce.Count == 0)
            {
                Player.InsertOne(new Player {
                    DiscordID = ctx.Member.Id, CurrentXP = 0, CurrentLevel = 0, _id = new ObjectId()
                });
            }
            else
            {
                Player player = responce[0];
                IAsyncCursor <ClanMember> query2 = await Member.FindAsync(x => x.PlayerID == player._id);

                List <ClanMember> responce2 = query2.ToList();

                if (responce2.Count == 0)
                {
                    Embed
                    .WithDescription("Só membros do clã possuem acesso aos perfis.")
                    .WithAuthor("Você não é um membro do clã!")
                    .WithColor(Colors.SagiriPink);
                    await ctx.RespondAsync(embed : Embed);
                }
                else
                {
                    ClanMember membro = responce2[0];
                    IMongoCollection <Profile> Profile = Local.GetCollection <Profile>("profile");
                    IAsyncCursor <Profile>     query3  = await Profile.FindAsync(x => x.ClanMemberID == membro._id);

                    List <Profile> responce3 = query3.ToList();
                    if (responce3.Count == 0)
                    {
                        Profile perfil = new Profile();
                        perfil.ClanMemberID = membro._id;
                        perfil._id          = new ObjectId();

                        Profile.InsertOne(perfil);
                        Embed
                        .WithDescription("eu criei. Digite o comando novamente para salvar.")
                        .WithAuthor("Você não tinha um perfil, mas ...")
                        .WithColor(Colors.SagiriGray);
                        await ctx.RespondAsync(embed : Embed);
                    }
                    else
                    {
                        Profile p = responce3[0];
                        Embed
                        .WithDescription("Digite a letra referente a sua cor:\n\n**[A]**marelo\n**[V]**erde\nA**[z]**ul\n**[L]**aranja\n**[R]**oxo")
                        .WithAuthor("Escolha a cor")
                        .WithColor(Colors.SagiriGray);
                        DiscordMessage botmsg = await ctx.RespondAsync(embed : Embed);

                        DiscordMessage msg = await ctx.GetResponce(Program.Interactivity);

                        switch (msg.Content.ToLower())
                        {
                        case "a":
                            p.CsColor = "A";
                            break;

                        case "v":
                            p.CsColor = "V";
                            break;

                        case "z":
                            p.CsColor = "Z";
                            break;

                        case "l":
                            p.CsColor = "L";
                            break;

                        case "r":
                            p.CsColor = "R";
                            break;

                        default:
                            p.CsColor = "";
                            Embed
                            .WithDescription("Tenha certeza que digitou apenas a letra em destaque.")
                            .WithAuthor("Cor Inválida")
                            .WithColor(Colors.SagiriPink);
                            await botmsg.ModifyAsync(embed : Embed.Build());

                            break;
                        }
                        if (!String.IsNullOrWhiteSpace(p.CsColor))
                        {
                            Profile.UpdateOne(Builders <Profile> .Filter.Eq("ClanMemberID", membro._id), Builders <Profile> .Update.Set("CsColor", p.CsColor));
                            Embed
                            .WithDescription("")
                            .WithAuthor("Cor atualizada.")
                            .WithColor(Colors.SagiriBlue);
                            await botmsg.ModifyAsync(embed : Embed.Build());
                        }
                    }
                }
            }
        }
Esempio n. 31
0
        public async Task Imagem(CommandContext ctx, string link)
        {
            IMongoDatabase                Local  = Program.Database.GetDatabase("local");
            IMongoCollection <Player>     Player = Local.GetCollection <Player>("players");
            IMongoCollection <ClanMember> Member = Local.GetCollection <ClanMember>("membros");
            IAsyncCursor <Player>         query  = await Player.FindAsync(x => x.DiscordID == ctx.Member.Id);

            List <Player>       responce = query.ToList();
            DiscordEmbedBuilder Embed    = new DiscordEmbedBuilder();

            if (responce.Count == 0)
            {
                Player.InsertOne(new Player {
                    DiscordID = ctx.Member.Id, CurrentXP = 0, CurrentLevel = 0, _id = new ObjectId()
                });
            }
            else
            {
                Player p = responce[0];
                IAsyncCursor <ClanMember> query2 = await Member.FindAsync(x => x.PlayerID == p._id);

                List <ClanMember> responce2 = query2.ToList();
                if (responce2.Count == 0)
                {
                    Embed
                    .WithDescription("Só membros do clã possuem acesso ao perfil.")
                    .WithAuthor("Você não é um membro do clã!")
                    .WithColor(Colors.SagiriPink);
                    await ctx.RespondAsync(embed : Embed);
                }
                else
                {
                    ClanMember member = responce2[0];
                    IMongoCollection <Profile> Profile = Local.GetCollection <Profile>("profile");
                    IAsyncCursor <Profile>     query3  = await Profile.FindAsync(x => x.ClanMemberID == member._id);

                    List <Profile> responce3 = query3.ToList();
                    if (responce3.Count == 0)
                    {
                        Embed
                        .WithDescription("eu criei.\n\nEdite seu perfil novamente para salvar.")
                        .WithAuthor("Você não tinha um perfil, mas ...")
                        .WithColor(Colors.SagiriGray);
                        await ctx.RespondAsync(embed : Embed);
                    }
                    else
                    {
                        Profile perfil   = responce3[0];
                        string  b64image = "";
                        using (WebClient wc = new WebClient())
                        {
                            wc.DownloadFile(link, "_temp.png");
                            byte[] byteStream = File.ReadAllBytes($"{Directory.GetCurrentDirectory()}/_temp.png");
                            b64image = Convert.ToBase64String(byteStream);
                            File.Delete($"{Directory.GetCurrentDirectory()}/_temp.png");
                        }
                        Profile.UpdateOne(Builders <Profile> .Filter.Eq("ClanMemberID", member._id), Builders <Profile> .Update.Set("CustomImage", b64image));
                        Embed
                        .WithAuthor("Imagem atualizada")
                        .WithColor(Colors.SagiriBlue);
                        await ctx.RespondAsync(embed : Embed);
                    }
                }
            }
        }
Esempio n. 32
0
        private async Task ProcessAlt(List <string> args)
        {
            var name = args[0];
            var main = await _plogDbContext.Plogs.Where(p => p.DiscordId == _event.Message.Author.Id).FirstOrDefaultAsync();

            var alt = await _plogDbContext.Plogs.Where(p => p.Name.ToLower() == name.ToLower()).FirstOrDefaultAsync();

            if (main == null)
            {
                _response = $"You need to set up your main first.";
            }
            else if (alt == null)
            {
                var character = await _bladeAndSoulService.GetBladeAndSoulCharacter(name);

                if (character == null || character.Clan.ToLower() != "ploggystyle")
                {
                    _response = $"Your alt is not in Ploggystyle.";
                }
                else
                {
                    alt = new ClanMember
                    {
                        RealName  = character.AccountName,
                        Name      = name,
                        Active    = true,
                        DiscordId = _event.Message.Author.Id,
                        Class     = character.Class,
                        Created   = DateTime.UtcNow,
                        Main      = main,
                        ImageUrl  = character.ProfileImageUrl
                    };
                    _plogDbContext.Add(alt);
                    await _plogDbContext.SaveChangesAsync();

                    _response = $"Setup alt character {name}!";
                }
            }
            else
            {
                if (!alt.DiscordId.HasValue)
                {
                    alt.DiscordId = _event.Message.Author.Id;
                    alt.Main      = main;
                    await _plogDbContext.SaveChangesAsync();

                    _response = $"Attached alt character {name}";
                }
                else if (alt.DiscordId.HasValue && alt.DiscordId.Value != _event.Message.Author.Id)
                {
                    _response = $"This plog already exists! <@{alt.DiscordId}> has claimed this character.";
                }
                else
                {
                    _response = $"You have already claimed {name}";
                }
            }
            await _messageService.SendMessage(_event.Message.ChannelId, new OutgoingMessage
            {
                Content = _response
            });
        }
Esempio n. 33
0
        public void Save()
        {
            try
            {
                foreach (var clan in Clans.Where(x => !x.Saved).ToList())
                {
                    var clanToSave = _dbContext.Clans.FirstOrDefault(x => x.Id == clan.ID);
                    if (clanToSave == null)
                    {
                        clanToSave          = new DAL.Models.Clan();
                        clanToSave.Name     = clan.Name;
                        clanToSave.ClanType = (int)clan.ClanType;
                    }

                    clanToSave.Description  = clan.Description;
                    clanToSave.BoardId      = clan.Board;
                    clanToSave.Motto        = clan.Motto;
                    clanToSave.DeityName    = clan.Deity;
                    clanToSave.Badge        = clan.Badge;
                    clanToSave.RecallRoomId = clan.RecallRoom;
                    clanToSave.StoreRoomId  = clan.StoreRoom;

                    // Stats
                    if (clanToSave.Stats == null)
                    {
                        clanToSave.Stats = new ClanStats();
                    }
                    clanToSave.Stats.PvE_Kills         = clan.PvEKills;
                    clanToSave.Stats.PvE_Deaths        = clan.PvEDeaths;
                    clanToSave.Stats.Illegal_PvP_Kills = clan.IllegalPvPKill;
                    clanToSave.Stats.Score             = clan.Score;
                    clanToSave.Stats.Favour            = clan.Favour;
                    clanToSave.Stats.Strikes           = clan.Strikes;
                    clanToSave.Stats.MemberLimit       = clan.MemberLimit;
                    clanToSave.Stats.Alignment         = clan.Alignment;

                    // Members
                    foreach (var member in clan.Members)
                    {
                        var clanMember = clanToSave.Members.FirstOrDefault(x => x.Name == member.Name);
                        if (clanMember == null)
                        {
                            clanMember = new ClanMember();
                            clanToSave.Members.Add(clanMember);
                        }

                        clanMember.Name    = member.Name;
                        clanMember.Joined  = member.Joined;
                        clanMember.ClassId = member.Class;
                        clanMember.Level   = member.Level;
                        clanMember.Kills   = member.Kills;
                        clanMember.Deaths  = member.Deaths;
                        // TODO Notes
                        clanMember.ClanRank = (int)GetClanRank(member.Name, clan);
                    }

                    // Ranks

                    // Items
                }
                _dbContext.SaveChanges();
            }
            catch (DbException ex)
            {
                _logManager.Error(ex);
                throw;
            }
        }
        public async Task <ClanSave> LoadClanAsync(long clanId, CancellationToken cancellationToken)
        {
            if (clanId < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(clanId));
            }

            // If the clan is already in the cache, we return that instance.
            var clanSave = default(ClanSave);

            if (Server.Cache.TryGet(clanId, out clanSave))
            {
                return(clanSave);
            }

            // Otherwise we query the db to find the clan save.
            using (var sql = new MySqlConnection(_connectionString))
            {
                await sql.OpenAsync(cancellationToken);

                // Search for clan with specified clanId.
                using (var command = new MySqlCommand("SELECT * FROM `clans` WHERE `clan_id` = @ClanId", sql))
                {
                    command.Parameters.AddWithValue("ClanId", clanId);

                    using (var reader = await command.ExecuteReaderAsync(CommandBehavior.SingleRow, cancellationToken))
                    {
                        // If the query did not return any rows, it means the clan does not exists.
                        // So we return null;
                        if (!reader.HasRows)
                        {
                            return(null);
                        }
                        else
                        {
                            if (await reader.ReadAsync())
                            {
                                clanSave = Server.Factories.GetFactory <ClanSaveFactory>().Create();
                                FromMySqlDataReader(clanSave, reader);
                            }
                        }
                    }
                }

                var shouldDelete = false;
                var members      = new List <ClanMember>(4);

                // Look for entries in the clans_members table which has the same clan_id.
                using (var command = new MySqlCommand("SELECT * FROM `clan_members` WHERE `clan_id` = @ClanId", sql))
                {
                    command.Parameters.AddWithValue("ClanId", clanSave.ClanId);

                    using (var reader = await command.ExecuteReaderAsync(cancellationToken))
                    {
                        if (!reader.HasRows)
                        {
                            shouldDelete = true;
                        }
                        else
                        {
                            while (await reader.ReadAsync(cancellationToken))
                            {
                                var member = new ClanMember();
                                FromMySqlDataReader(member, reader);

                                var level = await Server.Db.LoadLevelAsync(member.Id, cancellationToken);

                                member.Name      = level.Name;
                                member.League    = level.League;
                                member.Trophies  = level.Trophies;
                                member.ExpLevels = level.ExpLevels;

                                members.Add(member);
                            }

                            clanSave.Members = members;
                        }
                    }
                }

                if (shouldDelete)
                {
                    using (var command = new MySqlCommand("DELETE FROM `clans` WHERE `clan_id` = @ClanId", sql))
                    {
                        command.Parameters.AddWithValue("ClanId", clanSave.ClanId);

                        var numRows = await command.ExecuteNonQueryAsync(cancellationToken);

                        if (numRows != 1)
                        {
                            Server.Logs.Warn($"Tried to delete an empty clan however, number of rows affected was '{numRows}'.");
                        }

                        Server.Cache.Unregister <ClanSave>(clanId);
                        return(null);
                    }
                }

                // Register this instance to our cache.
                Server.Cache.Register(clanId, clanSave);
                return(clanSave);
            }
        }