PDA

Просмотр полной версии : [Мануал] Anti Flood



Brendan
18.11.2014, 02:42
Антифлуд в чат.

Ко всем переменным:


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...
Одним словом ужас.

Brendan
18.11.2014, 13:27
Форматируем неформатируемый текст при коннекте в 256 ячеек, юзаем таймер, хотя имеем gettickcount и gettime...
Одним словом ужас.

Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.

DeimoS
18.11.2014, 13:33
Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.

Он оценивает твои темы, что не так? Не пиши говнокод и никто к тебе приставать не будет
Пы.Сы.: Макрос зачётный

#if defined SendClientMessage SCM
#endif

Seregamil
18.11.2014, 15:24
Все ли ты мои темы за*рал? Я вижу тебе заняться просто нечем..
Может полезным чем нибудь займёшься.

Ты мне даром не нужен. А твой код, повторюсь, гавно.

[ForD]
18.11.2014, 21:13
И правда,тебе говорят как можно сделать лучше,слушал бы а не срался.

L0ndl3m
18.11.2014, 21:39
Действительно, антифлуд можно сделать более простым способом, например таким:


new
server_tick = GetTickCount();

if(GetPVarInt(playerid, "player_flood_tick") > server_tick)
return !SendClientMessage(playerid, -1, "Не флудите.");

SetPVarInt(playerid, "player_flood_tick", server_tick + 1000);


Также много лишних массивов, переменных. Интервал, например, можно было взять за константу. Неизвестные названия функций, бесполезный макрос.

К сожалению тема для одобрения не подходит.

wAx
22.11.2014, 13:06
Автор, замечания вынесены. Ждем твою реакцию на свой код.

#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());
работает нормально.

L0ndl3m
02.12.2014, 20:58
а зачем тут переменная?


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 два раза вместо одного.