Dosya: irc*.*/modules/chanserv/access.c
Kod:
{ CA_AUTOPROTECT, ACCLEV_SOP, "AUTOPROTECT", CHAN_LEVEL_AUTOPROTECT,
CL_SET_MODE, { .cumode = {"a",0} } },
üzerine;
Kod:
{ CA_AUTOOWNER, ACCLEV_FOUNDER, "", -1,
CL_SET_MODE, { .cumode = {"", 1} } },
Aynı dosyada bunu bulup;
Kod:
for (i = 0; levelinfo[i].what >= 0; i++) {
int type = levelinfo[i].action & CL_TYPEMASK;
if (type == CL_SET_MODE || type == CL_CLEAR_MODE) {
/* Use MODE_NOERROR to deal with protocols that don't
* support some modes (e.g. +h in AUTODEOP) */
levelinfo[i].target.cumode.flags =
mode_string_to_flags(levelinfo[i].target.cumode.modes,
MODE_CHANUSER | MODE_NOERROR);
}
def_levels[levelinfo[i].what] = levelinfo[i].defval;
lev_is_max[levelinfo[i].what] = levelinfo[i].action & CL_LESSEQUAL;
}
Böyle değiştir;
Kod:
for (i = 0; levelinfo[i].what >= 0; i++) {
int type = levelinfo[i].action & CL_TYPEMASK;
if (type == CL_SET_MODE || type == CL_CLEAR_MODE) {
if (levelinfo[i].what == CA_AUTOOWNER) {
if (chanusermode_owner)
levelinfo[i].target.cumode.flags = chanusermode_owner;
else
levelinfo[i].action = CL_OTHER; /* make it a no-op */
} else {
/* Use MODE_NOERROR to deal with protocols that don't
* support some modes (e.g. +h in AUTODEOP) */
levelinfo[i].target.cumode.flags =
mode_string_to_flags(levelinfo[i].target.cumode.modes,
MODE_CHANUSER | MODE_NOERROR);
}
}
def_levels[levelinfo[i].what] = levelinfo[i].defval;
lev_is_max[levelinfo[i].what] = levelinfo[i].action & CL_LESSEQUAL;
}
Dosya: irc*.*/modules/chanserv/chanserv.h
Bunu bulup;
Kod:
/* CA_AUTOOWNER 18 */ /* No longer used */
Kod:
#define CA_AUTOOWNER 18
olarak değiştir.
Dosya: irc*.*/modules/chanserv/main.c
Bunu bulup;
Kod:
else if (strcmp(cmd, "DEHALFOP") == 0)
target_nextacc = CA_AUTOOP;
else
target_nextacc = -1;
Hemen altına;
Kod:
if (strcmp(cmd, "DEPROTECT") == 0 && chanusermode_owner)
mode |= chanusermode_owner;
Dosya: irc*.*/modes.c
Bunu bulup;
Kod:
char chanmode_multiple[257]; /* Chanmodes that can be set multiple times */
Hemen üstüne;
Kod:
int32 chanusermode_owner;
Aynı dosyada bunu bulup;
Kod:
modelist = chanusermodes;
flaglist = chanuserflags;
for (i = 0; i < 256; i++) {
if (modelist[i].flag) {
int n = 0;
uint32 tmp = (uint32) modelist[i].flag;
prefixtable[ (uint8)modelist[i].prefix ] = tmp;
while (tmp >>= 1)
n++;
if (n < 31)
flaglist[n] = (char)i;
if (modelist[i].plus_params!=1 || modelist[i].minus_params!=1) {
log("modes: Warning: channel user mode `%c' takes %d/%d"
" parameters (should be 1/1)",
i, modelist[i].plus_params, modelist[i].minus_params);
}
}
}
}
Bununla değiştir;
Kod:
modelist = chanusermodes;
flaglist = chanuserflags;
for (i = 0; i < 256; i++) {
if (modelist[i].flag) {
int n = 0;
uint32 tmp = (uint32) modelist[i].flag;
prefixtable[ (uint8)modelist[i].prefix ] = tmp;
if (modelist[i].info & MI_CHANOWNER)
chanusermode_owner |= tmp;
while (tmp >>= 1)
n++;
if (n < 31)
flaglist[n] = (char)i;
if (modelist[i].plus_params!=1 || modelist[i].minus_params!=1) {
log("modes: Warning: channel user mode `%c' takes %d/%d"
" parameters (should be 1/1)",
i, modelist[i].plus_params, modelist[i].minus_params);
}
}
}
}
Dosya: irc*.*/modes.h
Bunu bulup;
Kod:
#define MI_REGNICKS_ONLY 0x08 /* [ C] Only registered/ID'd nicks may join */
Hemen altına ekle;
Kod:
#define MI_CHANOWNER 0x10
Aynı dosyada bunu bulup;
Kod:
extern int32 chanmode_opersonly;/* Chanmodes indicating oper-only channels */
Hemen altına;
Kod:
extern int32 chanusermode_owner;
Dosya: irc*.*/modules/protocol/ptlink.c
Bunu bulup;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'a', {0x00000010,1,1,'.'}}, /* Channel owner */
};
Bununla değiştir;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'a', {0x00000010,1,1,'.',MI_CHANOWNER}}, /* Channel owner */
};
Dosya: irc*.*/modules/protocol/trircd.c
Bunu bulup;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'u', {0x00000010,1,1,'.'}}, /* Channel owner */
};
Bununla değiştir;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'u', {0x00000010,1,1,'.',MI_CHANOWNER}}, /* Channel owner */
};
Dosya: irc*.*/modules/protocol/unreal.c
Bunu bulup;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'q', {0x00000010,1,1,'*'}}, /* Channel owner */
};
Bununla değiştir;
Kod:
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'q', {0x00000010,1,1,'*',MI_CHANOWNER}}, /* Channel owner */
};
Kod:
make
make install
Servisleri restartlamanız gerekmektedir.
Umarım eksik bir kod vermemişimdir, hata alırsanız hatayı kopyalarsanız yardımcı olabilirim. Şuanda açık bir sunucuda bu şekilde +q yetkisini ayarladm, herhangi bir sorun yaşamadım, yaşayacağınızı sanmıyorum, yinede hata varsa belirtirseniz çözmeye çalışırım.
Alıntı: