]>
Commit | Line | Data |
---|---|---|
edb26b39 P |
1 | # HG changeset patch |
2 | # Parent 98171823d5d6a18c0dad624998d353d9f2a4f45f | |
3 | ||
4 | diff -r 98171823d5d6 include/channel.h | |
5 | --- a/include/channel.h Fri Jul 19 22:12:44 2013 +0100 | |
6 | +++ b/include/channel.h Fri Jul 19 22:13:32 2013 +0100 | |
7 | @@ -208,6 +208,7 @@ | |
8 | ||
9 | #define MAXOPLEVELDIGITS 3 | |
10 | #define MAXOPLEVEL 999 | |
11 | +#define MINOPLEVEL 100 /* minimum oplevel that ordinary users can set */ | |
12 | ||
13 | #define IsZombie(x) ((x)->status & CHFL_ZOMBIE) /**< see \ref zombie */ | |
14 | #define IsDeopped(x) ((x)->status & CHFL_DEOPPED) | |
15 | diff -r 98171823d5d6 ircd/channel.c | |
16 | --- a/ircd/channel.c Fri Jul 19 22:12:44 2013 +0100 | |
17 | +++ b/ircd/channel.c Fri Jul 19 22:13:32 2013 +0100 | |
18 | @@ -3226,14 +3226,19 @@ | |
19 | * MAXOPLEVEL, get oplevel MAXOPLEVEL. | |
20 | * Otherwise, get state->member's oplevel+1. | |
21 | */ | |
22 | - if (state->cli_change[i].oplevel <= MAXOPLEVEL) | |
23 | - SetOpLevel(member, state->cli_change[i].oplevel); | |
24 | + if (state->cli_change[i].oplevel <= MAXOPLEVEL) { | |
25 | + if ((IsChannelService(state->sptr) && IsService(cli_user(state->sptr)->server)) || (IsService(state->sptr))) { | |
26 | + SetOpLevel(member, state->cli_change[i].oplevel); | |
27 | + } else { | |
28 | + SetOpLevel(member, state->cli_change[i].oplevel > MINOPLEVEL ? state->cli_change[i].oplevel : MINOPLEVEL); | |
29 | + } | |
30 | + } | |
31 | else if (!state->member) | |
32 | SetOpLevel(member, MAXOPLEVEL); | |
33 | else if (OpLevel(state->member) >= MAXOPLEVEL) | |
34 | SetOpLevel(member, OpLevel(state->member)); | |
35 | else | |
36 | - SetOpLevel(member, OpLevel(state->member) + 1); | |
37 | + SetOpLevel(member, OpLevel(state->member) >= MINOPLEVEL ? OpLevel(state->member) + 1 : MINOPLEVEL); | |
38 | } | |
39 | ||
40 | /* actually effect the change */ |