public virtual void LeaveParty(BasePlayerCharacterEntity playerCharacterEntity) { int partyId; PartyData party; if (!CanLeaveParty(playerCharacterEntity, out partyId, out party)) { return; } if (party.IsLeader(playerCharacterEntity)) { foreach (var memberId in party.GetMemberIds()) { BasePlayerCharacterEntity memberCharacterEntity; if (playerCharactersById.TryGetValue(memberId, out memberCharacterEntity)) { memberCharacterEntity.ClearParty(); SendPartyTerminateToClient(memberCharacterEntity.ConnectionId, partyId); } } parties.Remove(partyId); } else { playerCharacterEntity.ClearParty(); SendPartyTerminateToClient(playerCharacterEntity.ConnectionId, partyId); party.RemoveMember(playerCharacterEntity.Id); parties[partyId] = party; SendRemovePartyMemberToClients(party, playerCharacterEntity.Id); } }