mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into ace_spectator
Conflicts: addons/explosives/stringtable.xml addons/interact_menu/stringtable.xml addons/interaction/stringtable.xml addons/map/stringtable.xml addons/medical/stringtable.xml addons/sitting/stringtable.xml addons/spectator/stringtable.xml extras/assets/icons/Icons_Modules.psd
This commit is contained in:
parent
e6f016f195
commit
159937dc45
@ -38,7 +38,7 @@ Alganthe <alganthe@live.fr>
|
||||
Anthariel <Contact@storm-simulation.com>
|
||||
Asgar Serran <piechottaf@web.de>
|
||||
Bla1337
|
||||
BlackPixxel
|
||||
BlackPixxel <blackpixxel96@gmail.com>
|
||||
BlackQwar
|
||||
Brakoviejo
|
||||
Brisse <brisse@outlook.com>
|
||||
@ -70,6 +70,7 @@ Hawkins
|
||||
Head
|
||||
jokoho482 <jokoho482@gmail.com>`
|
||||
Jonpas <jonpas33@gmail.com>
|
||||
Karneck <dschultz26@hotmail.com>
|
||||
Kavinsky <nmunozfernandez@gmail.com>
|
||||
Kllrt <kllrtik@gmail.com>
|
||||
legman <juicemelon@msn.com>
|
||||
@ -84,6 +85,7 @@ nikolauska <nikolauska1@gmail.com>
|
||||
nomisum <nomisum@gmail.com>
|
||||
OnkelDisMaster <onkeldismaster@gmail.com>
|
||||
oscarmolinadev
|
||||
PaxJaromeMalues <seemax1991@gmail.com>
|
||||
pokertour
|
||||
Professor <lukas.trneny@wo.cz>
|
||||
rakowozz
|
||||
|
@ -114,7 +114,7 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th
|
||||
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(ACE_time), ACE_time - floor(ACE_time)];
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(common,mapLatitude), EGVAR(weather,currentTemperature), EGVAR(common,mapAltitude), EGVAR(weather,currentHumidity), overcast, floor(ACE_time), ACE_time - floor(ACE_time)];
|
||||
|
||||
[{
|
||||
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
|
@ -106,12 +106,14 @@ class CfgWeapons {
|
||||
|
||||
class M134_minigun: MGunCore {
|
||||
class LowROF: Mode_FullAuto {
|
||||
reloadTime = 0.015; //0.03; same as above @todo
|
||||
dispersion = 0.006; //0.0023;
|
||||
reloadTime = 0.03; //0.03; same as above @todo
|
||||
dispersion = 0.0064; //0.0023;
|
||||
multiplier = 1;
|
||||
};
|
||||
class HighROF: LowROF {
|
||||
reloadTime = 0.015; //0.03;
|
||||
dispersion = 0.006; //0.0023;
|
||||
reloadTime = 0.02; //0.03;
|
||||
dispersion = 0.0064; //0.0023;
|
||||
multiplier = 1;
|
||||
};
|
||||
class close: HighROF {};
|
||||
class short: close {};
|
||||
|
@ -24,10 +24,7 @@ class CfgVehicles {
|
||||
displayName = "ATragMX";
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_ATragMX {
|
||||
name = "ACE_ATragMX";
|
||||
count = 1;
|
||||
};
|
||||
MACRO_ADDITEM(ACE_ATragMX,1);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -3,14 +3,17 @@ class CfgMagazines {
|
||||
class CA_Magazine;
|
||||
class B_IR_Grenade: CA_Magazine {
|
||||
ACE_Attachable = "B_IRStrobe";
|
||||
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
|
||||
};
|
||||
|
||||
class O_IR_Grenade: B_IR_Grenade {
|
||||
ACE_Attachable = "O_IRStrobe";
|
||||
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
|
||||
};
|
||||
|
||||
class I_IR_Grenade: B_IR_Grenade {
|
||||
ACE_Attachable = "I_IRStrobe";
|
||||
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
|
||||
};
|
||||
|
||||
class SmokeShell;
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
class CfgWeapons {
|
||||
class ACE_ItemCore;
|
||||
class InventoryItem_Base_F;
|
||||
@ -9,7 +8,7 @@ class CfgWeapons {
|
||||
scope = 2;
|
||||
displayName = CSTRING(IrStrobe_Name);
|
||||
descriptionShort = CSTRING(IrStrobe_Description);
|
||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||
model = QUOTE(PATHTOF(data\ace_IRStrobe.p3d));
|
||||
picture = PATHTOF(UI\irstrobe_item.paa);
|
||||
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
|
30
addons/attach/GUI_VirtualAmmo.hpp
Normal file
30
addons/attach/GUI_VirtualAmmo.hpp
Normal file
@ -0,0 +1,30 @@
|
||||
class RscTitles {
|
||||
class GVAR(virtualAmmo) {
|
||||
idd = -1;
|
||||
movingEnable = 1;
|
||||
duration = 9999999;
|
||||
fadein = 0;
|
||||
fadeout = 0;
|
||||
onLoad = "uiNamespace setVariable ['ACE_attach_virtualAmmoDisplay', (_this select 0)];";
|
||||
class controls {};
|
||||
class objects {
|
||||
class TheObject {
|
||||
idc = 800851;
|
||||
type = 82;
|
||||
model = "\a3\weapons_f\Ammo\Handgrenade.p3d";
|
||||
scale = 1;
|
||||
direction[] = {0, 0, 1};
|
||||
up[] = {0, 1, 0};
|
||||
x = 0.5;
|
||||
y = 0.5;
|
||||
z = 1;
|
||||
xBack = 0.5;
|
||||
yBack = 0.5;
|
||||
zBack = 0.5;
|
||||
inBack = 0;
|
||||
enableZoom = 0;
|
||||
zoomDuration = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -16,3 +16,4 @@ class CfgPatches {
|
||||
#include "CfgMagazines.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "GUI_VirtualAmmo.hpp"
|
||||
|
BIN
addons/attach/data/ace_IRStrobe.p3d
Normal file
BIN
addons/attach/data/ace_IRStrobe.p3d
Normal file
Binary file not shown.
90
addons/attach/data/ace_IRStrobe.rvmat
Normal file
90
addons/attach/data/ace_IRStrobe.rvmat
Normal file
@ -0,0 +1,90 @@
|
||||
class StageTI
|
||||
{
|
||||
texture = "a3\data_f\default_glass_ti_ca.paa";
|
||||
};
|
||||
ambient[] = {1,1,1,1};
|
||||
diffuse[] = {1,1,1,1};
|
||||
forcedDiffuse[] = {0,0,0,1};
|
||||
emmisive[] = {0,0,0,1};
|
||||
specular[] = {0.99999976,0.99999976,0.99999976,1};
|
||||
specularPower = 128;
|
||||
PixelShaderID = "Super";
|
||||
VertexShaderID = "Super";
|
||||
class Stage1
|
||||
{
|
||||
texture = "z\ace\addons\attach\data\ace_IRStrobe_nohq.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0.1,0.1,0.1,SMDI)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture = "#(ai,32,128,1)fresnel(0.71,0.74)";
|
||||
uvSource = "none";
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture = "a3\data_f\env_land_co.paa";
|
||||
useWorldEnvMap = "true";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
BIN
addons/attach/data/ace_IRStrobe_co.paa
Normal file
BIN
addons/attach/data/ace_IRStrobe_co.paa
Normal file
Binary file not shown.
BIN
addons/attach/data/ace_IRStrobe_nohq.paa
Normal file
BIN
addons/attach/data/ace_IRStrobe_nohq.paa
Normal file
Binary file not shown.
@ -17,7 +17,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_itemClassname", "_itemVehClass", "_onAtachText", "_selfAttachPosition", "_attachedItem", "_tempObject", "_actionID"];
|
||||
private ["_itemClassname", "_itemVehClass", "_onAtachText", "_selfAttachPosition", "_attachedItem", "_tempObject", "_actionID", "_model"];
|
||||
|
||||
PARAMS_3(_attachToVehicle,_unit,_args);
|
||||
_itemClassname = [_args, 0, ""] call CBA_fnc_defaultParam;
|
||||
@ -47,26 +47,43 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
_attachToVehicle setVariable [QGVAR(Objects), [_attachedItem], true];
|
||||
_attachToVehicle setVariable [QGVAR(ItemNames), [_itemClassname], true];
|
||||
} else {
|
||||
GVAR(placeAction) = -1;
|
||||
|
||||
_tempObject = _itemVehClass createVehicleLocal [0,0,-10000];
|
||||
_tempObject enableSimulationGlobal false;
|
||||
GVAR(placeAction) = PLACE_WAITING;
|
||||
|
||||
[_unit, QGVAR(vehAttach), true] call EFUNC(common,setForceWalkStatus);
|
||||
|
||||
//MenuBack isn't working for now (localize "STR_ACE_Attach_CancelAction")
|
||||
[{[localize LSTRING(PlaceAction), ""] call EFUNC(interaction,showMouseHint)}, []] call EFUNC(common,execNextFrame);
|
||||
_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = 1;}] call EFUNC(common,AddActionEventHandler)];
|
||||
// _unit setVariable [QGVAR(cancelActionEH), [_unit, "MenuBack", {true}, {GVAR(placeAction) = 0;}] call EFUNC(common,AddActionEventHandler)];
|
||||
_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = PLACE_APPROVE;}] call EFUNC(common,AddActionEventHandler)];
|
||||
|
||||
_actionID = _unit addAction [format ["<t color='#FF0000'>%1</t>", localize LSTRING(CancelAction)], {GVAR(placeAction) = 0}];
|
||||
_actionID = _unit addAction [format ["<t color='#FF0000'>%1</t>", localize LSTRING(CancelAction)], {GVAR(placeAction) = PLACE_CANCEL}];
|
||||
|
||||
//Display to show virtual object:
|
||||
private [];
|
||||
_model = getText (configFile >> "CfgAmmo" >> _itemVehClass >> "model");
|
||||
if (_model == "") then {
|
||||
_model = getText (configFile >> "CfgVehicles" >> _itemVehClass >> "model");
|
||||
};
|
||||
//"\A3\Weapons_F\empty.p3d" is fine, but ctrlSetModel ""; - will crash game!
|
||||
if (_model == "") exitWith {ERROR("No Model");};
|
||||
(QGVAR(virtualAmmo) call BIS_fnc_rscLayer) cutRsc [QGVAR(virtualAmmo), "PLAIN", 0, false];
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlSetModel _model;
|
||||
|
||||
[{
|
||||
private "_startingPosition";
|
||||
PARAMS_2(_args,_pfID);
|
||||
EXPLODE_7_PVT(_args,_unit,_attachToVehicle,_itemClassname,_itemVehClass,_tempObject,_onAtachText,_actionID);
|
||||
private["_angle", "_dir", "_screenPos", "_realDistance", "_up", "_virtualPos", "_virtualPosASL", "_lineInterection"];
|
||||
|
||||
if ((GVAR(placeAction) != -1) ||
|
||||
PARAMS_2(_args,_pfID);
|
||||
EXPLODE_6_PVT(_args,_unit,_attachToVehicle,_itemClassname,_itemVehClass,_onAtachText,_actionID);
|
||||
|
||||
_virtualPosASL = (eyePos _unit) vectorAdd (positionCameraToWorld [0,0,0.6]) vectorDiff (positionCameraToWorld [0,0,0]);
|
||||
if (cameraView == "EXTERNAL") then {
|
||||
_virtualPosASL = _virtualPosASL vectorAdd ((positionCameraToWorld [0.3,0,0]) vectorDiff (positionCameraToWorld [0,0,0]));
|
||||
};
|
||||
_virtualPos = _virtualPosASL call EFUNC(common,ASLToPosition);
|
||||
_lineInterection = lineIntersects [eyePos ACE_player, _virtualPosASL, ACE_player];
|
||||
|
||||
//Don't allow placing in a bad position:
|
||||
if (_lineInterection && {GVAR(placeAction) == PLACE_APPROVE}) then {GVAR(placeAction) = PLACE_WAITING;};
|
||||
|
||||
if ((GVAR(placeAction) != PLACE_WAITING) ||
|
||||
{_unit != ACE_player} ||
|
||||
{!([_unit, _attachToVehicle, []] call EFUNC(common,canInteractWith))} ||
|
||||
{!([_attachToVehicle, _unit, _itemClassname] call FUNC(canAttach))}) then {
|
||||
@ -75,16 +92,31 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
[_unit, QGVAR(vehAttach), false] call EFUNC(common,setForceWalkStatus);
|
||||
[] call EFUNC(interaction,hideMouseHint);
|
||||
[_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
//[_unit, "MenuBack", (_unit getVariable [QGVAR(cancelActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
_unit removeAction _actionID;
|
||||
|
||||
if (GVAR(placeAction) == 1) then {
|
||||
_startingPosition = _tempObject modelToWorldVisual [0,0,0];
|
||||
[_unit, _attachToVehicle, _itemClassname, _itemVehClass, _onAtachText, _startingPosition] call FUNC(placeApprove);
|
||||
(QGVAR(virtualAmmo) call BIS_fnc_rscLayer) cutText ["", "PLAIN"];
|
||||
|
||||
if (GVAR(placeAction) == PLACE_APPROVE) then {
|
||||
[_unit, _attachToVehicle, _itemClassname, _itemVehClass, _onAtachText, _virtualPos] call FUNC(placeApprove);
|
||||
};
|
||||
deleteVehicle _tempObject;
|
||||
} else {
|
||||
_tempObject setPosATL ((ASLtoATL eyePos _unit) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]));;
|
||||
//Show the virtual object:
|
||||
if (_lineInterection) then {
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlShow false;
|
||||
} else {
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlShow true;
|
||||
_screenPos = worldToScreen _virtualPos;
|
||||
if (_screenPos isEqualTo []) exitWith {
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlShow false;
|
||||
};
|
||||
}, 0, [_unit, _attachToVehicle, _itemClassname, _itemVehClass, _tempObject, _onAtachText, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
_realDistance = (_virtualPos distance (positionCameraToWorld [0,0,0])) / ((call CBA_fnc_getFov) select 1);
|
||||
_screenPos = [(_screenPos select 0), _realDistance, (_screenPos select 1)];
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlSetPosition _screenPos;
|
||||
_dir = (positionCameraToWorld [0,0,1]) vectorFromTo (positionCameraToWorld [0,0,0]);
|
||||
_angle = asin (_dir select 2);
|
||||
_up = [0, cos _angle, sin _angle];
|
||||
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlSetModelDirAndUp [[1,0,0], _up];
|
||||
};
|
||||
};
|
||||
}, 0, [_unit, _attachToVehicle, _itemClassname, _itemVehClass, _onAtachText, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_startingOffset", "_startDistanceFromCenter", "_closeInUnitVector", "_closeInMax", "_closeInMin", "_setupObject", "_closeInDistance", "_endPosTestOffset", "_endPosTest", "_doesIntersect", "_startingPosShifted", "_startASL", "_endPosShifted", "_endASL", "_attachedObject", "_currentObjects", "_currentItemNames"];
|
||||
private ["_startingOffset", "_startDistanceFromCenter", "_closeInUnitVector", "_closeInMax", "_closeInMin", "_closeInDistance", "_endPosTestOffset", "_endPosTest", "_doesIntersect", "_startingPosShifted", "_startASL", "_endPosShifted", "_endASL", "_attachedObject", "_currentObjects", "_currentItemNames"];
|
||||
|
||||
PARAMS_6(_unit,_attachToVehicle,_itemClassname,_itemVehClass,_onAtachText,_startingPosition);
|
||||
|
||||
@ -37,9 +37,6 @@ _closeInUnitVector = vectorNormalized (_startingOffset vectorFromTo [0,0,0]);
|
||||
_closeInMax = _startDistanceFromCenter;
|
||||
_closeInMin = 0;
|
||||
|
||||
//Delete Local Placement Object
|
||||
deleteVehicle _setupObject;
|
||||
|
||||
while {(_closeInMax - _closeInMin) > 0.01} do {
|
||||
_closeInDistance = (_closeInMax + _closeInMin) / 2;
|
||||
// systemChat format ["Trying %1 from %2 start %3", _closeInDistance, [_closeInMax, _closeInMin], _startDistanceFromCenter];
|
||||
|
@ -10,3 +10,7 @@
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define PLACE_WAITING -1
|
||||
#define PLACE_CANCEL 0
|
||||
#define PLACE_APPROVE 1
|
||||
|
@ -1,8 +1,7 @@
|
||||
ace_lockbackpacks
|
||||
ace_backpacks
|
||||
=================
|
||||
|
||||
Introduces the ability to lock one's backpack.
|
||||
|
||||
Adds indication when someone else opens your backpack (soundeffect / camShake).
|
||||
|
||||
## Maintainers
|
||||
|
||||
|
@ -178,6 +178,7 @@
|
||||
<Polish>Ustawienia więźniów</Polish>
|
||||
<Spanish>Ajustes de prisioneros</Spanish>
|
||||
<Czech>Nastavení zajatce</Czech>
|
||||
<German>Gefangenen-Einstellungen</German>
|
||||
<Portuguese>Ajustes de prisioneiros</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_Description">
|
||||
@ -185,6 +186,7 @@
|
||||
<Polish>Moduł ten kontroluje ustawienia kapitulacji oraz opasek zaciskowych</Polish>
|
||||
<Spanish>Ajustes de control para rendición y precintos</Spanish>
|
||||
<Czech>Toto kontroluje nastavení kapitulace a pout</Czech>
|
||||
<German>Einstellungen zur Kapitulation und Kabelbindern</German>
|
||||
<Portuguese>Controla as configurações de rendição e abraçadeiras</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
|
||||
@ -192,6 +194,7 @@
|
||||
<Polish>Skuwanie sojuszników</Polish>
|
||||
<Spanish>Se puede esposar el bando propio</Spanish>
|
||||
<Czech>Může spoutat spolubojovníky</Czech>
|
||||
<German>Kann Teamkollegen fesseln</German>
|
||||
<Portuguese>Pode algemar o próprio lado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
|
||||
@ -199,6 +202,7 @@
|
||||
<Polish>Czy gracze mogą skuwać sojuszników?</Polish>
|
||||
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
|
||||
<Czech>Mohou hráči spoutat jednotky na své straně</Czech>
|
||||
<German>Können Spieler eigene Einheiten fesseln</German>
|
||||
<Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
|
||||
@ -206,6 +210,7 @@
|
||||
<Polish>Pozwól kapitulować</Polish>
|
||||
<Spanish>Permitir rendición</Spanish>
|
||||
<Czech>Povolit vzdávání</Czech>
|
||||
<German>Kapitulation erlauben</German>
|
||||
<Portuguese>Permite rendição</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
|
||||
@ -213,6 +218,7 @@
|
||||
<Polish>Gracze mogą skapitulować po schowaniu swojej broni do kabury</Polish>
|
||||
<Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish>
|
||||
<Czech>Hráč se může vzdát poté, co si skryje zbraň</Czech>
|
||||
<German>Spieler können kapitulieren, nachdem sie ihre Waffe geholstert haben</German>
|
||||
<Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
|
@ -113,10 +113,7 @@ class CfgVehicles {
|
||||
author = CSTRING(ACETeam);
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_banana {
|
||||
name = "ACE_banana";
|
||||
count = 1;
|
||||
};
|
||||
MACRO_ADDITEM(ACE_banana,1);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -37,6 +37,14 @@
|
||||
};
|
||||
}] call FUNC(addEventhandler);
|
||||
|
||||
//~~~~~Get Map Data~~~~~
|
||||
//Find MGRS zone and 100km grid for current map
|
||||
[] call FUNC(getMGRSdata);
|
||||
//Prepare variables for FUNC(getMapGridFromPos)/FUNC(getMapPosFromGrid)
|
||||
[] call FUNC(getMapGridData);
|
||||
|
||||
|
||||
|
||||
["fixCollision", DFUNC(fixCollision)] call FUNC(addEventhandler);
|
||||
["fixFloating", DFUNC(fixFloating)] call FUNC(addEventhandler);
|
||||
["fixPosition", DFUNC(fixPosition)] call FUNC(addEventhandler);
|
||||
|
@ -69,7 +69,11 @@ PREP(getFirstTerrainIntersection);
|
||||
PREP(getForceWalkStatus);
|
||||
PREP(getGunner);
|
||||
PREP(getInPosition);
|
||||
PREP(getMapGridData);
|
||||
PREP(getMapGridFromPos);
|
||||
PREP(getMapPosFromGrid);
|
||||
PREP(getMarkerType);
|
||||
PREP(getMGRSdata);
|
||||
PREP(getName);
|
||||
PREP(getNumberFromMissionSQM);
|
||||
PREP(getNumberMagazinesIn);
|
||||
|
165
addons/common/functions/fnc_getMGRSdata.sqf
Normal file
165
addons/common/functions/fnc_getMGRSdata.sqf
Normal file
@ -0,0 +1,165 @@
|
||||
/*
|
||||
* Author: VKing
|
||||
* Gets the current map's MGRS grid zone designator and 100km square.
|
||||
* Also gets longitude, latitude and altitude offset for the map
|
||||
*
|
||||
* Argument:
|
||||
* 0: Optional: Map name, if undefined the current map is used (String)
|
||||
*
|
||||
* Return value:
|
||||
* 0: Grid zone designator (String)
|
||||
* 1: 100km square (String)
|
||||
* 2: GZD + 100km sq. as a single string (String)
|
||||
* Writes return values to GVAR(MGRS_data) if run on the current map
|
||||
*/
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_zone","_band","_GZD","_long","_lat","_UTM","_easting","_northing", "_altitude"];
|
||||
|
||||
DEFAULT_PARAM(0,_map,worldName);
|
||||
|
||||
_long = getNumber (ConfigFile >> "CfgWorlds" >> _map >> "longitude");
|
||||
_lat = getNumber (ConfigFile >> "CfgWorlds" >> _map >> "latitude");
|
||||
_altitude = getNumber (ConfigFile >> "CfgWorlds" >> _map >> "elevationOffset");
|
||||
|
||||
if (_map in ["Chernarus", "Bootcamp_ACR", "Woodland_ACR", "utes"]) then { _lat = 50; _altitude = 0; };
|
||||
if (_map in ["Altis", "Stratis"]) then { _lat = 40; _altitude = 0; };
|
||||
if (_map in ["Takistan", "Zargabad", "Mountains_ACR"]) then { _lat = 35; _altitude = 2000; };
|
||||
if (_map in ["Shapur_BAF", "ProvingGrounds_PMC"]) then { _lat = 35; _altitude = 100; };
|
||||
if (_map in ["fallujah"]) then { _lat = 33; _altitude = 0; };
|
||||
if (_map in ["fata", "Abbottabad"]) then { _lat = 30; _altitude = 1000; };
|
||||
if (_map in ["sfp_wamako"]) then { _lat = 14; _altitude = 0; };
|
||||
if (_map in ["sfp_sturko"]) then { _lat = 56; _altitude = 0; };
|
||||
if (_map in ["Bornholm"]) then { _lat = 55; _altitude = 0; };
|
||||
if (_map in ["Imrali"]) then { _lat = 40; _altitude = 0; };
|
||||
if (_map in ["Caribou"]) then { _lat = 68; _altitude = 0; };
|
||||
if (_map in ["Namalsk"]) then { _lat = 65; _altitude = 0; };
|
||||
if (_map in ["MCN_Aliabad"]) then { _lat = 36; _altitude = 0; };
|
||||
if (_map in ["Clafghan"]) then { _lat = 34; _altitude = 640; };
|
||||
if (_map in ["Sangin", "hellskitchen"]) then { _lat = 32; _altitude = 0; };
|
||||
if (_map in ["Sara"]) then { _lat = 40; _altitude = 0; };
|
||||
if (_map in ["reshmaan"]) then { _lat = 35; _altitude = 2000; };
|
||||
if (_map in ["Thirsk"]) then { _lat = 65; _altitude = 0; };
|
||||
if (_map in ["lingor"]) then { _lat = -4; _altitude = 0; };
|
||||
if (_map in ["Panthera3"]) then { _lat = 46; _altitude = 0; };
|
||||
if (_map in ["Kunduz"]) then { _lat = 37; _altitude = 400; };
|
||||
|
||||
|
||||
_UTM = [_long,_lat] call BIS_fnc_posDegToUTM;
|
||||
_easting = _UTM select 0;
|
||||
_northing = _UTM select 1;
|
||||
// _zone = _UTM select 2;
|
||||
TRACE_4("",_UTM,_easting,_northing,_zone);
|
||||
|
||||
/*
|
||||
_band = switch (true) do {
|
||||
case (_lat<-72): {"C"};
|
||||
case (_lat<-64): {"D"};
|
||||
case (_lat<-56): {"E"};
|
||||
case (_lat<-48): {"F"};
|
||||
case (_lat<-40): {"G"};
|
||||
case (_lat<-32): {"H"};
|
||||
case (_lat<-24): {"J"};
|
||||
case (_lat<-16): {"K"};
|
||||
case (_lat<-8): {"L"};
|
||||
case (_lat<0): {"M"};
|
||||
case (_lat>72): {"X"};
|
||||
case (_lat>64): {"W"};
|
||||
case (_lat>56): {"V"};
|
||||
case (_lat>48): {"U"};
|
||||
case (_lat>40): {"T"};
|
||||
case (_lat>32): {"S"};
|
||||
case (_lat>24): {"R"};
|
||||
case (_lat>16): {"Q"};
|
||||
case (_lat>8): {"P"};
|
||||
case (_lat>=0): {"N"};
|
||||
};
|
||||
*/
|
||||
_zone = 1 + (floor ((_long + 180) / 6));
|
||||
_band = "Z";
|
||||
if (_lat <= -80) then {
|
||||
_band = "A";
|
||||
} else {
|
||||
if (_lat < 84) then {
|
||||
_band = "CDEFGHJKLMNPQRSTUVWXX" select [(floor ((_lat / 8) + 10)), 1];
|
||||
};
|
||||
};
|
||||
if (_map == "VR") then {_zone = 0; _band = "RV";};
|
||||
|
||||
_GZD = format ["%1%2",_zone,_band];
|
||||
TRACE_3("",_zone,_band,_GZD);
|
||||
|
||||
|
||||
private ["_set1","_set2","_set3","_set4","_set5","_set6","_metaE","_metaN","_letterE","_letterN","_grid100km"];
|
||||
|
||||
_set1 = [1,7,13,19,25,31,37,43,49,55];
|
||||
_set2 = [2,8,14,20,26,32,38,44,50,56];
|
||||
_set3 = [3,9,15,21,27,33,39,45,51,57];
|
||||
_set4 = [4,10,16,22,28,34,40,46,52,58];
|
||||
_set5 = [5,11,17,23,29,35,41,47,53,59];
|
||||
_set6 = [6,12,18,24,30,36,42,48,54,60];
|
||||
|
||||
switch (true) do {
|
||||
case (_zone in _set1): {_metaE = 1; _metaN = 1;};
|
||||
case (_zone in _set2): {_metaE = 2; _metaN = 2;};
|
||||
case (_zone in _set3): {_metaE = 3; _metaN = 1;};
|
||||
case (_zone in _set4): {_metaE = 1; _metaN = 2;};
|
||||
case (_zone in _set5): {_metaE = 2; _metaN = 1;};
|
||||
case (_zone in _set6): {_metaE = 3; _metaN = 2;};
|
||||
};
|
||||
TRACE_2("",_metaE,_metaN);
|
||||
|
||||
switch (true) do {
|
||||
case (_zone == 0): {_letterE = "E"};
|
||||
case (_easting > 800000): {LOG("E8"); switch (_metaE) do {case 1: {_letterE="H"}; case 2: {_letterE="R"}; case 3: {_letterE="Z"}; }; };
|
||||
case (_easting > 700000): {LOG("E7"); switch (_metaE) do {case 1: {_letterE="G"}; case 2: {_letterE="Q"}; case 3: {_letterE="Y"}; }; };
|
||||
case (_easting > 600000): {LOG("E6"); switch (_metaE) do {case 1: {_letterE="F"}; case 2: {_letterE="P"}; case 3: {_letterE="X"}; }; };
|
||||
case (_easting > 500000): {LOG("E5"); switch (_metaE) do {case 1: {_letterE="E"}; case 2: {_letterE="N"}; case 3: {_letterE="W"}; }; };
|
||||
case (_easting > 400000): {LOG("E4"); switch (_metaE) do {case 1: {_letterE="D"}; case 2: {_letterE="M"}; case 3: {_letterE="V"}; }; };
|
||||
case (_easting > 300000): {LOG("E3"); switch (_metaE) do {case 1: {_letterE="C"}; case 2: {_letterE="L"}; case 3: {_letterE="U"}; }; };
|
||||
case (_easting > 200000): {LOG("E2"); switch (_metaE) do {case 1: {_letterE="B"}; case 2: {_letterE="K"}; case 3: {_letterE="T"}; }; };
|
||||
case (_easting > 100000): {LOG("E1"); switch (_metaE) do {case 1: {_letterE="A"}; case 2: {_letterE="J"}; case 3: {_letterE="S"}; }; };
|
||||
default {_letterE="@"};
|
||||
};
|
||||
TRACE_1("",_letterE);
|
||||
|
||||
_northing = _northing mod 2000000;
|
||||
TRACE_1("",_northing);
|
||||
|
||||
switch (true) do {
|
||||
case (_zone == 0): {_letterN = "N"};
|
||||
case (_northing > 1900000): {LOG("N19"); switch (_metaN) do {case 1: {_letterN = "V"}; case 2: {_letterN = "E"}; }; };
|
||||
case (_northing > 1800000): {LOG("N18"); switch (_metaN) do {case 1: {_letterN = "U"}; case 2: {_letterN = "D"}; }; };
|
||||
case (_northing > 1700000): {LOG("N17"); switch (_metaN) do {case 1: {_letterN = "T"}; case 2: {_letterN = "C"}; }; };
|
||||
case (_northing > 1600000): {LOG("N16"); switch (_metaN) do {case 1: {_letterN = "S"}; case 2: {_letterN = "B"}; }; };
|
||||
case (_northing > 1500000): {LOG("N15"); switch (_metaN) do {case 1: {_letterN = "R"}; case 2: {_letterN = "A"}; }; };
|
||||
case (_northing > 1400000): {LOG("N14"); switch (_metaN) do {case 1: {_letterN = "Q"}; case 2: {_letterN = "V"}; }; };
|
||||
case (_northing > 1300000): {LOG("N13"); switch (_metaN) do {case 1: {_letterN = "P"}; case 2: {_letterN = "U"}; }; };
|
||||
case (_northing > 1200000): {LOG("N12"); switch (_metaN) do {case 1: {_letterN = "N"}; case 2: {_letterN = "T"}; }; };
|
||||
case (_northing > 1100000): {LOG("N11"); switch (_metaN) do {case 1: {_letterN = "M"}; case 2: {_letterN = "S"}; }; };
|
||||
case (_northing > 1000000): {LOG("N10"); switch (_metaN) do {case 1: {_letterN = "L"}; case 2: {_letterN = "R"}; }; };
|
||||
case (_northing > 900000): {LOG("N09"); switch (_metaN) do {case 1: {_letterN = "K"}; case 2: {_letterN = "Q"}; }; };
|
||||
case (_northing > 800000): {LOG("N08"); switch (_metaN) do {case 1: {_letterN = "J"}; case 2: {_letterN = "P"}; }; };
|
||||
case (_northing > 700000): {LOG("N07"); switch (_metaN) do {case 1: {_letterN = "H"}; case 2: {_letterN = "N"}; }; };
|
||||
case (_northing > 600000): {LOG("N06"); switch (_metaN) do {case 1: {_letterN = "G"}; case 2: {_letterN = "M"}; }; };
|
||||
case (_northing > 500000): {LOG("N05"); switch (_metaN) do {case 1: {_letterN = "F"}; case 2: {_letterN = "L"}; }; };
|
||||
case (_northing > 400000): {LOG("N04"); switch (_metaN) do {case 1: {_letterN = "E"}; case 2: {_letterN = "K"}; }; };
|
||||
case (_northing > 300000): {LOG("N03"); switch (_metaN) do {case 1: {_letterN = "D"}; case 2: {_letterN = "J"}; }; };
|
||||
case (_northing > 200000): {LOG("N02"); switch (_metaN) do {case 1: {_letterN = "C"}; case 2: {_letterN = "H"}; }; };
|
||||
case (_northing > 100000): {LOG("N01"); switch (_metaN) do {case 1: {_letterN = "B"}; case 2: {_letterN = "G"}; }; };
|
||||
case (_northing > 0): {LOG("N00"); switch (_metaN) do {case 1: {_letterN = "A"}; case 2: {_letterN = "F"}; }; };
|
||||
};
|
||||
TRACE_1("",_letterN);
|
||||
|
||||
_grid100km = _letterE+_letterN;
|
||||
TRACE_1("",_grid100km);
|
||||
|
||||
if (_map == worldName) then {
|
||||
GVAR(MGRS_data) = [_GZD,_grid100km,_GZD+_grid100km];
|
||||
GVAR(mapAltitude) = _altitude;
|
||||
GVAR(mapLatitude) = _lat;
|
||||
GVAR(mapLongitude) = _long;
|
||||
};
|
||||
[_GZD,_grid100km,_GZD+_grid100km]
|
76
addons/common/functions/fnc_getMapGridData.sqf
Normal file
76
addons/common/functions/fnc_getMapGridData.sqf
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Author: PabstMirror (ideas from Nou's mapGridToPos and BIS_fnc_gridToPos)
|
||||
* Finds real x/y offset and map step for a 10 digit grid
|
||||
* Save time by preparing data one time at startup
|
||||
*
|
||||
* Argument:
|
||||
* None
|
||||
*
|
||||
* Return values:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_map_fnc_getMapGridData
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_cfgGrid", "_formatX", "_formatY", "_heightOffset", "_offsetX", "_offsetY", "_originGrid", "_realOffsetY", "_startGrid", "_stepX", "_stepY", "_zoom", "_zoomMax", "_letterGrid"];
|
||||
|
||||
GVAR(mapGridData) = [];
|
||||
|
||||
//--- Extract grid values from world config (Borrowed from BIS_fnc_gridToPos)
|
||||
_cfgGrid = configFile >> "CfgWorlds" >> worldName >> "Grid";
|
||||
_offsetX = getNumber (_cfgGrid >> "offsetX");
|
||||
_offsetY = getNumber (_cfgGrid >> "offsetY");
|
||||
_zoomMax = 1e99;
|
||||
_formatX = "";
|
||||
_formatY = "";
|
||||
_stepX = 1e10;
|
||||
_stepY = 1e10;
|
||||
{
|
||||
_zoom = getnumber (_x >> "zoomMax");
|
||||
if (_zoom < _zoomMax) then {
|
||||
_zoomMax = _zoom;
|
||||
_formatX = getText (_x >> "formatX");
|
||||
_formatY = getText (_x >> "formatY");
|
||||
_stepX = getNumber (_x >> "stepX");
|
||||
_stepY = getNumber (_x >> "stepY");
|
||||
};
|
||||
} foreach configProperties [_cfgGrid, "isClass _x", false];
|
||||
|
||||
_letterGrid = false;
|
||||
if (((toLower _formatX) find "a") != -1) then {_letterGrid = true};
|
||||
if (((toLower _formatY) find "a") != -1) then {_letterGrid = true};
|
||||
if (_letterGrid) exitWith {
|
||||
diag_log text format ["[ACE] Map Grid Warning (%1) - Map uses letter grids [%2,%3]", worldName, _formatX, _formatY];
|
||||
};
|
||||
|
||||
//Start at [0, 500] and move north until we get a change in grid
|
||||
_heightOffset = 500;
|
||||
_startGrid = mapGridPosition [0, _heightOffset];
|
||||
_originGrid = _startGrid;
|
||||
while {_startGrid == _originGrid} do {
|
||||
_heightOffset = _heightOffset + 1;
|
||||
_originGrid = mapGridPosition [0, _heightOffset];
|
||||
};
|
||||
|
||||
//Calculate the real y offset
|
||||
_realOffsetY = parseNumber (_originGrid select [(count _formatX), (count _formatY)]) * _stepY + _heightOffset - 1;
|
||||
|
||||
//Calculate MGRS 10digit step - they should both be 1 meter:
|
||||
_stepXat5 = _stepX * 10 ^ ((count _formatX) - 5);
|
||||
_stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5);
|
||||
|
||||
if (_stepYat5 < 0) then {
|
||||
diag_log text format ["[ACE] Map Grid Warning (%1) - Northing is reversed", worldName];
|
||||
};
|
||||
if (_stepXat5 != 1) then {
|
||||
diag_log text format ["[ACE] Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for x", worldName, _stepXat5];
|
||||
};
|
||||
if ((_stepYat5 != 1) && {_stepYat5 != -1}) then {
|
||||
diag_log text format ["[ACE] Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for y", worldName, _stepXat5];
|
||||
};
|
||||
|
||||
GVAR(mapGridData) = [_offsetX, _realOffsetY, _stepXat5, _stepYat5];
|
63
addons/common/functions/fnc_getMapGridFromPos.sqf
Normal file
63
addons/common/functions/fnc_getMapGridFromPos.sqf
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Author: VKing, PabstMirror
|
||||
* Gets a 10-digit map grid for the given world position
|
||||
*
|
||||
* Argument:
|
||||
* 0: Position (2D Position) <ARRAY>
|
||||
* 1: Return type; false for array of easting and northing, true for single string <Bool>
|
||||
*
|
||||
* Return values:
|
||||
* 0: Easting <String>
|
||||
* 1: Northing <String>
|
||||
*
|
||||
* Example:
|
||||
* [(getPos player)] call ace_common_fnc_getMapGridFromPos;
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_pos);
|
||||
DEFAULT_PARAM(1,_returnSingleString,false);
|
||||
|
||||
private["_count", "_easting", "_nativeGrid", "_northing"];
|
||||
|
||||
//Fallback, when map data is weird (letters)
|
||||
if ((count GVAR(mapGridData)) == 0) exitWith {
|
||||
_nativeGrid = mapGridPosition _pos;
|
||||
if (_returnSingleString) then {
|
||||
_nativeGrid
|
||||
} else {
|
||||
_count = floor ((count _nativeGrid) / 2);
|
||||
[(_nativeGrid select [0, _count]), (_nativeGrid select [_count, _count])]
|
||||
};
|
||||
};
|
||||
|
||||
EXPLODE_4_PVT(GVAR(mapGridData),_offsetX,_realOffsetY,_stepXat5,_stepYat5);
|
||||
_easting = floor (((_pos select 0) - _offsetX) / _stepXat5);
|
||||
_northing = floor (((_pos select 1) - _realOffsetY) / _stepYat5);
|
||||
|
||||
//Attempt to handle negative east/north (e.g.: moving west of map bounds)
|
||||
if (_easting > 0) then {
|
||||
_easting = str _easting;
|
||||
while {count _easting < 5} do {_easting = "0" + _easting;};
|
||||
} else {
|
||||
_easting = str abs _easting;
|
||||
while {count _easting < 4} do {_easting = "0" + _easting;};
|
||||
_easting = "-" + _easting;
|
||||
};
|
||||
if (_northing > 0) then {
|
||||
_northing = str _northing;
|
||||
while {count _northing < 5} do {_northing = "0" + _northing;};
|
||||
} else {
|
||||
_northing = str abs _northing;
|
||||
while {count _northing < 4} do {_northing = "0" + _northing;};
|
||||
_northing = "-" + _northing;
|
||||
};
|
||||
|
||||
if (_returnSingleString) then {
|
||||
_easting + _northing
|
||||
} else {
|
||||
[_easting, _northing]
|
||||
};
|
46
addons/common/functions/fnc_getMapPosFromGrid.sqf
Normal file
46
addons/common/functions/fnc_getMapPosFromGrid.sqf
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Gets position from grid cords
|
||||
*
|
||||
* Argument:
|
||||
* 0: Grid Cords <STRING>
|
||||
* 1: Get Center or bottom right <BOOL><OPTIONAL>
|
||||
*
|
||||
* Return values:
|
||||
* Position <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* ["6900080085"] call ace_common_fnc_getMapPosFromGrid
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_1(_inputString);
|
||||
DEFAULT_PARAM(1,_getCenterOfGrid,true);
|
||||
|
||||
private["_countInput", "_countInputHalf", "_xPart", "_xPos", "_yPart", "_yPos"];
|
||||
|
||||
if ((count GVAR(mapGridData)) == 0) exitWith {
|
||||
ERROR("Map has bad data, falling back to BIS_fnc_gridToPos");
|
||||
(_this call BIS_fnc_gridToPos) select 0
|
||||
};
|
||||
|
||||
EXPLODE_4_PVT(GVAR(mapGridData),_offsetX,_realOffsetY,_stepXat5,_stepYat5);
|
||||
|
||||
_countInput = count _inputString;
|
||||
_countInputHalf = floor (_countInput / 2);
|
||||
|
||||
//Split string, ignoring middle
|
||||
_xPart = _inputString select [0, _countInputHalf];
|
||||
_yPart = _inputString select [(ceil (_countInput / 2)), _countInputHalf];
|
||||
|
||||
_xPos = ((parseNumber _xPart) * _stepXat5 * 10 ^ (5 - _countInputHalf)) + _offsetX;
|
||||
_yPos = ((parseNumber _yPart) * _stepYat5 * 10 ^ (5 - _countInputHalf)) + _realOffsetY;
|
||||
|
||||
if (_getCenterOfGrid) then {
|
||||
_xPos = _xPos + 0.5 * _stepXat5 * 10 ^ (5 - _countInputHalf);
|
||||
_yPos = _yPos + 0.5 * _stepYat5 * 10 ^ (5 - _countInputHalf);
|
||||
};
|
||||
|
||||
[_xPos, _yPos, 0];
|
@ -41,11 +41,11 @@ if ((typeName _value) != (_settingData select 1)) then {
|
||||
_failed = true;
|
||||
if ((_settingData select 1) == "BOOL" and (typeName _value) == "SCALAR") then {
|
||||
// If value is not 0 or 1 consider it invalid and don't set anything
|
||||
if (_value == 0) then {
|
||||
if (_value isEqualTo 0) then {
|
||||
_value = false;
|
||||
_failed = false;
|
||||
};
|
||||
if (_value == 1) then {
|
||||
if (_value isEqualTo 1) then {
|
||||
_value = true;
|
||||
_failed = false;
|
||||
};
|
||||
|
@ -577,6 +577,7 @@
|
||||
<Key ID="STR_ACE_Common_toggleHandheldDevice">
|
||||
<English>Toggle Handheld Device</English>
|
||||
<Spanish>Seleccionar dispositivo de mano</Spanish>
|
||||
<German>Handheld aufrufen</German>
|
||||
<Portuguese>Ativa dispositivo de mão</Portuguese>
|
||||
<Polish>Przełącz urządzenie podręczne</Polish>
|
||||
<Czech>Přepnout ruční zařízení</Czech>
|
||||
@ -584,6 +585,7 @@
|
||||
<Key ID="STR_ACE_Common_closeHandheldDevice">
|
||||
<English>Close Handheld Device</English>
|
||||
<Spanish>Cerrar dispositivo de mano</Spanish>
|
||||
<German>Handheld schließen</German>
|
||||
<Portuguese>Fecha dispositivo de mão</Portuguese>
|
||||
<Polish>Zamknij urządzenie podręczne</Polish>
|
||||
<Czech>Zavřít ruční zařízení</Czech>
|
||||
@ -591,6 +593,7 @@
|
||||
<Key ID="STR_ACE_Common_cycleHandheldDevices">
|
||||
<English>Cycle Handheld Devices</English>
|
||||
<Spanish>Cambiar dispositivos de mano</Spanish>
|
||||
<German>Handheld wechseln</German>
|
||||
<Portuguese>Troca dispositivos de mão</Portuguese>
|
||||
<Polish>Następne urządzenie podręczne</Polish>
|
||||
<Czech>Procházet ruční zařízení</Czech>
|
||||
|
@ -9,3 +9,5 @@ GVAR(deployPFH) = -1;
|
||||
GVAR(placer) setVariable [QGVAR(wireDeployed), true];
|
||||
};
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
[QGVAR(vehicleDamage), {_this call FUNC(vehicleDamage)}] call EFUNC(common,addEventHandler);
|
||||
|
@ -7,5 +7,6 @@ PREP(dismount);
|
||||
PREP(dismountSuccess);
|
||||
PREP(handleDamage);
|
||||
PREP(handleKilled);
|
||||
PREP(vehicleDamage);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
PARAMS_2(_wire,_killer);
|
||||
|
||||
private ["_distance", "_vehicle"];
|
||||
|
||||
if (isNull _killer) then {
|
||||
_killer = _wire getVariable ["ace_concertina_wire_lastDamager", objNull];
|
||||
if (isNull _killer) then {
|
||||
@ -25,111 +27,9 @@ if (isNull _killer) then {
|
||||
};
|
||||
if (isNull _killer || {_killer == _wire} || {_killer == gunner (vehicle _killer)}) exitWith {};
|
||||
|
||||
private ["_type", "_mode", "_distance", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w", "_vehicle"];
|
||||
_type = typeOf _wire;
|
||||
_mode = switch (_type) do {
|
||||
case "ACE_ConcertinaWire": { 0 };
|
||||
case "Land_Razorwire_F": { 1 };
|
||||
default { -1 };
|
||||
};
|
||||
|
||||
if (_mode == -1) exitWith {};
|
||||
|
||||
// _mode = 0 = Single Coil
|
||||
// _mode = 1 = Triple Coil
|
||||
|
||||
// --------------------------------
|
||||
// L M R
|
||||
// 4.54929 (4)
|
||||
// 6.13564 (6)
|
||||
//9.78744 (10)
|
||||
|
||||
_distance = _wire distance _killer;
|
||||
if (_distance > 14 || {_distance < 2}) exitWith {}; // Fix if shooting wire
|
||||
|
||||
_type = typeOf _wire;
|
||||
_anim = _wire animationPhase "wire_2";
|
||||
_pos_w = getPos _wire;
|
||||
_dir_w = getDir _wire;
|
||||
_vehicle = vehicle _killer;
|
||||
|
||||
if (_mode == 0) then {
|
||||
private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"];
|
||||
_x = _pos_w select 0;
|
||||
_y = _pos_w select 1;
|
||||
// Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle)
|
||||
_wireCheckPosAr = [
|
||||
[_x + (sin (_dir_w+90) * 1.5),_y + (cos (_dir_w+90) * 1.5)],
|
||||
[(_x-(sin _dir_w)) + (sin (_dir_w+90) * 1.5),(_y-(cos _dir_w)) + (cos (_dir_w+90) * 1.5)],
|
||||
[_x + (sin (_dir_w-90) * 1.5),_y + (cos (_dir_w-90) * 1.5)],
|
||||
[(_x-(sin _dir_w)) + (sin (_dir_w-90) * 1.5),(_y-(cos _dir_w)) + (cos (_dir_w-90) * 1.5)]
|
||||
];
|
||||
{
|
||||
_found = false;
|
||||
_no = nearestObjects [_x, [typeOf _wire], 3]; //diag_log _no; diag_log ".....";
|
||||
_no = _no - [_wire]; //diag_log _no;
|
||||
if (count _no > 0) exitWith {
|
||||
_found = true; //diag_log "found";
|
||||
};
|
||||
} foreach _wireCheckPosAr;
|
||||
// Double coil found!
|
||||
if (_found) then {
|
||||
_mode = 1;
|
||||
} else {
|
||||
// Randomly make a single coil also catch tanks, if speed is high
|
||||
if (_vehicle isKindOf "Tank" && {20 > random 100} && {speed _vehicle > 30}) then {
|
||||
_mode = 1;
|
||||
} else {
|
||||
if !(_vehicle isKindOf "Tank") then {
|
||||
_mode = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (_mode == 1) then {
|
||||
switch (true) do {
|
||||
case (_vehicle isKindOf "Tank"): {
|
||||
_parts = ["ltrack","rtrack"];
|
||||
};
|
||||
case (_vehicle isKindOf "Wheeled_APC" || {_vehicle isKindOf "Car"}): {
|
||||
_parts = ["lfwheel","lf2wheel","lmwheel","lbwheel","rfwheel","rf2wheel","rmwheel","rbwheel"];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch (true) do {
|
||||
case (_vehicle isKindOf "Wheeled_APC" || {_vehicle isKindOf "Car"}): {
|
||||
_parts = ["lfwheel","lf2wheel","lmwheel","lbwheel","rfwheel","rf2wheel","rmwheel","rbwheel"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (canMove _vehicle) then {
|
||||
{
|
||||
_selectionPart = "hit" + _x;
|
||||
if (isText(configFile >> "CfgVehicles" >> typeOf _vehicle >> "hitpoints" >> _selectionPart >> "name")) then {
|
||||
_selection = getText(configFile >> "CfgVehicles" >> typeOf _vehicle >> "hitpoints" >> _selectionPart >> "name");
|
||||
// TODO: Only the tires that have touched the wire should burst.
|
||||
_vehicle setHit [_selection, 1];
|
||||
};
|
||||
} forEach _parts;
|
||||
};
|
||||
|
||||
if (_mode == 1) then {
|
||||
if (_vehicle isKindOf "StaticWeapon") exitWith {};
|
||||
[{
|
||||
PARAMS_2(_vehicle,_wire);
|
||||
|
||||
_vehicle setVelocity ((velocity _vehicle) vectorMultiply 0.75);
|
||||
|
||||
private ["_vPos", "_vDir"];
|
||||
// Set vehicle back in front of wire, since the wire will make the vehicle jump, and a wire with no geometry lod is undestructible and not recognizeable
|
||||
_vPos = getPosASL _vehicle;
|
||||
_vDir = getDir _vehicle;
|
||||
_vehicle setPosASL (_vPos vectorAdd [-0.35 * sin(_vDir), -0.35 * cos(_vDir), 0]);
|
||||
// TODO: Needs to be placed in safe distance to wire, so we do not constantly re-spawn new wires
|
||||
}, [_vehicle, _wire], 0.1, 0] call EFUNC(common,waitAndExecute);
|
||||
};
|
||||
|
||||
//TODO: Create broken geoless wire (two version)
|
||||
//TODO: Make wire remains stop vehicles
|
||||
[QGVAR(vehicleDamage), [_vehicle], [_wire, _vehicle]] call EFUNC(common,targetEvent);
|
||||
|
123
addons/concertina_wire/functions/fnc_vehicleDamage.sqf
Normal file
123
addons/concertina_wire/functions/fnc_vehicleDamage.sqf
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Author: Rocko
|
||||
* Handles vehicle damage from hitting wire
|
||||
*
|
||||
* Arguments:
|
||||
* 0: wire <OBJECT>
|
||||
* 1: vehicle <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_wire,_vehicle);
|
||||
|
||||
private ["_type", "_mode", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w"];
|
||||
|
||||
_type = typeOf _wire;
|
||||
_mode = switch (_type) do {
|
||||
case "ACE_ConcertinaWire": { 0 };
|
||||
case "Land_Razorwire_F": { 1 };
|
||||
default { -1 };
|
||||
};
|
||||
|
||||
if (_mode == -1) exitWith {};
|
||||
|
||||
// _mode = 0 = Single Coil
|
||||
// _mode = 1 = Triple Coil
|
||||
|
||||
// --------------------------------
|
||||
// L M R
|
||||
// 4.54929 (4)
|
||||
// 6.13564 (6)
|
||||
//9.78744 (10)
|
||||
|
||||
_type = typeOf _wire;
|
||||
_anim = _wire animationPhase "wire_2";
|
||||
_pos_w = getPos _wire;
|
||||
_dir_w = getDir _wire;
|
||||
|
||||
if (_mode == 0) then {
|
||||
private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"];
|
||||
_x = _pos_w select 0;
|
||||
_y = _pos_w select 1;
|
||||
// Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle)
|
||||
_wireCheckPosAr = [
|
||||
[_x + (sin (_dir_w+90) * 1.5),_y + (cos (_dir_w+90) * 1.5)],
|
||||
[(_x-(sin _dir_w)) + (sin (_dir_w+90) * 1.5),(_y-(cos _dir_w)) + (cos (_dir_w+90) * 1.5)],
|
||||
[_x + (sin (_dir_w-90) * 1.5),_y + (cos (_dir_w-90) * 1.5)],
|
||||
[(_x-(sin _dir_w)) + (sin (_dir_w-90) * 1.5),(_y-(cos _dir_w)) + (cos (_dir_w-90) * 1.5)]
|
||||
];
|
||||
{
|
||||
_found = false;
|
||||
_no = nearestObjects [_x, [typeOf _wire], 3]; //diag_log _no; diag_log ".....";
|
||||
_no = _no - [_wire]; //diag_log _no;
|
||||
if (count _no > 0) exitWith {
|
||||
_found = true; //diag_log "found";
|
||||
};
|
||||
} foreach _wireCheckPosAr;
|
||||
// Double coil found!
|
||||
if (_found) then {
|
||||
_mode = 1;
|
||||
} else {
|
||||
// Randomly make a single coil also catch tanks, if speed is high
|
||||
if (_vehicle isKindOf "Tank" && {20 > random 100} && {speed _vehicle > 30}) then {
|
||||
_mode = 1;
|
||||
} else {
|
||||
if !(_vehicle isKindOf "Tank") then {
|
||||
_mode = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (_mode == 1) then {
|
||||
switch (true) do {
|
||||
case (_vehicle isKindOf "Tank"): {
|
||||
_parts = ["ltrack","rtrack"];
|
||||
};
|
||||
case (_vehicle isKindOf "Wheeled_APC" || {_vehicle isKindOf "Car"}): {
|
||||
_parts = ["lfwheel","lf2wheel","lmwheel","lbwheel","rfwheel","rf2wheel","rmwheel","rbwheel"];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch (true) do {
|
||||
case (_vehicle isKindOf "Wheeled_APC" || {_vehicle isKindOf "Car"}): {
|
||||
_parts = ["lfwheel","lf2wheel","lmwheel","lbwheel","rfwheel","rf2wheel","rmwheel","rbwheel"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (canMove _vehicle) then {
|
||||
{
|
||||
_selectionPart = "hit" + _x;
|
||||
if (isText(configFile >> "CfgVehicles" >> typeOf _vehicle >> "hitpoints" >> _selectionPart >> "name")) then {
|
||||
_selection = getText(configFile >> "CfgVehicles" >> typeOf _vehicle >> "hitpoints" >> _selectionPart >> "name");
|
||||
// TODO: Only the tires that have touched the wire should burst.
|
||||
_vehicle setHit [_selection, 1];
|
||||
};
|
||||
} forEach _parts;
|
||||
};
|
||||
|
||||
if (_mode == 1) then {
|
||||
if (_vehicle isKindOf "StaticWeapon") exitWith {};
|
||||
[{
|
||||
PARAMS_2(_vehicle,_wire);
|
||||
|
||||
_vehicle setVelocity ((velocity _vehicle) vectorMultiply 0.75);
|
||||
|
||||
private ["_vPos", "_vDir"];
|
||||
// Set vehicle back in front of wire, since the wire will make the vehicle jump, and a wire with no geometry lod is undestructible and not recognizeable
|
||||
_vPos = getPosASL _vehicle;
|
||||
_vDir = getDir _vehicle;
|
||||
_vehicle setPosASL (_vPos vectorAdd [-0.35 * sin(_vDir), -0.35 * cos(_vDir), 0]);
|
||||
// TODO: Needs to be placed in safe distance to wire, so we do not constantly re-spawn new wires
|
||||
}, [_vehicle, _wire], 0.1] call EFUNC(common,waitAndExecute);
|
||||
};
|
||||
|
||||
//TODO: Create broken geoless wire (two version)
|
||||
//TODO: Make wire remains stop vehicles
|
@ -1,6 +1,8 @@
|
||||
#define COMPONENT concertina_wire
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_CONCERTINA_WIRE
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -6,7 +6,7 @@
|
||||
<German>NATO-Draht</German>
|
||||
<Russian>Проволочная спираль</Russian>
|
||||
<Polish>Drut kolczasty</Polish>
|
||||
<Spanish>Concertina wire</Spanish>
|
||||
<Spanish>Alambre de espino</Spanish>
|
||||
<French>Concertina wire</French>
|
||||
<Czech>Ostnatý drát</Czech>
|
||||
<Italian>Concertina wire</Italian>
|
||||
@ -18,7 +18,7 @@
|
||||
<German>NATO-Draht Rolle</German>
|
||||
<Russian>Проволочная спираль (моток)</Russian>
|
||||
<Polish>Zwój drutu kolczastego</Polish>
|
||||
<Spanish>Concertina wire coil</Spanish>
|
||||
<Spanish>Bobina de alambre de espino</Spanish>
|
||||
<French>Concertina wire coil</French>
|
||||
<Czech>Smyčka ostnatého drátu</Czech>
|
||||
<Italian>Concertina wire coil</Italian>
|
||||
@ -30,7 +30,7 @@
|
||||
<German>NATO-Draht abbauen</German>
|
||||
<Russian>Демонтировать проволочную спираль</Russian>
|
||||
<Polish>Zwiń drut kolczasty</Polish>
|
||||
<Spanish>Dismount Concertina wire</Spanish>
|
||||
<Spanish>Desmontar alambre de espino</Spanish>
|
||||
<French>Dismount Concertina wire</French>
|
||||
<Czech>Svinout ostnatý drát</Czech>
|
||||
<Italian>Dismount Concertina wire</Italian>
|
||||
@ -42,7 +42,7 @@
|
||||
<German>NATO-Draht verlegen</German>
|
||||
<Russian>Монтировать проволочную спираль</Russian>
|
||||
<Polish>Rozwiń drut kolczasty</Polish>
|
||||
<Spanish>Deploy Concertina wire</Spanish>
|
||||
<Spanish>Desplegar alambre de espino</Spanish>
|
||||
<French>Deploy Concertina wire</French>
|
||||
<Czech>Rozvinout ostnatý drát</Czech>
|
||||
<Italian>Deploy Concertina wire</Italian>
|
||||
|
@ -33,10 +33,7 @@ class CfgVehicles {
|
||||
displayName = "DAGR";
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_DAGR {
|
||||
name = "ACE_DAGR";
|
||||
count = 1;
|
||||
};
|
||||
MACRO_ADDITEM(ACE_DAGR,1);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -7,11 +7,11 @@ class CfgWeapons {
|
||||
author[] = {$STR_ACE_Common_ACETeam, "Ruthberg"};
|
||||
scope = 2;
|
||||
displayName = "DAGR";
|
||||
model = QUOTE(PATHTOF(data\DAGR.p3d));
|
||||
descriptionShort = "";
|
||||
picture = PATHTOF(UI\DAGR_Icon.paa);
|
||||
icon = "iconObject_circle";
|
||||
mapSize = 0.034;
|
||||
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
mass = 10;
|
||||
};
|
||||
|
BIN
addons/dagr/data/DAGR.p3d
Normal file
BIN
addons/dagr/data/DAGR.p3d
Normal file
Binary file not shown.
82
addons/dagr/data/DAGR.rvmat
Normal file
82
addons/dagr/data/DAGR.rvmat
Normal file
@ -0,0 +1,82 @@
|
||||
class StageTI
|
||||
{
|
||||
texture="a3\data_f\default_ti_ca.paa";
|
||||
};
|
||||
ambient[]={1,1,1,1};
|
||||
diffuse[]={1,1,1,1};
|
||||
forcedDiffuse[]={0,0,0,0};
|
||||
emmisive[]={0,0,0,1};
|
||||
specular[]={0.050000008,0.050000008,0.050000008,1};
|
||||
specularPower=40;
|
||||
PixelShaderID="Super";
|
||||
VertexShaderID="Super";
|
||||
class Stage1
|
||||
{
|
||||
texture="z\ace\addons\dagr\data\DAGR_nohq.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,0};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={0,9,0};
|
||||
up[]={4.5,0,0};
|
||||
dir[]={0,0,0};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture="#(argb,8,8,3)color(0,0,0,0)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,0};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture="#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,0};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture="#(argb,8,8,3)color(1,1,1,1,SMDI)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,0};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture="#(ai,64,128,1)fresnel(0.4,0.2)";
|
||||
uvSource="none";
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture="a3\data_f\env_land_co.paa";
|
||||
uvSource="none";
|
||||
};
|
BIN
addons/dagr/data/DAGR_CO.paa
Normal file
BIN
addons/dagr/data/DAGR_CO.paa
Normal file
Binary file not shown.
BIN
addons/dagr/data/DAGR_NOHQ.paa
Normal file
BIN
addons/dagr/data/DAGR_NOHQ.paa
Normal file
Binary file not shown.
@ -30,7 +30,7 @@ __background ctrlSetText QUOTE(PATHTOF(UI\dagr_gps.paa));
|
||||
if (GVAR(outputPFH) != -1) exitWith {};
|
||||
|
||||
GVAR(outputPFH) = [{
|
||||
private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xgrid", "_ygrid", "_xcoord", "_ycoord", "_speed", "_dagrHeading", "_dagrGrid", "_dagrElevation", "_dagrSpeed", "_dagrTime", "_elevation"];
|
||||
private["_dagrElevation", "_dagrGrid", "_dagrHeading", "_dagrSpeed", "_dagrTime", "_elevation", "_gridArray", "_speed"];
|
||||
|
||||
// Abort Condition
|
||||
if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {
|
||||
@ -40,54 +40,8 @@ GVAR(outputPFH) = [{
|
||||
};
|
||||
|
||||
// GRID
|
||||
_pos = getPosASL ACE_player;
|
||||
|
||||
_mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize");
|
||||
_gridConfig = (configFile >> "CfgWorlds" >> worldName >> "Grid");
|
||||
_offsetX = getNumber (_gridConfig >> "offsetX");
|
||||
_offsetY = getNumber (_gridConfig >> "offsetY");
|
||||
_stepX = getNumber (_gridConfig >> "Zoom1" >> "stepX");
|
||||
_stepY = getNumber (_gridConfig >> "Zoom1" >> "stepY");
|
||||
|
||||
if (_stepY >= 0) then {
|
||||
_pos set [1, (_mapSize - 100) - (_pos select 1) - _offsetY];
|
||||
};
|
||||
|
||||
// Incase grids go neg due to 99-00 boundry
|
||||
if (_pos select 0 < 0) then {_pos set [0, (_pos select 0) + 99999];};
|
||||
if (_pos select 1 < 0) then {_pos set [1, (_pos select 1) + 99999];};
|
||||
|
||||
_xGrid = toArray Str(round(_pos select 0));
|
||||
while {count _xGrid < 5} do {
|
||||
_xGrid = [48] + _xGrid;
|
||||
};
|
||||
_xGrid resize 4;
|
||||
_xGrid = toString _xGrid;
|
||||
_xGrid = parseNumber _xGrid;
|
||||
|
||||
_yGrid = toArray Str(round(_pos select 1));
|
||||
while {count _yGrid < 5} do {
|
||||
_yGrid = [48] + _yGrid;
|
||||
};
|
||||
_yGrid resize 4;
|
||||
_yGrid = toString _yGrid;
|
||||
_yGrid = parseNumber _yGrid;
|
||||
|
||||
_xCoord = switch true do {
|
||||
case (_xGrid >= 1000): { "" + Str(_xGrid) };
|
||||
case (_xGrid >= 100): { "0" + Str(_xGrid) };
|
||||
case (_xGrid >= 10): { "00" + Str(_xGrid) };
|
||||
default { "000" + Str(_xGrid) };
|
||||
};
|
||||
|
||||
_yCoord = switch true do {
|
||||
case (_yGrid >= 1000): { "" + Str(_yGrid) };
|
||||
case (_yGrid >= 100): { "0" + Str(_yGrid) };
|
||||
case (_yGrid >= 10): { "00" + Str(_yGrid) };
|
||||
default { "000" + Str(_yGrid) };
|
||||
};
|
||||
|
||||
_dagrGrid = _xcoord + " " + _ycoord;
|
||||
_gridArray = [(getPos ACE_player), false] call EFUNC(common,getMapGridFromPos);
|
||||
_dagrGrid = format ["%1 %2", ((_gridArray select 0) select [0,4]), ((_gridArray select 1) select [0,4])];
|
||||
|
||||
// SPEED
|
||||
_speed = speed (vehicle ACE_player);
|
||||
@ -97,7 +51,7 @@ GVAR(outputPFH) = [{
|
||||
|
||||
// Elevation
|
||||
_elevation = getPosASL ACE_player;
|
||||
_elevation = floor ((_elevation select 2) + EGVAR(weather,altitude));
|
||||
_elevation = floor ((_elevation select 2) + EGVAR(common,mapAltitude));
|
||||
_dagrElevation = str _elevation + "m";
|
||||
|
||||
// Heading
|
||||
|
@ -72,7 +72,7 @@ _yCoord = switch true do {
|
||||
_dagrGrid = _xCoord + " " + _yCoord;
|
||||
|
||||
// Find target elevation
|
||||
_elevation = floor ((GVAR(LAZPOS) select 2) + EGVAR(weather,altitude));
|
||||
_elevation = floor ((GVAR(LAZPOS) select 2) + EGVAR(common,mapAltitude));
|
||||
_dagrElevation = str _elevation + "m";
|
||||
|
||||
// Time
|
||||
|
@ -30,7 +30,7 @@ __background ctrlSetText QUOTE(PATHTOF(UI\dagr_wp.paa));
|
||||
if (GVAR(outputPFH) != -1) exitWith {};
|
||||
|
||||
GVAR(outputPFH) = [{
|
||||
private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xGrid", "_yGrid", "_xCoord", "_yCoord", "_dagrHeading", "_dagrGrid", "_bearing", "_MYpos", "_WPpos", "_dagrDistance", "_distance"];
|
||||
private["_MYpos", "_WPpos", "_bearing", "_dagrDistance", "_dagrGrid", "_dagrHeading", "_distance", "_gridArray"];
|
||||
|
||||
// Abort Condition
|
||||
if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {
|
||||
@ -40,54 +40,8 @@ GVAR(outputPFH) = [{
|
||||
};
|
||||
|
||||
// GRID
|
||||
_pos = getPosASL ACE_player;
|
||||
|
||||
_mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize");
|
||||
_gridConfig = (configFile >> "CfgWorlds" >> worldName >> "Grid");
|
||||
_offsetX = getNumber (_gridConfig >> "offsetX");
|
||||
_offsetY = getNumber (_gridConfig >> "offsetY");
|
||||
_stepX = getNumber (_gridConfig >> "Zoom1" >> "stepX");
|
||||
_stepY = getNumber (_gridConfig >> "Zoom1" >> "stepY");
|
||||
|
||||
if (_stepY >= 0) then {
|
||||
_pos set [1, (_mapSize - 100) - (_pos select 1) - _offsetY];
|
||||
};
|
||||
|
||||
// Incase grids go neg due to 99-00 boundry
|
||||
if (_pos select 0 < 0) then {_pos set [0, (_pos select 0) + 99999];};
|
||||
if (_pos select 1 < 0) then {_pos set [1, (_pos select 1) + 99999];};
|
||||
|
||||
_xGrid = toArray Str(round(_pos select 0));
|
||||
while {count _xGrid < 5} do {
|
||||
_xGrid = [48] + _xGrid;
|
||||
};
|
||||
_xGrid resize 4;
|
||||
_xGrid = toString _xGrid;
|
||||
_xGrid = parseNumber _xGrid;
|
||||
|
||||
_yGrid = toArray Str(round(_pos select 1));
|
||||
while {count _yGrid < 5} do {
|
||||
_yGrid = [48] + _yGrid;
|
||||
};
|
||||
_yGrid resize 4;
|
||||
_yGrid = toString _yGrid;
|
||||
_yGrid = parseNumber _yGrid;
|
||||
|
||||
_xCoord = switch true do {
|
||||
case (_xGrid >= 1000): { "" + Str(_xGrid) };
|
||||
case (_xGrid >= 100): { "0" + Str(_xGrid) };
|
||||
case (_xGrid >= 10): { "00" + Str(_xGrid) };
|
||||
default { "000" + Str(_xGrid) };
|
||||
};
|
||||
|
||||
_yCoord = switch true do {
|
||||
case (_yGrid >= 1000): { "" + Str(_yGrid) };
|
||||
case (_yGrid >= 100): { "0" + Str(_yGrid) };
|
||||
case (_yGrid >= 10): { "00" + Str(_yGrid) };
|
||||
default { "000" + Str(_yGrid) };
|
||||
};
|
||||
|
||||
_dagrGrid = _xCoord + " " + _yCoord;
|
||||
_gridArray = [(getPos ACE_player), false] call EFUNC(common,getMapGridFromPos);
|
||||
_dagrGrid = format ["%1 %2", ((_gridArray select 0) select [0,4]), ((_gridArray select 1) select [0,4])];
|
||||
|
||||
// WP Grid
|
||||
_xGrid2 = floor (DAGR_WP_INFO / 10000);
|
||||
@ -110,8 +64,8 @@ GVAR(outputPFH) = [{
|
||||
_dagrGrid2 = _xCoord2 + " " + _yCoord2;
|
||||
|
||||
// Distance
|
||||
_WPpos = [[_xCoord2, _yCoord2], true] call CBA_fnc_mapGridToPos;
|
||||
_MYpos = [[_xCoord, _yCoord], true] call CBA_fnc_mapGridToPos;
|
||||
_WPpos = [_dagrGrid2, true] call EFUNC(common,getMapPosFromGrid);
|
||||
_MYpos = [_dagrGrid, true] call EFUNC(common,getMapPosFromGrid);
|
||||
_distance = _MYpos distance _WPpos;
|
||||
_distance = floor (_distance * 10) / 10;
|
||||
_dagrDistance = str _distance + "m";
|
||||
|
@ -12,7 +12,7 @@ class CfgWeapons {
|
||||
displayName = CSTRING(clacker_displayName);
|
||||
descriptionShort = CSTRING(clacker_description);
|
||||
picture = PATHTOF(Data\UI\Clacker.paa);
|
||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||
model = QUOTE(PATHTOF(data\ace_m57.p3d));
|
||||
ACE_Range = 250;
|
||||
ACE_Detonator = 1;
|
||||
|
||||
|
BIN
addons/explosives/Data/ace_m57.p3d
Normal file
BIN
addons/explosives/Data/ace_m57.p3d
Normal file
Binary file not shown.
82
addons/explosives/Data/ace_m57.rvmat
Normal file
82
addons/explosives/Data/ace_m57.rvmat
Normal file
@ -0,0 +1,82 @@
|
||||
class StageTI {
|
||||
texture = "a3\data_f\default_glass_ti_ca.paa";
|
||||
};
|
||||
ambient[] = {1,1,1,1};
|
||||
diffuse[] = {1,1,1,1};
|
||||
forcedDiffuse[] = {0,0,0,0};
|
||||
emmisive[] = {0,0,0,1};
|
||||
specular[] = {0.3,0.3,0.3,1};
|
||||
specularPower = 3b0;
|
||||
PixelShaderID = "Super";
|
||||
VertexShaderID = "Super";
|
||||
class Stage1 {
|
||||
texture="#(rgb,1,1,1)color(0.5,0.5,1,1)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2 {
|
||||
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3 {
|
||||
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4 {
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5 {
|
||||
texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6 {
|
||||
texture = "#(ai,32,128,1)fresnel(0.85,0.36)";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage7 {
|
||||
useWorldEnvMap = "true";
|
||||
texture = "a3\data_f\env_interier_car_ca.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform {
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,1};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
BIN
addons/explosives/Data/ace_m57_co.paa
Normal file
BIN
addons/explosives/Data/ace_m57_co.paa
Normal file
Binary file not shown.
@ -550,15 +550,16 @@
|
||||
<Portuguese>Explosão no desarmamento?</Portuguese>
|
||||
<Polish>Eksplozja przy rozbrajaniu?</Polish>
|
||||
<Czech>Explodovat při zneškodňování?</Czech>
|
||||
<Spanish>Explotar al desactivar?</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_Description">
|
||||
<English>Enable certain explosives to explode on defusal? Default: Yes</English>
|
||||
<Portuguese>Ativa certos explosivos para detonar no desarmamento? Padrão: Sim</Portuguese>
|
||||
<Polish>Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak</Polish>
|
||||
<Czech>Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano</Czech>
|
||||
<Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Module_Description">
|
||||
<English></English>
|
||||
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
|
||||
<German>Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern.</German>
|
||||
<Czech>Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin.</Czech>
|
||||
|
@ -70,6 +70,7 @@
|
||||
<Spanish>(Solo SP) Seguimiento de depuración de Fragmentación/Astillamiento </Spanish>
|
||||
<Polish>(Tylko SP) Wizualny debug odł./odpr.</Polish>
|
||||
<Czech>(Pouze SP) Debug sledování Frag/Úlomků</Czech>
|
||||
<German>(nur SP) Splitter-/Explosions-Debug-Verfolgung</German>
|
||||
<Portuguese>(Somente SP) Depuração de fragmentação e estilhaços traçantes</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Frag_EnableDebugTrace_Desc">
|
||||
|
@ -165,10 +165,6 @@ class CfgGlasses {
|
||||
ACE_Resistance = 1;
|
||||
};
|
||||
|
||||
class AV_ESS_blk:None{
|
||||
COMBAT_GOGGLES
|
||||
};
|
||||
|
||||
class G_Balaclava_blk;
|
||||
|
||||
class G_Balaclava_combat:G_Balaclava_blk {
|
||||
|
@ -40,7 +40,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
[_unit, false] call EFUNC(common,disableAI);
|
||||
};
|
||||
_unit setSkill (skill _unit * 50);
|
||||
}, [_x], (7 * _strength), 0.1] call EFUNC(common,waitAndExecute); //0.1 precision is fine for AI
|
||||
}, [_x], (7 * _strength)] call EFUNC(common,waitAndExecute);
|
||||
} else {
|
||||
//Do effects for player
|
||||
// is there line of sight to the grenade?
|
||||
@ -62,7 +62,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
|
||||
//Add ace_hearing ear ringing sound effect
|
||||
if ((isClass (configFile >> "CfgPatches" >> "ACE_Hearing")) && {_strength > 0}) then {
|
||||
[_x, 0.5 + (_strength / 2)] call EFUNC(hearing,earRinging);
|
||||
[_x, (20 * _strength)] call EFUNC(hearing,earRinging);
|
||||
};
|
||||
|
||||
// account for people looking away by slightly
|
||||
@ -95,7 +95,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
[{
|
||||
PARAMS_1(_light);
|
||||
deleteVehicle _light;
|
||||
}, [_light], 0.1, 0] call EFUNC(common,waitAndExecute);
|
||||
}, [_light], 0.1] call EFUNC(common,waitAndExecute);
|
||||
|
||||
// blind player
|
||||
if (_strength > 0.1) then {
|
||||
@ -113,7 +113,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
//FULLRECOVERY - end effect
|
||||
[{
|
||||
GVAR(flashbangPPEffectCC) ppEffectEnable false;
|
||||
}, [], (17 * _strength), 0] call EFUNC(common,waitAndExecute);
|
||||
}, [], (17 * _strength)] call EFUNC(common,waitAndExecute);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -5,7 +5,7 @@ class CfgWeapons {
|
||||
class ACE_EarPlugs: ACE_ItemCore {
|
||||
displayName = CSTRING(EarPlugs_Name);
|
||||
descriptionShort = CSTRING(EarPlugs_Description);
|
||||
model = PATHTOF(ACE_earplugs.p3d);
|
||||
model = QUOTE(PATHTOF(data\ace_earplugs.p3d));
|
||||
picture = PATHTOF(UI\ACE_earplugs_x_ca.paa);
|
||||
scope = 2;
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
@ -22,15 +22,15 @@ class CfgWeapons {
|
||||
class H_HelmetCrew_I: H_HelmetCrew_B {};
|
||||
|
||||
class H_CrewHelmetHeli_B: H_HelmetB {
|
||||
GVAR(protection) = 0.75;
|
||||
GVAR(lowerVolume) = 0.70;
|
||||
GVAR(protection) = 0.85;
|
||||
GVAR(lowerVolume) = 0.75;
|
||||
};
|
||||
class H_CrewHelmetHeli_O: H_CrewHelmetHeli_B {};
|
||||
class H_CrewHelmetHeli_I: H_CrewHelmetHeli_B {};
|
||||
|
||||
class H_PilotHelmetHeli_B: H_HelmetB {
|
||||
GVAR(protection) = 0.75;
|
||||
GVAR(lowerVolume) = 0.70;
|
||||
GVAR(protection) = 0.85;
|
||||
GVAR(lowerVolume) = 0.75;
|
||||
};
|
||||
class H_PilotHelmetHeli_O: H_PilotHelmetHeli_B {};
|
||||
class H_PilotHelmetHeli_I: H_PilotHelmetHeli_B {};
|
||||
@ -48,3 +48,4 @@ class CfgWeapons {
|
||||
};
|
||||
class H_Cap_marshal: H_Cap_headphones {};
|
||||
};
|
||||
|
||||
|
Binary file not shown.
@ -2,8 +2,9 @@
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(currentDeafness) = 0;
|
||||
GVAR(newStrength) = 0;
|
||||
GVAR(deafnessDV) = 0;
|
||||
GVAR(deafnessPrior) = 0;
|
||||
GVAR(volume) = 1;
|
||||
GVAR(playerVehAttenuation) = 1;
|
||||
|
||||
GVAR(beep) = false;
|
||||
@ -11,10 +12,11 @@ GVAR(beep2) = false;
|
||||
GVAR(time2) = 0;
|
||||
GVAR(time3) = 0;
|
||||
GVAR(time4) = 0;
|
||||
GVAR(earRingingPFH) = -1;
|
||||
|
||||
// Spawn volume updating process
|
||||
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
|
||||
["SettingsInitialized", {
|
||||
// Spawn volume updating process
|
||||
[FUNC(updateVolume), 1, [false] ] call CBA_fnc_addPerFrameHandler;
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
//Update veh attunation when player veh changes
|
||||
["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
|
||||
@ -22,14 +24,13 @@ GVAR(earRingingPFH) = -1;
|
||||
|
||||
//Reset deafness on respawn (or remote control player switch)
|
||||
["playerChanged", {
|
||||
ACE_player setVariable [QGVAR(dv), 0];
|
||||
ACE_player setVariable [QGVAR(prior), 0];
|
||||
GVAR(deafnessDV) = 0;
|
||||
GVAR(deafnessPrior) = 0;
|
||||
ACE_player setvariable [QGVAR(deaf), false];
|
||||
|
||||
GVAR(beep) = false;
|
||||
GVAR(beep2) = false;
|
||||
GVAR(time2) = 0;
|
||||
GVAR(time3) = 0;
|
||||
GVAR(time4) = 0;
|
||||
GVAR(currentDeafness) = 0;
|
||||
GVAR(newStrength) = 0;
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
|
Binary file not shown.
BIN
addons/hearing/data/ace_earplugs.p3d
Normal file
BIN
addons/hearing/data/ace_earplugs.p3d
Normal file
Binary file not shown.
BIN
addons/hearing/data/ace_earplugs_co.paa
Normal file
BIN
addons/hearing/data/ace_earplugs_co.paa
Normal file
Binary file not shown.
@ -16,12 +16,11 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (GVAR(DisableEarRinging)) exitWith {};
|
||||
|
||||
PARAMS_2(_unit,_strength);
|
||||
|
||||
if (isNull _unit) exitWith {};
|
||||
if (_unit != ACE_player) exitWith {};
|
||||
if (_strength < 0.05) exitWith {};
|
||||
if (!isNull curatorCamera) exitWith {};
|
||||
|
||||
if (_unit getVariable ["ACE_hasEarPlugsin", false]) then {
|
||||
_strength = _strength / 4;
|
||||
@ -36,66 +35,4 @@ if(headgear _unit != "") then {
|
||||
};
|
||||
};
|
||||
|
||||
_unit setVariable [QGVAR(dv), (_unit getVariable [QGVAR(dv), 0]) + _strength];
|
||||
|
||||
if (GVAR(earRingingPFH) != -1) exitWith {};
|
||||
|
||||
GVAR(earRingingPFH) = [{
|
||||
EXPLODE_1_PVT(_this select 0,_unit);
|
||||
private ["_prior"];
|
||||
_prior = (_unit getvariable [QGVAR(dv), 0]) min 20;
|
||||
|
||||
if (!alive _unit || _prior <= 0) exitWith {
|
||||
_unit setVariable [QGVAR(dv), 0];
|
||||
_unit setVariable [QGVAR(prior), 0];
|
||||
GVAR(beep) = false;
|
||||
GVAR(beep2) = false;
|
||||
GVAR(time2) = 0;
|
||||
GVAR(time3) = 0;
|
||||
GVAR(time4) = 0;
|
||||
GVAR(earRingingPFH) = -1;
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
if (((_unit getvariable [QGVAR(dv), 0]) - (_unit getvariable [QGVAR(prior), 0])) > 2) then {
|
||||
if (ACE_time > GVAR(time3)) then {
|
||||
GVAR(beep2) = false;
|
||||
};
|
||||
if (!GVAR(beep2)) then {
|
||||
playSound "ACE_Combat_Deafness";
|
||||
GVAR(beep2) = true;
|
||||
GVAR(time3) = ACE_time + 5;
|
||||
};
|
||||
};
|
||||
|
||||
_unit setvariable [QGVAR(prior), _prior];
|
||||
GVAR(volume) = (1 - (_prior / 20)) max 0;
|
||||
|
||||
if (_prior > 19.75) then {
|
||||
_unit setvariable [QGVAR(deaf), true];
|
||||
} else {
|
||||
_unit setvariable [QGVAR(deaf), false];
|
||||
};
|
||||
|
||||
if ((_unit getvariable [QGVAR(deaf), false]) && {ACE_time > GVAR(time4)}) then {
|
||||
playSound "ACE_Combat_Deafness";
|
||||
GVAR(beep2) = true;
|
||||
GVAR(time3) = ACE_time + 10;
|
||||
GVAR(time4) = ACE_time + 30;
|
||||
};
|
||||
|
||||
// Hearing takes longer to return to normal after it hits rock bottom
|
||||
_unit setvariable [QGVAR(dv), _prior - (0.5 * (GVAR(volume) max 0.1))];
|
||||
|
||||
if (_prior > 10) then {
|
||||
//check if the ringing is already being played
|
||||
if (ACE_time > GVAR(time2)) then {
|
||||
GVAR(beep) = false;
|
||||
};
|
||||
if (!GVAR(beep)) then {
|
||||
playSound "ACE_Ring_Backblast";
|
||||
GVAR(time2) = ACE_time + 22;
|
||||
GVAR(beep) = true;
|
||||
};
|
||||
};
|
||||
}, 1, [_unit]] call CBA_fnc_addPerFrameHandler;
|
||||
GVAR(deafnessDV) = GVAR(deafnessDV) + _strength;
|
||||
|
@ -16,6 +16,9 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
//Only run if deafness or ear ringing is enabled:
|
||||
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
|
||||
|
||||
PARAMS_2(_unit,_damage);
|
||||
|
||||
private ["_strength"];
|
||||
|
@ -21,17 +21,18 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation", "_magazine", "_muzzles", "_weaponMagazines", "_muzzleMagazines", "_ammoType", "_initSpeed", "_ammoConfig", "_caliber", "_parentClasses"];
|
||||
//Only run if deafness or ear ringing is enabled:
|
||||
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
|
||||
|
||||
PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo);
|
||||
|
||||
//Only run if combatDeafness enabled:
|
||||
if (!GVAR(enableCombatDeafness)) exitWith {};
|
||||
//Only run if firedNear object is player or player's vehicle:
|
||||
if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {};
|
||||
if (_weapon in ["Throw", "Put"]) exitWith {};
|
||||
if (_distance > 50) exitWith {};
|
||||
|
||||
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation", "_magazine", "_muzzles", "_weaponMagazines", "_muzzleMagazines", "_ammoType", "_initSpeed", "_ammoConfig", "_caliber", "_parentClasses"];
|
||||
|
||||
_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)};
|
||||
|
||||
_distance = 1 max _distance;
|
||||
@ -67,7 +68,7 @@ if (count _weaponMagazines == 0) then {
|
||||
|
||||
_magazine = "";
|
||||
{
|
||||
EXPLODE_2_PVT(_x,_magazineType,_ammoType)
|
||||
EXPLODE_2_PVT(_x,_magazineType,_ammoType);
|
||||
if (_ammoType == _ammo) exitWith {
|
||||
_magazine = _magazineType;
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
* Initializes the Map module.
|
||||
* Initializes the Hearing module.
|
||||
*
|
||||
* Arguments:
|
||||
* Whatever the module provides. (I dunno.)
|
||||
@ -16,4 +16,4 @@ if !(_activated) exitWith {};
|
||||
|
||||
[_logic, QGVAR(enableCombatDeafness), "EnableCombatDeafness"] call EFUNC(common,readSettingFromModule);
|
||||
|
||||
diag_log text "[ACE]: Interaction Module Initialized.";
|
||||
diag_log text "[ACE]: Hearing Module Initialized.";
|
||||
|
@ -24,5 +24,8 @@ _player setVariable ["ACE_hasEarPlugsIn", true, true];
|
||||
|
||||
[localize LSTRING(EarPlugs_Are_On)] call EFUNC(common,displayTextStructured);
|
||||
|
||||
//Force an immediate fast volume update:
|
||||
[[true]] call FUNC(updateVolume);
|
||||
|
||||
/*// No Earplugs in inventory, telling user
|
||||
[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured);*/
|
||||
|
@ -27,3 +27,6 @@ _player addItem "ACE_EarPlugs";
|
||||
_player setVariable ["ACE_hasEarPlugsIn", false, true];
|
||||
|
||||
[localize LSTRING(EarPlugs_Are_Off)] call EFUNC(common,displayTextStructured);
|
||||
|
||||
//Force an immediate fast volume update:
|
||||
[[true]] call FUNC(updateVolume);
|
||||
|
@ -3,7 +3,8 @@
|
||||
* Updates and applys the current deafness. Called every 0.1 sec from a PFEH.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
* 0: Args <ARRAY>
|
||||
* -----0: Just update volume (skip ringing/recovery) <BOOL><OPTIONAL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
@ -15,31 +16,62 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_recoverRate", "_volume"];
|
||||
//Only run if deafness or ear ringing is enabled:
|
||||
if ((!GVAR(enableCombatDeafness)) && GVAR(DisableEarRinging)) exitWith {};
|
||||
|
||||
// Exit if combat deafness is disabled
|
||||
if !(GVAR(enableCombatDeafness)) exitWith {};
|
||||
EXPLODE_1_PVT((_this select 0),_justUpdateVolume);
|
||||
|
||||
// Check if new noises increase deafness
|
||||
GVAR(newStrength) = (((ACE_player getvariable [QGVAR(dv), 0]) min 20) / 20) ^ 2;
|
||||
if (GVAR(newStrength) > GVAR(currentDeafness)) then {
|
||||
GVAR(currentDeafness) = GVAR(newStrength);
|
||||
};
|
||||
private["_volume", "_soundTransitionTime"];
|
||||
|
||||
// Recover rate is slower if deafness is severe
|
||||
_recoverRate = 0.01;
|
||||
if (GVAR(currentDeafness) > 0.7) then {
|
||||
_recoverRate = 0.005;
|
||||
if (GVAR(currentDeafness) > 0.9) then {
|
||||
_recoverRate = 0.002;
|
||||
GVAR(deafnessDV) = (GVAR(deafnessDV) min 20) max 0;
|
||||
GVAR(volume) = (1 - (GVAR(deafnessDV) / 20)) max 0;
|
||||
|
||||
if (!_justUpdateVolume) then {
|
||||
//If we got a big increase in the last second:
|
||||
if ((GVAR(deafnessDV) - GVAR(deafnessPrior)) > 2) then {
|
||||
if (ACE_time > GVAR(time3)) then {
|
||||
GVAR(beep2) = false;
|
||||
};
|
||||
if ((!GVAR(DisableEarRinging)) && {!GVAR(beep2)}) then {
|
||||
playSound "ACE_Combat_Deafness";
|
||||
GVAR(beep2) = true;
|
||||
GVAR(time3) = ACE_time + 5;
|
||||
};
|
||||
};
|
||||
|
||||
GVAR(deafnessPrior) = GVAR(deafnessDV);
|
||||
|
||||
if (GVAR(deafnessDV) > 19.75) then {
|
||||
ACE_player setvariable [QGVAR(deaf), true];
|
||||
if ((!GVAR(DisableEarRinging)) && {ACE_time > GVAR(time4)}) then {
|
||||
playSound "ACE_Combat_Deafness";
|
||||
GVAR(beep2) = true;
|
||||
GVAR(time3) = ACE_time + 10;
|
||||
GVAR(time4) = ACE_time + 30;
|
||||
};
|
||||
} else {
|
||||
ACE_player setvariable [QGVAR(deaf), false];
|
||||
};
|
||||
|
||||
if (GVAR(deafnessDV) > 10) then {
|
||||
//check if the ringing is already being played
|
||||
if (ACE_time > GVAR(time2)) then {
|
||||
GVAR(beep) = false;
|
||||
};
|
||||
if ((!GVAR(DisableEarRinging)) && {!GVAR(beep)}) then {
|
||||
playSound "ACE_Ring_Backblast";
|
||||
GVAR(time2) = ACE_time + 22;
|
||||
GVAR(beep) = true;
|
||||
};
|
||||
};
|
||||
|
||||
// Hearing takes longer to return to normal after it hits rock bottom
|
||||
GVAR(deafnessDV) = (GVAR(deafnessDV) - (0.5 * (GVAR(volume) max 0.1))) max 0;
|
||||
};
|
||||
|
||||
// Deafness recovers with ACE_time
|
||||
GVAR(currentDeafness) = GVAR(currentDeafness) - _recoverRate max 0;
|
||||
if ((missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false]) || {!GVAR(enableCombatDeafness)}) exitWith {};
|
||||
|
||||
// needed until Bohemia fixes playSound to actually use the second argument
|
||||
_volume = (1 - GVAR(currentDeafness) max 0)^2 max 0.04;
|
||||
_volume = GVAR(volume);
|
||||
|
||||
// Earplugs reduce hearing 50%
|
||||
if ([ACE_player] call FUNC(hasEarPlugsIn)) then {
|
||||
@ -60,11 +92,9 @@ if (ACE_player getVariable ["ACE_isUnconscious", false]) then {
|
||||
_volume = _volume min GVAR(UnconsciousnessVolume);
|
||||
};
|
||||
|
||||
if (!(missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false])) then {
|
||||
0.1 fadeSound _volume;
|
||||
0.1 fadeSpeech _volume;
|
||||
ACE_player setVariable ["tf_globalVolume", _volume];
|
||||
if (!isNil "acre_api_fnc_setGlobalVolume") then {[_volume^(0.33)] call acre_api_fnc_setGlobalVolume;};
|
||||
};
|
||||
_soundTransitionTime = if (_justUpdateVolume) then {0.1} else {1};
|
||||
|
||||
//hintSilent format ["GVAR(currentDeafness), _Volume = %1, %2", GVAR(currentDeafness), _volume];
|
||||
_soundTransitionTime fadeSound _volume;
|
||||
_soundTransitionTime fadeSpeech _volume;
|
||||
ACE_player setVariable ["tf_globalVolume", _volume];
|
||||
if (!isNil "acre_api_fnc_setGlobalVolume") then {[_volume^(0.33)] call acre_api_fnc_setGlobalVolume;};
|
||||
|
@ -1,6 +1,8 @@
|
||||
#define COMPONENT hearing
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_HEARING
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -67,10 +67,7 @@ class CfgVehicles {
|
||||
displayName = CSTRING(monitor_displayName);
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_HuntIR_monitor {
|
||||
name = "ACE_HuntIR_monitor";
|
||||
count = 1;
|
||||
};
|
||||
MACRO_ADDITEM(ACE_HuntIR_monitor,1);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -63,6 +63,11 @@ GVAR(no_cams) sort true;
|
||||
GVAR(no_cams) set [_forEachIndex, _x select 1];
|
||||
} forEach GVAR(no_cams);
|
||||
[{
|
||||
//Close monitor if we no longer have the item:
|
||||
if ((!([ACE_player, "ACE_HuntIR_monitor"] call EFUNC(common,hasItem))) && {!isNull (uiNameSpace getVariable ["ace_huntir_monitor", displayNull])}) then {
|
||||
closeDialog 0;
|
||||
};
|
||||
|
||||
GVAR(nearHuntIRs) = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE];
|
||||
{
|
||||
if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then {
|
||||
|
@ -25,6 +25,12 @@ if (_ammo != "F_HuntIR") exitWith {};
|
||||
|
||||
[{
|
||||
PARAMS_1(_projectile);
|
||||
|
||||
//If null (deleted or hit water) exit:
|
||||
if (isNull _projectile) exitWith {};
|
||||
//If it's not spinning (hit ground), bail:
|
||||
if ((vectorMagnitude (velocity _projectile)) < 0.1) exitWith {};
|
||||
|
||||
"ACE_HuntIR_Propell" createVehicle (getPosATL _projectile);
|
||||
[{
|
||||
PARAMS_1(_position);
|
||||
|
@ -38,6 +38,11 @@ createDialog "ace_huntir_cam_dialog_off";
|
||||
GVAR(messageSearching) = toArray "Searching.....";
|
||||
GVAR(messageConnecting) = toArray "Connecting.....";
|
||||
[{
|
||||
//Close monitor if we no longer have item:
|
||||
if ((!([ACE_player, "ACE_HuntIR_monitor"] call EFUNC(common,hasItem))) && {!isNull (uiNameSpace getVariable ["ace_huntir_monitor", displayNull])}) then {
|
||||
closeDialog 0;
|
||||
};
|
||||
|
||||
private ["_elapsedTime", "_nearestHuntIRs"];
|
||||
_elapsedTime = ACE_time - GVAR(startTime);
|
||||
_nearestHuntIRs = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE];
|
||||
|
@ -1,6 +1,8 @@
|
||||
#define COMPONENT huntir
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_HUNTIR
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -4,7 +4,7 @@
|
||||
<Key ID="STR_DN_ACE_HUNTIRBOX">
|
||||
<English>HuntIR Transport Box</English>
|
||||
<German>HuntIR Transportkiste</German>
|
||||
<Spanish>HuntIR Transport Box</Spanish>
|
||||
<Spanish>Caja de transporte de HuntIR</Spanish>
|
||||
<Czech>Trasnportní bedna HuntIR</Czech>
|
||||
<Russian>Ящик с HuntIR</Russian>
|
||||
<Italian>HuntIR Transport Box</Italian>
|
||||
@ -16,7 +16,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_magazine_displayName">
|
||||
<English>HuntIR Round</English>
|
||||
<German>HuntIR Granate</German>
|
||||
<Spanish>HuntIR Round</Spanish>
|
||||
<Spanish>Proyectil HuntIR</Spanish>
|
||||
<Czech>HuntIR Round</Czech>
|
||||
<Russian>HuntIR снаряд</Russian>
|
||||
<Italian>HuntIR Round</Italian>
|
||||
@ -28,7 +28,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_monitor_displayName">
|
||||
<English>HuntIR monitor</English>
|
||||
<German>HuntIR Monitor</German>
|
||||
<Spanish>HuntIR monitor</Spanish>
|
||||
<Spanish>Monitor HuntIR</Spanish>
|
||||
<Czech>HuntIR monitor</Czech>
|
||||
<Russian>HuntIR монитор</Russian>
|
||||
<Italian>HuntIR monitor</Italian>
|
||||
@ -40,7 +40,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_activateMonitor">
|
||||
<English>Activate HuntIR monitor</English>
|
||||
<German>HuntIR Monitor aktivieren</German>
|
||||
<Spanish>Activate HuntIR monitor</Spanish>
|
||||
<Spanish>Activar monitor HuntIR</Spanish>
|
||||
<Czech>Zapnout HuntIR monitor</Czech>
|
||||
<Russian>Включить HuntIR монитор</Russian>
|
||||
<Italian>Activate HuntIR monitor</Italian>
|
||||
@ -52,7 +52,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_CAM">
|
||||
<English>Camera:</English>
|
||||
<German>Kamera:</German>
|
||||
<Spanish>Camera:</Spanish>
|
||||
<Spanish>Camara:</Spanish>
|
||||
<Czech>Kamera:</Czech>
|
||||
<Russian>Камера:</Russian>
|
||||
<Italian>Camera:</Italian>
|
||||
@ -64,7 +64,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_ALT">
|
||||
<English>Altitude:</English>
|
||||
<German>Höhe:</German>
|
||||
<Spanish>Altitude:</Spanish>
|
||||
<Spanish>Altitud:</Spanish>
|
||||
<Czech>Výška:</Czech>
|
||||
<Russian>Высота:</Russian>
|
||||
<Italian>Altitude:</Italian>
|
||||
@ -76,7 +76,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_TIME">
|
||||
<English>Recording Time:</English>
|
||||
<German>Aufnahmezeit:</German>
|
||||
<Spanish>Recording Time:</Spanish>
|
||||
<Spanish>Tiempo de grabación:</Spanish>
|
||||
<Czech>Čas nahrávání:</Czech>
|
||||
<Russian>Время записи:</Russian>
|
||||
<Italian>Recording Time:</Italian>
|
||||
@ -88,7 +88,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_ESC">
|
||||
<English>Press ESC to quit camera</English>
|
||||
<German>Zum Verlassen ESC drücken</German>
|
||||
<Spanish>Press ESC to quit camera</Spanish>
|
||||
<Spanish>Pulsar ESC para salir de la camara</Spanish>
|
||||
<Czech>Stiskni ESC pro opustění kamery</Czech>
|
||||
<Russian>Нажмите ESC чтобы выйти из режима камеры</Russian>
|
||||
<Italian>Press ESC to quit camera</Italian>
|
||||
@ -100,7 +100,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP">
|
||||
<English>Help</English>
|
||||
<German>Hilfe</German>
|
||||
<Spanish>Help</Spanish>
|
||||
<Spanish>Ayuda</Spanish>
|
||||
<Czech>Pomoc</Czech>
|
||||
<Russian>Помощь</Russian>
|
||||
<Italian>Help</Italian>
|
||||
@ -112,7 +112,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_ZOOM">
|
||||
<English>A/D - Cycle zoom</English>
|
||||
<German>A/D - Zoom</German>
|
||||
<Spanish>A/D - Cycle zoom</Spanish>
|
||||
<Spanish>A/D - Cambiar zoom</Spanish>
|
||||
<Czech>A/D - Změna přiblížení</Czech>
|
||||
<Russian>A/D - Приближение</Russian>
|
||||
<Italian>A/D - Cycle zoom</Italian>
|
||||
@ -124,7 +124,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_CAM">
|
||||
<English>W/S - Select camera</English>
|
||||
<German>W/S - Wähle Kamera</German>
|
||||
<Spanish>W/S - Select camera</Spanish>
|
||||
<Spanish>W/S - Seleccionar camara</Spanish>
|
||||
<Czech>W/S - Výběr kamery</Czech>
|
||||
<Russian>W/S - Выбрать камеру</Russian>
|
||||
<Italian>W/S - Select camera</Italian>
|
||||
@ -136,7 +136,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_ROT">
|
||||
<English>Left/Right - Rotate camera</English>
|
||||
<German>Links/Rechts - Rotiere Kamera</German>
|
||||
<Spanish>Left/Right - Rotate camera</Spanish>
|
||||
<Spanish>Left/Right - Rotar camara</Spanish>
|
||||
<Czech>Levá/Pravá - Rotace kamery</Czech>
|
||||
<Russian>Влево/Вправо - Вращать камеру</Russian>
|
||||
<Italian>Left/Right - Rotate camera</Italian>
|
||||
@ -148,7 +148,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_ELV">
|
||||
<English>Up/Down - Elevate/lower camera</English>
|
||||
<German>Hoch/Runter - Neige Kamera</German>
|
||||
<Spanish>Up/Down - Elevate/lower camera</Spanish>
|
||||
<Spanish>Up/Down - Subir/bajar camara</Spanish>
|
||||
<Czech>Nahoru/Dolu - Zvýšít/snížit úhel pohledu kamery</Czech>
|
||||
<Russian>Вверх/Вниз - Поднять/Опустить камеру</Russian>
|
||||
<Italian>Up/Down - Elevate/lower camera</Italian>
|
||||
@ -160,7 +160,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_MOD">
|
||||
<English>N - Cycle IT modes</English>
|
||||
<German>N - Sichtmodi</German>
|
||||
<Spanish>N - Cycle IT modes</Spanish>
|
||||
<Spanish>N - Cambiar modos de IT</Spanish>
|
||||
<Czech>N - Změna režimů kamery</Czech>
|
||||
<Russian>N - Режимы камеры</Russian>
|
||||
<Italian>N - Cycle IT modes</Italian>
|
||||
@ -172,7 +172,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_RES">
|
||||
<English>R - Reset camera</English>
|
||||
<German>R - Reset</German>
|
||||
<Spanish>R - Reset camera</Spanish>
|
||||
<Spanish>R - Reiniciar camara</Spanish>
|
||||
<Czech>R - Reset kamery</Czech>
|
||||
<Russian>R - Сбросить настройки камеры</Russian>
|
||||
<Italian>R - Reset camera</Italian>
|
||||
@ -184,7 +184,7 @@
|
||||
<Key ID="STR_ACE_HUNTIR_HELP_EXIT">
|
||||
<English>Esc - Exit help</English>
|
||||
<German>ESC - Hilfe verlassen</German>
|
||||
<Spanish>Esc - Exit help</Spanish>
|
||||
<Spanish>Esc - Salit de ayuda</Spanish>
|
||||
<Czech>Esc - Ukončit pomoc </Czech>
|
||||
<Russian>Esc - Выйти из помощи</Russian>
|
||||
<Italian>Esc - Exit help</Italian>
|
||||
|
@ -49,7 +49,7 @@ _fnc_renderNearbyActions = {
|
||||
_action = _x;
|
||||
if ([_target, _action] call FUNC(renderBaseMenu)) then {
|
||||
_numInteractions = _numInteractions + 1;
|
||||
GVAR(foundActions) pushBack [_target, _action];
|
||||
GVAR(foundActions) pushBack [_target, _action, GVAR(objectActionList)];
|
||||
};
|
||||
};
|
||||
} forEach GVAR(objectActionList);
|
||||
@ -61,7 +61,7 @@ _fnc_renderNearbyActions = {
|
||||
// Try to render the menu
|
||||
if ([_target, _action] call FUNC(renderBaseMenu)) then {
|
||||
_numInteractions = _numInteractions + 1;
|
||||
GVAR(foundActions) pushBack [_target, _action];
|
||||
GVAR(foundActions) pushBack [_target, _action, GVAR(objectActionList)];
|
||||
};
|
||||
} forEach _classActions;
|
||||
|
||||
@ -78,7 +78,10 @@ _fnc_renderNearbyActions = {
|
||||
|
||||
_fnc_renderLastFrameActions = {
|
||||
{
|
||||
_x call FUNC(renderBaseMenu);
|
||||
EXPLODE_3_PVT(_x,_target,_action,_objectActionList);
|
||||
|
||||
GVAR(objectActionList) = _objectActionList;
|
||||
[_target, _action] call FUNC(renderBaseMenu);
|
||||
} forEach GVAR(foundActions);
|
||||
};
|
||||
|
||||
|
@ -89,6 +89,7 @@
|
||||
<English>Zeus Actions</English>
|
||||
<Polish>Akcje Zeusa</Polish>
|
||||
<Czech>Akce Zeuse</Czech>
|
||||
<Spanish>Acciones Zeus</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ColorTextMax">
|
||||
<English>Interaction - Text Max</English>
|
||||
@ -227,6 +228,7 @@
|
||||
<Polish>Tło menu interakcji</Polish>
|
||||
<Spanish>Fondo del menú de interacción</Spanish>
|
||||
<Czech>Pozadí menu interakce</Czech>
|
||||
<German>Interaktionsmenü-Hintergrund</German>
|
||||
<Portuguese>Fundo do menu de interação</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_blurScreenDesc">
|
||||
@ -234,6 +236,7 @@
|
||||
<Polish>Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji</Polish>
|
||||
<Spanish>Desenfocar el fondo mientras el menú de interacción está abierto.</Spanish>
|
||||
<Czech>Rozmazat obraz pokud je interakční menu otevřené.</Czech>
|
||||
<German>Den Hintergrund verschwimmen lassen, während das Interaktionsmenü geöffnet ist.</German>
|
||||
<Portuguese>Desfocar o fundo enquanto o menu de interação está aberto.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_backgroundBlur">
|
||||
@ -241,24 +244,28 @@
|
||||
<Polish>Rozmycie ekranu</Polish>
|
||||
<Spanish>Pantalla de desenfoque</Spanish>
|
||||
<Czech>Rozmazaný obraz</Czech>
|
||||
<German>Verschwommenes Bild</German>
|
||||
<Portuguese>Desfoque de tela</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_backgroundBlack">
|
||||
<English>Black</English>
|
||||
<Polish>Przyciemnienie ekranu</Polish>
|
||||
<Spanish>Negra</Spanish>
|
||||
<Spanish>Negro</Spanish>
|
||||
<Czech>Černý obraz</Czech>
|
||||
<Portuguese>Preto</Portuguese>
|
||||
<German>Schwarz</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_addBuildingActions">
|
||||
<English>Show actions for buildings</English>
|
||||
<Polish>Pokazuj akcje dla budynków</Polish>
|
||||
<Czech>Zobrazit akci pro budovy</Czech>
|
||||
<Spanish>Mostrar acciones para edificios</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_addBuildingActionsDescription">
|
||||
<English>Adds interaction actions for opening doors and mounting ladders on buildings. (Note: There is a performance cost when opening interaction menu, especially in towns)</English>
|
||||
<Polish>Dodaje opcje interakcji dla otwierania drzwi oraz wchodzenia po drabinach do budynków. Uwaga: Użycie tej opcji może spowodować spadek wydajności menu interakcji, szczególnie w dużych miastach.</Polish>
|
||||
<Czech>Přidá možnost interakce pro otevření dvěří a umistňovat žebříky na budovy. (Poznámka: Použití této možnosti snižuje výkon při otevírání pomocí interakčního menu, zejména ve velkých městech.) </Czech>
|
||||
<Spanish>Añade las acciones de interacción para la apertura de puertas y montaje de escaleras en los edificios. (Nota: Hay un coste de rendimiento al abrir el menú de interacción, especialmente en las ciudades)</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -138,7 +138,7 @@ class ACE_ZeusActions {
|
||||
};
|
||||
class ZeusWaypoints {
|
||||
displayName = "Waypoints";
|
||||
icon = "\A3\UI_F_Curator\Data\CfgCurator\waypoint_ca.paa";
|
||||
icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeRecent_ca.paa";
|
||||
|
||||
class behaviour {
|
||||
displayName = "$STR_Combat_Mode";
|
||||
|
@ -797,6 +797,7 @@
|
||||
<English>Open</English>
|
||||
<Polish>Otwórz</Polish>
|
||||
<Czech>Otevřít</Czech>
|
||||
<Spanish>Abrir</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Module_DisplayName">
|
||||
<English>Interaction System</English>
|
||||
@ -828,6 +829,7 @@
|
||||
<German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German>
|
||||
<Czech>Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. </Czech>
|
||||
<Russian>O módulo de gestão de equipe é composto por: a atribuição de cores para os membros da equipe, comando das equipes, juntando-se / deixando equipes.</Russian>
|
||||
<Spanish>La gestión del equipo permite la asignación de colores para los miembros del equipo, tomando el mando del equipo y uniendo/dejando equipos.</Spanish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -9,5 +9,7 @@ PREP(showFireMode);
|
||||
PREP(onFired);
|
||||
PREP(onOpticLoad);
|
||||
PREP(onOpticDraw);
|
||||
PREP(onOpticUnload);
|
||||
|
||||
GVAR(isLockKeyDown) = false;
|
||||
GVAR(pfehID) = -1;
|
||||
|
@ -1,21 +1,17 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
|
||||
PARAMS_2(_shooter,_weapon);
|
||||
|
||||
// Bail on not missile
|
||||
if( _shooter != ACE_player) exitWith { false };
|
||||
// Bail on not missile or javelin PFEH not running
|
||||
if ((_shooter != ACE_player) || {(GVAR(pfehID) == -1)}) exitWith { false };
|
||||
|
||||
private ["_configs"];
|
||||
|
||||
_configs = configProperties [configFile >> "CfgWeapons" >> _weapon, QUOTE(configName _x == QUOTE(QGVAR(enabled))), false];
|
||||
if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith {};
|
||||
|
||||
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
||||
if(!isNil "_pfh_handle") then {
|
||||
//[_pfh_handle] call cba_fnc_removePerFrameHandler;
|
||||
//uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil];
|
||||
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
};
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
|
@ -56,7 +56,7 @@ if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1})
|
||||
};
|
||||
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil];
|
||||
GVAR(pfehID) = -1;
|
||||
};
|
||||
|
||||
// Find a target within the optic range
|
||||
|
@ -18,6 +18,10 @@ __JavelinIGUITargetingConstrains ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
|
||||
if(GVAR(pfehID) != -1) then {
|
||||
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
|
||||
};
|
||||
|
||||
uiNameSpace setVariable [QGVAR(arguments),
|
||||
[
|
||||
ACE_diagTime, // Last runtime
|
||||
@ -30,11 +34,4 @@ uiNameSpace setVariable [QGVAR(arguments),
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
|
||||
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
||||
if(!isNil "_pfh_handle") then {
|
||||
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
|
||||
};
|
||||
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
||||
GVAR(pfehID) = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -1,14 +1,13 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
TRACE_1("enter", _this);
|
||||
private["_args", "_disableFireEH", "_pfh"];
|
||||
private["_args", "_disableFireEH"];
|
||||
|
||||
uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];
|
||||
// uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];
|
||||
|
||||
_pfh = uiNamespace getVariable["ACE_RscOptics_javelin_PFH", nil ];
|
||||
if(!isNil "_pfh") then {
|
||||
[_pfh] call CBA_fnc_removePerFrameHandler;
|
||||
uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];
|
||||
if(GVAR(pfehID) != -1) then {
|
||||
[GVAR(pfehID)] call CBA_fnc_removePerFrameHandler;
|
||||
GVAR(pfehID) = -1;
|
||||
};
|
||||
|
||||
_args = uiNamespace getVariable[QGVAR(arguments), nil ];
|
||||
|
@ -42,10 +42,7 @@ class CfgVehicles {
|
||||
displayName = "Kestrel 4500";
|
||||
vehicleClass = "Items";
|
||||
class TransportItems {
|
||||
class ACE_Kestrel4500 {
|
||||
name = "ACE_Kestrel4500";
|
||||
count = 1;
|
||||
};
|
||||
MACRO_ADDITEM(ACE_Kestrel4500,1);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -56,6 +56,7 @@ class Kestrel4500_Display {
|
||||
controlsBackground[]={};
|
||||
objects[]={};
|
||||
class controls {
|
||||
#define DIALOG_SAFE_Y(num) QUOTE((safeZoneY + num) min (safeZoneY + safeZoneH - 1.024*4/3 + num))
|
||||
class BACKGROUND {
|
||||
moving=1;
|
||||
type=0;
|
||||
@ -64,7 +65,7 @@ class Kestrel4500_Display {
|
||||
idc=74000;
|
||||
style=48;
|
||||
x=safezoneX;
|
||||
y=safezoneY;
|
||||
y = DIALOG_SAFE_Y(0);
|
||||
w=1.024;
|
||||
h=1.024*4/3;
|
||||
colorBackground[]={1,1,1,1};
|
||||
@ -74,7 +75,7 @@ class Kestrel4500_Display {
|
||||
class POWER: Kestrel4500_RscButton {
|
||||
idc=-1;
|
||||
x=safezoneX+0.385;
|
||||
y=safezoneY+1.125;
|
||||
y = DIALOG_SAFE_Y(1.125);
|
||||
w=0.042;
|
||||
h=0.042*4/3;
|
||||
action=QUOTE(7 call FUNC(buttonPressed));
|
||||
@ -83,7 +84,7 @@ class Kestrel4500_Display {
|
||||
class ENTER: POWER {
|
||||
idc=-1;
|
||||
x=safezoneX+0.46;
|
||||
y=safezoneY+1.0;
|
||||
y = DIALOG_SAFE_Y(1.0);
|
||||
w=0.1;
|
||||
action=QUOTE(0 call FUNC(buttonPressed));
|
||||
onMouseButtonDown = "playSound 'kestrel4500_center_button_click'";
|
||||
@ -91,7 +92,7 @@ class Kestrel4500_Display {
|
||||
class TOP: Kestrel4500_RscButton {
|
||||
idc=-1;
|
||||
x=safezoneX+0.46;
|
||||
y=safezoneY+0.93;
|
||||
y = DIALOG_SAFE_Y(0.93);
|
||||
w=0.1;
|
||||
h=0.03;
|
||||
action=QUOTE(1 call FUNC(buttonPressed));
|
||||
@ -99,14 +100,14 @@ class Kestrel4500_Display {
|
||||
};
|
||||
class BOTTOM: TOP {
|
||||
idc=-1;
|
||||
y=safezoneY+1.1;
|
||||
y = DIALOG_SAFE_Y(1.1);
|
||||
action=QUOTE(2 call FUNC(buttonPressed));
|
||||
onMouseButtonDown = "playSound 'kestrel4500_bottom_button_click'";
|
||||
};
|
||||
class LEFT: Kestrel4500_RscButton {
|
||||
idc=-1;
|
||||
x=safezoneX+0.4;
|
||||
y=safezoneY+0.97;
|
||||
y = DIALOG_SAFE_Y(0.97);
|
||||
w=0.046;
|
||||
h=0.11;
|
||||
action=QUOTE(3 call FUNC(buttonPressed));
|
||||
@ -121,7 +122,7 @@ class Kestrel4500_Display {
|
||||
class MEMORY: Kestrel4500_RscButton {
|
||||
idc=-1;
|
||||
x=safezoneX+0.395;
|
||||
y=safezoneY+0.87;
|
||||
y = DIALOG_SAFE_Y(0.87);
|
||||
w=0.05;
|
||||
h=0.045*4/3;
|
||||
action=QUOTE(5 call FUNC(buttonPressed));
|
||||
@ -135,35 +136,35 @@ class Kestrel4500_Display {
|
||||
class TEXT_TOP: Kestrel4500_RscText {
|
||||
idc=74100;
|
||||
x=safezoneX+0.40;
|
||||
y=safezoneY+0.58;
|
||||
y = DIALOG_SAFE_Y(0.58);
|
||||
w=0.22;
|
||||
h=0.04;
|
||||
text="";
|
||||
};
|
||||
class TEXT_CENTER_BIG: TEXT_TOP {
|
||||
idc=74200;
|
||||
y=safezoneY+0.61;
|
||||
y = DIALOG_SAFE_Y(0.61);
|
||||
h=0.10;
|
||||
SizeEx=0.06;
|
||||
};
|
||||
class TEXT_CENTER: TEXT_TOP {
|
||||
idc=74201;
|
||||
y=safezoneY+0.64;
|
||||
y = DIALOG_SAFE_Y(0.64);
|
||||
};
|
||||
class TEXT_CENTER_LINE_1_LEFT: TEXT_TOP {
|
||||
idc=74300;
|
||||
y=safezoneY+0.60;
|
||||
y = DIALOG_SAFE_Y(0.60);
|
||||
style=ST_LEFT;
|
||||
h=0.10;
|
||||
SizeEx=0.05;
|
||||
};
|
||||
class TEXT_CENTER_LINE2_LEFT: TEXT_CENTER_LINE_1_LEFT {
|
||||
idc=74301;
|
||||
y=safezoneY+0.64;
|
||||
y = DIALOG_SAFE_Y(0.64);
|
||||
};
|
||||
class TEXT_CENTER_LINE_3_LEFT: TEXT_CENTER_LINE2_LEFT {
|
||||
idc=74302;
|
||||
y=safezoneY+0.68;
|
||||
y = DIALOG_SAFE_Y(0.68);
|
||||
};
|
||||
class TEXT_CENTER_LINE_1_RIGHT: TEXT_CENTER_LINE_1_LEFT {
|
||||
idc=74303;
|
||||
@ -179,42 +180,42 @@ class Kestrel4500_Display {
|
||||
};
|
||||
class TEXT_INFO_LINE_1: TEXT_TOP {
|
||||
idc=74400;
|
||||
y=safezoneY+0.68;
|
||||
y = DIALOG_SAFE_Y(0.68);
|
||||
};
|
||||
class TEXT_INFO_LINE_2: TEXT_TOP {
|
||||
idc=74401;
|
||||
y=safezoneY+0.72;
|
||||
y = DIALOG_SAFE_Y(0.72);
|
||||
};
|
||||
class TEXT_BOTTOM_BIG: TEXT_TOP {
|
||||
idc=74500;
|
||||
y=safezoneY+0.67;
|
||||
y = DIALOG_SAFE_Y(0.67);
|
||||
h=0.10;
|
||||
SizeEx=0.06;
|
||||
};
|
||||
class TEXT_CENTER_LINE_1: TEXT_TOP {
|
||||
idc=74600;
|
||||
y=safezoneY+0.58;
|
||||
y = DIALOG_SAFE_Y(0.58);
|
||||
SizeEx=0.03;
|
||||
};
|
||||
class TEXT_CENTER_LINE_2: TEXT_CENTER_LINE_1 {
|
||||
idc=74601;
|
||||
y=safezoneY+0.61;
|
||||
y = DIALOG_SAFE_Y(0.61);
|
||||
};
|
||||
class TEXT_CENTER_LINE_3: TEXT_CENTER_LINE_1 {
|
||||
idc=74602;
|
||||
y=safezoneY+0.64;
|
||||
y = DIALOG_SAFE_Y(0.64);
|
||||
};
|
||||
class TEXT_CENTER_LINE_4: TEXT_CENTER_LINE_1 {
|
||||
idc=74603;
|
||||
y=safezoneY+0.67;
|
||||
y = DIALOG_SAFE_Y(0.67);
|
||||
};
|
||||
class TEXT_CENTER_LINE_5: TEXT_CENTER_LINE_1 {
|
||||
idc=74604;
|
||||
y=safezoneY+0.70;
|
||||
y = DIALOG_SAFE_Y(0.70);
|
||||
};
|
||||
class TEXT_CENTER_LINE_6: TEXT_CENTER_LINE_1 {
|
||||
idc=74605;
|
||||
y=safezoneY+0.73;
|
||||
y = DIALOG_SAFE_Y(0.73);
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -228,6 +229,7 @@ class RscTitles {
|
||||
fadeIn="false";
|
||||
fadeOut="false";
|
||||
class controls {
|
||||
#define DISPLAY_SAFE_Y(num) QUOTE((safeZoneY + 0.7 + num) min (safeZoneY + safeZoneH - 1.024*4/3*0.75 + num))
|
||||
class RscKestrel4500 {
|
||||
idc=75000;
|
||||
moving=0;
|
||||
@ -236,7 +238,7 @@ class RscTitles {
|
||||
SizeEX=0.025*0.75;
|
||||
style=48;
|
||||
x=safezoneX+0.14;
|
||||
y=safezoneY+0.7;
|
||||
y = DISPLAY_SAFE_Y(0);
|
||||
w=0.512*0.75;
|
||||
h=1.024*4/3*0.75;
|
||||
colorBackground[]={1,1,1,1};
|
||||
@ -246,7 +248,7 @@ class RscTitles {
|
||||
class RscTextTop: Kestrel4500_RscText {
|
||||
idc=75100;
|
||||
x=safezoneX-0.05+0.40*0.75;
|
||||
y=safezoneY+0.7+0.58*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.58*0.75);
|
||||
w=0.22*0.75;
|
||||
h=0.04*0.75;
|
||||
SizeEx=0.04*0.75;
|
||||
@ -254,18 +256,18 @@ class RscTitles {
|
||||
};
|
||||
class RscTextCenterBig: RscTextTop {
|
||||
idc=75200;
|
||||
y=safezoneY+0.7+0.61*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.61*0.75);
|
||||
h=0.10*0.75;
|
||||
SizeEx=0.06*0.75;
|
||||
text="";
|
||||
};
|
||||
class RscTextCenter: RscTextTop {
|
||||
idc=75201;
|
||||
y=safezoneY+0.7+0.64*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.64*0.75);
|
||||
};
|
||||
class RscTextCenterLine1Left: RscTextTop {
|
||||
idc=75300;
|
||||
y=safezoneY+0.7+0.60*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.60*0.75);
|
||||
style=ST_LEFT;
|
||||
h=0.10*0.75;
|
||||
SizeEx=0.05*0.75;
|
||||
@ -273,12 +275,12 @@ class RscTitles {
|
||||
};
|
||||
class RscTextCenterLine2Left: RscTextCenterLine1Left {
|
||||
idc=75301;
|
||||
y=safezoneY+0.7+0.64*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.64*0.75);
|
||||
text="";
|
||||
};
|
||||
class RscTextCenterLine3Left: RscTextCenterLine2Left {
|
||||
idc=75302;
|
||||
y=safezoneY+0.7+0.68*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.68*0.75);
|
||||
text="";
|
||||
};
|
||||
class RscTextCenterLine1Right: RscTextCenterLine1Left {
|
||||
@ -295,45 +297,45 @@ class RscTitles {
|
||||
};
|
||||
class RscTextInfoLine1: RscTextTop {
|
||||
idc=75400;
|
||||
y=safezoneY+0.7+0.68*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.68*0.75);
|
||||
text="";
|
||||
};
|
||||
class RscTextInfoLine2: RscTextTop {
|
||||
idc=75401;
|
||||
y=safezoneY+0.7+0.72*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.72*0.75);
|
||||
text="";
|
||||
};
|
||||
class RscTextBottomBig: RscTextTop {
|
||||
idc=75500;
|
||||
y=safezoneY+0.7+0.67*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.67*0.75);
|
||||
h=0.10*0.75;
|
||||
SizeEx=0.06*0.75;
|
||||
text="";
|
||||
};
|
||||
class RscTextCenterLine1: RscTextTop {
|
||||
idc=75600;
|
||||
y=safezoneY+0.7+0.58*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.58*0.75);
|
||||
SizeEx=0.03*0.75;
|
||||
};
|
||||
class RscTextCenterLine2: RscTextCenterLine1 {
|
||||
idc=75601;
|
||||
y=safezoneY+0.7+0.61*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.61*0.75);
|
||||
};
|
||||
class RscTextCenterLine3: RscTextCenterLine1 {
|
||||
idc=75602;
|
||||
y=safezoneY+0.7+0.64*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.64*0.75);
|
||||
};
|
||||
class RscTextCenterLine4: RscTextCenterLine1 {
|
||||
idc=75603;
|
||||
y=safezoneY+0.7+0.67*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.67*0.75);
|
||||
};
|
||||
class RscTextCenterLine5: RscTextCenterLine1 {
|
||||
idc=75604;
|
||||
y=safezoneY+0.7+0.70*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.70*0.75);
|
||||
};
|
||||
class RscTextCenterLine6: RscTextCenterLine1 {
|
||||
idc=75605;
|
||||
y=safezoneY+0.7+0.73*0.75;
|
||||
y = DISPLAY_SAFE_Y(0.73*0.75);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
Binary file not shown.
@ -20,7 +20,7 @@ _playerAltitude = (getPosASL ACE_player) select 2;
|
||||
_temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight);
|
||||
_humidity = EGVAR(weather,currentHumidity);
|
||||
_barometricPressure = _playerAltitude call EFUNC(weather,calculateBarometricPressure);
|
||||
_altitude = EGVAR(weather,Altitude) + _playerAltitude;
|
||||
_altitude = EGVAR(common,mapAltitude) + _playerAltitude;
|
||||
_airDensity = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateAirDensity);
|
||||
_densityAltitude = _airDensity call EFUNC(weather,calculateDensityAltitude);
|
||||
_chill = [_temperature, _humidity] call EFUNC(weather,calculateWindChill);
|
||||
|
@ -276,7 +276,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
|
||||
};
|
||||
case 12: { // ALTITUDE
|
||||
if (!GVAR(MinAvgMax)) then {
|
||||
_textCenterBig = Str(round(EGVAR(weather,Altitude) + _playerAltitude));
|
||||
_textCenterBig = Str(round(EGVAR(common,mapAltitude) + _playerAltitude));
|
||||
} else {
|
||||
_textCenterLine1Left = "Min";
|
||||
_textCenterLine2Left = "Avg";
|
||||
@ -300,7 +300,7 @@ if (GVAR(referenceHeadingMenu) == 0) then {
|
||||
};
|
||||
case 14: { // User Screen 1
|
||||
_textCenterLine1Left = Str(round(_playerDir));
|
||||
_textCenterLine2Left = Str(round(EGVAR(weather,Altitude) + _playerAltitude));
|
||||
_textCenterLine2Left = Str(round(EGVAR(common,mapAltitude) + _playerAltitude));
|
||||
_textCenterLine3Left = Str(round(abs(_windSpeed) * 10) / 10);
|
||||
_textCenterLine1Right = GVAR(Directions) select GVAR(Direction);
|
||||
_textCenterLine2Right = "m";
|
||||
|
@ -30,10 +30,7 @@ class CfgVehicles {
|
||||
class Box_NATO_Support_F;
|
||||
class ACE_Box_Misc: Box_NATO_Support_F {
|
||||
class TransportItems {
|
||||
class _xx_ACE_UAVBattery {
|
||||
count = 6;
|
||||
name = "ACE_UAVBattery";
|
||||
};
|
||||
MACRO_ADDITEM(ACE_UAVBattery,6);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -6,7 +6,7 @@ class CfgWeapons {
|
||||
scope = 2;
|
||||
displayName = CSTRING(Battery_Name);
|
||||
descriptionShort = CSTRING(Battery_Description);
|
||||
model = QUOTE(PATHTOF(models\ace_battery.p3d));
|
||||
model = QUOTE(PATHTOF(data\ace_battery.p3d));
|
||||
picture = QUOTE(PATHTOF(ui\UAV_battery_ca.paa));
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
mass = 20;
|
||||
|
BIN
addons/logistics_uavbattery/data/ace_battery.p3d
Normal file
BIN
addons/logistics_uavbattery/data/ace_battery.p3d
Normal file
Binary file not shown.
@ -8,7 +8,7 @@ PixelShaderID="Super";
|
||||
VertexShaderID="Super";
|
||||
|
||||
class Stage1 {
|
||||
texture="z\ace\addons\logistics_uavbattery\models\battery_nohq.paa";
|
||||
texture="z\ace\addons\logistics_uavbattery\data\battery_nohq.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
@ -38,7 +38,7 @@ class Stage3 {
|
||||
};
|
||||
};
|
||||
class Stage4 {
|
||||
texture="z\ace\addons\logistics_uavbattery\models\default_as.paa";
|
||||
texture="z\ace\addons\logistics_uavbattery\data\default_as.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
@ -48,7 +48,7 @@ class Stage4 {
|
||||
};
|
||||
};
|
||||
class Stage5 {
|
||||
texture="z\ace\addons\logistics_uavbattery\models\battery_smdi.paa";
|
||||
texture="z\ace\addons\logistics_uavbattery\data\battery_smdi.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
BIN
addons/logistics_uavbattery/data/battery_co.paa
Normal file
BIN
addons/logistics_uavbattery/data/battery_co.paa
Normal file
Binary file not shown.
BIN
addons/logistics_uavbattery/data/battery_nohq.paa
Normal file
BIN
addons/logistics_uavbattery/data/battery_nohq.paa
Normal file
Binary file not shown.
BIN
addons/logistics_uavbattery/data/battery_smdi.paa
Normal file
BIN
addons/logistics_uavbattery/data/battery_smdi.paa
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -6,7 +6,7 @@ class CfgWeapons {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(wirecutterName);
|
||||
descriptionShort = CSTRING(wirecutterDescription);
|
||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||
model = QUOTE(PATHTOF(data\ace_wirecutter.p3d));
|
||||
picture = QUOTE(PATHTOF(ui\item_wirecutter_ca.paa));
|
||||
scope = 2;
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
|
BIN
addons/logistics_wirecutter/data/ace_wirecutter.p3d
Normal file
BIN
addons/logistics_wirecutter/data/ace_wirecutter.p3d
Normal file
Binary file not shown.
90
addons/logistics_wirecutter/data/ace_wirecutter.rvmat
Normal file
90
addons/logistics_wirecutter/data/ace_wirecutter.rvmat
Normal file
@ -0,0 +1,90 @@
|
||||
class StageTI
|
||||
{
|
||||
texture = "a3\data_f\default_glass_ti_ca.paa";
|
||||
};
|
||||
ambient[] = {1,1,1,1};
|
||||
diffuse[] = {1,1,1,1};
|
||||
forcedDiffuse[] = {0,0,0,1};
|
||||
emmisive[] = {0,0,0,1};
|
||||
specular[] = {0,0,0,1};
|
||||
specularPower = 0;
|
||||
PixelShaderID = "Super";
|
||||
VertexShaderID = "Super";
|
||||
class Stage1
|
||||
{
|
||||
texture = "z\ace\addons\logistics_wirecutter\data\ace_wirecutter_nohq.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1,0,0};
|
||||
up[] = {0,1,0};
|
||||
dir[] = {0,0,0};
|
||||
pos[] = {0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture = "#(ai,32,128,1)fresnel(0.71,0.74)";
|
||||
uvSource = "none";
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture = "a3\data_f\env_land_co.paa";
|
||||
useWorldEnvMap = "true";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
BIN
addons/logistics_wirecutter/data/ace_wirecutter_co.paa
Normal file
BIN
addons/logistics_wirecutter/data/ace_wirecutter_co.paa
Normal file
Binary file not shown.
BIN
addons/logistics_wirecutter/data/ace_wirecutter_nohq.paa
Normal file
BIN
addons/logistics_wirecutter/data/ace_wirecutter_nohq.paa
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user