Topic: Вопрос по клану
При созданий клана у всех шаманов и вождя появляется tmpop, хочу сделать чтоб у вождя был оператор а у шаманов tmpop. Поискал нашёл эту функцию в connect.cpp но тока не очень понимаю как это настроить. Подскажите.
PvPGN Community Forums |
forums.pvpgn.pro → [RU] The Source Code → Вопрос по клану
При созданий клана у всех шаманов и вождя появляется tmpop, хочу сделать чтоб у вождя был оператор а у шаманов tmpop. Поискал нашёл эту функцию в connect.cpp но тока не очень понимаю как это настроить. Подскажите.
OnlyMan не понимаете как настроить, лучше не трогать. По сабжу:
find
if (clanmember_get_status(member) >= CLAN_SHAMAN)
/* PELISH: Giving tmpOP to SHAMAN and CHIEFTAIN on clanchannel */
conn_set_tmpOP_channel(c,channelname);
}
change
if (clanmember_get_status(member) == CLAN_SHAMAN) //если шаман то
conn_set_tmpOP_channel(c,channelname); // /tmpop
else if (clanmember_get_status(member) > CLAN_SHAMAN) //если выше шамана то
account_set_auth_operator(acc, channelname, 1); // /operator
Добавлено: 13.08.2014 10:11
не тестировал. будут ошибки выкладывай.
Вот такие ошибки выдаёт:
1>------ Построение начато: проект: bnetd, Конфигурация: Release Win32 ------
1>Компиляция...
1>connection.cpp
1>..\..\..\source\src\bnetd\connection.cpp(478) : warning C4244: =: преобразование 'time_t' в 'int', возможна потеря данных
1>..\..\..\source\src\bnetd\connection.cpp(1909) : warning C4101: curr: неиспользованная локальная переменная
1>..\..\..\source\src\bnetd\connection.cpp(1913) : warning C4101: created: неиспользованная локальная переменная
1>..\..\..\source\src\bnetd\connection.cpp(1985) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(1988) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(1989) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(1989) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2013) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2016) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2020) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2021) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2021) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2026) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2028) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2029) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2029) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2042) : error C2143: синтаксическая ошибка: отсутствие ";" перед "->"
1>..\..\..\source\src\bnetd\connection.cpp(2042) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2044) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2045) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2045) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2457: __FUNCTION__: встроенный макрос не может находиться вне тела функции
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2664: pvpgn::bnetd::conn_get_socket: невозможно преобразовать параметр 1 из 'int' в 'const pvpgn::bnetd::t_connection *'
1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2227: выражение слева от "->protocol" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1> тип: int
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2228: выражение слева от ".chat" должно представлять класс, структуру или объединение
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2228: выражение слева от ".channel" должно представлять класс, структуру или объединение
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2052) : error C2078: слишком много инициализаторов
1>..\..\..\source\src\bnetd\connection.cpp(2053) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2053) : error C2365: pvpgn::bnetd::conn_send_welcome: переопределение; предыдущим определением было "функция"
1> ..\..\..\source\src\bnetd\connection.cpp(97): см. объявление 'pvpgn::bnetd::conn_send_welcome'
1>..\..\..\source\src\bnetd\connection.cpp(2055) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2057) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2058) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2058) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2064) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2065) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2065) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2072) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2075) : error C2059: синтаксическая ошибка: if
1>..\..\..\source\src\bnetd\connection.cpp(2078) : error C2059: синтаксическая ошибка: return
1>..\..\..\source\src\bnetd\connection.cpp(2081) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2081) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2082) : error C2448: conn_part_channel: вероятно, инициализатор, использующий стиль функции, является определением функции
1>..\..\..\source\src\bnetd\connection.cpp(2099) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2099) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2099) : error C2062: тип "const char" не требуется
1>..\..\..\source\src\bnetd\connection.cpp(2100) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2100) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2119) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2119) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2119) : error C2062: тип "const char" не требуется
1>..\..\..\source\src\bnetd\connection.cpp(2120) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2120) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C2143: синтаксическая ошибка: отсутствие ")" перед "const"
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>..\..\..\source\src\bnetd\connection.cpp(2139) : error C2059: синтаксическая ошибка: )
1>..\..\..\source\src\bnetd\connection.cpp(2140) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2140) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2151) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2151) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2151) : error C2062: тип "const char" не требуется
1>..\..\..\source\src\bnetd\connection.cpp(2158) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>..\..\..\source\src\bnetd\connection.cpp(2158) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>..\..\..\source\src\bnetd\connection.cpp(2205) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2205) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2206) : error C2448: conn_get_tcpaddr: вероятно, инициализатор, использующий стиль функции, является определением функции
1>..\..\..\source\src\bnetd\connection.cpp(2217) : error C2065: t_connection: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2217) : error C2065: c: необъявленный идентификатор
1>..\..\..\source\src\bnetd\connection.cpp(2217) : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
1>Журнал построения был сохранен в "file://c:\1\build\src\bnetd\bnetd.dir\Release\BuildLog.htm"
1>bnetd - ошибок 69, предупреждений 3
========== Построение: успешно: 0, с ошибками: 1, без изменений: 23, пропущено: 0 ==========
ничего подобного не наблюдалось у меня. походу ты убрал "}" -_-
if ((clantag) && !((account_get_auth_admin(acc,channelname) == 1) || (account_get_auth_admin(acc,NULL) == 1))) {
/* PELISH: Admins should be able to join any channel */
clan = account_get_clan(acc);
if ((!clan) || (clan_get_clantag(clan) != clantag)) {
if (!channel)
{
char msgtemp[MAX_MESSAGE_LEN];
snprintf(msgtemp, sizeof(msgtemp), "Unable to join channel %s, there is no member of that clan in the channel!", channelname);
message_send_text(c, message_type_error, c, msgtemp);
if (conn_get_game(c) || c->protocol.chat.channel==NULL) {
// FIXME: This is not tested to be according to battle.net!!
// This is fix for empty clan channels with preventing to join CHANNEL_NAME_BANNED when is used _handle_join_command
snprintf(msgtemp, sizeof(msgtemp), "You have been redirected to %s.", CHANNEL_NAME_BANNED);
message_send_text(c, message_type_error, c, msgtemp);
channel = channellist_find_channel_by_name(CHANNEL_NAME_BANNED,conn_get_country(c),realm_get_name(conn_get_realm(c)));
} else
return 0;
}
else
{
t_clan * ch_clan;
if((ch_clan=clanlist_find_clan_by_clantag(clantag))&&(clan_get_channel_type(ch_clan)==1))
{
message_send_text(c, message_type_error, c, "This is a private clan channel, unable to join!");
return 0;
}
}
}
else {
if ((clan) && (clan_get_clantag(clan) == clantag) && (member = account_get_clanmember(acc))) {
if (clanmember_get_status(member) == CLAN_SHAMAN)
/* PELISH: Giving tmpOP to SHAMAN and CHIEFTAIN on clanchannel */
conn_set_tmpOP_channel(c,channelname);
else if (clanmember_get_status(member) > CLAN_SHAMAN)
account_set_auth_operator(acc, channelname, 1);
}
}
}
попробуй это или выложи connection.cpp код в txt ._.
Всё работает спасибо большое за помощь!
Добавлено: 13.08.2014 18:06
Только такой вопрос если вождь передаст статус вождя другому то у обйх будет оператор?
Да
Добавлено: 13.08.2014 19:17
можно сделать как temp operator (tmpop), завтра напишу как (если сам додумаюсь О_О)
или тупо убирать у всех оператор, когда заходят на канал...
когда на серве народа много всех подрят убирать надоест
extern int channel_del_connection(t_channel * channel, t_connection * connection, t_message_type mess, char const * text)
{
t_channelmember * curr;
t_channelmember * temp;
t_elem * curr2;
int clantag=0;
t_clan * clan = NULL;
t_clanmember * member = NULL;
t_account * acc;
acc = conn_get_account(connection);
clan = account_get_clan(acc);
if (!channel)
{
eventlog(eventlog_level_error,__FUNCTION__,"got NULL channel");
return -1;
}
if (!connection)
{
eventlog(eventlog_level_error,__FUNCTION__,"got NULL connection");
return -1;
}
channel_message_send(channel, mess, connection, text);
channel_message_log(channel,connection,0,"PARTED");
curr = channel->memberlist;
if (curr->connection==connection)
{
channel->memberlist = channel->memberlist->next;
xfree(curr);
}
else
{
while (curr->next && curr->next->connection!=connection)
curr = curr->next;
if (curr->next)
{
temp = curr->next;
curr->next = curr->next->next;
xfree(temp);
}
else
{
eventlog(eventlog_level_error,__FUNCTION__,"[%d] connection not in channel member list",conn_get_socket(connection));
return -1;
}
}
channel->currmembers--;
if (conn_get_tmpOP_channel(connection) &&
std::strcmp(conn_get_tmpOP_channel(connection),channel_get_name(channel))==0)
{
conn_set_tmpOP_channel(connection,NULL);
}
if((strcasecmp(channel->name, "clan ", 5)==0)&&(std::strlen(channel->name)<10))
clantag = str_to_clantag(&channel->name[5]);
if ((clantag) && !((account_get_auth_admin(acc,channel->name) == 1) || (account_get_auth_admin(acc,NULL) == 1))) {
if ((clan) && (clan_get_clantag(clan) == clantag) && (member = account_get_clanmember(acc))) {
if (clanmember_get_status(member) < CLAN_SHAMAN)
account_set_auth_operator(acc, channel->name, 0);
}
}
if (!channel->memberlist && !(channel->flags & channel_flags_permanent)) /* if channel is empty, delete it unless it's a permanent channel */
{
channel_destroy(channel,&curr2);
}
return 0;
}
замени на channel.cpp
за 100% работоспособность не гарантирую. не тестировал._.
отпишись.
>------ Построение начато: проект: bnetd, Конфигурация: Release Win32 ------
1>Компиляция...
1>channel.cpp
1>..\..\..\source\src\bnetd\channel.cpp(501) : error C2065: t_clan: необъявленный идентификатор
1>..\..\..\source\src\bnetd\channel.cpp(501) : error C2275: pvpgn::bnetd::clan: недопустимое использование этого типа в качестве выражения
1> c:\1\source\src\bnetd\account.h(47): см. объявление 'pvpgn::bnetd::clan'
1>..\..\..\source\src\bnetd\channel.cpp(502) : error C2065: t_clanmember: необъявленный идентификатор
1>..\..\..\source\src\bnetd\channel.cpp(502) : error C2065: member: необъявленный идентификатор
1>..\..\..\source\src\bnetd\channel.cpp(505) : error C2513: pvpgn::bnetd::clan: нет переменных, объявленных перед '='
1>..\..\..\source\src\bnetd\channel.cpp(555) : warning C4002: слишком много фактических параметров для макроопределения 'strcasecmp'
1>..\..\..\source\src\bnetd\channel.cpp(556) : error C3861: str_to_clantag: идентификатор не найден
1>..\..\..\source\src\bnetd\channel.cpp(560) : error C2059: синтаксическая ошибка: &&
1>..\..\..\source\src\bnetd\channel.cpp(561) : error C2065: member: необъявленный идентификатор
1>..\..\..\source\src\bnetd\channel.cpp(561) : error C2065: CLAN_SHAMAN: необъявленный идентификатор
1>..\..\..\source\src\bnetd\channel.cpp(561) : error C3861: clanmember_get_status: идентификатор не найден
1>..\..\..\source\src\bnetd\channel.cpp(566) : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
1>Журнал построения был сохранен в "file://c:\1\build\src\bnetd\bnetd.dir\Release\BuildLog.htm"
1>bnetd - ошибок 11, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 23, пропущено: 0 ==========
в заголовке укажи путь к х(эндлу) О_О
include "clan.h"
Добавлено: 14.08.2014 17:39
забыл просто про это сказать. думал сам додумаешься ... ._.
При перезаходе в бнет оператор появляется
Добавлено: 14.08.2014 16:54
а так если просто передать то оператор остаётся тока у старого вождя
Не знаю точно, но все должно работать как по маслу, т.к. при заходе на канал функция проверяет является ли шаманом (выше шамана), и дает оператора.
А другая функция делает все наоборот.
Спроси у хомяка. вроде у него такая фича была, только без проверки шамана и тп.
Ну сделай проверку если пользователь вождь то будет иконка, а если нет то нет. Вроде в channel.cpp делается.
forums.pvpgn.pro → [RU] The Source Code → Вопрос по клану