mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into fixFlashlightPrivates
Conflicts: addons/map/stringtable.xml
This commit is contained in:
commit
acc3504d7b
@ -53,6 +53,7 @@ Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
|
||||
Dimaslg <dimaslg@telecable.es>
|
||||
Drill <drill87@gmail.com>
|
||||
Dudakov <dudakov.s@gmail.com>
|
||||
Dslyecxi <dslyecxi@gmail.com>
|
||||
eRazeri
|
||||
evromalarkey <evromalarkey@gmail.com>
|
||||
F3 Project <alanr@ferstaberinde.com>
|
||||
|
22
README.md
22
README.md
@ -1,30 +1,35 @@
|
||||
<p align="center">
|
||||
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" width="480">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/acemod/ACE3/releases">
|
||||
<img src="https://img.shields.io/badge/Version-3.3.2-blue.svg" alt="ACE3 Version">
|
||||
<img src="https://img.shields.io/badge/Version-3.3.2-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
||||
<img src="https://img.shields.io/badge/Download-65.7_MB-green.svg" alt="ACE3 Download">
|
||||
<img src="https://img.shields.io/badge/Download-65.7_MB-green.svg?style=flat-square" alt="ACE3 Download">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?label=Issues" alt="ACE3 Issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
|
||||
</a>
|
||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
||||
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg" alt="BIF Thread">
|
||||
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg?style=flat-square" alt="BIF Thread">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||
<img src="https://img.shields.io/badge/License-GPLv2-red.svg" alt="ACE3 License">
|
||||
<img src="https://img.shields.io/badge/License-GPLv2-red.svg?style=flat-square" alt="ACE3 License">
|
||||
</a>
|
||||
<a href="http://slackin.ace3mod.com/">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg" alt="ACE3 Slack">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg?style=flat-square&label=Slack" alt="ACE3 Slack">
|
||||
</a>
|
||||
<a href="https://travis-ci.org/acemod/ACE3">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg" alt="ACE3 Build Status">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg?style=flat-square&label=Build" alt="ACE3 Build Status">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center"><sup><strong>Requires the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
|
||||
|
||||
<p align="center">
|
||||
<sup><strong>Requires the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>.<br/>
|
||||
Visit us on <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup>
|
||||
</p>
|
||||
|
||||
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
|
||||
|
||||
@ -43,6 +48,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed
|
||||
- Captivity system
|
||||
- Explosives system, including different trigger types
|
||||
- Map screen improvements – marker placement and map tools
|
||||
- Logistics
|
||||
- Advanced missile guidance and laser designation
|
||||
|
||||
#### Additional features
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Captives">
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
@ -99,7 +99,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_CableTieDescription">
|
||||
<English>Cable ties that allow you to restrain prisoners.</English>
|
||||
<German>Kabelbinder ermöglichen es, Gefangene zu fesseln.</German>
|
||||
<German>Mit Kabelbindern können Gefangene gefesselt werden.</German>
|
||||
<Polish>Opaska zaciskowa pozwala na skrępowanie dłoni u więźnia.</Polish>
|
||||
<Spanish>Los precintos permiten maniatar prisioneros</Spanish>
|
||||
<French>Les Serflex permettent de menotter les prisonniers.</French>
|
||||
@ -206,7 +206,7 @@
|
||||
<Polish>Skuwanie sojuszników</Polish>
|
||||
<Spanish>Se puede esposar el bando propio</Spanish>
|
||||
<Czech>Může spoutat spolubojovníky</Czech>
|
||||
<German>Kann Teamkollegen fesseln</German>
|
||||
<German>Kann Kameraden fesseln</German>
|
||||
<Portuguese>Pode algemar o próprio lado</Portuguese>
|
||||
<French>Peut libérer sa propre faction</French>
|
||||
<Hungarian>Saját oldal megbilincselhető</Hungarian>
|
||||
@ -217,7 +217,7 @@
|
||||
<Polish>Czy gracze mogą skuwać sojuszników?</Polish>
|
||||
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
|
||||
<Czech>Mohou hráči spoutat jednotky na své straně</Czech>
|
||||
<German>Können Spieler eigene Einheiten fesseln</German>
|
||||
<German>Spieler können eigene Einheiten fesseln. </German>
|
||||
<Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese>
|
||||
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French>
|
||||
<Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
|
||||
@ -239,7 +239,7 @@
|
||||
<Polish>Gracze mogą skapitulować po schowaniu swojej broni do kabury</Polish>
|
||||
<Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish>
|
||||
<Czech>Hráč se může vzdát poté, co si skryje zbraň</Czech>
|
||||
<German>Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben</German>
|
||||
<German>Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben.</German>
|
||||
<Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese>
|
||||
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French>
|
||||
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
|
||||
@ -247,6 +247,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
|
||||
<English>Require surrendering</English>
|
||||
<German>Benötigt Kapitulation</German>
|
||||
<Polish>Wymagaj kapitulacji</Polish>
|
||||
<Portuguese>Requer rendição</Portuguese>
|
||||
<Russian>Требовать пленения</Russian>
|
||||
@ -254,6 +255,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
|
||||
<English>Require Players to surrender before they can be arrested</English>
|
||||
<German>Spieler müssen sich erst ergeben, bevor sie gefangen genommen werden können</German>
|
||||
<Polish>Wymagaj od graczy kapitulacji zanim będzie można ich zaaresztować</Polish>
|
||||
<Portuguese>Requer que jogadores se rendam antes de poderem ser presos</Portuguese>
|
||||
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
|
||||
@ -261,6 +263,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_SurrenderOnly">
|
||||
<English>Surrendering only</English>
|
||||
<German>Nur Ergeben</German>
|
||||
<Polish>Tylko kapitulacja</Polish>
|
||||
<Portuguese>Somente rendição </Portuguese>
|
||||
<Russian>Только сдавшийся в плен</Russian>
|
||||
@ -268,6 +271,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
|
||||
<English>Surrendering or No weapon</English>
|
||||
<German>Ergeben oder keine Waffe</German>
|
||||
<Polish>Kapitulacja lub brak broni</Polish>
|
||||
<Portuguese>Rendição ou desarmado</Portuguese>
|
||||
<Russian>Сдавшийся или безоружный</Russian>
|
||||
|
@ -133,6 +133,7 @@ PREP(numberToDigitsString);
|
||||
PREP(numberToString);
|
||||
PREP(onAnswerRequest);
|
||||
PREP(owned);
|
||||
PREP(parseList);
|
||||
PREP(player);
|
||||
PREP(playerSide);
|
||||
PREP(positionToASL);
|
||||
|
@ -4,50 +4,41 @@
|
||||
* Used by moduleAssign* within various parts of the ACE3 project.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: list <STRING>
|
||||
* 1: variableName <STRING>
|
||||
* 2: value <ANY>
|
||||
* 0: List <STRING>
|
||||
* 1: Variable Name <STRING>
|
||||
* 2: Value <ANY>
|
||||
* 3: Global <BOOL>
|
||||
* 4: Vehicle <BOOL> (default: false)
|
||||
*
|
||||
* Return Value:
|
||||
* None <NIL>
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* ["text", "variable", value, true] call ace_common_fnc_assignObjectsInList
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_list", "_variable", "_setting", "_global"];
|
||||
params ["_list", "_variable", "_setting", "_global", ["_vehicle", false]];
|
||||
|
||||
if (typeName _list == "STRING") then {
|
||||
private ["_splittedList", "_nilCheckPassedList"];
|
||||
|
||||
_splittedList = [_list, ","] call BIS_fnc_splitString;
|
||||
_nilCheckPassedList = "";
|
||||
|
||||
{
|
||||
_x = [_x] call FUNC(stringRemoveWhiteSpace);
|
||||
if !(isNil _x) then {
|
||||
if (_nilCheckPassedList == "") then {
|
||||
_nilCheckPassedList = _x;
|
||||
} else {
|
||||
_nilCheckPassedList = _nilCheckPassedList + ","+ _x;
|
||||
};
|
||||
};
|
||||
false
|
||||
} count _splittedList;
|
||||
|
||||
_list = [] call compile format["[%1]",_nilCheckPassedList];
|
||||
_list = [_list, true, true] call FUNC(parseList);
|
||||
TRACE_1("Parsed",_list)
|
||||
};
|
||||
|
||||
{
|
||||
if (!isNil "_x") then {
|
||||
if (typeName _x == typeName objNull) then {
|
||||
if (local _x) then {
|
||||
_x setvariable [_variable, _setting, _global];
|
||||
if (_vehicle) then {
|
||||
(vehicle _x) setVariable [_variable, _setting, _global];
|
||||
TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global);
|
||||
} else {
|
||||
_x setVariable [_variable, _setting, _global];
|
||||
TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
false
|
||||
} count _list;
|
||||
|
||||
true
|
||||
|
59
addons/common/functions/fnc_parseList.sqf
Normal file
59
addons/common/functions/fnc_parseList.sqf
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Author: Glowbal, Jonpas
|
||||
* Makes a list from a string using comma as a delimiter, optionally trim or remove whitespace and check each for object existence.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: List <STRING>
|
||||
* 1: Remove or Trim Whitespace <BOOL> (default: false (trim))
|
||||
* 2: Check Nil <BOOL> (default: false)
|
||||
*
|
||||
* Return Value:
|
||||
* Parsed List <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* ["text", true, false] call ace_common_fnc_parseList
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_list", ["_removeWhitespace", false], ["_checkNil", false]];
|
||||
|
||||
private ["_whitespaceList", "_nilCheckedList"];
|
||||
|
||||
// Split using comma delimiter
|
||||
_list = _list splitString ",";
|
||||
TRACE_1("Splitted List",_list);
|
||||
|
||||
|
||||
// Remove or Trim Whitespace
|
||||
_whitespaceList = [];
|
||||
{
|
||||
if (_removeWhitespace) then {
|
||||
_whitespaceList pushBack ([_x] call FUNC(stringRemoveWhiteSpace));
|
||||
} else {
|
||||
_whitespaceList pushBack ([_x] call CBA_fnc_trim);
|
||||
};
|
||||
nil
|
||||
} count _list;
|
||||
|
||||
_list = _whitespaceList;
|
||||
TRACE_1("Whitespace List",_list);
|
||||
|
||||
|
||||
// Check for object existence
|
||||
if (_checkNil) then {
|
||||
_nilCheckedList = [];
|
||||
{
|
||||
if !(isNil _x) then {
|
||||
_nilCheckedList pushBack (missionNamespace getVariable _x);
|
||||
};
|
||||
nil
|
||||
} count _list;
|
||||
|
||||
_list = _nilCheckedList;
|
||||
};
|
||||
|
||||
TRACE_1("Final List",_list);
|
||||
|
||||
_list
|
@ -1,4 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_wire);
|
||||
_wire addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
||||
params ["_wire"];
|
||||
_wire addEventHandler ["HandleDamage", FUNC(handleDamage)];
|
||||
|
@ -8,10 +8,9 @@
|
||||
* 1: unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
@ -22,7 +21,7 @@ private ["_wireNoGeo", "_dir", "_pos", "_wireNoGeoPos"];
|
||||
_wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0];
|
||||
{
|
||||
_wireNoGeo animate [_x, 1];
|
||||
} foreach WIRE_FAST;
|
||||
} count WIRE_FAST;
|
||||
|
||||
GVAR(placer) = _unit;
|
||||
_dir = getDir _unit;
|
||||
@ -37,8 +36,9 @@ deleteVehicle _wirecoil;
|
||||
_unit setVariable [QGVAR(wireDeployed), false];
|
||||
|
||||
GVAR(deployPFH) = [{
|
||||
EXPLODE_3_PVT(_this select 0,_wireNoGeo,_wireNoGeoPos,_unit);
|
||||
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_wireNoGeo", "_wireNoGeoPos", "_unit"];
|
||||
|
||||
private ["_range", "_posStart", "_posEnd", "_dirVect", "_dir", "_anim", "_wire"];
|
||||
_posStart = (_wireNoGeo modelToWorldVisual (_wireNoGeo selectionPosition "start")) call EFUNC(common,positionToASL);
|
||||
_posEnd = (getPosASL _unit) vectorAdd (vectorDir _unit);
|
||||
@ -46,37 +46,38 @@ GVAR(deployPFH) = [{
|
||||
_dir = _dirVect call CBA_fnc_vectDir;
|
||||
_range = vectorMagnitude _dirVect;
|
||||
_anim = 0 max (1 - (_range / 12));
|
||||
|
||||
|
||||
if (!(alive _unit) || _range >= 12 || (_unit getVariable [QGVAR(wireDeployed), false])) exitWith {
|
||||
_wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0];
|
||||
{
|
||||
_wire animate [_x, _anim];
|
||||
} foreach WIRE_FAST;
|
||||
|
||||
} count WIRE_FAST;
|
||||
|
||||
[{
|
||||
EXPLODE_5_PVT(_this select 0,_wireNoGeo,_wire,_anim,_dir,_wireNoGeoPos);
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_wireNoGeo", "_wire", "_anim", "_dir", "_wireNoGeoPos"];
|
||||
if (_wire animationPhase "wire_2" == _anim) then {
|
||||
deleteVehicle _wireNoGeo;
|
||||
_wire setDir _dir;
|
||||
_wire setPosASL _wireNoGeoPos;
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
}, 0, [_wireNoGeo, _wire, _anim, _dir, _wireNoGeoPos]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
|
||||
[_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler);
|
||||
call EFUNC(interaction,hideMouseHint);
|
||||
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
|
||||
_wireNoGeo setDir _dir;
|
||||
{
|
||||
_wireNoGeo animate [_x, _anim];
|
||||
} foreach WIRE_FAST;
|
||||
} count WIRE_FAST;
|
||||
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);
|
||||
|
||||
|
||||
GVAR(placer) setVariable [QGVAR(Deploy),
|
||||
[GVAR(placer), "DefaultAction",
|
||||
{GVAR(deployPFH) != -1},
|
||||
|
@ -8,10 +8,9 @@
|
||||
* 1: unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
@ -21,8 +20,7 @@ if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exit
|
||||
_this call FUNC(dismount);
|
||||
}, _this] call EFUNC(common,execNextFrame);
|
||||
};
|
||||
|
||||
PARAMS_2(_wire,_unit);
|
||||
params ["_wire", "_unit"];
|
||||
|
||||
private ["_config", "_delay"];
|
||||
_config = (configFile >> "CfgVehicles" >> typeOf _unit);
|
||||
|
@ -7,10 +7,9 @@
|
||||
* 0: wire <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
@ -18,25 +17,26 @@ PARAMS_1(_wire);
|
||||
|
||||
{
|
||||
_wire animate [_x, 1];
|
||||
} foreach WIRE_FAST;
|
||||
} count WIRE_FAST;
|
||||
|
||||
[{
|
||||
EXPLODE_1_PVT(_this select 0,_wire);
|
||||
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_wire"];
|
||||
|
||||
if (_wire animationPhase "wire_2" == 1) then {
|
||||
private ["_dir", "_pos", "_wirecoil"];
|
||||
|
||||
|
||||
_dir = getDir _wire;
|
||||
_pos = getPosASL _wire;
|
||||
|
||||
|
||||
_wirecoil = "ACE_ConcertinaWireCoil" createvehicle [0, 0, 0];
|
||||
|
||||
deleteVehicle _wire;
|
||||
|
||||
|
||||
_wirecoil setDir _dir;
|
||||
_wirecoil setPosASL _pos;
|
||||
_wirecoil setVelocity [0, 0, 0];
|
||||
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
}, 0, [_wire]] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -11,15 +11,12 @@
|
||||
* 4: projectile <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_5(_wire,_selectionName,_damage,_source,_projectile);
|
||||
|
||||
params ["_wire", "", "_damage", "_source", ""];
|
||||
if (_damage < 0.5) exitWith { 0 };
|
||||
|
||||
if (!(isNull _source)) then {
|
||||
|
@ -8,14 +8,12 @@
|
||||
* 1: killer (vehicle) <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_wire,_killer);
|
||||
params ["_wire", "_killer"];
|
||||
|
||||
private ["_distance", "_vehicle"];
|
||||
|
||||
|
@ -7,14 +7,12 @@
|
||||
* 1: vehicle <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_wire,_vehicle);
|
||||
params ["_wire", "_vehicle"];
|
||||
|
||||
private ["_type", "_mode", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w"];
|
||||
|
||||
@ -43,8 +41,8 @@ _dir_w = getDir _wire;
|
||||
|
||||
if (_mode == 0) then {
|
||||
private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"];
|
||||
_x = _pos_w select 0;
|
||||
_y = _pos_w select 1;
|
||||
_pos_w params ["_x","_y"];
|
||||
|
||||
// Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle)
|
||||
_wireCheckPosAr = [
|
||||
[_x + (sin (_dir_w+90) * 1.5),_y + (cos (_dir_w+90) * 1.5)],
|
||||
|
@ -22,12 +22,7 @@ class Extended_Init_EventHandlers {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
};
|
||||
class ReammoBox_F {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
};
|
||||
class ACE_RepairItem_Base {
|
||||
class ThingX {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
|
@ -15,5 +15,6 @@ PREP(restoreUserData);
|
||||
PREP(storeUserData);
|
||||
PREP(updateDisplay);
|
||||
PREP(updateImpellerState);
|
||||
|
||||
PREP(updateMemory);
|
||||
PREP(dayOfWeek);
|
||||
ADDON = true;
|
||||
|
@ -3,10 +3,10 @@
|
||||
* Handles the Kestrel 4500 dialog button actions
|
||||
*
|
||||
* Arguments:
|
||||
* buttonID <integer>
|
||||
* button ID <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* 2 call ace_kestrel4500_fnc_buttonPressed
|
||||
|
@ -3,13 +3,13 @@
|
||||
* Tests if the Kestrel 4500 can be shown
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* canShow (bool)
|
||||
* canShow <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [mode] call ace_kestrel4500_fnc_canShow
|
||||
* call ace_kestrel4500_fnc_canShow
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
@ -3,18 +3,19 @@
|
||||
* Gathers the weather data for the Kestrel 4500
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_collectData
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_updateMemory", "_windSpeed", "_crosswind", "_headwind"];
|
||||
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_windSpeed", "_crosswind", "_headwind"];
|
||||
_playerDir = getDir ACE_player;
|
||||
_playerAltitude = (getPosASL ACE_player) select 2;
|
||||
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
|
||||
@ -35,25 +36,19 @@ if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
|
||||
|
||||
{
|
||||
GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1];
|
||||
} forEach [1, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
||||
} count [1, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
||||
|
||||
_fnc_updateMemory = {
|
||||
PARAMS_2(_slot,_value);
|
||||
GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value];
|
||||
GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)];
|
||||
GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value];
|
||||
};
|
||||
|
||||
[0, _playerDir] call _fnc_updateMemory;
|
||||
[0, _playerDir] call FUNC(updateMemory);
|
||||
|
||||
if (GVAR(MinAvgMaxMode) == 1) then {
|
||||
{
|
||||
GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1];
|
||||
} forEach [2, 3, 4];
|
||||
} count [2, 3, 4];
|
||||
|
||||
// Wind SPD
|
||||
_windSpeed = call FUNC(measureWindSpeed);
|
||||
[2, _windSpeed] call _fnc_updateMemory;
|
||||
[2, _windSpeed] call FUNC(updateMemory);
|
||||
|
||||
// CROSSWIND
|
||||
_crosswind = 0;
|
||||
@ -62,7 +57,7 @@ if (GVAR(MinAvgMaxMode) == 1) then {
|
||||
} else {
|
||||
_crosswind = abs(sin(GVAR(RefHeading)) * _windSpeed);
|
||||
};
|
||||
[3, _crosswind] call _fnc_updateMemory;
|
||||
[3, _crosswind] call FUNC(updateMemory);
|
||||
|
||||
// HEADWIND
|
||||
_headwind = 0;
|
||||
@ -80,12 +75,4 @@ if (GVAR(MinAvgMaxMode) == 1) then {
|
||||
GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _headwind];
|
||||
};
|
||||
|
||||
[5, _temperature] call _fnc_updateMemory;
|
||||
[6, _chill] call _fnc_updateMemory;
|
||||
[7, _humidity] call _fnc_updateMemory;
|
||||
[8, _heatIndex] call _fnc_updateMemory;
|
||||
[9, _dewPoint] call _fnc_updateMemory;
|
||||
[10, _wetBulb] call _fnc_updateMemory;
|
||||
[11, _barometricPressure] call _fnc_updateMemory;
|
||||
[12, _altitude] call _fnc_updateMemory;
|
||||
[13, _densityAltitude] call _fnc_updateMemory;
|
||||
{ _x call FUNC(updateMemory); true } count [[5, _temperature],[6, _chill],[7, _humidity],[8, _heatIndex],[9, _dewPoint],[10, _wetBulb],[11, _barometricPressure],[12, _altitude],[13, _densityAltitude]];
|
||||
|
@ -3,12 +3,13 @@
|
||||
* Opens the Kestrel 4500 dialog
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_createKestrelDialog
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -29,7 +30,7 @@ createDialog 'Kestrel4500_Display';
|
||||
GVAR(Kestrel4500) = false;
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
|
||||
[] call FUNC(updateDisplay);
|
||||
}, 1, _this select 0] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
|
26
addons/kestrel4500/functions/fnc_dayOfWeek.sqf
Normal file
26
addons/kestrel4500/functions/fnc_dayOfWeek.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Calculate Current Day in the Week
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Year <NUMBER>
|
||||
* 1: Month <NUMBER>
|
||||
* 2: Day <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Day of The Week <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* [1995, 10, 21] call ace_kestrel4500_fnc_buttonPressed
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private "_table";
|
||||
params ["_year", "_month", "_day"];
|
||||
|
||||
_table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4];
|
||||
if (_month < 3) then {
|
||||
_year = _year - 1;
|
||||
};
|
||||
(_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7
|
@ -3,12 +3,13 @@
|
||||
* Shows the Kestrel 4500 as rsc title
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_displayKestrel
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -50,49 +51,66 @@ if (GVAR(Kestrel4500) && dialog) then {
|
||||
|
||||
GVAR(Overlay) = true;
|
||||
|
||||
[{
|
||||
[{
|
||||
// abort condition
|
||||
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
||||
GVAR(Overlay) = false;
|
||||
3 cutText ["", "PLAIN"];
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
|
||||
if (ACE_diagTime > GVAR(updateTimer)) then {
|
||||
GVAR(updateTimer) = ACE_diagTime + 1;
|
||||
|
||||
|
||||
private ["_outputData"];
|
||||
_outputData = [] call FUNC(generateOutputData);
|
||||
|
||||
|
||||
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
||||
|
||||
__ctrlTop ctrlSetText (_outputData select 0);
|
||||
__ctrlCenterBig ctrlSetText (_outputData select 1);
|
||||
|
||||
__ctrlTop ctrlSetText (_outputData select 0);
|
||||
__ctrlCenterBig ctrlSetText (_outputData select 1);
|
||||
__ctrlCenter ctrlSetText (_outputData select 2);
|
||||
|
||||
__ctrlCenterLine1Left ctrlSetText (_outputData select 3);
|
||||
__ctrlCenterLine2Left ctrlSetText (_outputData select 4);
|
||||
__ctrlCenterLine3Left ctrlSetText (_outputData select 5);
|
||||
_outputData params [
|
||||
"_ctrlTop",
|
||||
"_ctrlCenterBig",
|
||||
"_ctrlCenter",
|
||||
"_ctrlCenterLine1Left",
|
||||
"_ctrlCenterLine2Left",
|
||||
"_ctrlCenterLine3Left",
|
||||
"_ctrlCenterLine1Right",
|
||||
"_ctrlCenterLine2Right",
|
||||
"_ctrlCenterLine3Right",
|
||||
"_ctrlInfoLine1",
|
||||
"_ctrlInfoLine2",
|
||||
"_ctrlBottomBig",
|
||||
"_ctrlCenterLine1",
|
||||
"_ctrlCenterLine2",
|
||||
"_ctrlCenterLine3",
|
||||
"_ctrlCenterLine4",
|
||||
"_ctrlCenterLine5",
|
||||
"_ctrlCenterLine6"
|
||||
];
|
||||
|
||||
__ctrlCenterLine1Right ctrlSetText (_outputData select 6);
|
||||
__ctrlCenterLine2Right ctrlSetText (_outputData select 7);
|
||||
__ctrlCenterLine3Right ctrlSetText (_outputData select 8);
|
||||
__ctrlTop ctrlSetText _ctrlTop;
|
||||
__ctrlCenterBig ctrlSetText _ctrlCenterBig;
|
||||
__ctrlCenter ctrlSetText _ctrlCenter;
|
||||
|
||||
__ctrlCenterLine1Left ctrlSetText _ctrlCenterLine1Left;
|
||||
__ctrlCenterLine2Left ctrlSetText _ctrlCenterLine2Left;
|
||||
__ctrlCenterLine3Left ctrlSetText _ctrlCenterLine3Left;
|
||||
|
||||
__ctrlCenterLine1Right ctrlSetText _ctrlCenterLine1Right;
|
||||
__ctrlCenterLine2Right ctrlSetText _ctrlCenterLine2Right;
|
||||
__ctrlCenterLine3Right ctrlSetText _ctrlCenterLine3Right;
|
||||
|
||||
__ctrlInfoLine1 ctrlSetText _ctrlInfoLine1;
|
||||
__ctrlInfoLine2 ctrlSetText _ctrlInfoLine2;
|
||||
|
||||
__ctrlBottomBig ctrlSetText _ctrlBottomBig;
|
||||
|
||||
__ctrlCenterLine1 ctrlSetText _ctrlCenterLine1;
|
||||
__ctrlCenterLine2 ctrlSetText _ctrlCenterLine2;
|
||||
__ctrlCenterLine3 ctrlSetText _ctrlCenterLine3;
|
||||
__ctrlCenterLine4 ctrlSetText _ctrlCenterLine4;
|
||||
__ctrlCenterLine5 ctrlSetText _ctrlCenterLine5;
|
||||
__ctrlCenterLine6 ctrlSetText _ctrlCenterLine6;
|
||||
|
||||
__ctrlInfoLine1 ctrlSetText (_outputData select 9);
|
||||
__ctrlInfoLine2 ctrlSetText (_outputData select 10);
|
||||
|
||||
__ctrlBottomBig ctrlSetText (_outputData select 11);
|
||||
|
||||
__ctrlCenterLine1 ctrlSetText (_outputData select 12);
|
||||
__ctrlCenterLine2 ctrlSetText (_outputData select 13);
|
||||
__ctrlCenterLine3 ctrlSetText (_outputData select 14);
|
||||
__ctrlCenterLine4 ctrlSetText (_outputData select 15);
|
||||
__ctrlCenterLine5 ctrlSetText (_outputData select 16);
|
||||
__ctrlCenterLine6 ctrlSetText (_outputData select 17);
|
||||
|
||||
if (GVAR(referenceHeadingMenu) == 1) then {
|
||||
if (GVAR(referenceHeadingAutoSet)) then {
|
||||
__ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6];
|
||||
@ -106,10 +124,10 @@ GVAR(Overlay) = true;
|
||||
__ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
call FUNC(updateImpellerState);
|
||||
__ctrlKestrel4500 ctrlSetText format [QUOTE(PATHTOF(UI\Kestrel4500_%1.paa)), floor(GVAR(ImpellerState) % 7)];
|
||||
|
||||
|
||||
}, 0.01, []] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
true
|
||||
|
@ -3,12 +3,29 @@
|
||||
* Generates the Kestrel 4500 output text.
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* [top <STRING>, centerBig <STRING>, CenterLine1Left <STRING>, CenterLine2Left <STRING>, CenterLine3Left <STRING>, CenterLine1Right <STRING>, CenterLine2Right <STRING>, CenterLine3Right <STRING>, InfoLine1 <STRING>, InfoLine2 <STRING>]
|
||||
* 0: top <STRING>
|
||||
* 1: centerBig <STRING>
|
||||
* 2: CenterLine1Left <STRING>
|
||||
* 3: CenterLine2Left <STRING>
|
||||
* 4: CenterLine3Left <STRING>
|
||||
* 5: CenterLine1Right <STRING>
|
||||
* 6: CenterLine2Right <STRING>
|
||||
* 7: CenterLine3Right <STRING>
|
||||
* 8: InfoLine1 <STRING>
|
||||
* 9: InfoLine2 <STRING>
|
||||
* 10: Bottom Big <STRING>
|
||||
* 11: Center Line 1 <STRING>
|
||||
* 11: Center Line 2 <STRING>
|
||||
* 12: Center Line 3 <STRING>
|
||||
* 13: Center Line 4 <STRING>
|
||||
* 14: Center Line 5 <STRING>
|
||||
* 15: Center Line 6 <STRING>
|
||||
*
|
||||
* Example:
|
||||
* _var = call ace_kestrel4500_fnc_generateOutputData
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
@ -16,7 +33,7 @@
|
||||
|
||||
if (ACE_diagTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]};
|
||||
|
||||
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_dayOfWeek", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"];
|
||||
private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"];
|
||||
|
||||
[] call FUNC(collectData);
|
||||
|
||||
@ -59,19 +76,6 @@ _heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex);
|
||||
_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint);
|
||||
_wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb);
|
||||
|
||||
_fnc_dayOfWeek = {
|
||||
private ["_year", "_month", "_day", "_table"];
|
||||
_year = _this select 0;
|
||||
_month = _this select 1;
|
||||
_day = _this select 2;
|
||||
|
||||
_table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4];
|
||||
if (_month < 3) then {
|
||||
_year = _year - 1;
|
||||
};
|
||||
(_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7
|
||||
};
|
||||
|
||||
GVAR(Direction) = 4 * floor(_playerDir / 90);
|
||||
if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1};
|
||||
if (_playerDir % 90 > 35) then { GVAR(Direction) = GVAR(Direction) + 1};
|
||||
@ -82,8 +86,8 @@ GVAR(Direction) = GVAR(Direction) % 16;
|
||||
if (GVAR(referenceHeadingMenu) == 0) then {
|
||||
switch (GVAR(Menu)) do {
|
||||
case 0: { // Date
|
||||
EXPLODE_3_PVT(date,_year,_month,_day);
|
||||
_dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call _fnc_dayOfWeek);
|
||||
date params ["_year", "_month", "_day"];
|
||||
_dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call FUNC(dayOfWeek));
|
||||
_monthString = localize (["str_january","str_february","str_march","str_april","str_may","str_june","str_july","str_august","str_september","str_october","str_november","str_december"] select (_month - 1));
|
||||
_textTop = _dayString;
|
||||
_textCenter = format["%1 %2 %3", _day, _monthString, _year];
|
||||
|
@ -3,12 +3,13 @@
|
||||
* Measures the wind speed, stores the information in GVAR(MeasuredWindSpeed) and updates GVAR(ImpellerState)
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* wind speed <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_canShow
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
@ -1,3 +1,18 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Called if Kestrel Dialog is closed
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_onCloseDialog
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['Kestrel4500_Display', nil];
|
||||
|
@ -1,3 +1,18 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Called if Kestrel Display is closed
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_onCloseDisplay
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['RscKestrel4500', nil];
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_restore_user_data
|
||||
|
@ -3,10 +3,10 @@
|
||||
* Saves user data into profileNamespace
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* call ace_kestrel4500_fnc_store_user_data
|
||||
|
@ -3,10 +3,10 @@
|
||||
* Updates the Kestrel 4500 dialog text boxes.
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
@ -22,29 +22,9 @@ private ["_outputData"];
|
||||
|
||||
_outputData = [] call FUNC(generateOutputData);
|
||||
|
||||
ctrlSetText [74100, _outputData select 0];
|
||||
ctrlSetText [74200, _outputData select 1];
|
||||
ctrlSetText [74201, _outputData select 2];
|
||||
|
||||
ctrlSetText [74300, _outputData select 3];
|
||||
ctrlSetText [74301, _outputData select 4];
|
||||
ctrlSetText [74302, _outputData select 5];
|
||||
|
||||
ctrlSetText [74303, _outputData select 6];
|
||||
ctrlSetText [74304, _outputData select 7];
|
||||
ctrlSetText [74305, _outputData select 8];
|
||||
|
||||
ctrlSetText [74400, _outputData select 9];
|
||||
ctrlSetText [74401, _outputData select 10];
|
||||
|
||||
ctrlSetText [74500, _outputData select 11];
|
||||
|
||||
ctrlSetText [74600, _outputData select 12];
|
||||
ctrlSetText [74601, _outputData select 13];
|
||||
ctrlSetText [74602, _outputData select 14];
|
||||
ctrlSetText [74603, _outputData select 15];
|
||||
ctrlSetText [74604, _outputData select 16];
|
||||
ctrlSetText [74605, _outputData select 17];
|
||||
{
|
||||
ctrlSetText [_x , _outputData select _foreachindex];
|
||||
} forEach [74100, 74200, 74201, 74300, 74301, 74302, 74303, 74304, 74305, 74400, 74401, 74500, 74600, 74601, 74602, 74603, 74604, 74605];
|
||||
|
||||
if (GVAR(referenceHeadingMenu) == 1) then {
|
||||
if (GVAR(referenceHeadingAutoSet)) then {
|
||||
|
@ -3,10 +3,10 @@
|
||||
* Updates the Kestrel 4500 Impeller state
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
|
21
addons/kestrel4500/functions/fnc_updateMemory.sqf
Normal file
21
addons/kestrel4500/functions/fnc_updateMemory.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Update Memory of Kestrel
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Slot <NUMBER>
|
||||
* 1: Value <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [1, "test"] call ace_kestrel4500_fnc_updateMemory
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
params ["_slot", "_value"];
|
||||
GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value];
|
||||
GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)];
|
||||
GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value];
|
@ -1 +1 @@
|
||||
#include "\z\ace\addons\kestrel4500\script_component.hpp"
|
||||
#include "\z\ace\addons\kestrel4500\script_component.hpp"
|
||||
|
@ -2,33 +2,55 @@ class ACE_Settings {
|
||||
class GVAR(BFT_Interval) {
|
||||
value = 1.0;
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(BFT_Interval_DisplayName);
|
||||
description = CSTRING(BFT_Interval_Description);
|
||||
};
|
||||
class GVAR(BFT_Enabled) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(BFT_Enabled_DisplayName);
|
||||
description = CSTRING(BFT_Enabled_Description);
|
||||
};
|
||||
class GVAR(BFT_HideAiGroups) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(BFT_HideAiGroups_DisplayName);
|
||||
description = CSTRING(BFT_HideAiGroups_Description);
|
||||
};
|
||||
class GVAR(mapIllumination) {
|
||||
value = 1;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(MapIllumination_DisplayName);
|
||||
description = CSTRING(MapIllumination_Description);
|
||||
};
|
||||
class GVAR(mapGlow) {
|
||||
value = 1;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(MapGlow_DisplayName);
|
||||
description = CSTRING(MapGlow_Description);
|
||||
};
|
||||
class GVAR(mapShake) {
|
||||
value = 1;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(MapShake_DisplayName);
|
||||
description = CSTRING(MapShake_Description);
|
||||
};
|
||||
class GVAR(mapLimitZoom) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(MapLimitZoom_DisplayName);
|
||||
description = CSTRING(MapLimitZoom_Description);
|
||||
};
|
||||
class GVAR(mapShowCursorCoordinates) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
displayName = CSTRING(MapShowCursorCoordinates_DisplayName);
|
||||
description = CSTRING(MapShowCursorCoordinates_Description);
|
||||
};
|
||||
class GVAR(DefaultChannel) {
|
||||
value = -1;
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(DefaultChannel_DisplayName);
|
||||
description = CSTRING(DefaultChannel_Description);
|
||||
};
|
||||
};
|
||||
|
@ -55,6 +55,20 @@ class CfgVehicles {
|
||||
typeName = "BOOL";
|
||||
defaultValue = 0;
|
||||
};
|
||||
class DefaultChannel {
|
||||
displayName = CSTRING(DefaultChannel_DisplayName);
|
||||
description = CSTRING(DefaultChannel_Description);
|
||||
typeName = "NUMBER";
|
||||
class values {
|
||||
class disable {name = ECSTRING(common,Disabled); value = -1; default = 1;};
|
||||
class global {name = "$STR_channel_global"; value = 0;};
|
||||
class side {name = "$STR_channel_side"; value = 1;};
|
||||
class command {name = "$STR_channel_command"; value = 2;};
|
||||
class group {name = "$STR_channel_group"; value = 3;};
|
||||
class vehicle {name = "$STR_channel_vehicle"; value = 4;};
|
||||
class direct {name = "$STR_channel_direct"; value = 5;};
|
||||
};
|
||||
};
|
||||
};
|
||||
class ModuleDescription {
|
||||
description = CSTRING(Module_Description);
|
||||
|
@ -56,6 +56,21 @@ call FUNC(determineZoom);
|
||||
}, 0] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
["SettingsInitialized", {
|
||||
if (isMultiplayer && {GVAR(DefaultChannel) != -1}) then {
|
||||
//Set the chat channel once the map has finished loading
|
||||
[{
|
||||
if ((isNull findDisplay 37) && {isNull findDisplay 52} && {isNull findDisplay 53} && {isNull findDisplay 12}) exitWith {};
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
|
||||
setCurrentChannel GVAR(DefaultChannel);
|
||||
if (currentChannel == GVAR(DefaultChannel)) then {
|
||||
// ACE_LOGINFO_1("Channel Set - %1", currentChannel);
|
||||
} else {
|
||||
ACE_LOGERROR_2("Failed To Set Channel %1 (is %2)", GVAR(DefaultChannel), currentChannel);
|
||||
};
|
||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
||||
// Start Blue Force Tracking if Enabled
|
||||
if (GVAR(BFT_Enabled)) then {
|
||||
GVAR(BFT_markers) = [];
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
if !(isServer) exitWith {};
|
||||
|
||||
params ["_logic", "_units", "_activated"];
|
||||
params ["_logic", "", "_activated"];
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
@ -22,5 +22,6 @@ if !(_activated) exitWith {};
|
||||
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(DefaultChannel), "DefaultChannel" ] call EFUNC(common,readSettingFromModule);
|
||||
|
||||
ACE_LOGINFO("Map Module Initialized.");
|
||||
|
@ -280,5 +280,13 @@
|
||||
<Portuguese>Desativar %1</Portuguese>
|
||||
<Russian>Деактивировать %1</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_DefaultChannel_DisplayName">
|
||||
<English>Set Channel At Start</English>
|
||||
<Polish>Ust. domyślny kanał</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Map_DefaultChannel_Description">
|
||||
<English>Change the starting marker channel at mission start</English>
|
||||
<Polish>Ustaw domyślny kanał dla markerów przy starcie misji</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
1
addons/map_gestures/$PBOPREFIX$
Normal file
1
addons/map_gestures/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\map_gestures
|
61
addons/map_gestures/ACE_Settings.hpp
Normal file
61
addons/map_gestures/ACE_Settings.hpp
Normal file
@ -0,0 +1,61 @@
|
||||
class ACE_Settings {
|
||||
class GVAR(enabled) {
|
||||
displayName = CSTRING(enabled_displayName);
|
||||
description = CSTRING(enabled_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "BOOL";
|
||||
value = 1;
|
||||
};
|
||||
class GVAR(maxRange) {
|
||||
displayName = CSTRING(maxRange_displayName);
|
||||
description = CSTRING(maxRange_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "SCALAR";
|
||||
value = 7;
|
||||
};
|
||||
class GVAR(interval) {
|
||||
displayName = CSTRING(interval_displayName);
|
||||
description = CSTRING(interval_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "SCALAR";
|
||||
value = 0.03;
|
||||
};
|
||||
class GVAR(nameTextColor) {
|
||||
displayName = CSTRING(nameTextColor_displayName);
|
||||
description = CSTRING(nameTextColor_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
isClientSettable = 1;
|
||||
typeName = "COLOR";
|
||||
value[] = {0.2, 0.2, 0.2, 0.3};
|
||||
};
|
||||
class GVAR(defaultLeadColor) {
|
||||
displayName = CSTRING(defaultLeadColor_displayName);
|
||||
description = CSTRING(defaultLeadColor_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
isClientSettable = 1;
|
||||
typeName = "COLOR";
|
||||
value[] = {1, 0.88, 0, 0.95};
|
||||
};
|
||||
class GVAR(defaultColor) {
|
||||
displayName = CSTRING(defaultColor_displayName);
|
||||
description = CSTRING(defaultColor_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
isClientSettable = 1;
|
||||
typeName = "COLOR";
|
||||
value[] = {1, 0.88, 0, 0.7};
|
||||
};
|
||||
class GVAR(GroupColorConfigurations) {
|
||||
displayName = CSTRING(GroupColorConfigurations_displayName);
|
||||
description = CSTRING(GroupColorConfigurations_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "ARRAY";
|
||||
value[] = {};
|
||||
};
|
||||
class GVAR(GroupColorConfigurationMapping) {
|
||||
displayName = CSTRING(GroupColorConfigurationMapping_displayName);
|
||||
description = CSTRING(GroupColorConfigurationMapping_description);
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "ARRAY";
|
||||
value[] = {{}, {}};
|
||||
};
|
||||
};
|
12
addons/map_gestures/CfgEventHandlers.hpp
Normal file
12
addons/map_gestures/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
serverInit = QUOTE(call COMPILE_FILE(XEH_serverPostInit));
|
||||
};
|
||||
};
|
66
addons/map_gestures/CfgVehicles.hpp
Normal file
66
addons/map_gestures/CfgVehicles.hpp
Normal file
@ -0,0 +1,66 @@
|
||||
class CfgVehicles {
|
||||
class ACE_Module;
|
||||
class GVAR(moduleSettings): ACE_Module {
|
||||
scope = 2;
|
||||
category = "ACE";
|
||||
displayName = CSTRING(moduleSettings_displayName);
|
||||
function = QFUNC(moduleSettings);
|
||||
isGlobal = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
icon = PATHTOF(ui\icon_module_map_gestures_ca.paa);
|
||||
class Arguments {
|
||||
class enabled {
|
||||
displayName = CSTRING(enabled_DisplayName);
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class maxRange {
|
||||
displayName = CSTRING(maxRange_displayName);
|
||||
description = CSTRING(maxRange_description);
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 4;
|
||||
};
|
||||
class interval {
|
||||
displayName = CSTRING(interval_displayName);
|
||||
description = CSTRING(interval_description);
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 0.03;
|
||||
};
|
||||
class defaultLeadColor {
|
||||
displayName = CSTRING(defaultLeadColor_displayName);
|
||||
description = CSTRING(defaultLeadColor_description);
|
||||
typeName = "STRING";
|
||||
defaultValue = "0,0,0,0";
|
||||
};
|
||||
class defaultColor {
|
||||
displayName = CSTRING(defaultColor_displayName);
|
||||
description = CSTRING(defaultColor_description);
|
||||
typeName = "STRING";
|
||||
defaultValue = "0,0,0,0";
|
||||
};
|
||||
};
|
||||
};
|
||||
class GVAR(moduleGroupSettings): ACE_Module {
|
||||
scope = 2;
|
||||
category = "ACE";
|
||||
displayName = CSTRING(moduleGroupSettings_displayName);
|
||||
function = QFUNC(moduleGroupSettings);
|
||||
isGlobal = 0;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
icon = PATHTOF(ui\icon_module_map_gestures_ca.paa);
|
||||
class Arguments {
|
||||
class leadColor {
|
||||
displayName = CSTRING(leadColor_displayName);
|
||||
description = CSTRING(leadColor_description);
|
||||
typeName = "STRING";
|
||||
defaultValue = "0,0,0,0";
|
||||
};
|
||||
class color {
|
||||
displayName = CSTRING(color_displayName);
|
||||
description = CSTRING(color_description);
|
||||
typeName = "STRING";
|
||||
defaultValue = "0,0,0,0";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
16
addons/map_gestures/XEH_postInit.sqf
Normal file
16
addons/map_gestures/XEH_postInit.sqf
Normal file
@ -0,0 +1,16 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
["SettingsInitialized", {
|
||||
[{
|
||||
if (isNull (findDisplay 12)) exitWith {};
|
||||
|
||||
params ["", "_pfhId"];
|
||||
|
||||
call FUNC(receiverInit);
|
||||
call FUNC(transmitterInit);
|
||||
|
||||
[_pfhId] call CBA_fnc_removePerFrameHandler;
|
||||
}, 1, []] call CBA_fnc_addPerFrameHandler;
|
||||
}] call EFUNC(common,addEventHandler);
|
17
addons/map_gestures/XEH_preInit.sqf
Normal file
17
addons/map_gestures/XEH_preInit.sqf
Normal file
@ -0,0 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(assignClientIDOnServer);
|
||||
PREP(drawMapGestures);
|
||||
PREP(endTransmit);
|
||||
PREP(getProximityPlayers);
|
||||
PREP(initTransmit);
|
||||
PREP(isValidColorArray);
|
||||
PREP(moduleGroupSettings);
|
||||
PREP(moduleSettings);
|
||||
PREP(receiverInit);
|
||||
PREP(transmit);
|
||||
PREP(transmitterInit);
|
||||
|
||||
ADDON = true;
|
3
addons/map_gestures/XEH_serverPostInit.sqf
Normal file
3
addons/map_gestures/XEH_serverPostInit.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
[EVENT_PLAYER_HAS_NO_OWNER_ID, FUNC(assignClientIDOnServer)] call EFUNC(common,addEventHandler);
|
17
addons/map_gestures/config.cpp
Normal file
17
addons/map_gestures/config.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author[] = {"Dslyecxi", "MikeMatrix"};
|
||||
authorUrl = "https://github.com/MikeMatrix";
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "ACE_Settings.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
24
addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf
Normal file
24
addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Assign readable client ID to unit on the server.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit name <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* ["MikeMatrix"] call ace_map_gestures_fnc_assignClientIDOnServer
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unitName"];
|
||||
|
||||
{
|
||||
if (name _x == _unitName) exitWith {
|
||||
_x setVariable [QGVAR(owner_id), owner _x, true];
|
||||
};
|
||||
} count playableUnits;
|
61
addons/map_gestures/functions/fnc_drawMapGestures.sqf
Normal file
61
addons/map_gestures/functions/fnc_drawMapGestures.sqf
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Receives and draws map gestures from nearby players.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Map Handle <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [findDisplay 12 displayCtrl 51] call ace_map_gesutres_fnc_drawMapGestures
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define ICON_RENDER_SIZE 55
|
||||
#define ICON_TEXT_ALIGN "left"
|
||||
#define ICON_ANGLE 0
|
||||
#define ICON_SHADOW 1
|
||||
#define TEXT_FONT "PuristaBold"
|
||||
#define TEXT_ICON_RENDER_SIZE 20
|
||||
#define TEXT_SIZE 0.030
|
||||
#define TEXT_SHADOW 0
|
||||
|
||||
if (!GVAR(enabled) || !visibleMap) exitWith {};
|
||||
|
||||
private["_color", "_drawPosVariableName", "_group", "_grpName", "_pos", "_unitUID"];
|
||||
|
||||
params ["_mapHandle"];
|
||||
|
||||
// Iterate over all nearby players and render their pointer if player is transmitting.
|
||||
{
|
||||
// Data variable name for unit
|
||||
_unitUID = getPlayerUID _x;
|
||||
_drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil};
|
||||
|
||||
if (!isNil "_drawPosVariableName") then {
|
||||
if (isNil {missionNamespace getVariable _drawPosVariableName}) then {missionNamespace setVariable [_drawPosVariableName, [1, 1, 1]];};
|
||||
_pos = missionNamespace getVariable _drawPosVariableName;
|
||||
|
||||
// Only render if the unit is alive and transmitting
|
||||
if (alive _x && {_x getVariable QGVAR(Transmit)}) then {
|
||||
_group = group _x;
|
||||
_grpName = groupID _group;
|
||||
|
||||
// If color settings for the group exist, then use those, otherwise fall back to the default colors
|
||||
_color = if (HASH_HASKEY(GVAR(GroupColorConfigurationMapping),_grpName)) then {
|
||||
(GVAR(GroupColorConfigurations) select (HASH_GET(GVAR(GroupColorConfigurationMapping),_grpName))) select (_x != leader _group)
|
||||
} else {
|
||||
if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)};
|
||||
};
|
||||
|
||||
// Render icon and player name
|
||||
_mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, ICON_RENDER_SIZE, ICON_RENDER_SIZE, ICON_ANGLE, "", ICON_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN];
|
||||
_mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", GVAR(nameTextColor), _pos, TEXT_ICON_RENDER_SIZE, TEXT_ICON_RENDER_SIZE, ICON_ANGLE, name _x, TEXT_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN];
|
||||
};
|
||||
};
|
||||
nil
|
||||
} count ([ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers));
|
21
addons/map_gestures/functions/fnc_endTransmit.sqf
Normal file
21
addons/map_gestures/functions/fnc_endTransmit.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Ensure that all variables used to indicate transmission are disabled.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_map_gestures_fnc_endTransmit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
ACE_player setVariable [QGVAR(Transmit), false, true];
|
||||
GVAR(EnableTransmit) = false;
|
26
addons/map_gestures/functions/fnc_getProximityPlayers.sqf
Normal file
26
addons/map_gestures/functions/fnc_getProximityPlayers.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Returns all players in a given range and in the units vehicle.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Range <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* All units in proximity <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* ["example value"] call ace_module_fnc_functionName
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private "_proximityPlayers";
|
||||
|
||||
params ["_unit", "_range"];
|
||||
|
||||
_proximityPlayers = (getPos _unit) nearEntities [["CAMAnBase"], _range];
|
||||
_proximityPlayers deleteAt (_proximityPlayers find _unit);
|
||||
_proximityPlayers append (crew vehicle _unit);
|
||||
_proximityPlayers
|
21
addons/map_gestures/functions/fnc_initTransmit.sqf
Normal file
21
addons/map_gestures/functions/fnc_initTransmit.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Initializes transmitting map gestures.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_map_gestures_fnc_initTransmit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
GVAR(EnableTransmit) = true;
|
||||
[FUNC(transmit), GVAR(interval), []] call CBA_fnc_addPerFrameHandler;
|
30
addons/map_gestures/functions/fnc_isValidColorArray.sqf
Normal file
30
addons/map_gestures/functions/fnc_isValidColorArray.sqf
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Author: MikeMatrix
|
||||
* Validate if an array is in the propper color format.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Color Array <ARRAY>
|
||||
*
|
||||
* Return Value:
|
||||
* Is valid Color Array <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [[1, 0.2, 1, 0.5]] call ace_map_gestures_fnc_isValidColorArray
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
scopeName "main";
|
||||
|
||||
params ["_colorArray"];
|
||||
|
||||
if (isNil "_colorArray") exitWith {false};
|
||||
if ((typeName _colorArray) != "ARRAY") exitWith {false};
|
||||
if (count _colorArray != 4) exitWith {false};
|
||||
|
||||
{
|
||||
if ((typeName _x) != "SCALAR" || _x < 0 || _x > 1) exitWith {false breakOut "main"};
|
||||
} count _colorArray;
|
||||
|
||||
true
|
45
addons/map_gestures/functions/fnc_moduleGroupSettings.sqf
Normal file
45
addons/map_gestures/functions/fnc_moduleGroupSettings.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Initializes Settings for the groups modules and transcodes settings to a useable format.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Logic <LOGIC>
|
||||
* 1: Units <ARRAY>
|
||||
* 2: Activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [module, [player], true] call ace_map_gestures_fnc_moduleGroupSettings
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_color", "_configurationGroupMappings", "_configurationIndex", "_configurations", "_leadColor"];
|
||||
|
||||
params ["_logic", "_units", "_activated"];
|
||||
|
||||
if (!_activated || !isServer) exitWith {};
|
||||
|
||||
// Transcode string setting into usable array. Example: "1,1,1,1" -> [1, 1, 1, 1]
|
||||
_leadColor = call compile ("[" + (_logic getVariable ["leadColor", ""]) + "]");
|
||||
if (!([_leadColor] call FUNC(isValidColorArray))) exitWith {ERROR("leadColor is not a valid color array.")};
|
||||
_color = call compile ("[" + (_logic getVariable ["color", ""]) + "]");
|
||||
if (!([_color] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a valid color array.")};
|
||||
|
||||
// If we already have color configurations from another source, use those, otherwise use default.
|
||||
_configurations = if (isNil QGVAR(GroupColorConfigurations)) then { [] } else { +GVAR(GroupColorConfigurations) };
|
||||
_configurationGroupMappings = if(isNil QGVAR(GroupColorConfigurationMapping)) then { HASH_CREATE } else { +GVAR(GroupColorConfigurationMapping) };
|
||||
|
||||
// Save custom color configuration and keep the index of the entry.
|
||||
_configurationIndex = _configurations pushBack [_leadColor, _color];
|
||||
|
||||
// Add all synchronized groups and reference custom configuration for them
|
||||
{
|
||||
HASH_SET(_configurationGroupMappings,groupID (group _x),_configurationIndex);
|
||||
} count _units;
|
||||
|
||||
[QGVAR(GroupColorConfigurations), _configurations, false, true] call EFUNC(common,setSetting);
|
||||
[QGVAR(GroupColorConfigurationMapping), _configurationGroupMappings, false, true] call EFUNC(common,setSetting);
|
37
addons/map_gestures/functions/fnc_moduleSettings.sqf
Normal file
37
addons/map_gestures/functions/fnc_moduleSettings.sqf
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Initializes Settings for the module and transcodes settings to a useable format.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Logic <LOGIC>
|
||||
* 1: Units <ARRAY>
|
||||
* 2: Activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [module, [player], true] call ace_map_gestures_fnc_moduleGroupSettings
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_defaultColor", "_defaultLeadColor"];
|
||||
|
||||
params ["_logic", "", "_activated"];
|
||||
|
||||
if (!_activated || !isServer) exitWith {};
|
||||
|
||||
[_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(maxRange), "maxRange"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(interval), "interval"] call EFUNC(common,readSettingFromModule);
|
||||
|
||||
_defaultLeadColor = call compile ("[" + (_logic getVariable ["defaultLeadColor", ""]) + "]");
|
||||
if (!([_defaultLeadColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaultLeadColor is not a valid color array.")};
|
||||
|
||||
_defaultColor = call compile ("[" + (_logic getVariable ["defaultColor", ""]) + "]");
|
||||
if (!([_defaultColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaultColor is not a valid color array.")};
|
||||
|
||||
[QGVAR(defaultLeadColor), _defaultLeadColor, false, true] call EFUNC(common,setSetting);
|
||||
[QGVAR(defaultColor), _defaultColor, false, true] call EFUNC(common,setSetting);
|
25
addons/map_gestures/functions/fnc_receiverInit.sqf
Normal file
25
addons/map_gestures/functions/fnc_receiverInit.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Initializes the receiver and hooks it to the Draw event of the map.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_map_gestures_fnc_receiverInit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
ACE_player setVariable [QGVAR(Transmit), false, true];
|
||||
GVAR(EnableTransmit) = false;
|
||||
|
||||
if (!isNil QGVAR(DrawMapHandlerID)) then {
|
||||
(findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)];
|
||||
GVAR(DrawMapHandlerID) = nil;
|
||||
};
|
||||
GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", FUNC(drawMapGestures)];
|
45
addons/map_gestures/functions/fnc_transmit.sqf
Normal file
45
addons/map_gestures/functions/fnc_transmit.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Transmit PFH
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arguments <ARRAY>
|
||||
* 1: PFH ID <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Return description <TYPE>
|
||||
*
|
||||
* Example:
|
||||
* [[], 2] call ace_map_gestures_fnc_transmit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ownerID", "_unitUID", "_drawPosVariableName", "_playerOwnerID"];
|
||||
|
||||
params ["", "_pfhId"];
|
||||
|
||||
if (!visibleMap) then {
|
||||
call FUNC(endTransmit);
|
||||
};
|
||||
|
||||
if (!GVAR(EnableTransmit) || !visibleMap) exitWith {
|
||||
[_pfhId] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
{
|
||||
_ownerID = _x getVariable QGVAR(owner_id);
|
||||
if (isNil "_ownerID") then {
|
||||
[EVENT_PLAYER_HAS_NO_OWNER_ID, [name _x]] call EFUNC(common,serverEvent);
|
||||
} else {
|
||||
_playerOwnerID = ACE_player getVariable QGVAR(owner_id);
|
||||
if (!isNil "_playerOwnerID" && _ownerID != _playerOwnerID) then {
|
||||
_unitUID = getPlayerUID ACE_Player;
|
||||
_drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil};
|
||||
if (!isNil "_drawPosVariableName") then {
|
||||
_ownerID publicVariableClient _drawPosVariableName;
|
||||
};
|
||||
};
|
||||
};
|
||||
} count ([ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers));
|
70
addons/map_gestures/functions/fnc_transmitterInit.sqf
Normal file
70
addons/map_gestures/functions/fnc_transmitterInit.sqf
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Author: Dslyecxi, MikeMatrix
|
||||
* Initializes the transmitting event handlers.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_map_gestures_fnc_transmitterInit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_mapCtrl", "_unitUID", "_drawPosVariableName"];
|
||||
|
||||
disableSerialization;
|
||||
|
||||
_mapCtrl = findDisplay 12 displayCtrl 51;
|
||||
|
||||
// MouseMoving EH.
|
||||
if (!isNil QGVAR(MouseMoveHandlerID)) then {
|
||||
_mapCtrl ctrlRemoveEventHandler ["MouseMoving", GVAR(MouseMoveHandlerID)];
|
||||
GVAR(MouseMoveHandlerID) = nil;
|
||||
};
|
||||
GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", {
|
||||
// Don't transmit any data if we're using the map tools
|
||||
if (!GVAR(EnableTransmit) || EGVAR(maptools,drawing_isDrawing) || EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)) exitWith {};
|
||||
|
||||
params ["_control", "_posX", "_posY"];
|
||||
|
||||
if (!(ACE_player getVariable QGVAR(Transmit))) then {
|
||||
ACE_player setVariable [QGVAR(Transmit), true, true];
|
||||
};
|
||||
|
||||
_unitUID = getPlayerUID ACE_player;
|
||||
_drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil};
|
||||
if (!isNil "_drawPosVariableName") then {
|
||||
missionNamespace setVariable [_drawPosVariableName, _control ctrlMapScreenToWorld [_posX, _posY]];
|
||||
};
|
||||
}];
|
||||
|
||||
// MouseDown EH
|
||||
if (!isNil QGVAR(MouseDownHandlerID)) then {
|
||||
_mapCtrl ctrlRemoveEventHandler ["MouseButtonDown",GVAR(MouseDownHandlerID)];
|
||||
GVAR(MouseDownHandlerID) = nil;
|
||||
};
|
||||
GVAR(MouseDownHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonDown", {
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
params ["", "_button"];
|
||||
|
||||
if (_button == 0) then {call FUNC(initTransmit);};
|
||||
}];
|
||||
|
||||
// MouseUp EH
|
||||
if (!isNil QGVAR(MouseUpHandlerID)) then {
|
||||
_mapCtrl ctrlRemoveEventHandler ["MouseButtonUp", GVAR(MouseUpHandlerID)];
|
||||
GVAR(MouseUpHandlerID) = nil;
|
||||
};
|
||||
GVAR(MouseUpHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonUp", {
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
params ["", "_button"];
|
||||
|
||||
if (_button == 0) then {call FUNC(endTransmit);};
|
||||
}];
|
1
addons/map_gestures/functions/script_component.hpp
Normal file
1
addons/map_gestures/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\map_gestures\script_component.hpp"
|
14
addons/map_gestures/script_component.hpp
Normal file
14
addons/map_gestures/script_component.hpp
Normal file
@ -0,0 +1,14 @@
|
||||
#define COMPONENT map_gestures
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_MAP_GESTURES
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_MAP_GESTURES
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_MAP_GESTURES
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define EVENT_PLAYER_HAS_NO_OWNER_ID "PlayerNameHasNoOwnerID"
|
98
addons/map_gestures/stringtable.xml
Normal file
98
addons/map_gestures/stringtable.xml
Normal file
@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="map_gestures">
|
||||
<Key ID="STR_ACE_map_gestures_moduleSettings_displayName">
|
||||
<English>Map Gestures</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_enabled_displayName">
|
||||
<English>Enabled</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_maxRange_displayName">
|
||||
<English>Map Gesture Max Range</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_maxRange_description">
|
||||
<English>Max range between players to show the map gesture indicator [default: 7 meters]</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultLeadAlpha_displayName">
|
||||
<English>Lead Default Alpha</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultLeadAlpha_description">
|
||||
<English>Fallback Alpha value for group leaders.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultAlpha_displayName">
|
||||
<English>Default Alpha</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultAlpha_descriptions">
|
||||
<English>Fallback Alpha value.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultLeadColor_displayName">
|
||||
<English>Lead Default Color</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultLeadColor_description">
|
||||
<English>Fallback Color value for group leaders.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultColor_displayName">
|
||||
<English>Default Color</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_defaultColor_description">
|
||||
<English>Fallback Color value.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_leadAlpha_displayName">
|
||||
<English>Lead Alpha</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_leadAlpha_description">
|
||||
<English>Alpha value for group leaders of groups synced with this module.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_alpha_displayName">
|
||||
<English>Alpha</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_alpha_description">
|
||||
<English>Alpha value for group members of groups synced with this module.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_leadColor_displayName">
|
||||
<English>Lead Color</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_leadColor_description">
|
||||
<English>Color value for group leaders of groups synced with this module.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_color_displayName">
|
||||
<English>Color</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_color_description">
|
||||
<English>Color value for group members of groups synced with this module.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_moduleGroupSettings_displayName">
|
||||
<English>Map Gestures - Group Settings</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_interval_displayName">
|
||||
<English>Update Interval</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_interval_description">
|
||||
<English>Time between data updates.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_GroupColorConfigurations_displayName">
|
||||
<English>Group color configurations</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_GroupColorConfigurations_description">
|
||||
<English>Group color configuration containing arrays of color pairs ([leadColor, color]).</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_GroupColorConfigurationMapping_description">
|
||||
<English>Hash of Group ID mapped to the Group color configuration index.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_GroupColorConfigurationMapping_displayName">
|
||||
<English>GroupID Color configuration mapping</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_enabled_description">
|
||||
<English>Enables the Map Gestures.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_nameTextColor_displayName">
|
||||
<English>Name Text Color</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_nameTextColor_description">
|
||||
<English>Color of the name tag text besides the map gestures mark.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_map_gestures_mapGestures_category">
|
||||
<English>Map Gestures</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
BIN
addons/map_gestures/ui/icon_module_map_gestures_ca.paa
Normal file
BIN
addons/map_gestures/ui/icon_module_map_gestures_ca.paa
Normal file
Binary file not shown.
@ -1,61 +1,26 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Assign a medical role to a unit
|
||||
* Assign a medical role to a unit.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The module logic <LOGIC>
|
||||
* 1: units <ARRAY>
|
||||
* 2: activated <BOOL>
|
||||
* 0: The module logic <OBJECT>
|
||||
* 1: Synchronized units <ARRAY>
|
||||
* 2: Activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
||||
params [["_logic", objNull, [objNull]]];
|
||||
params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
_list = _logic getvariable ["EnableList",""];
|
||||
private ["_list", "_setting"];
|
||||
_list = _logic getVariable ["EnableList", ""];
|
||||
_setting = _logic getVariable ["role", 0];
|
||||
|
||||
_splittedList = [_list, ","] call BIS_fnc_splitString;
|
||||
_nilCheckPassedList = "";
|
||||
{
|
||||
_x = [_x] call EFUNC(common,stringRemoveWhiteSpace);
|
||||
if !(isnil _x) then {
|
||||
if (_nilCheckPassedList == "") then {
|
||||
_nilCheckPassedList = _x;
|
||||
} else {
|
||||
_nilCheckPassedList = _nilCheckPassedList + ","+ _x;
|
||||
};
|
||||
};
|
||||
} foreach _splittedList;
|
||||
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_parsedList = [] call compile _list;
|
||||
_setting = _logic getvariable ["role",0];
|
||||
_objects = synchronizedObjects _logic;
|
||||
if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then {
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
if (typeName _x == typeName objNull) then {
|
||||
if (local _x) then {
|
||||
_x setvariable [QGVAR(medicClass), _setting, true];
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _objects;
|
||||
};
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
if (typeName _x == typeName objNull) then {
|
||||
if (local _x) then {
|
||||
_x setvariable [QGVAR(medicClass), _setting, true];
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _parsedList;
|
||||
};
|
||||
[_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
[synchronizedObjects _logic, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
};
|
||||
|
@ -1,11 +1,11 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Assign vehicle as a medical vehicle
|
||||
* Assign vehicle as a medical vehicle.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The module logic <LOGIC>
|
||||
* 1: units <ARRAY>
|
||||
* 2: activated <BOOL>
|
||||
* 0: The module logic <OBJECT>
|
||||
* 1: Synchronized units <ARRAY>
|
||||
* 2: Activated <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
@ -14,50 +14,13 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList", "_xVehicle"];
|
||||
params [["_logic", objNull, [objNull]]];
|
||||
params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
_list = _logic getvariable ["EnableList",""];
|
||||
private ["_list", "_setting"];
|
||||
_list = _logic getVariable ["EnableList", ""];
|
||||
_setting = _logic getVariable ["enabled", 0];
|
||||
|
||||
_splittedList = [_list, ","] call BIS_fnc_splitString;
|
||||
_nilCheckPassedList = "";
|
||||
{
|
||||
_x = [_x] call EFUNC(common,stringRemoveWhiteSpace);
|
||||
if !(isnil _x) then {
|
||||
if (_nilCheckPassedList == "") then {
|
||||
_nilCheckPassedList = _x;
|
||||
} else {
|
||||
_nilCheckPassedList = _nilCheckPassedList + ","+ _x;
|
||||
};
|
||||
};
|
||||
} foreach _splittedList;
|
||||
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_parsedList = [] call compile _list;
|
||||
_setting = _logic getvariable ["enabled", 0];
|
||||
_objects = synchronizedObjects _logic;
|
||||
if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then {
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
if (typeName _x == typeName objNull) then {
|
||||
if (local _x) then {
|
||||
_xVehicle = vehicle _x;
|
||||
TRACE_3("setting medical vehicle", _x, _xVehicle, (typeOf _xVehicle));
|
||||
_xVehicle setvariable [QGVAR(medicClass), _setting, true];
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _objects;
|
||||
};
|
||||
{
|
||||
if (!isnil "_x") then {
|
||||
if (typeName _x == typeName objNull) then {
|
||||
if (local _x) then {
|
||||
TRACE_2("setting medical vehicle", _x, (typeOf _x));
|
||||
_x setvariable [QGVAR(medicClass), _setting, true];
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _parsedList;
|
||||
[_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
[synchronizedObjects _logic, QGVAR(medicClass), _setting, true, true] call EFUNC(common,assignObjectsInList);
|
||||
};
|
||||
|
@ -17,7 +17,7 @@ TRACE_1("", _launchParams);
|
||||
// TODO:: Make sure the missile maintains LOS
|
||||
_foundTargetPos = [0,0,0];
|
||||
if(!isNil "_target") then {
|
||||
_foundTargetPos = getPosASL _target;
|
||||
_foundTargetPos = aimPos _target ;
|
||||
//_foundTargetPos = (_target modelToWorldVisual (getCenterOfMass _target));
|
||||
};
|
||||
|
||||
@ -48,4 +48,4 @@ if(!_angleOkay || !_losOkay) then {
|
||||
};
|
||||
|
||||
|
||||
_foundTargetPos;
|
||||
_foundTargetPos;
|
||||
|
@ -11,51 +11,35 @@
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* function = "ace_repair_fnc_moduleAssignRepairVehicle"
|
||||
* function = "ace_repair_fnc_moduleAddSpareParts"
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
private ["_list", "_part", "_amount", "_nilCheckPassedList"];
|
||||
// Module settings
|
||||
private ["_list", "_part", "_amount"];
|
||||
_list = _logic getVariable ["List", ""];
|
||||
_part = _logic getVariable ["Part", 0];
|
||||
_amount = _logic getVariable ["Amount", 1];
|
||||
|
||||
// Parse list
|
||||
_nilCheckPassedList = "";
|
||||
{
|
||||
_x = [_x] call EFUNC(common,stringRemoveWhiteSpace);
|
||||
if !(isnil _x) then {
|
||||
if (_nilCheckPassedList == "") then {
|
||||
_nilCheckPassedList = _x;
|
||||
} else {
|
||||
_nilCheckPassedList = _nilCheckPassedList + "," + _x;
|
||||
};
|
||||
};
|
||||
} forEach ([_list, ","] call BIS_fnc_splitString);
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_list = [] call compile _list;
|
||||
_list = [_list, true, true] call EFUNC(common,parseList);
|
||||
|
||||
// Add synchronized objects to list
|
||||
{
|
||||
_list pushBack _x;
|
||||
} forEach (synchronizedObjects _logic);
|
||||
nil
|
||||
} count (synchronizedObjects _logic);
|
||||
|
||||
if (_list isEqualTo []) exitWith {};
|
||||
|
||||
TRACE_3("module info parsed",_list,_part,_amount);
|
||||
TRACE_3("Module info parsed",_list,_part,_amount);
|
||||
|
||||
// Add spare parts
|
||||
{
|
||||
if (!isNil "_x" && {typeName _x == typeName objNull}) then {
|
||||
[_x, _amount, _part, true] call FUNC(addSpareParts);
|
||||
};
|
||||
} forEach _list;
|
||||
[_x, _amount, _part, true] call FUNC(addSpareParts);
|
||||
} count _list;
|
||||
};
|
||||
|
||||
true
|
||||
|
@ -21,11 +21,9 @@ params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
private ["_list", "_setting"];
|
||||
_list = _logic getVariable ["EnableList",""];
|
||||
_setting = _logic getVariable ["role",0];
|
||||
_list = _logic getVariable ["EnableList", ""];
|
||||
_setting = _logic getVariable ["role", 0];
|
||||
|
||||
[_list, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
[synchronizedObjects _logic, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
};
|
||||
|
||||
true
|
||||
};
|
||||
|
@ -21,11 +21,9 @@ params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
private ["_list", "_setting"];
|
||||
_list = _logic getVariable ["EnableList",""];
|
||||
_setting = _logic getVariable ["role",0];
|
||||
_list = _logic getVariable ["EnableList", ""];
|
||||
_setting = _logic getVariable ["role", 0];
|
||||
|
||||
[_list, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
[synchronizedObjects _logic, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
};
|
||||
|
||||
true
|
||||
|
@ -21,11 +21,9 @@ params ["_logic"];
|
||||
|
||||
if (!isNull _logic) then {
|
||||
private ["_list", "_setting"];
|
||||
_list = _logic getVariable ["EnableList",""];
|
||||
_setting = _logic getVariable ["role",0];
|
||||
_list = _logic getVariable ["EnableList", ""];
|
||||
_setting = _logic getVariable ["role", 0];
|
||||
|
||||
[_list, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
[synchronizedObjects _logic, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||
};
|
||||
|
||||
true
|
||||
};
|
||||
|
@ -17,3 +17,12 @@ class Extended_Killed_EventHandlers {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Need initPost or there are problems with setVariable
|
||||
class Extended_InitPost_EventHandlers {
|
||||
class ThingX {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(addSitActions));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -34,79 +34,67 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
|
||||
#define MACRO_SEAT_ACTION \
|
||||
class ACE_Actions { \
|
||||
class ACE_MainActions { \
|
||||
displayName = ECSTRING(interaction,MainAction); \
|
||||
selection = ""; \
|
||||
distance = 1.5; \
|
||||
condition = "true"; \
|
||||
class GVAR(Sit) { \
|
||||
displayName = CSTRING(Sit); \
|
||||
condition = QUOTE(_this call FUNC(canSit)); \
|
||||
statement = QUOTE(_this call FUNC(sit)); \
|
||||
showDisabled = 0; \
|
||||
priority = 0; \
|
||||
icon = PATHTOF(UI\sit_ca.paa); \
|
||||
}; \
|
||||
}; \
|
||||
};
|
||||
|
||||
class ThingX;
|
||||
// Folding Chair
|
||||
class Land_CampingChair_V1_F: ThingX {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 180;
|
||||
GVAR(sitPosition[]) = {0, -0.1, -0.45};
|
||||
GVAR(sitRotation) = 10;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 180;
|
||||
};
|
||||
// Camping Chair
|
||||
class Land_CampingChair_V2_F: ThingX {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 180;
|
||||
GVAR(sitPosition[]) = {0, -0.1, -0.45};
|
||||
GVAR(sitRotation) = 45;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 180;
|
||||
};
|
||||
|
||||
class Furniture_base_F;
|
||||
// Chair (Plastic)
|
||||
class Land_ChairPlastic_F: Furniture_base_F {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 90;
|
||||
GVAR(sitPosition[]) = {0, 0, -0.5};
|
||||
GVAR(sitRotation) = 5;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 270;
|
||||
};
|
||||
// Chair (Wooden)
|
||||
class Land_ChairWood_F: Furniture_base_F {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 180;
|
||||
GVAR(sitPosition[]) = {0, -0.05, 0};
|
||||
GVAR(sitRotation) = 75;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 180;
|
||||
};
|
||||
// Office Chair
|
||||
class Land_OfficeChair_01_F: Furniture_base_F {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 180;
|
||||
GVAR(sitPosition[]) = {0, 0, -0.6};
|
||||
GVAR(sitRotation) = 15;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 180;
|
||||
};
|
||||
// Rattan Chair
|
||||
class Land_RattanChair_01_F: Furniture_base_F {
|
||||
XEH_ENABLED;
|
||||
MACRO_SEAT_ACTION
|
||||
GVAR(canSit) = 1;
|
||||
GVAR(sitDirection) = 180;
|
||||
GVAR(sitPosition[]) = {0, -0.1, -1}; // Z must be -1 due to chair's geometry (magic floating seat point)
|
||||
GVAR(sitRotation) = 2;
|
||||
EGVAR(dragging,canCarry) = 1;
|
||||
EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5};
|
||||
EGVAR(dragging,carryDirection) = 180;
|
||||
};
|
||||
};
|
||||
|
@ -4,7 +4,7 @@
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
// Add interaction menu exception
|
||||
["isNotSitting", {!((_this select 0) getVariable [QGVAR(isSitting), false])}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotSitting", {isNil {(_this select 0) getVariable QGVAR(isSitting)}}] call EFUNC(common,addCanInteractWithCondition);
|
||||
|
||||
// Handle interruptions
|
||||
["medical_onUnconscious", {_this call DFUNC(handleInterrupt)}] call EFUNC(common,addEventhandler);
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(addSitActions);
|
||||
PREP(canSit);
|
||||
PREP(canStand);
|
||||
PREP(getRandomAnimation);
|
||||
@ -10,4 +11,6 @@ PREP(moduleInit);
|
||||
PREP(sit);
|
||||
PREP(stand);
|
||||
|
||||
GVAR(initializedClasses) = [];
|
||||
|
||||
ADDON = true;
|
||||
|
42
addons/sitting/functions/fnc_addSitActions.sqf
Normal file
42
addons/sitting/functions/fnc_addSitActions.sqf
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Author: Jonpas
|
||||
* Adds sit actions.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Seat <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [seat] call ace_sitting_fnc_addSitActions
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_seat"];
|
||||
private ["_type", "_sitAction"];
|
||||
|
||||
_type = typeOf _seat;
|
||||
|
||||
// Exit if the object is not specified as a seat
|
||||
if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canSit)) != 1) exitWith {};
|
||||
|
||||
// Exit if class already initialized
|
||||
if (_type in GVAR(initializedClasses)) exitWith {};
|
||||
|
||||
GVAR(initializedClasses) pushBack _type;
|
||||
|
||||
_sitAction = [
|
||||
QGVAR(Sit),
|
||||
localize LSTRING(Sit),
|
||||
QUOTE(PATHTOF(UI\sit_ca.paa)),
|
||||
{_this call FUNC(sit)},
|
||||
{_this call FUNC(canSit)},
|
||||
{},
|
||||
[],
|
||||
[0, 0, 0],
|
||||
1.5
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
[_type, 0, ["ACE_MainActions"], _sitAction] call EFUNC(interact_menu,addActionToClass);
|
@ -4,22 +4,20 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Seat <OBJECT>
|
||||
* 1: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Sit Down <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [seat, player] call ace_sitting_fnc_canSit
|
||||
* [seat] call ace_sitting_fnc_canSit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_seat", "_player"];
|
||||
params ["_seat"];
|
||||
|
||||
// Sitting enabled, is seat object, not occupied and standing up (or not on a big slope)
|
||||
GVAR(enable) &&
|
||||
{getNumber (configFile >> "CfgVehicles" >> typeOf _seat >> QGVAR(canSit)) == 1} &&
|
||||
{isNil {_seat getVariable QGVAR(seatOccupied)}} &&
|
||||
{round (vectorUp _seat select 0) == 0 && {round (vectorUp _seat select 1) == 0} && {round (vectorUp _seat select 2) == 1}}
|
||||
|
@ -18,4 +18,4 @@
|
||||
params ["_player"];
|
||||
|
||||
// Sitting
|
||||
(_player getVariable [QGVAR(isSitting), false])
|
||||
!isNil {_player getVariable QGVAR(isSitting)}
|
||||
|
@ -17,6 +17,6 @@
|
||||
|
||||
params ["_player"];
|
||||
|
||||
if (_player getVariable [QGVAR(isSitting), false]) then {
|
||||
if (!isNil {_player getVariable QGVAR(isSitting)}) then {
|
||||
_player call FUNC(stand);
|
||||
};
|
||||
|
@ -16,23 +16,14 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_sitRotation", "_seatPosOrig"];
|
||||
private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_seatPosOrig"];
|
||||
|
||||
params ["_seat", "_player"];
|
||||
|
||||
// Set global variable for standing up
|
||||
GVAR(seat) = _seat;
|
||||
|
||||
// Overwrite weird position, because Arma decides to set it differently based on current animation/stance...
|
||||
_player switchMove "amovpknlmstpsraswrfldnon";
|
||||
|
||||
// Add scroll-wheel action to release object
|
||||
_actionID = _player getVariable [QGVAR(StandUpActionID), -1];
|
||||
|
||||
if (_actionID != -1) then {
|
||||
_player removeAction _actionID;
|
||||
};
|
||||
|
||||
_actionID = _player addAction [
|
||||
format ["<t color='#FFFF00'>%1</t>", localize LSTRING(Stand)],
|
||||
QUOTE((_this select 0) call FUNC(stand)),
|
||||
@ -44,13 +35,10 @@ _actionID = _player addAction [
|
||||
QUOTE(_this call FUNC(canStand))
|
||||
];
|
||||
|
||||
_player setVariable [QGVAR(StandUpActionID), _actionID];
|
||||
|
||||
// Read config
|
||||
_configFile = configFile >> "CfgVehicles" >> typeOf _seat;
|
||||
_sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection));
|
||||
_sitPosition = getArray (_configFile >> QGVAR(sitPosition));
|
||||
_sitRotation = if (isNumber (_configFile >> QGVAR(sitRotation))) then {getNumber (_configFile >> QGVAR(sitRotation))} else {45}; // Apply default if config entry not present
|
||||
|
||||
// Get random animation and perform it (before moving player to ensure correct placement)
|
||||
[_player, call FUNC(getRandomAnimation), 2] call EFUNC(common,doAnimation); // Correctly places when using non-transitional animations
|
||||
@ -58,11 +46,11 @@ _sitRotation = if (isNumber (_configFile >> QGVAR(sitRotation))) then {getNumber
|
||||
|
||||
// Set direction and position
|
||||
_player setDir _sitDirection;
|
||||
// No need for ATL/ASL as modelToWorld returns in format position
|
||||
_player setPos (_seat modelToWorld _sitPosition);
|
||||
//modelToWorld returns AGL
|
||||
_player setPosASL (AGLtoASL (_seat modelToWorld _sitPosition));
|
||||
|
||||
// Set variables
|
||||
_player setVariable [QGVAR(isSitting), true];
|
||||
// Set variables, save seat object on player
|
||||
_player setVariable [QGVAR(isSitting), [_seat, _actionID]];
|
||||
_seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat
|
||||
|
||||
|
||||
@ -73,7 +61,7 @@ _seatPosOrig = getPosASL _seat;
|
||||
_args params ["_player", "_seat", "_seatPosOrig"];
|
||||
|
||||
// Remove PFH if not sitting any more
|
||||
if !(_player getVariable [QGVAR(isSitting), false]) exitWith {
|
||||
if (isNil {_player getVariable QGVAR(isSitting)}) exitWith {
|
||||
[_pfhId] call CBA_fnc_removePerFrameHandler;
|
||||
TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(isSitting), false)]);
|
||||
};
|
||||
|
@ -16,12 +16,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_player"];
|
||||
private ["_animation"];
|
||||
|
||||
// remove scroll wheel action
|
||||
_player removeAction (_player getVariable [QGVAR(StandUpActionID), -1]);
|
||||
(_player getVariable QGVAR(isSitting)) params ["_seat", "_actionID"];
|
||||
|
||||
// Remove scroll-wheel action
|
||||
_player removeAction _actionID;
|
||||
|
||||
// Restore animation
|
||||
private "_animation";
|
||||
_animation = switch (currentWeapon _player) do {
|
||||
case "": {"amovpercmstpsnonwnondnon"};
|
||||
case (primaryWeapon _player): {"amovpercmstpslowwrfldnon"};
|
||||
@ -33,5 +35,5 @@ _animation = switch (currentWeapon _player) do {
|
||||
|
||||
// Set variables to nil
|
||||
_player setVariable [QGVAR(isSitting), nil];
|
||||
GVAR(seat) setVariable [QGVAR(seatOccupied), nil, true];
|
||||
GVAR(seat) = nil;
|
||||
if (isNull _seat) exitWith {};
|
||||
_seat setVariable [QGVAR(seatOccupied), nil, true];
|
||||
|
@ -5,7 +5,6 @@ ADDON = false;
|
||||
PREP(addSlideActions);
|
||||
PREP(autoTransition);
|
||||
PREP(createSlideshow);
|
||||
PREP(makeList);
|
||||
PREP(moduleInit);
|
||||
|
||||
GVAR(slideshows) = 0;
|
||||
|
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* Author: Jonpas
|
||||
* Makes a list from a string using comma as a delimiter, optionally remove whitespace and check each for object existence.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Text <STRING>
|
||||
* 1: Trim Whitespace <BOOL>
|
||||
* 2: Check Nil <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* Parsed List <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* ["text", true, false] call ace_slideshow_fnc_makeList
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_splittedList", "_listTrimmedWhitespace", "_nilCheckPassedList"];
|
||||
params ["_list", "_trimWhitespace", "_checkNil"];
|
||||
|
||||
// Split using comma delimiter
|
||||
_splittedList = [_list, ","] call BIS_fnc_splitString;
|
||||
|
||||
// Remove whitespace
|
||||
_listTrimmedWhitespace = [];
|
||||
if (_trimWhitespace) then {
|
||||
{
|
||||
_listTrimmedWhitespace pushBack ([_x] call CBA_fnc_trim);
|
||||
nil
|
||||
} count _splittedList;
|
||||
_list = _listTrimmedWhitespace;
|
||||
};
|
||||
|
||||
// Check for object existence
|
||||
_nilCheckPassedList = "";
|
||||
if (_checkNil) then {
|
||||
{
|
||||
if !(isNil _x) then {
|
||||
if (_nilCheckPassedList == "") then {
|
||||
_nilCheckPassedList = _x;
|
||||
} else {
|
||||
_nilCheckPassedList = _nilCheckPassedList + "," + _x;
|
||||
};
|
||||
};
|
||||
} count _list;
|
||||
|
||||
// Add Array characters and parse into array
|
||||
_list = "[" + _nilCheckPassedList + "]";
|
||||
_list = [] call compile _list;
|
||||
};
|
||||
|
||||
TRACE_4("Lists",_splittedList,_listTrimmedWhitespace,_nilCheckPassedList,_list);
|
||||
|
||||
_list // return
|
@ -24,10 +24,10 @@ if !(_activated) exitWith {};
|
||||
if (isNull _logic) exitWith {};
|
||||
|
||||
// Extract variables from logic
|
||||
_objects = [_logic getVariable ["Objects", ""], true, true] call FUNC(makeList);
|
||||
_controllers = [_logic getVariable ["Controllers", ""], true, true] call FUNC(makeList);
|
||||
_images = [_logic getVariable ["Images", ""], true, false] call FUNC(makeList);
|
||||
_names = [_logic getVariable ["Names", ""], true, false] call FUNC(makeList);
|
||||
_objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList);
|
||||
_controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList);
|
||||
_images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList);
|
||||
_names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList);
|
||||
_duration = _logic getVariable ["Duration", 0];
|
||||
|
||||
// Objects synced to the module
|
||||
|
@ -3,25 +3,25 @@
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/acemod/ACE3/releases">
|
||||
<img src="https://img.shields.io/badge/Version-3.3.2-blue.svg" alt="ACE3 Version">
|
||||
<img src="https://img.shields.io/badge/Version-3.3.2-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
||||
<img src="https://img.shields.io/badge/Download-65.7_MB-green.svg" alt="ACE3 Download">
|
||||
<img src="https://img.shields.io/badge/Download-65.7_MB-green.svg?style=flat-square" alt="ACE3 Download">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?label=Issues" alt="ACE3 Issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
|
||||
</a>
|
||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
||||
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg" alt="BIF Thread">
|
||||
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg?style=flat-square" alt="BIF Thread">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||
<img src="https://img.shields.io/badge/License-GPLv2-red.svg" alt="ACE3 License">
|
||||
<img src="https://img.shields.io/badge/License-GPLv2-red.svg?style=flat-square" alt="ACE3 License">
|
||||
</a>
|
||||
<a href="http://slackin.ace3mod.com/">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg" alt="ACE3 Slack">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg?style=flat-square&label=Slack" alt="ACE3 Slack">
|
||||
</a>
|
||||
<a href="https://travis-ci.org/acemod/ACE3">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg" alt="ACE3 Build Status">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg?style=flat-square&label=Build" alt="ACE3 Build Status">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center"><sup><strong>Benötigt die aktuellste Version von <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. Besucht uns auf <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
|
||||
@ -30,30 +30,54 @@
|
||||
|
||||
Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar)
|
||||
|
||||
Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten ausschließen, da das Feature nicht gewünscht ist, oder es mit einer anderen MOD in Konflikt gerät etc. .Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am medizinischem System), sodass eine individuelle Erfahrung gewährleistet wird.
|
||||
Die Mod ist **modular aufgebaut**. Beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten ausschließen, wenn gewisse Features nicht gewünscht sind, oder es mit einer anderen Mod in Konflikt gerät. Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am Sanitätssystem), sodass eine individuelle Erfahrung gewährleistet werden kann.
|
||||
|
||||
### Features
|
||||
- Verbessertes medizinisches System
|
||||
- Logistik System: U.a. Transport und Fahrzeugreparatur
|
||||
- Sprengstoffsystem mit unterschiedlichen Zündern
|
||||
### Hauptmerkmale
|
||||
- Vollkommen neues 3D-Interaktionssystem
|
||||
- Leistungs- und stabilitätsoptimiert
|
||||
- Hauptmerkmal auf Modularität und individuelle Anpassungsmöglichkeiten
|
||||
- Neue, flexible Spieler- und Servereinstellungen
|
||||
- Verbessertes Sanitätssystem mit unterschiedlichen Stufen (Basis/Erweitert)
|
||||
- Echte und stetige Wettersynchronisation
|
||||
- Ballistik basierend auf vielen Faktoren u.a. Wetter und Wind
|
||||
- Gefangenensystem
|
||||
- Reale Namen für Arma 3 Fahrzeuge und Waffen
|
||||
- Realistisches, ballistisches Verhalten (Wind und Luftfeuchtigkeit)
|
||||
- Simulation der Rückstrahlzone
|
||||
- Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber
|
||||
***und noch viel mehr...***
|
||||
- Sprengtoffmechaniken mit unterschiedlichen Zündern
|
||||
- Kartenverbesserungen – Setzen von Markierungen / Kartenwerkzeuge
|
||||
- Erweitertes Raketenlenksystem
|
||||
|
||||
#### Weitere Mechaniken
|
||||
- Tragen und Ziehen
|
||||
- Waffen und Fahrzeuge tragen die Namen ihrer Vorbilder aus der echten Welt
|
||||
- Ein Feuerleitsystem (FLS) für Hubschrauber und Panzer
|
||||
- Viele Funktionen werden in C/C++ Erweiterungen berechnet
|
||||
- Rückstrahlzonen- und Überdrucksimulation
|
||||
- Einwegwaffen
|
||||
- Realistische G-Kräfte
|
||||
- Fahrzeuge abschließen
|
||||
- Realistische Nacht- und Thermalsicht
|
||||
- Magazine umpacken
|
||||
- Realistische Waffen Er- bzw. Überhitzung
|
||||
- Temporäre Taubheit bei zu lauten Geräuschen
|
||||
- Verbesserte Ragdoll-Physik
|
||||
- Verbesserte Interaktionen für MG2s und Munitionsschlepper
|
||||
- Einstellbare Zielfernrohre
|
||||
- Keine Ruheanimationen bei gesenkter Waffe
|
||||
- Über Hindernisse springen, über Mauern klettern, Zäune durchtrennen
|
||||
- Keine "sprechender Charkater"
|
||||
- Vector IV, MicroDAGR und Kestrel <br>
|
||||
***und noch viel viel mehr...***
|
||||
|
||||
#### Anleitungen
|
||||
Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet?
|
||||
- [Erste Schritte](http://ace3mod.com/wiki/user/getting-started.html).
|
||||
|
||||
#### Mitwirken
|
||||
Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, indem du nach Fehlern Ausschau hältst, oder neue Funktionen vorschlägst. Um etwas beizutragen, "Forke" einfach dieses Archiv (bzw. repository) und erstelle deine "Pull-Request", welche von anderen Entwicklern und Beiträgern überprüft wird. Bitte trage dich dabei in [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) mit deinem Nutzernamen und einer gütligen Email-Adresse ein.
|
||||
Wenn du bei der Entwicklung von ACE3 mithelfen möchtest, kannst du dies tun, indem du nach Fehlern Ausschau hältst oder neue Funktionen vorschlägst. Um etwas beizutragen, "Forke" dieses Repository und erstelle deine "Pull-Requests", welche von anderen Entwicklern und Beiträgern überprüft werden. Bitte trage dich dabei in [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) mit deinem Nutzernamen und einer gültigen Email-Adresse ein.
|
||||
|
||||
Um einen Fehler oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). Besuche auch:
|
||||
Um uns einen Fehler, Anregungen oder neue Funktionalitäten mitzuteilen: Nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). Besuche auch:
|
||||
- [Wie kann ich ein Problem melden](http://ace3mod.com/wiki/user/how-to-report-an-issue.html)
|
||||
- [Wie kann ich ein Feature Request erstellen](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
|
||||
- [Wie kann ich ein Wunsch zu einer neuen Funktion mitteilen?](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
|
||||
|
||||
#### Testen & MOD erstellen
|
||||
Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du [Git](https://help.github.com/articles/fetching-a-remote/) - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link](https://github.com/acemod/ACE3/archive/master.zip) herunter.
|
||||
Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE3 erstellst folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md).
|
||||
#### Testen & Mod erstellen
|
||||
Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir die "Master Branch" herunter. Entweder nutzt du [Git](https://help.github.com/articles/fetching-a-remote/) - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link](https://github.com/acemod/ACE3/archive/master.zip) herunter.
|
||||
Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE3 erstellst, folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md).
|
||||
|
@ -3,25 +3,25 @@
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/acemod/ACE3/releases">
|
||||
<img src="https://img.shields.io/badge/Wersja-3.3.2-blue.svg" alt="ACE3 Wersja">
|
||||
<img src="https://img.shields.io/badge/Wersja-3.3.2-blue.svg?style=flat-square" alt="ACE3 Wersja">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
||||
<img src="https://img.shields.io/badge/Pobierz-65.7_MB-green.svg" alt="ACE3 Pobierz">
|
||||
<img src="https://img.shields.io/badge/Pobierz-65.7_MB-green.svg?style=flat-square" alt="ACE3 Pobierz">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?label=Zagadnienia" alt="ACE3 Zagadnienia">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?label=Zagadnienia&style=flat-square" alt="ACE3 Zagadnienia">
|
||||
</a>
|
||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
||||
<img src="https://img.shields.io/badge/Temat-BIF-lightgrey.svg" alt="Temat BIF">
|
||||
<img src="https://img.shields.io/badge/Temat-BIF-lightgrey.svg?style=flat-square" alt="Temat BIF">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||
<img src="https://img.shields.io/badge/Licencja-GPLv2-red.svg" alt="ACE3 Licencja">
|
||||
<img src="https://img.shields.io/badge/Licencja-GPLv2-red.svg?style=flat-square" alt="ACE3 Licencja">
|
||||
</a>
|
||||
<a href="http://slackin.ace3mod.com/">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg" alt="ACE3 Slack">
|
||||
<img src="http://slackin.ace3mod.com/badge.svg?label=Slack&style=flat-square" alt="ACE3 Slack">
|
||||
</a>
|
||||
<a href="https://travis-ci.org/acemod/ACE3">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg" alt="ACE3 Build Status">
|
||||
<img src="https://img.shields.io/travis/acemod/ACE3.svg?style=flat-square" alt="ACE3 Build Status">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center"><sup><strong>Wymaga najnowszej wersji <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. Odwiedź nas na <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
|
||||
|
Loading…
Reference in New Issue
Block a user