Просмотр полной версии : [Мануал] Anti Flood
Антифлуд в чат.
Ко всем переменным:
new IsMessageSent[MAX_PLAYERS];
new interval = 2;
В конец макросов:
#if defined SendClientMessage SCM
#endif
В public OnPlayerConnect:
new conn[256];
IsMessageSent[playerid] = 0;
format(conn,sizeof(conn),"Anti-Flood активирован",interval);
SCM(playerid,0x33AA33AA,conn);
В public OnPlayerText:
if(IsMessageSent[playerid] == 1)
{
SCM(playerid, 0x4682B4AA, "Не флуди!");
return false;
}
else
{
IsMessageSent[playerid] = 1;
SetTimerEx("UnMutedX",interval*1000,0,"d",playerid);
return true;
}
Создадим колбек:
forward UnMutedX(playerid);
public UnMutedX(playerid)
{
IsMessageSent[playerid] = 0;
return true;
}
На этом всё. Спасибо за просмотр!
Seregamil
18.11.2014, 05:43
Форматируем неформатируемый текст при коннекте в 256 ячеек, юзаем таймер, хотя имеем gettickcount и gettime...
Одним словом ужас.
Форматируем неформатируемый текст при коннекте в 256 ячеек, юзаем таймер, хотя имеем gettickcount и gettime...
Одним словом ужас.
Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.
Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.
Он оценивает твои темы, что не так? Не пиши говнокод и никто к тебе приставать не будет
Пы.Сы.: Макрос зачётный
#if defined SendClientMessage SCM
#endif
Seregamil
18.11.2014, 15:24
Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.
Ты мне даром не нужен. А твой код, повторюсь, гавно.
И правда,тебе говорят как можно сделать лучше,слушал бы а не срался.
Действительно, антифлуд можно сделать более простым способом, например таким:
new
server_tick = GetTickCount();
if(GetPVarInt(playerid, "player_flood_tick") > server_tick)
return !SendClientMessage(playerid, -1, "Не флудите.");
SetPVarInt(playerid, "player_flood_tick", server_tick + 1000);
Также много лишних массивов, переменных. Интервал, например, можно было взять за константу. Неизвестные названия функций, бесполезный макрос.
К сожалению тема для одобрения не подходит.
Автор, замечания вынесены. Ждем твою реакцию на свой код.
#Gabriel
22.11.2014, 19:28
На PVar не мог что ли реализовать?
Mr.DeViLsS
02.12.2014, 19:16
Действительно, антифлуд можно сделать более простым способом, например таким:
new
server_tick = GetTickCount();
if(GetPVarInt(playerid, "player_flood_tick") > server_tick)
return !SendClientMessage(playerid, -1, "Не флудите.");
SetPVarInt(playerid, "player_flood_tick", server_tick + 1000);
а зачем тут переменная?
if((gettime() - GetPVarInt(playerid, #floodChat)) < 3) return !SendClientMessage(playerid, -1, "Не флудите.");
SetPVarInt(playerid, #floodChat, gettime());
работает нормально.
а зачем тут переменная?
if((gettime() - GetPVarInt(playerid, #floodChat)) < 3) return !SendClientMessage(playerid, -1, "Не флудите.");
SetPVarInt(playerid, #floodChat, gettime());
работает нормально.
Ещё один...
зачем создовать p_veh_id?
if(GetPlayerVehicleID(playerid) == 0) return SendClientMessage(playerid, -1, "Вы не в транспорте.");
Предлагаете вызывать функцию GetPlayerVehicleID два раза подряд?
а почему бы и нет?
Мне тут надо купить два литра молока... Сбегай, пожалуйста. Только ты возьми один, принеси домой и потом снова в тот же магазин сходи за вторым. Тебе ведь без разницы? :crazy:
Почитайте, особенно пост Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)'а, если не понимаете о чём речь.
Только в данном случае вы используете функцию gettime два раза вместо одного.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot