Всем привет. Может кто знает как правильно написать логику для NPC? Чтобы с оружием в руках охранял территорию. Я попробовал написать сам но по итогу NPC появляется но без оружия и не на кого не нападает.
JavaScript:
// На стороне сервера
const guardPosition = new mp.Vector3(0, 0, 0);
const guardHeading = 0;
const guardRange = 20;
const weaponHash = 0x83BF0278; // WEAPON_CARBINERIFLE
const respawnTime = 20000; // Время респавна в миллисекундах (20 секунд)
let guard = null;
let respawnTimeout = null;
mp.events.add('playerJoin', (player) => {
if (guard === null && respawnTimeout === null) {
createGuard();
}
});
function createGuard() {
guard = mp.peds.new(0x8D8F1B10, guardPosition, guardHeading, 0); // s_m_y_swat_01
// Устанавливаем здоровье и броню для NPC
guard.health = 100;
guard.armour = 100;
// Отправляем событие клиентам для установки оружия NPC
mp.players.call('setGuardWeapon', [guard.id, weaponHash]);
// Добавляем обработчик смерти NPC
guard.setVariable('isGuard', true);
mp.events.add('pedDeath', (ped) => {
if (ped.getVariable('isGuard')) {
console.log('NPC охранник умер. Респавн через 20 секунд.');
guard = null;
clearTimeout(respawnTimeout);
respawnTimeout = setTimeout(() => {
createGuard();
console.log('NPC охранник респавнен.');
respawnTimeout = null;
}, respawnTime);
}
});
}
setInterval(() => {
if (guard === null) return;
mp.players.forEachInRange(guardPosition, guardRange, (player) => {
if (player.type === 'player') {
// Используем taskShootAt для стрельбы по игрокам
guard.taskShootAt(player, -1, 0);
}
});
}, 1000); // Проверка каждую секунду
mp.events.addCommand('respawnguard', (player) => {
if (player.adminLevel < 1) return; // Проверка на права администратора
if (guard !== null) {
guard.destroy();
}
clearTimeout(respawnTimeout);
createGuard();
player.outputChatBox('NPC охранник респавнен.');
});
JavaScript:
//На клиентской
mp.events.add('setGuardWeapon', (guardId, weaponHash) => {
const guard = mp.peds.atRemoteId(guardId);
if (guard) {
guard.giveWeapon(weaponHash, 1000); // Даем 1000 патронов
guard.setCurrentWeapon(weaponHash);
}
});
Последнее редактирование: