added FEAT_CHMODE_A_NOSET to prevent +a from being set by users
[ircu2.10.12-pk.git] / ircd / m_names.c
index 0e1169e7016a38e300ece79c56871fe18c009971..9e67b325a3191c175e33608992a06d599da6eb5b 100644 (file)
@@ -167,7 +167,7 @@ void do_names(struct Client* sptr, struct Channel* chptr, int filter)
        if (IsInvisibleJoin(member) && member->user != sptr)
                continue;
        
-       if (!IsChanOp(member) && !HasVoice(member) && member->user != sptr && (filter & NAMES_OPS))
+       if (!IsChanOpOrHalfOp(member) && !HasVoice(member) && member->user != sptr && (filter & NAMES_OPS))
                continue;
 
     if (needs_space)
@@ -177,6 +177,8 @@ void do_names(struct Client* sptr, struct Channel* chptr, int filter)
       buf[idx++] = '!';
     else if (IsChanOp(member))
       buf[idx++] = '@';
+    else if (IsHalfOp(member))
+      buf[idx++] = '%';
     else if (HasVoice(member))
       buf[idx++] = '+';
     strcpy(buf + idx, cli_name(c2ptr));
@@ -319,7 +321,7 @@ int m_names(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
          *  Special Case 3: User isn't on this channel, show all visible users, in 
          *  non secret channels.
          */ 
-        do_names(sptr, chptr, showingdelayed|NAMES_VIS|NAMES_EON|((ch2ptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0));
+        do_names(sptr, chptr, showingdelayed|NAMES_VIS|NAMES_EON|((chptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0));
       } 
     }
     else