Merge branch 'master' into doc-ballistics

Merge upstream in to make upstream merge easier
This commit is contained in:
Dharma Bellamkonda 2015-05-14 14:31:48 -06:00
commit bdc3b20624
542 changed files with 84617 additions and 2071 deletions

View File

@ -73,6 +73,7 @@ Raspu86
Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com>
ramius86 <pasini86@hotmail.com>
SilentSpike <SilentSpike100@gmail.com>
simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com>
Tachi <zaveruha007@gmail.com>
@ -93,5 +94,6 @@ VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Bla1337
nikolauska <nikolauska1@gmail.com>
adam3adam <br.ada@seznam.cz>
Professor <lukas.trneny@wo.cz>
Professor <lukas.trneny@wo.cz>
Winter <simon@agius-muscat.net>
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@ class CfgVehicles {
class ACE_Module;
class GVAR(ModuleSettings): ACE_Module {
scope = 2;
displayName = "Advanced Ballistics";
displayName = "$STR_ACE_AdvancedBallistics_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Wind_ca.paa));
category = "ACE";
function = QUOTE(DFUNC(initModuleSettings));
@ -12,26 +12,26 @@ class CfgVehicles {
author = "Ruthberg";
class Arguments {
class enabled {
displayName = "Advanced Ballistics";
description = "Enables advanced ballistics";
displayName = "$STR_ACE_AdvancedBallistics_enabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_enabled_Description";
typeName = "BOOL";
defaultValue = 0;
};
class alwaysSimulateForSnipers {
displayName = "Always Enabled For Snipers";
description = "Always enables advanced ballistics when high power optics are used";
displayName = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName";
description = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description";
typeName = "BOOL";
defaultValue = 1;
};
class disabledInFullAutoMode {
displayName = "Disabled In FullAuto Mode";
description = "Disables the advanced ballistics during full auto fire";
displayName = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName";
description = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description";
typeName = "BOOL";
defaultValue = 0;
};
class onlyActiveForLocalPlayers {
displayName = "Disabled For Non Local Players";
description = "Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)";
displayName = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName";
description = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description";
typeName = "BOOL";
defaultValue = 1;
};
@ -44,35 +44,38 @@ class CfgVehicles {
};
*/
class ammoTemperatureEnabled {
displayName = "Enable Ammo Temperature Simulation";
description = "Muzzle velocity varies with ammo temperature";
displayName = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class barrelLengthInfluenceEnabled {
displayName = "Enable Barrel Length Simulation";
description = "Muzzle velocity varies with barrel length";
displayName = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class bulletTraceEnabled {
displayName = "Enable Bullet Trace Effect";
description = "Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)";
displayName = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class simulationInterval {
displayName = "Simulation Interval";
description = "Defines the interval between every calculation step";
displayName = "$STR_ACE_AdvancedBallistics_simulationInterval_DisplayName";
description = "$STR_ACE_AdvancedBallistics_simulationInterval_Description";
typeName = "NUMBER";
defaultValue = 0.0;
};
class simulationRadius {
displayName = "Simulation Radius";
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
displayName = "$STR_ACE_AdvancedBallistics_simulationRadius_DisplayName";
description = "$STR_ACE_AdvancedBallistics_simulationRadius_Description";
typeName = "NUMBER";
defaultValue = 3000;
};
};
class ModuleDescription {
description = "$STR_ACE_AdvancedBallistics_Description";
};
};
};
};

View File

@ -76,7 +76,7 @@ if (GVAR(barrelLengthInfluenceEnabled)) then {
};
if (GVAR(ammoTemperatureEnabled)) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
_muzzleVelocityShift = [_AmmoCacheEntry select 9, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
if (_muzzleVelocityShift != 0) then {
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
@ -105,7 +105,7 @@ _barrelTwist = _WeaponCacheEntry select 0;
_stabilityFactor = 1.5;
if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
_barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure);
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
};

View File

@ -21,6 +21,5 @@
#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058
#define STD_AIR_DENSITY_ICAO 1.22498
#define STD_AIR_DENSITY_ASM 1.20885
#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h))
#define EXTENSION_REQUIRED_VERSION "1.0"

View File

@ -25,5 +25,85 @@
<Czech>Zobrazit úhloměr</Czech>
<Portuguese>Mostrar Transferidor</Portuguese>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_Description">
<English>Enables advanced ballistics</English>
<Polish>Aktywuje zaawansowaną balistykę</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName">
<English>Always Enabled For Snipers</English>
<Polish>Zawsze akt. dla snajp.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description">
<English>Always enables advanced ballistics when high power optics are used</English>
<Polish>Aktywuje zaawansowaną balistykę zawsze, kiedy używana jest optyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
<Polish>Wył. podczas ognia auto.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
<Polish>Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName">
<English>Disabled For Non Local Players</English>
<Polish>Wyłącz dla nielok. graczy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description">
<English>Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)</English>
<Polish>Dezaktywuje zaawansowaną balistykę dla pocisków pochodzących od innych graczy(aktywuj tą opcję jeżeli odczuwasz spadki FPS podczas sporych strzelanin w MP)</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
<Polish>Symulacja temp. amunicji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
<Polish>Prędkość wylotowa pocisku jest zależna od temperatury amunicji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
<Polish>Symulacja długości lufy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
<Polish>Prędkość wylotowa pocisku jest zależna od długości lufy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
<Polish>Efekt smugi pocisku</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
<Polish>Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę)</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
<Polish>Interwał symulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
<Polish>Określa interwał pomiędzy każdym krokiem kalkulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
<Polish>Zasięg symulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
<Polish>Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_Description">
<English></English>
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
</Key>
</Package>
</Project>

View File

@ -95,36 +95,6 @@ if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) t
GVAR(workingMemory) set [1, _muzzleVelocity];
GVAR(workingMemory) set [2, _zeroRange];
private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"];
_elevationCur = GVAR(workingMemory) select 10;
_windageCur = GVAR(workingMemory) select 11;
switch (GVAR(currentScopeUnit)) do {
case 0: {
_elevationCur = _elevationCur * 3.38;
_windageCur = _windageCur * 3.38;
};
case 2: {
_elevationCur = _elevationCur / 1.047;
_windageCur = _windageCur / 1.047;
};
case 3: {
switch (GVAR(workingMemory) select 7) do {
case 0: { _clickSize = 1; };
case 1: { _clickSize = 1 / 1.047; };
case 2: { _clickSize = 3.38; };
};
_clickNumber = GVAR(workingMemory) select 8;
_clickInterval = _clickSize / _clickNumber;
_elevationCur = Round(_elevationCur / _clickInterval);
_windageCur = Round(_windageCur / _clickInterval);
};
};
GVAR(workingMemory) set [10, _elevationCur];
GVAR(workingMemory) set [11, _windageCur];
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
[] call FUNC(update_atmosphere);

View File

@ -190,7 +190,7 @@ class CfgVehicles {
class ACE_Box_Ammo: NATO_Box_Base {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Ammo Supply Crate";
displayName = "$STR_ACE_AmmoSupplyCrate_DisplayName";
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
author = "$STR_ACE_Common_ACETeam";
class TransportMagazines {

View File

@ -1,12 +1,12 @@
ace_ballistics
==============
Changes to weapon and ammunition values.
Changes to weapon, magazine and ammunition values.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [Ruthberg] (http://github.com/Ulteq)
- [KoffeinFlummi](https://github.com/KoffeinFlummi)
- [commy2](https://github.com/commy2)

View File

@ -1592,5 +1592,9 @@
<Portuguese>Calibre: 12.7x99mm (AMAX)&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm (AMAX)&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key>
<Key ID="STR_ACE_AmmoSupplyCrate_DisplayName">
<English>[ACE] Ammo Supply Crate</English>
<Polish>[ACE] Skrzynka z amunicją</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -161,7 +161,7 @@ class CfgVehicles {
class GVAR(ModuleSurrender): Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Make Unit Surrender";
displayName = "$STR_ACE_Captives_ModuleSurrender_DisplayName"; //Make Unit Surrender
function = QUOTE(DFUNC(moduleSurrender));
scope = 2; //show in editor
scopeCurator = 2; //show in zeus
@ -172,8 +172,8 @@ class CfgVehicles {
functionPriority = 0;
class Arguments {};
class ModuleDescription: ModuleDescription {
description = "Sync a unit to make them surrender.<br/>Source: ace_captives";
description = "$STR_ACE_Captives_ModuleSurrender_Description"; //Sync a unit to make them surrender.<br/>Source: ace_captives
sync[] = {"AnyAI"};
};
};
};
};

View File

@ -193,5 +193,13 @@
<Hungarian>Semmi sincs az egér alatt</Hungarian>
<Italian>Nessuna selezione</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
<English>Make Unit Surrender</English>
<Polish>Poddaj się!</Polish>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
<Polish>Zsynchronizuj z jednostką aby sprawić by się poddała&lt;br /&gt;Źródło: ace_captives</Polish>
</Key>
</Package>
</Project>

View File

@ -25,72 +25,72 @@ class CfgVehicles {
// += needs a non inherited entry in that class, otherwise it simply overwrites
//#include <DefaultItems.hpp>
class Module_F;
class ACE_ModuleCheckPBOs: Module_F {
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleCheckPBOs: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Check PBOs";
displayName = "$STR_ACE_Common_CheckPBO_DisplayName";
function = QFUNC(moduleCheckPBOs);
scope = 2;
isGlobal = 1;
icon = QUOTE(PATHTOF(UI\Icon_Module_CheckPBO_ca.paa));
class Arguments {
class Action {
displayName = "Action";
description = "What to do with people who do not have the right PBOs?";
displayName = "$STR_ACE_Common_CheckPBO_Action_DisplayName";
description = "$STR_ACE_Common_CheckPBO_Action_Description";
class values {
class WarnOnce {
default = 1;
name = "Warn once";
name = "$STR_ACE_Common_CheckPBO_Action_WarnOnce";
value = 0;
};
class Warn {
name = "Warn (permanent)";
name = "$STR_ACE_Common_CheckPBO_Action_WarnPerm";
value = 1;
};
class Kick {
name = "Kick";
name = "$STR_ACE_Common_CheckPBO_Action_Kick";
value = 2;
};
};
};
class CheckAll {
displayName = "Check all addons";
description = "Check all addons instead of only those of ACE?";
displayName = "$STR_ACE_Common_CheckPBO_CheckAll_DisplayName";
description = "$STR_ACE_Common_CheckPBO_CheckAll_Description";
typeName = "BOOL";
class values {
class WarnOnce {
default = 1;
name = "No";
value = 0;
};
class Warn {
name = "Yes";
value = 1;
};
};
defaultValue = 0;
};
class Whitelist {
displayName = "Whitelist";
description = "What addons are allowed regardless?";
displayName = "$STR_ACE_Common_CheckPBO_Whitelist_DisplayName";
description = "$STR_ACE_Common_CheckPBO_Whitelist_Description";
typeName = "STRING";
class values {
default = "[]";
};
};
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Common_CheckPBO_Description";
};
};
class ACE_ModuleLSDVehicles: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "LSD Vehicles";
displayName = "$STR_ACE_Common_LSDVehicles_DisplayName";
function = "ACE_Common_fnc_moduleLSDVehicles";
scope = 2;
icon = QUOTE(PATHTOF(UI\Icon_Module_LSD_ca.paa));
isGlobal = 1;
class Arguments {
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Common_LSDVehicles_Description";
sync[] = {"AnyVehicle"};
};
};
class Box_NATO_Support_F;

View File

@ -101,7 +101,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingFeedbackIconsName";
description = "$STR_ACE_Common_SettingFeedbackIconsDesc";
values[] = {"Hide", "Top right, downwards", "Top right, to the left", "Top left, downwards", "Top left, to the right"};
values[] = {"$STR_ACE_Common_Hide", "$STR_ACE_Common_TopRightDown", "$STR_ACE_Common_TopRightLeft", "$STR_ACE_Common_TopLeftDown", "$STR_ACE_Common_TopLeftRight"};
};
class GVAR(SettingProgressBarLocation) {
value = 0;
@ -110,7 +110,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingProgressbarLocationName";
description = "$STR_ACE_Common_SettingProgressbarLocationDesc";
values[] = {"Top", "Bottom"};
values[] = {"$STR_ACE_Common_Top", "$STR_ACE_Common_Bottom"};
};
class GVAR(displayTextColor) {
value[] = {0,0,0,0.1};

View File

@ -49,6 +49,9 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
if (hasInterface) then {
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
};
} else {
// Print the current extension version
diag_log text format ["[ACE] Extension version: %1: %2", _x, (_x callExtension "version")];
};
} forEach getArray (configFile >> "ACE_Extensions" >> "extensions");

View File

@ -470,5 +470,57 @@
<French>Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa.</French>
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
<English>Check PBOs</English>
<Polish>Sprawdzaj PBO</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English></English>
<Polish>Sprawdzaj spójność addonów z serwerem</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
<Polish>Akcja</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
<Polish>Co zrobić z graczami, którzy nie mają właściwych PBO?</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
<Polish>Ostrzeż raz</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
<Polish>Ostrzeżenie (permanentne)</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
<Polish>Kick</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
<Polish>Sprawdź wsz. addony</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
<Polish>Sprawdzaj wszystkie addony czy tylko te z ACE?</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
<Polish>Biała lista</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
<Polish>Jakie addony są dozwolone?</Polish>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
<Polish>Pojazdy LSD</Polish>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
<Polish>Dodaje efekt LSD pod zsynchronizowany pojazd</Polish>
</Key>
</Package>
</Project>

View File

@ -1,44 +1,30 @@
class Module_F;
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleExplosive: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Explosive System";
displayName = "$STR_ACE_Explosive_Module_DisplayName";
function = QUOTE(FUNC(module));
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa);
class Arguments {
class RequireSpecialist {
displayName = "Require specialists?";
description = "Require explosive specialists to disable explosives? Default: No";
displayName = "$STR_ACE_Explosive_RequireSpecialist_DisplayName";
description = "$STR_ACE_Explosive_RequireSpecialist_Description";
typeName = "BOOL";
class values {
class Yes {
name = "Yes";
value = 1;
};
class No {
default = 1;
name = "No";
value = 0;
};
};
defaultValue = 0;
};
class PunishNonSpecialists {
displayName = "Punish non-specialists?";
description = "Increase the time it takes to complete actions for non-specialists? Default: Yes";
displayName = "$STR_ACE_Explosive_PunishNonSpecialists_DisplayName";
description = "$STR_ACE_Explosive_PunishNonSpecialists_Description";
typeName = "BOOL";
class values {
class Yes {
default = 1;
name = "Yes";
value = 1;
};
class No {
name = "No";
value = 0;
};
};
defaultValue = 1;
};
};
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Explosive_Module_Description";
};
};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
@ -505,5 +505,29 @@
<Italian>Raccogli</Italian>
<Portuguese>Pegar</Portuguese>
</Key>
<Key ID="STR_ACE_Explosive_Module_DisplayName">
<English>Explosive System</English>
<Polish>System ładunków wybuchowych</Polish>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_DisplayName">
<English>Require specialists?</English>
<Polish>Wymagaj specjalistów?</Polish>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English>
<Polish>Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie</Polish>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English>
<Polish>Karaj nie-specjalistów?</Polish>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
<Polish>Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak</Polish>
</Key>
<Key ID="STR_ACE_Explosive_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
</Key>
</Package>
</Project>

