23.06.2016, 15:23
Quote:
В данный момент у меня есть такой код:
PHP код:
PHP код:
|
В данный момент у меня есть такой код:
PHP код:
PHP код:
|
new userID = GetPlayerID("ИМЯ_ИГРОКА");
if(IsPlayerConnected(userID)) {
Kick(userID);
}
Например, команда offban:
PHP код:
|
Что-то я не врубаюсь, как такое возможно https://*********/jltvc-GCFa0?t=1m49s
Чувак стоит в 10 метров от остальных, в том же виртуальном мире, в том же интерьере, в состоянии ON_FOOT, не АФК, но его никто не видит. Как чит это делает? |
Что-то я не врубаюсь, как такое возможно https://*********/jltvc-GCFa0?t=1m49s
Чувак стоит в 10 метров от остальных, в том же виртуальном мире, в том же интерьере, в состоянии ON_FOOT, не АФК, но его никто не видит. Как чит это делает? |
Короче, проблема в том, что этот чит (невидимка) присылает серверу невалидные координаты surfing offsets, из-за чего игрока не видно и админы "уходят в загрузку" при слежке. По ходу, адекватно отловить можно только через плагины.
|
stOnFootData::sSurfingVehicleID = nearestVehicleID;
stOnFootData::fSurfingOffsets[0] = NaN;
stOnFootData::fSurfingOffsets[1] = NaN;
stOnFootData::fSurfingOffsets[2] = NaN;
sendOnFootData();
Могу посоветовать плагин RakNet Manager. Достаточно проверять значения surfing offsets на NaN.
Вот псевдокод (я был одним из тех, кто нашел этот способ невидимки в 2013), который показывает работу этой невидимки на стороне клиента: 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;
}