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>
|
Dimaslg <dimaslg@telecable.es>
|
||||||
Drill <drill87@gmail.com>
|
Drill <drill87@gmail.com>
|
||||||
Dudakov <dudakov.s@gmail.com>
|
Dudakov <dudakov.s@gmail.com>
|
||||||
|
Dslyecxi <dslyecxi@gmail.com>
|
||||||
eRazeri
|
eRazeri
|
||||||
evromalarkey <evromalarkey@gmail.com>
|
evromalarkey <evromalarkey@gmail.com>
|
||||||
F3 Project <alanr@ferstaberinde.com>
|
F3 Project <alanr@ferstaberinde.com>
|
||||||
|
22
README.md
22
README.md
@ -1,30 +1,35 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" width="480">
|
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" width="480">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<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>
|
||||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<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>
|
||||||
<a href="http://slackin.ace3mod.com/">
|
<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>
|
||||||
<a href="https://travis-ci.org/acemod/ACE3">
|
<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>
|
</a>
|
||||||
</p>
|
</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.
|
**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
|
- Captivity system
|
||||||
- Explosives system, including different trigger types
|
- Explosives system, including different trigger types
|
||||||
- Map screen improvements – marker placement and map tools
|
- Map screen improvements – marker placement and map tools
|
||||||
|
- Logistics
|
||||||
- Advanced missile guidance and laser designation
|
- Advanced missile guidance and laser designation
|
||||||
|
|
||||||
#### Additional features
|
#### Additional features
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="Captives">
|
<Package name="Captives">
|
||||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||||
@ -99,7 +99,7 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_CableTieDescription">
|
<Key ID="STR_ACE_Captives_CableTieDescription">
|
||||||
<English>Cable ties that allow you to restrain prisoners.</English>
|
<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>
|
<Polish>Opaska zaciskowa pozwala na skrępowanie dłoni u więźnia.</Polish>
|
||||||
<Spanish>Los precintos permiten maniatar prisioneros</Spanish>
|
<Spanish>Los precintos permiten maniatar prisioneros</Spanish>
|
||||||
<French>Les Serflex permettent de menotter les prisonniers.</French>
|
<French>Les Serflex permettent de menotter les prisonniers.</French>
|
||||||
@ -206,7 +206,7 @@
|
|||||||
<Polish>Skuwanie sojuszników</Polish>
|
<Polish>Skuwanie sojuszników</Polish>
|
||||||
<Spanish>Se puede esposar el bando propio</Spanish>
|
<Spanish>Se puede esposar el bando propio</Spanish>
|
||||||
<Czech>Může spoutat spolubojovníky</Czech>
|
<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>
|
<Portuguese>Pode algemar o próprio lado</Portuguese>
|
||||||
<French>Peut libérer sa propre faction</French>
|
<French>Peut libérer sa propre faction</French>
|
||||||
<Hungarian>Saját oldal megbilincselhető</Hungarian>
|
<Hungarian>Saját oldal megbilincselhető</Hungarian>
|
||||||
@ -217,7 +217,7 @@
|
|||||||
<Polish>Czy gracze mogą skuwać sojuszników?</Polish>
|
<Polish>Czy gracze mogą skuwać sojuszników?</Polish>
|
||||||
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
|
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
|
||||||
<Czech>Mohou hráči spoutat jednotky na své straně</Czech>
|
<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>
|
<Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese>
|
||||||
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French>
|
<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>
|
<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>
|
<Polish>Gracze mogą skapitulować po schowaniu swojej broni do kabury</Polish>
|
||||||
<Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish>
|
<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>
|
<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>
|
<Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese>
|
||||||
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French>
|
<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>
|
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
|
||||||
@ -247,6 +247,7 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
|
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
|
||||||
<English>Require surrendering</English>
|
<English>Require surrendering</English>
|
||||||
|
<German>Benötigt Kapitulation</German>
|
||||||
<Polish>Wymagaj kapitulacji</Polish>
|
<Polish>Wymagaj kapitulacji</Polish>
|
||||||
<Portuguese>Requer rendição</Portuguese>
|
<Portuguese>Requer rendição</Portuguese>
|
||||||
<Russian>Требовать пленения</Russian>
|
<Russian>Требовать пленения</Russian>
|
||||||
@ -254,6 +255,7 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
|
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
|
||||||
<English>Require Players to surrender before they can be arrested</English>
|
<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>
|
<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>
|
<Portuguese>Requer que jogadores se rendam antes de poderem ser presos</Portuguese>
|
||||||
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
|
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
|
||||||
@ -261,6 +263,7 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_SurrenderOnly">
|
<Key ID="STR_ACE_Captives_SurrenderOnly">
|
||||||
<English>Surrendering only</English>
|
<English>Surrendering only</English>
|
||||||
|
<German>Nur Ergeben</German>
|
||||||
<Polish>Tylko kapitulacja</Polish>
|
<Polish>Tylko kapitulacja</Polish>
|
||||||
<Portuguese>Somente rendição </Portuguese>
|
<Portuguese>Somente rendição </Portuguese>
|
||||||
<Russian>Только сдавшийся в плен</Russian>
|
<Russian>Только сдавшийся в плен</Russian>
|
||||||
@ -268,6 +271,7 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
|
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
|
||||||
<English>Surrendering or No weapon</English>
|
<English>Surrendering or No weapon</English>
|
||||||
|
<German>Ergeben oder keine Waffe</German>
|
||||||
<Polish>Kapitulacja lub brak broni</Polish>
|
<Polish>Kapitulacja lub brak broni</Polish>
|
||||||
<Portuguese>Rendição ou desarmado</Portuguese>
|
<Portuguese>Rendição ou desarmado</Portuguese>
|
||||||
<Russian>Сдавшийся или безоружный</Russian>
|
<Russian>Сдавшийся или безоружный</Russian>
|
||||||
|
@ -133,6 +133,7 @@ PREP(numberToDigitsString);
|
|||||||
PREP(numberToString);
|
PREP(numberToString);
|
||||||
PREP(onAnswerRequest);
|
PREP(onAnswerRequest);
|
||||||
PREP(owned);
|
PREP(owned);
|
||||||
|
PREP(parseList);
|
||||||
PREP(player);
|
PREP(player);
|
||||||
PREP(playerSide);
|
PREP(playerSide);
|
||||||
PREP(positionToASL);
|
PREP(positionToASL);
|
||||||
|
@ -4,50 +4,41 @@
|
|||||||
* Used by moduleAssign* within various parts of the ACE3 project.
|
* Used by moduleAssign* within various parts of the ACE3 project.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: list <STRING>
|
* 0: List <STRING>
|
||||||
* 1: variableName <STRING>
|
* 1: Variable Name <STRING>
|
||||||
* 2: value <ANY>
|
* 2: Value <ANY>
|
||||||
* 3: Global <BOOL>
|
* 3: Global <BOOL>
|
||||||
|
* 4: Vehicle <BOOL> (default: false)
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None <NIL>
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ["text", "variable", value, true] call ace_common_fnc_assignObjectsInList
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
params ["_list", "_variable", "_setting", "_global"];
|
params ["_list", "_variable", "_setting", "_global", ["_vehicle", false]];
|
||||||
|
|
||||||
if (typeName _list == "STRING") then {
|
if (typeName _list == "STRING") then {
|
||||||
private ["_splittedList", "_nilCheckPassedList"];
|
_list = [_list, true, true] call FUNC(parseList);
|
||||||
|
TRACE_1("Parsed",_list)
|
||||||
_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];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
if (!isNil "_x") then {
|
if (!isNil "_x") then {
|
||||||
if (typeName _x == typeName objNull) then {
|
if (typeName _x == typeName objNull) then {
|
||||||
if (local _x) 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;
|
} 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"
|
#include "script_component.hpp"
|
||||||
|
params ["_wire"];
|
||||||
PARAMS_1(_wire);
|
_wire addEventHandler ["HandleDamage", FUNC(handleDamage)];
|
||||||
_wire addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}];
|
|
||||||
|
@ -8,10 +8,9 @@
|
|||||||
* 1: unit <OBJECT>
|
* 1: unit <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
@ -22,7 +21,7 @@ private ["_wireNoGeo", "_dir", "_pos", "_wireNoGeoPos"];
|
|||||||
_wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0];
|
_wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0];
|
||||||
{
|
{
|
||||||
_wireNoGeo animate [_x, 1];
|
_wireNoGeo animate [_x, 1];
|
||||||
} foreach WIRE_FAST;
|
} count WIRE_FAST;
|
||||||
|
|
||||||
GVAR(placer) = _unit;
|
GVAR(placer) = _unit;
|
||||||
_dir = getDir _unit;
|
_dir = getDir _unit;
|
||||||
@ -37,8 +36,9 @@ deleteVehicle _wirecoil;
|
|||||||
_unit setVariable [QGVAR(wireDeployed), false];
|
_unit setVariable [QGVAR(wireDeployed), false];
|
||||||
|
|
||||||
GVAR(deployPFH) = [{
|
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"];
|
private ["_range", "_posStart", "_posEnd", "_dirVect", "_dir", "_anim", "_wire"];
|
||||||
_posStart = (_wireNoGeo modelToWorldVisual (_wireNoGeo selectionPosition "start")) call EFUNC(common,positionToASL);
|
_posStart = (_wireNoGeo modelToWorldVisual (_wireNoGeo selectionPosition "start")) call EFUNC(common,positionToASL);
|
||||||
_posEnd = (getPosASL _unit) vectorAdd (vectorDir _unit);
|
_posEnd = (getPosASL _unit) vectorAdd (vectorDir _unit);
|
||||||
@ -46,37 +46,38 @@ GVAR(deployPFH) = [{
|
|||||||
_dir = _dirVect call CBA_fnc_vectDir;
|
_dir = _dirVect call CBA_fnc_vectDir;
|
||||||
_range = vectorMagnitude _dirVect;
|
_range = vectorMagnitude _dirVect;
|
||||||
_anim = 0 max (1 - (_range / 12));
|
_anim = 0 max (1 - (_range / 12));
|
||||||
|
|
||||||
if (!(alive _unit) || _range >= 12 || (_unit getVariable [QGVAR(wireDeployed), false])) exitWith {
|
if (!(alive _unit) || _range >= 12 || (_unit getVariable [QGVAR(wireDeployed), false])) exitWith {
|
||||||
_wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0];
|
_wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0];
|
||||||
{
|
{
|
||||||
_wire animate [_x, _anim];
|
_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 {
|
if (_wire animationPhase "wire_2" == _anim) then {
|
||||||
deleteVehicle _wireNoGeo;
|
deleteVehicle _wireNoGeo;
|
||||||
_wire setDir _dir;
|
_wire setDir _dir;
|
||||||
_wire setPosASL _wireNoGeoPos;
|
_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;
|
}, 0, [_wireNoGeo, _wire, _anim, _dir, _wireNoGeoPos]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
[_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler);
|
[_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler);
|
||||||
call EFUNC(interaction,hideMouseHint);
|
call EFUNC(interaction,hideMouseHint);
|
||||||
|
|
||||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
_wireNoGeo setDir _dir;
|
_wireNoGeo setDir _dir;
|
||||||
{
|
{
|
||||||
_wireNoGeo animate [_x, _anim];
|
_wireNoGeo animate [_x, _anim];
|
||||||
} foreach WIRE_FAST;
|
} count WIRE_FAST;
|
||||||
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
|
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);
|
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);
|
||||||
|
|
||||||
GVAR(placer) setVariable [QGVAR(Deploy),
|
GVAR(placer) setVariable [QGVAR(Deploy),
|
||||||
[GVAR(placer), "DefaultAction",
|
[GVAR(placer), "DefaultAction",
|
||||||
{GVAR(deployPFH) != -1},
|
{GVAR(deployPFH) != -1},
|
||||||
|
@ -8,10 +8,9 @@
|
|||||||
* 1: unit <OBJECT>
|
* 1: unit <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
@ -21,8 +20,7 @@ if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exit
|
|||||||
_this call FUNC(dismount);
|
_this call FUNC(dismount);
|
||||||
}, _this] call EFUNC(common,execNextFrame);
|
}, _this] call EFUNC(common,execNextFrame);
|
||||||
};
|
};
|
||||||
|
params ["_wire", "_unit"];
|
||||||
PARAMS_2(_wire,_unit);
|
|
||||||
|
|
||||||
private ["_config", "_delay"];
|
private ["_config", "_delay"];
|
||||||
_config = (configFile >> "CfgVehicles" >> typeOf _unit);
|
_config = (configFile >> "CfgVehicles" >> typeOf _unit);
|
||||||
|
@ -7,10 +7,9 @@
|
|||||||
* 0: wire <OBJECT>
|
* 0: wire <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
@ -18,25 +17,26 @@ PARAMS_1(_wire);
|
|||||||
|
|
||||||
{
|
{
|
||||||
_wire animate [_x, 1];
|
_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 {
|
if (_wire animationPhase "wire_2" == 1) then {
|
||||||
private ["_dir", "_pos", "_wirecoil"];
|
private ["_dir", "_pos", "_wirecoil"];
|
||||||
|
|
||||||
_dir = getDir _wire;
|
_dir = getDir _wire;
|
||||||
_pos = getPosASL _wire;
|
_pos = getPosASL _wire;
|
||||||
|
|
||||||
_wirecoil = "ACE_ConcertinaWireCoil" createvehicle [0, 0, 0];
|
_wirecoil = "ACE_ConcertinaWireCoil" createvehicle [0, 0, 0];
|
||||||
|
|
||||||
deleteVehicle _wire;
|
deleteVehicle _wire;
|
||||||
|
|
||||||
_wirecoil setDir _dir;
|
_wirecoil setDir _dir;
|
||||||
_wirecoil setPosASL _pos;
|
_wirecoil setPosASL _pos;
|
||||||
_wirecoil setVelocity [0, 0, 0];
|
_wirecoil setVelocity [0, 0, 0];
|
||||||
|
|
||||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
}, 0, [_wire]] call CBA_fnc_addPerFrameHandler;
|
}, 0, [_wire]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
@ -11,15 +11,12 @@
|
|||||||
* 4: projectile <STRING>
|
* 4: projectile <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
params ["_wire", "", "_damage", "_source", ""];
|
||||||
PARAMS_5(_wire,_selectionName,_damage,_source,_projectile);
|
|
||||||
|
|
||||||
if (_damage < 0.5) exitWith { 0 };
|
if (_damage < 0.5) exitWith { 0 };
|
||||||
|
|
||||||
if (!(isNull _source)) then {
|
if (!(isNull _source)) then {
|
||||||
|
@ -8,14 +8,12 @@
|
|||||||
* 1: killer (vehicle) <OBJECT>
|
* 1: killer (vehicle) <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
params ["_wire", "_killer"];
|
||||||
PARAMS_2(_wire,_killer);
|
|
||||||
|
|
||||||
private ["_distance", "_vehicle"];
|
private ["_distance", "_vehicle"];
|
||||||
|
|
||||||
|
@ -7,14 +7,12 @@
|
|||||||
* 1: vehicle <OBJECT>
|
* 1: vehicle <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
params ["_wire", "_vehicle"];
|
||||||
PARAMS_2(_wire,_vehicle);
|
|
||||||
|
|
||||||
private ["_type", "_mode", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w"];
|
private ["_type", "_mode", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w"];
|
||||||
|
|
||||||
@ -43,8 +41,8 @@ _dir_w = getDir _wire;
|
|||||||
|
|
||||||
if (_mode == 0) then {
|
if (_mode == 0) then {
|
||||||
private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"];
|
private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"];
|
||||||
_x = _pos_w select 0;
|
_pos_w params ["_x","_y"];
|
||||||
_y = _pos_w select 1;
|
|
||||||
// Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle)
|
// Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle)
|
||||||
_wireCheckPosAr = [
|
_wireCheckPosAr = [
|
||||||
[_x + (sin (_dir_w+90) * 1.5),_y + (cos (_dir_w+90) * 1.5)],
|
[_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));
|
init = QUOTE(_this call DFUNC(initObject));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class ReammoBox_F {
|
class ThingX {
|
||||||
class ADDON {
|
|
||||||
init = QUOTE(_this call DFUNC(initObject));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class ACE_RepairItem_Base {
|
|
||||||
class ADDON {
|
class ADDON {
|
||||||
init = QUOTE(_this call DFUNC(initObject));
|
init = QUOTE(_this call DFUNC(initObject));
|
||||||
};
|
};
|
||||||
|
@ -15,5 +15,6 @@ PREP(restoreUserData);
|
|||||||
PREP(storeUserData);
|
PREP(storeUserData);
|
||||||
PREP(updateDisplay);
|
PREP(updateDisplay);
|
||||||
PREP(updateImpellerState);
|
PREP(updateImpellerState);
|
||||||
|
PREP(updateMemory);
|
||||||
|
PREP(dayOfWeek);
|
||||||
ADDON = true;
|
ADDON = true;
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
* Handles the Kestrel 4500 dialog button actions
|
* Handles the Kestrel 4500 dialog button actions
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* buttonID <integer>
|
* button ID <NUMBER>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* 2 call ace_kestrel4500_fnc_buttonPressed
|
* 2 call ace_kestrel4500_fnc_buttonPressed
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
* Tests if the Kestrel 4500 can be shown
|
* Tests if the Kestrel 4500 can be shown
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* canShow (bool)
|
* canShow <BOOL>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [mode] call ace_kestrel4500_fnc_canShow
|
* call ace_kestrel4500_fnc_canShow
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
|
@ -3,18 +3,19 @@
|
|||||||
* Gathers the weather data for the Kestrel 4500
|
* Gathers the weather data for the Kestrel 4500
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
* call ace_kestrel4500_fnc_collectData
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#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;
|
_playerDir = getDir ACE_player;
|
||||||
_playerAltitude = (getPosASL ACE_player) select 2;
|
_playerAltitude = (getPosASL ACE_player) select 2;
|
||||||
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
|
_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];
|
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 {
|
if (GVAR(MinAvgMaxMode) == 1) then {
|
||||||
{
|
{
|
||||||
GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1];
|
GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1];
|
||||||
} forEach [2, 3, 4];
|
} count [2, 3, 4];
|
||||||
|
|
||||||
// Wind SPD
|
// Wind SPD
|
||||||
_windSpeed = call FUNC(measureWindSpeed);
|
_windSpeed = call FUNC(measureWindSpeed);
|
||||||
[2, _windSpeed] call _fnc_updateMemory;
|
[2, _windSpeed] call FUNC(updateMemory);
|
||||||
|
|
||||||
// CROSSWIND
|
// CROSSWIND
|
||||||
_crosswind = 0;
|
_crosswind = 0;
|
||||||
@ -62,7 +57,7 @@ if (GVAR(MinAvgMaxMode) == 1) then {
|
|||||||
} else {
|
} else {
|
||||||
_crosswind = abs(sin(GVAR(RefHeading)) * _windSpeed);
|
_crosswind = abs(sin(GVAR(RefHeading)) * _windSpeed);
|
||||||
};
|
};
|
||||||
[3, _crosswind] call _fnc_updateMemory;
|
[3, _crosswind] call FUNC(updateMemory);
|
||||||
|
|
||||||
// HEADWIND
|
// HEADWIND
|
||||||
_headwind = 0;
|
_headwind = 0;
|
||||||
@ -80,12 +75,4 @@ if (GVAR(MinAvgMaxMode) == 1) then {
|
|||||||
GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _headwind];
|
GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _headwind];
|
||||||
};
|
};
|
||||||
|
|
||||||
[5, _temperature] 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]];
|
||||||
[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;
|
|
||||||
|
@ -3,12 +3,13 @@
|
|||||||
* Opens the Kestrel 4500 dialog
|
* Opens the Kestrel 4500 dialog
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
* call ace_kestrel4500_fnc_createKestrelDialog
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -29,7 +30,7 @@ createDialog 'Kestrel4500_Display';
|
|||||||
GVAR(Kestrel4500) = false;
|
GVAR(Kestrel4500) = false;
|
||||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
[] call FUNC(updateDisplay);
|
[] call FUNC(updateDisplay);
|
||||||
}, 1, _this select 0] call CBA_fnc_addPerFrameHandler;
|
}, 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
|
* Shows the Kestrel 4500 as rsc title
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
* call ace_kestrel4500_fnc_displayKestrel
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -50,49 +51,66 @@ if (GVAR(Kestrel4500) && dialog) then {
|
|||||||
|
|
||||||
GVAR(Overlay) = true;
|
GVAR(Overlay) = true;
|
||||||
|
|
||||||
[{
|
[{
|
||||||
// abort condition
|
// abort condition
|
||||||
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
||||||
GVAR(Overlay) = false;
|
GVAR(Overlay) = false;
|
||||||
3 cutText ["", "PLAIN"];
|
3 cutText ["", "PLAIN"];
|
||||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (ACE_diagTime > GVAR(updateTimer)) then {
|
if (ACE_diagTime > GVAR(updateTimer)) then {
|
||||||
GVAR(updateTimer) = ACE_diagTime + 1;
|
GVAR(updateTimer) = ACE_diagTime + 1;
|
||||||
|
|
||||||
private ["_outputData"];
|
private ["_outputData"];
|
||||||
_outputData = [] call FUNC(generateOutputData);
|
_outputData = [] call FUNC(generateOutputData);
|
||||||
|
|
||||||
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
||||||
|
_outputData params [
|
||||||
__ctrlTop ctrlSetText (_outputData select 0);
|
"_ctrlTop",
|
||||||
__ctrlCenterBig ctrlSetText (_outputData select 1);
|
"_ctrlCenterBig",
|
||||||
|
"_ctrlCenter",
|
||||||
__ctrlTop ctrlSetText (_outputData select 0);
|
"_ctrlCenterLine1Left",
|
||||||
__ctrlCenterBig ctrlSetText (_outputData select 1);
|
"_ctrlCenterLine2Left",
|
||||||
__ctrlCenter ctrlSetText (_outputData select 2);
|
"_ctrlCenterLine3Left",
|
||||||
|
"_ctrlCenterLine1Right",
|
||||||
__ctrlCenterLine1Left ctrlSetText (_outputData select 3);
|
"_ctrlCenterLine2Right",
|
||||||
__ctrlCenterLine2Left ctrlSetText (_outputData select 4);
|
"_ctrlCenterLine3Right",
|
||||||
__ctrlCenterLine3Left ctrlSetText (_outputData select 5);
|
"_ctrlInfoLine1",
|
||||||
|
"_ctrlInfoLine2",
|
||||||
|
"_ctrlBottomBig",
|
||||||
|
"_ctrlCenterLine1",
|
||||||
|
"_ctrlCenterLine2",
|
||||||
|
"_ctrlCenterLine3",
|
||||||
|
"_ctrlCenterLine4",
|
||||||
|
"_ctrlCenterLine5",
|
||||||
|
"_ctrlCenterLine6"
|
||||||
|
];
|
||||||
|
|
||||||
__ctrlCenterLine1Right ctrlSetText (_outputData select 6);
|
__ctrlTop ctrlSetText _ctrlTop;
|
||||||
__ctrlCenterLine2Right ctrlSetText (_outputData select 7);
|
__ctrlCenterBig ctrlSetText _ctrlCenterBig;
|
||||||
__ctrlCenterLine3Right ctrlSetText (_outputData select 8);
|
__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(referenceHeadingMenu) == 1) then {
|
||||||
if (GVAR(referenceHeadingAutoSet)) then {
|
if (GVAR(referenceHeadingAutoSet)) then {
|
||||||
__ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6];
|
__ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6];
|
||||||
@ -106,10 +124,10 @@ GVAR(Overlay) = true;
|
|||||||
__ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0];
|
__ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
call FUNC(updateImpellerState);
|
call FUNC(updateImpellerState);
|
||||||
__ctrlKestrel4500 ctrlSetText format [QUOTE(PATHTOF(UI\Kestrel4500_%1.paa)), floor(GVAR(ImpellerState) % 7)];
|
__ctrlKestrel4500 ctrlSetText format [QUOTE(PATHTOF(UI\Kestrel4500_%1.paa)), floor(GVAR(ImpellerState) % 7)];
|
||||||
|
|
||||||
}, 0.01, []] call CBA_fnc_addPerFrameHandler;
|
}, 0.01, []] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
true
|
true
|
||||||
|
@ -3,12 +3,29 @@
|
|||||||
* Generates the Kestrel 4500 output text.
|
* Generates the Kestrel 4500 output text.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* 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:
|
* Example:
|
||||||
|
* _var = call ace_kestrel4500_fnc_generateOutputData
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -16,7 +33,7 @@
|
|||||||
|
|
||||||
if (ACE_diagTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]};
|
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);
|
[] call FUNC(collectData);
|
||||||
|
|
||||||
@ -59,19 +76,6 @@ _heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex);
|
|||||||
_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint);
|
_dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint);
|
||||||
_wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb);
|
_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);
|
GVAR(Direction) = 4 * floor(_playerDir / 90);
|
||||||
if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1};
|
if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1};
|
||||||
if (_playerDir % 90 > 35) 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 {
|
if (GVAR(referenceHeadingMenu) == 0) then {
|
||||||
switch (GVAR(Menu)) do {
|
switch (GVAR(Menu)) do {
|
||||||
case 0: { // Date
|
case 0: { // Date
|
||||||
EXPLODE_3_PVT(date,_year,_month,_day);
|
date params ["_year", "_month", "_day"];
|
||||||
_dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call _fnc_dayOfWeek);
|
_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));
|
_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;
|
_textTop = _dayString;
|
||||||
_textCenter = format["%1 %2 %3", _day, _monthString, _year];
|
_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)
|
* Measures the wind speed, stores the information in GVAR(MeasuredWindSpeed) and updates GVAR(ImpellerState)
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* wind speed <NUMBER>
|
* wind speed <NUMBER>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
* call ace_kestrel4500_fnc_canShow
|
||||||
*
|
*
|
||||||
* Public: No
|
* 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"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
uiNamespace setVariable ['Kestrel4500_Display', nil];
|
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"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
uiNamespace setVariable ['RscKestrel4500', nil];
|
uiNamespace setVariable ['RscKestrel4500', nil];
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* Nothing
|
* Nothing
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* call ace_kestrel4500_fnc_restore_user_data
|
* call ace_kestrel4500_fnc_restore_user_data
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
* Saves user data into profileNamespace
|
* Saves user data into profileNamespace
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* call ace_kestrel4500_fnc_store_user_data
|
* call ace_kestrel4500_fnc_store_user_data
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
* Updates the Kestrel 4500 dialog text boxes.
|
* Updates the Kestrel 4500 dialog text boxes.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
*
|
*
|
||||||
@ -22,29 +22,9 @@ private ["_outputData"];
|
|||||||
|
|
||||||
_outputData = [] call FUNC(generateOutputData);
|
_outputData = [] call FUNC(generateOutputData);
|
||||||
|
|
||||||
ctrlSetText [74100, _outputData select 0];
|
{
|
||||||
ctrlSetText [74200, _outputData select 1];
|
ctrlSetText [_x , _outputData select _foreachindex];
|
||||||
ctrlSetText [74201, _outputData select 2];
|
} forEach [74100, 74200, 74201, 74300, 74301, 74302, 74303, 74304, 74305, 74400, 74401, 74500, 74600, 74601, 74602, 74603, 74604, 74605];
|
||||||
|
|
||||||
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];
|
|
||||||
|
|
||||||
if (GVAR(referenceHeadingMenu) == 1) then {
|
if (GVAR(referenceHeadingMenu) == 1) then {
|
||||||
if (GVAR(referenceHeadingAutoSet)) then {
|
if (GVAR(referenceHeadingAutoSet)) then {
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
* Updates the Kestrel 4500 Impeller state
|
* Updates the Kestrel 4500 Impeller state
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Nothing
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* 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) {
|
class GVAR(BFT_Interval) {
|
||||||
value = 1.0;
|
value = 1.0;
|
||||||
typeName = "SCALAR";
|
typeName = "SCALAR";
|
||||||
|
displayName = CSTRING(BFT_Interval_DisplayName);
|
||||||
|
description = CSTRING(BFT_Interval_Description);
|
||||||
};
|
};
|
||||||
class GVAR(BFT_Enabled) {
|
class GVAR(BFT_Enabled) {
|
||||||
value = 0;
|
value = 0;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(BFT_Enabled_DisplayName);
|
||||||
|
description = CSTRING(BFT_Enabled_Description);
|
||||||
};
|
};
|
||||||
class GVAR(BFT_HideAiGroups) {
|
class GVAR(BFT_HideAiGroups) {
|
||||||
value = 0;
|
value = 0;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(BFT_HideAiGroups_DisplayName);
|
||||||
|
description = CSTRING(BFT_HideAiGroups_Description);
|
||||||
};
|
};
|
||||||
class GVAR(mapIllumination) {
|
class GVAR(mapIllumination) {
|
||||||
value = 1;
|
value = 1;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(MapIllumination_DisplayName);
|
||||||
|
description = CSTRING(MapIllumination_Description);
|
||||||
};
|
};
|
||||||
class GVAR(mapGlow) {
|
class GVAR(mapGlow) {
|
||||||
value = 1;
|
value = 1;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(MapGlow_DisplayName);
|
||||||
|
description = CSTRING(MapGlow_Description);
|
||||||
};
|
};
|
||||||
class GVAR(mapShake) {
|
class GVAR(mapShake) {
|
||||||
value = 1;
|
value = 1;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(MapShake_DisplayName);
|
||||||
|
description = CSTRING(MapShake_Description);
|
||||||
};
|
};
|
||||||
class GVAR(mapLimitZoom) {
|
class GVAR(mapLimitZoom) {
|
||||||
value = 0;
|
value = 0;
|
||||||
typeName = "BOOL";
|
typeName = "BOOL";
|
||||||
|
displayName = CSTRING(MapLimitZoom_DisplayName);
|
||||||
|
description = CSTRING(MapLimitZoom_Description);
|
||||||
};
|
};
|
||||||
class GVAR(mapShowCursorCoordinates) {
|
class GVAR(mapShowCursorCoordinates) {
|
||||||
value = 0;
|
value = 0;
|
||||||
typeName = "BOOL";
|
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";
|
typeName = "BOOL";
|
||||||
defaultValue = 0;
|
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 {
|
class ModuleDescription {
|
||||||
description = CSTRING(Module_Description);
|
description = CSTRING(Module_Description);
|
||||||
|
@ -56,6 +56,21 @@ call FUNC(determineZoom);
|
|||||||
}, 0] call CBA_fnc_addPerFrameHandler;
|
}, 0] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
["SettingsInitialized", {
|
["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
|
// Start Blue Force Tracking if Enabled
|
||||||
if (GVAR(BFT_Enabled)) then {
|
if (GVAR(BFT_Enabled)) then {
|
||||||
GVAR(BFT_markers) = [];
|
GVAR(BFT_markers) = [];
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
if !(isServer) exitWith {};
|
if !(isServer) exitWith {};
|
||||||
|
|
||||||
params ["_logic", "_units", "_activated"];
|
params ["_logic", "", "_activated"];
|
||||||
|
|
||||||
if !(_activated) exitWith {};
|
if !(_activated) exitWith {};
|
||||||
|
|
||||||
@ -22,5 +22,6 @@ if !(_activated) exitWith {};
|
|||||||
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
|
[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule);
|
||||||
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
|
[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule);
|
||||||
[_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] 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.");
|
ACE_LOGINFO("Map Module Initialized.");
|
||||||
|
@ -280,5 +280,13 @@
|
|||||||
<Portuguese>Desativar %1</Portuguese>
|
<Portuguese>Desativar %1</Portuguese>
|
||||||
<Russian>Деактивировать %1</Russian>
|
<Russian>Деактивировать %1</Russian>
|
||||||
</Key>
|
</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>
|
</Package>
|
||||||
</Project>
|
</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
|
* Author: Glowbal
|
||||||
* Assign a medical role to a unit
|
* Assign a medical role to a unit.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: The module logic <LOGIC>
|
* 0: The module logic <OBJECT>
|
||||||
* 1: units <ARRAY>
|
* 1: Synchronized units <ARRAY>
|
||||||
* 2: activated <BOOL>
|
* 2: Activated <BOOL>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"];
|
params ["_logic"];
|
||||||
params [["_logic", objNull, [objNull]]];
|
|
||||||
|
|
||||||
if (!isNull _logic) then {
|
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;
|
[_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
_nilCheckPassedList = "";
|
[synchronizedObjects _logic, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
{
|
};
|
||||||
_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;
|
|
||||||
};
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Glowbal
|
* Author: Glowbal
|
||||||
* Assign vehicle as a medical vehicle
|
* Assign vehicle as a medical vehicle.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: The module logic <LOGIC>
|
* 0: The module logic <OBJECT>
|
||||||
* 1: units <ARRAY>
|
* 1: Synchronized units <ARRAY>
|
||||||
* 2: activated <BOOL>
|
* 2: Activated <BOOL>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
@ -14,50 +14,13 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_setting", "_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList", "_xVehicle"];
|
params ["_logic"];
|
||||||
params [["_logic", objNull, [objNull]]];
|
|
||||||
|
|
||||||
if (!isNull _logic) then {
|
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;
|
[_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
_nilCheckPassedList = "";
|
[synchronizedObjects _logic, QGVAR(medicClass), _setting, true, true] call EFUNC(common,assignObjectsInList);
|
||||||
{
|
|
||||||
_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;
|
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@ TRACE_1("", _launchParams);
|
|||||||
// TODO:: Make sure the missile maintains LOS
|
// TODO:: Make sure the missile maintains LOS
|
||||||
_foundTargetPos = [0,0,0];
|
_foundTargetPos = [0,0,0];
|
||||||
if(!isNil "_target") then {
|
if(!isNil "_target") then {
|
||||||
_foundTargetPos = getPosASL _target;
|
_foundTargetPos = aimPos _target ;
|
||||||
//_foundTargetPos = (_target modelToWorldVisual (getCenterOfMass _target));
|
//_foundTargetPos = (_target modelToWorldVisual (getCenterOfMass _target));
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -48,4 +48,4 @@ if(!_angleOkay || !_losOkay) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
_foundTargetPos;
|
_foundTargetPos;
|
||||||
|
@ -11,51 +11,35 @@
|
|||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* function = "ace_repair_fnc_moduleAssignRepairVehicle"
|
* function = "ace_repair_fnc_moduleAddSpareParts"
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#define DEBUG_MODE_FULL
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
params ["_logic"];
|
params ["_logic"];
|
||||||
|
|
||||||
if (!isNull _logic) then {
|
if (!isNull _logic) then {
|
||||||
private ["_list", "_part", "_amount", "_nilCheckPassedList"];
|
private ["_list", "_part", "_amount"];
|
||||||
// Module settings
|
|
||||||
_list = _logic getVariable ["List", ""];
|
_list = _logic getVariable ["List", ""];
|
||||||
_part = _logic getVariable ["Part", 0];
|
_part = _logic getVariable ["Part", 0];
|
||||||
_amount = _logic getVariable ["Amount", 1];
|
_amount = _logic getVariable ["Amount", 1];
|
||||||
|
|
||||||
// Parse list
|
// Parse list
|
||||||
_nilCheckPassedList = "";
|
_list = [_list, true, true] call EFUNC(common,parseList);
|
||||||
{
|
|
||||||
_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;
|
|
||||||
|
|
||||||
// Add synchronized objects to list
|
// Add synchronized objects to list
|
||||||
{
|
{
|
||||||
_list pushBack _x;
|
_list pushBack _x;
|
||||||
} forEach (synchronizedObjects _logic);
|
nil
|
||||||
|
} count (synchronizedObjects _logic);
|
||||||
|
|
||||||
if (_list isEqualTo []) exitWith {};
|
if (_list isEqualTo []) exitWith {};
|
||||||
|
|
||||||
TRACE_3("module info parsed",_list,_part,_amount);
|
TRACE_3("Module info parsed",_list,_part,_amount);
|
||||||
|
|
||||||
// Add spare parts
|
// Add spare parts
|
||||||
{
|
{
|
||||||
if (!isNil "_x" && {typeName _x == typeName objNull}) then {
|
[_x, _amount, _part, true] call FUNC(addSpareParts);
|
||||||
[_x, _amount, _part, true] call FUNC(addSpareParts);
|
} count _list;
|
||||||
};
|
|
||||||
} forEach _list;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
true
|
|
||||||
|
@ -21,11 +21,9 @@ params ["_logic"];
|
|||||||
|
|
||||||
if (!isNull _logic) then {
|
if (!isNull _logic) then {
|
||||||
private ["_list", "_setting"];
|
private ["_list", "_setting"];
|
||||||
_list = _logic getVariable ["EnableList",""];
|
_list = _logic getVariable ["EnableList", ""];
|
||||||
_setting = _logic getVariable ["role",0];
|
_setting = _logic getVariable ["role", 0];
|
||||||
|
|
||||||
[_list, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList);
|
[_list, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
[synchronizedObjects _logic, "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 {
|
if (!isNull _logic) then {
|
||||||
private ["_list", "_setting"];
|
private ["_list", "_setting"];
|
||||||
_list = _logic getVariable ["EnableList",""];
|
_list = _logic getVariable ["EnableList", ""];
|
||||||
_setting = _logic getVariable ["role",0];
|
_setting = _logic getVariable ["role", 0];
|
||||||
|
|
||||||
[_list, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList);
|
[_list, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
[synchronizedObjects _logic, "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 {
|
if (!isNull _logic) then {
|
||||||
private ["_list", "_setting"];
|
private ["_list", "_setting"];
|
||||||
_list = _logic getVariable ["EnableList",""];
|
_list = _logic getVariable ["EnableList", ""];
|
||||||
_setting = _logic getVariable ["role",0];
|
_setting = _logic getVariable ["role", 0];
|
||||||
|
|
||||||
[_list, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList);
|
[_list, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList);
|
||||||
[synchronizedObjects _logic, "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;
|
class ThingX;
|
||||||
// Folding Chair
|
// Folding Chair
|
||||||
class Land_CampingChair_V1_F: ThingX {
|
class Land_CampingChair_V1_F: ThingX {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 180;
|
GVAR(sitDirection) = 180;
|
||||||
GVAR(sitPosition[]) = {0, -0.1, -0.45};
|
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
|
// Camping Chair
|
||||||
class Land_CampingChair_V2_F: ThingX {
|
class Land_CampingChair_V2_F: ThingX {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 180;
|
GVAR(sitDirection) = 180;
|
||||||
GVAR(sitPosition[]) = {0, -0.1, -0.45};
|
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;
|
class Furniture_base_F;
|
||||||
// Chair (Plastic)
|
// Chair (Plastic)
|
||||||
class Land_ChairPlastic_F: Furniture_base_F {
|
class Land_ChairPlastic_F: Furniture_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 90;
|
GVAR(sitDirection) = 90;
|
||||||
GVAR(sitPosition[]) = {0, 0, -0.5};
|
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)
|
// Chair (Wooden)
|
||||||
class Land_ChairWood_F: Furniture_base_F {
|
class Land_ChairWood_F: Furniture_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 180;
|
GVAR(sitDirection) = 180;
|
||||||
GVAR(sitPosition[]) = {0, -0.05, 0};
|
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
|
// Office Chair
|
||||||
class Land_OfficeChair_01_F: Furniture_base_F {
|
class Land_OfficeChair_01_F: Furniture_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 180;
|
GVAR(sitDirection) = 180;
|
||||||
GVAR(sitPosition[]) = {0, 0, -0.6};
|
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
|
// Rattan Chair
|
||||||
class Land_RattanChair_01_F: Furniture_base_F {
|
class Land_RattanChair_01_F: Furniture_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
MACRO_SEAT_ACTION
|
|
||||||
GVAR(canSit) = 1;
|
GVAR(canSit) = 1;
|
||||||
GVAR(sitDirection) = 180;
|
GVAR(sitDirection) = 180;
|
||||||
GVAR(sitPosition[]) = {0, -0.1, -1}; // Z must be -1 due to chair's geometry (magic floating seat point)
|
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 {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
// Add interaction menu exception
|
// 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
|
// Handle interruptions
|
||||||
["medical_onUnconscious", {_this call DFUNC(handleInterrupt)}] call EFUNC(common,addEventhandler);
|
["medical_onUnconscious", {_this call DFUNC(handleInterrupt)}] call EFUNC(common,addEventhandler);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
ADDON = false;
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP(addSitActions);
|
||||||
PREP(canSit);
|
PREP(canSit);
|
||||||
PREP(canStand);
|
PREP(canStand);
|
||||||
PREP(getRandomAnimation);
|
PREP(getRandomAnimation);
|
||||||
@ -10,4 +11,6 @@ PREP(moduleInit);
|
|||||||
PREP(sit);
|
PREP(sit);
|
||||||
PREP(stand);
|
PREP(stand);
|
||||||
|
|
||||||
|
GVAR(initializedClasses) = [];
|
||||||
|
|
||||||
ADDON = true;
|
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:
|
* Arguments:
|
||||||
* 0: Seat <OBJECT>
|
* 0: Seat <OBJECT>
|
||||||
* 1: Player <OBJECT>
|
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Can Sit Down <BOOL>
|
* Can Sit Down <BOOL>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [seat, player] call ace_sitting_fnc_canSit
|
* [seat] call ace_sitting_fnc_canSit
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#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)
|
// Sitting enabled, is seat object, not occupied and standing up (or not on a big slope)
|
||||||
GVAR(enable) &&
|
GVAR(enable) &&
|
||||||
{getNumber (configFile >> "CfgVehicles" >> typeOf _seat >> QGVAR(canSit)) == 1} &&
|
|
||||||
{isNil {_seat getVariable QGVAR(seatOccupied)}} &&
|
{isNil {_seat getVariable QGVAR(seatOccupied)}} &&
|
||||||
{round (vectorUp _seat select 0) == 0 && {round (vectorUp _seat select 1) == 0} && {round (vectorUp _seat select 2) == 1}}
|
{round (vectorUp _seat select 0) == 0 && {round (vectorUp _seat select 1) == 0} && {round (vectorUp _seat select 2) == 1}}
|
||||||
|
@ -18,4 +18,4 @@
|
|||||||
params ["_player"];
|
params ["_player"];
|
||||||
|
|
||||||
// Sitting
|
// Sitting
|
||||||
(_player getVariable [QGVAR(isSitting), false])
|
!isNil {_player getVariable QGVAR(isSitting)}
|
||||||
|
@ -17,6 +17,6 @@
|
|||||||
|
|
||||||
params ["_player"];
|
params ["_player"];
|
||||||
|
|
||||||
if (_player getVariable [QGVAR(isSitting), false]) then {
|
if (!isNil {_player getVariable QGVAR(isSitting)}) then {
|
||||||
_player call FUNC(stand);
|
_player call FUNC(stand);
|
||||||
};
|
};
|
||||||
|
@ -16,23 +16,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_sitRotation", "_seatPosOrig"];
|
private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_seatPosOrig"];
|
||||||
|
|
||||||
params ["_seat", "_player"];
|
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...
|
// Overwrite weird position, because Arma decides to set it differently based on current animation/stance...
|
||||||
_player switchMove "amovpknlmstpsraswrfldnon";
|
_player switchMove "amovpknlmstpsraswrfldnon";
|
||||||
|
|
||||||
// Add scroll-wheel action to release object
|
// Add scroll-wheel action to release object
|
||||||
_actionID = _player getVariable [QGVAR(StandUpActionID), -1];
|
|
||||||
|
|
||||||
if (_actionID != -1) then {
|
|
||||||
_player removeAction _actionID;
|
|
||||||
};
|
|
||||||
|
|
||||||
_actionID = _player addAction [
|
_actionID = _player addAction [
|
||||||
format ["<t color='#FFFF00'>%1</t>", localize LSTRING(Stand)],
|
format ["<t color='#FFFF00'>%1</t>", localize LSTRING(Stand)],
|
||||||
QUOTE((_this select 0) call FUNC(stand)),
|
QUOTE((_this select 0) call FUNC(stand)),
|
||||||
@ -44,13 +35,10 @@ _actionID = _player addAction [
|
|||||||
QUOTE(_this call FUNC(canStand))
|
QUOTE(_this call FUNC(canStand))
|
||||||
];
|
];
|
||||||
|
|
||||||
_player setVariable [QGVAR(StandUpActionID), _actionID];
|
|
||||||
|
|
||||||
// Read config
|
// Read config
|
||||||
_configFile = configFile >> "CfgVehicles" >> typeOf _seat;
|
_configFile = configFile >> "CfgVehicles" >> typeOf _seat;
|
||||||
_sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection));
|
_sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection));
|
||||||
_sitPosition = getArray (_configFile >> QGVAR(sitPosition));
|
_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)
|
// 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
|
[_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
|
// Set direction and position
|
||||||
_player setDir _sitDirection;
|
_player setDir _sitDirection;
|
||||||
// No need for ATL/ASL as modelToWorld returns in format position
|
//modelToWorld returns AGL
|
||||||
_player setPos (_seat modelToWorld _sitPosition);
|
_player setPosASL (AGLtoASL (_seat modelToWorld _sitPosition));
|
||||||
|
|
||||||
// Set variables
|
// Set variables, save seat object on player
|
||||||
_player setVariable [QGVAR(isSitting), true];
|
_player setVariable [QGVAR(isSitting), [_seat, _actionID]];
|
||||||
_seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat
|
_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"];
|
_args params ["_player", "_seat", "_seatPosOrig"];
|
||||||
|
|
||||||
// Remove PFH if not sitting any more
|
// 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;
|
[_pfhId] call CBA_fnc_removePerFrameHandler;
|
||||||
TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(isSitting), false)]);
|
TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(isSitting), false)]);
|
||||||
};
|
};
|
||||||
|
@ -16,12 +16,14 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
params ["_player"];
|
params ["_player"];
|
||||||
|
private ["_animation"];
|
||||||
|
|
||||||
// remove scroll wheel action
|
(_player getVariable QGVAR(isSitting)) params ["_seat", "_actionID"];
|
||||||
_player removeAction (_player getVariable [QGVAR(StandUpActionID), -1]);
|
|
||||||
|
// Remove scroll-wheel action
|
||||||
|
_player removeAction _actionID;
|
||||||
|
|
||||||
// Restore animation
|
// Restore animation
|
||||||
private "_animation";
|
|
||||||
_animation = switch (currentWeapon _player) do {
|
_animation = switch (currentWeapon _player) do {
|
||||||
case "": {"amovpercmstpsnonwnondnon"};
|
case "": {"amovpercmstpsnonwnondnon"};
|
||||||
case (primaryWeapon _player): {"amovpercmstpslowwrfldnon"};
|
case (primaryWeapon _player): {"amovpercmstpslowwrfldnon"};
|
||||||
@ -33,5 +35,5 @@ _animation = switch (currentWeapon _player) do {
|
|||||||
|
|
||||||
// Set variables to nil
|
// Set variables to nil
|
||||||
_player setVariable [QGVAR(isSitting), nil];
|
_player setVariable [QGVAR(isSitting), nil];
|
||||||
GVAR(seat) setVariable [QGVAR(seatOccupied), nil, true];
|
if (isNull _seat) exitWith {};
|
||||||
GVAR(seat) = nil;
|
_seat setVariable [QGVAR(seatOccupied), nil, true];
|
||||||
|
@ -5,7 +5,6 @@ ADDON = false;
|
|||||||
PREP(addSlideActions);
|
PREP(addSlideActions);
|
||||||
PREP(autoTransition);
|
PREP(autoTransition);
|
||||||
PREP(createSlideshow);
|
PREP(createSlideshow);
|
||||||
PREP(makeList);
|
|
||||||
PREP(moduleInit);
|
PREP(moduleInit);
|
||||||
|
|
||||||
GVAR(slideshows) = 0;
|
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 {};
|
if (isNull _logic) exitWith {};
|
||||||
|
|
||||||
// Extract variables from logic
|
// Extract variables from logic
|
||||||
_objects = [_logic getVariable ["Objects", ""], true, true] call FUNC(makeList);
|
_objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList);
|
||||||
_controllers = [_logic getVariable ["Controllers", ""], true, true] call FUNC(makeList);
|
_controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList);
|
||||||
_images = [_logic getVariable ["Images", ""], true, false] call FUNC(makeList);
|
_images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList);
|
||||||
_names = [_logic getVariable ["Names", ""], true, false] call FUNC(makeList);
|
_names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList);
|
||||||
_duration = _logic getVariable ["Duration", 0];
|
_duration = _logic getVariable ["Duration", 0];
|
||||||
|
|
||||||
// Objects synced to the module
|
// Objects synced to the module
|
||||||
|
@ -3,25 +3,25 @@
|
|||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<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>
|
||||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<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>
|
||||||
<a href="http://slackin.ace3mod.com/">
|
<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>
|
||||||
<a href="https://travis-ci.org/acemod/ACE3">
|
<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>
|
</a>
|
||||||
</p>
|
</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>
|
<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)
|
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
|
### Hauptmerkmale
|
||||||
- Verbessertes medizinisches System
|
- Vollkommen neues 3D-Interaktionssystem
|
||||||
- Logistik System: U.a. Transport und Fahrzeugreparatur
|
- Leistungs- und stabilitätsoptimiert
|
||||||
- Sprengstoffsystem mit unterschiedlichen Zündern
|
- 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
|
- Gefangenensystem
|
||||||
- Reale Namen für Arma 3 Fahrzeuge und Waffen
|
- Sprengtoffmechaniken mit unterschiedlichen Zündern
|
||||||
- Realistisches, ballistisches Verhalten (Wind und Luftfeuchtigkeit)
|
- Kartenverbesserungen – Setzen von Markierungen / Kartenwerkzeuge
|
||||||
- Simulation der Rückstrahlzone
|
- Erweitertes Raketenlenksystem
|
||||||
- Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber
|
|
||||||
***und noch viel mehr...***
|
#### 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
|
#### Anleitungen
|
||||||
Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet?
|
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).
|
- [Erste Schritte](http://ace3mod.com/wiki/user/getting-started.html).
|
||||||
|
|
||||||
#### Mitwirken
|
#### 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 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
|
#### 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.
|
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).
|
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>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/releases/download/v3.3.2/ace3_3.3.2.zip">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<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>
|
||||||
<a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">
|
<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>
|
||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<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>
|
||||||
<a href="http://slackin.ace3mod.com/">
|
<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>
|
||||||
<a href="https://travis-ci.org/acemod/ACE3">
|
<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>
|
</a>
|
||||||
</p>
|
</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>
|
<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