View File

@ -98,21 +98,21 @@ class CfgVehicles {
class ACE_ModuleHearing: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Hearing";
displayName = "$STR_ACE_Hearing_Module_DisplayName";
function = QFUNC(moduleHearing);
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Hearing_ca.paa);
class Arguments {
class EnableCombatDeafness {
displayName = "Enable combat deafness?";
description = "Enable combat deafness?";
displayName = "$STR_ACE_Hearing_CombatDeafness_DisplayName";
description = "$STR_ACE_Hearing_CombatDeafness_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; default = 1; };
class No { name = "No"; value = 0; };
};
defaultValue = 1;
};
};
class ModuleDescription {
description = "$STR_ACE_Hearing_Module_Description";
};
};
};

View File

@ -109,5 +109,21 @@
<Italian>Disabilita i fischi nelle orecchie</Italian>
<Portuguese>Desabilitar zumbido de ouvidos</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
<Polish>Słuch</Polish>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Enable combat deafness?</English>
<Polish>Wł. głuchotę bojową</Polish>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English></English>
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,47 +1,8 @@
class GVAR(cursorMenu) {
idd = 91919;
movingEnable = false;
access = 0;
movingEnable = 0;
enableSimulation = 1;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgCursorMenu)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),true)]);
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),false)]);
objects[] = {};
/*class controlsBackground {
class Background {
idc = 91920;
moving = 0;
font = "TahomaB";
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;
colorBackground[] = {0, 0, 0, 0.5};
colorText[] = {0, 0, 0, 0};
x = "safezoneX";
y = "safezoneY";
w = "safezoneW";
h = "safezoneH";
};
};*/
class controls {
class Canvas {
idc = 91921;
moving = 0;
font = "TahomaB";
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;
colorBackground[] = {0, 0, 0, 0};
colorText[] = {0, 0, 0, 0};
x = "safezoneX";
y = "safezoneY";
w = "safezoneW";
h = "safezoneH";
};
};
};

View File

@ -25,6 +25,21 @@ PREP(renderSelector);
PREP(setupTextColors);
PREP(splitPath);
// Event handlers for all interact menu controls
DFUNC(handleMouseMovement) = {
if (GVAR(cursorKeepCentered)) then {
GVAR(cursorPos) = GVAR(cursorPos) vectorAdd [_this select 1, _this select 2, 0] vectorDiff [0.5, 0.5, 0];
setMousePosition [0.5, 0.5];
} else {
GVAR(cursorPos) = [_this select 1, _this select 2, 0];
};
};
DFUNC(handleMouseButtonDown) = {
if !(GVAR(actionOnKeyRelease)) then {
[GVAR(openedMenuType),true] call FUNC(keyUp);
};
};
GVAR(keyDown) = false;
GVAR(keyDownSelfAction) = false;
GVAR(keyDownTime) = 0;
@ -51,6 +66,7 @@ GVAR(expandedTime) = diag_tickTime;
GVAR(iconCtrls) = [];
GVAR(iconCount) = 0;
GVAR(collectedActionPoints) = [];
GVAR(foundActions) = [];
GVAR(lastTimeSearchedActions) = -1000;

View File

@ -67,12 +67,12 @@ if !({} isEqualTo (_origActionData select 5)) then {
if (count _pPath == count _fullPath &&
{_pPath isEqualTo _fullPath}) then {
_action = [_object, _action, _fullPath] call FUNC(collectActiveActionTree);
_action = [_object, [_actionData,[]], _fullPath] call FUNC(collectActiveActionTree);
if ((count _action) > 0) then {
_activeChildren pushBack _action;
};
};
} forEach GVAR(objectActions);
} forEach GVAR(objectActionList);
// If the original action has no statement, and no children, don't display it

View File

@ -37,40 +37,36 @@ GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
// Delete existing controls in case there's any left
GVAR(iconCount) = 0;
for "_i" from 0 to (count GVAR(iconCtrls))-1 do {
ctrlDelete (GVAR(iconCtrls) select _i);
GVAR(ParsedTextCached) set [_i, ""];
};
GVAR(iconCtrls) resize GVAR(iconCount);
if (GVAR(useCursorMenu)) then {
createDialog QGVAR(cursorMenu);
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
(finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
// The dialog sets:
// uiNamespace getVariable QGVAR(dlgCursorMenu);
// uiNamespace getVariable QGVAR(cursorMenuOpened);
ctrlEnable [91921, true];
GVAR(cursorPos) = [0.5,0.5,0];
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", {
if (GVAR(cursorKeepCentered)) then {
GVAR(cursorPos) = GVAR(cursorPos) vectorAdd [_this select 1, _this select 2, 0] vectorDiff [0.5, 0.5, 0];
setMousePosition [0.5, 0.5];
} else {
GVAR(cursorPos) = [_this select 1, _this select 2, 0];
};
}];
// handles LMB in cursor mode when action on keyrelease is disabled
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseButtonDown", {
if (!GVAR(actionOnKeyRelease) && GVAR(actionSelected)) then {
[GVAR(openedMenuType),true] call FUNC(keyUp);
};
}];
_ctrl = (findDisplay 91919) ctrlCreate ["RscStructuredText", 9922];
_ctrl ctrlSetPosition [safeZoneX, safeZoneY, safeZoneW, safeZoneH];
_ctrl ctrlCommit 0;
// handles Mouse moving and LMB in cursor mode when action on keyrelease is disabled
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
setMousePosition [0.5, 0.5];
};
GVAR(selfMenuOffset) = ((positionCameraToWorld [0, 0, 2]) call EFUNC(common,positionToASL)) vectorDiff
((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL));
private ["_wavesAtOrigin", "_wavesAtVirtualPoint"];
_wavesAtOrigin = [(positionCameraToWorld [0, 0, 0])] call EFUNC(common,waveHeightAt);
_wavesAtVirtualPoint = [(positionCameraToWorld [0, 0, 2])] call EFUNC(common,waveHeightAt);
GVAR(selfMenuOffset) set [2, ((GVAR(selfMenuOffset) select 2) + _wavesAtOrigin - _wavesAtVirtualPoint)];
["interactMenuOpened", [_menuType]] call EFUNC(common,localEvent);
true

View File

