PDA

Просмотр полной версии : [Вопрос] Как сделать что бы не флудило.



Kenny_Dalglish
28.05.2014, 17:05
Как сделать что бы не флудило Обнаружено использование чит-программ (#Rapid)
Данный код ставиться в OnPlayerWeaponShot

if(weaponid != 38)
{
if((gettime() - shotTime[playerid]) < 1) shot[playerid] += 1;
else shot[playerid] = 0;
if(shot[playerid] > 10) SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"), KickNew(playerid);
shotTime[playerid] = gettime();
}

L0ndl3m
28.05.2014, 18:41
new
server_tick = GetTickCount()
;

if(weaponid != 38 && GetPVarInt(playerid, "StopFlood") < server_tick)
{
if((gettime() - shotTime[playerid]) < 1)
shot[playerid] += 1;
else
shot[playerid] = 0;

if(shot[playerid] > 10)
SendClientMessage(playerid, -1, "Обнаружено использование чит-программ {ff0000}(#Rapid)"),
SetPVarInt(playerid, "StopFlood", server_tick + 10000),
KickNew(playerid);

shotTime[playerid] = gettime();
}


10000 (10 секунд) - это время через которое игрок снова увидит сообщение, если значение shot[playerid] больше чем 10.

Kenny_Dalglish
28.05.2014, 19:06
new
server_tick = GetTickCount()
;

if(weaponid != 38 && GetPVarInt(playerid, "StopFlood") < server_tick)
{
if((gettime() - shotTime[playerid]) < 1)
shot[playerid] += 1;
else
shot[playerid] = 0;

if(shot[playerid] > 10)
SendClientMessage(playerid, -1, "Обнаружено использование чит-программ {ff0000}(#Rapid)"),
SetPVarInt(playerid, "StopFlood", server_tick + 10000),
KickNew(playerid);

shotTime[playerid] = gettime();
}


10000 (10 секунд) - это время через которое игрок снова увидит сообщение, если значение shot[playerid] больше чем 10.
Сообщение - не доставляться вообще, и теперь если даже без рапида все рао кикнет.

DeimoS
29.05.2014, 15:27
if(weaponid != 38 && gettime() >= shotTime[playerid]
{
if((gettime() - (shotTime[playerid]-30)) < 1) shot[playerid] += 1;//30 - число секунд, после которых проверка вновь сработает (зависит от значения ниже)
else shot[playerid] = 0;
if(shot[playerid] > 10) SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"), KickNew(playerid);
shotTime[playerid] = gettime()+30;//30 - число секунд, после которых проверка вновь сработает
}

Kenny_Dalglish
29.05.2014, 15:57
if(weaponid != 38 && gettime() >= shotTime[playerid]
{
if((gettime() - (shotTime[playerid]-30)) < 1) shot[playerid] += 1;//30 - число секунд, после которых проверка вновь сработает (зависит от значения ниже)
else shot[playerid] = 0;
if(shot[playerid] > 10) SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"), KickNew(playerid);
shotTime[playerid] = gettime()+30;//30 - число секунд, после которых проверка вновь сработает
}

Вообще не срабатывает код.

DeimoS
29.05.2014, 16:15
Эмм, скобку то поставить сами догадались?
Ну и попробуйте вот

if(weaponid != 38 && gettime() >= shotTime[playerid])
{
if((gettime() - (shotTime[playerid]-30)) < 1 && shotTime[playerid]) shot[playerid] += 1;//30 - число секунд, после которых проверка вновь сработает (зависит от значения ниже)
else shot[playerid] = 0;
if(shot[playerid] > 10)
{
SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)");
KickNew(playerid);
return 1;
}
shotTime[playerid] = gettime()+30;//30 - число секунд, после которых проверка вновь сработает
}

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

Так, стоп... Чем вообще флудит? И что за KickNew?

Kenny_Dalglish
29.05.2014, 16:26
Эмм, скобку то поставить сами догадались?
Ну и попробуйте вот

if(weaponid != 38 && gettime() >= shotTime[playerid])
{
if((gettime() - (shotTime[playerid]-30)) < 1 && shotTime[playerid]) shot[playerid] += 1;//30 - число секунд, после которых проверка вновь сработает (зависит от значения ниже)
else shot[playerid] = 0;
if(shot[playerid] > 10)
{
SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)");
KickNew(playerid);
return 1;
}
shotTime[playerid] = gettime()+30;//30 - число секунд, после которых проверка вновь сработает
}

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

Так, стоп... Чем вообще флудит? И что за KickNew?

Скобку, поставил сам. Флудит сообщением SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"); т.к сам колэбек вызывается при каждом выстреле. KickNew это что бы успевало доставлять сообщение.


stock KickNew(playerid)
{
SetTimerEx("KickPublic", 1000, false, "d", playerid);
SetPVarInt(playerid, "kicked", 1);
return true;
}

forward KickPublic(playerid);
public KickPublic(playerid)
{
if(IsPlayerConnected(playerid))
{
ResetPlayerWeapons(playerid);
DeletePVar(playerid, "kicked");
Kick(playerid);
}
}

DeimoS
29.05.2014, 16:44
Во 1:

stock KickNew(playerid)
{
if(GetPVarInt(playerid, "kicked")) return 1;
SetTimerEx("KickPublic", 1000, false, "d", playerid);
SetPVarInt(playerid, "kicked", 1);
return true;
}

Во вторых:

if(weaponid != 38)
{
if(GetPVarInt(playerid, "kicked")) return 0;
if((gettime() - shotTime[playerid]) < 1) shot[playerid] += 1;
else shot[playerid] = 0;
if(shot[playerid] > 10) SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"), KickNew(playerid);
shotTime[playerid] = gettime();
}

Kenny_Dalglish
29.05.2014, 16:48
Во 1:

stock KickNew(playerid)
{
if(GetPVarInt(playerid, "kicked")) return 1;
SetTimerEx("KickPublic", 1000, false, "d", playerid);
SetPVarInt(playerid, "kicked", 1);
return true;
}

Во вторых:

if(weaponid != 38)
{
if(GetPVarInt(playerid, "kicked")) return 0;
if((gettime() - shotTime[playerid]) < 1) shot[playerid] += 1;
else shot[playerid] = 0;
if(shot[playerid] > 10) SendClientMessage(playerid,COLOR_ARPCVET228, "Обнаружено использование чит-программ {ff0000}(#Rapid)"), KickNew(playerid);
shotTime[playerid] = gettime();
}

Функция кика работает все нормально зачем мне ей переделывать?

DeimoS
29.05.2014, 16:50
Функция кика работает все нормально зачем мне ей переделывать?

Потому что если часто вызывать этот паблик - каждый раз будет создаваться таймер, не? -_-

Kenny_Dalglish
29.05.2014, 17:04
Вот сейчас не флудит но почему вызываеться 2 секунды хотя таймер на 1000?

DeimoS
29.05.2014, 17:11
Это у вас надо спрашивать. Вы же писали функцию кика.