public void DisconnectedMember(Creature creature)
{
lock (_sync)
{
_members.Remove(creature);
_occupiedSlots.Remove(creature.PartyPosition);
}
// Handle quest
if (this.Quest != null)
{
// Unset if leader left or not enough members remain,
// or remove quest from member's manager.
if (creature == this.Leader || this.MemberCount < ChannelServer.Instance.Conf.World.PartyQuestMinSize)
this.UnsetPartyQuest();
else
creature.Quests.Remove(this.Quest);
}
if (this.MemberCount > 0)
{
// Choose new leader if the old one disconnected
if (this.Leader == creature)
{
this.AutoChooseNextLeader();
this.Close();
Send.PartyChangeLeader(this);
}
if (this.IsOpen)
Send.PartyMemberWantedRefresh(this);
Send.PartyLeaveUpdate(creature, this);
}
if (this.MemberCount == 0)
ChannelServer.Instance.Events.MinutesTimeTick -= this.OnMinutesTimeTick;
}