Exemplo n.º 1
0
        private static void HandleInvite(GameSession session, PacketReader packet)
        {
            string targetPlayer = packet.ReadUnicodeString();

            Guild guild = GameServer.GuildManager.GetGuildByLeader(session.Player);

            if (guild == null)
            {
                return;
            }

            Player playerInvited = GameServer.Storage.GetPlayerByName(targetPlayer);

            if (playerInvited == null)
            {
                session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.UnableToSendInvite));
            }

            if (playerInvited.Guild != null)
            {
                session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.CharacterIsAlreadyInAGuild));
                return;
            }

            if (guild.Members.Count >= guild.Capacity)
            {
                //TODO Plug in 'full guild' error packets
                return;
            }

            session.Send(GuildPacket.InviteConfirm(playerInvited));
            playerInvited.Session.Send(GuildPacket.SendInvite(session.Player, playerInvited, guild));
        }
Exemplo n.º 2
0
    private static void HandleGuildMail(GameSession session, IPacketReader packet)
    {
        string title = packet.ReadUnicodeString();
        string body  = packet.ReadUnicodeString();

        Player sender = session.Player;
        Guild  guild  = sender.Guild;

        if (guild == null)
        {
            return;
        }

        byte      senderRank = sender.GuildMember.Rank;
        GuildRank guildRank  = guild.Ranks[senderRank];

        if (!guildRank.HasRight(GuildRights.CanGuildMail))
        {
            session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.InsufficientPermissions));
            return;
        }

        session.Send(GuildPacket.SendMail());

        IEnumerable <long> recipientIds = guild.Members.Select(c => c.Player.CharacterId);

        foreach (long recipientId in recipientIds)
        {
            MailHelper.SendMail(MailType.Player, recipientId, sender.CharacterId, sender.Name, title, body, "", "", new(), 0, 0, out Mail mail);
        }
    }
Exemplo n.º 3
0
        private static void HandleCreate(GameSession session, PacketReader packet)
        {
            string guildName = packet.ReadUnicodeString();

            if (session.Player.Guild != null)
            {
                return;
            }

            if (!session.Player.Wallet.Meso.Modify(-2000))
            {
                session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.NotEnoughMesos));
                return;
            }


            Guild newGuild;

            if (DatabaseManager.GuildExists(guildName))
            {
                session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.GuildWithSameNameExists));
                return;
            }
            newGuild = new(guildName);

            if (!DatabaseManager.CreateGuild(newGuild))
            {
                throw new ArgumentException("Could not create guild");
            }

            GameServer.GuildManager.AddGuild(newGuild);
            newGuild.AddLeader(session.Player);

            session.FieldManager.BroadcastPacket(GuildPacket.UpdateGuildTag2(session.Player, guildName));
            session.Send(GuildPacket.Create(guildName));

            string inviter = ""; // nobody because nobody invited the guild leader

            GuildMember member = newGuild.Members.FirstOrDefault(x => x.Player == session.Player);

            session.Send(GuildPacket.UpdateGuild(newGuild));
            session.Send(GuildPacket.MemberBroadcastJoinNotice(member, inviter, false));
            session.Send(GuildPacket.MemberJoin(session.Player));

            // Remove any applications
            foreach (GuildApplication application in session.Player.GuildApplications)
            {
                Guild guild = GameServer.GuildManager.GetGuildById(application.GuildId);
                application.Remove(session.Player, guild);
            }
        }
Exemplo n.º 4
0
    private static void HandleGuildDonate(GameSession session, PacketReader packet)
    {
        int donateQuantity = packet.ReadInt();
        int donationAmount = donateQuantity * 10000;

        Guild guild = GameServer.GuildManager.GetGuildById(session.Player.Guild.Id);

        if (guild == null)
        {
            return;
        }

        GuildPropertyMetadata guildProperty = GuildPropertyMetadataStorage.GetMetadata(guild.Exp);

        GuildMember member = guild.Members.First(x => x.Player == session.Player);

        if (member.DailyDonationCount >= guildProperty.DonationMax)
        {
            return;
        }

        if (!session.Player.Wallet.Meso.Modify(-donationAmount))
        {
            session.Send(GuildPacket.ErrorNotice((byte)GuildErrorNotice.NotEnoughMesos));
            return;
        }

        Item coins = new(30000861)
        {
            Rarity = 4,
            Amount = guildProperty.DonateGuildCoin * donateQuantity
        };

        session.Player.Inventory.AddItem(session, coins, true);

        int contribution = GuildContributionMetadataStorage.GetContributionAmount("donation");

        member.DailyDonationCount += (byte)donateQuantity;
        member.AddContribution(contribution * donateQuantity);
        guild.ModifyFunds(session, guildProperty, donationAmount);
        session.Send(GuildPacket.UpdatePlayerDonation());
        guild.BroadcastPacketGuild(GuildPacket.UpdatePlayerContribution(member, donateQuantity));
    }
Exemplo n.º 5
0
        private void HandleCreate(GameSession session, PacketReader packet)
        {
            string guildName = packet.ReadUnicodeString();

            if (!session.Player.Wallet.Meso.Modify(-2000))
            {
                short NoticeCode = 5121;
                session.Send(GuildPacket.ErrorNotice(NoticeCode));
                return;
            }

            session.FieldManager.BroadcastPacket(GuildPacket.UpdateGuildTag(session.Player, guildName));
            session.Send(GuildPacket.Create(guildName));

            string inviter  = ""; // nobody because nobody invited the guild leader
            byte   response = 0;  // 0 to not display invite notification
            byte   rank     = 0;  // set to leader rank

            Guild newGuild = new(guildName, new List <Player> {
                session.Player
            });