@ -19,7 +19,7 @@ _calledByClicking = _this select 1;
if (GVAR(openedMenuType) < 0) exitWith {true};
if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then {
closeDialog 0;
(findDisplay 91919) closeDisplay 2;
};
if(GVAR(actionSelected)) then {

View File

@ -17,13 +17,13 @@ GVAR(currentOptions) = [];
private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos", "_virtualPoint", "_wavesAtOrigin", "_wavesAtVirtualPoint"];
_player = ACE_player;
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
_fnc_renderNearbyActions = {
// Render all nearby interaction menus
#define MAXINTERACTOBJECTS 3
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
GVAR(foundActions) = [];
GVAR(lastTimeSearchedActions) = diag_tickTime;
@ -101,7 +101,7 @@ _fnc_renderSelfActions = {
// Iterate through base level class actions and render them if appropiate
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
_classActions = missionNamespace getVariable [_actionsVarName, []];
_pos = if !(GVAR(useCursorMenu)) then {
_virtualPoint = (((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition);
_wavesAtOrigin = [(positionCameraToWorld [0, 0, 0])] call EFUNC(common,waveHeightAt);
@ -111,7 +111,7 @@ _fnc_renderSelfActions = {
} else {
[0.5, 0.5]
};
{
_action = _x;
[_target, _action, _pos] call FUNC(renderBaseMenu);
@ -119,6 +119,8 @@ _fnc_renderSelfActions = {
};
GVAR(collectedActionPoints) resize 0;
// Render nearby actions, unit self actions or vehicle self actions as appropiate
if (GVAR(openedMenuType) == 0) then {
@ -137,3 +139,29 @@ if (GVAR(openedMenuType) == 0) then {
} else {
ACE_player call _fnc_renderSelfActions;
};
if (count GVAR(collectedActionPoints) > 1) then {
// Do the oclusion pass
// Order action points according to z
GVAR(collectedActionPoints) sort true;
private ["_i","_j","_delta"];
for [{_i = count GVAR(collectedActionPoints) - 1}, {_i > 0}, {_i = _i - 1}] do {
for [{_j = _i - 1}, {_j >= 0}, {_j = _j - 1}] do {
// Check if action point _i is ocluded by _j
_delta = vectorNormalized ((GVAR(collectedActionPoints) select _i select 1) vectorDiff (GVAR(collectedActionPoints) select _j select 1));
// If _i is inside a cone with 20º half angle with origin on _j
if (_delta select 2 > 0.94) exitWith {
GVAR(collectedActionPoints) deleteAt _i;
};
};
};
};
// Render the non-ocluded points
{
EXPLODE_3_PVT(_x,_z,_sPos,_activeActionTree);
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
} forEach GVAR(collectedActionPoints);

View File

@ -93,11 +93,17 @@ _fnc_print = {
// Check if there's something left for rendering
if (count _activeActionTree == 0) exitWith {false};
//EXPLODE_2_PVT(_activeActionTree,_actionData,_actionChildren);
BEGIN_COUNTER(fnc_renderMenus);
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
// IGNORE_PRIVATE_WARNING(_cameraPos,_cameraDir);
if (count _pos > 2) then {
_sPos pushBack (((_pos call EFUNC(common,positionToASL)) vectorDiff _cameraPos) vectorDotProduct _cameraDir);
} else {
_sPos pushBack 0;
};
// Add action point for oclusion and rendering
GVAR(collectedActionPoints) pushBack [_sPos select 2, _sPos, _activeActionTree];
END_COUNTER(fnc_renderMenus);

View File

@ -23,6 +23,10 @@ PARAMS_4(_text,_icon,_sPos,_textSettings);
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
_displayNum = [[46, 12] select visibleMap,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
if (GVAR(useCursorMenu)) then {
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
};
};
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);

View File

@ -20,6 +20,10 @@ private ["_displayNum", "_ctrl", "_pos"];
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
_displayNum = [[46, 12] select visibleMap,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
if (GVAR(useCursorMenu)) then {
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
};
};
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);

View File

@ -12,7 +12,7 @@
*/
#include "script_component.hpp"
private ["_menuDepth", "_mixColor", "_pathCount", "_row", "_shadowColor", "_textColor", "_textSize"];
private ["_menuDepth", "_mixColor", "_pathCount", "_row", "_shadowColor", "_textColor", "_textSize", "_colorShadowMax", "_colorShadowMin", "_colorTextMax", "_colorTextMin", "_shadowSetting"];
//Mixes 2 colors (number arrays) and makes a color string "#AARRGGBB" for structured text
_mixColor = {
@ -30,9 +30,16 @@ _mixColor = {
_return
};
_textColor = [GVAR(colorTextMin), GVAR(colorTextMax), 1] call _mixColor;
_shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), 1] call _mixColor;
_textSize = switch (GVAR(textSize)) do {
_colorTextMin = missionNamespace getVariable [QGVAR(colorTextMin), [1,1,1,0.25]];
_colorTextMax = missionNamespace getVariable [QGVAR(colorTextMax), [1,1,1,1]];
_colorShadowMin = missionNamespace getVariable [QGVAR(colorShadowMin), [0,0,0,0.25]];
_colorShadowMax = missionNamespace getVariable [QGVAR(colorShadowMax), [0,0,0,1]];
_shadowSetting = missionNamespace getVariable [QGVAR(shadowSetting), 2];
_textSize = missionNamespace getVariable [QGVAR(textSize), 2];
_textColor = [_colorTextMin, _colorTextMax, 1] call _mixColor;
_shadowColor = [_colorShadowMin, _colorShadowMax, 1] call _mixColor;
_textSize = switch (_textSize) do {
case (0): {0.4};
case (1): {0.6};
case (2): {0.8};
@ -40,20 +47,20 @@ _textSize = switch (GVAR(textSize)) do {
case (4): {1.2};
};
GVAR(colorSelectedSettings) = format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, GVAR(shadowSetting), _shadowColor];
GVAR(colorSelectedSettings) = format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, _shadowSetting, _shadowColor];
GVAR(textSettingsMatrix) = [];
for "_pathCount" from 0 to 15 do {
_row = [];
for "_menuDepth" from 0 to 15 do {
if (_menuDepth > 0) then {
_textColor = [GVAR(colorTextMin), GVAR(colorTextMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor;
_shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor;
_textColor = [_colorTextMin, _colorTextMax, (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor;
_shadowColor = [_colorShadowMin, _colorShadowMax, (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor;
} else {
_textColor = [GVAR(colorTextMin), GVAR(colorTextMax), 0] call _mixColor;
_shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), 0] call _mixColor;
_textColor = [_colorTextMin, _colorTextMax, 0] call _mixColor;
_shadowColor = [_colorShadowMin, _colorShadowMax, 0] call _mixColor;
};
_row pushBack format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, GVAR(shadowSetting), _shadowColor];
_row pushBack format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, _shadowSetting, _shadowColor];
};
GVAR(textSettingsMatrix) pushBack _row;
};

File diff suppressed because it is too large Load Diff

View File

@ -1,46 +1,44 @@
#define HSPACE 0.5-2.0/16/2
#define VSPACE 0.5-0.3/9/2
class RscStructuredText;
class ACE_Interaction_Button_Base {
tooltip = "";
//action = "ACE_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = ACE_Interaction_Buttons select ACE_Interaction_SelectedButton;ACE_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};";
action = "";
tooltip = "";
//action = "ACE_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = ACE_Interaction_Buttons select ACE_Interaction_SelectedButton;ACE_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};";
action = "";
idc = -1;
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;
idc = -1;
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;
style = 2;
x = 0;
y = 0;
w = 2.0 / 16 * safezoneW;
h = 0.3 / 9 * safezoneH;
style = 2;
x = 0;
y = 0;
w = 2.0 / 16 * safezoneW;
h = 0.3 / 9 * safezoneH;
offsetX = 0.003;
offsetY = 0.003;
offsetPressedX = 0.002;
offsetPressedY = 0.002;
borderSize = 0;
offsetX = 0.003;
offsetY = 0.003;
offsetPressedX = 0.002;
offsetPressedY = 0.002;
borderSize = 0;
colorText[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,1};
colorBackground[] = {0,0,0,0.8};
colorBackgroundDisabled[] = {0,0,0,0.8};
colorBackgroundActive[] = {1,1,1,0};
colorFocused[] = {1,1,1,1};
colorShadow[] = {0,0,0,0};
colorBorder[] = {1,1,1,0.8};
colorText[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,1};
colorBackground[] = {0,0,0,0.8};
colorBackgroundDisabled[] = {0,0,0,0.8};
colorBackgroundActive[] = {1,1,1,0};
colorFocused[] = {1,1,1,1};
colorShadow[] = {0,0,0,0};
colorBorder[] = {1,1,1,0.8};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
};
class RscListbox;
@ -49,86 +47,86 @@ class RscText;
#define X_OFFSET 0.2
class RscACE_SelectAnItem {
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.6;
h = 0.71;
colorBackground[] = {0, 0, 0, 0.2};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.59;
h = 0.05;
style = 0x02;
text = "";
};
class itemList:RscListBox {
onMouseButtonDblClick = "_this call ACE_Interaction_fnc_onSelectMenuDblClick";
idc = 8866;
x = X_OFFSET + 0.005;
w = 0.59;
h = 0.54;
y = 0.06;
};
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.6;
h = 0.71;
colorBackground[] = {0, 0, 0, 0.2};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.59;
h = 0.05;
style = 0x02;
text = "";
};
class itemList:RscListBox {
onMouseButtonDblClick = "_this call ACE_Interaction_fnc_onSelectMenuDblClick";
idc = 8866;
x = X_OFFSET + 0.005;
w = 0.59;
h = 0.54;
y = 0.06;
};
class cancelBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
};
class approveBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
};
class cancelBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
};
class approveBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
};
class cancelBtn: ACE_Interaction_Button_Base {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
style = 2;
text = $STR_ACE_Interaction_Back; //$STR_ACE_Interaction_CancelSelection;
action = "call ACE_Interaction_fnc_hideMenu;"; //'Default' call ACE_Interaction_fnc_openMenu; 'Default' call ACE_Interaction_fnc_openMenuSelf;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
class cancelBtn: ACE_Interaction_Button_Base {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
style = 2;
text = $STR_ACE_Interaction_Back; //$STR_ACE_Interaction_CancelSelection;
action = "call ACE_Interaction_fnc_hideMenu;"; //'Default' call ACE_Interaction_fnc_openMenu; 'Default' call ACE_Interaction_fnc_openMenuSelf;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
class approveBtn: ACE_Interaction_Button_Base {
idc = 8860;
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
style = 2;
text = $STR_ACE_Interaction_MakeSelection;
action = "call ACE_Interaction_fnc_hideMenu;";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
};
class approveBtn: ACE_Interaction_Button_Base {
idc = 8860;
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
style = 2;
text = $STR_ACE_Interaction_MakeSelection;
action = "call ACE_Interaction_fnc_hideMenu;";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
};
};
#define GUI_GRID_W (0.025)
@ -136,64 +134,64 @@ class RscACE_SelectAnItem {
class RscPicture;
class RscInteractionIcon: RscPicture {
x = 19.25 * GUI_GRID_W;
y = 15.75 * GUI_GRID_H;
w = 2*GUI_GRID_H;
h = 2*GUI_GRID_H;
x = 19.25 * GUI_GRID_W;
y = 15.75 * GUI_GRID_H;
w = 2*GUI_GRID_H;
h = 2*GUI_GRID_H;
};
class RscInteractionHelperIcon: RscInteractionIcon {
x = 20 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = GUI_GRID_H;
h = GUI_GRID_H;
x = 20 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = GUI_GRID_H;
h = GUI_GRID_H;
};
class RscInteractionText: RscText{
x = 21 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = 8 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
x = 21 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = 8 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
};
class RscTitles {
class GVAR(InteractionHelper) {
idd = 9930;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['ACE_Helper_Display', _this select 0];";
class GVAR(InteractionHelper) {
idd = 9930;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['ACE_Helper_Display', _this select 0];";
class controls {
class SelectIcon: RscInteractionHelperIcon{
idc = 1200;
text = PATHTOF(UI\mouse_left_ca.paa);
y = 17.5 * GUI_GRID_H;
};
class SelectText: RscInteractionText{
idc = 1000;
y = 17 * GUI_GRID_H;
text = $STR_ACE_Interaction_MakeSelection;
};
class GoBackIcon: RscInteractionHelperIcon{
idc = 1201;
text = PATHTOF(UI\mouse_right_ca.paa);
y = 19.5 * GUI_GRID_H;
};
class GoBackText: RscInteractionText{
idc = 1001;
y = 19 * GUI_GRID_H;
text = $STR_ACE_Interaction_Back;
};
class ScrollIcon: RscInteractionHelperIcon{
idc = 1202;
text = PATHTOF(UI\mouse_scroll_ca.paa);
y = 18.5 * GUI_GRID_H;
};
class ScrollText: RscInteractionText{
idc = 1002;
y = 18 * GUI_GRID_H;
text = $STR_ACE_Interaction_ScrollHint;
};
class controls {
class SelectIcon: RscInteractionHelperIcon{
idc = 1200;
text = PATHTOF(UI\mouse_left_ca.paa);
y = 17.5 * GUI_GRID_H;
};
class SelectText: RscInteractionText{
idc = 1000;
y = 17 * GUI_GRID_H;
text = $STR_ACE_Interaction_MakeSelection;
};
class GoBackIcon: RscInteractionHelperIcon{
idc = 1201;
text = PATHTOF(UI\mouse_right_ca.paa);
y = 19.5 * GUI_GRID_H;
};
class GoBackText: RscInteractionText{
idc = 1001;
y = 19 * GUI_GRID_H;
text = $STR_ACE_Interaction_Back;
};
class ScrollIcon: RscInteractionHelperIcon{
idc = 1202;
text = PATHTOF(UI\mouse_scroll_ca.paa);
y = 18.5 * GUI_GRID_H;
};
class ScrollText: RscInteractionText{
idc = 1002;
y = 18 * GUI_GRID_H;
text = $STR_ACE_Interaction_ScrollHint;
};
};
};
};
};

View File

@ -3,7 +3,6 @@ ace_interaction
Provides interaction options between units.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.

View File

@ -15,6 +15,7 @@ if (!hasInterface) exitWith {};
GVAR(isOpeningDoor) = false;
// restore global fire teams for JIP
private ["_team"];
{
_team = _x getVariable [QGVAR(assignedFireTeam), ""];
if (_team != "") then {_x assignTeam _team};

View File

@ -1,26 +1,24 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interact_menu"};
author[] = {"commy2", "KoffeinFlummi", "esteldunedain", "bux578"};
authorUrl = "https://github.com/commy2/";
VERSION_CONFIG;
};
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interact_menu"};
author[] = {"commy2", "KoffeinFlummi", "esteldunedain", "bux578"};
authorUrl = "https://github.com/commy2/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include <Menu_Config.hpp>
#include "Menu_Config.hpp"
class ACE_Settings {
class GVAR(EnableTeamManagement) {
value = 1;
typeName = "BOOL";
};
class GVAR(EnableTeamManagement) {
value = 1;
typeName = "BOOL";
};
};

View File

@ -1,36 +0,0 @@
/*
Author: Garth de Wet (LH)
Description:
Adds an item to the select menu
Parameters:
0: ARRAY/NUMBER - List container
1: String - Display Name
2: String - Picture
3: String/code - data
Returns:
ARRAY/Number
Example:
*/
#include "script_component.hpp"
private ["_container", "_displayName", "_picture", "_data", "_index"];
_container = _this select 0;
_displayName = _this select 1;
_picture = _this select 2;
_data = _this select 3;
if (_picture == "" || _picture == "PictureThing") then {
_picture = QUOTE(PATHTOF(UI\dot_ca.paa));
};
_index = lbAdd [_container, _displayName];
lbSetData [_container, _index, str _data];
lbSetPicture [_container, _index, _picture];
_container

View File

@ -2,7 +2,7 @@
* Author: esteldunedain
* Mount unit actions inside passenger submenu
*
* Argument:
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
* 3: Parameters <ARRAY>
@ -10,14 +10,17 @@
* Return value:
* Children actions <ARRAY>
*
* Example:
* array = [target, player, [params]] call ace_interaction_fnc_addPassengerAction
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_vehicle,_player,_parameters);
EXPLODE_1_PVT(_parameters,_unit);
private ["_unit","_actions"];
_unit = _parameters select 0;
private ["_varName", "_actionTrees", "_actions"];
_varName = format [QEGVAR(interact_menu,Act_%1), typeOf _unit];
_actionTrees = missionNamespace getVariable [_varName, []];

View File

@ -2,7 +2,7 @@
* Author: esteldunedain
* Create one action per passenger
*
* Argument:
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
* 3: Parameters <ARRAY>
@ -10,6 +10,9 @@
* Return value:
* Children actions <ARRAY>
*
* Example:
* [target, player, [params]] call ace_interaction_fnc_addPassengersActions
*
* Public: No
*/
#include "script_component.hpp"
@ -20,8 +23,9 @@ private ["_actions"];
_actions = [];
{
private ["_unit"];
_unit = _x;
if (_x != _player) then {
if (_unit != _player) then {
_actions pushBack
[
[
@ -39,4 +43,4 @@ _actions = [];
};
} forEach crew _vehicle;
_actions
_actions

View File

@ -0,0 +1,32 @@
/*
* Author: Garth de Wet (LH)
* Adds an item to the select menu
*
* Arguments:
* 0: List container <ARRAY/NUMBER>
* 1: Display name <STRING>
* 2: Picture <STRING>
* 3: Data <STRING/CODE>
*
* Return value:
* Container <ARRAY/NUMBER>
*
* Example:
* [actions, "Banana", "UI\dot_ca.paa", "bananaContents"] call ace_interaction_fnc_addSelectableItem
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_4(_container,_displayName,_picture,_data);
if (_picture == "" || _picture == "PictureThing") then {
_picture = QUOTE(PATHTOF(UI\dot_ca.paa));
};
private ["_index"];
_index = lbAdd [_container, _displayName];
lbSetData [_container, _index, str _data];
lbSetPicture [_container, _index, _picture];
_container

View File

@ -1,8 +1,21 @@
// by commy2
/*
* Author: commy2
* Applies buttons
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_applyButtons
*
* Public: No
*/
#include "script_component.hpp"
private ["_object", "_actions", "_dlgInteractionDialog", "_ctrlInteractionDialog", "_index", "_ctrlInteractionDialogIcon"];
private ["_object", "_actions", "_dlgInteractionDialog", "_ctrlInteractionDialog", "_index", "_ctrlInteractionDialogIcon", "_a", "_action", "_count"];
_object = GVAR(Target);
_actions = GVAR(Buttons);

View File

@ -3,11 +3,11 @@
* Test if can Become Leader of group
*
* Arguments:
* 0: target <OBJECT>
* 1: player <OBJECT>
* 0: Target <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* <BOOL>
* Able to become leader of group <BOOL>
*
* Example:
* [player, player] call ace_interaction_fnc_canBecomeLeader

View File

@ -1,5 +1,18 @@
// by commy2
/*
* Author: commy2
* Checks if the player can interact with civilian
*
* Arguments:
* 0: Target <OBJECT>
*
* Return value:
* Able to interact with civilian <BOOL>
*
* Example:
* [target] call ace_interaction_fnc_canInteractWithCivilian
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_2_PVT(_this,_unit,_isCivilian);
@ -8,4 +21,4 @@ if (isNil "_isCivilian") then {_isCivilian = true};
alive _unit
&& [side _unit != side ACE_player, side group _unit == civilian] select _isCivilian
//&& {count (weapons _unit) == 0}
//&& {count (weapons _unit) == 0}

View File

@ -1,10 +1,22 @@
// by commy2
/*
* Author: commy2
* Checks if the player can join a group
*
* Arguments:
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return value:
* Able to join a group <BOOL>
*
* Example:
* [player, target] call ace_interaction_fnc_canJoinGroup
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
PARAMS_2(_unit,_target);
alive _target
&& {!(_target getVariable ["ACE_isUnconscious", false])}

View File

@ -1,10 +1,22 @@
// by commy2
/*
* Author: commy2
* Checks if the player can join a team
*
* Arguments:
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return value:
* Able to join a team <BOOL>
*
* Example:
* [player, target] call ace_interaction_fnc_canJoinTeam
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
PARAMS_2(_unit,_target);
alive _target
&& {!(_target getVariable ["ACE_isUnconscious", false])}

View File

@ -1,11 +1,22 @@
// by commy2
/*
* Author: commy2
* Checks if the player can tap a shoulder
*
* Arguments:
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return value:
* Able to tap a shoulder <BOOL>
*
* Example:
* [player, target] call ace_interaction_fnc_canTapShoulder
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
PARAMS_2(_unit,_target);
_target isKindOf "CAManBase" &&
{alive _target} &&

View File

@ -3,8 +3,8 @@
* Become Leader of group
*
* Arguments:
* 0: target <OBJECT>
* 1: player <OBJECT>
* 0: Target <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* None

View File

@ -1,9 +1,25 @@
// by commy2
/*
* Author: commy2
* Get door
*
* Arguments:
* 0: Distance <NUMBER>
*
* Return value:
* House objects and door <ARRAY>
* 0: House <OBJECT>
* 1: Door Name <STRING>
*
* Example:
* [player, target] call ace_interaction_fnc_getDoor
*
* Public: No
*/
#include "script_component.hpp"
private ["_distance", "_position0", "_position1", "_intersections", "_count", "_house", "_door", "_index", "_id"];
PARAMS_1(_distance);
_distance = _this select 0;
private ["_position0", "_position1", "_intersections", "_count", "_house", "_door"];
_position0 = positionCameraToWorld [0, 0, 0];
_position1 = positionCameraToWorld [0, 0, _distance];
@ -22,4 +38,5 @@ _intersections = [_house, "GEOM"] intersect [_position0, _position1];
_door = _intersections select 0 select 0;
if (isNil "_door") exitWith {[_house, ""]};
[_house, _door]

View File

@ -1,10 +1,26 @@
// by commy2
/*
* Author: commy2
* Get door animations
*
* Arguments:
* 0: House <OBJECT>
* 1: Door <STRING>
*
* Return value:
* Animation and Locked variable <ARRAY>
* 0: Animation <STRING>
* 1: Locked variable <STRING>
*
* Example:
* array = [target, "door"] call ace_interaction_fnc_getDoorAnimations
*
* Public: No
*/
#include "script_component.hpp"
private ["_house", "_door", "_animations", "_lockedVariable"];
PARAMS_2(_house,_door);
_house = _this select 0;
_door = _this select 1;
private ["_index", "_animations", "_lockedVariable"];
_index = [
"door_1",

View File

@ -1,21 +1,25 @@
/*
* Author: KoffeinFlummi
*
* Forces a civilian to the ground. (chance of failure).
* Forces a civilian to the ground (with a chance of failure)
*
* Arguments:
* 0: Unit to be sent away (Object)
* 0: Unit <OBJECT>
*
* Return value:
* none
* None
*
* Example:
* [target] call ace_interaction_fnc_getDown
*
* Public: No
*/
#include "script_component.hpp"
#define RADIUS 10
private ["_unit", "_chance", "_x"];
PARAMS_1(_unit);
_unit = _this select 0;
private ["_chance", "_x"];
ACE_player playActionNow "GestureGo"; // put something else here.
@ -31,4 +35,4 @@ if (count (weapons ACE_player) > 0) then {
_this setUnitPos "DOWN";
}, _x] call CBA_fnc_globalExecute;
};
} foreach (_unit nearEntities ["Civilian", RADIUS]);
} forEach (_unit nearEntities ["Civilian", RADIUS]);

View File

@ -1,4 +1,18 @@
// by commy2
/*
* Author: commy2
* Get selected button
*
* Arguments:
* None
*
* Return value:
* Angle <NUMBER>
*
* Example:
* call ace_interaction_fnc_getSelectedButton
*
* Public: No
*/
#include "script_component.hpp"
#define MIN_DISTANCE 0.0065

View File

@ -2,18 +2,21 @@
* Author: esteldunedain
* Return a suitable position for the action point for the current weapon
*
* Argument:
* None
* Arguments:
* None (uses local variable _target)
*
* Return value:
* Children actions <ARRAY>
*
* Example:
* call ace_interaction_fnc_getWeaponPos
*
* Public: No
*/
#include "script_component.hpp"
// IGNORE_PRIVATE_WARNING(_target);
private ["_weaponDir","_refSystem"];
private ["_weaponDir", "_refSystem"];
_weaponDir = _target weaponDirection currentWeapon _target;
_refSystem = _weaponDir call EFUNC(common,createOrthonormalReference);

View File

@ -1,22 +1,22 @@
/*
Author: Garth de Wet (LH)
Description:
Closes the Interaction menu
Parameters:
Nothing
Returns:
Nothing
Example:
call FUNC(hideMenu);
*/
* Author: Garth de Wet (LH)
* Closes the Interaction menu
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_hideMenu
*
* Public: No
*/
#include "script_component.hpp"
closeDialog 0;
(findDisplay 1713999) closeDisplay 1;
(uiNameSpace getVariable QGVAR(Flow_Display)) closeDisplay 0;
GVAR(MainButton) = nil;
call FUNC(hideMouseHint);
call FUNC(hideMouseHint);

View File

@ -1,22 +1,21 @@
/*
Author(s):
Garth de Wet (LH)
Description:
Hides the interaction helper text with the mouse buttons at the bottom middle of the screen
Parameters:
Nothing
Returns:
Nothing
Example:
call FUNC(hideMouseHint);
*/
* Author: Garth de Wet (LH)
* Hides the interaction helper text with the mouse buttons at the bottom middle of the screen
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_hideMouseHint
*
* Public: No
*/
#include "script_component.hpp"
if (isNull (uiNamespace getVariable ["ACE_Helper_Display", objNull])) exitWith{};
(QGVAR(InteractionHelper) call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
showHUD true;
showHUD true;

View File

@ -1,21 +1,24 @@
/*
* Author: commy2
*
* Check if the vehicle is in range of the player.
*
* Argument:
* 0: Vehicke (Object)
* 1: Distance in meters (Number)
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Distance in meters <NUMBER>
*
* Return value:
* (Bool)
* Vehicle in range of player <BOOL>
*
* Example:
* [target, 5] call ace_interaction_fnc_isInRange
*
* Public: No
*/
#include "script_component.hpp"
private ["_vehicle", "_distance", "_player"];
PARAMS_2(_vehicle,_distance);
_vehicle = _this select 0;
_distance = _this select 1;
private ["_player", "_position0", "_position1"];
_player = ACE_player;

View File

@ -1,10 +1,24 @@
// by commy2
/*
* Author: commy2
* Assigns a unit to the team
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Team <STRING>
*
* Return value:
* None
*
* Example:
* [target, "YELLOW"] call ace_interaction_fnc_joinTeam
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_team", "_message"];
PARAMS_2(_unit,_team);
_unit = _this select 0;
_team = _this select 1;
private ["_message"];
_unit setVariable [QGVAR(assignedFireTeam), _team, true];
[_unit, format ["{_this assignTeam '%1'}", _team]] call EFUNC(common,execRemoteFnc);

View File

@ -1,16 +1,24 @@
/*
* Author: bux578
*
* Initializes the Interaction module.
* Initializes the Interaction module
*
* Arguments:
* Whatever the module provides. (I dunno.)
* 0: Logic <NUMBER>
* 1: ???
* 2: Activation State <BOOL>
*
* Return Value:
* Return value:
* None
*
* Example:
* [logic, ???, activationState] call ace_interaction_fnc_moduleInteraction
*
* Public: No
*/
#include "script_component.hpp"
private ["_logic", "_activated"];
_logic = _this select 0;
_activated = _this select 2;

View File

@ -1,21 +1,22 @@
/*
Author: Garth de Wet (LH)
Description:
Depending on the passed value, either scrolls down through the list or up.
Parameters:
NUMBER - Amount to increase current interaction target
Returns:
Nothing
Example:
1 call FUNC(MoveDown);
-1 call FUNC(MoveDown);
*/
* Author: Garth de Wet (LH)
* Scrolls through the list down or up
*
* Arguments:
* 0: Amount <NUMBER>
*
* Return value:
* None
*
* Example:
* [2] call ace_interaction_fnc_moveDown
*
* Public: No
*/
#include "script_component.hpp"
private ["_count", "_player", "_vehicle", "_dlgInteractionDialog", "_top", "_i", "", "_ctrl", "_index", "_action", "_color", "_current", "_infoText", "_target"];
#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}})
if (isNil QGVAR(MainButton)) exitWith{};
if (isNil QGVAR(Buttons)) exitWith{};

View File

@ -1,7 +1,21 @@
// by commy2
/*
* Author: commy2
* On button up
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_onButtonUp
*
* Public: No
*/
#include "script_component.hpp"
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_statement", "_condition", "_conditionShow", "_exceptions", "_distance"];
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_statement", "_condition", "_conditionShow", "_distance"];
_player = ACE_player;
_vehicle = vehicle _player;
@ -20,11 +34,9 @@ _action = if (_index != -1 && {_index < _count}) then {
closeDialog 0;
_statement = _action select 1;
_condition = _action select 2;
_conditionShow = _action select 7;
_exceptions = _action select 8;//
_distance = _action select 9;
if ((_distance == 0 || {[GVAR(Target), _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then {

View File

@ -1,6 +1,20 @@
// by commy2
/*
* Author: commy2
* On click
*
* Arguments:
* Index <NUMBER>
*
* Return value:
* None
*
* Example:
* 5 call ace_interaction_fnc_onClick
*
* Public: No
*/
#include "script_component.hpp"
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_subMenu", "_statement", "_condition", "_conditionShow", "_exceptions", "_distance"];
private ["_player", "_vehicle", "_target", "_count", "_index", "_action", "_subMenu", "_statement", "_condition", "_conditionShow", "_distance"];
_player = ACE_player;
_vehicle = vehicle _player;
@ -29,7 +43,6 @@ if (count _subMenu < 2) then {
_statement = _action select 1;
_condition = _action select 2;
_conditionShow = _action select 7;
_exceptions = _action select 8;//
_distance = _action select 9;
if ((_distance == 0 || {[GVAR(Target), _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then {

View File

@ -1,4 +1,18 @@
// by CorruptedHeart, commy2
/*
* Author: CorruptedHeart, commy2
* On select menu double click
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_onSelectMenuDblClick
*
* Public: No
*/
#include "script_component.hpp"
call compile (lbData [8866, lbCurSel 8866]) call GVAR(SelectAccept);

View File

@ -1,19 +1,32 @@
// by commy2
/*
* Author: commy2
* Opens door
*
* Arguments:
* 0: House <OBJECT>
* 1: Door <STRING>
*
* Return value:
* None
*
* Example:
* [house, "door"] call ace_interaction_fnc_openDoor
*
* Public: No
*/
#include "script_component.hpp"
private ["_info", "_house", "_door", "_animations", "_lockedVariable"];
private ["_info", "_animations", "_phase", "_position", "_time", "_usedMouseWheel"];
_info = [2] call FUNC(getDoor);
_house = _info select 0;
_door = _info select 1;
EXPLODE_2_PVT(_info,_house,_door);
if (isNull _house) exitWith {};
_animations = [_house, _door] call FUNC(getDoorAnimations);
_lockedVariable = _animations select 1;
_animations = _animations select 0;
EXPLODE_2_PVT(_animations,_animations,_lockedVariable);
if (count _animations == 0) exitWith {};
@ -26,6 +39,7 @@ GVAR(isOpeningDoor) = true;
playSound "ACE_Sound_Click";
[_house, _animations] spawn {
private ["_house", "_animations", "_phase", "_position", "_time", "_usedMouseWheel"];
_house = _this select 0;
_animations = _this select 1;

View File

@ -1,44 +1,57 @@
// by commy2
/*
* Author: commy2
* Opens menu select UI
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Vehicle <OBJECT>
*
* Return value:
* None
*
* Example:
* [unit, vehicle] call ace_interaction_fnc_openMenuSelectUI
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_vehicle", "_cargo"];
PARAMS_2(_unit,_vehicle);
_unit = _this select 0;
_vehicle = _this select 1;
private ["_cargo", "_actions"];
// allow interaction with all cargo slots and all ffv slots
// Allow interaction with all cargo slots and all FFV slots
_cargo = [_vehicle, ["cargo", "ffv"], true] call EFUNC(common,getVehicleCrew);
// you can only interact if you are in cargo or ffv yourself. exit otherwise
// You can only interact if you are in cargo or FFV yourself. exit otherwise
if !(_unit in _cargo) exitWith {};
GVAR(InteractionMenu_Crew) = _cargo;
// prepare: add header and "OK" button to select menu
private "_actions";
// Prepare: add header and "OK" button to select menu
_actions = [localize "STR_ACE_Interaction_InteractionMenu", localize "STR_ACE_Interaction_Interact"] call FUNC(prepareSelectMenu);
// prepare: add all cargo units as options to select menu
// Prepare: add all cargo units as options to select menu
{
if (_x != _unit) then {
_actions = [
_actions,
[_x] call EFUNC(common,getName),
QUOTE(PATHTOF(UI\dot_ca.paa)),
_forEachIndex
] call FUNC(AddSelectableItem);
};
if (_x != _unit) then {
_actions = [
_actions,
[_x] call EFUNC(common,getName),
QUOTE(PATHTOF(UI\dot_ca.paa)),
_forEachIndex
] call FUNC(addSelectableItem);
};
} forEach _cargo;
// open select menu
// Open select menu
[
_actions,
{
call FUNC(hideMenu);
[0, GVAR(InteractionMenu_Crew) select _this, ""] spawn FUNC(showMenu);
GVAR(InteractionMenu_Crew) = nil;
},
{
call FUNC(hideMenu);
}
_actions,
{
call FUNC(hideMenu);
[0, GVAR(InteractionMenu_Crew) select _this, ""] spawn FUNC(showMenu);
GVAR(InteractionMenu_Crew) = nil;
},
{
call FUNC(hideMenu);
}
] call FUNC(openSelectMenu);

View File

@ -1,36 +1,42 @@
/*
Author: Garth de Wet (LH)
Description:
Opens the select menu UI and sets up the UI
Parameters:
0: ARRAY - items
ARRAY
0 = Text
1 = statement to execute
2 = condition before execute
3 = showDisabled
4 = priority
5 = icon
6 = extra variables. Passed to the code.
1: Code - select action
2: Code - Cancel Action
Returns:
Nothing
Example:
*/
* Author: Garth de Wet (LH)
* Opens the select menu UI and sets up the UI
*
* Arguments:
* 0: Items <ARRAY>
* 0: Text <STRING>
* 1: Statement to execute <CODE>
* 2: Condition before execute <CODE>
* 3: showDisabled <BOOL>
* 4: Priority <NUMBER>
* 5: Icon <STRING>
* 6: Extra variables passed to the code <ARRAY>
* 1: Select Action <CODE>
* 2: Cancel Action <CODE>
*
* Return value:
* None
*
* Example:
* [["text", {statement}, {condition}, showDisabled, priority, "icon", [variables]], {selectAction}, {cancelAction}] call ace_interaction_fnc_openSelectMenu
*
* Public: No
*/
#include "script_component.hpp"
private["_action", "_count", "_customActions", "_i"];
if (!(profileNamespace getVariable [QGVAR(FlowMenu), false])) then {
GVAR(SelectAccept) = _this select 1;
GVAR(SelectCancel) = _this select 2;
buttonSetAction [8855, QUOTE( call GVAR(SelectCancel); )]; // cancel
buttonSetAction [8860, QUOTE( (call compile (lbData [ARR_2(8866, lbCurSel 8866)])) call GVAR(SelectAccept); )]; // accept
buttonSetAction [8855, QUOTE( call GVAR(SelectCancel); )]; // Cancel
buttonSetAction [8860, QUOTE( (call compile (lbData [ARR_2(8866, lbCurSel 8866)])) call GVAR(SelectAccept); )]; // Accept
lbSetCurSel [8866, 0];
}else{
_customActions = _this select 0;
PARAMS_1(_customActions);
private ["_count", "_action"];
_count = count _customActions;
if (_count == 0) exitWith {};
_customActions call FUNC(sortOptionsByPriority);

View File

@ -1,28 +1,29 @@
/*
Author: Garth de Wet (LH)
Description:
Prepares the select menu for use.
Parameters:
0: TEXT - Header text
1: TEXT - Approve button text
Returns:
ARRAY/NUMBER - container object for use with AddSelectableItem.
Example:
["Select Explosive", "Place"] call FUNC(prepareSelectMenu);
*/
* Author: Garth de Wet (LH)
* Prepares the select menu for use
*
* Arguments:
* 0: Header Text <STRING>
* 1: Approve Button Text <STRING>
*
* Return value:
* Container object <NUMBER>
*
* Example:
* array = ["Select Explosive", "Place"] call ace_interaction_fnc_prepareSelectMenu
*
* Public: No
*/
#include "script_component.hpp"
private ["_buttonAction", "_header", "_buttonText", "_cancelButton"];
PARAMS_2(_header,_buttonText);
closeDialog 0;
_header = _this select 0;
_buttonText = _this select 1;
if (isNil "_buttonText" or {_buttonText == ""}) then {
_buttonText = localize "STR_ACE_Interaction_MakeSelection";
};
createDialog "RscACE_SelectAnItem";
ctrlSetText [8860, _buttonText];
ctrlSetText [8870, _header];

View File

@ -1,22 +1,26 @@
/*
* Author: KoffeinFlummi
*
* Pushes a boat away from the player.
* Pushes a boat away from the player
*
* Arguments:
* 0: Boat (object)
* 1: Velocity (vectorlike array)
* 0: Boat <OBJECT>
* 1: Velocity <ARRAY>
*
* Return Value:
* None
*
* Example:
* [target, [vector]] call ace_interaction_fnc_push
*
* Public: No
*/
#include "script_component.hpp"
_boat = _this select 0;
_velocity = _this select 1;
PARAMS_2(_boat,_velocity);
if !(local _boat) exitWith {
[_this, QUOTE(FUNC(push)), _boat] call EFUNC(common,execRemoteFnc);
[_this, QUOTE(FUNC(push)), _boat] call EFUNC(common,execRemoteFnc);
};
_boat setVelocity _velocity;

View File

@ -1,7 +1,23 @@
// by commy2
/*
* Author: commy2
* Removes tag
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_removeTag
*
* Public: No
*/
#include "script_component.hpp"
0 spawn {
private ["_index", "_name"];
waitUntil {player getVariable ["ACE_Name", ""] != ""};
_name = player getVariable ["ACE_Name", ""];

View File

@ -1,36 +1,40 @@
/*
* Author: KoffeinFlummi
*
* Sends a civilian crowd away (chance of failure).
* Sends a civilian crowd away with a chance of failure
*
* Arguments:
* 0: Unit to be sent away (Object)
* 0: Unit <OBJECT>
*
* Return value:
* none
*/
* None
*
* Example:
* [target] call ace_interaction_fnc_sendAway
*
* Public: No
*/
#include "script_component.hpp"
#define DISTANCE 50
#define RADIUS 10
private ["_unit", "_chance", "_x"];
PARAMS_1(_unit);
_unit = _this select 0;
private ["_chance", "_x"];
ACE_player playActionNow "GestureGo";
if (count weapons ACE_player > 0) then {
_chance = 0.8;
_chance = 0.8;
} else {
_chance = 0.5;
_chance = 0.5;
};
{
if (count (weapons _unit) == 0 and random 1 < _chance) then {
[-2, {
(_this select 0) setUnitPos "AUTO";
(_this select 0) doMove [(getPos (_this select 0) select 0) + DISTANCE * (eyeDirection (_this select 1) select 0), (getPos (_this select 0) select 1) + DISTANCE * (eyeDirection (_this select 1) select 1), 0];
}, [_x, ACE_player]] call CBA_fnc_globalExecute;
};
} foreach (_unit nearEntities ["Civilian", RADIUS]);
if (count (weapons _unit) == 0 and random 1 < _chance) then {
[-2, {
(_this select 0) setUnitPos "AUTO";
(_this select 0) doMove [(getPos (_this select 0) select 0) + DISTANCE * (eyeDirection (_this select 1) select 0), (getPos (_this select 0) select 1) + DISTANCE * (eyeDirection (_this select 1) select 1), 0];
}, [_x, ACE_player]] call CBA_fnc_globalExecute;
};
} forEach (_unit nearEntities ["Civilian", RADIUS]);

View File

@ -1,28 +1,28 @@
/*
Author(s):
Garth de Wet (LH)
Description:
Shows the interaction helper text with the mouse buttons at the bottom middle of the screen
Parameters:
0: STRING - Left click text
1: STRING - Right click text
3: STRING - (Optional) Scroll text
Returns:
Nothing
Example:
["Place Explosive", "Cancel"] call FUNC(showMouseHint);
*/
* Author: Garth de Wet (LH)
* Shows the interaction helper text with the mouse buttons at the bottom middle of the screen
*
* Arguments:
* 0: Left Click Text <STRING>
* 1: Right Click Text <STRING>
* 2: Scroll Text <STRING> (Optional)
*
* Return value:
* None
*
* Example:
* ["Place Explosive", "Cancel"] call ace_interaction_fnc_showMouseHint
*
* Public: No
*/
#include "script_component.hpp"
#define GUI_GRID_W (0.025)
#define GUI_GRID_H (0.04)
private ["_leftClick", "_rightClick", "_scroll"];
_leftClick = _this select 0;
_rightClick = _this select 1;
private ["_scroll", "_display"];
PARAMS_2(_leftClick,_rightClick);
_scroll = "";
if (count _this > 2) then {
_scroll = _this select 2;
@ -44,11 +44,10 @@ if (isNull _display) exitWith{};
if (_scroll == "") exitWith {
(_display displayCtrl 1002) ctrlShow false;
(_display displayCtrl 1202) ctrlShow false;
(_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 8 * GUI_GRID_W, 1.5 * GUI_GRID_H];
(_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1 * GUI_GRID_W, 1 * GUI_GRID_H];
(_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 8 * GUI_GRID_W, 1.5 * GUI_GRID_H];
(_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1 * GUI_GRID_W, 1 * GUI_GRID_H];
(_display displayCtrl 1001) ctrlCommit 0;
(_display displayCtrl 1201) ctrlCommit 0;
};
(_display displayCtrl 1002) ctrlSetText _scroll;
showHUD false;
showHUD false;

View File

@ -1,4 +1,18 @@
// by commy2
/*
* Author: commy2
* Sort options by priority
*
* Arguments:
* Actions <ARRAY>
*
* Return value:
* None
*
* Example:
* customActions call ace_interaction_fnc_sortOptionsByPriority
*
* Public: No
*/
#include "script_component.hpp"
private ["_actions", "_count", "_index", "_actionN", "_actionM"];

View File

@ -1,4 +1,19 @@
// by commy2
/*
* Author: commy2
* Taps a shoulder
*
* Arguments:
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return value:
* None
*
* Example:
* [player, target] call ace_interaction_fnc_tapShoulder
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_tapper,_target,_shoulderNum);
@ -13,7 +28,7 @@ if (_target != ACE_player) exitWith {
addCamShake [4, 0.5, 5];
private "_message";
private ["_message"];
//localize is converting the escaped <> symbols, so just add them here instead of in the stringtable
if (_shoulderNum == 0) then {
_message = format ["%1 &gt;", (localize "STR_ACE_Interaction_YouWereTappedRight")];

View File

@ -1,12 +1,32 @@
// by commy2
/*
* Author: commy2
* Updates tooltip's position
*
* Arguments:
* 0: Tooltip Display <NUMBER>
* 1: X Coordinate <NUMBER>
* 2: Y Coordinate <NUMBER>
*
* Return value:
* None
*
* Example:
* [player, 0.5, 0.5] call ace_interaction_fnc_updateTooltipPosition
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_3(_tooltip,_coordinateX,_coordinateY);
private["_ctrl"];
disableSerialization;
_ctrl = ctrlParent (_this select 0) displayCtrl 40;
_ctrl = ctrlParent _tooltip displayCtrl 40;
_ctrl ctrlSetPosition [
(_this select 1) + 0.01 * safezoneW,
(_this select 2) + 0.01 * safezoneH,
_coordinateX + 0.01 * safezoneW,
_coordinateY + 0.01 * safezoneH,
2.0 / 16 * safezoneW,
0.3 / 9 * safezoneH
];

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Interaction">
<Key ID="STR_ACE_Interaction_MainAction">
@ -522,7 +522,7 @@
<German>Rot</German>
<Spanish>Rojo</Spanish>
<French>Rouge</French>
<Polish>Czerwony</Polish>
<Polish>Czerwonych</Polish>
<Czech>Červený</Czech>
<Russian>Красный</Russian>
<Portuguese>Vermelha</Portuguese>
@ -534,7 +534,7 @@
<German>Grün</German>
<Spanish>Verde</Spanish>
<French>Vert</French>
<Polish>Zielony</Polish>
<Polish>Zielonych</Polish>
<Czech>Zelený</Czech>
<Russian>Зеленый</Russian>
<Portuguese>Verde</Portuguese>
@ -546,7 +546,7 @@
<German>Blau</German>
<Spanish>Azul</Spanish>
<French>Bleu</French>
<Polish>Niebieski</Polish>
<Polish>Niebieskich</Polish>
<Czech>Modrý</Czech>
<Russian>Синий</Russian>
<Portuguese>Azul</Portuguese>
@ -558,7 +558,7 @@
<German>Gelb</German>
<Spanish>Amarillo</Spanish>
<French>Jaune</French>
<Polish>Żółty</Polish>
<Polish>Żółtych</Polish>
<Czech>Žlutý</Czech>
<Russian>Жёлтый</Russian>
<Portuguese>Amarela</Portuguese>
@ -666,7 +666,7 @@
<German>Du bist Gruppe %1 beigetreten</German>
<Spanish>Te has unido al equipo %1</Spanish>
<French>Tu as rejoint l'équipe %1</French>
<Polish>Dołączyłeś do drużyny %1</Polish>
<Polish>Dołączyłeś do %1</Polish>
<Czech>Připojil ses do %1 týmu</Czech>
<Russian>Вы присоединились к группе %1</Russian>
<Portuguese>Você uniu-se à Equipe %1</Portuguese>
@ -793,5 +793,21 @@
<Italian>Passeggeri</Italian>
<Portuguese>Passageiros</Portuguese>
</Key>
<Key ID="STR_ACE_InteractionSystem_Module_DisplayName">
<English>Interaction System</English>
<Polish>System interakcji</Polish>
</Key>
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_DisplayName">
<English>Enable Team Management</English>
<Polish>Wł. zarządzanie drużyną</Polish>
</Key>
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_Description">
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
<Polish>Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak</Polish>
</Key>
<Key ID="STR_ACE_InteractionSystem_Module_Description">
<English></English>
<Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -16,7 +16,7 @@ class CfgVehicles {
class MainTurret : MainTurret {
weapons[] = { QGVAR(Titan_Static) };
magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
turretInfoType = "ACE_RscOptics_javelin";
gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d);
opticsZoomMin = 0.08333;
@ -29,12 +29,12 @@ class CfgVehicles {
};
};
};
class O_static_AT_F: AT_01_base_F {
class O_static_AT_F: AT_01_base_F {
class Turrets : Turrets {
class MainTurret : MainTurret {
weapons[] = { QGVAR(Titan_Static) };
magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
turretInfoType = "ACE_RscOptics_javelin";
gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d);
opticsZoomMin = 0.08333;
@ -47,12 +47,12 @@ class CfgVehicles {
};
};
};
class I_static_AT_F: AT_01_base_F {
class I_static_AT_F: AT_01_base_F {
class Turrets : Turrets {
class MainTurret : MainTurret {
weapons[] = { QGVAR(Titan_Static) };
magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"};
turretInfoType = "ACE_RscOptics_javelin";
gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d);
opticsZoomMin = 0.08333;

View File

@ -38,7 +38,7 @@ class CfgWeapons {
lockingTargetSound[] = {"",0,1};
lockedTargetSound[] = {"",0,1};
};
class launch_I_Titan_short_F: launch_Titan_short_base {
class launch_I_Titan_short_F: launch_Titan_short_base {
GVAR(enabled) = 1;
weaponInfoType = "ACE_RscOptics_javelin";
modelOptics = PATHTOF(data\reticle_titan.p3d);
@ -48,7 +48,7 @@ class CfgWeapons {
lockingTargetSound[] = {"",0,1};
lockedTargetSound[] = {"",0,1};
};
class launch_O_Titan_short_F: launch_Titan_short_base {
class launch_O_Titan_short_F: launch_Titan_short_base {
GVAR(enabled) = 1;
weaponInfoType = "ACE_RscOptics_javelin";
modelOptics = PATHTOF(data\reticle_titan.p3d);
@ -59,7 +59,7 @@ class CfgWeapons {
lockingTargetSound[] = {"",0,1};
lockedTargetSound[] = {"",0,1};
};
class launch_Titan_short_F: launch_Titan_short_base {
class launch_Titan_short_F: launch_Titan_short_base {
GVAR(enabled) = 1;
weaponInfoType = "ACE_RscOptics_javelin";
modelOptics = PATHTOF(data\reticle_titan.p3d);

View File

@ -22,4 +22,6 @@ GVAR(MeasuredWindSpeed) = 0;
GVAR(ImpellerState) = 0;
GVAR(Kestrel4500) = false;
GVAR(Overlay) = false;
GVAR(Overlay) = false;
[] call FUNC(restoreUserData);

View File

@ -9,10 +9,11 @@ PREP(createKestrelDialog);
PREP(displayKestrel);
PREP(generateOutputData);
PREP(measureWindSpeed);
PREP(onCloseDialog);
PREP(onCloseDisplay);
PREP(restoreUserData);
PREP(storeUserData);
PREP(updateDisplay);
PREP(updateImpellerState);
PREP(onCloseDialog);
PREP(onCloseDisplay);
ADDON = true;

View File

@ -51,3 +51,4 @@ switch (_this) do {
};
[] call FUNC(updateDisplay);
[] call FUNC(storeUserData);

View File

@ -14,13 +14,14 @@
*/
#include "script_component.hpp"
private ["_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
private ["_playerAltitude", "_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
_playerAltitude = (getPosASL ACE_player) select 2;
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
_humidity = EGVAR(weather,currentHumidity);
_barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure);
_altitude = EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2);
_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure);
_altitude = EGVAR(weather,Altitude) + _playerAltitude;
GVAR(MIN) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude];
GVAR(MAX) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude];
};
@ -42,9 +43,9 @@ if (GVAR(MinAvgMaxMode) == 1) then {
// Wind SPD
_windSpeed = call FUNC(measureWindSpeed);
GVAR(MIN) set [1, (GVAR(MIN) select 1) min abs(_windSpeed)];
GVAR(MAX) set [1, abs(_windSpeed) max (GVAR(MAX) select 1)];
GVAR(TOTAL) set [1, (GVAR(TOTAL) select 1) + abs(_windSpeed)];
GVAR(MIN) set [1, (GVAR(MIN) select 1) min _windSpeed];
GVAR(MAX) set [1, _windSpeed max (GVAR(MAX) select 1)];
GVAR(TOTAL) set [1, (GVAR(TOTAL) select 1) + _windSpeed];
// CROSSWIND
_crosswind = 0;
@ -70,7 +71,7 @@ if (GVAR(MinAvgMaxMode) == 1) then {
};
// TEMP
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
GVAR(MIN) set [4, (GVAR(MIN) select 4) min _temperature];
GVAR(MAX) set [4, _temperature max (GVAR(MAX) select 4)];
GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _temperature];
@ -82,13 +83,13 @@ GVAR(MAX) set [5, _humidity max (GVAR(MAX) select 5)];
GVAR(TOTAL) set [5, (GVAR(TOTAL) select 5) + _humidity];
// BARO
_barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure);
_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure);
GVAR(MIN) set [6, (GVAR(MIN) select 6) min _barometricPressure];
GVAR(MAX) set [6, _barometricPressure max (GVAR(MAX) select 6)];
GVAR(TOTAL) set [6, (GVAR(TOTAL) select 6) + _barometricPressure];
// ALTITUDE
_altitude = EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2);
_altitude = EGVAR(weather,Altitude) + _playerAltitude;
GVAR(MIN) set [7, (GVAR(MIN) select 7) min _altitude];
GVAR(MAX) set [7, _altitude max (GVAR(MAX) select 7)];
GVAR(TOTAL) set [7, (GVAR(TOTAL) select 7) + _altitude];

View File

@ -34,10 +34,11 @@ _textInfoLine2 = "";
_windSpeed = call FUNC(measureWindSpeed);
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
_humidity = EGVAR(weather,currentHumidity);
_playerDir = getDir ACE_player;
_playerAltitude = (getPosASL ACE_player) select 2;
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
_humidity = EGVAR(weather,currentHumidity);
GVAR(Direction) = 4 * floor(_playerDir / 90);
if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1};
@ -174,7 +175,7 @@ switch (GVAR(Menu)) do {
};
case 6: { // BARO
if (!GVAR(MinAvgMax)) then {
_textCenterBig = Str(round((((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure)) * 10) / 10);
_textCenterBig = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10);
} else {
_textCenterLine1Left = "Min";
_textCenterLine2Left = "Avg";
@ -186,7 +187,7 @@ switch (GVAR(Menu)) do {
};
case 7: { // ALTITUDE
if (!GVAR(MinAvgMax)) then {
_textCenterBig = Str(round(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)));
_textCenterBig = Str(round(EGVAR(weather,Altitude) + _playerAltitude));
} else {
_textCenterLine1Left = "Min";
_textCenterLine2Left = "Avg";
@ -198,7 +199,7 @@ switch (GVAR(Menu)) do {
};
case 8: { // User Screen 1
_textCenterLine1Left = Str(round(_playerDir));
_textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)));
_textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + _playerAltitude));
_textCenterLine3Left = Str(round(abs(_windSpeed) * 10) / 10);
_textCenterLine1Right = GVAR(Directions) select GVAR(Direction);
_textCenterLine2Right = "m";
@ -207,7 +208,7 @@ switch (GVAR(Menu)) do {
case 9: { // User Screen 2
_textCenterLine1Left = Str(round(_temperature * 10) / 10);
_textCenterLine2Left = Str(round(_humidity * 100 * 10) / 10);
_textCenterLine3Left = Str(round((1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast) * 10) / 10);
_textCenterLine3Left = Str(round((_playerAltitude call EFUNC(weather,calculateBarometricPressure)) * 10) / 10);
_textCenterLine1Right = "C";
_textCenterLine2Right = "%";
_textCenterLine3Right = "hPA";

View File

@ -0,0 +1,18 @@
/*
* Author: Ruthberg
* Reads user data from profileNamespace
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_kestrel4500_fnc_restore_user_data
*
* Public: No
*/
#include "script_component.hpp"
GVAR(Menu) = 0 max (profileNamespace getVariable ["ACE_Kestrel4500_menu", 0]) min ((count GVAR(Menus)) - 1);

View File

@ -0,0 +1,18 @@
/*
* Author: Ruthberg
* Saves user data into profileNamespace
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_kestrel4500_fnc_store_user_data
*
* Public: No
*/
#include "script_component.hpp"
profileNamespace setVariable ["ACE_Kestrel4500_menu", GVAR(menu)];

View File

@ -10,5 +10,3 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h))

View File

@ -3,74 +3,66 @@ class CfgVehicles {
class ACE_ModuleMap: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Map";
displayName = "$STR_ACE_Map_Module_DisplayName";
function = QFUNC(moduleMap);
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Map_ca.paa);
class Arguments {
class MapIllumination {
displayName = "Map illumination?";
description = "Calculate dynamic map illumination based on light conditions?";
displayName = "$STR_ACE_Map_MapIllumination_DisplayName";
description = "$STR_ACE_Map_MapIllumination_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; default = 1; };
class No { name = "No"; value = 0; };
};
defaultValue = 1;
};
class MapShake {
displayName = "Map shake?";
description = "Make map shake when walking?";
displayName = "$STR_ACE_Map_MapShake_DisplayName";
description = "$STR_ACE_Map_MapShake_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; default = 1;};
class No { name = "No"; value = 0; };
};
defaultValue = 1;
};
class MapLimitZoom {
displayName = "Limit map zoom?";
description = "Limit the amount of zoom available for the map?";
displayName = "$STR_ACE_Map_MapLimitZoom_DisplayName";
description = "$STR_ACE_Map_MapLimitZoom_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; };
class No { name = "No"; value = 0; default = 1;};
};
defaultValue = 0;
};
class MapShowCursorCoordinates {
displayName = "Show cursor coordinates?";
description = "Show the grid coordinates on the mouse pointer?";
displayName = "$STR_ACE_Map_MapShowCursorCoordinates_DisplayName";
description = "$STR_ACE_Map_MapShowCursorCoordinates_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; };
class No { name = "No"; value = 0; default = 1;};
};
defaultValue = 0;
};
};
class ModuleDescription {
description = "$STR_ACE_Map_Module_Description";
};
};
class ACE_ModuleBlueForceTracking: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Blue Force Tracking";
displayName = "$STR_ACE_Map_BFT_Module_DisplayName";
function = QFUNC(blueForceTrackingModule);
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_BFTracking_ca.paa);
class Arguments {
class Interval {
displayName = "Interval";
description = "How often the markers should be refreshed (in seconds)";
displayName = "$STR_ACE_Map_BFT_Interval_DisplayName";
description = "$STR_ACE_Map_BFT_Interval_Description";
typeName = "NUMBER";
defaultValue = 1;
};
class HideAiGroups {
displayName = "Hide AI groups?";
description = "Hide markers for 'AI only' groups?";
displayName = "$STR_ACE_Map_BFT_HideAiGroups_DisplayName";
description = "$STR_ACE_Map_BFT_HideAiGroups_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; };
class No { name = "No"; value = 0; default = 1; };
};
defaultValue = 0;
};
};
class ModuleDescription {
description = "$STR_ACE_Map_BFT_Module_Description";
};
};
};
};

View File

@ -1,6 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Map">
</Package>
<Package name="Map">
<Key ID="STR_ACE_Map_Module_DisplayName">
<English>Map</English>
<Polish>Mapa</Polish>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_DisplayName">
<English>Map illumination?</English>
<Polish>Oświetlenie mapy</Polish>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Calculate dynamic map illumination based on light conditions?</English>
<Polish>Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych</Polish>
</Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName">
<English>Map shake?</English>
<Polish>Drżenie mapy</Polish>
</Key>
<Key ID="STR_ACE_Map_MapShake_Description">
<English>Make map shake when walking?</English>
<Polish>Ekran mapy drży podczas ruchu</Polish>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_DisplayName">
<English>Limit map zoom?</English>
<Polish>Ograniczony zoom</Polish>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_Description">
<English>Limit the amount of zoom available for the map?</English>
<Polish>Ogranicza maksymalny stopień przybliżenia mapy</Polish>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_DisplayName">
<English>Show cursor coordinates?</English>
<Polish>Koordynaty pod kursorem</Polish>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_Description">
<English>Show the grid coordinates on the mouse pointer?</English>
<Polish>Pokazuje pod kursorem koordynaty wskazanego kwadratu mapy</Polish>
</Key>
<Key ID="STR_ACE_Map_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje widoku ekranu mapy.</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_DisplayName">
<English>Blue Force Tracking</English>
<Polish>Blue Force Tracking</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
<English>Interval</English>
<Polish>Interwał</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_Description">
<English>How often the markers should be refreshed (in seconds)</English>
<Polish>Jak często markery powinny być odświeżane (w sekundach)</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_DisplayName">
<English>Hide AI groups?</English>
<Polish>Ukryj grupy AI</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_Description">
<English>Hide markers for 'AI only' groups?</English>
<Polish>Ukrywa markery dla grup złożonych tylko z AI</Polish>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_Description">
<English></English>
<Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish>
</Key>
</Package>
</Project>

View File

@ -1,6 +1,6 @@
class CfgFactionClasses {
class NO_CATEGORY;
class ADDON: NO_CATEGORY {
displayName = "ACE Medical";
displayName = "$STR_ACE_Medical_Category_DisplayName";
};
};

View File

@ -9,10 +9,9 @@ class CfgVehicles {
};
};
class ACE_Module;
// TODO localization for all the modules
class ACE_moduleMedicalSettings: ACE_Module {
scope = 2;
displayName = "Medical Settings [ACE]";
displayName = "$STR_ACE_MedicalSettings_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(DFUNC(moduleMedicalSettings));
@ -22,78 +21,78 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class level {
displayName = "Medical Level";
description = "What is the medical simulation level?";
displayName = "$STR_ACE_MedicalSettings_level_DisplayName";
description = "$STR_ACE_MedicalSettings_level_Description";
typeName = "NUMBER";
class values {
class normal {
name = "Basic";
name = "$STR_ACE_MedicalSettings_basic";
value = 1;
default = 1;
};
class full {
name = "Advanced";
name = "$STR_ACE_MedicalSettings_advanced";
value = 2;
};
};
};
class medicSetting {
displayName = "Medics setting";
description = "What is the level of detail prefered for medics?";
displayName = "$STR_ACE_MedicalSettings_medicSetting_DisplayName";
description = "$STR_ACE_MedicalSettings_medicSetting_Description";
typeName = "NUMBER";
class values {
class disable {
name = "Disable medics";
name = "$STR_ACE_MedicalSettings_medicSetting_disable";
value = 0;
};
class normal {
name = "Normal";
name = "$STR_ACE_MedicalSettings_basic";
value = 1;
default = 1;
};
class full {
name = "Advanced";
name = "$STR_ACE_MedicalSettings_advanced";
value = 2;
};
};
};
class allowLitterCreation {
displayName = "Enable Litter";
description = "Enable litter being created upon treatment";
displayName = "$STR_ACE_MedicalSettings_allowLitterCreation_DisplayName";
description = "$STR_ACE_MedicalSettings_allowLitterCreation_Description";
typeName = "BOOL";
defaultValue = 1;
};
class litterCleanUpDelay {
displayName = "Life time of litter objects";
description = "How long should litter objects stay? In seconds. -1 is forever.";
displayName = "$STR_ACE_MedicalSettings_litterCleanUpDelay_DisplayName";
description = "$STR_ACE_MedicalSettings_litterCleanUpDelay_Description";
typeName = "NUMBER";
defaultValue = 1800;
};
class enableScreams {
displayName = "Enable Screams";
description = "Enable screaming by injuried units";
displayName = "$STR_ACE_MedicalSettings_enableScreams_DisplayName";
description = "$STR_ACE_MedicalSettings_enableScreams_Description";
typeName = "BOOL";
defaultValue = 1;
};
class playerDamageThreshold {
displayName = "Player Damage";
description = "What is the damage a player can take before being killed?";
displayName = "$STR_ACE_MedicalSettings_playerDamageThreshold_DisplayName";
description = "$STR_ACE_MedicalSettings_playerDamageThreshold_Description";
typeName = "NUMBER";
defaultValue = 1;
};
class AIDamageThreshold {
displayName = "AI Damage";
description = "What is the damage an AI can take before being killed?";
displayName = "$STR_ACE_MedicalSettings_AIDamageThreshold_DisplayName";
description = "$STR_ACE_MedicalSettings_AIDamageThreshold_Description";
typeName = "NUMBER";
defaultValue = 1;
};
class enableUnconsciousnessAI {
displayName = "AI Unconsciousness";
description = "Allow AI to go unconscious";
displayName = "$STR_ACE_MedicalSettings_enableUnconsciousnessAI_DisplayName";
description = "$STR_ACE_MedicalSettings_enableUnconsciousnessAI_Description";
typeName = "NUMBER";
class values {
class disable {
name = "Disabled";
name = "$STR_ACE_Medical_disabled";
value = 0;
};
class normal {
@ -102,45 +101,45 @@ class CfgVehicles {
default = 1;
};
class full {
name = "Enabled";
name = "$STR_ACE_Medical_enabled";
value = 2;
};
};
};
class preventInstaDeath {
displayName = "Prevent instant death";
description = "Have a unit move to unconscious instead of death";
displayName = "$STR_ACE_MedicalSettings_preventInstaDeath_DisplayName";
description = "$STR_ACE_MedicalSettings_preventInstaDeath_Description";
typeName = "BOOL";
defaultValue = 0;
};
class bleedingCoefficient {
displayName = "Bleeding coefficient";
description = "Coefficient to modify the bleeding speed";
displayName = "$STR_ACE_MedicalSettings_bleedingCoefficient_DisplayName";
description = "$STR_ACE_MedicalSettings_bleedingCoefficient_Description";
typeName = "NUMBER";
defaultValue = 1;
};
class painCoefficient {
displayName = "Pain coefficient";
description = "Coefficient to modify the pain intensity";
displayName = "$STR_ACE_MedicalSettings_painCoefficient_DisplayName";
description = "$STR_ACE_MedicalSettings_painCoefficient_Description";
typeName = "NUMBER";
defaultValue = 1;
};
class keepLocalSettingsSynced {
displayName = "Sync status";
description = "Keep unit status synced. Recommended on.";
displayName = "$STR_ACE_MedicalSettings_keepLocalSettingsSynced_DisplayName";
description = "$STR_ACE_MedicalSettings_keepLocalSettingsSynced_Description";
typeName = "BOOL";
defaultValue = 1;
};
};
class ModuleDescription {
description = "Provides a medical system for both players and AI.";
description = "$STR_ACE_MedicalSettings_Module_Description";
sync[] = {};
};
};
class ACE_moduleAdvancedMedicalSettings: ACE_Module {
scope = 2;
displayName = "Advanced Medical Settings [ACE]";
displayName = "$STR_ACE_AdvancedMedicalSettings_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(FUNC(moduleAdvancedMedicalSettings));
@ -151,80 +150,81 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class enableFor {
displayName = "Enabled for";
description = "Select what units the advanced medical system will be enabled for";
displayName = "$STR_ACE_AdvancedMedicalSettings_enableFor_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_enableFor_Description";
typeName = "NUMBER";
class values {
class playableUnits {
name = "Players only.";
name = "$STR_ACE_Medical_playeronly";
value = 0;
default = 1;
};
class playableUnitsAndAI {
name = "Players and AI";
name = "$STR_ACE_Medical_playersandai";
value = 1;
};
};
};
class enableAdvancedWounds {
displayName = "Enable Advanced wounds";
description = "Allow reopening of bandaged wounds?";
displayName = "$STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_Description";
typeName = "BOOL";
defaultValue = 0;
};
class enableVehicleCrashes {
displayName = "Vehicle Crashes";
description = "Do units take damage from a vehicle crash?";
displayName = "$STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_Description";
typeName = "BOOL";
defaultValue = 1;
};
class medicSetting_PAK {
displayName = "Allow PAK";
description = "Who can use the PAK for full heal?";
displayName = "$STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_Description";
typeName = "NUMBER";
class values {
class anyone { name = "Anyone"; value = 0; };
class Medic { name = "Medics only"; value = 1; default = 1; };
class Special { name = "Doctors only"; value = 2; };
class anyone { name = "$STR_ACE_AdvancedMedicalSettings_anyone"; value = 0; };
class Medic { name = "$STR_ACE_AdvancedMedicalSettings_Medic"; value = 1; default = 1; };
class Special { name = "$STR_ACE_AdvancedMedicalSettings_Special"; value = 2; };
};
};
class consumeItem_PAK {
displayName = "Remove PAK on use";
description = "Should PAK be removed on usage?";
displayName = "$STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_Description";
typeName = "NUMBER";
class values {
class keep { name = "No"; value = 0; };
class remove { name = "Yes"; value = 1; default = 1; };
class keep { name = "$STR_ACE_Medical_No"; value = 0; };
class remove { name = "$STR_ACE_Medical_Yes"; value = 1; default = 1; };
};
};
class useLocation_PAK {
displayName = "Locations PAK";
description = "Where can the personal aid kit be used?";
displayName = "$STR_ACE_AdvancedMedicalSettings_useLocation_PAK_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_useLocation_PAK_Description";
typeName = "NUMBER";
class values {
class anywhere { name = "Anywhere"; value = 0; };
class vehicle { name = "Medical Vehicles"; value = 1; };
class facility { name = "Medical facility"; value = 2; };
class vehicleAndFacility { name = "Vehicles & facility"; value = 3; default = 1; };
class disabled { name = "Disabled"; value = 4;};
class anywhere { name = "$STR_ACE_AdvancedMedicalSettings_anywhere"; value = 0; };
class vehicle { name = "$STR_ACE_AdvancedMedicalSettings_vehicle"; value = 1; };
class facility { name = "$STR_ACE_AdvancedMedicalSettings_facility"; value = 2; };
class vehicleAndFacility { name = "$STR_ACE_AdvancedMedicalSettings_vehicleAndFacility"; value = 3; default = 1; };
class disabled { name = "$STR_ACE_AdvancedMedicalSettings_disabled"; value = 4;};
};
};
class medicSetting_SurgicalKit: medicSetting_PAK {
displayName = "Allow Surgical kit (Adv)";
description = "Who can use the surgical kit?";
displayName = "$STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_Description";
};
class consumeItem_SurgicalKit: consumeItem_PAK {
displayName = "Remove Surgical kit (Adv)";
description = "Should Surgical kit be removed on usage?";
displayName = "$STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_Description";
};
class useLocation_SurgicalKit: useLocation_PAK {
displayName = "Locations Surgical kit (Adv)";
description = "Where can the Surgical kit be used?";
displayName = "$STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName";
description = "$STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_Description";
};
};
class ModuleDescription {
description = "Configure the treatment settings from ACE Medical";
description = "$STR_ACE_AdvancedMedicalSettings_Module_Description";
sync[] = {};
};
};
@ -232,7 +232,7 @@ class CfgVehicles {
class ACE_moduleReviveSettings: ACE_Module {
scope = 2;
displayName = "Revive Settings [ACE]";
displayName = "$STR_ACE_ReviveSettings_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(DFUNC(moduleReviveSettings));
@ -242,37 +242,37 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class enableRevive {
displayName = "Enable Revive";
description = "Enable a basic revive system";
displayName = "$STR_ACE_ReviveSettings_enableRevive_DisplayName";
description = "$STR_ACE_ReviveSettings_enableRevive_Description";
typeName = "NUMBER";
defaultValue = 0;
class values {
class disable { name = "Disabled"; value = 0; default = 1;};
class playerOnly { name = "Player only"; value = 1; };
class playerAndAI { name = "Player & AI"; value = 2; };
class disable { name = "$STR_ACE_Medical_disabled"; value = 0; default = 1;};
class playerOnly { name = "$STR_ACE_Medical_playeronly"; value = 1; };
class playerAndAI { name = "$STR_ACE_Medical_playersandai"; value = 2; };
};
};
class maxReviveTime {
displayName = "Max Revive time";
description = "Max amount of seconds a unit can spend in revive state";
displayName = "$STR_ACE_ReviveSettings_maxReviveTime_DisplayName";
description = "$STR_ACE_ReviveSettings_maxReviveTime_Description";
typeName = "NUMBER";
defaultValue = 120;
};
class amountOfReviveLives {
displayName = "Max Revive lives";
description = "Max amount of lives a unit. 0 or -1 is disabled.";
displayName = "$STR_ACE_ReviveSettings_amountOfReviveLives_DisplayName";
description = "$STR_ACE_ReviveSettings_amountOfReviveLives_Description";
typeName = "NUMBER";
defaultValue = -1;
};
};
class ModuleDescription {
description = "Provides a medical system for both players and AI.";
description = "$STR_ACE_ReviveSettings_Module_Description";
sync[] = {};
};
};
class ACE_moduleAssignMedicRoles: Module_F {
scope = 2;
displayName = "Set Medic Class [ACE]";
displayName = "$STR_ACE_AssignMedicRoles_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(FUNC(moduleAssignMedicRoles));
@ -283,41 +283,41 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class EnableList {
displayName = "List";
description = "List of unit names that will be classified as medic, separated by commas.";
displayName = "$STR_ACE_AssignMedicRoles_EnableList_DisplayName";
description = "$STR_ACE_AssignMedicRoles_EnableList_Description";
defaultValue = "";
typeName = "STRING";
};
class role {
displayName = "Is Medic";
description = "Medics allow for more advanced treatment in case of Advanced Medic roles enabled";
displayName = "$STR_ACE_AssignMedicRoles_role_DisplayName";
description = "$STR_ACE_AssignMedicRoles_role_Description";
typeName = "NUMBER";
class values {
class none {
name = "None";
name = "$STR_ACE_AssignMedicRoles_role_none";
value = 0;
};
class medic {
name = "Regular medic";
name = "$STR_ACE_AssignMedicRoles_role_medic";
value = 1;
default = 1;
};
class doctor {
name = "Doctor (Only Advanced Medics)";
name = "$STR_ACE_AssignMedicRoles_role_doctor";
value = 2;
};
};
};
};
class ModuleDescription {
description = "Assigns the ACE medic class to a unit";
description = "$STR_ACE_AssignMedicRoles_Module_Description";
sync[] = {};
};
};
class ACE_moduleAssignMedicVehicle: Module_F {
scope = 2;
displayName = "Set Medical Vehicle [ACE]";
displayName = "$STR_ACE_AssignMedicVehicle_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(FUNC(moduleAssignMedicalVehicle));
@ -328,22 +328,23 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class EnableList {
displayName = "List";
description = "List of vehicles that will be classified as medical vehicle, separated by commas.";
displayName = "$STR_ACE_AssignMedicVehicle_EnableList_DisplayName";
description = "$STR_ACE_AssignMedicVehicle_EnableList_Description";
defaultValue = "";
typeName = "STRING";
};
class enabled {
displayName = "Is Medical Vehicle";
description = "Whatever or not the objects in the list will be a medical vehicle.";
displayName = "$STR_ACE_AssignMedicVehicle_enabled_DisplayName";
description = "$STR_ACE_AssignMedicVehicle_enabled_Description";
typeName = "NUMBER";
class values {
class none {
name = "No";
name = "$STR_ACE_Medical_No";
value = 0;
};
class medic {
name = "Yes";
name = "$STR_ACE_Medical_Yes";
value = 1;
default = 1;
};
@ -351,13 +352,13 @@ class CfgVehicles {
};
};
class ModuleDescription {
description = "Assigns the ACE medic class to a unit";
description = "$STR_ACE_AssignMedicVehicle_Module_Description";
sync[] = {};
};
};
class ACE_moduleAssignMedicalFacility: Module_F {
scope = 2;
displayName = "Set Medical Facility [ACE]";
displayName = "$STR_ACE_AssignMedicalFacility_Module_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(FUNC(moduleAssignMedicalFacility));
@ -368,13 +369,13 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class enabled {
displayName = "Is Medical Facility";
description = "Registers an object as a medical facility for CMS";
displayName = "$STR_ACE_AssignMedicalFacility_enabled_DisplayName";
description = "$STR_ACE_AssignMedicalFacility_enabled_Description";
typeName = "BOOL";
};
};
class ModuleDescription {
description = "Defines an object as a medical facility for CMS. This allows for more advanced treatments. Can be used on buildings and vehicles. ";
description = "$STR_ACE_AssignMedicalFacility_Module_Description";
sync[] = {};
};
};
@ -897,7 +898,7 @@ class CfgVehicles {
class ACE_medicalSupplyCrate: NATO_Box_Base {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Medical Supply Crate (Basic)";
displayName = "$STR_ACE_medicalSupplyCrate";
model = PATHTOF(data\ace_medcrate.p3d);
author = "$STR_ACE_Common_ACETeam";
class TransportItems {
@ -932,7 +933,7 @@ class CfgVehicles {
};
};
class ACE_medicalSupplyCrate_advanced: ACE_medicalSupplyCrate {
displayName = "[ACE] Medical Supply Crate (Advanced)";
displayName = "$STR_ACE_medicalSupplyCrate_advanced";
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";

View File

@ -6,7 +6,7 @@ class CfgPatches {
weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction","ace_modules", "ace_apl"};
author[] = {"Glowbal", "KoffienFlummi"};
author[] = {"Glowbal", "KoffeinFlummi"};
authorUrl = "";
VERSION_CONFIG;
};

View File

@ -24,7 +24,7 @@ if (!alive _unit) then {
_heartRate = 0;
};
_heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_5";
_logOutPut = "No heart rate";
_logOutPut = localize "STR_ACE_Medical_Check_Pulse_None";
if (_heartRate > 1.0) then {
if ([_caller] call FUNC(isMedic)) then {

View File

@ -38,12 +38,18 @@ _litter = getArray (_config >> "litter");
_createLitter = {
private["_position", "_litterClass", "_direction"];
_position = getPos (_this select 0);
// @TODO: handle carriers over water
// For now, don't spawn litter if we are over water to avoid floating litter
if(surfaceIsWater (getPos (_this select 0))) exitWith { false };
_position = getPosATL (_this select 0);
_position = [_position select 0, _position select 1, 0];
_litterClass = _this select 1;
if (random(1) >= 0.5) then {
_position = [(_position select 0) + random 2, (_position select 1) + random 2, _position select 2];
_position = [(_position select 0) + random 1, (_position select 1) + random 1, _position select 2];
} else {
_position = [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2];
_position = [(_position select 0) - random 1, (_position select 1) - random 1, _position select 2];
};
_direction = (random 360);

View File

@ -14,7 +14,10 @@ if (isNil QGVAR(allCreatedLitter)) then {
_litterObject = _litterClass createVehicleLocal _position;
_litterObject setDir _direction;
_litterObject setPosATL _position;
// Move the litter next frame to get rid of HORRIBLE spacing, fixes #1112
[{ (_this select 0) setPosATL (_this select 1); }, [_litterObject, _position]] call EFUNC(common,execNextFrame);
_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail);
if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then {
// gank the first litter object, and spawn ours.

View File

@ -1144,7 +1144,7 @@
<Key ID="STR_ACE_Medical_Saline_IV">
<English>Saline IV (1000ml)</English>
<Russian>Физраствор для в/в вливания (1000 мл)</Russian>
<Spanish>Solución Salina IV (1000ml)</Spanish>
<Spanish>Salino IV (1000ml)</Spanish>
<French>Solution saline 0.9% IV (1000ml)</French>
<Polish>Sól fizjologiczna IV (1000ml)</Polish>
<German>Kochsalzlösung (1000ml)</German>
@ -2701,5 +2701,369 @@
<Russian>Снятие жгута ...</Russian>
<Italian>Togliendo il laccio emostatico ...</Italian>
</Key>
<Key ID="STR_ACE_Medical_Category_DisplayName">
<English>ACE Medical</English>
<Polish>ACE Opcje medyczne</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_Module_DisplayName">
<English>Medical Settings [ACE]</English>
<Polish>Ustawienia medyczne [ACE]</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_level_DisplayName">
<English>Medical Level</English>
<Polish>Poziom medyczny</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_level_Description">
<English>What is the medical simulation level?</English>
<Polish>Jaki jest poziom symulacji medycznej?</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_basic">
<English>Basic</English>
<Polish>Podstawowy</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_advanced">
<English>Advanced</English>
<Polish>Zaawansowany</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_DisplayName">
<English>Medics setting</English>
<Polish>Poziom medyków</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_Description">
<English>What is the level of detail prefered for medics?</English>
<Polish>Jaki jest poziom detali medycznych wyświetlanych dla medyków?</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_medicSetting_disable">
<English>Disable medics</English>
<Polish>Wyłącz medyków</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_allowLitterCreation_DisplayName">
<English>Enable Litter</English>
<Polish>Aktywuj odpadki</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_allowLitterCreation_Description">
<English>Enable litter being created upon treatment</English>
<Polish>Twórz odpadki medyczne podczas leczenia</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_litterCleanUpDelay_DisplayName">
<English>Life time of litter objects</English>
<Polish>Długość życia odpadków</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_litterCleanUpDelay_Description">
<English>How long should litter objects stay? In seconds. -1 is forever.</English>
<Polish>Ile czasu musi upłynąć, aby odpadki zaczęły znikać? W sekundach. -1 dla nieskończoności.</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableScreams_DisplayName">
<English>Enable Screams</English>
<Polish>Aktywuj wrzaski</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableScreams_Description">
<English>Enable screaming by injuried units</English>
<Polish>Aktywuj wrzeszczenie z bólu przez ranne jednostki</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_playerDamageThreshold_DisplayName">
<English>Player Damage</English>
<Polish>Próg obrażeń graczy</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_playerDamageThreshold_Description">
<English>What is the damage a player can take before being killed?</English>
<Polish>Jaki jest próg obrażeń, jakie gracz może otrzymać zanim zostanie zabity?</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_AIDamageThreshold_DisplayName">
<English>AI Damage</English>
<Polish>Próg obrażeń AI</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_AIDamageThreshold_Description">
<English>What is the damage an AI can take before being killed?</English>
<Polish>Jaki jest próg obrażeń, jakie AI może otrzymać zanim zostanie zabite?</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableUnconsciousnessAI_DisplayName">
<English>AI Unconsciousness</English>
<Polish>Nieprzytomność AI</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_enableUnconsciousnessAI_Description">
<English>Allow AI to go unconscious</English>
<Polish>Czy AI może być nieprzytomne od odniesionych obrażeń?</Polish>
</Key>
<Key ID="STR_ACE_Medical_disabled">
<English>Disabled</English>
<Polish>Wyłączone</Polish>
</Key>
<Key ID="STR_ACE_Medical_enabled">
<English>Enabled</English>
<Polish>Włączone</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_preventInstaDeath_DisplayName">
<English>Prevent instant death</English>
<Polish>Wył. natychmiast. śmierć</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_preventInstaDeath_Description">
<English>Have a unit move to unconscious instead of death</English>
<Polish>Spraw, aby jednostka została przeniesiona do stanu nieprzytomności zamiast ginąć na miejscu od śmiertelnych obrażeń</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_bleedingCoefficient_DisplayName">
<English>Bleeding coefficient</English>
<Polish>Mnożnik krwawienia</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_bleedingCoefficient_Description">
<English>Coefficient to modify the bleeding speed</English>
<Polish>Mnożnik modyfikujący prędkość wykrwawiania się</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_painCoefficient_DisplayName">
<English>Pain coefficient</English>
<Polish>Mnożnik bólu</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_painCoefficient_Description">
<English>Coefficient to modify the pain intensity</English>
<Polish>Mnożnik modyfikujący intensywność bólu</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_keepLocalSettingsSynced_DisplayName">
<English>Sync status</English>
<Polish>Synchronizuj status</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_keepLocalSettingsSynced_Description">
<English>Keep unit status synced. Recommended on.</English>
<Polish>Utrzymuj synchronizację statusu jednostek. Zalecane zostawienie tej opcji włączonej.</Polish>
</Key>
<Key ID="STR_ACE_MedicalSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
<Polish>Moduł ten dostarcza system medyczny dla graczy oraz AI.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Module_DisplayName">
<English>Advanced Medical Settings [ACE]</English>
<Polish>Zaawansowane ustawienia medyczne [ACE]</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableFor_DisplayName">
<English>Enabled for</English>
<Polish>Aktywne dla</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableFor_Description">
<English>Select what units the advanced medical system will be enabled for</English>
<Polish>Wybierz dla kogo zaawansowany system medyczny będzie aktywny</Polish>
</Key>
<Key ID="STR_ACE_Medical_playeronly">
<English>Players only</English>
<Polish>Tylko dla graczy</Polish>
</Key>
<Key ID="STR_ACE_Medical_playersandai">
<English>Players and AI</English>
<Polish>Gracze oraz AI</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_DisplayName">
<English>Enable Advanced wounds</English>
<Polish>Akt. zaawansowane rany</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableAdvancedWounds_Description">
<English>Allow reopening of bandaged wounds?</English>
<Polish>Pozwól na otwieranie się zabandażowanych ran?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_DisplayName">
<English>Vehicle Crashes</English>
<Polish>Obrażenia od kolizji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_enableVehicleCrashes_Description">
<English>Do units take damage from a vehicle crash?</English>
<Polish>Czy jednostki otrzymują obrażenia w wyniku kolizji pojazdów?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_DisplayName">
<English>Allow PAK</English>
<Polish>Ust. apteczek osobistych</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_PAK_Description">
<English>Who can use the PAK for full heal?</English>
<Polish>Kto może skorzystać z apteczki osobistej w celu pełnego uleczenia?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_anyone">
<English>Anyone</English>
<Polish>Wszyscy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Medic">
<English>Medics only</English>
<Polish>Tylko medycy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Special">
<English>Doctors only</English>
<Polish>Tylko doktorzy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_DisplayName">
<English>Remove PAK on use</English>
<Polish>Usuń apteczkę po użyciu</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_PAK_Description">
<English>Should PAK be removed on usage?</English>
<Polish>Czy apteczka osobista powinna zniknąć z ekwipunku po jej użyciu?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_PAK_DisplayName">
<English>Locations PAK</English>
<Polish>Ogr. apteczek osobistych</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_PAK_Description">
<English>Where can the personal aid kit be used?</English>
<Polish>Gdzie można korzystać z apteczek osobistych?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_anywhere">
<English>Anywhere</English>
<Polish>Wszędzie</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicle">
<English>Medical vehicles</English>
<Polish>Pojazdy medyczne</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_facility">
<English>Medical facility</English>
<Polish>Budynki medyczne</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_vehicleAndFacility">
<English>Vehicles &amp; facility</English>
<Polish>Pojazdy i budynki medyczne</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_disabled">
<English>Disabled</English>
<Polish>Wyłączone</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_DisplayName">
<English>Allow Surgical kit (Adv)</English>
<Polish>Ust. zestawu chirurg.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_medicSetting_SurgicalKit_Description">
<English>Who can use the surgical kit?</English>
<Polish>Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_DisplayName">
<English>Remove Surgical kit (Adv)</English>
<Polish>Usuń zest. chir. po użyciu</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_consumeItem_SurgicalKit_Description">
<English>Should Surgical kit be removed on usage?</English>
<Polish>Czy zestaw chirurgiczny powinien zniknąć z ekwipunku po jego użyciu?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName">
<English>Locations Surgical kit (Adv)</English>
<Polish>Ogr. zestawu chirurg.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_useLocation_SurgicalKit_Description">
<English>Where can the Surgical kit be used?</English>
<Polish>Gdzie można korzystać z zestawu chirurgicznego?</Polish>
</Key>
<Key ID="STR_ACE_AdvancedMedicalSettings_Module_Description">
<English>Configure the treatment settings from ACE Medical</English>
<Polish>Skonfiguruj zaawansowane ustawienia leczenia systemu medycznego ACE</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_Module_DisplayName">
<English>Revive Settings [ACE]</English>
<Polish>Ustawienia wskrzeszania [ACE]</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_enableRevive_DisplayName">
<English>Enable Revive</English>
<Polish>Aktywuj wskrzeszanie</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_enableRevive_Description">
<English>Enable a basic revive system</English>
<Polish>Aktywuj podstawowy system wskrzeszania</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_maxReviveTime_DisplayName">
<English>Max Revive time</English>
<Polish>Maks. czas agonii</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_maxReviveTime_Description">
<English>Max amount of seconds a unit can spend in revive state</English>
<Polish>Maksymalna długość agonii w sekundach (czas na wskrzeszenie)</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_amountOfReviveLives_DisplayName">
<English>Max Revive lives</English>
<Polish>Maks. ilość wskrzeszeń</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_amountOfReviveLives_Description">
<English>Max amount of lives a unit. 0 or -1 is disabled.</English>
<Polish>Maksymalna ilość wskrzeszeń. Wpisz 0 lub -1 aby wyłączyć.</Polish>
</Key>
<Key ID="STR_ACE_ReviveSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
<Polish>Moduł ten aktywuje podstawowy system wskrzeszania. Jednostka po otrzymaniu śmiertelnych obrażeń przechodzi do stanu agonii, która trwa określoną długość czasu. W tym czasie aby wskrzesić i jednocześnie odratować jednostkę należy opatrzeć jej rany i wykonać RKO.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_Module_DisplayName">
<English>Set Medic Class [ACE]</English>
<Polish>Ustaw klasę medyka [ACE]</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_EnableList_DisplayName">
<English>List</English>
<Polish>Lista</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_EnableList_Description">
<English>List of unit names that will be classified as medic, separated by commas.</English>
<Polish>Lista nazw jednostek, które są sklasyfikowane jako medycy, oddzielone przecinkami.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_DisplayName">
<English>Is Medic</English>
<Polish>Klasa medyczna</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_Description">
<English></English>
<Polish></Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_none">
<English>None</English>
<Polish>Żadna</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_medic">
<English>Regular medic</English>
<Polish>Zwykły medyk</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_role_doctor">
<English>Doctor (Only Advanced Medics)</English>
<Polish>Doktor (tylko zaawansowani medycy)</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicRoles_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
<Polish>Moduł ten przypisuje klasę medyka ACE do jednostek.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_Module_DisplayName">
<English>Set Medical Vehicle [ACE]</English>
<Polish>Ustaw pojazd medyczny [ACE]</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_EnableList_DisplayName">
<English>List</English>
<Polish>Lista</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_EnableList_Description">
<English>List of vehicles that will be classified as medical vehicle, separated by commas.</English>
<Polish>Lista nazw pojazdów, które są sklasyfikowane jako pojazdy medyczne, oddzielone przecinkami.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_enabled_DisplayName">
<English>Is Medical Vehicle</English>
<Polish>Jest pojazdem med.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_enabled_Description">
<English>Whatever or not the objects in the list will be a medical vehicle.</English>
<Polish>Czy pojazdy z tej listy są pojazdami medycznymi.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicVehicle_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
<Polish>Moduł ten pozwala na przypisanie danym pojazdom statusu pojazdów medycznych. Wewnątrz takiego pojazdu można wykonywać zaawansowane zabiegi medyczne.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_Module_DisplayName">
<English>Set Medical Facility [ACE]</English>
<Polish>Ustaw budynek medyczny [ACE]</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_enabled_DisplayName">
<English>Is Medical Facility</English>
<Polish>Jest budynkiem med.</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_enabled_Description">
<English>Registers an object as a medical facility</English>
<Polish>Przypisuje danemu obiektowi status budynku medycznego</Polish>
</Key>
<Key ID="STR_ACE_AssignMedicalFacility_Module_Description">
<English>Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles.</English>
<Polish>Moduł ten pozwala przypisać status budynku medycznego danemu obiektowi. Budynek taki pozwala na wykonywanie zaawansowanych zabiegów medycznych. Może być użyte na pojazdach i budynkach.</Polish>
</Key>
<Key ID="STR_ACE_medicalSupplyCrate">
<English>[ACE] Medical Supply Crate (Basic)</English>
<Polish>[ACE] Skrzynka z zapasami medycznymi (podstawowa)</Polish>
</Key>
<Key ID="STR_ACE_medicalSupplyCrate_advanced">
<English>[ACE] Medical Supply Crate (Advanced)</English>
<Polish>[ACE] Skrzynka z zapasami medycznymi (zaawansowana)</Polish>
</Key>
</Package>
</Project>

View File

@ -44,7 +44,7 @@ class CfgVehicles {
class GVAR(dagrModule): Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "MicroDAGR Map Fill";
displayName = "$STR_ACE_Dagr_Module_DisplayName";
function = QFUNC(moduleMapFill);
scope = 2;
isGlobal = 1;
@ -52,18 +52,18 @@ class CfgVehicles {
functionPriority = 0;
class Arguments {
class MapDataAvailable {
displayName = "MicroDAGR Map Fill"; // Argument label
description = "How much map data is filled on MicroDAGR's "; // Tooltip description
typeName = "NUMBER"; // Value type, can be "NUMBER", "STRING" or "BOOL"
displayName = "$STR_ACE_Dagr_MapDataAvailable_DisplayName";
description = "$STR_ACE_Dagr_MapDataAvailable_Description";
typeName = "NUMBER";
class values {
class None {name = "Full Satellite + Buildings"; value = MAP_DETAIL_SAT; default = 1;};
class Side {name = "Topographical + Roads"; value = MAP_DETAIL_TOPOROADS;};
class Unique {name = "None (Cannot use map view)"; value = MAP_DETAIL_NONE;};
class None {name = "$STR_ACE_Dagr_None"; value = MAP_DETAIL_SAT; default = 1;};
class Side {name = "$STR_ACE_Dagr_Side"; value = MAP_DETAIL_TOPOROADS;};
class Unique {name = "$STR_ACE_Dagr_Unique"; value = MAP_DETAIL_NONE;};
};
};
};
class ModuleDescription: ModuleDescription {
description = "Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.<br/>Source: microDAGR.pbo";
description = "$STR_ACE_Dagr_Module_Description";
};
};
@ -73,4 +73,4 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_microDAGR,10);
};
};
};
};

View File

@ -220,7 +220,7 @@
<Key ID="STR_ACE_microdagr_waypointsSet">
<English>SetWP</English>
<German>WP setzen</German>
<Spanish>Establecer PR</Spanish>
<Spanish>Fijar PR</Spanish>
<Russian>Установить МТ</Russian>
<Czech>Nastavit WP</Czech>
<Polish>UstawPT</Polish>
@ -301,5 +301,33 @@
<Italian>Chiudi MicroDAGR</Italian>
<Portuguese>Fechar MicroDAGR</Portuguese>
</Key>
<Key ID="STR_ACE_Dagr_Module_DisplayName">
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
</Key>
<Key ID="STR_ACE_Dagr_MapDataAvailable_DisplayName">
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
</Key>
<Key ID="STR_ACE_Dagr_MapDataAvailable_Description">
<English>How much map data is filled on MicroDAGR's</English>
<Polish>Jak duża część informacji mapy jest załadowana do MicroDAGR?</Polish>
</Key>
<Key ID="STR_ACE_Dagr_None">
<English>Full Satellite + Buildings</English>
<Polish>Pełna satelitarna + budynki</Polish>
</Key>
<Key ID="STR_ACE_Dagr_Side">
<English>Topographical + Roads</English>
<Polish>Topograficzna + drogi</Polish>
</Key>
<Key ID="STR_ACE_Dagr_Unique">
<English>None (Cannot use map view)</English>
<Polish>Żadna (wyłącza ekran mapy)</Polish>
</Key>
<Key ID="STR_ACE_Dagr_Module_Description">
<English>Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.&lt;br /&gt;Source: microDAGR.pbo</English>
<Polish>Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie.&lt;br /&gt;Źródło: microDAGR.pbo</Polish>
</Key>
</Package>
</Project>

View File

@ -5,6 +5,6 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_MissileGuidance";
description = "$STR_ACE_MissileGuidance_Desc";
values[] = {"Off", "Player Only", "Player and AI"};
values[] = {"$STR_ACE_MissileGuidance_Off", "$STR_ACE_MissileGuidance_PlayerOnly", "$STR_ACE_MissileGuidance_PlayerAndAi"};
};
};

View File

@ -18,7 +18,7 @@
<Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish>
<Italian>Guida dei missili avanzata, o AMG, offre diversi miglioramenti alla teleguida di missili. E' anche un sistema necessario per i tipi di armi missile.</Italian>
<Russian>Продвинутое наведение ракет, или ПНР, обеспечивает множество усовершествований для наведения и стрельбы ракет. Также, это система, необходимая для всех ракетных типов оружия.</Russian>
<Spanish>Guiado Avanzado de Misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil.</Spanish>
<Spanish>El guiado avanzado de misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil.</Spanish>
<German>Das Erweiterte Raketenlenksystem, auch ERls genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkten Raketen. </German>
<French>Le guidage avancé de missile, ou AMG en anglais, apporte de multiple améliorations au verouillage et au tir de missiles. C'est aussi un framework requis pour tout arme de type missile.</French>
<Hungarian>A fejlett rakétairányító (vagy AMG) többféle módosítást tartalmaz a rakéták célkövetéséhez és tüzeléséhez. Ez egy szükséges keresztrendszer a rakéta-alapú fegyverekhez.</Hungarian>
@ -97,5 +97,17 @@
<Hungarian>Hellfire II AGM-114K lézer-irányított rakéta</Hungarian>
<Russian>Управляемая ракета лазерного наведения Hellfire II AGM-114K</Russian>
</Key>
<Key ID="STR_ACE_MissileGuidance_Off">
<English>Off</English>
<Polish>Wyłącz</Polish>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerOnly">
<English>Player Only</English>
<Polish>Tylko gracz</Polish>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerAndAi">
<English>Player and AI</English>
<Polish>Gracz oraz AI</Polish>
</Key>
</Package>
</Project>

View File

@ -1,6 +1,6 @@
class CfgFactionClasses {
class NO_CATEGORY;
class ACE_missionModules: NO_CATEGORY {
displayName = "ACE Mission Modules";
displayName = "$STR_ACE_MissionModules_Category_DisplayName";
};
};

View File

@ -8,7 +8,7 @@ class CfgVehicles {
// TODO make a curator variant for this
class ACE_moduleAmbianceSound: Module_F {
scope = 2;
displayName = "Ambiance Sounds [ACE]";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Ambient_Sounds_ca.paa));
category = "ACE_missionModules";
function = QUOTE(FUNC(moduleAmbianceSound));
@ -18,51 +18,51 @@ class CfgVehicles {
author = "$STR_ACE_Common_ACETeam";
class Arguments {
class soundFiles {
displayName = "Sounds";
description = "Class names of the ambiance sounds to be played. Seperated by ','";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_soundFiles_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_soundFiles_Description";
typeName = "STRING";
defaultValue = "";
};
class minimalDistance {
displayName = "Minimal Distance";
description = "Used for calculating a random position and sets the minimal distance between the players and the played sound file(s)";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_minimalDistance_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_minimalDistance_Description";
typeName = "NUMBER";
defaultValue = 400;
};
class maximalDistance {
displayName = "Maximum Distance";
description = "Used for calculating a random position and sets the maximum distance between the players and the played sound file(s)";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_maximalDistance_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_maximalDistance_Description";
typeName = "NUMBER";
defaultValue = 900;
};
class minimalDelay {
displayName = "Minimal Delay";
description = "Minimal delay between sounds played";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_minimalDelay_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_minimalDelay_Description";
typeName = "NUMBER";
defaultValue = 10;
};
class maximalDelay {
displayName = "Maximum Delay";
description = "Maximum delay between sounds played";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_maximalDelay_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_maximalDelay_Description";
typeName = "NUMBER";
defaultValue = 170;
};
class followPlayers {
displayName = "Follow Players";
description = "Follow players. If set to false, loop will play sounds only nearby logic position.";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_followPlayers_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_followPlayers_Description";
typeName = "BOOL";
defaultValue = 0;
};
class soundVolume {
displayName = "Volume";
description = "The volume of the sounds played";
displayName = "$STR_ACE_MissionModules_AmbianceSounds_soundVolume_DisplayName";
description = "$STR_ACE_MissionModules_AmbianceSounds_soundVolume_Description";
typeName = "NUMBER";
defaultValue = 1;
};
};
class ModuleDescription {
description = "Ambiance sounds loop (synced across MP)";
description = "$STR_ACE_MissionModules_AmbianceSounds_Description";
sync[] = {};
};
};
};
};

Some files were not shown because too many files have changed in this diff Show More