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)); }
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); } }
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); } }
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)); }
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 });