Topic: /tmpop
Помогите сделать команду /tmpop чтоб при пере заходе на канал она оставалась.
PvPGN Community Forums |
forums.pvpgn.pro → [RU] The Source Code → /tmpop
Помогите сделать команду /tmpop чтоб при пере заходе на канал она оставалась.
/op не?
Добавлено: 28.01.2014 07:22
нашел в connection.cpp
if (c->protocol.chat.tmpOP_channel)
{
xfree((void *)c->protocol.chat.tmpOP_channel);
c->protocol.chat.tmpOP_channel = NULL;
}
if (tmpOP_channel)
c->protocol.chat.tmpOP_channel = xstrdup(tmpOP_channel);
вроде бы тмпоп не записывается в бд, значит его надо записывать в бд.
по коду xfree очищает память? а xstrdup записывает?
вроде бы тмпоп не записывается в бд, значит его надо записывать в бд.
Именно. Нужно в Account-wrap.cpp добавить строки для tmpop, точно так же как для mute. И в самой команде (command.cpp) tmpop добавить значение на 1 (выдать на всегда) и на 0 (забрать).
extern int account_set_auth_tmpop(t_account * account, char const * channelname, int val)
{
char temp[256];
if (!channelname)
return account_set_boolattr(account, "BNET\\auth\\tmpop", val);
std::sprintf(temp,"BNET\\auth\\tmpop\\%.100s",channelname);
return account_set_boolattr(account, temp, val);
}
Помогите сделать команду /tmpop чтоб при пере заходе на канал она оставалась.
Зачем? /tmpop для того и сделан чтобы временно давался, при перезаходе на канал исчезал, как бы дать временно сделать оператором канала, а обычный /op навсегда.
Объясню для чего это в пвпгн-е, когда создаешь клан, первый зашедший на новый канал получает /tmpop.
Да просто хочу отдельную команду постоянного tmpop
extern int account_set_auth_tmpop(t_account * account, char const * channelname, int val) { char temp[256]; if (!channelname) return account_set_boolattr(account, "BNET\\auth\\tmpop", val); std::sprintf(temp,"BNET\\auth\\tmpop\\%.100s",channelname); return account_set_boolattr(account, temp, val); }
Неа, в connection.cpp править нужно.
если так то вроде комментируем эти строки.
/* if (c->protocol.chat.tmpOP_channel)
{
xfree((void *)c->protocol.chat.tmpOP_channel);
c->protocol.chat.tmpOP_channel = NULL;
}
*/
Добавлено: 28.01.2014 18:24
xfree очищает вроде, я прав?
Все равно не въехал для чего это нужно, используйте команду /op она же делает тоже самое только на постоянку?
tmpOP - и есть Temp(временный) OP, для того чтобы именно эту команду модифицировать, тебе нужно будет делать запись в бд, и при логине чтение из бд и указания флага снова (кокраз это и есть команда /op).
А так это все было сделано по аналогии с IRC, и его же исходники запиханы в ПВПГН.
Правда старая версия ещё по самому началу, где мало функций.
Я доработал до современного IRC где есть, Operator сервера, а на канале OP,HALF.VOICE.
К ним доработки tmpOP,tmpHALF,tmpVoice - где после перезахода флаг пропадает.
Все равно не въехал для чего это нужно, используйте команду /op она же делает тоже самое только на постоянку?
tmpOP - и есть Temp(временный) OP, для того чтобы именно эту команду модифицировать, тебе нужно будет делать запись в бд, и при логине чтение из бд и указания флага снова (кокраз это и есть команда /op).
А так это все было сделано по аналогии с IRC, и его же исходники запиханы в ПВПГН.
Правда старая версия ещё по самому началу, где мало функций.Я доработал до современного IRC где есть, Operator сервера, а на канале OP,HALF.VOICE.
К ним доработки tmpOP,tmpHALF,tmpVoice - где после перезахода флаг пропадает.
Ну /op это ведь выдача картинки "Battle.net" почти тоже самое что и /operator. А /tmpop - это рамка жёлтая.
Ну /op это ведь выдача картинки "Battle.net" почти тоже самое что и /operator. А /tmpop - это рамка жёлтая.
Открываем исходники и глядим сюды:
if (account_get_auth_admin(acc,channel) == 1 || account_get_auth_admin(acc,NULL) == 1)
newflags = MF_BLIZZARD;
else if (account_get_auth_operator(acc,channel) == 1 ||
account_get_auth_operator(acc,NULL) == 1)
newflags = MF_BNET;
else if (channel_conn_is_tmpOP(conn_get_channel(c),c))
newflags = MF_GAVEL;
forums.pvpgn.pro → [RU] The Source Code → /tmpop