X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fm_burst.c;fp=ircd%2Fm_burst.c;h=71fac547ad6faa1d596cb2de64f3b13f543ec2c4;hp=15d70344ab600d8c2e10eb9a9b104534036ff036;hb=b8402b9ef585580454491088f9581a1c3a8ca8ef;hpb=13e67fb3455fe03d0102970788ff764a491df43c diff --git a/ircd/m_burst.c b/ircd/m_burst.c index 15d7034..71fac54 100644 --- a/ircd/m_burst.c +++ b/ircd/m_burst.c @@ -505,6 +505,14 @@ int ms_burst(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) current_mode = (current_mode & ~CHFL_DELAYED) | CHFL_VOICE; oplevel = -1; /* subsequent digits are an absolute op-level value. */ } + else if (*ptr == 'h') { /* has halfop status */ + if (current_mode_needs_reset) { + current_mode = base_mode; + current_mode_needs_reset = 0; + } + current_mode = (current_mode & ~CHFL_DELAYED) | CHFL_HALFOP; + oplevel = -1; /* subsequent digits are an absolute op-level value. */ + } else if (*ptr == 'i') { /* has voice status */ if (current_mode_needs_reset) { current_mode = base_mode; @@ -579,6 +587,8 @@ int ms_burst(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) Remember the current mode. */ if (member->status & CHFL_CHANOP) member->status |= CHFL_BURST_ALREADY_OPPED; + if (member->status & CHFL_HALFOP) + member->status |= CHFL_BURST_ALREADY_HALFOPPED; if (member->status & CHFL_VOICE) member->status |= CHFL_BURST_ALREADY_VOICED; /* Synchronize with the burst. */ @@ -613,15 +623,19 @@ int ms_burst(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) if (member->status & CHFL_BURST_JOINED) { /* joined during burst */ if ((member->status & CHFL_CHANOP) && !(member->status & CHFL_BURST_ALREADY_OPPED)) modebuf_mode_client(mbuf, MODE_ADD | CHFL_CHANOP, member->user, OpLevel(member)); + if ((member->status & CHFL_HALFOP) && !(member->status & CHFL_BURST_ALREADY_HALFOPPED)) + modebuf_mode_client(mbuf, MODE_ADD | CHFL_HALFOP, member->user, OpLevel(member)); if ((member->status & CHFL_VOICE) && !(member->status & CHFL_BURST_ALREADY_VOICED)) modebuf_mode_client(mbuf, MODE_ADD | CHFL_VOICE, member->user, OpLevel(member)); } else if (parse_flags & MODE_PARSE_WIPEOUT) { /* wipeout old ops */ if (member->status & CHFL_CHANOP) modebuf_mode_client(mbuf, MODE_DEL | CHFL_CHANOP, member->user, OpLevel(member)); + if (member->status & CHFL_HALFOP) + modebuf_mode_client(mbuf, MODE_DEL | CHFL_HALFOP, member->user, OpLevel(member)); if (member->status & CHFL_VOICE) modebuf_mode_client(mbuf, MODE_DEL | CHFL_VOICE, member->user, OpLevel(member)); member->status = (member->status - & ~(CHFL_CHANNEL_MANAGER | CHFL_CHANOP | CHFL_VOICE)) + & ~(CHFL_CHANNEL_MANAGER | CHFL_CHANOP | CHFL_HALFOP | CHFL_VOICE)) | CHFL_DEOPPED; } }