Создание Античита
#21

Да я тож думал но никак не выходит, без казино можно прожить, а деньги за трюки чет не охото отключать стант мод. Пришлось анти-чит на оружия только сделать
Reply
#22

про спидхак... сделать логирование типа если скорость игрока в машине больше определенного значения (инфернуса с азотом) то запись вносится в лог... если таких записей несколько в них казаны слабые машины, то видимо ясно что это спидхак...

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

какие еще бывают читы?)
Reply
#23

чит оружия - например миниган:
просто проверять оружие игрока в слоте 7 (если там базука или миниган) - банан)
Reply
#24

аирбреак еще и еще что то
Reply
#25

Quote:
Originally Posted by Serafim_sd
про спидхак... сделать логирование типа если скорость игрока в машине больше определенного значения (инфернуса с азотом) то запись вносится в лог... если таких записей несколько в них казаны слабые машины, то видимо ясно что это спидхак...
а не думал что на машине можно спрыгнуть с той же самой горы, и скорость полёта будет больше чем при езде с азотом.
Reply
#26

насчет полетов на тачке хочу заметить - мона проверять угол горизонта от какой-то предыдущей точки до новой точки перемещения, обычно тачки не могут взлетать вверх, стоит учесть, что есть крутые горки, так что угол горизонта при перемещении выше 45-60 градусов может считаться читом. Т.е. если с места взлетит тачка вверх, это чит, так как угол горизонта при перемещение будет 90 градусов

спидхак - мона для каждой тачи подсчитать макс скорось, записать это все в массив и проверять с учетом установленного NOS - только, если угол перемещения более менее ближе к нулю. К примеру при падении просто вниз, угол перемещения равен -90 градусов.
Reply
#27

Появилась замечательная функция GetPlayerVelocity. Насколько я понял и проверил, она определяет на сколько перемещается игрок по координатам x,y,z.
Reply
#28

дада, без нее раньше было трудновато ваще определить реальную скорость, т.к. был нужен таймер и 2 точки перемещения для расчетов.

кста, есь еще такая вещь как законный телепорт, его часто античит может принять за спидхак
Reply
#29

С этим всё сложно, в MTA например Esc без остановки игры, в SA-MP он останавливает игру. Нужны "официальные" Callback'и, например OnPlayerStunt(playerid, moneyget, Float:degrees) (и ещё все переменные прыжка, время, расстояние и т.д), OnPlayerTeleportByMap(playerid, Floatldx, Floatldy, Floatldz, Float:newx, Float:newy, Float:newz) и функции GetPlayerGameSpeed(playerid)/SetPlayerGameSpeed(playerid, Floatpeed).
Reply
#30

Quote:
Originally Posted by MX_Master
может кто может и лучше, и меньше написать, не знаю, мой античит на деНги такой. НЕПРОВЕРЕНО ! (:

Код:
//
// вставить в начало мода
//

stock playerMoney[MAX_PLAYERS];

stock ac_GivePlayerMoney ( playerid, money )
{
	playerMoney[playerid] += money;
	
	ResetPlayerMoney(playerid);
	GivePlayerMoney( playerid, playerMoney[playerid] );
}

stock ac_ResetPlayerMoney ( playerid )
{
	playerMoney[playerid] = 0;
	ResetPlayerMoney(playerid);
}

stock ac_GetPlayerMoney ( playerid )
{
	return playerMoney[playerid];
}

forward updatePlayersMoney();
public updatePlayersMoney()
{
	for ( new i = 0; i < MAX_PLAYERS; i++ )
		if ( IsPlayerConnected(i) )
		{
			ResetPlayerMoney(i);
			GivePlayerMoney( i, playerMoney[i] );
		}
}

#define GivePlayerMoney ac_GivePlayerMoney
#define ResetPlayerMoney ac_ResetPlayerMoney
#define GetPlayerMoney ac_GetPlayerMoney




public OnGameModeInit ()
{
	// каждые 10 сек каждому онлайн игроку будет выставлено его
	// реальное кол-во денег, которое хранится на сервере
	SetTimer( "updatePlayersMoney", 10000, 1 );

	return 1;
}
При тесте обнуляет все деньги, даже честно заработанные, может кто знает в чем ошибка?
Reply
#31

На вид вроде все верно...

pawn Код:
#define GivePlayerMoney ac_GivePlayerMoney
#define ResetPlayerMoney ac_ResetPlayerMoney
#define GetPlayerMoney ac_GetPlayerMoney
Эти дефайны у тебя до или после UpdatePlayersMoney стоят?
Reply
#32

После как показано в самом примере.
Reply
#33

код в студию, иначе на кофейной гуще долго можно гадать

это локальная мини версия античита на бапки, так что, если какой-то фс тоже рулит баблом на серве, все его действия мод будет считать недействительными. да и ваще, как я грил, это вариант серверных денежек вместо клиентских
Reply
#34

MX_Master, специально только что для проверки прописал код в самый стандартный лвдм, там он также отнимает даже те деньги, которые прописаны на спавн, не говоря уже о стант бонусе и пиратском корабле.
Reply
#35

Обратите внимание на строки 79-120 и 931-933 в коде LVDM, который я только что изменил и проверил. Если игроку выставить деньги с помощью любой админки, мод вернет все назад не позднее 10 сек спустя. А это значит, что все прекрасно работает для именно моего варианта серверных денех.


Quote:
Originally Posted by предыдущий текст сообщения
а я вроде и написал в конце кода НЕПРОВЕРНО, хотя это слово почему-то все упустили (: я могу тока идею и примерный вариант подсказать, а если уж не получается у конечного скриптера подтесать скрипт, это печально

стант бонус это ваще неконтролируемая клиентская добавка к бабкам, которую сервер не отслеживает ни коим образом
Reply
#36

Да, работает на 5+, но есть последний баг - не реально потратить деньги, точнее тратишь, но через 10 сек, снова появляется столько, сколько было до покупки. Это реально исправить?
Reply
#37

Тогда нужно добавить кое-какое условие:

pawn Код:
if (GetPlayerMoney(i) > playerMoney[i])
{
  ResetPlayerMoney(i);
  GivePlayerMoney( i, playerMoney[i] );
}
И кстати для таких вот циклов:

pawn Код:
for (new i; i < MAX_PLAYERS; i++)
очень советую использовать эту библиотеку:

pawn Код:
foreach (Player, i)
{
  if (GetPlayerMoney(i) > playerMoney[i])
  {
    ResetPlayerMoney(i);
    GivePlayerMoney( i, playerMoney[i] );
  }
}
Не только удобнее, но и эффективнее в разы.
Reply
#38

К сожалению, не помогло, деньги все также продолжают возвращаться. А также когда снимаешь их со счета в банке они через 10 сек. испаряются.
Reply
#39

Хмм, нужно еще добавить ветку else и понижать в ней деньги, если их меньше чем в массиве =/

Примерно так:

pawn Код:
public UpdatePlayersMoney()
{
    new
        money;
    foreach (Player, i)
    {
        money = GetPlayerMoney(i);
        if (money > playerMoney[i])
        {
            ResetPlayerMoney(i);
            GivePlayerMoney(i, playerMoney[i]);
        }
        else if (money < playerMoney[i])
        {
            ac_ResetPlayerMoney(i);
            ac_GivePlayerMoney(i, money);
        }
    }
    return 1;
}
Reply
#40

Что то я с этой библиотекой не разберусь, все время пишет что не найдено forach, хотя он уже есть и используется.
А без него также остается эта проблема с возвращением денег....

P.S. MX_Master, посоветуешь что-нибудь?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)