/* Author: Brazilian Armed Forces -Rodrigo "Ogrinho" Arantes Description: - This function is designed to implement smoke ejection from A-29 exhaust Exucution: - call the function via user action added to the aircrfat itself. to activate smoke emitter: class BRAF_Smoke_Toggle { priority=0.05; shortcut="Smoke On"; displayName="Fumaça já!"; condition="player in this && { speed this > 1 }"; statement="[this] spawn BRAF_fnc_SmokeOn"; position="pilotcontrol"; radius=10; onlyforplayer=1; showWindow=0; }; Requirments: - Compatible aircraft must have a config definition for all sub-sytems that will be invoked by this function. 1- Aircrfat model must have memory a point called "smoker_spawn" definig the position where to attach smoke generator. Result: Smoke effect particles will be ejected from aircrafts right exhaustor, and vehicleChat will say "Fumaça Já!" */ /*-------------------------------------------------------------------------------------------------- Conditions to play the function: 1- Aircraft is alive. 2- Aircraft speed > 1. 3- "braf_smoke_on" variable == true --------------------------------------------------------------------------------------------------*/ private _plane = param [0, objNull]; if (isNull _plane || { !alive _plane || { speed _plane < 1 } } ) exitWith {}; if (_plane getVariable ["braf_smoke_on", true]) then { /*-------------------------------------------------------------------------------------------------- Creation of smoke generator and attaching it to vehicle's "smoker_spawn" memory point --------------------------------------------------------------------------------------------------*/ _plane spawn { private _plane = _this; _plane vehicleChat "Fumaça Já!"; sleep 0.25; private _smoker = "#particlesource" createVehicleLocal [0, 0, 0]; _smoker setParticleParams [ ["\A3\Data_F\ParticleEffects\Universal\Universal", 16, 7, 16, 1], "", "Billboard", 1, 16, // AnimationName, type, timerPeriod, lifeTime [0, 0, 0], // position relative to referenceObject [0, 0, 0], // velocity 0, 10, 7.9, 0.066, [1, 3, 6], // Rotation, Weight, Volume, Rubbing, size [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0.75], [1, 1, 1, 0.5], [1, 1, 1, 0.25], [1, 1, 1, 0] // Array for smoke colors [R, G, B, A] ], [0.25], // animationPhase 1, 0, // randomDerictionPeriod, randomDirectionIntensity "", "", // onTimer, beforeDestroy _smoker// referenceObject ]; _smoker setParticleRandom [0, [0.25, 0.25, 0], [0.2, 0.2, 0], 0, 0.25, [0, 0, 0, 0.1], 0, 0]; _smoker setDropInterval 0.025; _smoker setDir (getDir _plane); _smoker setPosASL (_plane modelToWorld [0, 0, 0]); _smoker attachTo [_plane, [0, 0, 0], "smoker_spawn"]; _plane setVariable ["smoker", _smoker]; _plane setVariable ["braf_smoke_on", false]; }; } else { private _smoker = _plane GetVariable ["smoker", objNull]; deleteVehicle _smoker; _plane vehicleChat "Fumaça Off!"; _plane setVariable ["smoker", nil]; _plane setVariable ["braf_smoke_on", true]; };