PDA

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



Brendan
03.01.2015, 07:45
Доброго времени суток, форумчане.
Вот предоставлю античит на GodMod.

К инклудам:


#include <YSF>


Ко всем переменным, добавим:



new
ShotsTotal[MAX_PLAYERS],
ShotsDoneEffect[MAX_PLAYERS]
;


Далее в каблек public OnPlayerTakeDamage, добавим:



if(!IsPlayerPaused(playerid)) ShotsDoneEffect[playerid]++;
else { ShotsTotal[playerid] = 0; ShotsDoneEffect[playerid] = 0; }


Далее в калбек public OnPlayerWeaponShot, добавим:



if(hittype == BULLET_HIT_TYPE_PLAYER)
{
if(!IsPlayerPaused(hitid))
{
ShotsTotal[hitid]++;
if(ShotsTotal[hitid] - ShotsDoneEffect[hitid] > 1)
{
Kick(hitid); //cheater
}
}
}


Ну и последнее, в калбек public OnPlayerDisconnect, добавим 2 строчки:



ShotsTotal[playerid] = 0;
ShotsDoneEffect[playerid] = 0;


И вот на этом всё! Античит готов. Пользуйтесь.

Материал скопирован с forum.sa-mp.com
Источник - http://forum.sa-mp.com/showthread.php?t=553615

gangzone.ini
03.01.2015, 13:23
IsPlayerPaused ?

Brendan
03.01.2015, 15:15
IsPlayerPaused ?

Проверка на паузу, использует ли ESC

L0ndl3m
03.01.2015, 15:16
Проверка на паузу, использует ли ESC
И что с этого? Это не стандартная функция.

Pe4en9
03.01.2015, 16:07
Материал скопирован с forum.sa-mp.com
Сама тема - http://forum.sa-mp.com/showthread.php?t=553615
Кипоп мафака - https://github.com/Anuris/-SA-MP-Anti-GodMode/blob/master/AntiGM.pwn

Maranzalla
03.01.2015, 16:23
видимо IsPlayerPaused где-то в #include <YSF>, который автор кстати забыл указать

Brendan
03.01.2015, 20:22
Всё подправил тему. Источника указал.
Я же не писал, что я автор)

Pe4en9
03.01.2015, 23:13
надо бы указывать.

L0ndl3m
05.01.2015, 01:18
ТС, придумайте что-нибудь на счёт функции / макроса IsPlayerPaused. Из-за небольшой системы загружать всю библиотеку очень не логично.

Хорошо. На примере покажу как можно это реализовать.

В OnPlayerUpdate устанавливаем значение переменной игрока в тиках:

SetPVarInt(playerid, "player_afk_time", GetTickCount());

Данный паблик вызывается только тогда, когда игрок не находится в AFK. То есть, если игрок ушёл в AFK, мы замерили то время, когда он в последний раз был AFK.

Далее просто проверяем проверкой, сколько времени прошло с начала AFK игрока данным способом:


if(GetTickCount() - GetPVarInt(playerid, "player_afk_time") > 3000) {
// игрок находится в AFK
}

Почему проверка на больше чем 3000 милисекунд ( а это 3 секунды )? Дело в том, что при стате игрока: PLAYER_STATE_WASTED сервер считает, игрок в AFK, из-за того что он не заспавнился.

Далее, если не особо хочется писать длинный код на проверку, показанную выше можно сделать полезный макрос ( в данном случае назовём его также, как в Вашем мануале ), который мы добавим в начало скрипта:


#define IsPlayerPaused(%0) \
GetTickCount() - GetPVarInt(%0, "player_afk_time") > 3000


И используем в данном случае также как и в Вашем мануале:


if (IsPlayerPaused(playerid))
// игрок находится в AFK

Вот мы и избавились от подключения лишней библиотеки. :mosking:

Brendan
09.01.2015, 20:13
ТС, придумайте что-нибудь на счёт функции / макроса IsPlayerPaused. Из-за небольшой системы загружать всю библиотеку очень не логично.

Хорошо. На примере покажу как можно это реализовать.

В OnPlayerUpdate устанавливаем значение переменной игрока в тиках:

SetPVarInt(playerid, "player_afk_time", GetTickCount());

Данный паблик вызывается только тогда, когда игрок не находится в AFK. То есть, если игрок ушёл в AFK, мы замерили то время, когда он в последний раз был AFK.

Далее просто проверяем проверкой, сколько времени прошло с начала AFK игрока данным способом:


if(GetTickCount() - GetPVarInt(playerid, "player_afk_time") > 3000) {
// игрок находится в AFK
}

