public bool CanPlayerJoinParty(Player player, Party party, bool sendErrors = true) { if (party.PartyMembers.Contains(player)) return false; if (player.Party != null) return false; if (party.PartyMembers.Count >= MaxPlayersInParty) { if(sendErrors) SystemMessages.ThePartyIsFull.Send(player); return false; } //todo: other checks return true; }
public void AddPlayerToParty(Player invited, ref Party party) { if (!CanPlayerJoinParty(invited, party)) return; lock (party.MemberLock) { party.PartyMembers.Add(invited); invited.Party = party; } UpdateParty(party); Communication.Global.RelationService.ResendRelation(invited); }
private Player GetPayerById(Party party, int playerId) { return party.PartyMembers.FirstOrDefault(member => member.PlayerId == playerId); }
public void SendEffectsToPartyMembers(Party party) { if (party == null) return; //lock (party.MemberLock) // foreach (Player partyMember in party.PartyMembers) // if (Communication.Global.PlayerService.IsPlayerOnline(partyMember)) // foreach (Player member in party.PartyMembers) // if (Communication.Global.PlayerService.IsPlayerOnline(member)) // new SpPartyAbnormals(member).Send(partyMember); }
public List<Player> GetOnlineMembers(Party party) { return party.PartyMembers.Where(member => Communication.Global.PlayerService.IsPlayerOnline(member)).ToList(); }
public void SendLifestatsToPartyMembers(Party party) { if(party == null) return; lock (party.MemberLock) foreach (Player partyMember in party.PartyMembers) if (Communication.Global.PlayerService.IsPlayerOnline(partyMember)) foreach (Player member in party.PartyMembers) if (Communication.Global.PlayerService.IsPlayerOnline(member)) new SpPartyStats(member).Send(partyMember); }
public void UpdateParty(Party party) { if(party == null) return; SendPacketToPartyMembers(party, new SpPartyList(party.PartyMembers)); SendLifestatsToPartyMembers(party); SendEffectsToPartyMembers(party); }
public void SendPacketToPartyMembers(Party party, ISendPacket packet, Player sender = null) { if (party == null) return; lock (party.MemberLock) foreach (Player member in party.PartyMembers) if (!member.Equals(sender) && Communication.Global.PlayerService.IsPlayerOnline(member)) packet.Send(member.Connection); }
public void RemoveParty(ref Party party) { _partys.Remove(party); lock (party.MemberLock) { foreach (Player member in party.PartyMembers) { member.Party = null; new SpPartyLeave().Send(member); } } party = null; }
public void RemovePlayerFromParty(Player player, ref Party party) { if (player.Party.PartyMembers.Count <= 2) { RemoveParty(ref player.Party); return; } lock (player.Party.MemberLock) player.Party.PartyMembers.Remove(player); SendPacketToPartyMembers(party, new SpPartyRemoveMember(player)); UpdateParty(player.Party); player.Party = null; new SpPartyLeave().Send(player); }