Есть скрипт, который триггерится при выстреле, чтобы изменять количество имеющихся патронов в БД, но сталкиваюсь с тем, что когда игрок стреляет из боевого пистолета (WEAPON_COMBATPISTOL), все срабатывает корректно, но когда из штурмовой винтовки (WEAPON_ASSAULTRIFLE
), не происходит триггер. Каким методом можно изменить это так, чтобы считывался выстрел из штурмовой винтовки?
на клиенте так:
на сервере применяется такой ивент:
В консоль на вывод получаем следующее:
upd.: в принципе есть предположение, что на текущая реализация срабатывает только на пистолеты, т.к. выстрел из WEAPON_PISTOL триггерит ивент, а WEAPON_MINISMG нет
), не происходит триггер. Каким методом можно изменить это так, чтобы считывался выстрел из штурмовой винтовки?
на клиенте так:
JavaScript:
let lastAmmoCount = 0;
mp.events.add('render', () => {
const weaponHash = mp.game.weapon.getSelectedPed(mp.players.local.handle);
if (weaponHash !== 0) {
const ammoCount = mp.game.weapon.getAmmoInPed(mp.players.local.handle, weaponHash);
if (ammoCount < lastAmmoCount) {
mp.events.callRemote('inventory:shotFired', weaponHash);
}
lastAmmoCount = ammoCount;
}
});
на сервере применяется такой ивент:
JavaScript:
mp.events.add('inventory:shotFired', async (player, weaponHash) => {
try {
const data = playerInventories.get(player.id);
if (!data) return;
const weaponItem = data.items.find(item =>
item.weaponHash && mp.joaat(item.weaponHash) === weaponHash
);
if (!weaponItem) return;
console.log("inventory weapon:", weaponItem.weaponHash, "joaat:", mp.joaat(weaponItem.weaponHash));
const ammoItem = data.items.find(it =>
it.type === 'ammo' &&
it.ammoType === weaponItem.ammoType &&
it.quantity > 0
);
if (!ammoItem) {
player.removeWeapon(weaponHash);
return;
}
ammoItem.quantity = Math.max(0, ammoItem.quantity - 1);
const [affected] = await InventoryItems.update(
{ Quantity: ammoItem.quantity },
{ where: { Id: ammoItem.id } }
);
if (affected === 0) {
console.error(`Не удалось обновить патроны для ${ammoItem.id}`);
}
const idx = data.items.findIndex(it => it.id === ammoItem.id);
if (idx !== -1) data.items[idx].quantity = ammoItem.quantity;
sendInventoryToClient(player);
} catch (err) {
console.error('[inventory:shotFired] Ошибка:', err);
}
});
В консоль на вывод получаем следующее:
upd.: в принципе есть предположение, что на текущая реализация срабатывает только на пистолеты, т.к. выстрел из WEAPON_PISTOL триггерит ивент, а WEAPON_MINISMG нет
Последнее редактирование: