private void HandlePartyMemberRemoveMessage(IAccount account, PartyMemberRemoveMessage message) { if (PartyMembers.ContainsKey(message.LeavingPlayerId)) { Logger.Default.Log($"Player <{PartyMembers[message.LeavingPlayerId].Name}> was removed from your party.", LogMessageType.Party); PartyMembers.Remove(message.LeavingPlayerId); if (PartyMembers.Count == 1) { Logger.Default.Log($"Your party has been disbanded.", LogMessageType.Party); PartyMembers.Clear(); } else { Logger.Default.Log($"Your party has now {PartyMembers.Count} members", LogMessageType.Party); } } else { Logger.Default.Log($"Player <{message.LeavingPlayerId}> is not a member of your party. It can't be removed.", LogMessageType.Party); } }
/// <summary> /// Remove a party member. If the party member was the last in the /// party, then the party is dissolved. /// </summary> /// <param name="Creature">Supplies the creature to remove.</param> public void RemovePartyMember(CreatureObject Creature) { if (Creature.Party != this) { throw new ApplicationException(String.Format( "Removing creature {0} from party, but it is not in this party.")); } PartyMembers.Remove(Creature); Creature.Party = null; if (PartyLeader == Creature) { PartyLeader = null; } if (PartyMembers.Count == 0) { PartyManager.RemoveParty(this); } switch ((AIType)Creature.TacticsType) { case AIType.BEHAVIOR_TYPE_ANIMAL: PartyAnimals.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_ARCHER: PartyArchers.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_BUFFS: PartyBuffs.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_CONTROL: PartyControls.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_COWARD: PartyCowards.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_FLANK: PartyFlanks.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_MEDIC: PartyMedics.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_MINDLESS: PartyMindless.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_NUKE: PartyNukes.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_SHOCK: PartyShocks.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_SKIRMISH: PartySkrimishers.Remove(Creature); break; case AIType.BEHAVIOR_TYPE_TANK: PartyTanks.Remove(Creature); break; default: break; } if (PartyMembers.Count > 0 && PartyLeader == null) { int nCha = 0; foreach (CreatureObject Member in PartyMembers) { if (Member.Script.GetAbilityModifier(CLRScriptBase.ABILITY_CHARISMA, Member.ObjectId) > nCha) { nCha = Member.Script.GetAbilityModifier(CLRScriptBase.ABILITY_CHARISMA, Member.ObjectId); PartyLeader = Member; } } } }