Andrew_S90

DualArms - Two Primary Weapons

68 posts in this topic

Dual Arms

This is mod that allows use of two primary weapons, one in your main slot one in your launcher slot.

You can download the mod from here: http://steamcommunity.com/sharedfiles/filedetails/?id=1334412770

Now on A3Launcher! Thanks Maca!

There are some important overrides that need to be made to make this work with Exile, out of the box it has iffy results and sometimes the eventhandlers would overwrite each other I will provide instructions how to combine my eventHandlers with Exiles. Once the overrides work, then this will work great, just like it would in singleplayer.

 

Current bug: See the second weapon in the trader with an error image. Will take a look tomorrow solving this so you will not be able to see them in the trader.

Current feature: will stand up if you swap weapons while crouching/prone. This acts like exiles autorun.

 

 

Installation 

Client:

Step 1:

Paste the following into your description.ext - its very important because you need to override my hook file to disable the eventhandlers!! Otherwise it will break.

#include "custom\dual_arms\CfgSecondaryWeapons.hpp"

Inside CfgSecondaryWeapons you can turn addactions on and off, drop weapons on death on and off, block weapons as well as override any of my script files.

In mission.sqm please add "secondary_weapons" to addons to require players to have the mod, plus the server needs it as well. Like this:

addOns[]=
	{
		"exile_client",
		"secondary_weapons",
		"a3_map_altis"
	};

You will need to launch the @DualArms mod with your server.

 

Step 2:

The following overrides need to be made

ExileClient_gui_hud_event_onKeyUp

On line 170 (original files)

The code needs to be modified to:

			//Dual Arms Start
				private _dialog = uiNameSpace getVariable ["RscDisplayInventory", displayNull];

				if (secondaryWeapon player != "") then
				{
					if (((secondaryWeapon player) splitString "_") select ((count ((secondaryWeapon player) splitString "_"))-1) == "secondary") then 
					{
						if(!(SecondaryWeaponsSwapping) && (_dialog isEqualTo displayNull)) then
						{
							(primaryWeapon player) spawn SecondaryWeapons_events_swapSecondaryWeapon;
						};
					} else {
						if (secondaryWeapon player != currentWeapon player) then
						{
							player selectWeapon (secondaryWeapon player);
						};
					};
				} else {
					if (primaryWeapon player != "") then 
					{
						if(!(SecondaryWeaponsSwapping) && (_dialog isEqualTo displayNull)) then
						{
							(primaryWeapon player) spawn SecondaryWeapons_events_addSecondaryWeapon;
						};
					};
				};
				//Dual Arms End

ExileClient_object_player_event_onInventoryClosed

after like 16:

//Dual Arms
call SecondaryWeapons_events_onInventoryClosed;

ExileClient_object_player_event_onInventoryOpened

Most important override!!

Spoiler

Replace with a new line of private variables:


private ["_cancelEvent", "_container", "_secondaryContainer", "_throw", "_dialog", "_BG", "_slot", "_prim", "_posSlot", "_posBtn", "_buttonDown", "_buttonUp", "_cover", "_pic", "_icoB", "_ico", "_SecondaryWeaponItems"]; 
 

Then after the last throw for the old chest and before ExileClientInventoryOpened = true; 

paste

 


