PDA

Просмотр полной версии : [Вопрос] Не показывает оффлайн игроков во фракции



Ne_nub
24.04.2017, 21:48
Доброго времени суток. Есть команда, которая должна показывать Offline список сотрудников, но они не показываются, пока не понял почему. Сам код:


CMD:offmembers(playerid, params[])
{
if(PlayerInfo[playerid][pLeader] < 1) return false;
new stringer[128];
mysql_format(connects, stringer,sizeof(stringer), "SELECT * FROM `accounts` WHERE pMember = '%i'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, stringer, true, "OffMembers", "d", playerid);
return true;
}



publics: OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\tПоследняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME], GetonDate[128], str[46], full;
while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
cache_get_field_content(rows, "pGetonDate", GetonDate);
if(cache_get_field_content_int(rows, "pOnline", connects) == 1001) format(str, sizeof(str), "%s\t\t\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_LIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return true;
}

DeimoS
25.04.2017, 23:59
Пустой диалог выдаёт или что?
Так же содержимое Mysql_log хотелось бы увидеть

Ne_nub
27.04.2017, 16:35
Да, выдает пустой диалог. В mysql_log.txt ничего нет.

DeimoS
27.04.2017, 18:35
publics: OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\tПоследняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME], GetonDate[128], str[46], full;
while(--rows >= 0)
{
if(cache_get_field_content_int(rows, "pOnline", connects) != 1001)
continue;
cache_get_field_content(rows, "Name", Names);
cache_get_field_content(rows, "pGetonDate", GetonDate);
format(str, sizeof(str), "%s\t\t\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_LIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return true;
}

Ne_nub
27.04.2017, 19:18
Теперь ничего не показывает, пишет что "Членов фракции в оффлайне нет", хотя я создал один аккаунт, вступил при этом во фракцию.

DeimoS
27.04.2017, 19:45
CMD:offmembers(playerid, params[])
{
if(PlayerInfo[playerid][pLeader] < 1) return false;
new stringer[128];
mysql_format(connects, stringer,sizeof(stringer), "SELECT Name, pGetonDate FROM `accounts` WHERE pMember = '%i'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, stringer, true, "OffMembers", "d", playerid);
return true;
}


publics: OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\tПоследняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME],
GetonDate[128],
str[46],
full,
giveplayerid;
while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
sscanf(Names, "r", giveplayerid);
if(giveplayerid != INVALID_PLAYER_ID)
continue;
cache_get_field_content(rows, "pGetonDate", GetonDate);
format(str, sizeof(str), "%s\t\t\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_LIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return true;
}

Ne_nub
27.04.2017, 20:16
Вроде как работает, спасибо, но теперь не работает одна функция. Увольнение и понижения игрока во фракции.


case 9485://lohs
{
if(response)
{
SetPVarString(playerid, "Nemses", inputtext);
new offmembers[] = !"{FFFFFF}1. Уволить\n2. Повысить/понизить";
ShowPlayerDialog(playerid, 9486, DIALOG_STYLE_LIST, "Действия", offmembers, "Выбрать", "Отмена");
}
}
case 9486:
{
if(!response) return true;
switch(listitem)
{
case 0:
{
new playerName[MAX_PLAYER_NAME+1];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
new YCMDstr[100];
mysql_format(connects, YCMDstr, 128, "UPDATE `accounts` SET pMember = '0', pRank = '0' WHERE Name = '%e'", playerName);
mysql_function_query(connects, YCMDstr, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "Вы успешно уволили игрока");
}
case 1:
{
if(strval(inputtext) > 18 || strval(inputtext) < 0) return SendClientMessage(playerid,COLOR_GREY,"Не менее 0 и не более 18!");
{
ShowPlayerDialog(playerid, 9487, DIALOG_STYLE_INPUT, "Повысить/понизить игрока", "{FFFFFF}Введите желаемый ранг", "Принять", "Отмена");
}
}
}
}
case 9487:
{
if(response)
{
new kolvo = strval(inputtext),playerName[MAX_PLAYER_NAME+1];
new YCMDstr[100];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
mysql_format(connects, YCMDstr, 128, "UPDATE `accounts` SET pRank = '%i' WHERE Name = '%e'", kolvo, playerName);
mysql_function_query(connects, YCMDstr, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "Вы успешно повысили/понизили игрока");
}
}

wAx
27.04.2017, 21:21
не обновляются данные в бд или не работает сам диалог? Если проблема с mySQL, то просто прологируй запрос с помощью printf и посмотри какие данные там используются.

Ne_nub
27.04.2017, 21:55
Не обновляются данные в БД.

wAx
27.04.2017, 22:09
Не обновляются данные в БД.

логируй, большая вероятность неверных данных в условии или банальная ошибка в размере переменной когда тупо не помещается весь запрос. Выведи запрос в консоль, посмотри что сервер пытается отправить.

Ne_nub
28.04.2017, 09:36
Залогировал в консоле с помощью printf. Все работает, но данные опять-же не обновляются. Вот измененный код:


case 9485://lohs
{
if(response)
{
SetPVarString(playerid, "Nemses", inputtext);
new offmembers[] = !"{FFFFFF}1. Уволить\n2. Повысить/понизить";
ShowPlayerDialog(playerid, 9486, DIALOG_STYLE_LIST, "Действия", offmembers, "Выбрать", "Отмена");
print("Действия с игроком в оффлайне");
}
}
case 9486:
{
if(!response) return true;
switch(listitem)
{
case 0:
{
new playerName[MAX_PLAYER_NAME+1];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
new mysql[128];
mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pMember` = '0', `pRank` = '0' WHERE Name = '%s'", playerName);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "Вы успешно уволили игрока");
print("Увольнение игрока");
}
case 1:
{
if(strval(inputtext) > 18 || strval(inputtext) < 0) return SendClientMessage(playerid,COLOR_GREY,"Не менее 0 и не более 18!");
{
ShowPlayerDialog(playerid, 9487, DIALOG_STYLE_INPUT, "Повысить/понизить игрока", "{FFFFFF}Введите желаемый ранг", "Принять", "Отмена");
print("Заполнение строки 'Повышение/понижение игрока'");
}
}
}
}
case 9487:
{
if(response)
{
new kolvo = strval(inputtext),playerName[MAX_PLAYER_NAME+1];
new mysql[128];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pRank` = '%d' WHERE Name = '%s'", kolvo, playerName);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "Вы успешно повысили/понизили игрока");
print("Понижение игрока в ранге");
}
}

wAx
28.04.2017, 14:18
Не обновляются данные в БД.
Сказал прологировать ЗАПРОС в консоли, ты прологировал сам код...

После этой строчки

mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pMember` = '0', `pRank` = '0' WHERE `Name` = '%s'", playerName);
вставь

printf(mysql); и посмотри что выведет, если все данные верны, проверь mysql_log на наличие сообщений об ошибке, возможно столбец назван по другому

// вопрос на засыпку, зачем к MAX_PLAYER_NAME прибавлять 1? Разве символы в нике не считаются так-же с 0?

Ne_nub
28.04.2017, 14:55
Увольнение -
UPDATE `accounts` SET `pMember` = '0', `pRank` = '0' WHERE Name = 'Bot_Test (27/4/2017 18:'
Понижения/повышение игрока -
UPDATE `accounts` SET `pRank` = '0' WHERE Name = 'Bot_Test (27/4/2017 18:'

wAx
28.04.2017, 15:11
Bot_Test (27/4/2017 18: - ну это явно не требуемое имя игрока

Вообще странно что inputtext возвращает полностью строчку, когда я получал значение строки в диалоге, мне возвращало не целиком текст, а первый текст до пробела, но я использовал DIALOG_STYLE_TABLIST, попробуй использовать этот тип диалога, должно сработать.

Что-то вроде


while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
cache_get_field_content(rows, "pGetonDate", GetonDate);
if(cache_get_field_content_int(rows, "pOnline", connects) == 1001) format(str, sizeof(str), "%s\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_TABLIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");

Ne_nub
28.04.2017, 15:20
Пишет, что "DIALOG_STYLE_TABLIST" - это неизвестный символ.

SooBad
28.04.2017, 15:22
DIALOG_STYLE_TABLIST_HEADERS
Wiki (http://wiki.sa-mp.com/wiki/Dialog_Styles_RU)

Ne_nub
28.04.2017, 15:33
Так из-за чего эта ошибка с диалогом ?

wAx
28.04.2017, 15:42
напиши вместо DIALOG_STYLE_TABLIST цифру 4

DeimoS
28.04.2017, 16:47
Пишет, что "DIALOG_STYLE_TABLIST" - это неизвестный символ.

Обнови сервер до последней версии. Этот тип в 0.3.7 появился

Ne_nub
28.04.2017, 21:31
Сервер обновлен до последней версии. Пытался ставить этот тип диалога, не получалось, поставил DIALOG_STYLE_LIST. Теперь опять не отображаются игроки в оффлайне.

ziggi
28.04.2017, 21:39
Сервер обновлен до последней версии. Пытался ставить этот тип диалога, не получалось, поставил DIALOG_STYLE_LIST. Теперь опять не отображаются игроки в оффлайне.

Нужно обновить include файлы из архива с последней версией сервера.

Ne_nub
29.04.2017, 17:11
Обновил, диалог сработал, но как я и говорил, игроков не показывает.

DeimoS
29.04.2017, 17:16
Покажи весь код, который ты редактировал и который у тебя есть касаемо данного вопроса (и первого, где не показывало оффлайн игроков, и второго, где не увольняло), ибо тут уже что-то тебе насоветовали непойми-чего

Ne_nub
29.04.2017, 18:50
CMD:offmembers(playerid, params[])
{
if(PlayerInfo[playerid][pLeader] < 1) return false;
new stringer[128];
mysql_format(connects, stringer,sizeof(stringer), "SELECT Name, pGetonDate FROM `accounts` WHERE pMember = '%i'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, stringer, true, "OffMembers", "d", playerid);
return true;
}


publics:OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\t{AFAFAF}Последняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME],
GetonDate[128],
str[46],
full;
while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
cache_get_field_content(rows, "pGetonDate", GetonDate);
if(cache_get_field_content_int(rows, "pOnline", connects) == 1001) format(str, sizeof(str), "%s\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "* Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_TABLIST, "{FFFFFF}>> {FF9900}Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return true;
}


case 9485://lohs
{
if(response)
{
SetPVarString(playerid, "Nemses", inputtext);
new offmembers[] = !"{FFFFFF}1. Уволить\n2. Повысить/понизить";
ShowPlayerDialog(playerid, 9486, DIALOG_STYLE_LIST, "{FFFFFF}>> {FF9900}Действия", offmembers, "Выбрать", "Отмена");
}
}
case 9486:
{
if(!response) return true;
switch(listitem)
{
case 0:
{
new playerName[MAX_PLAYER_NAME+1];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
new mysql[128];
mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pMember` = '0', `pRank` = '0' WHERE Name = '%s'", playerName);
print(mysql);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "{7FB151}>> {FAEBD7}Вы успешно уволили игрока");
}
case 1:
{
if(strval(inputtext) > 18 || strval(inputtext) < 0) return SendClientMessage(playerid,COLOR_GREY,"* Не менее 0 и не более 18!");
{
ShowPlayerDialog(playerid, 9487, DIALOG_STYLE_INPUT, "{FFFFFF}>> {FF9900}Повысить/понизить игрока", "{FFFFFF}Введите желаемый ранг", "Принять", "Отмена");
}
}
}
}
case 9487:
{
if(response)
{
new kolvo = strval(inputtext),playerName[MAX_PLAYER_NAME+1];
new mysql[128];
GetPVarString(playerid, "Nemses", playerName, MAX_PLAYER_NAME+1);
mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pRank` = '%d' WHERE Name = '%s'", kolvo, playerName);
print(mysql);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "{7FB151}>> {FAEBD7}Вы успешно повысили/понизили игрока");
}
}

DeimoS
29.04.2017, 19:27
Разве твой код похож на тот, что я кидал?




CMD:offmembers(playerid, params[])
{
if(PlayerInfo[playerid][pLeader] < 1) return false;
new stringer[128];
mysql_format(connects, stringer,sizeof(stringer), "SELECT Name, pGetonDate FROM `accounts` WHERE pMember = '%i'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, stringer, true, "OffMembers", "d", playerid);
return true;
}


publics: OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\tПоследняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME],
GetonDate[128],
str[46],
full,
giveplayerid;
while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
sscanf(Names, "r", giveplayerid);
if(giveplayerid != INVALID_PLAYER_ID)
continue;
cache_get_field_content(rows, "pGetonDate", GetonDate);
format(str, sizeof(str), "%s\t\t\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_LIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return true;
}

- - - Добавлено - - -

Пробуй

new offmembers_name[MAX_PLAYERS][MAX_PLAYER_NAME];


CMD:offmembers(playerid, params[])
{
if(PlayerInfo[playerid][pLeader] < 1) return false;
new stringer[128];
mysql_format(connects, stringer,sizeof(stringer), "SELECT Name, pGetonDate FROM `accounts` WHERE pMember = '%i'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, stringer, true, "OffMembers", "d", playerid);
return 1;
}


publics: OffMembers(playerid)
{
new rows, fields, string[1000];
string = "{AFAFAF}Логин\t\tПоследняя дата посещения{FFFFFF}\n\n";
cache_get_data(rows, fields);
if(rows)
{
new Names[MAX_PLAYER_NAME],
GetonDate[128],
str[46],
full,
giveplayerid;
while(--rows >= 0)
{
cache_get_field_content(rows, "Name", Names);
sscanf(Names, "r", giveplayerid);
if(giveplayerid != INVALID_PLAYER_ID)
continue;
cache_get_field_content(rows, "pGetonDate", GetonDate);
format(str, sizeof(str), "%s\t\t\t(%s)\n", Names, GetonDate);
strcat(string, str);
full++;
}
if(full == 0) SendClientMessage(playerid, COLOR_GREY, "Членов фракции в оффлайне нет");
else ShowPlayerDialog(playerid, 9485, DIALOG_STYLE_TABLIST, "Оффлайн члены фракции", string, "Выбрать", "Отмена");
}
return 1;
}


case 9485://lohs
{
if(!response) return 1;
format(offmembers_name[playerid], MAX_PLAYER_NAME, inputtext);
ShowPlayerDialog(playerid, 9486, DIALOG_STYLE_LIST, "{FFFFFF}>> {FF9900}Действия", "{FFFFFF}1. Уволить\n2. Повысить/понизить", "Выбрать", "Отмена");
return 1;
}
case 9486:
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
new mysql[128];
mysql_format(connects,mysql, sizeof(mysql), "UPDATE accounts SET pMember = 0, pRank = 0 WHERE Name = '%s'", offmembers_name[playerid]);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "{7FB151}>> {FAEBD7}Вы успешно уволили игрока");
}
case 1:
{
if(strval(inputtext) > 18 || strval(inputtext) < 0)
return SendClientMessage(playerid,COLOR_GREY,"* Не менее 0 и не более 18!");
ShowPlayerDialog(playerid, 9487, DIALOG_STYLE_INPUT, "{FFFFFF}>> {FF9900}Повысить/понизить игрока", "{FFFFFF}Введите желаемый ранг", "Принять", "Отмена");

}
}
return 1;
}
case 9487:
{
if(response)
{
new kolvo = strval(inputtext),
mysql[128];
mysql_format(connects,mysql, sizeof(mysql), "UPDATE `accounts` SET `pRank` = '%d' WHERE Name = '%s'", kolvo, offmembers_name[playerid]);
mysql_function_query(connects, mysql, false, "", "");
SendClientMessage(playerid, COLOR_WHITE, "{7FB151}>> {FAEBD7}Вы успешно повысили/понизили игрока");
}
return 1;
}
И да, работать будет только с DIALOG_STYLE_TABLIST. Иначе другой алгоритм нужен

Ne_nub
29.04.2017, 21:48
Теперь все работает, большое спасибо за помощь, сам бы наверное не смог решить данную проблему.