コード例 #1
0
 protected virtual bool DoLeave(string rawParameters, params CommandParameter[] parameters)
 {
     // Member leaving
     if (Leader != null && Leader.GroupMembers.Any(x => x == this))
     {
         Leader.RemoveGroupMember(this, false);
     }
     // Leader leaving -> change leader
     else if (GroupMembers.Any())
     {
         ICharacter newLeader = GroupMembers.FirstOrDefault();
         if (newLeader == null)
         {
             Log.Default.WriteLine(LogLevels.Error, "DoLeave: problem with group, leader leaving but no other group member found.");
             return(true);
         }
         // New leader has no leader
         newLeader.ChangeLeader(null);
         // Remove member from old leader and add it to new leader
         IReadOnlyCollection <ICharacter> members = new ReadOnlyCollection <ICharacter>(GroupMembers.Where(x => x != newLeader).ToList()); // clone because RemoveGroupMember will modify GroupMembers
         foreach (ICharacter member in members)
         {
             RemoveGroupMember(member, true);
             newLeader.AddGroupMember(member, true);
         }
         // Warn members about leader change
         newLeader.Send("You are the new group leader.");
         //foreach (ICharacter member in newLeader.GroupMembers)
         //    member.Act(ActOptions.ToCharacter, "{0} is the new group leader.", newLeader);
         Act(ActOptions.ToGroup, "{0} is the new group leader.", newLeader);
     }
     else
     {
         Send("You are not in a group.");
     }
     return(true);
 }