public static void HandleCreateListing(GameSession session, PacketReader packet) { string partyName = packet.ReadUnicodeString(); bool approval = packet.ReadBool(); int memberCountRecruit = packet.ReadInt(); Party party = GameServer.PartyManager.GetPartyByLeader(session.Player); if (party == null) { Party newParty = new(partyName, approval, session.Player, memberCountRecruit); GameServer.PartyManager.AddParty(newParty); session.Send(PartyPacket.Create(newParty, false)); session.Send(PartyPacket.UpdateHitpoints(session.Player)); session.Player.Party = newParty; party = newParty; } else { if (party.Members.Count >= memberCountRecruit) { return; } party.PartyFinderId = GuidGenerator.Long(); party.Name = partyName; party.Approval = approval; party.RecruitMemberCount = memberCountRecruit; } party.BroadcastPacketParty(MatchPartyPacket.CreateListing(party)); party.BroadcastPacketParty(PartyPacket.MatchParty(party, true)); }
public static void HandleRemoveListing(GameSession session) { Party party = session.Player.Party; if (party == null) { return; } party.BroadcastPacketParty(MatchPartyPacket.RemoveListing(party)); if (party.Members.Count == 1) { party.RemoveMember(session.Player); return; } party.PartyFinderId = 0; party.BroadcastPacketParty(PartyPacket.MatchParty(null, false)); }
public static void HandleRefresh(GameSession session, PacketReader packet) { //Get search terms: long unk = packet.ReadLong(); SearchFilter filterMode = (SearchFilter)packet.ReadByte(); string searchText = packet.ReadUnicodeString().ToLower(); long unk2 = packet.ReadLong(); List <Party> partyList = GameServer.PartyManager.GetPartyFinderList(); //Filter switch (filterMode) { case SearchFilter.MostMembers: partyList = partyList.OrderByDescending(p => p.Members.Count).ToList(); break; case SearchFilter.LeastMembers: partyList = partyList.OrderBy(p => p.Members.Count).ToList(); break; case SearchFilter.OldestFirst: partyList = partyList.OrderBy(p => p.CreationTimestamp).ToList(); break; case SearchFilter.NewestFirst: partyList = partyList.OrderByDescending(p => p.CreationTimestamp).ToList(); break; } //Filter text if (searchText.Length > 0) { partyList = partyList.Where(o => o.Name.ToLower().Contains(searchText)).ToList(); } session.Send(MatchPartyPacket.SendListings(partyList)); }
private void JoinParty(GameSession session, string leaderName, bool accept, int unknown) { Player partyLeader = GameServer.Storage.GetPlayerByName(leaderName); if (partyLeader == null) { return; } GameSession leaderSession = partyLeader.Session; if (!accept) { //Send Decline message to inviting player leaderSession.Send(ChatPacket.Send(partyLeader, session.Player.Name + " declined the invitation.", ChatType.NoticeAlert2)); return; } Party party = GameServer.PartyManager.GetPartyByLeader(partyLeader); if (party != null) { //Existing party, add joining player to all other party members. party.BroadcastPacketParty(PartyPacket.Join(session.Player)); party.BroadcastPacketParty(PartyPacket.UpdatePlayer(session.Player)); party.BroadcastPacketParty(PartyPacket.UpdateHitpoints(session.Player)); party.AddMember(session.Player); if (party.PartyFinderId != 0) { if (party.Members.Count >= party.MaxMembers) { party.PartyFinderId = 0; //Hide from party finder if full party.BroadcastPacketParty(MatchPartyPacket.RemoveListing(party)); party.BroadcastPacketParty( MatchPartyPacket.SendListings(GameServer.PartyManager.GetPartyFinderList())); party.BroadcastPacketParty(PartyPacket.MatchParty(null)); } else { session.Send( MatchPartyPacket.CreateListing(party)); //Add recruitment listing for newly joining player session.Send(PartyPacket.MatchParty(party)); } } } else { //Create new party Party newParty = new(10, new List <Player> { partyLeader, session.Player }); GameServer.PartyManager.AddParty(newParty); //Send the party leader all the stuff for the joining player leaderSession.Send(PartyPacket.Join(session.Player)); leaderSession.Send(PartyPacket.UpdatePlayer(session.Player)); leaderSession.Send(PartyPacket.UpdateHitpoints(session.Player)); leaderSession.Send(PartyPacket.UpdateHitpoints(partyLeader)); party = newParty; } //Create existing party based on the list of party members session.Send(PartyPacket.CreateExisting(partyLeader, party.Members)); session.Send(PartyPacket.UpdatePlayer(session.Player)); foreach (Player partyMember in party.Members) { //Skip first character because of the scuffed Create packet. For now this is a workaround and functions the same. if (partyMember.CharacterId != party.Members.First().CharacterId) { //Adds the party member to the UI session.Send(PartyPacket.Join(partyMember)); } //Update the HP for each party member. session.Send(PartyPacket.UpdateHitpoints(partyMember)); } }