Cоздание антибага -
KriD - 25.04.2012
Здравствуйте, недавно посмотрел видеоролик о том как пользуются knife багом. Захотел сделать антибаг.
В видеоролике видно, что у обоих проигрывается анимация, + прицеливание + в руках нож и конечно же идет нажатие клавиш.
Так вот опираясь на это можно сделать качественный анти knife баг?
Re: Cоздание антибага -
Stepashka - 25.04.2012
А в чем заключается баг?
Re: Cоздание антибага -
KriD - 25.04.2012
Позволяет на большом расстояние перерезать игроку горло. Начинается с 1:10
[ame="http://www.youtube.com/watch?v=K6iVuUgJgQE"]Видео[/ame]
Re: Cоздание антибага -
Stepashka - 25.04.2012
А на других серверах повторяется?
Re: Cоздание антибага -
KriD - 25.04.2012
Играл пару дней назад на 0.3d, попробовал повторить - получилось.
Проверить на 0.3e в данный момент не имею возможности.
Re: Cоздание антибага -
azen - 25.04.2012
Это баг сампа ещё с 0.2
Re: Cоздание антибага -
Stepashka - 25.04.2012
Quote:
Originally Posted by KriD
Так вот опираясь на это можно сделать качественный анти knife баг?
|
да.
__
Re: Cоздание антибага -
KriD - 25.04.2012
Получиться ли осуществить в OnPlayerKeyStateChange или необходимо создать таймер с повторением?
Re: Cоздание антибага -
Stepashka - 25.04.2012
Quote:
Originally Posted by KriD
Получиться ли осуществить в OnPlayerKeyStateChange или необходимо создать таймер с повторением?
|
теоретически должно получиться, нужно будет проверить что человек вооружен ножом и он атакует, нужно его замораживать, или даже обоих.
Re: Cоздание антибага -
jhonyxakep - 26.04.2012
Помнится еще nemesis (автор нынче мертвого Impulse 99) пытался исправить ситуацию. Все переросло в реальную невозможность нормально использовать нож. Незнаю что за код у него был, но ход мыслей тот же.
Re: Cоздание антибага -
azen - 26.04.2012
а разве нельзя проверить, если игрок убит ножом, и дистанция больше метра, наказывать убийцу?
Re: Cоздание антибага -
jhonyxakep - 26.04.2012
А если что-то лагануло? Кстати игрок не всегда умирает, иногда просто ходячий лежачий мертвец
Re: Cоздание антибага -
azen - 26.04.2012
можно детектить анимацию ножа :/ Но тут уже нужны будут шаманские танцы с бубном. Определение цели игрока (запамятовал функцию), нажатие кнопок и ещё чо-нить D:
Re: Cоздание антибага -
OKStyle - 26.04.2012
Анимации вас спасут.
Re: Cоздание антибага -
Gameyer - 26.04.2012
Я знаю этот баг очень давно. Сам его учился в сингле делать. У меня есть два варианта анти бага. Вот один из них.
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удь элементарна, если игрок уже режет сзади (анимация) и он не стоит на месте (как это происходит обычно).
просто ходячий лежачий мертвец - лаг.
Re: Cоздание антибага -
jhonyxakep - 26.04.2012
Quote:
просто ходячий лежачий мертвец - лаг.
|
Тоже неприятно, и надо исправлять, да?
Re: Cоздание антибага -
Vandersexxx - 26.04.2012
GetPlayerAnimationIndex(playerid) == 747 ©
BJIADOKC
Идеально.
Re: Cоздание антибага -
Gameyer - 26.04.2012
Quote:
Originally Posted by Vandersexxx
GetPlayerAnimationIndex(playerid) == 747 © BJIADOKC
Идеально.
|
Подойду сзади, зарежу стоя, никого не трагая, распознает баг 20 тыщ раз.
Re: Cоздание антибага -
KriD - 26.04.2012
Получается что так
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,x, y, z) > 2 && !strcmp(animname,"название анимки"))
{
//игрок использует баг
}
}
Re: Cоздание антибага -
iEnemY - 26.04.2012
Написали же, что GetPlayerAnimationIndex(playerid) == 747 сработает некорректно. Плюс, ты забыл учитывать скорость.