tookieWookie
Ученик
Здравствуйте.
В общем, вчера пытался поставить анти-чит nex-ac, но нечего не вышло. Точнее, поставить я его поставил, он работает, всё хорошо.
Проблема в том, что кикает при выходе из интерьера, кикает админов, кикает при телепорта по метке на карте (от админа), id's читеров не заносятся в ППЧ(само собой). И ещё много каких мелких бед было, но благо, хватило ума настроить.
Задал вопрос создателю анти-чита: Как поставить проверку на админку, как сделать так, чтобы выводило id's читеров в ППЧ вместо кика, он мне ответил следующее:
1. Изменение наказания можно сделать через OnCheatDetected, предварительно его объявив в моде (см. раздел "Функции" в описании)
2. Кстати, если нужно просто отключить некоторые античиты для админов, можно воспользоваться EnableAntiCheatForPlayer
Вся суть проблемы: Я не могу настроить анти-чит, адаптировать его под свой мод так сказать что-ли..
Я вас очень прошу, помогите мне с кодом, знаний не хватает, а очень нужно
***Если вдруг нужно, дефолтные анти-читы, то-есть вшитые в мод.
Я бы даже заплатил..
В общем, вчера пытался поставить анти-чит nex-ac, но нечего не вышло. Точнее, поставить я его поставил, он работает, всё хорошо.
Проблема в том, что кикает при выходе из интерьера, кикает админов, кикает при телепорта по метке на карте (от админа), id's читеров не заносятся в ППЧ(само собой). И ещё много каких мелких бед было, но благо, хватило ума настроить.
Задал вопрос создателю анти-чита: Как поставить проверку на админку, как сделать так, чтобы выводило id's читеров в ППЧ вместо кика, он мне ответил следующее:
1. Изменение наказания можно сделать через OnCheatDetected, предварительно его объявив в моде (см. раздел "Функции" в описании)
2. Кстати, если нужно просто отключить некоторые античиты для админов, можно воспользоваться EnableAntiCheatForPlayer
PHP:
EnableAntiCheatForPlayer(playerid, acid, enable)
Используйте для включения/отключения одного из античитов для конкретного игрока
playerid - ID игрока, которому необходимо включить/отключить античит
acid - ID античита
enable - 1 для включения/0 для выключения
PHP:
public OnCheatDetected(playerid, ip_address[], type, code)
Вызывается, когда сработал один из античитов
playerid - ID нарушителя
ip_address[] - IP-адрес нарушителя
type - тип нарушения (при 0 возвращает ID, при 1 - IP)
code - Код (ID) античита
Вся суть проблемы: Я не могу настроить анти-чит, адаптировать его под свой мод так сказать что-ли..
PHP:
enum chInfo
{
chID1
}
new Float:CheatInfo[15][chInfo];
new Cheat1;
new Text:CheatText[15];
PHP:
new Float:DrawPos = 25.000000;
Cheat1 = 0;
for(new i; i < 15; i++)
{
if(i > 0) DrawPos += 30.0;
CheatText[i] = TextDrawCreate(DrawPos, 428.000000, "-1");
TextDrawColor(CheatText[i], 0xEF8100FF);
TextDrawFont(CheatText[i], 1);
TextDrawSetOutline(CheatText[i], 1);
TextDrawLetterSize(CheatText[i], 0.3500, 1.270);
}
PHP:
for(new i; i < 15; i++)
{
if(CheatInfo[i][chID1] == playerid)
{
TextDrawSetString(CheatText[i], "-1");
Cheat1 ++;
if(Cheat1 > 14) Cheat1 = 0;
}
}
PHP:
stock AddCheater(playerid)
{
new str[15];
for(new i; i < 15; i++)
{
if(CheatInfo[i][chID1] == playerid) return 0;
}
CheatInfo[Cheat1][chID1] = playerid;
format(str, sizeof(str), "%d", playerid);
TextDrawSetString(CheatText[Cheat1], str);
Cheat1 ++;
if(Cheat1 > 14) Cheat1 = 0;
return 1;
}
Я вас очень прошу, помогите мне с кодом, знаний не хватает, а очень нужно
***Если вдруг нужно, дефолтные анти-читы, то-есть вшитые в мод.
PHP:
/* Античиты */
new bool:StartGMTest[MAX_PLAYERS];
new bool:slotUsed[MAX_PLAYERS char];
new bool:ac_1[MAX_PLAYERS char];
new WeaponTime[MAX_PLAYERS];
new RapidFire[MAX_PLAYERS];
new playersIP[MAX_PLAYERS][64];
new PlayerBrake[MAX_PLAYERS];
new Float:AC_Air_Player[MAX_PLAYERS][3];
new AC_Air_Time[MAX_PLAYERS];
new Float:AC_Air_Car[MAX_PLAYERS][3];
new Float:AC_Velocity_Air_Car[MAX_PLAYERS][3];
new AC_Air_Time_Car[MAX_PLAYERS];
new Float:AC_Speed_Car[MAX_PLAYERS];
new Float:AC_Speed_Car_1[MAX_PLAYERS];
new Float:AC_Speed_Car_C[MAX_PLAYERS][3];
new Float:VehiclePos[MAX_VEHICLES][3];
new AC_GunCheattime[MAX_PLAYERS];
new PlayerEnterTime[MAX_PLAYERS];
/* Античиты Конец */
PHP:
stock CheatKick(playerid,errorcode)
{
if(playerid == INVALID_PLAYER_ID) return 1;
new string[128];
if(PI[playerid][pAdmin] != ADM_NONE)
{
format(string, sizeof(string), "[A] Античит попытался Вас кикнуть {F04245}(ac-code %d)", errorcode);
SendClientMessage(playerid, COLOR_GREY, string);
return 1;
}
if(errorcode != 0)
{
format(string, sizeof(string), "Обнаружено использование чит-программ {F04245}(ac-code %d)", errorcode);
SendClientMessage(playerid, COLOR_ORANGE, string);
Kick(playerid);
}
else Kick(playerid);
return 1;
}
PHP:
// AIRBRAKE
new carid = GetPlayerVehicleID(i);
if(IsPlayerInVehicle(i, carid) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
new Float:X, Float:Y, Float:Z, Float:distveh = floatround(GetVehicleDistanceFromPoint(carid, VehiclePos[carid][0], VehiclePos[carid][1], VehiclePos[carid][2]));
GetVehiclePos(carid, X, Y, Z);
if(distveh > 100 && GetPVarInt(i, "AntiBreik") == 0 && PI[i][pAFK] < 3 && PI[i][pAdmin] == ADM_NONE && !IsAPlane(GetPlayerVehicleID(i)))
{
PlayerBrake[i]++;
if(PlayerBrake[i] > 4) AddCheater(i);
}
else if(PlayerBrake[i] > 0) PlayerBrake[i]--;
if(GetVehicleSpeed(carid) > 15)
{
VehiclePos[carid][0] = X;
VehiclePos[carid][1] = Y;
VehiclePos[carid][2] = Z;
}
}
else
{
new Float:X, Float:Y, Float:Z, Float:distpl = floatround(GetPlayerDistanceFromPoint(i, PI[i][pPos][0], PI[i][pPos][1], PI[i][pPos][2]));
GetPlayerPos(i, X, Y, Z);
if(distpl > 60 && GetPVarInt(i, "AntiBreik") == 0 && PI[i][pAFK] < 3 && PI[i][pAdmin] == ADM_NONE)
{
PlayerBrake[i]++;
if(PlayerBrake[i] > 6) AddCheater(i);
}
else if(PlayerBrake[i] > 0) PlayerBrake[i]--;
if(GetPlayerSpeed(i) > 0)
{
PI[i][pPos][0] = X;
PI[i][pPos][1] = Y;
PI[i][pPos][2] = Z;
}
}
// SPEEDHACK
if(!IsPlayerNPC(i) && GetPVarInt(i,"AC_Protection") == 1)
{
if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsAPlane(GetPlayerVehicleID(i)))
{
GetVehicleVelocity(GetPlayerVehicleID(i), AC_Speed_Car_C[i][0], AC_Speed_Car_C[i][1], AC_Speed_Car_C[i][2]);
AC_Speed_Car[i] = floatround(floatsqroot(AC_Speed_Car_C[i][0] * AC_Speed_Car_C[i][0] + AC_Speed_Car_C[i][1] * AC_Speed_Car_C[i][1] + AC_Speed_Car_C[i][2] * AC_Speed_Car_C[i][2]) * 200.0);
if((AC_Speed_Car[i] - AC_Speed_Car_1[i])>100)
{
if(GetPlayerState(i) != PLAYER_STATE_SPECTATING && PI[i][pAFK] < 3 && PI[i][pAdmin] == ADM_NONE)
{
AddCheater(i);
}
}
else AC_Speed_Car_1[i] = AC_Speed_Car[i];
}
}
PI[i][pAFK]++;
if(PI[i][pAFK] >= 3)
{
new temp[64];
format(temp, sizeof(temp), "Игрок на паузе: %s", Converts(PI[i][pAFK]));
SetPlayerChatBubble(i, temp, COLOR_YELLOW, 10.0, 1600);
}
if(PI[i][pAFK] == 1200 && !PI[i][pAdmin])
{
SendClientMessage(i, COLOR_RED, "Вы были кикнуты т.к были долгое время в АФК");
SKick(i, 1828);
}
if(PI[i][Spectating][1] != INVALID_PLAYER_ID)
{
new str[300];
new Float:values[3];
GetPlayerHealth(PI[i][Spectating][0], values[0]);
GetPlayerArmour(PI[i][Spectating][0], values[1]);
GetVehicleHealth(GetPlayerVehicleID(PI[i][Spectating][0]), values[2]);
format(str, sizeof(str), "%s~n~ID: %d~n~Ping: %d~n~HP: %.1f~n~Armour: %.1f~n~Speed: %d~n~CarHP: %.1f~n~Ammo: %i:%i~n~Warns: %d~n~Cash: %d",
GetName(PI[i][Spectating][0]), PI[i][Spectating][0], GetPlayerPing(PI[i][Spectating][0]),
values[0], values[1], SpeedVehicle(PI[i][Spectating][0]) / 2, values[2],
GetPlayerWeapon(PI[i][Spectating][0]), GetPlayerAmmo(PI[i][Spectating][0]),
PI[PI[i][Spectating][0]][pWarn], PI[PI[i][Spectating][0]][pCash]);
PlayerTextDrawSetString(PI[i][Spectating][1], PI[PI[i][Spectating][1]][SpecTxt], str);
}
Я бы даже заплатил..
Последнее редактирование модератором:
