Posts: 1,659
Threads: 17
Joined: Sep 2008
Quote:
Originally Posted by Bombo
Не срабатывает функция MeleeAttack() :
PHP Code:
//далее функция рассчитана на плагин FCNPC
for(i = 0; i < MAX_PLAYERS; ++i)
{
//если это игрок - пропускаем
if(IsPlayerNPC(i) && FCNPC_IsSpawned(i) && !FCNPC_IsDead(i))
{
//ищем ближайшего игрока
for(j = 0; j < MAX_PLAYERS; ++j)
{
if(miss_player[j])
continue;
dx = floatsub(fPlayersCoords[i][f_X],fPlayersCoords[j][f_X]);
dy = floatsub(fPlayersCoords[i][f_Y],fPlayersCoords[j][f_Y]);
dz = floatsub(fPlayersCoords[i][f_Z],fPlayersCoords[j][f_Z]);
len = VectorSize(dx,dy,dz);
//если игрок в зоне досягаемости зомби - атака
if(len < 1.2)
{
//наводимся
FCNPC_AimAt(i, fPlayersCoords[j][f_X], fPlayersCoords[j][f_Y], fPlayersCoords[j][f_Z], false);
//атакуем
FCNPC_MeleeAttack(i, 100, true);
break;
}
//если игрок в поле зрения зомби - преследование
if(len < 99.0)
{
//если за игроком уже бегжит 5 или более зомби - ищем другого игрока поблизости
if(k >= MAX_ZOMBIES_ON_PLAYER)
continue;
//если зомби поворачивается в сторону игрока - отбой
if(FCNPC_IsAiming(i))
{
FCNPC_StopAttack(i);
FCNPC_StopAim(i);
}
//преследуем
FCNPC_GoTo(i, floatadd(fPlayersCoords[j][f_X],floatdiv(floatmul(0.5,dx),len)), floatadd(fPlayersCoords[j][f_Y],floatdiv(floatmul(0.5,dy),len)), fPlayersCoords[j][f_Z], MOVE_TYPE_RUN, 0.8, true);
break;
}
}
//если в поле зрения зомби никого нету - останавливаем его
if(FCNPC_IsAiming(i))
{
FCNPC_StopAttack(i);
FCNPC_StopAim(i);
}
}
}
Если же в обоих местах закомментировать FCNPC_StopAttack(i), то MeleeAttack() срабатывает, но при этом анимация бега иногда заменяется анимацией атаки.
|
Ну, естественно оно не срабатывает - ты сразу же, после прицеливания, останавливаешь атаку, анимация просто не успевает сработать. А замена анимации бега на анимацию атаки - это тоже нормально, потому что движком н игры не предусмотрен бег и атака с помощью боевого стиля.