move free target check after the snircd chanmode checks - dont use up a free target when the message never had a chance diff -r 03afb3a4d053 ircd/ircd_relay.c --- a/ircd/ircd_relay.c Sat Mar 20 14:53:39 2010 +0100 +++ b/ircd/ircd_relay.c Sat Mar 20 15:03:03 2010 +0100 @@ -103,9 +103,6 @@ send_reply(sptr, ERR_CANNOTSENDTOCHAN, chptr->chname); return; } - if ((chptr->mode.mode & MODE_NOPRIVMSGS) && - check_target_limit(sptr, chptr, chptr->chname, 0)) - return; /* +T check */ if ((chptr->mode.mode & MODE_NOMULTITARGET) && (targetc > 1)) { @@ -128,6 +125,10 @@ return; } + if ((chptr->mode.mode & MODE_NOPRIVMSGS) && + check_target_limit(sptr, chptr, chptr->chname, 0)) + return; + RevealDelayedJoinIfNeeded(sptr, chptr); sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, cli_from(sptr), SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text); @@ -156,10 +157,6 @@ if (!client_can_send_to_channel(sptr, chptr, 0)) return; - if ((chptr->mode.mode & MODE_NOPRIVMSGS) && - check_target_limit(sptr, chptr, chptr->chname, 0)) - return; - if ((chptr->mode.mode & MODE_NONOTICE)) return; @@ -178,6 +175,10 @@ if (*ch++==1) return; + if ((chptr->mode.mode & MODE_NOPRIVMSGS) && + check_target_limit(sptr, chptr, chptr->chname, 0)) + return; + RevealDelayedJoinIfNeeded(sptr, chptr); sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, cli_from(sptr), SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text); diff -r 03afb3a4d053 ircd/m_wallchops.c --- a/ircd/m_wallchops.c Sat Mar 20 14:53:39 2010 +0100 +++ b/ircd/m_wallchops.c Sat Mar 20 15:03:03 2010 +0100 @@ -118,9 +118,6 @@ if (IsChannelName(parv[1]) && (chptr = FindChannel(parv[1]))) { if (client_can_send_to_channel(sptr, chptr, 0) && !(chptr->mode.mode & MODE_NONOTICE)) { - if ((chptr->mode.mode & MODE_NOPRIVMSGS) && - check_target_limit(sptr, chptr, chptr->chname, 0)) - return 0; /* +cC checks */ if (chptr->mode.mode & MODE_NOCOLOUR) @@ -135,6 +132,10 @@ return 0; } + if ((chptr->mode.mode & MODE_NOPRIVMSGS) && + check_target_limit(sptr, chptr, chptr->chname, 0)) + return 0; + RevealDelayedJoinIfNeeded(sptr, chptr); sendcmdto_channel_butone(sptr, CMD_WALLCHOPS, chptr, cptr, SKIP_DEAF | SKIP_BURST | SKIP_NONOPS, diff -r 03afb3a4d053 ircd/m_wallvoices.c --- a/ircd/m_wallvoices.c Sat Mar 20 14:53:39 2010 +0100 +++ b/ircd/m_wallvoices.c Sat Mar 20 15:03:03 2010 +0100 @@ -117,9 +117,6 @@ if (IsChannelName(parv[1]) && (chptr = FindChannel(parv[1]))) { if (client_can_send_to_channel(sptr, chptr, 0) && !(chptr->mode.mode & MODE_NONOTICE)) { - if ((chptr->mode.mode & MODE_NOPRIVMSGS) && - check_target_limit(sptr, chptr, chptr->chname, 0)) - return 0; /* +cC checks */ if (chptr->mode.mode & MODE_NOCOLOUR) @@ -134,6 +131,10 @@ return 0; } + if ((chptr->mode.mode & MODE_NOPRIVMSGS) && + check_target_limit(sptr, chptr, chptr->chname, 0)) + return 0; + RevealDelayedJoinIfNeeded(sptr, chptr); sendcmdto_channel_butone(sptr, CMD_WALLVOICES, chptr, cptr, SKIP_DEAF | SKIP_BURST | SKIP_NONVOICES,