Почему проверка на больше чем 3000 милисекунд ( а это 3 секунды )? Дело в том, что при стате игрока: PLAYER_STATE_WASTED сервер считает, игрок в AFK, из-за того что он не заспавнился.

Далее, если не особо хочется писать длинный код на проверку, показанную выше можно сделать полезный макрос ( в данном случае назовём его также, как в Вашем мануале ), который мы добавим в начало скрипта:


#define IsPlayerPaused(%0) \
GetTickCount() - GetPVarInt(%0, "player_afk_time") > 3000


И используем в данном случае также как и в Вашем мануале:


if (IsPlayerPaused(playerid))
// игрок находится в AFK

Вот мы и избавились от подключения лишней библиотеки. :mosking:

Отлично)

L0ndl3m
09.01.2015, 22:01
Мануал-то исправлять будете?

#Vito
11.01.2015, 00:35
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float: vida, Float: armadura, Float: dmg;

GetPlayerArmour(damagedid, armadura);
GetPlayerHealth(damagedid, vida);

if(armadura > 0)
{
if(amount > armadura)
{
dmg = amount - armadura;
vida = vida - dmg;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, vida);
return 1;
}
armadura = armadura - amount;
SetPlayerArmour(damagedid, armadura);
}
if(armadura < 1)
{
vida = vida - amount;
SetPlayerHealth(damagedid, vida);
}
return true;
}
разве так не легче?

Flime
11.01.2015, 15:43
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float: vida, Float: armadura, Float: dmg;

GetPlayerArmour(damagedid, armadura);
GetPlayerHealth(damagedid, vida);

if(armadura > 0)
{
if(amount > armadura)
{
dmg = amount - armadura;
vida = vida - dmg;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, vida);
return 1;
}
armadura = armadura - amount;
SetPlayerArmour(damagedid, armadura);
}
if(armadura < 1)
{
vida = vida - amount;
SetPlayerHealth(damagedid, vida);
}
return true;
}
разве так не легче?

На сколько знаю, есть чит, который будет бесконечно убивать всех на сервере.
+ при использовании некоторых ГМ(ов) OnPlayerGiveDamage не вызывается.

Maranzalla
14.01.2015, 03:29
На сколько знаю, есть чит, который будет бесконечно убивать всех на сервере.
+ при использовании некоторых ГМ(ов) OnPlayerGiveDamage не вызывается.

да есть такой чит

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


ТС, придумайте что-нибудь на счёт функции / макроса IsPlayerPaused. Из-за небольшой системы загружать всю библиотеку очень не логично.

Хорошо. На примере покажу как можно это реализовать.

В OnPlayerUpdate устанавливаем значение переменной игрока в тиках:

SetPVarInt(playerid, "player_afk_time", GetTickCount());

Данный паблик вызывается только тогда, когда игрок не находится в AFK. То есть, если игрок ушёл в AFK, мы замерили то время, когда он в последний раз был AFK.

Далее просто проверяем проверкой, сколько времени прошло с начала AFK игрока данным способом:


if(GetTickCount() - GetPVarInt(playerid, "player_afk_time") > 3000) {
// игрок находится в AFK
}

Почему проверка на больше чем 3000 милисекунд ( а это 3 секунды )? Дело в том, что при стате игрока: PLAYER_STATE_WASTED сервер считает, игрок в AFK, из-за того что он не заспавнился.

Далее, если не особо хочется писать длинный код на проверку, показанную выше можно сделать полезный макрос ( в данном случае назовём его также, как в Вашем мануале ), который мы добавим в начало скрипта:


#define IsPlayerPaused(%0) \
GetTickCount() - GetPVarInt(%0, "player_afk_time") > 3000


И используем в данном случае также как и в Вашем мануале:


if (IsPlayerPaused(playerid))
// игрок находится в AFK

Вот мы и избавились от подключения лишней библиотеки. :mosking:

почему именно 3000?

L0ndl3m
14.01.2015, 17:07
Читать внимательнее надо было, я писал почему.

Maranzalla
17.01.2015, 02:29
кароче чушь с ложными срабатываниями - х3 почему но на практике убедился в этом

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


Читать внимательнее надо было, я писал почему.

Почему проверка на больше чем 3000 милисекунд ( а это 3 секунды )? Дело в том, что при стате игрока: PLAYER_STATE_WASTED сервер считает, игрок в AFK, из-за того что он не заспавнился.

вообщето я не спрашиваю почему больше 3 секунд я спрашиваю почему не меньше 3сек почему не 1200 миллисекунд или 500?читай внимательно вначале сам!