Например тот же серверный ELS реализуется в файвМ вот так (как я сейчас сделал паттерны(!) серверные)Вкус , цвет и фломастеры)
const ELSPatterns = {
"default": [
[1, 3],
[2, 4],
[1, 3],
[2, 4]
],
"fast_strobe": [
[1, 2],
[],
[1, 2],
[],
[3, 4],
[],
[3, 4],
[]
],
"traffic_advisor_left": [
[7],
[7, 8],
[7, 8, 9],
[7, 8, 9, 10],
[]
]
};
if (IsDuplicityVersion()) {
global.ELSPatterns = ELSPatterns;
} else {
window.ELSPatterns = ELSPatterns;
}
mp.events.add('server:siren:toggleLights', (player, state) => {
let veh = player.vehicle;
if (!veh || player.seat !== 0) return;
veh.setVariable('isSirenOn', state);
if (!state) {
veh.setVariable('sirenTone', 0);
}
});
mp.events.add('server:siren:setTone', (player, tone) => {
let veh = player.vehicle;
if (!veh || player.seat !== 0) return;
let currentTone = veh.getVariable('sirenTone') || 0;
if (currentTone === tone) {
veh.setVariable('sirenTone', 0);
} else {
veh.setVariable('sirenTone', tone);
}
});
mp.events.add('server:siren:airhorn', (player, state) => {
let veh = player.vehicle;
if (!veh || player.seat !== 0) return;
veh.setVariable('isAirhornOn', state);
});
mp.events.add('server:siren:blip', (player) => {
let veh = player.vehicle;
if (!veh || player.seat !== 0) return;
mp.players.callInRange(player.position, 100.0, 'client:siren:playBlip', [veh.id]);
});
const localPlayer = mp.players.local;
let isEmergencyDriver = false;
let lastBlipTime = 0;
function updateSirenTone(entity, tone) {
if (entity.customSirenId !== undefined) {
mp.game.audio.stopSound(entity.customSirenId);
mp.game.audio.releaseSoundId(entity.customSirenId);
entity.customSirenId = undefined;
}
if (tone > 0) {
entity.customSirenId = mp.game.audio.getSoundId();
let soundName = "VEHICLES_HORNS_SIREN_1";
if (tone === 2) soundName = "VEHICLES_HORNS_SIREN_2";
if (tone === 3) soundName = "VEHICLES_HORNS_POLICE_WARNING";
mp.game.audio.playSoundFromEntity(entity.customSirenId, soundName, entity.handle, "", false, 0);
}
}
global.addFastTick(() => {
const veh = localPlayer.vehicle;
isEmergencyDriver = veh && veh.getClass() === 18 && veh.getPedInSeat(-1) === localPlayer.handle;
});
global.addRenderTick(() => {
if (isEmergencyDriver) {
mp.game.controls.disableControlAction(0, 86, true);
mp.game.controls.disableControlAction(1, 86, true);
mp.game.controls.disableControlAction(2, 86, true);
}
});
mp.events.add('client:input:sirenBlip', () => {
if (!isEmergencyDriver) return;
const now = Date.now();
if (now - lastBlipTime < 600) return;
lastBlipTime = now;
mp.events.callRemote('server:siren:blip');
});
mp.events.add('client:siren:playBlip', (vehId) => {
const entity = mp.vehicles.atRemoteId(vehId);
if (entity && entity.handle && entity.getClass() === 18) {
const lightsOn = entity.getVariable('isSirenOn') || false;
if (lightsOn) {
const blipId = mp.game.audio.getSoundId();
mp.game.audio.playSoundFromEntity(blipId, "VEHICLES_HORNS_POLICE_WARNING", entity.handle, "", false, 0);
setTimeout(() => {
mp.game.audio.stopSound(blipId);
mp.game.audio.releaseSoundId(blipId);
}, 400);
} else {
if (typeof entity.setSiren === 'function') entity.setSiren(true);
mp.game.vehicle.setHasMutedSirens(entity.handle, false);
mp.game.audio.blipSiren(entity.handle);
setTimeout(() => {
if (entity && entity.handle) {
const currentLights = entity.getVariable('isSirenOn') || false;
if (typeof entity.setSiren === 'function') entity.setSiren(currentLights);
mp.game.vehicle.setHasMutedSirens(entity.handle, true);
}
}, 800);
}
}
});
mp.events.add('client:input:sirenLights', () => {
if (!isEmergencyDriver) return;
mp.game.audio.playSoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", true);
const currentState = localPlayer.vehicle.getVariable('isSirenOn') || false;
mp.events.callRemote('server:siren:toggleLights', !currentState);
});
mp.events.add('client:input:sirenTone', (tone) => {
if (!isEmergencyDriver) return;
const veh = localPlayer.vehicle;
if (!(veh.getVariable('isSirenOn') || false)) return;
mp.game.audio.playSoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", true);
mp.events.callRemote('server:siren:setTone', tone);
});
mp.events.add('client:input:sirenAirhorn', (state) => {
if (!isEmergencyDriver) return;
mp.events.callRemote('server:siren:airhorn', state);
});
mp.events.add('entityStreamIn', (entity) => {
if (entity.type === 'vehicle' && entity.getClass() === 18) {
setTimeout(() => {
if (!mp.vehicles.exists(entity) || !entity.handle) return;
const isLightsOn = entity.getVariable('isSirenOn') || false;
const currentTone = entity.getVariable('sirenTone') || 0;
if (typeof entity.setSiren === 'function') entity.setSiren(isLightsOn);
mp.game.vehicle.setHasMutedSirens(entity.handle, true);
updateSirenTone(entity, currentTone);
}, 200);
}
});
mp.events.addDataHandler('isSirenOn', (entity, value) => {
if (entity.type === 'vehicle' && entity.handle && entity.getClass() === 18) {
if (typeof entity.setSiren === 'function') entity.setSiren(value);
mp.game.vehicle.setHasMutedSirens(entity.handle, true);
}
});
mp.events.addDataHandler('sirenTone', (entity, value) => {
if (entity.type === 'vehicle' && entity.handle && entity.getClass() === 18) {
updateSirenTone(entity, value);
}
});
mp.events.addDataHandler('isAirhornOn', (entity, value) => {
if (entity.type === 'vehicle' && entity.handle) {
if (value) {
if (entity.airhornSoundId !== undefined) {
mp.game.audio.stopSound(entity.airhornSoundId);
mp.game.audio.releaseSoundId(entity.airhornSoundId);
}
entity.airhornSoundId = mp.game.audio.getSoundId();
mp.game.audio.playSoundFromEntity(entity.airhornSoundId, "SIRENS_AIRHORN", entity.handle, "", false, 0);
} else {
if (entity.airhornSoundId !== undefined) {
mp.game.audio.stopSound(entity.airhornSoundId);
mp.game.audio.releaseSoundId(entity.airhornSoundId);
entity.airhornSoundId = undefined;
}
}
}
});
Ты че угараешь, ELS давно слит и сделан не тобойНапример тот же серверный ELS реализуется в файвМ вот так (как я сейчас сделал паттерны(!) серверные)
JavaScript:const ELSPatterns = { "default": [ [1, 3], [2, 4], [1, 3], [2, 4] ], "fast_strobe": [ [1, 2], [], [1, 2], [], [3, 4], [], [3, 4], [] ], "traffic_advisor_left": [ [7], [7, 8], [7, 8, 9], [7, 8, 9, 10], [] ] }; if (IsDuplicityVersion()) { global.ELSPatterns = ELSPatterns; } else { window.ELSPatterns = ELSPatterns; }
И как я делал в рейджМП "серверный" ELS
JavaScript:mp.events.add('server:siren:toggleLights', (player, state) => { let veh = player.vehicle; if (!veh || player.seat !== 0) return; veh.setVariable('isSirenOn', state); if (!state) { veh.setVariable('sirenTone', 0); } }); mp.events.add('server:siren:setTone', (player, tone) => { let veh = player.vehicle; if (!veh || player.seat !== 0) return; let currentTone = veh.getVariable('sirenTone') || 0; if (currentTone === tone) { veh.setVariable('sirenTone', 0); } else { veh.setVariable('sirenTone', tone); } }); mp.events.add('server:siren:airhorn', (player, state) => { let veh = player.vehicle; if (!veh || player.seat !== 0) return; veh.setVariable('isAirhornOn', state); }); mp.events.add('server:siren:blip', (player) => { let veh = player.vehicle; if (!veh || player.seat !== 0) return; mp.players.callInRange(player.position, 100.0, 'client:siren:playBlip', [veh.id]); });
И клиентский
JavaScript:const localPlayer = mp.players.local; let isEmergencyDriver = false; let lastBlipTime = 0; function updateSirenTone(entity, tone) { if (entity.customSirenId !== undefined) { mp.game.audio.stopSound(entity.customSirenId); mp.game.audio.releaseSoundId(entity.customSirenId); entity.customSirenId = undefined; } if (tone > 0) { entity.customSirenId = mp.game.audio.getSoundId(); let soundName = "VEHICLES_HORNS_SIREN_1"; if (tone === 2) soundName = "VEHICLES_HORNS_SIREN_2"; if (tone === 3) soundName = "VEHICLES_HORNS_POLICE_WARNING"; mp.game.audio.playSoundFromEntity(entity.customSirenId, soundName, entity.handle, "", false, 0); } } global.addFastTick(() => { const veh = localPlayer.vehicle; isEmergencyDriver = veh && veh.getClass() === 18 && veh.getPedInSeat(-1) === localPlayer.handle; }); global.addRenderTick(() => { if (isEmergencyDriver) { mp.game.controls.disableControlAction(0, 86, true); mp.game.controls.disableControlAction(1, 86, true); mp.game.controls.disableControlAction(2, 86, true); } }); mp.events.add('client:input:sirenBlip', () => { if (!isEmergencyDriver) return; const now = Date.now(); if (now - lastBlipTime < 600) return; lastBlipTime = now; mp.events.callRemote('server:siren:blip'); }); mp.events.add('client:siren:playBlip', (vehId) => { const entity = mp.vehicles.atRemoteId(vehId); if (entity && entity.handle && entity.getClass() === 18) { const lightsOn = entity.getVariable('isSirenOn') || false; if (lightsOn) { const blipId = mp.game.audio.getSoundId(); mp.game.audio.playSoundFromEntity(blipId, "VEHICLES_HORNS_POLICE_WARNING", entity.handle, "", false, 0); setTimeout(() => { mp.game.audio.stopSound(blipId); mp.game.audio.releaseSoundId(blipId); }, 400); } else { if (typeof entity.setSiren === 'function') entity.setSiren(true); mp.game.vehicle.setHasMutedSirens(entity.handle, false); mp.game.audio.blipSiren(entity.handle); setTimeout(() => { if (entity && entity.handle) { const currentLights = entity.getVariable('isSirenOn') || false; if (typeof entity.setSiren === 'function') entity.setSiren(currentLights); mp.game.vehicle.setHasMutedSirens(entity.handle, true); } }, 800); } } }); mp.events.add('client:input:sirenLights', () => { if (!isEmergencyDriver) return; mp.game.audio.playSoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", true); const currentState = localPlayer.vehicle.getVariable('isSirenOn') || false; mp.events.callRemote('server:siren:toggleLights', !currentState); }); mp.events.add('client:input:sirenTone', (tone) => { if (!isEmergencyDriver) return; const veh = localPlayer.vehicle; if (!(veh.getVariable('isSirenOn') || false)) return; mp.game.audio.playSoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", true); mp.events.callRemote('server:siren:setTone', tone); }); mp.events.add('client:input:sirenAirhorn', (state) => { if (!isEmergencyDriver) return; mp.events.callRemote('server:siren:airhorn', state); }); mp.events.add('entityStreamIn', (entity) => { if (entity.type === 'vehicle' && entity.getClass() === 18) { setTimeout(() => { if (!mp.vehicles.exists(entity) || !entity.handle) return; const isLightsOn = entity.getVariable('isSirenOn') || false; const currentTone = entity.getVariable('sirenTone') || 0; if (typeof entity.setSiren === 'function') entity.setSiren(isLightsOn); mp.game.vehicle.setHasMutedSirens(entity.handle, true); updateSirenTone(entity, currentTone); }, 200); } }); mp.events.addDataHandler('isSirenOn', (entity, value) => { if (entity.type === 'vehicle' && entity.handle && entity.getClass() === 18) { if (typeof entity.setSiren === 'function') entity.setSiren(value); mp.game.vehicle.setHasMutedSirens(entity.handle, true); } }); mp.events.addDataHandler('sirenTone', (entity, value) => { if (entity.type === 'vehicle' && entity.handle && entity.getClass() === 18) { updateSirenTone(entity, value); } }); mp.events.addDataHandler('isAirhornOn', (entity, value) => { if (entity.type === 'vehicle' && entity.handle) { if (value) { if (entity.airhornSoundId !== undefined) { mp.game.audio.stopSound(entity.airhornSoundId); mp.game.audio.releaseSoundId(entity.airhornSoundId); } entity.airhornSoundId = mp.game.audio.getSoundId(); mp.game.audio.playSoundFromEntity(entity.airhornSoundId, "SIRENS_AIRHORN", entity.handle, "", false, 0); } else { if (entity.airhornSoundId !== undefined) { mp.game.audio.stopSound(entity.airhornSoundId); mp.game.audio.releaseSoundId(entity.airhornSoundId); entity.airhornSoundId = undefined; } } } });
По-сути в файвМ я могу управлять люстрой и сиреной как угодно, а в рейджМП тупо глушил её и перехватывал управление. И это только на примере мигалок )
forum.cfx.re
Ну, во-первых, то, что ты скинул, там явно используется Lua. Я же пишу исключительно на JS код ) Во-вторых, где ты видишь, чтоб я кидал код того, что я написал? ) Я скинул лишь паттерны, которые я юзаю ) Следущий код я юзал в рейджМПТы че угараешь, ELS давно слит и сделан не тобой
А, ну базару зиро тогдаНу, во-первых, то, что ты скинул, там явно используется Lua. Я же пишу исключительно на JS код ) Во-вторых, где ты видишь, чтоб я кидал код того, что я написал? ) Я скинул лишь паттерны, которые я юзаю ) Следущий код я юзал в рейджМП![]()