02.07.2016, 05:24
(
Последний раз редактировалось stabker; 05.07.2016 в 02:13.
Причина: добавил предупреждение по поводу кода античита
)
Quote:
Могу посоветовать плагин RakNet Manager. Достаточно проверять значения surfing offsets на NaN.
Вот псевдокод (я был одним из тех, кто нашел этот способ невидимки в 2013), который показывает работу этой невидимки на стороне клиента: PHP код:
|
Вот код, мб кому еще пригодится
PHP код:
#define ID_PLAYER_SYNC (207)
public OnPlayerReceivedPacket(player_id, packet_id, BitStream:bs)
{
if(packet_id == ID_PLAYER_SYNC)
{
new surfingvehid, Float: surfingoffsets[3];
BS_SetReadOffset(bs, 408); // packet id + unused data
BS_ReadValue(bs, RNM_FLOAT, surfingoffsets[0], RNM_FLOAT, surfingoffsets[1], RNM_FLOAT, surfingoffsets[2], RNM_UINT16, surfingvehid);
if(surfingvehid != 0 && surfingvehid != INVALID_VEHICLE_ID)
{
new model = GetVehicleModel(surfingvehid);
if(!(400 <= model <= 611))
{
//невалидная машина, возможно читер
}
else
{
new Float: biggest_axis = vehicle_size[model - 400][1];
if(vehicle_size[model - 400][0] > biggest_axis)
{
biggest_axis = vehicle_size[model - 400][0];
}
if(vehicle_size[model - 400][2] > biggest_axis)
{
biggest_axis = vehicle_size[model - 400][2];
}
biggest_axis *= 2.0;
if(surfingoffsets[0] != surfingoffsets[0] || surfingoffsets[1] != surfingoffsets[1] || surfingoffsets[2] != surfingoffsets[2] ||
!(-biggest_axis <= surfingoffsets[0] <= biggest_axis) || !(-biggest_axis <= surfingoffsets[1] <= biggest_axis) || !(-biggest_axis <= surfingoffsets[2] <= biggest_axis))
{
//читер
return 1;
}
}
}
}
return 1;
}
UPD: На случай, если кто-то будет использовать этот код, учтите, что тут кроме NaN еще стоит проверка на серфиг за границами размера машины (по размерам самой большой оси * 2), и я не уверен, но скорее всего могут быть ошибочные кики, даже несмотря на всю предосторожность.