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)
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));
if (!ShowChannel(sptr, ch2ptr))
continue; /* Don't show secret chans. */
else if ((member = find_channel_member(sptr, ch2ptr))) {
-
- do_names(sptr, ch2ptr, showingdelayed|NAMES_ALL|((chptr->mode.mode & MODE_AUDITORIUM) && !(member->status & MODE_CHANOP) ? NAMES_OPS : 0)); /* Full list if we're in this chan. */
+ do_names(sptr, ch2ptr, showingdelayed|NAMES_ALL|((ch2ptr->mode.mode & MODE_AUDITORIUM) && !(member->status & MODE_CHANOP) ? NAMES_OPS : 0)); /* Full list if we're in this chan. */
} else
- do_names(sptr, ch2ptr, showingdelayed|NAMES_VIS|((chptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0));
+ do_names(sptr, ch2ptr, showingdelayed|NAMES_VIS|((ch2ptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0));
}
/* List all remaining users on channel '*' */
* Special Case 2: User is on this channel, requesting full names list.
* (As performed with each /join) - ** High frequency usage **
*/
- do_names(sptr, chptr, showingdelayed|NAMES_ALL|NAMES_EON);
+ do_names(sptr, chptr, showingdelayed|NAMES_ALL|NAMES_EON|((chptr->mode.mode & MODE_AUDITORIUM) && !(member->status & MODE_CHANOP) ? NAMES_OPS : 0));
}
else
{
* 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);
+ do_names(sptr, chptr, showingdelayed|NAMES_VIS|NAMES_EON|((chptr->mode.mode & MODE_AUDITORIUM) ? NAMES_OPS : 0));
}
}
else