mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Code cleanup of Disarming module
This commit is contained in:
parent
2b3c936e99
commit
156609aab2
@ -1,4 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
["DisarmDropItems", {_this call FUNC(eventTargetStart)}] call EFUNC(common,addEventHandler);
|
||||
["DisarmDebugCallback", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler);
|
||||
["DisarmDropItems", FUNC(eventTargetStart)] call EFUNC(common,addEventHandler);
|
||||
["DisarmDebugCallback", FUNC(eventCallerFinish)] call EFUNC(common,addEventHandler);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Checks the conditions for being able to disarm a unit
|
||||
*
|
||||
* Arguments:
|
||||
@ -15,17 +16,17 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_target);
|
||||
|
||||
private ["_animationStateCfgMoves", "_putDownAnim"];
|
||||
|
||||
params ["_target"];
|
||||
|
||||
//Check animationState for putDown anim
|
||||
//This ensures the unit doesn't have to actualy do any animation to drop something
|
||||
//This should always be true for the 3 possible status effects that allow disarming
|
||||
_animationStateCfgMoves = getText (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _target) >> "actions");
|
||||
if (_animationStateCfgMoves == "") exitWith {false};
|
||||
if (_animationStateCfgMoves == "") exitWith { false };
|
||||
_putDownAnim = getText (configFile >> "CfgMovesBasic" >> "Actions" >> _animationStateCfgMoves >> "PutDown");
|
||||
if (_putDownAnim != "") exitWith {false};
|
||||
if (_putDownAnim != "") exitWith { false };
|
||||
|
||||
|
||||
(alive _target) &&
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Checks the conditions for being able to disarm a unit
|
||||
*
|
||||
* Arguments:
|
||||
@ -16,7 +17,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_player,_target);
|
||||
params ["_player", "_target"];
|
||||
|
||||
([_target] call FUNC(canBeDisarmed)) &&
|
||||
([_target] call FUNC(canBeDisarmed)) &&
|
||||
{([_player, _target, []] call EFUNC(common,canInteractWith))}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Makes a unit drop items
|
||||
*
|
||||
* Arguments:
|
||||
@ -22,13 +23,11 @@
|
||||
|
||||
private ["_fncSumArray", "_return", "_holder", "_dropPos", "_targetMagazinesStart", "_holderMagazinesStart", "_xClassname", "_xAmmo", "_targetMagazinesEnd", "_holderMagazinesEnd", "_holderItemsStart", "_targetItemsStart", "_addToCrateClassnames", "_addToCrateCount", "_index", "_holderItemsEnd", "_targetItemsEnd", "_holderIsEmpty"];
|
||||
|
||||
|
||||
PARAMS_3(_caller,_target,_listOfItemsToRemove);
|
||||
DEFAULT_PARAM(3,_doNotDropAmmo,false); //By default units drop all weapon mags when dropping a weapon
|
||||
params ["_caller", "_target", "_listOfItemsToRemove", ["_doNotDropAmmo", false, [false]]]; //By default units drop all weapon mags when dropping a weapon
|
||||
|
||||
_fncSumArray = {
|
||||
_return = 0;
|
||||
{_return = _return + _x;} forEach (_this select 0);
|
||||
{_return = _return + _x;} count (_this select 0);
|
||||
_return
|
||||
};
|
||||
|
||||
@ -48,7 +47,7 @@ if (!_doNotDropAmmo) then {
|
||||
if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith {
|
||||
_holder = _x;
|
||||
};
|
||||
} forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
|
||||
} count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
|
||||
};
|
||||
|
||||
//Create a new weapon holder
|
||||
@ -124,7 +123,7 @@ _addToCrateCount = [];
|
||||
_addToCrateCount pushBack 1;
|
||||
};
|
||||
};
|
||||
} forEach _targetItemsStart;
|
||||
} count _targetItemsStart;
|
||||
|
||||
//Add the items to the holder (combined to reduce addItemCargoGlobal calls)
|
||||
{
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Recieves a possible error code from FUNC(eventTargetFinish)
|
||||
*
|
||||
* Arguments:
|
||||
@ -17,7 +18,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_3(_caller,_target,_errorMsg);
|
||||
params ["_caller", "_target", "_errorMsg"];
|
||||
|
||||
if (_caller != ACE_player) exitWith {};
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* After FUNC(disarmDropItems) has completed, passing a possible error code.
|
||||
* Passes that error back to orginal caller.
|
||||
*
|
||||
@ -18,7 +19,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_3(_caller,_target,_errorMsg);
|
||||
params ["_caller", "_target", "_errorMsg"];
|
||||
|
||||
if (_errorMsg != "") then {
|
||||
diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", ACE_time, _this];
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Disarm Event Handler, Starting func, called on the target.
|
||||
* If target has to remove uniform/vest, this will add all uniform/vest items to the drop list.
|
||||
*
|
||||
@ -18,7 +19,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_3(_caller,_target,_listOfObjectsToRemove);
|
||||
params ["_caller", "_target", "_listOfObjectsToRemove"];
|
||||
|
||||
private "_itemsToAdd";
|
||||
|
||||
@ -30,12 +31,12 @@ _itemsToAdd = [];
|
||||
if (_x == (vest _target)) then {
|
||||
_itemsToAdd = _itemsToAdd + (vestItems _target);
|
||||
};
|
||||
} forEach _listOfObjectsToRemove;
|
||||
} count _listOfObjectsToRemove;
|
||||
|
||||
{
|
||||
if (!(_x in _listOfObjectsToRemove)) then {
|
||||
_listOfObjectsToRemove pushBack _x;
|
||||
};
|
||||
} forEach _itemsToAdd;
|
||||
} count _itemsToAdd;
|
||||
|
||||
[_caller, _target, _listOfObjectsToRemove] call FUNC(disarmDropItems);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Helper function to get all gear of a container
|
||||
*
|
||||
* Arguments:
|
||||
@ -15,15 +16,17 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_target);
|
||||
params ["_target"];
|
||||
|
||||
private ["_allGear"];
|
||||
|
||||
_allGear = [[],[]];
|
||||
|
||||
_items = [];
|
||||
_counts = [];
|
||||
{
|
||||
(_allGear select 0) append (_x select 0);
|
||||
(_allGear select 1) append (_x select 1);
|
||||
} forEach [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)];
|
||||
_x params ["_item", "_count"];
|
||||
_item append _item;
|
||||
_count append _count;
|
||||
} count [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)];
|
||||
|
||||
_allGear
|
||||
[_items,_counts] // Return
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Helper function to get all gear of a unit.
|
||||
*
|
||||
* Arguments:
|
||||
@ -15,7 +16,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_target);
|
||||
params ["_target"];
|
||||
|
||||
private ["_allItems", "_classnamesCount", "_index", "_uniqueClassnames"];
|
||||
|
||||
@ -49,6 +50,6 @@ _classnamesCount = [];
|
||||
_uniqueClassnames pushBack _x;
|
||||
_classnamesCount pushBack 1;
|
||||
};
|
||||
} forEach _allItems;
|
||||
} count _allItems;
|
||||
|
||||
[_uniqueClassnames, _classnamesCount]
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Opens the disarm dialog (allowing a person to remove items)
|
||||
*
|
||||
* Arguments:
|
||||
@ -15,21 +16,9 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define TEXTURES_RANKS [ \
|
||||
"", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \
|
||||
"\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \
|
||||
]
|
||||
|
||||
PARAMS_2(_caller,_target);
|
||||
params ["_caller", "_target"];
|
||||
private "_display";
|
||||
|
||||
#define DEFUALTPATH "\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa"
|
||||
//Sanity Checks
|
||||
if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");};
|
||||
if (!([_player, _target] call FUNC(canPlayerDisarmUnit))) exitWith {ERROR("Can't Disarm Unit");};
|
||||
@ -47,8 +36,8 @@ GVAR(disarmTarget) = _target;
|
||||
//Setup Drop Event (on right pannel)
|
||||
(_display displayCtrl 632) ctrlAddEventHandler ["LBDrop", {
|
||||
if (isNull GVAR(disarmTarget)) exitWith {};
|
||||
PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo);
|
||||
EXPLODE_3_PVT((_itemInfo select 0),_displayText,_value,_data);
|
||||
params ["_ctrl", "_xPos", "_yPos", "_idc", "_itemInfo"];
|
||||
(_itemInfo select 0) params ["_displayText", "_value", "_data"];
|
||||
|
||||
if (isNull GVAR(disarmTarget)) exitWith {ERROR("disarmTarget is null");};
|
||||
|
||||
@ -60,18 +49,18 @@ GVAR(disarmTarget) = _target;
|
||||
|
||||
//Setup PFEH
|
||||
[{
|
||||
private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems", "_holder"];
|
||||
private ["_groundContainer", "_targetContainer", "_playerName", "_icon", "_rankPicture", "_targetUniqueItems", "_holderUniqueItems", "_holder"];
|
||||
disableSerialization;
|
||||
EXPLODE_2_PVT(_this,_args,_pfID);
|
||||
EXPLODE_3_PVT(_args,_player,_target,_display);
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_player", "_target", "_display"];
|
||||
|
||||
if ((!([_player, _target] call FUNC(canPlayerDisarmUnit))) ||
|
||||
{isNull _display} ||
|
||||
{_player != ACE_player}) then {
|
||||
|
||||
[_pfID] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
GVAR(disarmTarget) = objNull;
|
||||
if (!isNull _display) then {closeDialog 0;}; //close dialog if still open
|
||||
if (!isNull _display) then { closeDialog 0; }; //close dialog if still open
|
||||
} else {
|
||||
|
||||
_groundContainer = _display displayCtrl 632;
|
||||
@ -80,8 +69,9 @@ GVAR(disarmTarget) = _target;
|
||||
_rankPicture = _display displayCtrl 1203;
|
||||
|
||||
//Show rank and name (just like BIS's inventory)
|
||||
_rankIndex = ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1);
|
||||
_rankPicture ctrlSetText (TEXTURES_RANKS select _rankIndex);
|
||||
_icon = format [DEFUALTPATH, toLower (rank _target)];
|
||||
if (_icon isEqualTo DEFUALTPATH) then {_icon = ""};
|
||||
_rankPicture ctrlSetText _icon;
|
||||
_playerName ctrlSetText ([GVAR(disarmTarget)] call EFUNC(common,getName));
|
||||
|
||||
//Clear both inventory lists:
|
||||
@ -98,7 +88,7 @@ GVAR(disarmTarget) = _target;
|
||||
if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith {
|
||||
_holder = _x;
|
||||
};
|
||||
} forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
|
||||
} count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
|
||||
|
||||
//If a holder exists, show it's inventory
|
||||
if (!isNull _holder) then {
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Shows a list of inventory items in a listBox control.
|
||||
*
|
||||
* Arguments:
|
||||
@ -17,11 +18,12 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
disableSerialization;
|
||||
PARAMS_2(_listBoxCtrl,_itemsCountArray);
|
||||
|
||||
private ["_classname", "_count", "_displayName", "_picture"];
|
||||
|
||||
params ["_listBoxCtrl", "_itemsCountArray"];
|
||||
|
||||
{
|
||||
private "_configPath";
|
||||
_displayName = "";
|
||||
_picture = "";
|
||||
|
||||
@ -31,21 +33,25 @@ private ["_classname", "_count", "_displayName", "_picture"];
|
||||
if ((_classname != DUMMY_ITEM) && {_classname != "ACE_FakePrimaryWeapon"}) then { //Don't show the dummy potato or fake weapon
|
||||
|
||||
switch (true) do {
|
||||
case (isClass (configFile >> "CfgWeapons" >> _classname)): {
|
||||
_displayName = getText (configFile >> "CfgWeapons" >> _classname >> "displayName");
|
||||
_picture = getText (configFile >> "CfgWeapons" >> _classname >> "picture");
|
||||
case (isClass (configFile >> "CfgWeapons" >> _classname)): {
|
||||
_configPath = (configFile >> "CfgWeapons");
|
||||
_displayName = getText (_configPath >> _classname >> "displayName");
|
||||
_picture = getText (_configPath >> _classname >> "picture");
|
||||
};
|
||||
case (isClass (configFile >> "CfgMagazines" >> _classname)): {
|
||||
_displayName = getText (configFile >> "CfgMagazines" >> _classname >> "displayName");
|
||||
_picture = getText (configFile >> "CfgMagazines" >> _classname >> "picture");
|
||||
case (isClass (configFile >> "CfgMagazines" >> _classname)): {
|
||||
_configPath = (configFile >> "CfgMagazines");
|
||||
_displayName = getText (_configPath >> _classname >> "displayName");
|
||||
_picture = getText (_configPath >> _classname >> "picture");
|
||||
};
|
||||
case (isClass (configFile >> "CfgVehicles" >> _classname)): {
|
||||
_displayName = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
|
||||
_picture = getText (configFile >> "CfgVehicles" >> _classname >> "picture");
|
||||
case (isClass (configFile >> "CfgVehicles" >> _classname)): {
|
||||
_configPath = (configFile >> "CfgVehicles");
|
||||
_displayName = getText (_configPath >> _classname >> "displayName");
|
||||
_picture = getText (_configPath >> _classname >> "picture");
|
||||
};
|
||||
case (isClass (configFile >> "CfgGlasses" >> _classname)): {
|
||||
_displayName = getText (configFile >> "CfgGlasses" >> _classname >> "displayName");
|
||||
_picture = getText (configFile >> "CfgGlasses" >> _classname >> "picture");
|
||||
case (isClass (configFile >> "CfgGlasses" >> _classname)): {
|
||||
_configPath = (configFile >> "CfgGlasses");
|
||||
_displayName = getText (_configPath >> _classname >> "displayName");
|
||||
_picture = getText (_configPath >> _classname >> "picture");
|
||||
};
|
||||
default {
|
||||
ERROR(format ["[%1] - bad classname", _classname]);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
*
|
||||
* Verifies magazines moved with exact ammo counts preserved.
|
||||
* Arrays will be in format from magazinesAmmo/magazinesAmmoCargo
|
||||
* e.g.: [["30Rnd_65x39_caseless_mag",15], ["30Rnd_65x39_caseless_mag",30]]
|
||||
@ -36,6 +37,6 @@ _problem = false;
|
||||
_index = _beginingArray find _x;
|
||||
if (_index == -1) exitWith {_problem = true;};
|
||||
_beginingArray deleteAt _index;
|
||||
} forEach (_endA + _endB);
|
||||
} count (_endA + _endB);
|
||||
|
||||
(!_problem) && {_beginingArray isEqualTo []}
|
||||
|
Loading…
Reference in New Issue
Block a user