// Variable global para controlar la tormenta (Inicia ACTIVADA al entrar) if (isNil "Mission_Sandstorm_Active") then { Mission_Sandstorm_Active = true; }; // --- SERVIDOR: Control del clima global --- if (isServer) then { [] spawn { while {true} do { waitUntil { Mission_Sandstorm_Active }; // Transición a clima de tormenta (Inmediato/Rápido al inicio) 0 setOvercast 0.25; 0 setRain 0; 0 setFog [0.10, 0.01, 10]; 0 setGusts 0.8; setWind [15, 15, true]; forceWeatherChange; waitUntil { !Mission_Sandstorm_Active }; // Restaurar clima despejado y DETENER EL VIENTO POR COMPLETO 0 setOvercast 0; 0 setFog 0; 0 setGusts 0; setWind [0, 0, true]; // Fuerza viento en 0 forceWeatherChange; }; }; }; if (!hasInterface) exitWith {}; // --- CLIENTE: Control de efectos visuales y de sonido --- [] spawn { scriptName "Dynamic_Sandstorm_Handler"; while {true} do { // Esperar a que la tormenta esté activa Y el jugador haya cargado completamente waitUntil { Mission_Sandstorm_Active && {!isNull player} && {alive player} }; // 1. Crear Corrección de Color private _ppColor = PPeffectCreate ["ColorCorrections", 1500]; _ppColor ppeffectEnable true; _ppColor ppeffectAdjust [ 1.20, 1.22, -0.03, [0.85, 0.60, 0.35, 0.025], [0.85, 0.55, 0.28, 0.40], [0.2, 0.12, 0.08, 0.0] ]; _ppColor ppeffectCommit 1; // Transición rápida de 1s al entrar // 2. Crear Emisor de Partículas private _emitter = createVehicleLocal ["#particlesource", getPosATL player, [], 0, "NONE"]; _emitter setParticleParams [ ["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 8, 0], "", "Billboard", 1, 8, [0, 0, 0], [10, 10, 0], 1, 1.275, 1, 0, [5, 15, 25], [[0.6, 0.45, 0.25, 0.05], [0.5, 0.4, 0.2, 0.12], [0.6, 0.45, 0.25, 0]], [1000], 1, 0, "", "", player ]; _emitter setParticleRandom [3, [20, 20, 5], [5, 5, 2], 0, 0.25, [0, 0, 0, 0.05], 0, 0]; _emitter setParticleCircle [0, [0, 0, 0]]; _emitter setDropInterval 0.025; _emitter attachTo [player, [0, 0, 0]]; // 3. Bucle de Audio (Optimizado con minutos y control de fallos) private _audioScript = [player] spawn { params ["_targetPlayer"]; while {Mission_Sandstorm_Active && {alive _targetPlayer}} do { // Genera variaciones de volumen (0.07 a 0.09) y tono (0.9 a 1.1) private _volumen = 0.07 + (random 0.02); private _pitch = 0.90 + (random 0.20); playSoundUI ["Sandstorm_Wind", _volumen, _pitch]; // Duración base de tu archivo de audio (ajusta esto si tu .ogg dura más o menos segundos) private _duracionAudio = 18; // En lugar de un solo sleep largo que pueda congelar el hilo, // dividimos la espera controlando que la tormenta siga activa private _tiempoPausa = if (random 100 > 30) then { // Pausa normal: entre 1.5 y 3.5 minutos (90 a 210 segundos) 90 + random 120; } else { // Calma chicha (silencio largo): entre 3.5 y 6 minutos (210 a 360 segundos) 210 + random 150; }; // Bucle interno de espera fraccionada para evitar bloqueos private _tiempoTranscurrido = 0; while {_tiempoTranscurrido < _tiempoPausa && {Mission_Sandstorm_Active} && {alive _targetPlayer}} do { sleep 5; _tiempoTranscurrido = _tiempoTranscurrido + 5; }; }; }; // Esperar hasta que la tormenta se apague O el jugador muera waitUntil { !Mission_Sandstorm_Active || {!alive player} }; // 4. Limpieza de efectos terminate _audioScript; deleteVehicle _emitter; // Transición de desvanecimiento para el filtro de pantalla _ppColor ppeffectAdjust [1, 1, 0, [0,0,0,0], [1,1,1,1], [0,0,0,0]]; _ppColor ppeffectCommit 2; sleep 2; ppEffectDestroy _ppColor; }; };