//*************Dual Arms Start
	if (SecondaryWeaponsSwapping) then 
	{
		throw true;
	};
	
	InventoryOpened = true;
	
	disableSerialization;

	_dialog = uiNameSpace getVariable ["RscDisplayInventory", displayNull];



	_BG = _dialog displayCtrl 1247;
	_slot = _dialog displayCtrl 611;
	_prim = _dialog displayCtrl 610;
	
	SecondaryWeaponsAccSlotInfo set [0, ctrlPosition (_dialog displayCtrl 626)];
	SecondaryWeaponsMagazineSlotInfo set [0, ctrlPosition (_dialog displayCtrl 627)];
	SecondaryWeaponsMuzzleSlotInfo set [0, ctrlPosition (_dialog displayCtrl 624)];
	SecondaryWeaponsOpticSlotInfo set [0, ctrlPosition (_dialog displayCtrl 625)];
	SecondaryWeaponsUnderSlotInfo set [0, ctrlPosition (_dialog displayCtrl 642)];

	_posSlot = ctrlPosition _slot;
	SecondaryWeaponsInventoryPosition = _posSlot;
	_posBtn = ctrlPosition _prim;
	
	_buttonDown = _dialog ctrlCreate ["RscActivePictureDown", 1337];
	_buttonDown ctrlSetPosition [((_posBtn select 0) + (_posBtn select 2) - 0.03), (_posBtn select 1),(_posBtn select 2)/12,(_posBtn select 3)];
	_buttonDown ctrlCommit 0;
	
	_buttonUp = _dialog ctrlCreate ["RscActivePictureUp", 6969];
	_buttonUp ctrlSetPosition [((_posSlot select 0) + (_posSlot select 2) - 0.03), (_posSlot select 1),(_posSlot select 2)/12,(_posSlot select 3)];
	_buttonUp ctrlEnable (SecondaryWeaponsClassName != "");
	_buttonUp ctrlCommit 0;

	if (((secondaryWeapon player) !="") && {((secondaryWeapon player) splitString "_") select ((count ((secondaryWeapon player) splitString "_"))-1) == "secondary"}) then 
	{
		SecondaryWeaponsClassName = (secondaryWeapon player);
		
		_cover = _dialog ctrlCreate ["RscText", 1530];

		_cover ctrlSetPosition _posSlot;
		_cover ctrlSetBackgroundColor [0.7,0.7,0.7,0.1];
		_cover ctrlCommit 0;
			   
		_pic = _dialog ctrlCreate ["RscPictureKeepAspect", 1531];

		_pic ctrlSetPosition _posSlot;
		_pic ctrlSetText (getText(configFile >> "cfgWeapons" >> (secondaryWeapon player) >> "img"));
		_pic ctrlCommit 0;	

		{
			_x ctrlSetPosition [0,0,0,0];
			_x ctrlSetScale 0;
			_x ctrlCommit 0;
		} forEach [_slot,_BG];

		
		{
			(_dialog displayCtrl (_x select 1)) ctrlSetPosition [0,0,0,0];
			(_dialog displayCtrl (_x select 1)) ctrlSetScale 0;
			(_dialog displayCtrl (_x select 1)) ctrlCommit 0;
			
			(_dialog displayCtrl (_x select 2)) ctrlSetPosition [0,0,0,0];
			(_dialog displayCtrl (_x select 2)) ctrlSetScale 0;
			(_dialog displayCtrl (_x select 2)) ctrlCommit 0;
			
			_icoB = _dialog ctrlCreate ["RscText", ((_x select 1)*4)];

			_icoB ctrlSetPosition (_x select 0);
			_icoB ctrlSetBackgroundColor [0.7,0.7,0.7,0.1];
			_icoB ctrlCommit 0;
			
			_ico = _dialog ctrlCreate ["RscPictureKeepAspect", ((_x select 2)*4)];

			_ico ctrlSetPosition (_x select 0);
			_ico ctrlSetText (_x select 4);
			_ico ctrlCommit 0;
			
		} forEach [SecondaryWeaponsAccSlotInfo,SecondaryWeaponsMagazineSlotInfo,SecondaryWeaponsMuzzleSlotInfo,SecondaryWeaponsOpticSlotInfo,SecondaryWeaponsUnderSlotInfo];

		_SecondaryWeaponItems = false call SecondaryWeapons_util_Ammo;
		

		if(((_SecondaryWeaponItems select 0) select 1) != "") then
		{
			((_SecondaryWeaponItems select 0) select 1) call SecondaryWeapons_gui_muzzleSlot;
		};
		
		if(count SecondaryWeaponsWeaponInfo > 0 && !((SecondaryWeaponsWeaponInfo select 0) isEqualTo "ARRAY")) then
		{
			(SecondaryWeaponsWeaponInfo select 0) call SecondaryWeapons_gui_accSlot;
		};
		
		if(((_SecondaryWeaponItems select 0) select 2) != "") then
		{
			((_SecondaryWeaponItems select 0) select 2) call SecondaryWeapons_gui_opticSlot;
		};
		
		if(((_SecondaryWeaponItems select 0) select 3) != "") then
		{
			((_SecondaryWeaponItems select 0) select 3) call SecondaryWeapons_gui_underSlot;
		};
		
		if(count (_SecondaryWeaponItems select 1) > 0) then
		{
			(_SecondaryWeaponItems select 1) call SecondaryWeapons_gui_magazineSlot;
		};
	} 
	else 
	{
		SecondaryWeaponsClassName = "";
	};
	
	//*************Dual Arms End

 

ExileClient_object_player_event_onKilled

After line 41 - not inside the brackets add:

//Dual Arms
_this call SecondaryWeapons_events_onKilled;

ExileClient_object_player_event_onTake

After line 15 and before the if statement I added:

//Dual Arms
_this call SecondaryWeapons_events_onTake;

Server:

Step 1:

Handling a disconnecting player, for Exile you will need to modify/make an override for ExileServer_system_network_event_onHandleDisconnect.sqf

You will need the following bit of code to save the users pointer attachment (IR Laser/Flashlight etc and UGL Ammo (HE Rounds etc))

