Jump to content

o5_

Member
  • Content Count

    47
  • Joined

  • Last visited

  • Medals

Posts posted by o5_


  1. ACC4I - Air Craft Command Control Computers Communications and Intelligence 

     

    This script/mod brings enhanced situational awareness and targeting capabilities for air Craft (something I feel the game is lacking).

     

    + adds an invisible UAV to serve as the targeting pod and laser
    + Interactive MFD
    + adds ability to interact with data links in real time
    + adds ability to interact with sensors in real time
    + TGP camera can lock to position or follow pilots view
    + TGP cam has night vision, IR+, and IR-
    + Adds navigational display
    + TGP cam and navigational display zoom
    + adds ability to cycle know targets present on data link and those known to pilot (I doubt the pilot would have knowledge of targets that the sensors don't). I plan to make the latter an option you can disable
    + while cycling system targets the TGP will lock to the current target, if in range (currently 3km)

     

     This is very much a work in progress, but I want to share it as a proof of concept to get feedback for suggestions and help if/where needed. Right now it's a set of scripts (easily hosted on a server and remote executed for clients). When it reaches a stable and near complete state I'll package it as a mod.

     

    Controls (editable in game settings > controls > add-on settings)
    Ctrl+z: toggle TGP cam mode
    Ctrl+x: ACC4I action menu
    Ctrl+c: MFD interaction
    Ctrl+v: TGP/nav zoom out
    Ctrl+b: TGP/nav zoom in

    Ctrl+n: arm/desarm TGP laser

     

    When you climb in a Air Craft you have to initialize ACC4I with Ctrl+x

     

    *Download example mission*

    • Like 2

  2. ACC4I - Air Craft Command Control Computers Communications and Intelligence 

     

    This script/mod brings enhanced situational awareness and targeting capabilities for air Craft (something I feel the game is lacking).

     

    + adds an invisible UAV to serve as the targeting pod and laser
    + Interactive MFD
    + adds ability to interact with data links in real time
    + adds ability to interact with sensors in real time
    + TGP camera can lock to position or follow pilots view
    + TGP cam has night vision, IR+, and IR-
    + Adds navigational display
    + TGP cam and navigational display zoom
    + adds ability to cycle know targets present on data link and those known to pilot (I doubt the pilot would have knowledge of targets that the sensors don't). I plan to make the latter an option you can disable
    + while cycling system targets the TGP will lock to the current target, if in range (currently 3km)

     

     This is very much a work in progress, but I want to share it as a proof of concept to get feedback for suggestions and help if/where needed. Right now it's a set of scripts (easily hosted on a server and remote executed for clients). When it reaches a stable and near complete state I'll package it as a mod.

     

    Controls (editable in game settings > controls > add-on settings)
    Ctrl+z: toggle TGP cam mode
    Ctrl+x: ACC4I action menu
    Ctrl+c: MFD interaction
    Ctrl+v: TGP/nav zoom out
    Ctrl+b: TGP/nav zoom in

    Ctrl+n: arm/disarm TGP laser

     

    When you climb in a Air Craft you have to initialize ACC4I with Ctrl+x

     

    *download mission template with scripts*

    • Thanks 1

  3. Gentlemen, greetings again. I created a display control to mimic a MFD screen with a map/nav page with the following code...

        with uiNamespace do {
            disableSerialization;
            TGPMFD = findDisplay 46 ctrlCreate ["RscPicture", 89978];
            TGPMFD ctrlSetPosition [
                0.69 * safezoneW + safezoneX,
                0.578 * safezoneH + safezoneY,
                0.31 * safezoneW,
                0.415 * safezoneH
            ];
            TGPMFD ctrlSetText "ACC4I\mfd.paa";
    
            TGPNav = findDisplay 46 ctrlCreate ["RscMapControl", 89980];
            TGPNav ctrlSetPosition [
                0.7205 * safezoneW + safezoneX,
                0.619 * safezoneH + safezoneY,
                0.2475 * safezoneW,
                0.33 * safezoneH
            ];
    	};

    I have it updating properly but I'll use this picture to describe the issue...

    .x8Hdpca.jpg

     

    any ideas how I can fix this. I think I have to center the map on the center of the control.?.? Thank you!


  4. so I spend a lot of time playing arma by myself so this is something that I would enjoy. whats the best way to control the main gun as the pilot? I'll include a few ideas I had and hopefully someone can provide some insight towards a better solution.

     

    #1.

            private _laser = ("LaserTargetW" createVehicleLocal [0,0,0]);
            private _gunner = ((group player) createUnit ["B_soldier_F", [0,0,0], [], 0, "NONE"]);
    
            missionNamespace setVariable ["LASE", _laser];
            missionNamespace setVariable ["GUN", _gunner];
    
            _gunner moveInAny (vehicle player);
    
            hideObject _gunner;
            _gunner setSpeaker "NoVoice";
            _gunner setSkill 1;
            _gunner disableAI "TARGET";
            _gunner disableAI "AUTOTARGET";
            _gunner disableAI "AUTOCOMBAT";
            _gunner disableAI "FSM";
            (group player) setBehaviour "COMBAT";
            (group player) setCombatMode "BLUE";
    
            [_laser,_gunner] spawn {
                _laser = (_this param [0]);
                _gunner = (_this param [1]);
    
                waitUntil {
                    _laser setPos (AGLtoASL (screenToWorld [.5,.5]));
                    //_gunner reveal _laser;
                    //_gunner doTarget _laser;
                    (not (missionNamespace getVariable "laserOn"))
                };
            };
    
            _gunner commandTarget _laser;

    or use an actual laser

     

    2.

    animateSource:

    AH99 animateSource ["MainTurret", -rad 90];
    AH99 animateSource ["MainGun", rad 30];

    what do you guys think? are there better ideas or methods? thanks.

     

     

    • Like 2

  5. So as the title states I'm curious what you all think about efficiency/optimizations when it comes to writing a lengthy script/mod for a mission. My current scripted mod is AC-C4I (Air Craft Command, Contol, Computers, Communications, & Intelligence). It has to do with sensors and targeting. The scripts have a lot of "waitUntil" commands for locking the targeting camera to screenToWorld amongst other functions. What would be the most efficient way to write this/integrate it into a mission. I can write the whole thing in one file and "call compile preprocessFileLineNumbers" on init. I can create a CfgFunctions.hpp and add it to the description.ext, or I could make it an FSM. I'd love to hear from you guys. Thanks.


  6. if I had the darter I could lock the camera simply by doing-

    _uav lockCameraTo [(screenToworld [0.5,0.5]), [0]];

    and if I wanted to show an on screen PIP of the uav feed I create a camera object and place it like this-

    _cam attachTo [_uav, [0,0,0], "PiP0_pos"];

    how can I do both of these for the pilotCamera found on planes in the new jets DLC? Thanks guys.

     

    -o5


  7. Here is what I currently use....

     

    Init.sqf:

        if ((not (hasInterface)) and (not (isDedicated))) then {
            [] spawn {
                waitUntil {!isNull player};
                HC_init = (vehicle player);
                publicVariableServer "HC_init";
            };
        };
    

    initServer.sqf:

    missionNamespace setVariable ["HCs",[]];
    
    "HC_init" addPublicVariableEventHandler {
        _hc_name = (_this select 1);
        _hc_id   = (owner _hc_name);
        _hcs = (missionNamespace getVariable "HCs");
        _hcs set [(count _hcs), [_hc_name,_hc_id]];
        missionNamespace setVariable ["HCs",_hcs];
    };

     

     

    as the title says, is there a more efficient way to accomplish this? Thanks.


  8. Any luck with this? I'm trying to do the same thing and I've tried syncing a side logic to the SectorTactic then syncing my spawned units to the side logic, syncing directly to the SectorTactic and to the spawnAI module. Its a great idea though.

     

    EDIT: I found this in the functions viewer...

     

    private["_module"];
    
    _module = _this param [0,objNull,[objNull]];
    
    /*--------------------------------------------------------------------------------------------------
    
    	RUN ONCE
    
    --------------------------------------------------------------------------------------------------*/
    private["_initialized"];
    
    _initialized 	= missionNamespace getVariable ["bis_fnc_moduleSpawnAISectorTactic_initialized",false];
    
    //make sure the module script runs only once
    if (_initialized) exitWith {}; missionNamespace setVariable ["bis_fnc_moduleSpawnAISectorTactic_initialized",true];
    
    /*--------------------------------------------------------------------------------------------------
    
    	LOAD FUNCTIONS
    
    --------------------------------------------------------------------------------------------------*/
    _path = "\A3\Modules_F_Heli\Misc\Functions\ModuleSpawnAISectorTactic\";
    [
    	_path,
    	"bis_fnc_moduleSpawnAISectorTactic_",
    	[
    		"enableAI",
    		"disableAI",
    		"startFSM",
    		"initGroup",
    		"copyGroup",
    		"getNearTransportVehicle",
    		"getGrpAvgMagazines",
    		"execWidgetFSM",
    		"deployLocValid",
    		"getGroupIdVar",
    		"resetEventHandlerFlags",
    		"adjustGear",
    		"widgetInit",
    		"widgetUpdate",
    		"isVehicleArmed",
    		"getVehicleWeapons",
    		"vehicleHit",
    		"splitGroup",
    		"unstuck",
    		"getClosestSector",
    		"main"
    	]
    ]
    call bis_fnc_loadFunctions;
    
    /*--------------------------------------------------------------------------------------------------
    
    	INITIALIZE EMITTERS
    
    --------------------------------------------------------------------------------------------------*/
    private["_affectedEmitters","_allEmitters"];
    
    _affectedEmitters = [_module,["ModuleSpawnAI_F"]] call bis_fnc_synchronizedObjects;
    _allEmitters = allMissionObjects "ModuleSpawnAI_F";
    
    if (count _affectedEmitters == 0) then
    {
    	_affectedEmitters =+ _allEmitters;
    };
    
    {
    	if (_x in _affectedEmitters) then
    	{
    		_x setVariable ["useSectorTactic",true];
    	}
    	else
    	{
    		_x setVariable ["useSectorTactic",false];
    	};
    }
    forEach _allEmitters;
    
    /*--------------------------------------------------------------------------------------------------
    
    	INITIALIZE SECTORS & AREAS & TRIGGERS
    
    --------------------------------------------------------------------------------------------------*/
    private["_fn_onSectorCaptured"];
    
    bis_fnc_moduleSpawnAISectorTactic_areas			= [];
    bis_fnc_moduleSpawnAISectorTactic_sectors		= [true] call bis_fnc_moduleSector;
    bis_fnc_moduleSpawnAISectorTactic_sectorsWest		= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsEast		= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsGuer		= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonWest 	= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonEast 	= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonGuer 	= [];
    bis_fnc_moduleSpawnAISectorTactic_sectorsUnknown 	= [];
    
    _fn_onSectorCaptured =
    {
    	private["_sector","_capper","_looser"];
    
    	_sector = _this param [0,objNull,[objNull]];
    	_capper = _this param [1,west,[west]];
    	_looser = _this param [2,west,[west]];
    
    	_capperSectors = missionNamespace getVariable [format["bis_fnc_moduleSpawnAISectorTactic_sectors%1",_capper],[]];
    	_looserSectors = missionNamespace getVariable [format["bis_fnc_moduleSpawnAISectorTactic_sectors%1",_looser],[]];
    
    	_capperSectors = _capperSectors + [_sector];
    	_looserSectors = _looserSectors - [_sector];
    
    	missionNamespace setVariable [format["bis_fnc_moduleSpawnAISectorTactic_sectors%1",_capper],_capperSectors];
    	missionNamespace setVariable [format["bis_fnc_moduleSpawnAISectorTactic_sectors%1",_looser],_looserSectors];
    
    	bis_fnc_moduleSpawnAISectorTactic_sectorsNonWest = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsWest;
    	bis_fnc_moduleSpawnAISectorTactic_sectorsNonEast = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsEast;
    	bis_fnc_moduleSpawnAISectorTactic_sectorsNonGuer = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsGuer;
    };
    
    private["_area","_sector"];
    
    {
    	if (true) then
    	{
    		_sector = _x;
    
    		//setup event handler for tracking changes of the sector ownership
    		[_sector,"ownerChanged",_fn_onSectorCaptured] call bis_fnc_addScriptedEventHandler;
    
    		//get area synced with the sector
    		_area = [_sector, "LocationArea_F", true] call bis_fnc_synchronizedObjects;
    
    		if (count _area == 0) exitWith
    		{
    			["[x] No valid area is linked to the sector %1!", _sector] call bis_fnc_error;
    		};
    
    		if (count _area > 1) exitWith
    		{
    			["[x] More then 1 area is linked to the sector %1!", _sector] call bis_fnc_error;
    		};
    
    		_area = _area select 0;
    
    		_sector setVariable ["area",_area];
    		_sector setVariable ["position",getPos _area];
    		_area setVariable ["sector",_sector];
    
    		bis_fnc_moduleSpawnAISectorTactic_areas set [count bis_fnc_moduleSpawnAISectorTactic_areas, _area];
    	};
    }
    forEach bis_fnc_moduleSpawnAISectorTactic_sectors;
    
    //initialize gvars with sector owners
    private["_sector","_owner","_sectors"];
    
    {
    	_sector  = _x;
    	_owner   = _sector getVariable ["owner","Unknown"];
    	_sectors = missionNamespace getVariable format["bis_fnc_moduleSpawnAISectorTactic_sectors%1",_owner];
    	_sectors set [count _sectors, _sector];
    }
    forEach bis_fnc_moduleSpawnAISectorTactic_sectors;
    
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonWest = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsWest;
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonEast = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsEast;
    bis_fnc_moduleSpawnAISectorTactic_sectorsNonGuer = bis_fnc_moduleSpawnAISectorTactic_sectors - bis_fnc_moduleSpawnAISectorTactic_sectorsGuer;
    
    private["_area","_triggers"];
    
    //get all triggeres and store them in areas and sectors
    {
    	_area = _x;
    	_triggers = [_area,"EmptyDetector"] call bis_fnc_synchronizedObjects;
    
    	_area setVariable ["triggers",_triggers];
    	(_area getVariable "sector") setVariable ["triggers",_triggers];
    }
    forEach bis_fnc_moduleSpawnAISectorTactic_areas;
    
    /*--------------------------------------------------------------------------------------------------
    
    	START THE GROUP MONITOR
    
    --------------------------------------------------------------------------------------------------*/
    [] spawn bis_fnc_moduleSpawnAISectorTactic_main;

    anyone know how to do what LT.DANG is asking based on the code above? Thanks.

×