PDA

Просмотр полной версии : [Вопрос] Крашит список сотрудников



$continue$
15.08.2014, 03:30
Всем привет, уважаемый посетители Pro Pawn!
И у меня опять проблема, крашит код при онлайне ~ 50 (краш детект). Ошибку не могу показать, так как команда за коментирована была после краша. Кому не сложно, предлагает оптимизированный варианты, скорее всего крашит иза того что в диалог не все влазят.


CMD:find(playerid, params[])
{
if(!GetPVarInt(playerid, "Pvar_Loggin")) return SendClientMessage(playerid, COLOR_GRAD, "Необходимо залогиниться!");
if(CMD_Flood[playerid] == 1) return SendClientMessage(playerid, COLOR_GRAD, "Не флудите!");
new listitems[512],string[1000];
new teamnumber = BandFrak[playerid];
foreach(new i: Player)
{
if(BandFrak[i] == teamnumber)
{
format(string, sizeof(string), ""W"Nick: %s | Убийств: %d | Смертей: %d | Ранг: %s\n",NAME_REG[i], PlayerInfo[i][pKills],PlayerInfo[i][pDeath],RankName(i));
strcat(listitems,string,1000);
ShowPlayerDialog(playerid, 3000, DIALOG_STYLE_MSGBOX, "{ffcf00}Члены организации онлайн", listitems, "Закрыть", "");
CMD_Flood[playerid] = 1;
SetTimerEx("@_Anti_Flood", 2000, true, "i", playerid);
}
}
SendClientMessage(playerid, COLOR_GRAD, "Команда убрана на время тестов!");
return 1;
}

Заранее всем, спасибо! :)

L0ndl3m
15.08.2014, 18:06
Вставьте в main или в OnGameModeInit:

printf("Уровень дебаггинга: %i", debug);
И запустите мод.

Если число равно нулю, подключите crashdetect: Тык (http://pro-pawn.ru/showthread.php?2991).
Если нет, - показывайте логи.

$continue$
15.08.2014, 22:46
Вставьте в main или в OnGameModeInit:

printf("Уровень дебаггинга: %i", debug);
И запустите мод.

Если число равно нулю, подключите crashdetect: Тык (http://pro-pawn.ru/showthread.php?2991).
Если нет, - показывайте логи.
Во общем, там ошибка выход за пределы массива. Не хочу подключать щяс онлайна 50 нету...
Может свой вариант предложите?

L0ndl3m
15.08.2014, 23:29
Во общем, там ошибка выход за пределы массива. Не хочу подключать щяс онлайна 50 нету...
Может свой вариант предложите?
Какой ещё вариант? Вы же сказали, что выход за пределы массива, получите строку, которая вызывает данную проблему, и нам кидайте, в эту тему.

Hidden
17.08.2014, 01:07
format(string, sizeof(string), ""W"Nick: %s | Убийств: %d | Смертей: %d | Ранг: %s\n",NAME_REG[i], PlayerInfo[i][pKills],PlayerInfo[i][pDeath],RankName(i));
strcat(listitems,string,1000);

Вы strcat неверно используете. Вы информацию об игроке записываете в string (format), и потом эту информацию записываете в listitems (strcat), притом что размер listitems меньше размера string.
В общем, вместо new listitems[512],string[1000]; сделайте new listitems[1000], string[43+MAX_PLAYER_NAME+40];
Либо, на мой взгляд, выводите не диалогом, а в чат, с помощью старой доброй SendClientMessage.

DeimoS
17.08.2014, 11:01
Команда сама по себе неверно построена.

CMD:find(playerid, params[])
{
if(!GetPVarInt(playerid, "Pvar_Loggin")) return SendClientMessage(playerid, COLOR_GRAD, "Необходимо залогиниться!");
if(CMD_Flood[playerid] == 1) return SendClientMessage(playerid, COLOR_GRAD, "Не флудите!");
new string[2048];
new teamnumber = BandFrak[playerid];
foreach(new i: Player)
{
if(BandFrak[i] != teamnumber) continue;
format(string, sizeof(string), "%s"W"Nick: %s | Убийств: %d | Смертей: %d | Ранг: %s\n",string,
NAME_REG[i],
PlayerInfo[i][pKills],
PlayerInfo[i][pDeath],
RankName(i));
}
ShowPlayerDialog(playerid, 3000, DIALOG_STYLE_MSGBOX, "{ffcf00}Члены организации онлайн", listitems, "Закрыть", "");
CMD_Flood[playerid] = 1;
SetTimerEx("@_Anti_Flood", 2000, true, "i", playerid);
return 1;
}