//Dual Arms Start

		_SWInfo = _unit getVariable ["SecondaryWeaponsWeaponInfo", []];
				
		if(count _SWInfo > 0) then
		{
			_uniform = uniformContainer _unit;
			_vest = vestContainer _unit;
			_backpack = backpackContainer _unit;
			_containers = [_uniform, _vest, _backpack];
			{
				_item = _x;
				_className = "";
				_array = false;
				_added = false;
				if(typeName _item isEqualTo "ARRAY") then
				{
					_array = true;
					_className = _x select 0;
				} else {
					_className = _x;
				};
				
				{
					if (!(isNull _x)) then 
					{
						if (_x canAdd [_className, 1]) exitWith 
						{
							if(_array) then
							{
								_unit addMagazine [_className, _item select 1];
							} else {
								_className = [_className, 0, -10] call BIS_fnc_trimString;
								_unit addItem _className;
							};
							_added = true;
						};
					};
					if (_added) exitWith {};
				} forEach _containers;
			} forEach _SWInfo;
		};	
		//Dual Arms End

 

ExileClient_gui_traderDialog_updateInventoryListBox

see override on github to not display secondary weapons in trader menus.

 

Please see this github for an example mission edits:

https://github.com/Andrew-S90/DualArms

Download again is here: http://steamcommunity.com/sharedfiles/filedetails/?id=1334412770

Please post if you have any questions or mods to be added, they will be added in batches.

The current list of supported mods is:

RHSUSAF : http://steamcommunity.com/sharedfiles/filedetails/?id=843577117
RHSAFRF : http://steamcommunity.com/sharedfiles/filedetails/?id=843425103
RHSGREF : http://steamcommunity.com/sharedfiles/filedetails/?id=843593391
RHSSAF : http://steamcommunity.com/sharedfiles/filedetails/?id=843632231
NIArms : http://steamcommunity.com/sharedfiles/filedetails/?id=1208517358
Project Infinite : http://steamcommunity.com/sharedfiles/filedetails/?id=807038742
Exile Mod : http://www.exilemod.com/downloads/
ADR-97 Weapon Pack : http://steamcommunity.com/sharedfiles/filedetails/?id=669962280
Operation: TREBUCHET : http://steamcommunity.com/sharedfiles/filedetails/?id=769440155
Cup Weapons : http://steamcommunity.com/sharedfiles/filedetails/?id=497660133
NATO_Rus_Weapons : http://steamcommunity.com/sharedfiles/filedetails/?id=500929500
Specialist Military Arms (SMA) : http://steamcommunity.com/sharedfiles/filedetails/?id=699630614
The_Unsung_Vietnam_War_Mod : http://steamcommunity.com/sharedfiles/filedetails/?id=943001311
FFAA Mod : http://steamcommunity.com/sharedfiles/filedetails/?id=820994401
VME PLA : http://steamcommunity.com/sharedfiles/filedetails/?id=655153321
2035: Russian Armed Forces : http://steamcommunity.com/sharedfiles/filedetails/?id=543460260
FHQ Firearms : http://steamcommunity.com/sharedfiles/filedetails/?id=402601958
BWMod : http://steamcommunity.com/sharedfiles/filedetails/?id=1200127537
SFP: Swedish Forces Pack : http://steamcommunity.com/sharedfiles/filedetails/?id=826911897
3CB BAF Weapons : http://steamcommunity.com/sharedfiles/filedetails/?id=893339590
Faces of war : http://steamcommunity.com/sharedfiles/filedetails/?id=891433622
IFA3_AIO_LITE : http://steamcommunity.com/sharedfiles/filedetails/?id=660460283
Arma 3 Aegis (Beta) : http://steamcommunity.com/sharedfiles/filedetails/?id=949252631

 

  • Like 18

Share this post


Link to post
Share on other sites

Accidentally used like age-old ExileClient_gui_hud_event_onKeyUp.sqf - the current one is now properly on fix if you grabbed files early or didn't patch my edits in with yours the correct file is now in use :)

  • Like 2

Share this post


Link to post
Share on other sites
Advertisement
1 hour ago, [HG]RaVeN103 said:

Nice addon,:rock:

How about a weight limit? Max mass 200? Maybe it's a bit overpowered to wear 2 heavy Mg's:D

Would be easy enough, all my files are overrideable! ;) 

 

Updated original post to fix a dupe method with the keybind.. if you already grabbed files please make the proper fixes found in the github or original post!

Share this post


Link to post
Share on other sites

PLS. INSTALL VIDEO ...... for EXILE -.-

were have Crash the Database and later killed the Server -.-

THX  

Edited by Mythbustar

Share this post


Link to post
Share on other sites

Looks like someone was inspired by Tapkob .. nice mod! Kudos! Now lets wait till its in main branch since client sided modification is needed, which you cant ask of any admins of hi-pop to tell their children

Edited by parsec
  • Like 1

Share this post


Link to post
Share on other sites
Advertisement

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.