Cоздание антибага
#1

Здравствуйте, недавно посмотрел видеоролик о том как пользуются knife багом. Захотел сделать антибаг.
В видеоролике видно, что у обоих проигрывается анимация, + прицеливание + в руках нож и конечно же идет нажатие клавиш.
Так вот опираясь на это можно сделать качественный анти knife баг?
Reply
#2

А в чем заключается баг?
Reply
#3

Позволяет на большом расстояние перерезать игроку горло. Начинается с 1:10
[ame="http://www.youtube.com/watch?v=K6iVuUgJgQE"]Видео[/ame]
Reply
#4

А на других серверах повторяется?
Reply
#5

Играл пару дней назад на 0.3d, попробовал повторить - получилось.
Проверить на 0.3e в данный момент не имею возможности.
Reply
#6

Это баг сампа ещё с 0.2
Reply
#7

Quote:
Originally Posted by KriD
Посмотреть сообщение
Так вот опираясь на это можно сделать качественный анти knife баг?
да.__
Reply
#8

Получиться ли осуществить в OnPlayerKeyStateChange или необходимо создать таймер с повторением?
Reply
#9

Quote:
Originally Posted by KriD
Посмотреть сообщение
Получиться ли осуществить в OnPlayerKeyStateChange или необходимо создать таймер с повторением?
теоретически должно получиться, нужно будет проверить что человек вооружен ножом и он атакует, нужно его замораживать, или даже обоих.
Reply
#10

Помнится еще nemesis (автор нынче мертвого Impulse 99) пытался исправить ситуацию. Все переросло в реальную невозможность нормально использовать нож. Незнаю что за код у него был, но ход мыслей тот же.
Reply
#11

а разве нельзя проверить, если игрок убит ножом, и дистанция больше метра, наказывать убийцу?
Reply
#12

А если что-то лагануло? Кстати игрок не всегда умирает, иногда просто ходячий лежачий мертвец
Reply
#13

можно детектить анимацию ножа :/ Но тут уже нужны будут шаманские танцы с бубном. Определение цели игрока (запамятовал функцию), нажатие кнопок и ещё чо-нить D:
Reply
#14

Анимации вас спасут.
Reply
#15

Я знаю этот баг очень давно. Сам его учился в сингле делать. У меня есть два варианта анти бага. Вот один из них.
PHP код:
public OnPlayerUpdate(playerid)
{
    if(
GetPlayerAnimationIndex(playerid))
    {
    new 
animlib[32],animname[32];
    
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,sizeof(animlib),animname,sizeof(animname));
    if((
strcmp(animname,"KILL_KNIFE_PLAYER") == 0) && GetPlayerSpeed(playerid) > 5.0)
    {
    new 
string[128];
    
format(string,sizeof(string),"Игрок %s (%d) походу юзает Knife Bug ",Playername(playerid),playerid);
    
SendClientMessageToAll(COLOR_GREY,string);
    }
    }
    return 
true;
}
//--------
stock Float:GetPlayerSpeed(playerid)
{
    new 
Float:Pos[3];
    
GetPlayerVelocity(playerid,Pos[0],Pos[1],Pos[2]);
    return 
floatsqroot(Pos[0] * Pos[0] + Pos[1] * Pos[1] + Pos[2] * Pos[2]) * 120;

У меня работает. Должно помочь.
Cудь элементарна, если игрок уже режет сзади (анимация) и он не стоит на месте (как это происходит обычно).

просто ходячий лежачий мертвец - лаг.
Reply
#16

Quote:

просто ходячий лежачий мертвец - лаг.

Тоже неприятно, и надо исправлять, да?
Reply
#17

GetPlayerAnimationIndex(playerid) == 747 © BJIADOKC
Идеально.
Reply
#18

Quote:
Originally Posted by Vandersexxx
Посмотреть сообщение
GetPlayerAnimationIndex(playerid) == 747 © BJIADOKC
Идеально.
Подойду сзади, зарежу стоя, никого не трагая, распознает баг 20 тыщ раз.
Reply
#19

Получается что так
PHP код:
if(GetPlayerTargetPlayer(playerid)!= INVALID_PLAYER_ID && newkeys == KEY_FIRE && oldkeys == KEY_AIM && GetPlayerWeapon(playerid) == 4)
{
//если целится и нажата лкм а до нее пкм и в руках ножик
new Float:x,Float:y,Float:z,animlib[30],animname[30];
GetPlayerPos(GetPlayerTargetPlayer(playerid),x,y,z);
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,sizeof(animlib),animname,sizeof(animname)); 
if(
GetPlayerDistanceFromPoint(playerid,xyz) > && !strcmp(animname,"название анимки"))
{
//игрок использует баг
}

Reply
#20

Написали же, что GetPlayerAnimationIndex(playerid) == 747 сработает некорректно. Плюс, ты забыл учитывать скорость.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)