PDA

Просмотр полной версии : [Вопрос] проблема с ackslimit



wea
03.02.2016, 13:16
Всем привет.
Вот проблема с системой рекламы суть в том что когда в обьявление водишь мат то в логах появляется много

client exceeded 'ackslimit' 127.0.0.1:64358 (4012) Limit: 3000/sec
Ну как бы ackslimit для меня не хорошо :D и не хочу его увеличивать проблемы я выявил и вот она ниже


static const stock ArchiNeMateritsa[33][33] = {"***","сука","суки","ебаные","пизда", "тварь","пидор","пидар","пидорас","блять", "блядь","долбаёб" ,"долбаеб","гандон","уёбок","уебок","пиздец","ебало", "пидарас", "еблан","ебать","охуеть","ебаться","чмошник","сучара","казлина",".ru","****","даун","пнх","пидорасы","пидр","хуесосы"};


case 5388:
{
if(!response) return SPD(playerid, 5387, DIALOG_STYLE_LIST, "{FF6F00}>> Управление баннером", "{FFFFFF}Выберите одно из списка меню:\n- Редактировать баннер\n- Удалить баннер", "Принять", "Отмена");
for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1) for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
break;
}
}
if(strval(inputtext) > 144 || !Reklama(playerid, inputtext))
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
return 1;
}
strmid(BannerInfo[Player_Number_Banner[playerid]-1][tText], inputtext, 0, strlen(inputtext), 255);
new string[144+8];
format(string,sizeof(string),"{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SetDynamicObjectMaterialText(addnews[Player_Number_Banner[playerid]-1], 0, string, 90, "Impact", 24, 0, -32256, -16777216, 1);
new mysql_string[100];
mysql_format(connects, mysql_string, 100, "UPDATE `banners` SET `tText` = '%s' WHERE `tID` = '%d'", inputtext, Player_Number_Banner[playerid]);
mysql_empty(connects, mysql_string);
return 1;
}


case 5315:
{
if(!response)
{
new string[200];
format(string, 200, "{FFFFFF}Баннер №%d\nДанный баннер свободен!\n\nДля аренды баннера укажите количество дней для аренды [1-7]", Player_Number_Banner[playerid]);
SPD(playerid, 5314, DIALOG_STYLE_INPUT, "{FF6F00}>> Аренда баннера [1]", string, "Далее", "Отмена");
return 1;
}
for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1) for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
SPD(playerid, 5315, DIALOG_STYLE_INPUT, "{FF6F00}>> Аренда баннера [2]", "{FFFFFF}Введите текст для рекламы, чтобы перенести строку вниз, перед перенесущим словом поставьте знак ''\n''!\n\n* Примечание:\n- Текст не должен содержать матершинные слова!\n- Запрещено использование транслита!\n- Лидер организации в праве удалить Ваш баннер в случае несоблюдения правил!\n- Запрещено использовать больше 144 символов!", "Далее", "Назад");
break;
}
}
if(strval(inputtext) > 144) return SPD(playerid, 5315, DIALOG_STYLE_INPUT, "{FF6F00}>> Аренда баннера [2]", "{FFFFFF}Введите текст для рекламы, чтобы перенести строку вниз, перед перенесущим словом поставьте знак ''\n''!\n\n* Примечание:\n- Текст не должен содержать матершинные слова!\n- Запрещено использование транслита!\n- Лидер организации в праве удалить Ваш баннер в случае несоблюдения правил!\n- Запрещено использовать больше 144 символов!", "Далее", "Назад");
if(!Reklama(playerid, inputtext)) return SPD(playerid, 5315, DIALOG_STYLE_INPUT, "{FF6F00}>> Аренда баннера [2]", "{FFFFFF}Введите текст для рекламы, чтобы перенести строку вниз, перед перенесущим словом поставьте знак ''\n''!\n\n* Примечание:\n- Текст не должен содержать матершинные слова!\n- Запрещено использование транслита!\n- Лидер организации в праве удалить Ваш баннер в случае несоблюдения правил!\n- Запрещено использовать больше 144 символов!", "Далее", "Назад");
SetPVarString(playerid, #banner_text, inputtext);
new string[200];
format(string, 200, "{FFFFFF}Вы успешно заполнили все поля для аренды, осталась лишь оплата!\nПо расчётам Вы должны за аренду {FF6F00}%d${FFFFFF}.\nВы согласны?",strlen(inputtext)*150);
SPD(playerid, 5316, DIALOG_STYLE_MSGBOX, "{FF6F00}>> Аренда баннера [3]", string, "Далее", "Назад");
return 1;
}
Как исправить можно?
только чтобы не увеличивать ackslimit

BadPawn
03.02.2016, 19:06
static const stock

ново-непонятное что-то происходит :)

ziggi
03.02.2016, 21:25
Очевидно, что проблема здесь:


for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1)
for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
break;
}
}


Можно использовать goto (не рекомендую):


for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1)
for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
goto loop_exit;
}
}
loop_exit:


Можно с помощью переменной (не очень красиво):


new bool:is_loop_end;

for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1)
{
for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
is_loop_end = true;
break;
}
if (is_loop_end)
{
break;
}
}
if (is_loop_end)
{
break;
}
}


Наилучшим вариантом будет выделить этот код в функцию:


stock FindBadWords(inputtext[])
{
for(new s; s < sizeof(ArchiNeMateritsa); s++)
{
new pos;
while((pos = strfind(inputtext,ArchiNeMateritsa[s],true)) != -1)
{
for(new i = pos, j = pos + strlen(ArchiNeMateritsa[s]); i < j; i++)
{
return 1;
}
}
}

return 0;
}

if (FindBadWords(inputtext))
{
new string[144+8];
format(string, 144+8, "{FFFFFF}%s",BannerInfo[Player_Number_Banner[playerid]-1][tText]);
SPD(playerid, 5387, DIALOG_STYLE_INPUT, "{FF6F00}>> Редактирование баннера", string, "Принять", "Отмена");
}





static const stock

ново-непонятное что-то происходит :)

Что именно непонятно? static ограничивает область видимости, const делает переменную константой, а со stock не выводится предупреждение о неиспользовании.