Advertisement
papijuan23

UAV FEED PiP

Jun 18th, 2025
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 9.95 KB | Gaming | 0 0
  1. **WORKS ONLY WITH TV "Land_FlatTV_01_F" .  To work properly you need to place a Antena "FPV_Retranslator" no less 50 meters from the TV. Otherwise won't work. **
  2.  
  3.  
  4.  
  5. init.sqf
  6.  
  7. [] execVM "computerInteraction.sqf";
  8.  
  9.  
  10.  
  11. -------------------
  12.  
  13.  
  14. computerInteraction.sqf
  15.  
  16.  
  17. if (!hasInterface) exitWith {};
  18.  
  19. systemChat "📱 tvInteraction.sqf corriendo...";
  20.  
  21. player setVariable ["poweredOnTVs", []];
  22.  
  23. [] spawn {
  24.    private _tvClass = "Land_FlatTV_01_F";
  25.    private _antennaClass = "FPV_Retranslator";
  26.  
  27.    while {true} do {
  28.        private _allTVs = allMissionObjects _tvClass;
  29.  
  30.        {
  31.            private _tv = _x;
  32.  
  33.            if ((player distance _tv) < 3 && {!(_tv getVariable ["menuAdded", false])}) then {
  34.                _tv setVariable ["menuAdded", true];
  35.  
  36.                _tv addAction ["🔌 Prender / Apagar TV", {
  37.                    params ["_target"];
  38.                    private _list = player getVariable ["poweredOnTVs", []];
  39.  
  40.                    // Chequear antena cerca
  41.                    private _antena = false;
  42.                    {
  43.                        if (alive _x && (_x distance _target) < 50) exitWith { _antena = true };
  44.                    } forEach allMissionObjects "FPV_Retranslator";
  45.  
  46.                    if (_target in _list) then {
  47.                        // APAGAR TV = también desconecta y limpia todo
  48.                        _list = _list - [_target];
  49.                        player setVariable ["poweredOnTVs", _list];
  50.  
  51.                        private _cam = _target getVariable ["camObject", objNull];
  52.                        if (!isNull _cam) then { deleteVehicle _cam };
  53.  
  54.                        _target setVariable ["droneConnected", false];
  55.                        _target setVariable ["disconnectActionAdded", false];
  56.                        _target setVariable ["camObject", objNull];
  57.                        _target setVariable ["droneMenuAdded", false];
  58.  
  59.                        private _actions = actionIDs _target;
  60.                        {
  61.                            if (_x != -1) then {
  62.                                _target removeAction _x;
  63.                            };
  64.                        } forEach _actions;
  65.  
  66.                        _target setVariable ["menuAdded", false];
  67.                        _target setObjectTextureGlobal [0, "#(argb,8,8,3)color(0,0,0,0)"];
  68.                        systemChat "💤 TV apagada.";
  69.                    } else {
  70.                        // ENCENDER TV
  71.                        _list pushBackUnique _target;
  72.                        player setVariable ["poweredOnTVs", _list];
  73.  
  74.                        _target setVariable ["droneConnected", false];
  75.                        _target setVariable ["disconnectActionAdded", false];
  76.                        _target setVariable ["camObject", objNull];
  77.                        _target setVariable ["droneMenuAdded", false];
  78.  
  79.                        if (_antena) then {
  80.                            _target setObjectTextureGlobal [0, "#(argb,8,8,3)color(1,1,0,1)"];
  81.                        } else {
  82.                            _target setObjectTextureGlobal [0, "#(argb,8,8,3)color(0,0,1,1)"];
  83.                        };
  84.  
  85.                        systemChat "🔦 TV encendida.";
  86.                    };
  87.                }];
  88.            };
  89.        } forEach _allTVs;
  90.  
  91.        private _list = player getVariable ["poweredOnTVs", []];
  92.        private _allAntennas = allMissionObjects _antennaClass;
  93.  
  94.        {
  95.            private _tv = _x;
  96.  
  97.            if (!alive _tv) then {
  98.                _list = _list - [_tv];
  99.                player setVariable ["poweredOnTVs", _list];
  100.            } else {
  101.                private _hasAntenna = false;
  102.                {
  103.                    if (alive _x && (_x distance _tv) < 50) exitWith {
  104.                        _hasAntenna = true;
  105.                    };
  106.                } forEach _allAntennas;
  107.  
  108.                if (_hasAntenna) then {
  109.                    if (!(_tv getVariable ["droneMenuAdded", false])) then {
  110.                        _tv setVariable ["droneMenuAdded", true];
  111.  
  112.                        private _drones = vehicles select { alive _x && {typeOf _x == "B_UAV_01_F"} };
  113.  
  114.                        {
  115.                            private _drone = _x;
  116.                            private _rttName = format ["uavRtt_%1", _forEachIndex];
  117.  
  118.                            _tv addAction [format ["🎯 Mostrar cámara Drone %1 (%2m)", _forEachIndex + 1, round (_drone distance _tv)], {
  119.                                params ["_target", "_caller", "_actionId", "_args"];
  120.                                _args params ["_drone", "_rttName"];
  121.  
  122.                                private _cam = "camera" camCreate getPosASL _drone;
  123.                                _cam cameraEffect ["Internal", "Back", _rttName];
  124.                                _cam attachTo [_drone, [0,0,0], "PiP0_pos"];
  125.  
  126.                                [_cam, _drone] spawn {
  127.                                    params ["_cam", "_drone"];
  128.                                    while {alive _cam && alive _drone} do {
  129.                                        private _dir = (_drone selectionPosition "PiP0_pos") vectorFromTo (_drone selectionPosition "PiP0_dir");
  130.                                        _cam setVectorDirAndUp [_dir, _dir vectorCrossProduct [-(_dir select 1), _dir select 0, 0]];
  131.                                        sleep 0.1;
  132.                                    };
  133.                                };
  134.  
  135.                                _target setVariable ["droneConnected", true];
  136.                                _target setVariable ["camObject", _cam];
  137.                                _target setObjectTextureGlobal [0, format ["#(argb,512,512,1)r2t(%1,1)", _rttName]];
  138.                                systemChat format ["📺 Mostrando Drone en TV - %1", _rttName];
  139.  
  140.                                if (!(_target getVariable ["disconnectActionAdded", false])) then {
  141.                                    private _disconnectActionId = _target addAction ["🛑 Desconectar cámara", {
  142.                                        params ["_target"];
  143.  
  144.                                        private _antena2 = false;
  145.                                        {
  146.                                            if (alive _x && (_x distance _target) < 50) exitWith { _antena2 = true };
  147.                                        } forEach allMissionObjects "FPV_Retranslator";
  148.  
  149.                                        private _cam2 = _target getVariable ["camObject", objNull];
  150.                                        if (!isNull _cam2) then { deleteVehicle _cam2 };
  151.  
  152.                                        _target setVariable ["droneConnected", false];
  153.                                        _target setVariable ["disconnectActionAdded", false];
  154.                                        _target setVariable ["camObject", objNull];
  155.  
  156.                                        if (_antena2) then {
  157.                                            _target setObjectTextureGlobal [0, "#(argb,8,8,3)color(1,1,0,1)"];
  158.                                        } else {
  159.                                            _target setObjectTextureGlobal [0, "#(argb,8,8,3)color(0,0,1,1)"];
  160.                                        };
  161.  
  162.                                        systemChat "📺 Cámara desconectada.";
  163.  
  164.                                        _this select 2 call {
  165.                                            private _actionId = _this;
  166.                                            _target removeAction _actionId;
  167.                                        };
  168.                                    }];
  169.                                    _target setVariable ["disconnectActionAdded", true];
  170.                                };
  171.  
  172.                                [_target, _drone] spawn {
  173.                                    params ["_tvMonitor", "_uav"];
  174.                                    waitUntil { sleep 1; !alive _uav };
  175.                                    _tvMonitor setVariable ["droneConnected", false];
  176.                                    _tvMonitor setVariable ["disconnectActionAdded", false];
  177.                                    _tvMonitor setVariable ["camObject", objNull];
  178.                                    _tvMonitor setObjectTextureGlobal [0, "#(argb,8,8,3)color(1,0,0,1)"];
  179.                                    systemChat "📱 Drone destruido. TV en rojo.";
  180.                                };
  181.  
  182.                            }, [_drone, _rttName]];
  183.                        } forEach _drones;
  184.                    };
  185.                } else {
  186.                    // SIN ANTENA: desconectar y limpiar
  187.                    if (_tv getVariable ["droneConnected", false]) then {
  188.                        private _cam = _tv getVariable ["camObject", objNull];
  189.                        if (!isNull _cam) then { deleteVehicle _cam };
  190.  
  191.                        _tv setVariable ["droneConnected", false];
  192.                        _tv setVariable ["disconnectActionAdded", false];
  193.                        _tv setVariable ["camObject", objNull];
  194.                        _tv setObjectTextureGlobal [0, "#(argb,8,8,3)color(1,0,0,1)"];
  195.                        systemChat "📡 Feed perdido: sin antena.";
  196.                    } else {
  197.                        _tv setObjectTextureGlobal [0, "#(argb,8,8,3)color(0,0,1,1)"];
  198.                    };
  199.  
  200.                    if (_tv getVariable ["droneMenuAdded", false]) then {
  201.                        _tv setVariable ["droneMenuAdded", false];
  202.  
  203.                        private _actions = actionIDs _tv;
  204.                        {
  205.                            if (_x != -1) then {
  206.                                _tv removeAction _x;
  207.                            };
  208.                        } forEach _actions;
  209.  
  210.                        _tv setVariable ["menuAdded", false];
  211.                    };
  212.                };
  213.            };
  214.        } forEach _list;
  215.  
  216.        sleep 0.5;
  217.    };
  218. };
  219.  
  220.  
  221.  
  222. ------------------------------
  223.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement