From 7bdfe03c922fcd92a306871b5a7a59ec476af640 Mon Sep 17 00:00:00 2001 From: jokoho48 Date: Sun, 9 Aug 2015 02:19:34 +0200 Subject: [PATCH 01/66] Code cleanup of Concertina_wire module --- addons/concertina_wire/XEH_init.sqf | 5 ++- .../concertina_wire/functions/fnc_deploy.sqf | 35 ++++++++++--------- .../functions/fnc_dismount.sqf | 8 ++--- .../functions/fnc_dismountSuccess.sqf | 22 ++++++------ .../functions/fnc_handleDamage.sqf | 9 ++--- .../functions/fnc_handleKilled.sqf | 8 ++--- .../functions/fnc_vehicleDamage.sqf | 12 +++---- 7 files changed, 45 insertions(+), 54 deletions(-) diff --git a/addons/concertina_wire/XEH_init.sqf b/addons/concertina_wire/XEH_init.sqf index dbce4a9b92..dc6424f172 100644 --- a/addons/concertina_wire/XEH_init.sqf +++ b/addons/concertina_wire/XEH_init.sqf @@ -1,4 +1,3 @@ #include "script_component.hpp" - -PARAMS_1(_wire); -_wire addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; \ No newline at end of file +params ["_wire"]; +_wire addEventHandler ["HandleDamage", FUNC(handleDamage)]; diff --git a/addons/concertina_wire/functions/fnc_deploy.sqf b/addons/concertina_wire/functions/fnc_deploy.sqf index 5548cad649..aedc8b9608 100644 --- a/addons/concertina_wire/functions/fnc_deploy.sqf +++ b/addons/concertina_wire/functions/fnc_deploy.sqf @@ -8,10 +8,9 @@ * 1: unit * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" @@ -22,7 +21,7 @@ private ["_wireNoGeo", "_dir", "_pos", "_wireNoGeoPos"]; _wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0]; { _wireNoGeo animate [_x, 1]; -} foreach WIRE_FAST; +} count WIRE_FAST; GVAR(placer) = _unit; _dir = getDir _unit; @@ -37,8 +36,9 @@ deleteVehicle _wirecoil; _unit setVariable [QGVAR(wireDeployed), false]; GVAR(deployPFH) = [{ - EXPLODE_3_PVT(_this select 0,_wireNoGeo,_wireNoGeoPos,_unit); - + params ["_args", "_idPFH"]; + _args params ["_wireNoGeo", "_wireNoGeoPos", "_unit"]; + private ["_range", "_posStart", "_posEnd", "_dirVect", "_dir", "_anim", "_wire"]; _posStart = (_wireNoGeo modelToWorldVisual (_wireNoGeo selectionPosition "start")) call EFUNC(common,positionToASL); _posEnd = (getPosASL _unit) vectorAdd (vectorDir _unit); @@ -46,37 +46,38 @@ GVAR(deployPFH) = [{ _dir = _dirVect call CBA_fnc_vectDir; _range = vectorMagnitude _dirVect; _anim = 0 max (1 - (_range / 12)); - + if (!(alive _unit) || _range >= 12 || (_unit getVariable [QGVAR(wireDeployed), false])) exitWith { _wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0]; { _wire animate [_x, _anim]; - } foreach WIRE_FAST; - + } count WIRE_FAST; + [{ - EXPLODE_5_PVT(_this select 0,_wireNoGeo,_wire,_anim,_dir,_wireNoGeoPos); + params ["_args", "_idPFH"]; + _args params ["_wireNoGeo", "_wire", "_anim", "_dir", "_wireNoGeoPos"]; if (_wire animationPhase "wire_2" == _anim) then { deleteVehicle _wireNoGeo; _wire setDir _dir; _wire setPosASL _wireNoGeoPos; - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_idPFH] call CBA_fnc_removePerFrameHandler; }; }, 0, [_wireNoGeo, _wire, _anim, _dir, _wireNoGeoPos]] call CBA_fnc_addPerFrameHandler; - + [_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler); call EFUNC(interaction,hideMouseHint); - - [_this select 1] call CBA_fnc_removePerFrameHandler; + + [_idPFH] call CBA_fnc_removePerFrameHandler; }; - + _wireNoGeo setDir _dir; { _wireNoGeo animate [_x, _anim]; - } foreach WIRE_FAST; + } count WIRE_FAST; }, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler; [localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint); - + GVAR(placer) setVariable [QGVAR(Deploy), [GVAR(placer), "DefaultAction", {GVAR(deployPFH) != -1}, diff --git a/addons/concertina_wire/functions/fnc_dismount.sqf b/addons/concertina_wire/functions/fnc_dismount.sqf index c9a5d1f9ff..c7ba3f50b1 100644 --- a/addons/concertina_wire/functions/fnc_dismount.sqf +++ b/addons/concertina_wire/functions/fnc_dismount.sqf @@ -8,10 +8,9 @@ * 1: unit * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" @@ -21,8 +20,7 @@ if (uiNamespace getVariable [QEGVAR(interact_menu,cursorMenuOpened),false]) exit _this call FUNC(dismount); }, _this] call EFUNC(common,execNextFrame); }; - -PARAMS_2(_wire,_unit); +params ["_wire", "_unit"]; private ["_config", "_delay"]; _config = (configFile >> "CfgVehicles" >> typeOf _unit); diff --git a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf index a6e34fe44f..a3f5081271 100644 --- a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf +++ b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf @@ -7,10 +7,9 @@ * 0: wire * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" @@ -18,25 +17,26 @@ PARAMS_1(_wire); { _wire animate [_x, 1]; -} foreach WIRE_FAST; +} count WIRE_FAST; [{ - EXPLODE_1_PVT(_this select 0,_wire); - + params ["_args", "_idPFH"]; + _args params ["_wire"]; + if (_wire animationPhase "wire_2" == 1) then { private ["_dir", "_pos", "_wirecoil"]; - + _dir = getDir _wire; _pos = getPosASL _wire; - + _wirecoil = "ACE_ConcertinaWireCoil" createvehicle [0, 0, 0]; deleteVehicle _wire; - + _wirecoil setDir _dir; _wirecoil setPosASL _pos; _wirecoil setVelocity [0, 0, 0]; - - [_this select 1] call CBA_fnc_removePerFrameHandler; + + [_idPFH] call CBA_fnc_removePerFrameHandler; }; }, 0, [_wire]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/concertina_wire/functions/fnc_handleDamage.sqf b/addons/concertina_wire/functions/fnc_handleDamage.sqf index 61cd1c4e7c..43a04641dd 100644 --- a/addons/concertina_wire/functions/fnc_handleDamage.sqf +++ b/addons/concertina_wire/functions/fnc_handleDamage.sqf @@ -11,15 +11,12 @@ * 4: projectile * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" - -PARAMS_5(_wire,_selectionName,_damage,_source,_projectile); - +params ["_wire", "", "_damage", "_source", ""]; if (_damage < 0.5) exitWith { 0 }; if (!(isNull _source)) then { diff --git a/addons/concertina_wire/functions/fnc_handleKilled.sqf b/addons/concertina_wire/functions/fnc_handleKilled.sqf index f5f84a6afa..ac59798d10 100644 --- a/addons/concertina_wire/functions/fnc_handleKilled.sqf +++ b/addons/concertina_wire/functions/fnc_handleKilled.sqf @@ -8,14 +8,12 @@ * 1: killer (vehicle) * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" - -PARAMS_2(_wire,_killer); +params ["_wire", "_killer"]; private ["_distance", "_vehicle"]; diff --git a/addons/concertina_wire/functions/fnc_vehicleDamage.sqf b/addons/concertina_wire/functions/fnc_vehicleDamage.sqf index e7dff30000..41050eb9b9 100644 --- a/addons/concertina_wire/functions/fnc_vehicleDamage.sqf +++ b/addons/concertina_wire/functions/fnc_vehicleDamage.sqf @@ -7,14 +7,12 @@ * 1: vehicle * * Return Value: - * Nothing - * - * Return value: * None + * + * Public: No */ #include "script_component.hpp" - -PARAMS_2(_wire,_vehicle); +params ["_wire", "_vehicle"]; private ["_type", "_mode", "_anim", "_parts", "_selectionPart", "_selection", "_pos_w", "_dir_w"]; @@ -43,8 +41,8 @@ _dir_w = getDir _wire; if (_mode == 0) then { private ["_x", "_y", "_found", "_wireCheckPosAr", "_no"]; - _x = _pos_w select 0; - _y = _pos_w select 1; + _pos_w params ["_x","_y"]; + // Check if two Single coils are placed next to each other (i.e playes have built a big wire obstacle) _wireCheckPosAr = [ [_x + (sin (_dir_w+90) * 1.5),_y + (cos (_dir_w+90) * 1.5)], From a38cdda8e36da5737946f11f4b474e74e2498d98 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Sat, 8 Aug 2015 08:26:15 +0200 Subject: [PATCH 02/66] First iteration on implementing Dslyecxi's ST Map Gestures --- addons/map_gestures/$PBOPREFIX$ | 1 + addons/map_gestures/ACE_Settings.hpp | 50 ++++++++++ addons/map_gestures/CfgEventHandlers.hpp | 11 +++ addons/map_gestures/CfgVehicles.hpp | 64 +++++++++++++ addons/map_gestures/XEH_postInit.sqf | 16 ++++ addons/map_gestures/XEH_preInit.sqf | 17 ++++ addons/map_gestures/config.cpp | 17 ++++ .../functions/fnc_assignClientIDOnServer.sqf | 24 +++++ .../functions/fnc_drawMapGestures.sqf | 48 ++++++++++ .../functions/fnc_endTransmit.sqf | 21 ++++ .../functions/fnc_getProximityPlayers.sqf | 23 +++++ .../functions/fnc_initTransmit.sqf | 21 ++++ .../functions/fnc_moduleGroupSettings.sqf | 53 +++++++++++ .../functions/fnc_moduleSettings.sqf | 35 +++++++ .../functions/fnc_receiverInit.sqf | 32 +++++++ .../functions/fnc_sanitizeName.sqf | 30 ++++++ .../map_gestures/functions/fnc_transmit.sqf | 42 ++++++++ .../functions/fnc_transmitterInit.sqf | 59 ++++++++++++ .../functions/script_component.hpp | 1 + addons/map_gestures/script_component.hpp | 12 +++ addons/map_gestures/stringtable.xml | 95 +++++++++++++++++++ 21 files changed, 672 insertions(+) create mode 100644 addons/map_gestures/$PBOPREFIX$ create mode 100644 addons/map_gestures/ACE_Settings.hpp create mode 100644 addons/map_gestures/CfgEventHandlers.hpp create mode 100644 addons/map_gestures/CfgVehicles.hpp create mode 100644 addons/map_gestures/XEH_postInit.sqf create mode 100644 addons/map_gestures/XEH_preInit.sqf create mode 100644 addons/map_gestures/config.cpp create mode 100644 addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf create mode 100644 addons/map_gestures/functions/fnc_drawMapGestures.sqf create mode 100644 addons/map_gestures/functions/fnc_endTransmit.sqf create mode 100644 addons/map_gestures/functions/fnc_getProximityPlayers.sqf create mode 100644 addons/map_gestures/functions/fnc_initTransmit.sqf create mode 100644 addons/map_gestures/functions/fnc_moduleGroupSettings.sqf create mode 100644 addons/map_gestures/functions/fnc_moduleSettings.sqf create mode 100644 addons/map_gestures/functions/fnc_receiverInit.sqf create mode 100644 addons/map_gestures/functions/fnc_sanitizeName.sqf create mode 100644 addons/map_gestures/functions/fnc_transmit.sqf create mode 100644 addons/map_gestures/functions/fnc_transmitterInit.sqf create mode 100644 addons/map_gestures/functions/script_component.hpp create mode 100644 addons/map_gestures/script_component.hpp create mode 100644 addons/map_gestures/stringtable.xml diff --git a/addons/map_gestures/$PBOPREFIX$ b/addons/map_gestures/$PBOPREFIX$ new file mode 100644 index 0000000000..8672ea58f4 --- /dev/null +++ b/addons/map_gestures/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\map_gestures diff --git a/addons/map_gestures/ACE_Settings.hpp b/addons/map_gestures/ACE_Settings.hpp new file mode 100644 index 0000000000..c7b9a8b2ed --- /dev/null +++ b/addons/map_gestures/ACE_Settings.hpp @@ -0,0 +1,50 @@ +class ACE_Settings { + class GVAR(enabled) { + value = 1; + typeName = "BOOL"; + displayName = CSTRING(enabled_displayName); + description = CSTRING(enabled_description); + }; + class GVAR(maxRange) { + value = 7; + typeName = "SCALAR"; + displayName = CSTRING(maxRange_displayName); + description = CSTRING(maxRange_description); + }; + class GVAR(interval) { + value = 0.03; + typeName = "SCALAR"; + displayName = CSTRING(interval_displayName); + description = CSTRING(interval_description); + }; + class GVAR(defaultLeadColor) { + value[] = {1, 0.88, 0, 0.95}; + typeName = "COLOR"; + displayName = CSTRING(defaultLeadColor_displayName); + description = CSTRING(defaultLeadColor_description); + }; + class GVAR(defaultColor) { + value[] = {1, 0.88, 0, 0.7}; + typeName = "COLOR"; + displayName = CSTRING(defaultColor_displayName); + description = CSTRING(defaultColor_description); + }; + class GVAR(GroupColorConfigurations) { + value[] = {}; + typeName = "ARRAY"; + displayName = CSTRING(GroupColorConfigurations_displayName); + description = CSTRING(GroupColorConfigurations_description); + }; + class GVAR(GroupColorConfigurationsGroups) { + value[] = {}; + typeName = "ARRAY"; + displayName = CSTRING(GroupColorConfigurationsGroups_displayName); + description = CSTRING(GroupColorConfigurationsGroups_description); + }; + class GVAR(GroupColorConfigurationsGroupIndex) { + value[] = {}; + typeName = "ARRAY"; + displayName = CSTRING(GroupColorConfigurationsGroupIndex_displayName); + description = CSTRING(GroupColorConfigurationsGroupIndex_description); + }; +}; diff --git a/addons/map_gestures/CfgEventHandlers.hpp b/addons/map_gestures/CfgEventHandlers.hpp new file mode 100644 index 0000000000..e75956f440 --- /dev/null +++ b/addons/map_gestures/CfgEventHandlers.hpp @@ -0,0 +1,11 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/map_gestures/CfgVehicles.hpp b/addons/map_gestures/CfgVehicles.hpp new file mode 100644 index 0000000000..30204629a8 --- /dev/null +++ b/addons/map_gestures/CfgVehicles.hpp @@ -0,0 +1,64 @@ +class CfgVehicles { + class ACE_Module; + class GVAR(moduleSettings): ACE_Module { + scope = 2; + category = "ACE"; + displayName = CSTRING(moduleSettings_displayName); + function = QFUNC(moduleSettings); + isGlobal = 0; + author = ECSTRING(common,ACETeam); + class Arguments { + class enabled { + displayName = CSTRING(enabled_DisplayName); + typeName = "BOOL"; + defaultValue = 1; + }; + class maxRange { + displayName = CSTRING(maxRange_displayName); + description = CSTRING(maxRange_description); + typeName = "NUMBER"; + defaultValue = 4; + }; + class interval { + displayName = CSTRING(interval_displayName); + description = CSTRING(interval_description); + typeName = "NUMBER"; + defaultValue = 0.03; + }; + class defaultLeadColor { + displayName = CSTRING(defaultLeadColor_displayName); + description = CSTRING(defaultLeadColor_description); + typeName = "STRING"; + defaultValue = "0,0,0,0"; + }; + class defaultColor { + displayName = CSTRING(defaultColor_displayName); + description = CSTRING(defaultColor_description); + typeName = "STRING"; + defaultValue = "0,0,0,0"; + }; + }; + }; + class GVAR(moduleGroupSettings): ACE_Module { + scope = 2; + category = "ACE"; + displayName = CSTRING(moduleGroupSettings_displayName); + function = QFUNC(moduleGroupSettings); + isGlobal = 0; + author = ECSTRING(common,ACETeam); + class Arguments { + class leadColor { + displayName = CSTRING(leadColor_displayName); + description = CSTRING(leadColor_description); + typeName = "STRING"; + defaultValue = "0,0,0,0"; + }; + class color { + displayName = CSTRING(color_displayName); + description = CSTRING(color_description); + typeName = "STRING"; + defaultValue = "0,0,0,0"; + }; + }; + }; +}; diff --git a/addons/map_gestures/XEH_postInit.sqf b/addons/map_gestures/XEH_postInit.sqf new file mode 100644 index 0000000000..777463e86a --- /dev/null +++ b/addons/map_gestures/XEH_postInit.sqf @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["SettingsInitialized", { + [{ + if (isNull (findDisplay 12)) exitWith {}; + + params ["", "_pfhId"]; + + call FUNC(receiverInit); + call FUNC(transmitterInit); + + [_pfhId] call CBA_fnc_removePerFrameHandler; + }, 1, []] call CBA_fnc_addPerFrameHandler; +}] call EFUNC(common,addEventHandler); diff --git a/addons/map_gestures/XEH_preInit.sqf b/addons/map_gestures/XEH_preInit.sqf new file mode 100644 index 0000000000..08159aa972 --- /dev/null +++ b/addons/map_gestures/XEH_preInit.sqf @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(assignClientIDOnServer); +PREP(drawMapGestures); +PREP(endTransmit); +PREP(getProximityPlayers); +PREP(initTransmit); +PREP(moduleGroupSettings); +PREP(moduleSettings); +PREP(receiverInit); +PREP(sanitizeName); +PREP(transmit); +PREP(transmitterInit); + +ADDON = true; diff --git a/addons/map_gestures/config.cpp b/addons/map_gestures/config.cpp new file mode 100644 index 0000000000..72e7f82078 --- /dev/null +++ b/addons/map_gestures/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Dslyecxi", "MikeMatrix"}; + authorUrl = "https://github.com/MikeMatrix"; + VERSION_CONFIG; + }; +}; + +#include "ACE_Settings.hpp" +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf new file mode 100644 index 0000000000..129c5066e1 --- /dev/null +++ b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf @@ -0,0 +1,24 @@ +/* + * Author: MikeMatrix + * Assign readable client ID to unit on the server. + * + * Arguments: + * 0: Unit name + * + * Return Value: + * None + * + * Example: + * ["MikeMatrix"] call ace_map_gestures_fnc_assignClientIDOnServer + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unitName"]; + +{ + if (name _x == _unitName) then { + _x setVariable [QGVAR(owner_id), owner _x, true]; + }; +} count playableUnits; diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf new file mode 100644 index 0000000000..0b352418af --- /dev/null +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -0,0 +1,48 @@ +/* + * Author: MikeMatrix + * Receives and draws map gestures from nearby players. + * + * Arguments: + * 0: Map Handle + * + * Return Value: + * None + * + * Example: + * [findDisplay 12 displayCtrl 51] call ace_map_gesutres_fnc_drawMapGestures + * + * Public: No + */ +#include "script_component.hpp" + +if (!GVAR(enabled)) exitWith {}; +if (!visibleMap) exitWith {}; + +params ["_mapHandle"]; + +_nearDudes = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); +{ + _nameSane = [name _x] call FUNC(sanitizeName); + _drawPosVariableName = format [QGVAR(%1_DrawPos), _nameSane]; + if (!isNil _drawPosVariableName) then { + _pos = call compile _drawPosVariableName; + if (alive _x && + (_pos distance [0, 0, 0]) > 50 && + {_x getVariable QGVAR(Transmit)}) then { + _group = group _x; + _grpName = groupID _group; + + _color = [1, 1, 1, 1]; + if (_grpName in GVAR(GroupColorConfigurationsGroups)) then { + _grpNameIndex = GVAR(GroupColorConfigurationsGroups) find _grpName; + _color = (GVAR(GroupColorConfigurations) select (GVAR(GroupColorConfigurationsGroupIndex) select _grpNameIndex)) select (_x != leader _group); + } else { + _color = if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)}; + }; + + _mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, 55, 55, 0, "", 1, 0.030, "PuristaBold", "left"]; + _mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", [.2,.2,.2,.3], _pos, 20, 20, 0, name _x, 0, 0.030, "PuristaBold", "left"]; + }; + }; + nil +} count _nearDudes; diff --git a/addons/map_gestures/functions/fnc_endTransmit.sqf b/addons/map_gestures/functions/fnc_endTransmit.sqf new file mode 100644 index 0000000000..0db082aa65 --- /dev/null +++ b/addons/map_gestures/functions/fnc_endTransmit.sqf @@ -0,0 +1,21 @@ +/* + * Author: MikeMatrix + * Ensure that all variables used to indicate transmission are disabled. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_map_gestures_fnc_endTransmit + * + * Public: No + */ +#include "script_component.hpp" + +if (!GVAR(enabled)) exitWith {}; + +ACE_player setVariable [QGVAR(Transmit), false, true]; +GVAR(EnableTransmit) = false; diff --git a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf new file mode 100644 index 0000000000..eb1b609778 --- /dev/null +++ b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf @@ -0,0 +1,23 @@ +/* + * Author: MikeMatrix + * Returns all players in a given range and in the units vehicle. + * + * Arguments: + * 0: Unit + * 1: Range + * + * Return Value: + * All units in proximity + * + * Example: + * ["example value"] call ace_module_fnc_functionName + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_range"]; + +_proximityPlayers = (getPos _unit) nearEntities [["CAMAnBase"], _range]; +_proximityPlayers = _proximityPlayers - [_unit]; +(_proximityPlayers + (crew vehicle _unit)) diff --git a/addons/map_gestures/functions/fnc_initTransmit.sqf b/addons/map_gestures/functions/fnc_initTransmit.sqf new file mode 100644 index 0000000000..546e5d3c3b --- /dev/null +++ b/addons/map_gestures/functions/fnc_initTransmit.sqf @@ -0,0 +1,21 @@ +/* + * Author: MikeMatrix + * Initializes transmitting map gestures. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_map_gestures_fnc_initTransmit + * + * Public: No + */ +#include "script_component.hpp" + +if (!GVAR(enabled)) exitWith {}; + +GVAR(EnableTransmit) = true; +[FUNC(transmit), GVAR(interval), []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf new file mode 100644 index 0000000000..b51f4b99b4 --- /dev/null +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -0,0 +1,53 @@ +/* + * Author: MikeMatrix + * Initializes Settings for the groups modules and transcodes settings to a useable format. + * + * Arguments: + * 0: Logic + * 1: Units + * 2: Activated + * + * Return Value: + * None + * + * Example: + * [module, [player], true] call ace_map_gestures_fnc_moduleGroupSettings + * + * Public: No + */ +#include "script_component.hpp" + +params ["_logic", "_units", "_activated"]; + +if (!_activated) exitWith {}; +if (!isServer) exitWith {}; + +_leadColor = call compile ("[" + (_logic getVariable ["leadColor", ""]) + "]"); +if (isNil "_leadColor" || !((typeName _leadColor) isEqualTo "ARRAY") || {count _leadColor != 4}) exitWith {}; +_color = call compile ("[" + (_logic getVariable ["color", ""]) + "]"); +if (isNil "_color" || !((typeName _color) isEqualTo "ARRAY") || {count _color != 4}) exitWith {}; + +_configurations = +GVAR(GroupColorConfigurations); +if (isNil "_configurations") then {_configurations = []}; +_configurationIndex = _configurations pushBack [_leadColor, _color]; + +_configurationGroups = +GVAR(GroupColorConfigurationsGroups); +_configurationGroupsIndex = +GVAR(GroupColorConfigurationsGroupIndex); + +if (isNil "_configurationGroups") then {_configurationGroups = [];}; +if (isNil "_configurationGroupsIndex") then {_configurationGroupsIndex = [];}; +_completedGroups = []; +{ + private "_group"; + _group = groupID (group _x); + if (!(_group in _completedGroups)) then { + _index = if (_group in _configurationGroups) then {_configurationGroups find _group} else {_configurationGroups pushBack _group}; + _configurationGroupsIndex set [_index, _configurationIndex]; + _completedGroups pushBack _group; + }; + nil +} count _units; + +[QGVAR(GroupColorConfigurations), _configurations, true, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurationsGroups), _configurationGroups, true, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurationsGroupIndex), _configurationGroupsIndex, true, true] call EFUNC(common,setSetting); diff --git a/addons/map_gestures/functions/fnc_moduleSettings.sqf b/addons/map_gestures/functions/fnc_moduleSettings.sqf new file mode 100644 index 0000000000..d53e118b46 --- /dev/null +++ b/addons/map_gestures/functions/fnc_moduleSettings.sqf @@ -0,0 +1,35 @@ +/* + * Author: MikeMatrix + * Initializes Settings for the module and transcodes settings to a useable format. + * + * Arguments: + * 0: Logic + * 1: Units + * 2: Activated + * + * Return Value: + * None + * + * Example: + * [module, [player], true] call ace_map_gestures_fnc_moduleGroupSettings + * + * Public: No + */ +#include "script_component.hpp" + +params ["_logic", "_units", "_activated"]; + +if (!_activated) exitWith {}; +if (!isServer) exitWith {}; + +[_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(maxRange), "maxRange"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(interval), "interval"] call EFUNC(common,readSettingFromModule); + +_defaultLeadColor = call compile ("[" + (_logic getVariable ["defaultLeadColor", ""]) + "]"); +if (isNil "_leadColor" || !((typeName _leadColor) isEqualTo "ARRAY") || {count _leadColor != 4}) exitWith {}; +[QGVAR(defaultLeadColor), _defaultLeadColor, true, true] call EFUNC(common,setSetting); + +_defaultColor = call compile ("[" + (_logic getVariable ["defaultColor", ""]) + "]"); +if (isNil "_color" || !((typeName _color) isEqualTo "ARRAY") || {count _color != 4}) exitWith {}; +[QGVAR(defaultColor), _defaultColor, true, true] call EFUNC(common,setSetting); diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf new file mode 100644 index 0000000000..44b5bada47 --- /dev/null +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -0,0 +1,32 @@ +/* + * Author: MikeMatrix + * Initializes the receiver and hooks it to the Draw event of the map. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_map_gestures_fnc_receiverInit + * + * Public: No + */ +#include "script_component.hpp" + +{ + if (isPlayer _x) then { + _nameSane = [name _x] call FUNC(sanitizeName); + call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane]; + }; + nil +} count allUnits; + +ACE_player setVariable [QGVAR(Transmit), false, true]; +GVAR(EnableTransmit) = false; + +if (!isNil QGVAR(DrawMapHandlerID)) then { + (findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)]; GVAR(DrawMapHandlerID) = nil; +}; +GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", FUNC(drawMapGestures)]; diff --git a/addons/map_gestures/functions/fnc_sanitizeName.sqf b/addons/map_gestures/functions/fnc_sanitizeName.sqf new file mode 100644 index 0000000000..bafe9d3052 --- /dev/null +++ b/addons/map_gestures/functions/fnc_sanitizeName.sqf @@ -0,0 +1,30 @@ +/* + * Author: MikeMatrix + * Cleans up unit names to be usable within variable names. + * + * Arguments: + * 0: Name + * + * Return Value: + * Sanitized name + * + * Example: + * ["I am a non valid variable name"] call ace_map_gestures_fnc_sanitizeName + * + * Public: No + */ +#include "script_component.hpp" + +private ["_alphabet", "_nameSanitized"]; + +params ["_name"]; + +_alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; + +_nameSanitized = []; +{ + if (toString [_x] in _alphabet) then {_nameSanitized pushBack _x}; + nil +} count (toArray _name); + +toString _nameSanitized diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf new file mode 100644 index 0000000000..9defec2fd8 --- /dev/null +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -0,0 +1,42 @@ +/* + * Author: MikeMatrix + * Transmit PFH + * + * Arguments: + * 0: Arguments + * 1: PFH ID + * + * Return Value: + * Return description + * + * Example: + * [[], 2] call ace_map_gestures_fnc_transmit + * + * Public: No + */ +#include "script_component.hpp" + +private ["_nearDudes", "_ownerID", "_nameSane"]; + +params ["", "_pfhId"]; + +if (!GVAR(EnableTransmit) || !visibleMap) exitWith { + call FUNC(endTransmit); + [_pfhId] call CBA_fnc_removePerFrameHandler; +}; + +_nearDudes = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); +TRACE_1("Near",_nearDudes) + +{ + _ownerID = _x getVariable QGVAR(owner_id); + if (isNil _ownerID) exitWith { + [0, {[_this] call FUNC(assignClientIDOnServer)}, name _x] call cba_fnc_GlobalExecute; + }; + _ownerID = _x getVariable QGVAR(owner_id); + + if (_ownerID != ACE_player getVariable QGVAR(owner_id)) then { + _nameSane = [name ACE_player] call FUNC(sanitizeName); + _ownerID publicVariableClient format [QGVAR(%1_DrawPos), _nameSane]; + }; +} count _nearDudes; diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf new file mode 100644 index 0000000000..3c0cfa7c10 --- /dev/null +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -0,0 +1,59 @@ +/* + * Author: MikeMatrix + * Initializes the transmitting event handlers. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_map_gestures_fnc_transmitterInit + * + * Public: No + */ +#include "script_component.hpp" + +private ["_mapCtrl", "_nameSane"]; + +disableSerialization; + +_mapCtrl = findDisplay 12 displayCtrl 51; + +// MouseMoving EH. +if (!isNil QGVAR(MouseMoveHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseMoving", GVAR(MouseMoveHandlerID)]; GVAR(MouseMoveHandlerID) = nil;}; +GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { + if (EGVAR(maptools,drawing_isDrawing)) exitWith {}; + if (EGVAR(maptools,mapTool_isDragging)) exitWith {}; + if (EGVAR(maptools,mapTool_isRotating)) exitWith {}; + + params ["_control", "_posX", "_posY"]; + + if (GVAR(EnableTransmit)) then { + if (!(ACE_player getVariable QGVAR(Transmit))) then { + ACE_player setVariable [QGVAR(Transmit), true, true]; + }; + + _nameSane = [name ACE_player] call FUNC(sanitizeName); + call compile format [QUOTE(GVAR(%1_DrawPos) = %2), _nameSane, _control ctrlMapScreenToWorld [_posX, _posY]]; + }; +}]; + +// MouseDown EH +if (!isNil QGVAR(MouseDownHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseButtonDown",GVAR(MouseDownHandlerID)]; GVAR(MouseDownHandlerID) = nil;}; +GVAR(MouseDownHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonDown", { + if (!GVAR(enabled)) exitWith {}; + + params ["", "_button"]; + + if (_button == 0) then {call FUNC(initTransmit);}; +}]; + +// MouseUp EH +if (!isNil QGVAR(MouseUpHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseButtonUp", GVAR(MouseUpHandlerID)]; GVAR(MouseUpHandlerID) = nil;}; +GVAR(MouseUpHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonUp", { + params ["", "_button"]; + + if (_button == 0) then {call FUNC(endTransmit);}; +}]; diff --git a/addons/map_gestures/functions/script_component.hpp b/addons/map_gestures/functions/script_component.hpp new file mode 100644 index 0000000000..65841c15f9 --- /dev/null +++ b/addons/map_gestures/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\map_gestures\script_component.hpp" diff --git a/addons/map_gestures/script_component.hpp b/addons/map_gestures/script_component.hpp new file mode 100644 index 0000000000..7c6f3a5b2f --- /dev/null +++ b/addons/map_gestures/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT map_gestures +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MAP_GESTURES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MAP_GESTURES + #define DEBUG_SETTINGS DEBUG_SETTINGS_MAP_GESTURES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml new file mode 100644 index 0000000000..324e9f92e7 --- /dev/null +++ b/addons/map_gestures/stringtable.xml @@ -0,0 +1,95 @@ + + + + + Map Gestures + + + Enabled + + + Map Gesture Max Range + + + Max range between players to show the map gesture indicator [default: 7 meters] + + + Lead Default Alpha + + + Fallback Alpha value for group leaders. + + + Default Alpha + + + Fallback Alpha value. + + + Lead Default Color + + + Fallback Color value for group leaders. + + + Default Color + + + Fallback Color value. + + + Lead Alpha + + + Alpha value for group leaders of groups synced with this module. + + + Alpha + + + Alpha value for group members of groups synced with this module. + + + Lead Color + + + Color value for group leaders of groups synced with this module. + + + Color + + + Color value for group members of groups synced with this module. + + + Map Gestures - Group Settings + + + Update Interval + + + Time between data updates. + + + Group color configurations + + + Group color configuration containing arrays of color pairs ([leadColor, color]). + + + Group color group name index, containing names of groups with configurations attached to them. + + + Group color group name index + + + Group color group name mapping index + + + Group color group name mapping index, mapping the GroupColorConfigurationsGroups to the GroupColorConfigurations. + + + Enables the Map Gestures. + + + From 90e4d005ee663e8976a5ffed1b02c1c11934851c Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 08:45:43 +0200 Subject: [PATCH 03/66] Give credit where credit is due --- AUTHORS.txt | 5 +++-- addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf | 2 +- addons/map_gestures/functions/fnc_drawMapGestures.sqf | 2 +- addons/map_gestures/functions/fnc_endTransmit.sqf | 2 +- addons/map_gestures/functions/fnc_getProximityPlayers.sqf | 2 +- addons/map_gestures/functions/fnc_initTransmit.sqf | 2 +- addons/map_gestures/functions/fnc_moduleGroupSettings.sqf | 2 +- addons/map_gestures/functions/fnc_moduleSettings.sqf | 2 +- addons/map_gestures/functions/fnc_receiverInit.sqf | 2 +- addons/map_gestures/functions/fnc_sanitizeName.sqf | 2 +- addons/map_gestures/functions/fnc_transmit.sqf | 2 +- addons/map_gestures/functions/fnc_transmitterInit.sqf | 2 +- 12 files changed, 14 insertions(+), 13 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 62329d7c1d..711ed6f687 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -50,6 +50,8 @@ Coren Crusty Dharma Bellamkonda Dimaslg +Drill +Dslyecxi eRazeri evromalarkey F3 Project @@ -81,6 +83,7 @@ Macusercom MarcBook meat Michail Nikolaev +MikeMatrix nic547 nikolauska nomisum @@ -106,5 +109,3 @@ Valentin Torikian VyMajoris(W-Cephei) Winter zGuba -Drill -MikeMatrix diff --git a/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf index 129c5066e1..c686c17b79 100644 --- a/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf +++ b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Assign readable client ID to unit on the server. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 0b352418af..b270e3d073 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Receives and draws map gestures from nearby players. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_endTransmit.sqf b/addons/map_gestures/functions/fnc_endTransmit.sqf index 0db082aa65..fc3e0e81e1 100644 --- a/addons/map_gestures/functions/fnc_endTransmit.sqf +++ b/addons/map_gestures/functions/fnc_endTransmit.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Ensure that all variables used to indicate transmission are disabled. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf index eb1b609778..3ac8803a70 100644 --- a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf +++ b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Returns all players in a given range and in the units vehicle. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_initTransmit.sqf b/addons/map_gestures/functions/fnc_initTransmit.sqf index 546e5d3c3b..604bf9e233 100644 --- a/addons/map_gestures/functions/fnc_initTransmit.sqf +++ b/addons/map_gestures/functions/fnc_initTransmit.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Initializes transmitting map gestures. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index b51f4b99b4..569bdd687a 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Initializes Settings for the groups modules and transcodes settings to a useable format. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_moduleSettings.sqf b/addons/map_gestures/functions/fnc_moduleSettings.sqf index d53e118b46..00cfc7288c 100644 --- a/addons/map_gestures/functions/fnc_moduleSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleSettings.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Initializes Settings for the module and transcodes settings to a useable format. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index 44b5bada47..8dfc7de51c 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Initializes the receiver and hooks it to the Draw event of the map. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_sanitizeName.sqf b/addons/map_gestures/functions/fnc_sanitizeName.sqf index bafe9d3052..f36e626102 100644 --- a/addons/map_gestures/functions/fnc_sanitizeName.sqf +++ b/addons/map_gestures/functions/fnc_sanitizeName.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Cleans up unit names to be usable within variable names. * * Arguments: diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index 9defec2fd8..880b21f36e 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Transmit PFH * * Arguments: diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index 3c0cfa7c10..6ba6d0881e 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -1,5 +1,5 @@ /* - * Author: MikeMatrix + * Author: Dslyecxi, MikeMatrix * Initializes the transmitting event handlers. * * Arguments: From b1d3654a97324644b6ac40b2c53a4359a7e1ad21 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 14:54:28 +0200 Subject: [PATCH 04/66] Fixed owner id not getting assigned in map gestures --- addons/map_gestures/functions/fnc_transmit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index 880b21f36e..a87be445bf 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -30,7 +30,7 @@ TRACE_1("Near",_nearDudes) { _ownerID = _x getVariable QGVAR(owner_id); - if (isNil _ownerID) exitWith { + if (isNil "_ownerID") exitWith { [0, {[_this] call FUNC(assignClientIDOnServer)}, name _x] call cba_fnc_GlobalExecute; }; _ownerID = _x getVariable QGVAR(owner_id); From 5788705821442e4cee027664ddac05dad415647b Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 15:24:57 +0200 Subject: [PATCH 05/66] Fixed code style issues and added missing variable initialization in map_gestures --- .../map_gestures/functions/fnc_drawMapGestures.sqf | 13 ++++++------- .../functions/fnc_moduleGroupSettings.sqf | 7 +------ addons/map_gestures/functions/fnc_receiverInit.sqf | 4 ++-- addons/map_gestures/functions/fnc_transmit.sqf | 8 ++++---- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index b270e3d073..05afa9bf0e 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -20,24 +20,23 @@ if (!visibleMap) exitWith {}; params ["_mapHandle"]; -_nearDudes = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); +_proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); { _nameSane = [name _x] call FUNC(sanitizeName); _drawPosVariableName = format [QGVAR(%1_DrawPos), _nameSane]; if (!isNil _drawPosVariableName) then { + if (isNil {call compile _drawPosVariableName}) then {call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane];} _pos = call compile _drawPosVariableName; if (alive _x && - (_pos distance [0, 0, 0]) > 50 && {_x getVariable QGVAR(Transmit)}) then { _group = group _x; _grpName = groupID _group; - _color = [1, 1, 1, 1]; - if (_grpName in GVAR(GroupColorConfigurationsGroups)) then { + _color = if (_grpName in GVAR(GroupColorConfigurationsGroups)) then { _grpNameIndex = GVAR(GroupColorConfigurationsGroups) find _grpName; - _color = (GVAR(GroupColorConfigurations) select (GVAR(GroupColorConfigurationsGroupIndex) select _grpNameIndex)) select (_x != leader _group); + (GVAR(GroupColorConfigurations) select (GVAR(GroupColorConfigurationsGroupIndex) select _grpNameIndex)) select (_x != leader _group) } else { - _color = if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)}; + if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)}; }; _mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, 55, 55, 0, "", 1, 0.030, "PuristaBold", "left"]; @@ -45,4 +44,4 @@ _nearDudes = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); }; }; nil -} count _nearDudes; +} count _proximityPlayers; diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index 569bdd687a..c0158d90c7 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -27,12 +27,7 @@ if (isNil "_leadColor" || !((typeName _leadColor) isEqualTo "ARRAY") || {count _ _color = call compile ("[" + (_logic getVariable ["color", ""]) + "]"); if (isNil "_color" || !((typeName _color) isEqualTo "ARRAY") || {count _color != 4}) exitWith {}; -_configurations = +GVAR(GroupColorConfigurations); -if (isNil "_configurations") then {_configurations = []}; -_configurationIndex = _configurations pushBack [_leadColor, _color]; - -_configurationGroups = +GVAR(GroupColorConfigurationsGroups); -_configurationGroupsIndex = +GVAR(GroupColorConfigurationsGroupIndex); +_configurationGroups = if (isNil QGVAR(GroupColorConfigurationsGroups) then { [] } else { +GVAR(GroupColorConfigurationsGroups) }; if (isNil "_configurationGroups") then {_configurationGroups = [];}; if (isNil "_configurationGroupsIndex") then {_configurationGroupsIndex = [];}; diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index 8dfc7de51c..482572c19e 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -17,8 +17,8 @@ { if (isPlayer _x) then { - _nameSane = [name _x] call FUNC(sanitizeName); - call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane]; + _nameSane = [name _x] call FUNC(sanitizeName); + call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane]; }; nil } count allUnits; diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index a87be445bf..a0ab7bf0bf 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_nearDudes", "_ownerID", "_nameSane"]; +private ["_proximityPlayers", "_ownerID", "_nameSane"]; params ["", "_pfhId"]; @@ -25,8 +25,8 @@ if (!GVAR(EnableTransmit) || !visibleMap) exitWith { [_pfhId] call CBA_fnc_removePerFrameHandler; }; -_nearDudes = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); -TRACE_1("Near",_nearDudes) +_proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); +TRACE_1("Near",_proximityPlayers) { _ownerID = _x getVariable QGVAR(owner_id); @@ -39,4 +39,4 @@ TRACE_1("Near",_nearDudes) _nameSane = [name ACE_player] call FUNC(sanitizeName); _ownerID publicVariableClient format [QGVAR(%1_DrawPos), _nameSane]; }; -} count _nearDudes; +} count _proximityPlayers; From 5e4316d0e214150facde679f52c24149169bef4c Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 16:43:33 +0200 Subject: [PATCH 06/66] Fixed missing semi-colon --- addons/map_gestures/functions/fnc_drawMapGestures.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 05afa9bf0e..877b503b38 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -25,7 +25,7 @@ _proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); _nameSane = [name _x] call FUNC(sanitizeName); _drawPosVariableName = format [QGVAR(%1_DrawPos), _nameSane]; if (!isNil _drawPosVariableName) then { - if (isNil {call compile _drawPosVariableName}) then {call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane];} + if (isNil {call compile _drawPosVariableName}) then {call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane];}; _pos = call compile _drawPosVariableName; if (alive _x && {_x getVariable QGVAR(Transmit)}) then { From 5287455c0b5860fa9bdb67502347326273510629 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 17:07:01 +0200 Subject: [PATCH 07/66] Fixed aborting data transmission on no owner id encounter --- addons/map_gestures/functions/fnc_transmit.sqf | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index a0ab7bf0bf..4d99caa160 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -30,13 +30,12 @@ TRACE_1("Near",_proximityPlayers) { _ownerID = _x getVariable QGVAR(owner_id); - if (isNil "_ownerID") exitWith { + if (isNil "_ownerID") then { [0, {[_this] call FUNC(assignClientIDOnServer)}, name _x] call cba_fnc_GlobalExecute; - }; - _ownerID = _x getVariable QGVAR(owner_id); - - if (_ownerID != ACE_player getVariable QGVAR(owner_id)) then { - _nameSane = [name ACE_player] call FUNC(sanitizeName); - _ownerID publicVariableClient format [QGVAR(%1_DrawPos), _nameSane]; + } else { + if (_ownerID != ACE_player getVariable QGVAR(owner_id)) then { + _nameSane = [name ACE_player] call FUNC(sanitizeName); + _ownerID publicVariableClient format [QGVAR(%1_DrawPos), _nameSane]; + }; }; } count _proximityPlayers; From 3e82391a369894f10e6cfa1dad24959ae6f7ae1b Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 19:04:49 +0200 Subject: [PATCH 08/66] Added validation and various fixes --- addons/map_gestures/XEH_preInit.sqf | 1 + .../functions/fnc_isValidColorArray.sqf | 28 +++++++++++++++++++ .../functions/fnc_moduleGroupSettings.sqf | 13 +++++---- .../functions/fnc_moduleSettings.sqf | 7 +++-- 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 addons/map_gestures/functions/fnc_isValidColorArray.sqf diff --git a/addons/map_gestures/XEH_preInit.sqf b/addons/map_gestures/XEH_preInit.sqf index 08159aa972..ad4da44998 100644 --- a/addons/map_gestures/XEH_preInit.sqf +++ b/addons/map_gestures/XEH_preInit.sqf @@ -7,6 +7,7 @@ PREP(drawMapGestures); PREP(endTransmit); PREP(getProximityPlayers); PREP(initTransmit); +PREP(isValidColorArray); PREP(moduleGroupSettings); PREP(moduleSettings); PREP(receiverInit); diff --git a/addons/map_gestures/functions/fnc_isValidColorArray.sqf b/addons/map_gestures/functions/fnc_isValidColorArray.sqf new file mode 100644 index 0000000000..a64cf249eb --- /dev/null +++ b/addons/map_gestures/functions/fnc_isValidColorArray.sqf @@ -0,0 +1,28 @@ +/* + * Author: MikeMatrix + * Validate if an array is in the propper color format. + * + * Arguments: + * 0: Color Array + * + * Return Value: + * Is valid Color Array + * + * Example: + * [[1, 0.2, 1, 0.5]] call ace_map_gestures_fnc_isValidColorArray + * + * Public: No + */ +#include "script_component.hpp" + +params ["_colorArray"]; + +if (isNil "_colorArray") exitWith {false}; +if ((typeName _colorArray) != "ARRAY") exitWith {false}; +if (count _colorArray != 4) exitWith {false}; + +{ + if ((typeName _x) != "SCALAR" || _x < 0 || _x > 1) exitWith {false}; +} count _colorArray; + +true diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index c0158d90c7..32f7e73143 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -19,19 +19,22 @@ params ["_logic", "_units", "_activated"]; +diag_log "Running"; + if (!_activated) exitWith {}; if (!isServer) exitWith {}; _leadColor = call compile ("[" + (_logic getVariable ["leadColor", ""]) + "]"); -if (isNil "_leadColor" || !((typeName _leadColor) isEqualTo "ARRAY") || {count _leadColor != 4}) exitWith {}; +if (!([_leadColor] call FUNC(isValidColorArray))) exitWith {ERROR("leadColor is not a valid color array.")}; _color = call compile ("[" + (_logic getVariable ["color", ""]) + "]"); -if (isNil "_color" || !((typeName _color) isEqualTo "ARRAY") || {count _color != 4}) exitWith {}; +if (!([_color] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a valid color array.")}; -_configurationGroups = if (isNil QGVAR(GroupColorConfigurationsGroups) then { [] } else { +GVAR(GroupColorConfigurationsGroups) }; +_configurations = if (isNil QGVAR(GroupColorConfigurations)) then { [] } else { +GVAR(GroupColorConfigurations) }; +_configurationGroups = if (isNil QGVAR(GroupColorConfigurationsGroups)) then { [] } else { +GVAR(GroupColorConfigurationsGroups) }; +_configurationGroupsIndex = if (isNil QGVAR(GroupColorConfigurationsGroupIndex)) then { [] } else { +GVAR(GroupColorConfigurationsGroupIndex) }; -if (isNil "_configurationGroups") then {_configurationGroups = [];}; -if (isNil "_configurationGroupsIndex") then {_configurationGroupsIndex = [];}; _completedGroups = []; +_configurationIndex = _configurations pushBack [_leadColor, _color]; { private "_group"; _group = groupID (group _x); diff --git a/addons/map_gestures/functions/fnc_moduleSettings.sqf b/addons/map_gestures/functions/fnc_moduleSettings.sqf index 00cfc7288c..6b21db8588 100644 --- a/addons/map_gestures/functions/fnc_moduleSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleSettings.sqf @@ -27,9 +27,10 @@ if (!isServer) exitWith {}; [_logic, QGVAR(interval), "interval"] call EFUNC(common,readSettingFromModule); _defaultLeadColor = call compile ("[" + (_logic getVariable ["defaultLeadColor", ""]) + "]"); -if (isNil "_leadColor" || !((typeName _leadColor) isEqualTo "ARRAY") || {count _leadColor != 4}) exitWith {}; -[QGVAR(defaultLeadColor), _defaultLeadColor, true, true] call EFUNC(common,setSetting); +if (!([_defaultLeadColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaultLeadColor is not a valid color array.")}; _defaultColor = call compile ("[" + (_logic getVariable ["defaultColor", ""]) + "]"); -if (isNil "_color" || !((typeName _color) isEqualTo "ARRAY") || {count _color != 4}) exitWith {}; +if (!([_defaultColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaultColor is not a valid color array.")}; + +[QGVAR(defaultLeadColor), _defaultLeadColor, true, true] call EFUNC(common,setSetting); [QGVAR(defaultColor), _defaultColor, true, true] call EFUNC(common,setSetting); From a315596c5a83d461aa9da5bbd85876c72ea8fbf1 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 10 Aug 2015 20:32:26 +0200 Subject: [PATCH 09/66] Fixed isValidColorArray returning true when array had the right size, but wrong datatypes/value ranges --- addons/map_gestures/functions/fnc_isValidColorArray.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_isValidColorArray.sqf b/addons/map_gestures/functions/fnc_isValidColorArray.sqf index a64cf249eb..809bbaf117 100644 --- a/addons/map_gestures/functions/fnc_isValidColorArray.sqf +++ b/addons/map_gestures/functions/fnc_isValidColorArray.sqf @@ -15,6 +15,8 @@ */ #include "script_component.hpp" +scopeName "main"; + params ["_colorArray"]; if (isNil "_colorArray") exitWith {false}; @@ -22,7 +24,7 @@ if ((typeName _colorArray) != "ARRAY") exitWith {false}; if (count _colorArray != 4) exitWith {false}; { - if ((typeName _x) != "SCALAR" || _x < 0 || _x > 1) exitWith {false}; + if ((typeName _x) != "SCALAR" || _x < 0 || _x > 1) exitWith {false breakOut "main"}; } count _colorArray; true From 183aac191117d762983d251346d7854693696ee7 Mon Sep 17 00:00:00 2001 From: jokoho48 Date: Fri, 14 Aug 2015 01:55:54 +0200 Subject: [PATCH 10/66] Code cleanup of Kestrel 4500 module. --- addons/kestrel4500/XEH_preInit.sqf | 18 ++++ .../functions/fnc_buttonPressed.sqf | 4 +- addons/kestrel4500/functions/fnc_canShow.sqf | 6 +- .../kestrel4500/functions/fnc_collectData.sqf | 33 +++----- .../functions/fnc_createKestrelDialog.sqf | 4 +- .../functions/fnc_displayKestrel.sqf | 84 +++++++++++-------- .../functions/fnc_generateOutputData.sqf | 40 +++++---- .../functions/fnc_measureWindSpeed.sqf | 3 +- .../functions/fnc_onCloseDialog.sqf | 15 ++++ .../functions/fnc_onCloseDisplay.sqf | 15 ++++ .../functions/fnc_restoreUserData.sqf | 2 +- .../functions/fnc_storeUserData.sqf | 4 +- .../functions/fnc_updateDisplay.sqf | 30 ++----- .../functions/fnc_updateImpellerState.sqf | 4 +- 14 files changed, 150 insertions(+), 112 deletions(-) diff --git a/addons/kestrel4500/XEH_preInit.sqf b/addons/kestrel4500/XEH_preInit.sqf index 7b36167a16..b7d66cbb94 100644 --- a/addons/kestrel4500/XEH_preInit.sqf +++ b/addons/kestrel4500/XEH_preInit.sqf @@ -17,3 +17,21 @@ PREP(updateDisplay); PREP(updateImpellerState); ADDON = true; + +FUNC(updateMemory) = { + params ["_slot", "_value"]; + GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; + GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; + GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value]; +}; + +FUNC(dayOfWeek) = { + private "_table"; + params ["_year", "_month", "_day"]; + + _table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]; + if (_month < 3) then { + _year = _year - 1; + }; + (_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7 +}; diff --git a/addons/kestrel4500/functions/fnc_buttonPressed.sqf b/addons/kestrel4500/functions/fnc_buttonPressed.sqf index 8f38568462..83c471092a 100644 --- a/addons/kestrel4500/functions/fnc_buttonPressed.sqf +++ b/addons/kestrel4500/functions/fnc_buttonPressed.sqf @@ -3,10 +3,10 @@ * Handles the Kestrel 4500 dialog button actions * * Arguments: - * buttonID + * button ID * * Return Value: - * Nothing + * None * * Example: * 2 call ace_kestrel4500_fnc_buttonPressed diff --git a/addons/kestrel4500/functions/fnc_canShow.sqf b/addons/kestrel4500/functions/fnc_canShow.sqf index 0c9e29f9bc..f563138f5c 100644 --- a/addons/kestrel4500/functions/fnc_canShow.sqf +++ b/addons/kestrel4500/functions/fnc_canShow.sqf @@ -3,13 +3,13 @@ * Tests if the Kestrel 4500 can be shown * * Arguments: - * Nothing + * None * * Return Value: - * canShow (bool) + * canShow * * Example: - * [mode] call ace_kestrel4500_fnc_canShow + * call ace_kestrel4500_fnc_canShow * * Public: No */ diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index 244e719b37..2e25fbcf60 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -3,18 +3,19 @@ * Gathers the weather data for the Kestrel 4500 * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_kestrel4500_fnc_collectData * * Public: No */ #include "script_component.hpp" -private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_updateMemory", "_windSpeed", "_crosswind", "_headwind"]; +private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_altitude", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_windSpeed", "_crosswind", "_headwind"]; _playerDir = getDir ACE_player; _playerAltitude = (getPosASL ACE_player) select 2; _temperature = _playerAltitude call EFUNC(weather,calculateTemperatureAtHeight); @@ -35,25 +36,19 @@ if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then { { GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1]; -} forEach [1, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +} count [1, 5, 6, 7, 8, 9, 10, 11, 12, 13]; -_fnc_updateMemory = { - PARAMS_2(_slot,_value); - GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; - GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; - GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value]; -}; -[0, _playerDir] call _fnc_updateMemory; +[0, _playerDir] call FUNC(updateMemory); if (GVAR(MinAvgMaxMode) == 1) then { { GVAR(ENTRIES) set [_x, (GVAR(ENTRIES) select _x) + 1]; - } forEach [2, 3, 4]; + } count [2, 3, 4]; // Wind SPD _windSpeed = call FUNC(measureWindSpeed); - [2, _windSpeed] call _fnc_updateMemory; + [2, _windSpeed] call FUNC(updateMemory); // CROSSWIND _crosswind = 0; @@ -62,7 +57,7 @@ if (GVAR(MinAvgMaxMode) == 1) then { } else { _crosswind = abs(sin(GVAR(RefHeading)) * _windSpeed); }; - [3, _crosswind] call _fnc_updateMemory; + [3, _crosswind] call FUNC(updateMemory); // HEADWIND _headwind = 0; @@ -80,12 +75,4 @@ if (GVAR(MinAvgMaxMode) == 1) then { GVAR(TOTAL) set [4, (GVAR(TOTAL) select 4) + _headwind]; }; -[5, _temperature] call _fnc_updateMemory; -[6, _chill] call _fnc_updateMemory; -[7, _humidity] call _fnc_updateMemory; -[8, _heatIndex] call _fnc_updateMemory; -[9, _dewPoint] call _fnc_updateMemory; -[10, _wetBulb] call _fnc_updateMemory; -[11, _barometricPressure] call _fnc_updateMemory; -[12, _altitude] call _fnc_updateMemory; -[13, _densityAltitude] call _fnc_updateMemory; +{ _x call FUNC(updateMemory); true } count [[5, _temperature],[6, _chill],[7, _humidity],[8, _heatIndex],[9, _dewPoint],[10, _wetBulb],[11, _barometricPressure],[12, _altitude],[13, _densityAltitude]]; diff --git a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf index 289d0825fc..23ca70543b 100644 --- a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf +++ b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf @@ -3,7 +3,7 @@ * Opens the Kestrel 4500 dialog * * Arguments: - * Nothing + * None * * Return Value: * Nothing @@ -29,7 +29,7 @@ createDialog 'Kestrel4500_Display'; GVAR(Kestrel4500) = false; [_this select 1] call CBA_fnc_removePerFrameHandler; }; - + [] call FUNC(updateDisplay); }, 1, _this select 0] call CBA_fnc_addPerFrameHandler; diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 679ecce6af..63a162a7b0 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -3,12 +3,13 @@ * Shows the Kestrel 4500 as rsc title * * Arguments: - * Nothing + * None * * Return Value: * Nothing * * Example: + * call ace_kestrel4500_fnc_displayKestrell * * Public: No */ @@ -50,49 +51,66 @@ if (GVAR(Kestrel4500) && dialog) then { GVAR(Overlay) = true; -[{ +[{ // abort condition if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith { GVAR(Overlay) = false; 3 cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; - + if (ACE_diagTime > GVAR(updateTimer)) then { GVAR(updateTimer) = ACE_diagTime + 1; - + private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); - + 3 cutRsc ["RscKestrel4500", "PLAIN", 1, false]; - - __ctrlTop ctrlSetText (_outputData select 0); - __ctrlCenterBig ctrlSetText (_outputData select 1); - - __ctrlTop ctrlSetText (_outputData select 0); - __ctrlCenterBig ctrlSetText (_outputData select 1); - __ctrlCenter ctrlSetText (_outputData select 2); - - __ctrlCenterLine1Left ctrlSetText (_outputData select 3); - __ctrlCenterLine2Left ctrlSetText (_outputData select 4); - __ctrlCenterLine3Left ctrlSetText (_outputData select 5); + _outputData params [ + "_ctrlTop", + "_ctrlCenterBig", + "_ctrlCenter", + "_ctrlCenterLine1Left", + "_ctrlCenterLine2Left", + "_ctrlCenterLine3Left", + "_ctrlCenterLine1Right", + "_ctrlCenterLine2Right", + "_ctrlCenterLine3Right", + "_ctrlInfoLine1", + "_ctrlInfoLine2", + "_ctrlBottomBig", + "_ctrlCenterLine1", + "_ctrlCenterLine2", + "_ctrlCenterLine3", + "_ctrlCenterLine4", + "_ctrlCenterLine5", + "_ctrlCenterLine6" + ]; - __ctrlCenterLine1Right ctrlSetText (_outputData select 6); - __ctrlCenterLine2Right ctrlSetText (_outputData select 7); - __ctrlCenterLine3Right ctrlSetText (_outputData select 8); + __ctrlTop ctrlSetText _ctrlTop; + __ctrlCenterBig ctrlSetText _ctrlCenterBig; + __ctrlCenter ctrlSetText _ctrlCenter; + + __ctrlCenterLine1Left ctrlSetText _ctrlCenterLine1Left; + __ctrlCenterLine2Left ctrlSetText _ctrlCenterLine2Left; + __ctrlCenterLine3Left ctrlSetText _ctrlCenterLine3Left; + + __ctrlCenterLine1Right ctrlSetText _ctrlCenterLine1Right; + __ctrlCenterLine2Right ctrlSetText _ctrlCenterLine2Right; + __ctrlCenterLine3Right ctrlSetText _ctrlCenterLine3Right; + + __ctrlInfoLine1 ctrlSetText _ctrlInfoLine1; + __ctrlInfoLine2 ctrlSetText _ctrlInfoLine2; + + __ctrlBottomBig ctrlSetText _ctrlBottomBig ; + + __ctrlCenterLine1 ctrlSetText _ctrlCenterLine1; + __ctrlCenterLine2 ctrlSetText _ctrlCenterLine2; + __ctrlCenterLine3 ctrlSetText _ctrlCenterLine3; + __ctrlCenterLine4 ctrlSetText _ctrlCenterLine4; + __ctrlCenterLine5 ctrlSetText _ctrlCenterLine5; + __ctrlCenterLine6 ctrlSetText _ctrlCenterLine6; - __ctrlInfoLine1 ctrlSetText (_outputData select 9); - __ctrlInfoLine2 ctrlSetText (_outputData select 10); - - __ctrlBottomBig ctrlSetText (_outputData select 11); - - __ctrlCenterLine1 ctrlSetText (_outputData select 12); - __ctrlCenterLine2 ctrlSetText (_outputData select 13); - __ctrlCenterLine3 ctrlSetText (_outputData select 14); - __ctrlCenterLine4 ctrlSetText (_outputData select 15); - __ctrlCenterLine5 ctrlSetText (_outputData select 16); - __ctrlCenterLine6 ctrlSetText (_outputData select 17); - if (GVAR(referenceHeadingMenu) == 1) then { if (GVAR(referenceHeadingAutoSet)) then { __ctrlCenterLine3 ctrlSetTextColor [0, 0, 0, 0.6]; @@ -106,10 +124,10 @@ GVAR(Overlay) = true; __ctrlCenterLine4 ctrlSetTextColor [0, 0, 0, 1.0]; }; }; - + call FUNC(updateImpellerState); __ctrlKestrel4500 ctrlSetText format [QUOTE(PATHTOF(UI\Kestrel4500_%1.paa)), floor(GVAR(ImpellerState) % 7)]; - + }, 0.01, []] call CBA_fnc_addPerFrameHandler; true diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index d61a1f48e4..de62da31ff 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -3,12 +3,29 @@ * Generates the Kestrel 4500 output text. * * Arguments: - * Nothing + * None * * Return Value: - * [top , centerBig , CenterLine1Left , CenterLine2Left , CenterLine3Left , CenterLine1Right , CenterLine2Right , CenterLine3Right , InfoLine1 , InfoLine2 ] + * 0: top + * 1: centerBig + * 2: CenterLine1Left + * 3: CenterLine2Left + * 4: CenterLine3Left + * 5: CenterLine1Right + * 6: CenterLine2Right + * 7: CenterLine3Right + * 8: InfoLine1 + * 9: InfoLine2 + * 10: Bottom Big + * 11: Center Line 1 + * 11: Center Line 2 + * 12: Center Line 3 + * 13: Center Line 4 + * 14: Center Line 5 + * 15: Center Line 6 * * Example: + * _var = call ace_kestrell4500_fnc_generateOutputData * * Public: No */ @@ -16,7 +33,7 @@ if (ACE_diagTime - GVAR(headingSetDisplayTimer) < 0.8) exitWith {["", "", " Heading Set", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]}; -private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_fnc_dayOfWeek", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"]; +private ["_playerDir", "_playerAltitude", "_temperature", "_humidity", "_barometricPressure", "_airDensity", "_densityAltitude", "_chill", "_heatIndex", "_dewPoint", "_wetBulb", "_dayString", "_monthString", "_windSpeed", "_windDir", "_textTop", "_textCenterBig", "_textCenter", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_textBottomBig", "_textCenterLine1", "_textCenterLine2", "_textCenterLine3", "_textCenterLine4", "_textCenterLine5", "_textCenterLine6"]; [] call FUNC(collectData); @@ -59,19 +76,6 @@ _heatIndex = [_temperature, _humidity] call EFUNC(weather,calculateHeatIndex); _dewPoint = [_temperature, _humidity] call EFUNC(weather,calculateDewPoint); _wetBulb = [_temperature, _barometricPressure, _humidity] call EFUNC(weather,calculateWetBulb); -_fnc_dayOfWeek = { - private ["_year", "_month", "_day", "_table"]; - _year = _this select 0; - _month = _this select 1; - _day = _this select 2; - - _table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]; - if (_month < 3) then { - _year = _year - 1; - }; - (_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7 -}; - GVAR(Direction) = 4 * floor(_playerDir / 90); if (_playerDir % 90 > 10) then { GVAR(Direction) = GVAR(Direction) + 1}; if (_playerDir % 90 > 35) then { GVAR(Direction) = GVAR(Direction) + 1}; @@ -82,8 +86,8 @@ GVAR(Direction) = GVAR(Direction) % 16; if (GVAR(referenceHeadingMenu) == 0) then { switch (GVAR(Menu)) do { case 0: { // Date - EXPLODE_3_PVT(date,_year,_month,_day); - _dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call _fnc_dayOfWeek); + date params ["_year", "_month", "_day"]; + _dayString = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] select (date call FUNC(dayOfWeek)); _monthString = localize (["str_january","str_february","str_march","str_april","str_may","str_june","str_july","str_august","str_september","str_october","str_november","str_december"] select (_month - 1)); _textTop = _dayString; _textCenter = format["%1 %2 %3", _day, _monthString, _year]; diff --git a/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf b/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf index 73b4e228d6..2a8a4bbbb3 100644 --- a/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf +++ b/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf @@ -3,12 +3,13 @@ * Measures the wind speed, stores the information in GVAR(MeasuredWindSpeed) and updates GVAR(ImpellerState) * * Arguments: - * Nothing + * None * * Return Value: * wind speed * * Example: + * call ace_kestrel4500_fnc_canShow * * Public: No */ diff --git a/addons/kestrel4500/functions/fnc_onCloseDialog.sqf b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf index a45a9decc3..11fa76ff18 100644 --- a/addons/kestrel4500/functions/fnc_onCloseDialog.sqf +++ b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf @@ -1,3 +1,18 @@ +/* + * Author: Ruthberg + * Called if Kestrell Dialog is closed + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_kestrel4500_fnc_onCloseDialog + * + * Public: No + */ #include "script_component.hpp" uiNamespace setVariable ['Kestrel4500_Display', nil]; diff --git a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf index efb60b322a..9228aedcef 100644 --- a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf +++ b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf @@ -1,3 +1,18 @@ +/* + * Author: Ruthberg + * Called if Kestrell Display is closed + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_kestrel4500_fnc_onCloseDisplay + * + * Public: No + */ #include "script_component.hpp" uiNamespace setVariable ['RscKestrel4500', nil]; diff --git a/addons/kestrel4500/functions/fnc_restoreUserData.sqf b/addons/kestrel4500/functions/fnc_restoreUserData.sqf index 0ce463ad67..c1d9c0ebb3 100644 --- a/addons/kestrel4500/functions/fnc_restoreUserData.sqf +++ b/addons/kestrel4500/functions/fnc_restoreUserData.sqf @@ -6,7 +6,7 @@ * Nothing * * Return Value: - * Nothing + * None * * Example: * call ace_kestrel4500_fnc_restore_user_data diff --git a/addons/kestrel4500/functions/fnc_storeUserData.sqf b/addons/kestrel4500/functions/fnc_storeUserData.sqf index a5d069b31d..80fa219a3c 100644 --- a/addons/kestrel4500/functions/fnc_storeUserData.sqf +++ b/addons/kestrel4500/functions/fnc_storeUserData.sqf @@ -3,10 +3,10 @@ * Saves user data into profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_kestrel4500_fnc_store_user_data diff --git a/addons/kestrel4500/functions/fnc_updateDisplay.sqf b/addons/kestrel4500/functions/fnc_updateDisplay.sqf index 90f77f5f6a..e63b18bcfc 100644 --- a/addons/kestrel4500/functions/fnc_updateDisplay.sqf +++ b/addons/kestrel4500/functions/fnc_updateDisplay.sqf @@ -3,10 +3,10 @@ * Updates the Kestrel 4500 dialog text boxes. * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * @@ -22,29 +22,9 @@ private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); -ctrlSetText [74100, _outputData select 0]; -ctrlSetText [74200, _outputData select 1]; -ctrlSetText [74201, _outputData select 2]; - -ctrlSetText [74300, _outputData select 3]; -ctrlSetText [74301, _outputData select 4]; -ctrlSetText [74302, _outputData select 5]; - -ctrlSetText [74303, _outputData select 6]; -ctrlSetText [74304, _outputData select 7]; -ctrlSetText [74305, _outputData select 8]; - -ctrlSetText [74400, _outputData select 9]; -ctrlSetText [74401, _outputData select 10]; - -ctrlSetText [74500, _outputData select 11]; - -ctrlSetText [74600, _outputData select 12]; -ctrlSetText [74601, _outputData select 13]; -ctrlSetText [74602, _outputData select 14]; -ctrlSetText [74603, _outputData select 15]; -ctrlSetText [74604, _outputData select 16]; -ctrlSetText [74605, _outputData select 17]; +{ + ctrlSetText [_x , _outputData select _foreachindex]; +} forEach [74100, 74200, 74201, 74300, 74301, 74302, 74303, 74304, 74305, 74400, 74401, 74500, 74600, 74601, 74602, 74603, 74604, 74605]; if (GVAR(referenceHeadingMenu) == 1) then { if (GVAR(referenceHeadingAutoSet)) then { diff --git a/addons/kestrel4500/functions/fnc_updateImpellerState.sqf b/addons/kestrel4500/functions/fnc_updateImpellerState.sqf index 075ed80080..75a0d10f4c 100644 --- a/addons/kestrel4500/functions/fnc_updateImpellerState.sqf +++ b/addons/kestrel4500/functions/fnc_updateImpellerState.sqf @@ -3,10 +3,10 @@ * Updates the Kestrel 4500 Impeller state * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * From 84685f4a84d22a130f5d583ef24eabe7a36f5055 Mon Sep 17 00:00:00 2001 From: jokoho48 Date: Fri, 14 Aug 2015 02:22:15 +0200 Subject: [PATCH 11/66] add dayOfWeek and updateMemory to Own File Update some Comments Fixing Spelling Issue --- addons/kestrel4500/XEH_preInit.sqf | 21 ++-------------- .../functions/fnc_createKestrelDialog.sqf | 3 ++- .../kestrel4500/functions/fnc_dayOfWeek.sqf | 25 +++++++++++++++++++ .../functions/fnc_displayKestrel.sqf | 4 +-- .../functions/fnc_generateOutputData.sqf | 2 +- .../functions/fnc_onCloseDialog.sqf | 2 +- .../functions/fnc_onCloseDisplay.sqf | 2 +- .../functions/fnc_updateMemory.sqf | 20 +++++++++++++++ .../functions/script_component.hpp | 2 +- 9 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 addons/kestrel4500/functions/fnc_dayOfWeek.sqf create mode 100644 addons/kestrel4500/functions/fnc_updateMemory.sqf diff --git a/addons/kestrel4500/XEH_preInit.sqf b/addons/kestrel4500/XEH_preInit.sqf index b7d66cbb94..b89f07173f 100644 --- a/addons/kestrel4500/XEH_preInit.sqf +++ b/addons/kestrel4500/XEH_preInit.sqf @@ -15,23 +15,6 @@ PREP(restoreUserData); PREP(storeUserData); PREP(updateDisplay); PREP(updateImpellerState); - +PREP(updateMemory); +PREP(dayOfWeek) ADDON = true; - -FUNC(updateMemory) = { - params ["_slot", "_value"]; - GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; - GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; - GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value]; -}; - -FUNC(dayOfWeek) = { - private "_table"; - params ["_year", "_month", "_day"]; - - _table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]; - if (_month < 3) then { - _year = _year - 1; - }; - (_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7 -}; diff --git a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf index 23ca70543b..a11982968c 100644 --- a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf +++ b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf @@ -6,9 +6,10 @@ * None * * Return Value: - * Nothing + * None * * Example: + * call ace_kestrel4500_fnc_createKestrelDialog * * Public: No */ diff --git a/addons/kestrel4500/functions/fnc_dayOfWeek.sqf b/addons/kestrel4500/functions/fnc_dayOfWeek.sqf new file mode 100644 index 0000000000..9e142f661c --- /dev/null +++ b/addons/kestrel4500/functions/fnc_dayOfWeek.sqf @@ -0,0 +1,25 @@ +/* + * Author: Ruthberg + * Calculate Current Day in the Week + * + * Arguments: + * 0: Year + * 1: Month + * 2: Day + * + * Return Value: + * Day of The Week + * + * Example: + * [1995, 10, 21] call ace_kestrel4500_fnc_buttonPressed + * + * Public: No + */ +private "_table"; +params ["_year", "_month", "_day"]; + +_table = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]; +if (_month < 3) then { + _year = _year - 1; +}; +(_year + floor(_year/4) - floor(_year/100) + floor(_year/400) + (_table select (_month - 1)) + _day) % 7 diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 63a162a7b0..770347ec71 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -6,10 +6,10 @@ * None * * Return Value: - * Nothing + * None * * Example: - * call ace_kestrel4500_fnc_displayKestrell + * call ace_kestrel4500_fnc_displayKestrel * * Public: No */ diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index de62da31ff..016baebef7 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -25,7 +25,7 @@ * 15: Center Line 6 * * Example: - * _var = call ace_kestrell4500_fnc_generateOutputData + * _var = call ace_kestrel4500_fnc_generateOutputData * * Public: No */ diff --git a/addons/kestrel4500/functions/fnc_onCloseDialog.sqf b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf index 11fa76ff18..2474f30d94 100644 --- a/addons/kestrel4500/functions/fnc_onCloseDialog.sqf +++ b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf @@ -1,6 +1,6 @@ /* * Author: Ruthberg - * Called if Kestrell Dialog is closed + * Called if Kestrel Dialog is closed * * Arguments: * None diff --git a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf index 9228aedcef..bdc701ddb1 100644 --- a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf +++ b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf @@ -1,6 +1,6 @@ /* * Author: Ruthberg - * Called if Kestrell Display is closed + * Called if Kestrel Display is closed * * Arguments: * None diff --git a/addons/kestrel4500/functions/fnc_updateMemory.sqf b/addons/kestrel4500/functions/fnc_updateMemory.sqf new file mode 100644 index 0000000000..f38e9ee6df --- /dev/null +++ b/addons/kestrel4500/functions/fnc_updateMemory.sqf @@ -0,0 +1,20 @@ +/* + * Author: Ruthberg + * Update Memory of Kestrel + * + * Arguments: + * 0: Slot + * 1: Value + * + * Return Value: + * None + * + * Example: + * [1, "test"] call ace_kestrel4500_fnc_updateMemory + * + * Public: No + */ +params ["_slot", "_value"]; +GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; +GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; +GVAR(TOTAL) set [_slot, (GVAR(TOTAL) select _slot) + _value]; diff --git a/addons/kestrel4500/functions/script_component.hpp b/addons/kestrel4500/functions/script_component.hpp index 32c774cd89..bc42218de7 100644 --- a/addons/kestrel4500/functions/script_component.hpp +++ b/addons/kestrel4500/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\addons\kestrel4500\script_component.hpp" \ No newline at end of file +#include "\z\ace\addons\kestrel4500\script_component.hpp" From c3c39150a303299f4f6cfdbccbb1130d2ce4f6f2 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Sat, 15 Aug 2015 12:12:41 +0200 Subject: [PATCH 12/66] Improved handling of accessing dynamic variable names --- addons/map_gestures/functions/fnc_drawMapGestures.sqf | 4 ++-- addons/map_gestures/functions/fnc_receiverInit.sqf | 2 +- addons/map_gestures/functions/fnc_transmitterInit.sqf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 877b503b38..54efd878ce 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -25,8 +25,8 @@ _proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); _nameSane = [name _x] call FUNC(sanitizeName); _drawPosVariableName = format [QGVAR(%1_DrawPos), _nameSane]; if (!isNil _drawPosVariableName) then { - if (isNil {call compile _drawPosVariableName}) then {call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane];}; - _pos = call compile _drawPosVariableName; + if (isNil {missionNamespace getVariable _drawPosVariableName}) then {missionNamespace setVariable [_drawPosVariableName, [1, 1, 1]];}; + _pos = missionNamespace getVariable _drawPosVariableName; if (alive _x && {_x getVariable QGVAR(Transmit)}) then { _group = group _x; diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index 482572c19e..719e5a727b 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -18,7 +18,7 @@ { if (isPlayer _x) then { _nameSane = [name _x] call FUNC(sanitizeName); - call compile format [QUOTE(GVAR(%1_DrawPos) = [ARR_3(1,1,1)];), _nameSane]; + missionNamespace setVariable [format [QGVAR(%1_DrawPos), _nameSane], [1, 1, 1]]; }; nil } count allUnits; diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index 6ba6d0881e..828261e017 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -36,7 +36,7 @@ GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { }; _nameSane = [name ACE_player] call FUNC(sanitizeName); - call compile format [QUOTE(GVAR(%1_DrawPos) = %2), _nameSane, _control ctrlMapScreenToWorld [_posX, _posY]]; + missionNamespace setVariable [format [QGVAR(%1_DrawPos), _nameSane], _control ctrlMapScreenToWorld [_posX, _posY]]; }; }]; From 3646654ff3b4bac29d137cb7fd733e9370ddb2ea Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Sat, 15 Aug 2015 12:21:40 +0200 Subject: [PATCH 13/66] Added module icons --- addons/map_gestures/CfgVehicles.hpp | 2 ++ .../ui/icon_module_map_gestures_ca.paa | Bin 0 -> 5625 bytes 2 files changed, 2 insertions(+) create mode 100644 addons/map_gestures/ui/icon_module_map_gestures_ca.paa diff --git a/addons/map_gestures/CfgVehicles.hpp b/addons/map_gestures/CfgVehicles.hpp index 30204629a8..f5c2ae8f38 100644 --- a/addons/map_gestures/CfgVehicles.hpp +++ b/addons/map_gestures/CfgVehicles.hpp @@ -7,6 +7,7 @@ class CfgVehicles { function = QFUNC(moduleSettings); isGlobal = 0; author = ECSTRING(common,ACETeam); + icon = PATHTOF(ui\icon_module_map_gestures_ca.paa); class Arguments { class enabled { displayName = CSTRING(enabled_DisplayName); @@ -46,6 +47,7 @@ class CfgVehicles { function = QFUNC(moduleGroupSettings); isGlobal = 0; author = ECSTRING(common,ACETeam); + icon = PATHTOF(ui\icon_module_map_gestures_ca.paa); class Arguments { class leadColor { displayName = CSTRING(leadColor_displayName); diff --git a/addons/map_gestures/ui/icon_module_map_gestures_ca.paa b/addons/map_gestures/ui/icon_module_map_gestures_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..2d2bcbdf07e0bd88e5158a22bdccdbca6a570df1 GIT binary patch literal 5625 zcmd^@eN0nV6u=Lq4jD?Ba~emTb=0^;jL9&?=^PJdpcRnm3^Un?QekWwL6?QNIoHQD zVU9%@NN@(k!5<`=$Vax9Y|gc^{jsP+Bz~ZE>gJ3(tW;n{S?k-qub%r}AEAW|{+Tar z(qHen=j)z(-+6C>n3|fr=C#zUWGw&;4i3IA@!I4J$|AWarzWSTP!1zs%5S8kWOC#; zPrfBF0DGnaR6PT5nS4igaliq@5JUcH)FA!!U)itCAHZ1X6M@qh$%pv|k>&Kmc#Qog z>Ug91Q-wV!H(DwJSZgWQ4rf1P{6ruyo}u~!?Qs=>tco8%V;~>&M{Pe84_R+8Yv>%* zCxS)Il1etN%D>v)Q2l}Hsg@7LqI&)P6IlFycgmIPMI?f-%K!0Se-c0Oh~*DRafRYw z_3vN*Kz(G%0`v!Enm}cKNb#HHdZ(lGQs^ru^*?NW{nAQ#`p@w4q1TJni|o&%^&i%L zXnksbNdAN7=l?#g&d1}$G+KILefw$ToZvQXoaeFj;e3}T%uRpOOVaC7ou4Z1b~`g^e6pB(!G;OUI(&yh1u#9Han4BAk^-9 zu;pvyxXU$rV{)yf$n!fZa-F+sW004gfx>Q+H4a&S$L5=E>(56X>v%@1ub`U*f2Hst z`m?k{=WT2BT||y*5c1+u3SUKDb$8OoU9ECH)b?JuZrw=YU4Zh2mV_xszkPW-a_OMW zohlC0A?xVIp){O>3AB&JPQxGZcyUB5 zDP|#O3F_bd;Fl(^_bNqczt_XI`nhRs?EVyaHp|*$dM6gg|A1=EWydP!uMaGzmPc)E zz;Q!<voi_8*XoA>&7*xs&NzR{G$o_)i%fmh5#yTD@_bW-ju0ulGv_gq*j8_gMU5 zL%5OG#2e85axk|V(`A33mezM4Ti-eTS4z%DIS!+IZ0AbH$;O$iUS_;)&Q+cl8X(OG zDRGq7b)IN?cuU9j+seDeGcPv!F5&oi#~MEnC#_c$bu2ztk0p@Zx%Y#PtL4=!zFw*9*Q#7e}Giy8b#~^oJ7Vkj)bB;fCaGGE}ioEFht^5NWQLi9t zrDJU5ZAzphFSiAY?kxHB^syRNpWnfuxc-v;;i&(4yRczN$02s?8a`8KD{H+jtx@EYLz3y*pXqJYYZo@=CD<$4f3w0?qem2!Ob-z77po)q<|?8T5* zf#fA4M;0_Evo{Cb=IsNvx`C}p$OhilI$NlWM<(*KoS9Qt8aPLB7+9=Md3-Br@aic_ zVQ`M!q!N1VGLt>4kXLtucZ_+b9xmQlgYtjD2UXABK9h~Sn1+#|Sk_$7^5o>eaos@i zo19{sL=WtY;uXC9aC3&U#mD3)!bJL7^k)3p*;(zIbg1Sxu77{ijwnfvBps%GRg_nq la*pjrV`b^Fwte14l-H6ImE<%1$nMXJu6(fu|E5y`{sk(+gCGC^ literal 0 HcmV?d00001 From 7217d5ec10ffdf14fb08d1b305b86793ca98477e Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 17:03:47 +0200 Subject: [PATCH 14/66] Various code cleanups and switch to player UIDs instead of sanitized names --- addons/map_gestures/CfgEventHandlers.hpp | 1 + addons/map_gestures/XEH_preInit.sqf | 1 - addons/map_gestures/XEH_serverPostInit.sqf | 3 ++ .../functions/fnc_assignClientIDOnServer.sqf | 2 +- .../functions/fnc_drawMapGestures.sqf | 35 +++++++++++++------ .../functions/fnc_getProximityPlayers.sqf | 5 +-- .../functions/fnc_moduleGroupSettings.sqf | 12 ++++--- .../functions/fnc_receiverInit.sqf | 8 ----- .../functions/fnc_sanitizeName.sqf | 30 ---------------- .../map_gestures/functions/fnc_transmit.sqf | 24 +++++++------ .../functions/fnc_transmitterInit.sqf | 22 ++++++------ addons/map_gestures/script_component.hpp | 2 ++ 12 files changed, 67 insertions(+), 78 deletions(-) create mode 100644 addons/map_gestures/XEH_serverPostInit.sqf delete mode 100644 addons/map_gestures/functions/fnc_sanitizeName.sqf diff --git a/addons/map_gestures/CfgEventHandlers.hpp b/addons/map_gestures/CfgEventHandlers.hpp index e75956f440..7e0c8d2ce3 100644 --- a/addons/map_gestures/CfgEventHandlers.hpp +++ b/addons/map_gestures/CfgEventHandlers.hpp @@ -7,5 +7,6 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_postInit)); + serverInit = QUOTE(call COMPILE_FILE(XEH_serverPostInit)); }; }; diff --git a/addons/map_gestures/XEH_preInit.sqf b/addons/map_gestures/XEH_preInit.sqf index ad4da44998..8154106fd6 100644 --- a/addons/map_gestures/XEH_preInit.sqf +++ b/addons/map_gestures/XEH_preInit.sqf @@ -11,7 +11,6 @@ PREP(isValidColorArray); PREP(moduleGroupSettings); PREP(moduleSettings); PREP(receiverInit); -PREP(sanitizeName); PREP(transmit); PREP(transmitterInit); diff --git a/addons/map_gestures/XEH_serverPostInit.sqf b/addons/map_gestures/XEH_serverPostInit.sqf new file mode 100644 index 0000000000..9bbf84911e --- /dev/null +++ b/addons/map_gestures/XEH_serverPostInit.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +[MAP_GESTURES_NO_OWNER_ID_EVENT, FUNC(assignClientIDOnServer)] call EFUNC(common,addEventHandler) diff --git a/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf index c686c17b79..92b1e95ab5 100644 --- a/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf +++ b/addons/map_gestures/functions/fnc_assignClientIDOnServer.sqf @@ -18,7 +18,7 @@ params ["_unitName"]; { - if (name _x == _unitName) then { + if (name _x == _unitName) exitWith { _x setVariable [QGVAR(owner_id), owner _x, true]; }; } count playableUnits; diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 54efd878ce..31c41ca995 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -15,23 +15,35 @@ */ #include "script_component.hpp" -if (!GVAR(enabled)) exitWith {}; -if (!visibleMap) exitWith {}; +#define ICON_RENDER_SIZE 55 +#define ICON_TEXT_ALIGN "left" +#define ICON_ANGLE 0 +#define ICON_SHADOW 1 +#define TEXT_FONT "PuristaBold" +#define TEXT_ICON_RENDER_SIZE 20 +#define TEXT_SIZE 0.030 +#define TEXT_SHADOW 0 + +if (!GVAR(enabled) || !visibleMap) exitWith {}; params ["_mapHandle"]; -_proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); +// Iterate over all nearby players and render their pointer if player is transmitting. { - _nameSane = [name _x] call FUNC(sanitizeName); - _drawPosVariableName = format [QGVAR(%1_DrawPos), _nameSane]; - if (!isNil _drawPosVariableName) then { + // Data variable name for unit + _unitUID = getPlayerUID _x; + _drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil}; + + if (!isNil "_drawPosVariableName") then { if (isNil {missionNamespace getVariable _drawPosVariableName}) then {missionNamespace setVariable [_drawPosVariableName, [1, 1, 1]];}; _pos = missionNamespace getVariable _drawPosVariableName; - if (alive _x && - {_x getVariable QGVAR(Transmit)}) then { + + // Only render if the unit is alive and transmitting + if (alive _x && {_x getVariable QGVAR(Transmit)}) then { _group = group _x; _grpName = groupID _group; + // If color settings for the group exist, then use those, otherwise fall back to the default colors _color = if (_grpName in GVAR(GroupColorConfigurationsGroups)) then { _grpNameIndex = GVAR(GroupColorConfigurationsGroups) find _grpName; (GVAR(GroupColorConfigurations) select (GVAR(GroupColorConfigurationsGroupIndex) select _grpNameIndex)) select (_x != leader _group) @@ -39,9 +51,10 @@ _proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)}; }; - _mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, 55, 55, 0, "", 1, 0.030, "PuristaBold", "left"]; - _mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", [.2,.2,.2,.3], _pos, 20, 20, 0, name _x, 0, 0.030, "PuristaBold", "left"]; + // Render icon and player name + _mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, ICON_RENDER_SIZE, ICON_RENDER_SIZE, ICON_ANGLE, "", ICON_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN]; + _mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", [.2,.2,.2,.3], _pos, TEXT_ICON_RENDER_SIZE, TEXT_ICON_RENDER_SIZE, ICON_ANGLE, name _x, TEXT_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN]; }; }; nil -} count _proximityPlayers; +} count ([ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers)); diff --git a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf index 3ac8803a70..43d78f3506 100644 --- a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf +++ b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf @@ -19,5 +19,6 @@ params ["_unit", "_range"]; _proximityPlayers = (getPos _unit) nearEntities [["CAMAnBase"], _range]; -_proximityPlayers = _proximityPlayers - [_unit]; -(_proximityPlayers + (crew vehicle _unit)) +_proximityPlayers deleteAt (_proximityPlayers find _unit); +_proximityPlayers append (crew vehicle _unit) +_proximityPlayers diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index 32f7e73143..013f076347 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -19,22 +19,24 @@ params ["_logic", "_units", "_activated"]; -diag_log "Running"; - -if (!_activated) exitWith {}; -if (!isServer) exitWith {}; +if (!_activated || !isServer) exitWith {}; +// Transcode string setting into usable array. Example: "1,1,1,1" -> [1, 1, 1, 1] _leadColor = call compile ("[" + (_logic getVariable ["leadColor", ""]) + "]"); if (!([_leadColor] call FUNC(isValidColorArray))) exitWith {ERROR("leadColor is not a valid color array.")}; _color = call compile ("[" + (_logic getVariable ["color", ""]) + "]"); if (!([_color] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a valid color array.")}; +// If we already have color configurations from another source, use those, otherwise use default. _configurations = if (isNil QGVAR(GroupColorConfigurations)) then { [] } else { +GVAR(GroupColorConfigurations) }; _configurationGroups = if (isNil QGVAR(GroupColorConfigurationsGroups)) then { [] } else { +GVAR(GroupColorConfigurationsGroups) }; _configurationGroupsIndex = if (isNil QGVAR(GroupColorConfigurationsGroupIndex)) then { [] } else { +GVAR(GroupColorConfigurationsGroupIndex) }; -_completedGroups = []; +// Save custom color configuration and keep the index of the entry. _configurationIndex = _configurations pushBack [_leadColor, _color]; + +// Add all synchronized groups and reference custom configuration for them +_completedGroups = []; { private "_group"; _group = groupID (group _x); diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index 719e5a727b..a14efbffc1 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -15,14 +15,6 @@ */ #include "script_component.hpp" -{ - if (isPlayer _x) then { - _nameSane = [name _x] call FUNC(sanitizeName); - missionNamespace setVariable [format [QGVAR(%1_DrawPos), _nameSane], [1, 1, 1]]; - }; - nil -} count allUnits; - ACE_player setVariable [QGVAR(Transmit), false, true]; GVAR(EnableTransmit) = false; diff --git a/addons/map_gestures/functions/fnc_sanitizeName.sqf b/addons/map_gestures/functions/fnc_sanitizeName.sqf deleted file mode 100644 index f36e626102..0000000000 --- a/addons/map_gestures/functions/fnc_sanitizeName.sqf +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Author: Dslyecxi, MikeMatrix - * Cleans up unit names to be usable within variable names. - * - * Arguments: - * 0: Name - * - * Return Value: - * Sanitized name - * - * Example: - * ["I am a non valid variable name"] call ace_map_gestures_fnc_sanitizeName - * - * Public: No - */ -#include "script_component.hpp" - -private ["_alphabet", "_nameSanitized"]; - -params ["_name"]; - -_alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; - -_nameSanitized = []; -{ - if (toString [_x] in _alphabet) then {_nameSanitized pushBack _x}; - nil -} count (toArray _name); - -toString _nameSanitized diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index 4d99caa160..56adbe4266 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -16,26 +16,30 @@ */ #include "script_component.hpp" -private ["_proximityPlayers", "_ownerID", "_nameSane"]; +private ["_proximityPlayers", "_ownerID", "_unitUID", "_drawPosVariableName"]; params ["", "_pfhId"]; -if (!GVAR(EnableTransmit) || !visibleMap) exitWith { +if (!visibleMap) then { call FUNC(endTransmit); +} + +if (!GVAR(EnableTransmit) || !visibleMap) exitWith { [_pfhId] call CBA_fnc_removePerFrameHandler; }; -_proximityPlayers = [ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers); -TRACE_1("Near",_proximityPlayers) - { _ownerID = _x getVariable QGVAR(owner_id); if (isNil "_ownerID") then { - [0, {[_this] call FUNC(assignClientIDOnServer)}, name _x] call cba_fnc_GlobalExecute; + [MAP_GESTURES_NO_OWNER_ID_EVENT, [name _x]] call EFUNC(common,serverEvent); } else { - if (_ownerID != ACE_player getVariable QGVAR(owner_id)) then { - _nameSane = [name ACE_player] call FUNC(sanitizeName); - _ownerID publicVariableClient format [QGVAR(%1_DrawPos), _nameSane]; + _playerOwnerID = ACE_player getVariable QGVAR(owner_id); + if (!isNil "_playerOwnerID" && _ownerID != _playerOwnerID) then { + _unitUID = getPlayerUID ACE_Player; + _drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil}; + if (!isNil "_drawPosVariableName") then { + _ownerID publicVariableClient _drawPosVariableName; + }; }; }; -} count _proximityPlayers; +} count ([ACE_player, GVAR(maxRange)] call FUNC(getProximityPlayers)); diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index 828261e017..251e6d2619 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_mapCtrl", "_nameSane"]; +private ["_mapCtrl", "_unitUID", "_drawPosVariableName"]; disableSerialization; @@ -24,19 +24,19 @@ _mapCtrl = findDisplay 12 displayCtrl 51; // MouseMoving EH. if (!isNil QGVAR(MouseMoveHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseMoving", GVAR(MouseMoveHandlerID)]; GVAR(MouseMoveHandlerID) = nil;}; GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { - if (EGVAR(maptools,drawing_isDrawing)) exitWith {}; - if (EGVAR(maptools,mapTool_isDragging)) exitWith {}; - if (EGVAR(maptools,mapTool_isRotating)) exitWith {}; + // Don't transmit any data if we're using the map tools + if (!GVAR(EnableTransmit) || EGVAR(maptools,drawing_isDrawing) || EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)) exitWith {}; params ["_control", "_posX", "_posY"]; - if (GVAR(EnableTransmit)) then { - if (!(ACE_player getVariable QGVAR(Transmit))) then { - ACE_player setVariable [QGVAR(Transmit), true, true]; - }; + if (!(ACE_player getVariable QGVAR(Transmit))) then { + ACE_player setVariable [QGVAR(Transmit), true, true]; + }; - _nameSane = [name ACE_player] call FUNC(sanitizeName); - missionNamespace setVariable [format [QGVAR(%1_DrawPos), _nameSane], _control ctrlMapScreenToWorld [_posX, _posY]]; + _unitUID = getPlayerUID ACE_player; + _drawPosVariableName = if (!isNil "_unitUID" && _unitUID != "") then {format [QGVAR(%1_DrawPos), _unitUID]} else {nil}; + if (!isNil "_drawPosVariableName") then { + missionNamespace setVariable [_drawPosVariableName, _control ctrlMapScreenToWorld [_posX, _posY]]; }; }]; @@ -53,6 +53,8 @@ GVAR(MouseDownHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonDown", { // MouseUp EH if (!isNil QGVAR(MouseUpHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseButtonUp", GVAR(MouseUpHandlerID)]; GVAR(MouseUpHandlerID) = nil;}; GVAR(MouseUpHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonUp", { + if (!GVAR(enabled)) exitWith {}; + params ["", "_button"]; if (_button == 0) then {call FUNC(endTransmit);}; diff --git a/addons/map_gestures/script_component.hpp b/addons/map_gestures/script_component.hpp index 7c6f3a5b2f..50f155ccc1 100644 --- a/addons/map_gestures/script_component.hpp +++ b/addons/map_gestures/script_component.hpp @@ -10,3 +10,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define MAP_GESTURES_NO_OWNER_ID_EVENT "PlayerNameHasNoOwnerID" From ee2cc22801ae83b698a403cb43610fa23031dbae Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 17:28:08 +0200 Subject: [PATCH 15/66] Added missing semicolon --- addons/map_gestures/functions/fnc_transmit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index 56adbe4266..ccd702fd55 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -22,7 +22,7 @@ params ["", "_pfhId"]; if (!visibleMap) then { call FUNC(endTransmit); -} +}; if (!GVAR(EnableTransmit) || !visibleMap) exitWith { [_pfhId] call CBA_fnc_removePerFrameHandler; From 0ff5e86b5271ee4035927caa7df724700fd92d5e Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 21:00:24 +0200 Subject: [PATCH 16/66] Another missing semi-colon --- addons/map_gestures/functions/fnc_getProximityPlayers.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf index 43d78f3506..7a72c00520 100644 --- a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf +++ b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf @@ -20,5 +20,5 @@ params ["_unit", "_range"]; _proximityPlayers = (getPos _unit) nearEntities [["CAMAnBase"], _range]; _proximityPlayers deleteAt (_proximityPlayers find _unit); -_proximityPlayers append (crew vehicle _unit) +_proximityPlayers append (crew vehicle _unit); _proximityPlayers From ef2924623f05142ea960e857ed230aec02ba9547 Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 24 Aug 2015 21:45:02 +0200 Subject: [PATCH 17/66] Added common parseList function for module list parsing --- addons/common/XEH_preInit.sqf | 1 + .../functions/fnc_assignObjectsInList.sqf | 39 +++++------- addons/common/functions/fnc_parseList.sqf | 61 +++++++++++++++++++ addons/slideshow/XEH_preInit.sqf | 1 - addons/slideshow/functions/fnc_makeList.sqf | 57 ----------------- addons/slideshow/functions/fnc_moduleInit.sqf | 8 +-- 6 files changed, 80 insertions(+), 87 deletions(-) create mode 100644 addons/common/functions/fnc_parseList.sqf delete mode 100644 addons/slideshow/functions/fnc_makeList.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 6fdf99113c..705e8e8b4b 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -144,6 +144,7 @@ PREP(numberToDigitsString); PREP(numberToString); PREP(onAnswerRequest); PREP(owned); +PREP(parseList); PREP(player); PREP(playerSide); PREP(positionToASL); diff --git a/addons/common/functions/fnc_assignObjectsInList.sqf b/addons/common/functions/fnc_assignObjectsInList.sqf index 0d10066d01..89c8a3352d 100644 --- a/addons/common/functions/fnc_assignObjectsInList.sqf +++ b/addons/common/functions/fnc_assignObjectsInList.sqf @@ -4,47 +4,36 @@ * Used by moduleAssign* within various parts of the ACE3 project. * * Arguments: - * 0: list - * 1: variableName - * 2: value + * 0: List + * 1: Variable Name + * 2: Value * 3: Global * * Return Value: - * None + * None + * + * Example: + * ["text", "variable", value, true] call ace_common_fnc_assignObjectsInList * * Public: No */ - +#define DEBUG_MODE_FULL #include "script_component.hpp" -private ["_splittedList", "_nilCheckPassedList"]; params ["_list", "_variable", "_setting", "_global"]; if (typeName _list == "STRING") then { - _splittedList = [_list, ","] call BIS_fnc_splitString; - _nilCheckPassedList = ""; - { - _x = [_x] call FUNC(stringRemoveWhiteSpace); - if !(isnil _x) then { - if (_nilCheckPassedList == "") then { - _nilCheckPassedList = _x; - } else { - _nilCheckPassedList = _nilCheckPassedList + ","+ _x; - }; - }; - }foreach _splittedList; - - _list = [] call compile format["[%1]",_nilCheckPassedList]; + _list = [_list, true, true] call FUNC(parseList); + TRACE_1("Parsed",_list) }; { - if (!isnil "_x") then { + if (!isNil "_x") then { if (typeName _x == typeName objNull) then { if (local _x) then { - _x setvariable [_variable, _setting, _global]; + _x setVariable [_variable, _setting, _global]; + TRACE_4("Set variable",_x,_variable,_setting,_global); }; }; }; -}foreach _list; - -true +} count _list; diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf new file mode 100644 index 0000000000..20630e1109 --- /dev/null +++ b/addons/common/functions/fnc_parseList.sqf @@ -0,0 +1,61 @@ +/* + * Author: Jonpas + * Makes a list from a string using comma as a delimiter, optionally trim or remove whitespace and check each for object existence. + * + * Arguments: + * 0: List + * 1: Remove or Trim Whitespace (default: false (trim)) + * 2: Check Nil (default: false) + * + * Return Value: + * Parsed List + * + * Example: + * ["text", true, false] call ace_common_fnc_parseList + * + * Public: No + */ +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private ["_splittedList", "_whitespaceList", "_nilCheckedList"]; +params ["_list", ["_removeWhitespace", false], ["_checkNil", false]]; + + +// Split using comma delimiter +_splittedList = [_list, ","] call BIS_fnc_splitString; + + +// Remove or Trim Whitespace +_whitespaceList = []; +{ + if (_removeWhitespace) then { + _whitespaceList pushBack ([_x] call FUNC(stringRemoveWhiteSpace)); + } else { + _whitespaceList pushBack ([_x] call CBA_fnc_trim); + }; + nil +} count _splittedList; +_list = _whitespaceList; + + +// Check for object existence +_nilCheckedList = ""; +if (_checkNil) then { + { + if !(isNil _x) then { + if (_nilCheckedList == "") then { + _nilCheckedList = _x; + } else { + _nilCheckedList = _nilCheckedList + "," + _x; + }; + }; + } count _list; + + // Add Array characters and parse into array + _list = [] call compile format ["[%1]", _nilCheckedList]; +}; + +TRACE_4("Lists",_splittedList,_whitespaceList,_nilCheckedList,_list); + +_list diff --git a/addons/slideshow/XEH_preInit.sqf b/addons/slideshow/XEH_preInit.sqf index 0f9e270896..152c02ec77 100644 --- a/addons/slideshow/XEH_preInit.sqf +++ b/addons/slideshow/XEH_preInit.sqf @@ -5,7 +5,6 @@ ADDON = false; PREP(addSlideActions); PREP(autoTransition); PREP(createSlideshow); -PREP(makeList); PREP(moduleInit); GVAR(slideshows) = 0; diff --git a/addons/slideshow/functions/fnc_makeList.sqf b/addons/slideshow/functions/fnc_makeList.sqf deleted file mode 100644 index 6736fabbdb..0000000000 --- a/addons/slideshow/functions/fnc_makeList.sqf +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Author: Jonpas - * Makes a list from a string using comma as a delimiter, optionally remove whitespace and check each for object existence. - * - * Arguments: - * 0: Text - * 1: Trim Whitespace - * 2: Check Nil - * - * Return Value: - * Parsed List - * - * Example: - * ["text", true, false] call ace_slideshow_fnc_makeList - * - * Public: No - */ -#include "script_component.hpp" - -params ["_list", "_trimWhitespace", "_checkNil"]; - -private ["_splittedList", "_listTrimmedWhitespace", "_nilCheckPassedList"]; - -// Split using comma delimiter -_splittedList = [_list, ","] call BIS_fnc_splitString; - -// Remove whitespace -_listTrimmedWhitespace = []; -if (_trimWhitespace) then { - { - _listTrimmedWhitespace pushBack ([_x] call CBA_fnc_trim); - nil - } count _splittedList; - _list = _listTrimmedWhitespace; -}; - -// Check for object existence -_nilCheckPassedList = ""; -if (_checkNil) then { - { - if !(isNil _x) then { - if (_nilCheckPassedList == "") then { - _nilCheckPassedList = _x; - } else { - _nilCheckPassedList = _nilCheckPassedList + "," + _x; - }; - }; - } count _list; - - // Add Array characters and parse into array - _list = "[" + _nilCheckPassedList + "]"; - _list = [] call compile _list; -}; - -TRACE_4("Lists",_splittedList,_listTrimmedWhitespace,_nilCheckPassedList,_list); - -_list // return diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index da1724dfcc..e4f7fbb56c 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -25,10 +25,10 @@ if !(_activated) exitWith {}; if (isNull _logic) exitWith {}; // Extract variables from logic -_objects = [_logic getVariable ["Objects", ""], true, true] call FUNC(makeList); -_controllers = [_logic getVariable ["Controllers", ""], true, true] call FUNC(makeList); -_images = [_logic getVariable ["Images", ""], true, false] call FUNC(makeList); -_names = [_logic getVariable ["Names", ""], true, false] call FUNC(makeList); +_objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList); +_controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList); +_images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList); +_names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList); _duration = _logic getVariable ["Duration", 0]; // Prepare with actions From 5b6429f23e84bd3af7439d88cd5aa9860f72006a Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 24 Aug 2015 21:55:48 +0200 Subject: [PATCH 18/66] Made more modules use assignObjectsInList common function --- .../functions/fnc_moduleAssignMedicRoles.sqf | 59 ++++-------------- .../fnc_moduleAssignMedicalVehicle.sqf | 60 ++++--------------- .../functions/fnc_moduleAssignEngineer.sqf | 8 +-- .../fnc_moduleAssignRepairFacility.sqf | 6 +- .../fnc_moduleAssignRepairVehicle.sqf | 8 +-- 5 files changed, 30 insertions(+), 111 deletions(-) diff --git a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf index 1c26eb53d4..a884bfe300 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf @@ -1,63 +1,26 @@ /* * Author: Glowbal - * Assign a medical role to a unit + * Assign a medical role to a unit. * * Arguments: - * 0: The module logic - * 1: units - * 2: activated + * 0: The module logic + * 1: Synchronized units + * 2: Activated * * Return Value: * None * * Public: No */ - #include "script_component.hpp" -private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +params ["_logic"]; if (!isNull _logic) then { - _list = _logic getvariable ["EnableList",""]; + private ["_list", "_setting"]; + _list = _logic getVariable ["EnableList", ""]; + _setting = _logic getVariable ["role", 0]; - _splittedList = [_list, ","] call BIS_fnc_splitString; - _nilCheckPassedList = ""; - { - _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); - if !(isnil _x) then { - if (_nilCheckPassedList == "") then { - _nilCheckPassedList = _x; - } else { - _nilCheckPassedList = _nilCheckPassedList + ","+ _x; - }; - }; - }foreach _splittedList; - - _list = "[" + _nilCheckPassedList + "]"; - _parsedList = [] call compile _list; - _setting = _logic getvariable ["role",0]; - _objects = synchronizedObjects _logic; - if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then { - { - if (!isnil "_x") then { - if (typeName _x == typeName objNull) then { - if (local _x) then { - _x setvariable [QGVAR(medicClass), _setting, true]; - }; - }; - }; - }foreach _objects; - }; - { - if (!isnil "_x") then { - if (typeName _x == typeName objNull) then { - if (local _x) then { - _x setvariable [QGVAR(medicClass), _setting, true]; - }; - }; - }; - }foreach _parsedList; - }; - -true \ No newline at end of file + [_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); + [synchronizedObjects _logic, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); +}; diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index af6de73ce1..d073ffaecb 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -1,64 +1,26 @@ /* * Author: Glowbal - * Assign vehicle as a medical vehicle + * Assign vehicle as a medical vehicle. * * Arguments: - * 0: The module logic - * 1: units - * 2: activated + * 0: The module logic + * 1: Synchronized units + * 2: Activated * * Return Value: * None * * Public: No */ - - #include "script_component.hpp" -private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +params ["_logic"]; if (!isNull _logic) then { - _list = _logic getvariable ["EnableList",""]; + private ["_list", "_setting"]; + _list = _logic getVariable ["EnableList", ""]; + _setting = _logic getVariable ["enabled", 0]; - _splittedList = [_list, ","] call BIS_fnc_splitString; - _nilCheckPassedList = ""; - { - _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); - if !(isnil _x) then { - if (_nilCheckPassedList == "") then { - _nilCheckPassedList = _x; - } else { - _nilCheckPassedList = _nilCheckPassedList + ","+ _x; - }; - }; - }foreach _splittedList; - - _list = "[" + _nilCheckPassedList + "]"; - _parsedList = [] call compile _list; - _setting = _logic getvariable ["enabled", 0]; - _objects = synchronizedObjects _logic; - if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then { - { - if (!isnil "_x") then { - if (typeName _x == typeName objNull) then { - if (local _x) then { - _x setvariable [QGVAR(medicClass), _setting, true]; - }; - }; - }; - }foreach _objects; - }; - { - if (!isnil "_x") then { - if (typeName _x == typeName objNull) then { - if (local _x) then { - _x setvariable [QGVAR(medicClass), _setting, true]; - }; - }; - }; - }foreach _parsedList; - }; - -true; + [_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); + [synchronizedObjects _logic, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); +}; diff --git a/addons/repair/functions/fnc_moduleAssignEngineer.sqf b/addons/repair/functions/fnc_moduleAssignEngineer.sqf index 9fb9ed8431..240a8c3b62 100644 --- a/addons/repair/functions/fnc_moduleAssignEngineer.sqf +++ b/addons/repair/functions/fnc_moduleAssignEngineer.sqf @@ -21,11 +21,9 @@ params ["_logic"]; if (!isNull _logic) then { private ["_list", "_setting"]; - _list = _logic getVariable ["EnableList",""]; - _setting = _logic getVariable ["role",0]; + _list = _logic getVariable ["EnableList", ""]; + _setting = _logic getVariable ["role", 0]; [_list, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList); [synchronizedObjects _logic, "ACE_IsEngineer", _setting, true] call EFUNC(common,assignObjectsInList); - }; - -true +}; diff --git a/addons/repair/functions/fnc_moduleAssignRepairFacility.sqf b/addons/repair/functions/fnc_moduleAssignRepairFacility.sqf index 00cb847866..7150d0226b 100644 --- a/addons/repair/functions/fnc_moduleAssignRepairFacility.sqf +++ b/addons/repair/functions/fnc_moduleAssignRepairFacility.sqf @@ -21,11 +21,9 @@ params ["_logic"]; if (!isNull _logic) then { private ["_list", "_setting"]; - _list = _logic getVariable ["EnableList",""]; - _setting = _logic getVariable ["role",0]; + _list = _logic getVariable ["EnableList", ""]; + _setting = _logic getVariable ["role", 0]; [_list, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList); [synchronizedObjects _logic, "ACE_isRepairFacility", _setting, true] call EFUNC(common,assignObjectsInList); }; - -true diff --git a/addons/repair/functions/fnc_moduleAssignRepairVehicle.sqf b/addons/repair/functions/fnc_moduleAssignRepairVehicle.sqf index 69d2a2c52f..647b5fe52c 100644 --- a/addons/repair/functions/fnc_moduleAssignRepairVehicle.sqf +++ b/addons/repair/functions/fnc_moduleAssignRepairVehicle.sqf @@ -21,11 +21,9 @@ params ["_logic"]; if (!isNull _logic) then { private ["_list", "_setting"]; - _list = _logic getVariable ["EnableList",""]; - _setting = _logic getVariable ["role",0]; + _list = _logic getVariable ["EnableList", ""]; + _setting = _logic getVariable ["role", 0]; [_list, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList); [synchronizedObjects _logic, "ACE_isRepairVehicle", _setting, true] call EFUNC(common,assignObjectsInList); - }; - -true +}; From 3f41882a0673b2bdf8cbf1a42319b431c140fb9f Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 24 Aug 2015 21:56:21 +0200 Subject: [PATCH 19/66] Removed debug --- addons/common/functions/fnc_assignObjectsInList.sqf | 1 - addons/common/functions/fnc_parseList.sqf | 1 - 2 files changed, 2 deletions(-) diff --git a/addons/common/functions/fnc_assignObjectsInList.sqf b/addons/common/functions/fnc_assignObjectsInList.sqf index 89c8a3352d..eddd792500 100644 --- a/addons/common/functions/fnc_assignObjectsInList.sqf +++ b/addons/common/functions/fnc_assignObjectsInList.sqf @@ -17,7 +17,6 @@ * * Public: No */ -#define DEBUG_MODE_FULL #include "script_component.hpp" params ["_list", "_variable", "_setting", "_global"]; diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index 20630e1109..8cce3c1837 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -15,7 +15,6 @@ * * Public: No */ -#define DEBUG_MODE_FULL #include "script_component.hpp" private ["_splittedList", "_whitespaceList", "_nilCheckedList"]; From 3cbe6a3ebcc7792aac5cee970451fd32df22f679 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 22:03:47 +0200 Subject: [PATCH 20/66] Fixed multiple group settings not applying properly. Added client configuration options for default colors. --- addons/map_gestures/ACE_Settings.hpp | 56 +++++++++++++------ addons/map_gestures/XEH_serverPostInit.sqf | 2 +- .../functions/fnc_drawMapGestures.sqf | 2 +- .../functions/fnc_moduleGroupSettings.sqf | 6 +- .../functions/fnc_moduleSettings.sqf | 4 +- .../functions/fnc_receiverInit.sqf | 3 +- .../map_gestures/functions/fnc_transmit.sqf | 2 +- .../functions/fnc_transmitterInit.sqf | 15 ++++- addons/map_gestures/script_component.hpp | 2 +- addons/map_gestures/stringtable.xml | 9 +++ 10 files changed, 72 insertions(+), 29 deletions(-) diff --git a/addons/map_gestures/ACE_Settings.hpp b/addons/map_gestures/ACE_Settings.hpp index c7b9a8b2ed..67f258c4cc 100644 --- a/addons/map_gestures/ACE_Settings.hpp +++ b/addons/map_gestures/ACE_Settings.hpp @@ -1,50 +1,74 @@ class ACE_Settings { class GVAR(enabled) { - value = 1; - typeName = "BOOL"; displayName = CSTRING(enabled_displayName); description = CSTRING(enabled_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "BOOL"; + value = 1; }; class GVAR(maxRange) { - value = 7; - typeName = "SCALAR"; displayName = CSTRING(maxRange_displayName); description = CSTRING(maxRange_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "SCALAR"; + value = 7; }; class GVAR(interval) { - value = 0.03; - typeName = "SCALAR"; displayName = CSTRING(interval_displayName); description = CSTRING(interval_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "SCALAR"; + value = 0.03; + }; + class GVAR(nameTextColor) { + displayName = CSTRING(nameTextColor_displayName); + description = CSTRING(nameTextColor_description); + category = CSTRING(mapGestures_category); + isClientSettable = 1; + typeName = "COLOR"; + value[] = {0.2, 0.2, 0.2, 0.3}; }; class GVAR(defaultLeadColor) { - value[] = {1, 0.88, 0, 0.95}; - typeName = "COLOR"; displayName = CSTRING(defaultLeadColor_displayName); description = CSTRING(defaultLeadColor_description); + category = CSTRING(mapGestures_category); + isClientSettable = 1; + typeName = "COLOR"; + value[] = {1, 0.88, 0, 0.95}; }; class GVAR(defaultColor) { - value[] = {1, 0.88, 0, 0.7}; - typeName = "COLOR"; displayName = CSTRING(defaultColor_displayName); description = CSTRING(defaultColor_description); + category = CSTRING(mapGestures_category); + isClientSettable = 1; + typeName = "COLOR"; + value[] = {1, 0.88, 0, 0.7}; }; class GVAR(GroupColorConfigurations) { - value[] = {}; - typeName = "ARRAY"; displayName = CSTRING(GroupColorConfigurations_displayName); description = CSTRING(GroupColorConfigurations_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "ARRAY"; + value[] = {}; }; class GVAR(GroupColorConfigurationsGroups) { - value[] = {}; - typeName = "ARRAY"; displayName = CSTRING(GroupColorConfigurationsGroups_displayName); description = CSTRING(GroupColorConfigurationsGroups_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "ARRAY"; + value[] = {}; }; class GVAR(GroupColorConfigurationsGroupIndex) { - value[] = {}; - typeName = "ARRAY"; displayName = CSTRING(GroupColorConfigurationsGroupIndex_displayName); description = CSTRING(GroupColorConfigurationsGroupIndex_description); + category = CSTRING(mapGestures_category); + isClientSettable = 0; + typeName = "ARRAY"; + value[] = {}; }; }; diff --git a/addons/map_gestures/XEH_serverPostInit.sqf b/addons/map_gestures/XEH_serverPostInit.sqf index 9bbf84911e..bde1cdc55b 100644 --- a/addons/map_gestures/XEH_serverPostInit.sqf +++ b/addons/map_gestures/XEH_serverPostInit.sqf @@ -1,3 +1,3 @@ #include "script_component.hpp" -[MAP_GESTURES_NO_OWNER_ID_EVENT, FUNC(assignClientIDOnServer)] call EFUNC(common,addEventHandler) +[EVENT_PLAYER_HAS_NO_OWNER_ID, FUNC(assignClientIDOnServer)] call EFUNC(common,addEventHandler); diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 31c41ca995..2dcf425faf 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -53,7 +53,7 @@ params ["_mapHandle"]; // Render icon and player name _mapHandle drawIcon ["\a3\ui_f\data\gui\cfg\Hints\icon_text\group_1_ca.paa", _color, _pos, ICON_RENDER_SIZE, ICON_RENDER_SIZE, ICON_ANGLE, "", ICON_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN]; - _mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", [.2,.2,.2,.3], _pos, TEXT_ICON_RENDER_SIZE, TEXT_ICON_RENDER_SIZE, ICON_ANGLE, name _x, TEXT_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN]; + _mapHandle drawIcon ["#(argb,8,8,3)color(0,0,0,0)", GVAR(nameTextColor), _pos, TEXT_ICON_RENDER_SIZE, TEXT_ICON_RENDER_SIZE, ICON_ANGLE, name _x, TEXT_SHADOW, TEXT_SIZE, TEXT_FONT, ICON_TEXT_ALIGN]; }; }; nil diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index 013f076347..8c819bb4d3 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -48,6 +48,6 @@ _completedGroups = []; nil } count _units; -[QGVAR(GroupColorConfigurations), _configurations, true, true] call EFUNC(common,setSetting); -[QGVAR(GroupColorConfigurationsGroups), _configurationGroups, true, true] call EFUNC(common,setSetting); -[QGVAR(GroupColorConfigurationsGroupIndex), _configurationGroupsIndex, true, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurations), _configurations, false, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurationsGroups), _configurationGroups, false, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurationsGroupIndex), _configurationGroupsIndex, false, true] call EFUNC(common,setSetting); diff --git a/addons/map_gestures/functions/fnc_moduleSettings.sqf b/addons/map_gestures/functions/fnc_moduleSettings.sqf index 6b21db8588..e3e0bf714b 100644 --- a/addons/map_gestures/functions/fnc_moduleSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleSettings.sqf @@ -32,5 +32,5 @@ if (!([_defaultLeadColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaul _defaultColor = call compile ("[" + (_logic getVariable ["defaultColor", ""]) + "]"); if (!([_defaultColor] call FUNC(isValidColorArray))) exitWith {ERROR("defaultColor is not a valid color array.")}; -[QGVAR(defaultLeadColor), _defaultLeadColor, true, true] call EFUNC(common,setSetting); -[QGVAR(defaultColor), _defaultColor, true, true] call EFUNC(common,setSetting); +[QGVAR(defaultLeadColor), _defaultLeadColor, false, true] call EFUNC(common,setSetting); +[QGVAR(defaultColor), _defaultColor, false, true] call EFUNC(common,setSetting); diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index a14efbffc1..b132dad1d7 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -19,6 +19,7 @@ ACE_player setVariable [QGVAR(Transmit), false, true]; GVAR(EnableTransmit) = false; if (!isNil QGVAR(DrawMapHandlerID)) then { - (findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)]; GVAR(DrawMapHandlerID) = nil; + (findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)]; + GVAR(DrawMapHandlerID) = nil; }; GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", FUNC(drawMapGestures)]; diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index ccd702fd55..444ebbc604 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -31,7 +31,7 @@ if (!GVAR(EnableTransmit) || !visibleMap) exitWith { { _ownerID = _x getVariable QGVAR(owner_id); if (isNil "_ownerID") then { - [MAP_GESTURES_NO_OWNER_ID_EVENT, [name _x]] call EFUNC(common,serverEvent); + [EVENT_PLAYER_HAS_NO_OWNER_ID, [name _x]] call EFUNC(common,serverEvent); } else { _playerOwnerID = ACE_player getVariable QGVAR(owner_id); if (!isNil "_playerOwnerID" && _ownerID != _playerOwnerID) then { diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index 251e6d2619..897855dc00 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -22,7 +22,10 @@ disableSerialization; _mapCtrl = findDisplay 12 displayCtrl 51; // MouseMoving EH. -if (!isNil QGVAR(MouseMoveHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseMoving", GVAR(MouseMoveHandlerID)]; GVAR(MouseMoveHandlerID) = nil;}; +if (!isNil QGVAR(MouseMoveHandlerID)) then { + _mapCtrl ctrlRemoveEventHandler ["MouseMoving", GVAR(MouseMoveHandlerID)]; + GVAR(MouseMoveHandlerID) = nil; +}; GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { // Don't transmit any data if we're using the map tools if (!GVAR(EnableTransmit) || EGVAR(maptools,drawing_isDrawing) || EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)) exitWith {}; @@ -41,7 +44,10 @@ GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { }]; // MouseDown EH -if (!isNil QGVAR(MouseDownHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseButtonDown",GVAR(MouseDownHandlerID)]; GVAR(MouseDownHandlerID) = nil;}; +if (!isNil QGVAR(MouseDownHandlerID)) then { + _mapCtrl ctrlRemoveEventHandler ["MouseButtonDown",GVAR(MouseDownHandlerID)]; + GVAR(MouseDownHandlerID) = nil; +}; GVAR(MouseDownHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonDown", { if (!GVAR(enabled)) exitWith {}; @@ -51,7 +57,10 @@ GVAR(MouseDownHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonDown", { }]; // MouseUp EH -if (!isNil QGVAR(MouseUpHandlerID)) then {_mapCtrl ctrlRemoveEventHandler ["MouseButtonUp", GVAR(MouseUpHandlerID)]; GVAR(MouseUpHandlerID) = nil;}; +if (!isNil QGVAR(MouseUpHandlerID)) then { + _mapCtrl ctrlRemoveEventHandler ["MouseButtonUp", GVAR(MouseUpHandlerID)]; + GVAR(MouseUpHandlerID) = nil; +}; GVAR(MouseUpHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseButtonUp", { if (!GVAR(enabled)) exitWith {}; diff --git a/addons/map_gestures/script_component.hpp b/addons/map_gestures/script_component.hpp index 50f155ccc1..1a5ecada12 100644 --- a/addons/map_gestures/script_component.hpp +++ b/addons/map_gestures/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define MAP_GESTURES_NO_OWNER_ID_EVENT "PlayerNameHasNoOwnerID" +#define EVENT_PLAYER_HAS_NO_OWNER_ID "PlayerNameHasNoOwnerID" diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 324e9f92e7..78e4378b73 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -91,5 +91,14 @@ Enables the Map Gestures. + + Name Text Color + + + Color of the name tag text besides the map gestures mark. + + + Map Gestures + From 2b0ef7bc6d9831d3dbe626658ad39a9f5e72abda Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 22:10:02 +0200 Subject: [PATCH 21/66] Removed explicitly stated `isClientSettable` in Map Gestures ace settings --- addons/map_gestures/ACE_Settings.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addons/map_gestures/ACE_Settings.hpp b/addons/map_gestures/ACE_Settings.hpp index 67f258c4cc..1b223d0d67 100644 --- a/addons/map_gestures/ACE_Settings.hpp +++ b/addons/map_gestures/ACE_Settings.hpp @@ -3,7 +3,6 @@ class ACE_Settings { displayName = CSTRING(enabled_displayName); description = CSTRING(enabled_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "BOOL"; value = 1; }; @@ -11,7 +10,6 @@ class ACE_Settings { displayName = CSTRING(maxRange_displayName); description = CSTRING(maxRange_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "SCALAR"; value = 7; }; @@ -19,7 +17,6 @@ class ACE_Settings { displayName = CSTRING(interval_displayName); description = CSTRING(interval_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "SCALAR"; value = 0.03; }; @@ -51,7 +48,6 @@ class ACE_Settings { displayName = CSTRING(GroupColorConfigurations_displayName); description = CSTRING(GroupColorConfigurations_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "ARRAY"; value[] = {}; }; @@ -59,7 +55,6 @@ class ACE_Settings { displayName = CSTRING(GroupColorConfigurationsGroups_displayName); description = CSTRING(GroupColorConfigurationsGroups_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "ARRAY"; value[] = {}; }; @@ -67,7 +62,6 @@ class ACE_Settings { displayName = CSTRING(GroupColorConfigurationsGroupIndex_displayName); description = CSTRING(GroupColorConfigurationsGroupIndex_description); category = CSTRING(mapGestures_category); - isClientSettable = 0; typeName = "ARRAY"; value[] = {}; }; From 93acdbcb4d8802d52730bb43b7f149d88443d100 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 22:45:59 +0200 Subject: [PATCH 22/66] Replaced custom mapping implementation with ACE Hash --- addons/map_gestures/ACE_Settings.hpp | 15 ++++----------- .../functions/fnc_drawMapGestures.sqf | 5 ++--- .../functions/fnc_moduleGroupSettings.sqf | 16 +++------------- addons/map_gestures/stringtable.xml | 14 ++++---------- 4 files changed, 13 insertions(+), 37 deletions(-) diff --git a/addons/map_gestures/ACE_Settings.hpp b/addons/map_gestures/ACE_Settings.hpp index 1b223d0d67..0038027e3b 100644 --- a/addons/map_gestures/ACE_Settings.hpp +++ b/addons/map_gestures/ACE_Settings.hpp @@ -51,18 +51,11 @@ class ACE_Settings { typeName = "ARRAY"; value[] = {}; }; - class GVAR(GroupColorConfigurationsGroups) { - displayName = CSTRING(GroupColorConfigurationsGroups_displayName); - description = CSTRING(GroupColorConfigurationsGroups_description); + class GVAR(GroupColorConfigurationMapping) { + displayName = CSTRING(GroupColorConfigurationMapping_displayName); + description = CSTRING(GroupColorConfigurationMapping_description); category = CSTRING(mapGestures_category); typeName = "ARRAY"; - value[] = {}; - }; - class GVAR(GroupColorConfigurationsGroupIndex) { - displayName = CSTRING(GroupColorConfigurationsGroupIndex_displayName); - description = CSTRING(GroupColorConfigurationsGroupIndex_description); - category = CSTRING(mapGestures_category); - typeName = "ARRAY"; - value[] = {}; + value[] = {{}, {}}; }; }; diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 2dcf425faf..4ba70f1b30 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -44,9 +44,8 @@ params ["_mapHandle"]; _grpName = groupID _group; // If color settings for the group exist, then use those, otherwise fall back to the default colors - _color = if (_grpName in GVAR(GroupColorConfigurationsGroups)) then { - _grpNameIndex = GVAR(GroupColorConfigurationsGroups) find _grpName; - (GVAR(GroupColorConfigurations) select (GVAR(GroupColorConfigurationsGroupIndex) select _grpNameIndex)) select (_x != leader _group) + _color = if (HASH_HASKEY(GVAR(GroupColorConfigurationMapping),_grpName)) then { + (GVAR(GroupColorConfigurations) select (HASH_GET(GVAR(GroupColorConfigurationMapping),_grpName))) select (_x != leader _group) } else { if (_x == leader _group) then {GVAR(defaultLeadColor)} else {GVAR(defaultColor)}; }; diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index 8c819bb4d3..ac01516618 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -29,25 +29,15 @@ if (!([_color] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a va // If we already have color configurations from another source, use those, otherwise use default. _configurations = if (isNil QGVAR(GroupColorConfigurations)) then { [] } else { +GVAR(GroupColorConfigurations) }; -_configurationGroups = if (isNil QGVAR(GroupColorConfigurationsGroups)) then { [] } else { +GVAR(GroupColorConfigurationsGroups) }; -_configurationGroupsIndex = if (isNil QGVAR(GroupColorConfigurationsGroupIndex)) then { [] } else { +GVAR(GroupColorConfigurationsGroupIndex) }; +_configurationGroupMappings = if(isNil QGVAR(GroupColorConfigurationMapping)) then { HASH_CREATE } else { +GVAR(GroupColorConfigurationMapping) }; // Save custom color configuration and keep the index of the entry. _configurationIndex = _configurations pushBack [_leadColor, _color]; // Add all synchronized groups and reference custom configuration for them -_completedGroups = []; { - private "_group"; - _group = groupID (group _x); - if (!(_group in _completedGroups)) then { - _index = if (_group in _configurationGroups) then {_configurationGroups find _group} else {_configurationGroups pushBack _group}; - _configurationGroupsIndex set [_index, _configurationIndex]; - _completedGroups pushBack _group; - }; - nil + HASH_SET(_configurationGroupMappings,groupID (group _x),_configurationIndex); } count _units; [QGVAR(GroupColorConfigurations), _configurations, false, true] call EFUNC(common,setSetting); -[QGVAR(GroupColorConfigurationsGroups), _configurationGroups, false, true] call EFUNC(common,setSetting); -[QGVAR(GroupColorConfigurationsGroupIndex), _configurationGroupsIndex, false, true] call EFUNC(common,setSetting); +[QGVAR(GroupColorConfigurationMapping), _configurationGroupMappings, false, true] call EFUNC(common,setSetting); diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 78e4378b73..e5eab426a3 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -76,17 +76,11 @@ Group color configuration containing arrays of color pairs ([leadColor, color]). - - Group color group name index, containing names of groups with configurations attached to them. + + Hash of Group ID mapped to the Group color configuration index. - - Group color group name index - - - Group color group name mapping index - - - Group color group name mapping index, mapping the GroupColorConfigurationsGroups to the GroupColorConfigurations. + + GroupID Color configuration mapping Enables the Map Gestures. From 431bd309a85c0d0c837d797ee9eb9211ed8e3295 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Mon, 24 Aug 2015 23:26:03 +0200 Subject: [PATCH 23/66] Fixed variable privatization --- addons/map_gestures/functions/fnc_drawMapGestures.sqf | 2 ++ addons/map_gestures/functions/fnc_getProximityPlayers.sqf | 2 ++ addons/map_gestures/functions/fnc_moduleGroupSettings.sqf | 2 ++ addons/map_gestures/functions/fnc_moduleSettings.sqf | 7 ++++--- addons/map_gestures/functions/fnc_transmit.sqf | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/addons/map_gestures/functions/fnc_drawMapGestures.sqf b/addons/map_gestures/functions/fnc_drawMapGestures.sqf index 4ba70f1b30..b369686501 100644 --- a/addons/map_gestures/functions/fnc_drawMapGestures.sqf +++ b/addons/map_gestures/functions/fnc_drawMapGestures.sqf @@ -26,6 +26,8 @@ if (!GVAR(enabled) || !visibleMap) exitWith {}; +private["_color", "_drawPosVariableName", "_group", "_grpName", "_pos", "_unitUID"]; + params ["_mapHandle"]; // Iterate over all nearby players and render their pointer if player is transmitting. diff --git a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf index 7a72c00520..dded0b1273 100644 --- a/addons/map_gestures/functions/fnc_getProximityPlayers.sqf +++ b/addons/map_gestures/functions/fnc_getProximityPlayers.sqf @@ -16,6 +16,8 @@ */ #include "script_component.hpp" +private "_proximityPlayers"; + params ["_unit", "_range"]; _proximityPlayers = (getPos _unit) nearEntities [["CAMAnBase"], _range]; diff --git a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf index ac01516618..9c21bf867d 100644 --- a/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleGroupSettings.sqf @@ -17,6 +17,8 @@ */ #include "script_component.hpp" +private ["_color", "_configurationGroupMappings", "_configurationIndex", "_configurations", "_leadColor"]; + params ["_logic", "_units", "_activated"]; if (!_activated || !isServer) exitWith {}; diff --git a/addons/map_gestures/functions/fnc_moduleSettings.sqf b/addons/map_gestures/functions/fnc_moduleSettings.sqf index e3e0bf714b..99583074fc 100644 --- a/addons/map_gestures/functions/fnc_moduleSettings.sqf +++ b/addons/map_gestures/functions/fnc_moduleSettings.sqf @@ -17,10 +17,11 @@ */ #include "script_component.hpp" -params ["_logic", "_units", "_activated"]; +private ["_defaultColor", "_defaultLeadColor"]; -if (!_activated) exitWith {}; -if (!isServer) exitWith {}; +params ["_logic", "", "_activated"]; + +if (!_activated || !isServer) exitWith {}; [_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(maxRange), "maxRange"] call EFUNC(common,readSettingFromModule); diff --git a/addons/map_gestures/functions/fnc_transmit.sqf b/addons/map_gestures/functions/fnc_transmit.sqf index 444ebbc604..c9dc487db2 100644 --- a/addons/map_gestures/functions/fnc_transmit.sqf +++ b/addons/map_gestures/functions/fnc_transmit.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_proximityPlayers", "_ownerID", "_unitUID", "_drawPosVariableName"]; +private ["_ownerID", "_unitUID", "_drawPosVariableName", "_playerOwnerID"]; params ["", "_pfhId"]; From a83a5a17a3862f65966ef7dc633fb01d070cd799 Mon Sep 17 00:00:00 2001 From: jokoho48 Date: Fri, 28 Aug 2015 13:15:21 +0200 Subject: [PATCH 24/66] Fix Issues --- addons/kestrel4500/XEH_preInit.sqf | 2 +- addons/kestrel4500/functions/fnc_dayOfWeek.sqf | 1 + addons/kestrel4500/functions/fnc_displayKestrel.sqf | 2 +- addons/kestrel4500/functions/fnc_updateMemory.sqf | 1 + addons/kestrel4500/script_component.hpp | 2 ++ 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/kestrel4500/XEH_preInit.sqf b/addons/kestrel4500/XEH_preInit.sqf index b89f07173f..b3f8ba755f 100644 --- a/addons/kestrel4500/XEH_preInit.sqf +++ b/addons/kestrel4500/XEH_preInit.sqf @@ -16,5 +16,5 @@ PREP(storeUserData); PREP(updateDisplay); PREP(updateImpellerState); PREP(updateMemory); -PREP(dayOfWeek) +PREP(dayOfWeek); ADDON = true; diff --git a/addons/kestrel4500/functions/fnc_dayOfWeek.sqf b/addons/kestrel4500/functions/fnc_dayOfWeek.sqf index 9e142f661c..f63a3969b0 100644 --- a/addons/kestrel4500/functions/fnc_dayOfWeek.sqf +++ b/addons/kestrel4500/functions/fnc_dayOfWeek.sqf @@ -15,6 +15,7 @@ * * Public: No */ +#include "script_component.hpp" private "_table"; params ["_year", "_month", "_day"]; diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 770347ec71..64d06fea1c 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -102,7 +102,7 @@ GVAR(Overlay) = true; __ctrlInfoLine1 ctrlSetText _ctrlInfoLine1; __ctrlInfoLine2 ctrlSetText _ctrlInfoLine2; - __ctrlBottomBig ctrlSetText _ctrlBottomBig ; + __ctrlBottomBig ctrlSetText _ctrlBottomBig; __ctrlCenterLine1 ctrlSetText _ctrlCenterLine1; __ctrlCenterLine2 ctrlSetText _ctrlCenterLine2; diff --git a/addons/kestrel4500/functions/fnc_updateMemory.sqf b/addons/kestrel4500/functions/fnc_updateMemory.sqf index f38e9ee6df..c393aee14f 100644 --- a/addons/kestrel4500/functions/fnc_updateMemory.sqf +++ b/addons/kestrel4500/functions/fnc_updateMemory.sqf @@ -14,6 +14,7 @@ * * Public: No */ +#include "script_component.hpp" params ["_slot", "_value"]; GVAR(MIN) set [_slot, (GVAR(MIN) select _slot) min _value]; GVAR(MAX) set [_slot, _value max (GVAR(MAX) select _slot)]; diff --git a/addons/kestrel4500/script_component.hpp b/addons/kestrel4500/script_component.hpp index 90c338ebeb..e1a58dc1df 100644 --- a/addons/kestrel4500/script_component.hpp +++ b/addons/kestrel4500/script_component.hpp @@ -1,6 +1,8 @@ #define COMPONENT kestrel4500 #include "\z\ace\addons\main\script_mod.hpp" +#define DEBUG_ENABLED_KESTREL4500 + #ifdef DEBUG_ENABLED_KESTREL4500 #define DEBUG_MODE_FULL #endif From 1f602ea9a3c8a0e664b6cd4a56111d145c0a1b51 Mon Sep 17 00:00:00 2001 From: jokoho48 Date: Fri, 28 Aug 2015 13:17:29 +0200 Subject: [PATCH 25/66] disable Debug --- addons/kestrel4500/script_component.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/kestrel4500/script_component.hpp b/addons/kestrel4500/script_component.hpp index e1a58dc1df..90c338ebeb 100644 --- a/addons/kestrel4500/script_component.hpp +++ b/addons/kestrel4500/script_component.hpp @@ -1,8 +1,6 @@ #define COMPONENT kestrel4500 #include "\z\ace\addons\main\script_mod.hpp" -#define DEBUG_ENABLED_KESTREL4500 - #ifdef DEBUG_ENABLED_KESTREL4500 #define DEBUG_MODE_FULL #endif From f22072a94da4270519be4bff55c13a655cd29f4f Mon Sep 17 00:00:00 2001 From: jonpas Date: Sat, 5 Sep 2015 19:57:35 +0200 Subject: [PATCH 26/66] Use pushBack instead of array compiling --- addons/common/functions/fnc_parseList.sqf | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index 8cce3c1837..22595201fc 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -39,20 +39,15 @@ _list = _whitespaceList; // Check for object existence -_nilCheckedList = ""; +_nilCheckedList = []; if (_checkNil) then { { if !(isNil _x) then { - if (_nilCheckedList == "") then { - _nilCheckedList = _x; - } else { - _nilCheckedList = _nilCheckedList + "," + _x; - }; + _nilCheckedList pushBack _x; }; } count _list; - // Add Array characters and parse into array - _list = [] call compile format ["[%1]", _nilCheckedList]; + _list = _nilCheckedList; }; TRACE_4("Lists",_splittedList,_whitespaceList,_nilCheckedList,_list); From a2dd77ca702bce3542ffd2985b3e2d4defeb48c6 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sat, 5 Sep 2015 20:15:31 +0200 Subject: [PATCH 27/66] Use splitString instead of BIS_fnc_splitString --- addons/common/functions/fnc_parseList.sqf | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index 22595201fc..dcdf255081 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -1,5 +1,5 @@ /* - * Author: Jonpas + * Author: Glowbal, Jonpas * Makes a list from a string using comma as a delimiter, optionally trim or remove whitespace and check each for object existence. * * Arguments: @@ -17,12 +17,13 @@ */ #include "script_component.hpp" -private ["_splittedList", "_whitespaceList", "_nilCheckedList"]; params ["_list", ["_removeWhitespace", false], ["_checkNil", false]]; +private ["_whitespaceList", "_nilCheckedList"]; // Split using comma delimiter -_splittedList = [_list, ","] call BIS_fnc_splitString; +_list = _list splitString ","; +TRACE_1("Splitted List",_list); // Remove or Trim Whitespace @@ -34,22 +35,25 @@ _whitespaceList = []; _whitespaceList pushBack ([_x] call CBA_fnc_trim); }; nil -} count _splittedList; +} count _list; + _list = _whitespaceList; +TRACE_1("Whitespace List",_list); // Check for object existence -_nilCheckedList = []; if (_checkNil) then { + _nilCheckedList = []; { if !(isNil _x) then { _nilCheckedList pushBack _x; }; + nil } count _list; _list = _nilCheckedList; }; -TRACE_4("Lists",_splittedList,_whitespaceList,_nilCheckedList,_list); +TRACE_1("Final List",_list); _list From 06baa5e4d362dc223cc18f30816b620ec7031a60 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sat, 5 Sep 2015 20:51:48 +0200 Subject: [PATCH 28/66] Fixed nilCheck, changed moduleAddSpareParts to use new parseList --- addons/common/functions/fnc_parseList.sqf | 2 +- .../functions/fnc_moduleAddSpareParts.sqf | 34 +++++-------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/addons/common/functions/fnc_parseList.sqf b/addons/common/functions/fnc_parseList.sqf index dcdf255081..ef7eaae92a 100644 --- a/addons/common/functions/fnc_parseList.sqf +++ b/addons/common/functions/fnc_parseList.sqf @@ -46,7 +46,7 @@ if (_checkNil) then { _nilCheckedList = []; { if !(isNil _x) then { - _nilCheckedList pushBack _x; + _nilCheckedList pushBack (missionNamespace getVariable _x); }; nil } count _list; diff --git a/addons/repair/functions/fnc_moduleAddSpareParts.sqf b/addons/repair/functions/fnc_moduleAddSpareParts.sqf index 46689951a7..cceb62e10c 100644 --- a/addons/repair/functions/fnc_moduleAddSpareParts.sqf +++ b/addons/repair/functions/fnc_moduleAddSpareParts.sqf @@ -11,51 +11,35 @@ * None * * Example: - * function = "ace_repair_fnc_moduleAssignRepairVehicle" + * function = "ace_repair_fnc_moduleAddSpareParts" * * Public: No */ -#define DEBUG_MODE_FULL #include "script_component.hpp" params ["_logic"]; if (!isNull _logic) then { - private ["_list", "_part", "_amount", "_nilCheckPassedList"]; - // Module settings + private ["_list", "_part", "_amount"]; _list = _logic getVariable ["List", ""]; _part = _logic getVariable ["Part", 0]; _amount = _logic getVariable ["Amount", 1]; // Parse list - _nilCheckPassedList = ""; - { - _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); - if !(isnil _x) then { - if (_nilCheckPassedList == "") then { - _nilCheckPassedList = _x; - } else { - _nilCheckPassedList = _nilCheckPassedList + "," + _x; - }; - }; - } forEach ([_list, ","] call BIS_fnc_splitString); - _list = "[" + _nilCheckPassedList + "]"; - _list = [] call compile _list; + _list = [_list, true, true] call EFUNC(common,parseList); // Add synchronized objects to list { _list pushBack _x; - } forEach (synchronizedObjects _logic); + nil + } count (synchronizedObjects _logic); if (_list isEqualTo []) exitWith {}; - TRACE_3("module info parsed",_list,_part,_amount); + TRACE_3("Module info parsed",_list,_part,_amount); + // Add spare parts { - if (!isNil "_x" && {typeName _x == typeName objNull}) then { - [_x, _amount, _part, true] call FUNC(addSpareParts); - }; - } forEach _list; + [_x, _amount, _part, true] call FUNC(addSpareParts); + } count _list; }; - -true From 11738a964d79327b0704ebb34b13f5fe50cb3245 Mon Sep 17 00:00:00 2001 From: alganthe Date: Sat, 12 Sep 2015 02:55:48 +0200 Subject: [PATCH 29/66] contributing.md added --- CONTRIBUTING.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..fc0c12974b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,68 @@ +# Reporting an issue + +## Before reporting + +If you have found an issue with ACE3 please make sure that ACE3 is really the cause of the problem. To do this try to reproduce the issue with using only `@CBA_A3` and `@ace` on a newly created mission. + +Indicate if the issue appears on stable or development version. In case it is the development version, please also include the commit SHA-1 hash. + +
+
Please note:
+

It's not a valid to simply remove @ace from the mod list to confirm that ACE3 is the culprit.

+

If the error happens when using a third-party mod contact the author of the appropriate mod and report the issue there.

+
+ +## Reporting the issue + +Head over to the ACE3 GitHub issue tracker and press the "New issue" button in the top right corner. Add a descriptive title and copy the following issue template in to the text area: + +``` +ACE3 Version: 3.x.x +(indicate if stable or dev, if dev indicate the commit the version is based on) + +**Mods:** +* `@CBA_A3` +* `@ace` + +**Placed ACE3 Modules:** +* *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.* + +**Description:** +* Add a detailed description of the error. This makes it easier for us to fix the issue.* + +**Steps to reproduce:** +* *Add the steps needed to reproduce the issue.* + +**Where did the issue occur?** +* A possible answer might be "Multiplayer", "Editor" or "Singleplayer"* + +**RPT log file:** +* Add a link (pastebin.com) to the client or server RPT file.* +``` + +A video of the issue might be helpful in resolving it faster. + + +Github uses "Markdown" to style the output. If you want to know more about it (e.g. how to turn text bold, how to denote code blocks or inline code) have a look at the GitHub markdown documentation. + +# Feature Requests + +## Background +ACE2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have managed to finish only a fraction of the job so far. + +Please refrain from making requests for any planned or existing features from either ACE2, AGM or CSE. Most of them are already being or have been considered for porting or a rewrite. + +
+
Note:
+

Due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. Feel free to submit yours now, but don't expect them to be considered just yet. Any treatment or attention by developers towards the feature request thread is highly unlikely during this time.

+
+ +## Requesting a feature +In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for ACE 3 Feature requests. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. + +Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. + +# Regarding Pull Requests (PRs) + +- [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html) +- [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html) From cc59ac625b7d50b4a74d661d510125cda0ebf6b6 Mon Sep 17 00:00:00 2001 From: alganthe Date: Sat, 12 Sep 2015 03:36:09 +0200 Subject: [PATCH 30/66] links updated for the guides and how to - Added the installation guide - Getting started (deprecated) replaced by the information center page --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c98983d880..73f7874a9c 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,8 @@ The mod is **built modularly**, so almost any included PBO can be easily removed ### Guides & how-tos If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first: -- [Getting started](http://ace3mod.com/wiki/user/getting-started.html) +- [Installation guide](http://ace3mod.com/wiki/user/installation-guide.html) +- [Information center](http://ace3mod.com/wiki/user/information-center.html) #### Contributing You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE3, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. From 165ed90db67f62402cb7438352dbaf85a550c5ba Mon Sep 17 00:00:00 2001 From: alganthe Date: Sat, 12 Sep 2015 14:36:26 +0200 Subject: [PATCH 31/66] CONTRIBUTING.md updated --- CONTRIBUTING.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc0c12974b..0cdd596649 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,17 +52,12 @@ ACE2, AGM and CSE had a lot of features implemented or planned. All of them are Please refrain from making requests for any planned or existing features from either ACE2, AGM or CSE. Most of them are already being or have been considered for porting or a rewrite. -
-
Note:
-

Due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. Feel free to submit yours now, but don't expect them to be considered just yet. Any treatment or attention by developers towards the feature request thread is highly unlikely during this time.

-
- ## Requesting a feature In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for ACE 3 Feature requests. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. # Regarding Pull Requests (PRs) - +- You want to help but don't know where to start ? check the wiki entry for [setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) - [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html) - [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html) From c947cb09f1b4a79f3ea8d76a0cc531b4a1e18813 Mon Sep 17 00:00:00 2001 From: alganthe Date: Sat, 12 Sep 2015 16:06:28 +0200 Subject: [PATCH 32/66] Typo fixed in CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0cdd596649..ae1a5831fe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,6 +58,6 @@ In order to avoid duplicates and keep the issue tracker organized, we have creat Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. # Regarding Pull Requests (PRs) -- You want to help but don't know where to start ? check the wiki entry for [setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) +- You want to help but don't know where to start ? Check the wiki entry for [setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) - [Make sure to respect the file structure](http://ace3mod.com/wiki/development/modularity-and-pbo-structure.html) - [Make sure to respect the coding guidelines](http://ace3mod.com/wiki/development/coding-guidelines.html) From 024f95968c1cc31abf9c0c083e63065dfa2f7de0 Mon Sep 17 00:00:00 2001 From: alganthe Date: Sat, 12 Sep 2015 19:13:56 +0200 Subject: [PATCH 33/66] line about debug to added --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ae1a5831fe..6b7f1006fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,6 +26,7 @@ ACE3 Version: 3.x.x **Placed ACE3 Modules:** * *Add the list of modules you have placed on the map. Use 'None' if the error occurs without using any modules.* +* You can also press the `Debug to` button in the ACE3 option menu (escape -> ACE3 options -> Debug to) and add a link (pastebin.com) to the results. **Description:** * Add a detailed description of the error. This makes it easier for us to fix the issue.* From db41512dc02058d64f335df8b803cd76b8d86e8e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 14 Sep 2015 22:11:12 -0500 Subject: [PATCH 34/66] #2349 - Don't disable locking for base RocketPods --- addons/laser_selfdesignate/CfgWeapons.hpp | 2 +- addons/missileguidance/CfgAmmo.hpp | 20 +++++++++++++------- addons/missileguidance/CfgWeapons.hpp | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/addons/laser_selfdesignate/CfgWeapons.hpp b/addons/laser_selfdesignate/CfgWeapons.hpp index a62974ce40..70e1afde88 100644 --- a/addons/laser_selfdesignate/CfgWeapons.hpp +++ b/addons/laser_selfdesignate/CfgWeapons.hpp @@ -2,7 +2,7 @@ class CfgWeapons { // Disable locking unless newb mode class LauncherCore; class RocketPods: LauncherCore { - canLock = 1; + // canLock = 1; }; class missiles_DAGR: RocketPods { diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 779d2a82eb..64146b8e7e 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -6,7 +6,7 @@ enum { class CfgAmmo { class MissileBase; - class M_PG_AT : MissileBase { + class M_PG_AT: MissileBase { model = "\A3\Weapons_F\Ammo\Rocket_01_fly_F"; proxyShape = "\A3\Weapons_F\Ammo\Rocket_01_F"; @@ -68,15 +68,18 @@ class CfgAmmo { }; }; - class ACE_Hydra70_DAGR : M_PG_AT { + class ACE_Hydra70_DAGR: M_PG_AT { displayName = CSTRING(Hydra70_DAGR); displayNameShort = CSTRING(Hydra70_DAGR_Short); description = CSTRING(Hydra70_DAGR_Desc); descriptionShort = CSTRING(Hydra70_DAGR_Desc); + + //Explicity add guidance config + class ADDON: ADDON {}; }; - class ACE_Hellfire_AGM114K : ACE_Hydra70_DAGR { + class ACE_Hellfire_AGM114K: ACE_Hydra70_DAGR { displayName = CSTRING(Hellfire_AGM114K); displayNameShort = CSTRING(Hellfire_AGM114K_Short); @@ -91,10 +94,13 @@ class CfgAmmo { indirectHit = 71; indirectHitRange = 4.5; effectsMissile = "missile2"; + + //Explicity add guidance config + class ADDON: ADDON {}; }; // Titan - class M_Titan_AT : MissileBase {}; + class M_Titan_AT: MissileBase {}; class ACE_Javelin_FGM148: M_Titan_AT { irLock = 0; @@ -145,8 +151,8 @@ class CfgAmmo { //Take config changes from (M_Titan_AT_static: M_Titan_AT) initTime = 0.25; //"How long (in seconds) the projectile waits before starting it's engine.", - but doesn't seem to do anything effectsMissileInit = "RocketBackEffectsStaticRPG"; - class ADDON: ADDON { - enabled = 1; - }; + + //Explicity add guidance config + class ADDON: ADDON {}; }; }; diff --git a/addons/missileguidance/CfgWeapons.hpp b/addons/missileguidance/CfgWeapons.hpp index ab36d4dd52..a922c6b82e 100644 --- a/addons/missileguidance/CfgWeapons.hpp +++ b/addons/missileguidance/CfgWeapons.hpp @@ -4,7 +4,7 @@ class CfgWeapons { class LauncherCore; class RocketPods: LauncherCore { - canLock = 1; + // canLock = 1; }; class missiles_DAGR : RocketPods { canLock = 1; From 22ac16ead51c390d064ce4f7310e96a024c0247a Mon Sep 17 00:00:00 2001 From: Alessandro Foresi Date: Sat, 19 Sep 2015 16:22:36 +0200 Subject: [PATCH 35/66] Changed: Seeker to aimPoint instead of ASL position --- addons/missileguidance/functions/fnc_seekerType_Optic.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 872f33a917..1cc71c1d94 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -17,7 +17,7 @@ TRACE_1("", _launchParams); // TODO:: Make sure the missile maintains LOS _foundTargetPos = [0,0,0]; if(!isNil "_target") then { - _foundTargetPos = getPosASL _target; + _foundTargetPos = aimPos _target ; //_foundTargetPos = (_target modelToWorldVisual (getCenterOfMass _target)); }; @@ -48,4 +48,4 @@ if(!_angleOkay || !_losOkay) then { }; -_foundTargetPos; \ No newline at end of file +_foundTargetPos; From 10296d2883236c0d64de6be31f21708a07950669 Mon Sep 17 00:00:00 2001 From: alganthe Date: Wed, 23 Sep 2015 15:50:50 +0200 Subject: [PATCH 36/66] PAK and Surgical Kit strings normalized inside modules. Signed-off-by: alganthe --- addons/medical/stringtable.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 17944e83c3..813cbbd4ea 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -3274,7 +3274,7 @@ Elsősegélycsomag helyek
- Where can the Personal Aid Kit be used? + Where can the PAK be used? Где может использоваться аптечка? Gdzie można korzystać z apteczek osobistych? ¿Dónde se puede utilizar el equipo de primeros auxilios? @@ -3295,7 +3295,7 @@ Условие использования аптечки - When can the Personal Aid Kit be used? + When can the PAK be used? Kde může být použita osobní lékárnička? ¿Cuando se puede utilizar el Equipo de primeros auxilios? Quand peut être utilisé le Kit de Premier Secours @@ -3349,7 +3349,7 @@ Járművek & létesítmény - Allow Surgical kit (Adv) + Allow Surgical Kit (Adv) Хирургический набор может использоваться (усл.) Ust. zestawu chirurg. Permitir equipo quirúrgico (Avanzado) @@ -3360,7 +3360,7 @@ Sebészkészlet (Fejlett) engedélyezése - Who can use the surgical kit? + Who can use the Surgical Kit? Кто может использовать хирургический набор? Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran? ¿Quién puede utilizar el equipo quirúrgico? @@ -3371,7 +3371,7 @@ Ki használhatja a sebészkészletet? - Remove Surgical kit (Adv) + Remove Surgical Kit (Adv) Удалять хирургический набор (усл.) Usuń zest. chir. po użyciu Eliminar equipo quirúrgico (Avanzado) @@ -3393,7 +3393,7 @@ Eltávolítódjon a sebészkészlet használatkor? - Locations Surgical kit (Adv) + Locations Surgical Kit (Adv) Место использования хирургического набора (усл.) Ogr. zestawu chirurg. Ubicaciones del equipo quirúrgico (Avanzado) @@ -3404,7 +3404,7 @@ Sebészkészlet (Fejlett) helyei - Where can the Surgical kit be used? + Where can the Surgical Kit be used? Где может использоваться хирургический набор? Gdzie można korzystać z zestawu chirurgicznego? Dónde se puede utilizar el equipo quirúrgico @@ -3415,7 +3415,7 @@ Hol lehet a sebészkészletet használni? - Condition Surgical kit (Adv) + Condition Surgical Kit (Adv) Podmínka chirurgické soupravy (Pokr.) Condición de equipo quirúrgico (Av) Conditions d'utilisation du kit de chirurgie @@ -3425,7 +3425,7 @@ Условие использования хирургического набора (усл.) - When can the Surgical kit be used? + When can the Surgical Kit be used? Kde může být použita chirurgická souprava? ¿Cuando se puede utilizar el equipo quirúrgico? Quand peut être utilisé les kit de chirurgie From e3985dce3eb95ea7674b9a5e1fe18d2b939cae94 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 00:40:59 +0200 Subject: [PATCH 37/66] Cleanup sitRotation as it's no longer needed --- addons/sitting/CfgVehicles.hpp | 6 ------ addons/sitting/functions/fnc_sit.sqf | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/addons/sitting/CfgVehicles.hpp b/addons/sitting/CfgVehicles.hpp index a156d5e87e..7b0237d172 100644 --- a/addons/sitting/CfgVehicles.hpp +++ b/addons/sitting/CfgVehicles.hpp @@ -60,7 +60,6 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; - GVAR(sitRotation) = 10; }; // Camping Chair class Land_CampingChair_V2_F: ThingX { @@ -69,7 +68,6 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; - GVAR(sitRotation) = 45; }; class Furniture_base_F; @@ -80,7 +78,6 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 90; GVAR(sitPosition[]) = {0, 0, -0.5}; - GVAR(sitRotation) = 5; }; // Chair (Wooden) class Land_ChairWood_F: Furniture_base_F { @@ -89,7 +86,6 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.05, 0}; - GVAR(sitRotation) = 75; }; // Office Chair class Land_OfficeChair_01_F: Furniture_base_F { @@ -98,7 +94,6 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, 0, -0.6}; - GVAR(sitRotation) = 15; }; // Rattan Chair class Land_RattanChair_01_F: Furniture_base_F { @@ -107,6 +102,5 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -1}; // Z must be -1 due to chair's geometry (magic floating seat point) - GVAR(sitRotation) = 2; }; }; diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 5e9c36947e..e77e2d2b13 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_sitRotation", "_seatPosOrig"]; +private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_seatPosOrig"]; params ["_seat", "_player"]; @@ -50,7 +50,6 @@ _player setVariable [QGVAR(StandUpActionID), _actionID]; _configFile = configFile >> "CfgVehicles" >> typeOf _seat; _sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection)); _sitPosition = getArray (_configFile >> QGVAR(sitPosition)); -_sitRotation = if (isNumber (_configFile >> QGVAR(sitRotation))) then {getNumber (_configFile >> QGVAR(sitRotation))} else {45}; // Apply default if config entry not present // Get random animation and perform it (before moving player to ensure correct placement) [_player, call FUNC(getRandomAnimation), 2] call EFUNC(common,doAnimation); // Correctly places when using non-transitional animations From a7a716ca8d730ad407625c3447b15a7d255c9766 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 01:20:40 +0200 Subject: [PATCH 38/66] Better sitting framework in terms of interactions --- addons/sitting/CfgEventHandlers.hpp | 8 ++++ addons/sitting/CfgVehicles.hpp | 24 ----------- addons/sitting/XEH_preInit.sqf | 3 ++ .../sitting/functions/fnc_addSitActions.sqf | 42 +++++++++++++++++++ addons/sitting/functions/fnc_canSit.sqf | 6 +-- addons/sitting/functions/fnc_sit.sqf | 2 +- 6 files changed, 56 insertions(+), 29 deletions(-) create mode 100644 addons/sitting/functions/fnc_addSitActions.sqf diff --git a/addons/sitting/CfgEventHandlers.hpp b/addons/sitting/CfgEventHandlers.hpp index 1e804e8cc9..bd13e623f0 100644 --- a/addons/sitting/CfgEventHandlers.hpp +++ b/addons/sitting/CfgEventHandlers.hpp @@ -17,3 +17,11 @@ class Extended_Killed_EventHandlers { }; }; }; + +class Extended_InitPost_EventHandlers { + class All { + class ADDON { + init = QUOTE(_this call DFUNC(addSitActions)) + }; + }; +}; diff --git a/addons/sitting/CfgVehicles.hpp b/addons/sitting/CfgVehicles.hpp index 7b0237d172..0d41ba1ed6 100644 --- a/addons/sitting/CfgVehicles.hpp +++ b/addons/sitting/CfgVehicles.hpp @@ -34,29 +34,10 @@ class CfgVehicles { }; }; - #define MACRO_SEAT_ACTION \ - class ACE_Actions { \ - class ACE_MainActions { \ - displayName = ECSTRING(interaction,MainAction); \ - selection = ""; \ - distance = 1.5; \ - condition = "true"; \ - class GVAR(Sit) { \ - displayName = CSTRING(Sit); \ - condition = QUOTE(_this call FUNC(canSit)); \ - statement = QUOTE(_this call FUNC(sit)); \ - showDisabled = 0; \ - priority = 0; \ - icon = PATHTOF(UI\sit_ca.paa); \ - }; \ - }; \ - }; - class ThingX; // Folding Chair class Land_CampingChair_V1_F: ThingX { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; @@ -64,7 +45,6 @@ class CfgVehicles { // Camping Chair class Land_CampingChair_V2_F: ThingX { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; @@ -74,7 +54,6 @@ class CfgVehicles { // Chair (Plastic) class Land_ChairPlastic_F: Furniture_base_F { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 90; GVAR(sitPosition[]) = {0, 0, -0.5}; @@ -82,7 +61,6 @@ class CfgVehicles { // Chair (Wooden) class Land_ChairWood_F: Furniture_base_F { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.05, 0}; @@ -90,7 +68,6 @@ class CfgVehicles { // Office Chair class Land_OfficeChair_01_F: Furniture_base_F { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, 0, -0.6}; @@ -98,7 +75,6 @@ class CfgVehicles { // Rattan Chair class Land_RattanChair_01_F: Furniture_base_F { XEH_ENABLED; - MACRO_SEAT_ACTION GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -1}; // Z must be -1 due to chair's geometry (magic floating seat point) diff --git a/addons/sitting/XEH_preInit.sqf b/addons/sitting/XEH_preInit.sqf index 86912ada6b..15ffe281c8 100644 --- a/addons/sitting/XEH_preInit.sqf +++ b/addons/sitting/XEH_preInit.sqf @@ -2,6 +2,7 @@ ADDON = false; +PREP(addSitActions); PREP(canSit); PREP(canStand); PREP(getRandomAnimation); @@ -10,4 +11,6 @@ PREP(moduleInit); PREP(sit); PREP(stand); +GVAR(initializedClasses) = []; + ADDON = true; diff --git a/addons/sitting/functions/fnc_addSitActions.sqf b/addons/sitting/functions/fnc_addSitActions.sqf new file mode 100644 index 0000000000..18779d9229 --- /dev/null +++ b/addons/sitting/functions/fnc_addSitActions.sqf @@ -0,0 +1,42 @@ +/* + * Author: Jonpas + * Adds sit actions. + * + * Arguments: + * 0: Seat + * + * Return Value: + * None + * + * Example: + * [seat] call ace_sitting_fnc_addSitActions + * + * Public: No + */ +#include "script_component.hpp" + +params ["_seat"]; +private ["_type", "_sitAction"]; + +_type = typeOf _seat; + +// Exit if the object is not specified as a seat +if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canSit)) != 1) exitWith {}; + +// Exit if class already initialized +if (_type in GVAR(initializedClasses)) exitWith {}; + +GVAR(initializedClasses) pushBack _type; + +_sitAction = [ + QGVAR(Sit), + localize LSTRING(Sit), + QUOTE(PATHTOF(UI\sit_ca.paa)), + {_this call FUNC(sit)}, + {_this call FUNC(canSit)}, + {}, + [], + [0, 0, 0], + 1.5 +] call EFUNC(interact_menu,createAction); +[_type, 0, ["ACE_MainActions"], _sitAction] call EFUNC(interact_menu,addActionToClass); diff --git a/addons/sitting/functions/fnc_canSit.sqf b/addons/sitting/functions/fnc_canSit.sqf index fef36b4bbd..1dd0c9676f 100644 --- a/addons/sitting/functions/fnc_canSit.sqf +++ b/addons/sitting/functions/fnc_canSit.sqf @@ -4,22 +4,20 @@ * * Arguments: * 0: Seat - * 1: Player * * Return Value: * Can Sit Down * * Example: - * [seat, player] call ace_sitting_fnc_canSit + * [seat] call ace_sitting_fnc_canSit * * Public: No */ #include "script_component.hpp" -params ["_seat", "_player"]; +params ["_seat"]; // Sitting enabled, is seat object, not occupied and standing up (or not on a big slope) GVAR(enable) && -{getNumber (configFile >> "CfgVehicles" >> typeOf _seat >> QGVAR(canSit)) == 1} && {isNil {_seat getVariable QGVAR(seatOccupied)}} && {round (vectorUp _seat select 0) == 0 && {round (vectorUp _seat select 1) == 0} && {round (vectorUp _seat select 2) == 1}} diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index e77e2d2b13..61872dd1a0 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -21,7 +21,7 @@ private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_seatPosO params ["_seat", "_player"]; // Set global variable for standing up -GVAR(seat) = _seat; +GVAR(seat) = _seat; //@todo - put into player isSitting variable // Overwrite weird position, because Arma decides to set it differently based on current animation/stance... _player switchMove "amovpknlmstpsraswrfldnon"; From dbd0beb5140355133ee234bd1cd658a5a2cd32d7 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 01:31:23 +0200 Subject: [PATCH 39/66] Stored a global variable in player setVariable --- addons/sitting/CfgEventHandlers.hpp | 1 + addons/sitting/XEH_clientInit.sqf | 2 +- addons/sitting/functions/fnc_canStand.sqf | 2 +- addons/sitting/functions/fnc_handleInterrupt.sqf | 2 +- addons/sitting/functions/fnc_sit.sqf | 9 +++------ addons/sitting/functions/fnc_stand.sqf | 9 ++++++--- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/addons/sitting/CfgEventHandlers.hpp b/addons/sitting/CfgEventHandlers.hpp index bd13e623f0..8b3768a747 100644 --- a/addons/sitting/CfgEventHandlers.hpp +++ b/addons/sitting/CfgEventHandlers.hpp @@ -18,6 +18,7 @@ class Extended_Killed_EventHandlers { }; }; +// Need initPost or there are problems with setVariable class Extended_InitPost_EventHandlers { class All { class ADDON { diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index 9cf8278877..23816bd8d7 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -4,7 +4,7 @@ if (!hasInterface) exitWith {}; // Add interaction menu exception -["isNotSitting", {!((_this select 0) getVariable [QGVAR(isSitting), false])}] call EFUNC(common,addCanInteractWithCondition); +["isNotSitting", {isNil {(_this select 0) getVariable QGVAR(isSitting)}}] call EFUNC(common,addCanInteractWithCondition); // Handle interruptions ["medical_onUnconscious", {_this call DFUNC(handleInterrupt)}] call EFUNC(common,addEventhandler); diff --git a/addons/sitting/functions/fnc_canStand.sqf b/addons/sitting/functions/fnc_canStand.sqf index c516485a82..a051e1784e 100644 --- a/addons/sitting/functions/fnc_canStand.sqf +++ b/addons/sitting/functions/fnc_canStand.sqf @@ -18,4 +18,4 @@ params ["_player"]; // Sitting -(_player getVariable [QGVAR(isSitting), false]) +!isNil {_player getVariable QGVAR(isSitting)} diff --git a/addons/sitting/functions/fnc_handleInterrupt.sqf b/addons/sitting/functions/fnc_handleInterrupt.sqf index 328675c172..c7e0a545ff 100644 --- a/addons/sitting/functions/fnc_handleInterrupt.sqf +++ b/addons/sitting/functions/fnc_handleInterrupt.sqf @@ -17,6 +17,6 @@ params ["_player"]; -if (_player getVariable [QGVAR(isSitting), false]) then { +if (!isNil {_player getVariable QGVAR(isSitting)}) then { _player call FUNC(stand); }; diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 61872dd1a0..1b6f979b42 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -20,9 +20,6 @@ private ["_actionID", "_configFile", "_sitDirection", "_sitPosition", "_seatPosO params ["_seat", "_player"]; -// Set global variable for standing up -GVAR(seat) = _seat; //@todo - put into player isSitting variable - // Overwrite weird position, because Arma decides to set it differently based on current animation/stance... _player switchMove "amovpknlmstpsraswrfldnon"; @@ -60,8 +57,8 @@ _player setDir _sitDirection; // No need for ATL/ASL as modelToWorld returns in format position _player setPos (_seat modelToWorld _sitPosition); -// Set variables -_player setVariable [QGVAR(isSitting), true]; +// Set variables, save seat object on player +_player setVariable [QGVAR(isSitting), _seat]; _seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat @@ -72,7 +69,7 @@ _seatPosOrig = getPosASL _seat; _args params ["_player", "_seat", "_seatPosOrig"]; // Remove PFH if not sitting any more - if !(_player getVariable [QGVAR(isSitting), false]) exitWith { + if (isNil {_player getVariable QGVAR(isSitting)}) exitWith { [_pfhId] call CBA_fnc_removePerFrameHandler; TRACE_1("Remove PFH",_player getVariable [ARR_2(QGVAR(isSitting), false)]); }; diff --git a/addons/sitting/functions/fnc_stand.sqf b/addons/sitting/functions/fnc_stand.sqf index ef19d5f586..4c56eba1c4 100644 --- a/addons/sitting/functions/fnc_stand.sqf +++ b/addons/sitting/functions/fnc_stand.sqf @@ -17,7 +17,7 @@ params ["_player"]; -// remove scroll wheel action +// Remove scroll wheel action _player removeAction (_player getVariable [QGVAR(StandUpActionID), -1]); // Restore animation @@ -31,7 +31,10 @@ _animation = switch (currentWeapon _player) do { [_player, _animation, 2] call EFUNC(common,doAnimation); +// Get seat from variable on player +_seat = _player getVariable [QGVAR(isSitting), objNull]; +if (isNull _seat) exitWith {}; + // Set variables to nil _player setVariable [QGVAR(isSitting), nil]; -GVAR(seat) setVariable [QGVAR(seatOccupied), nil, true]; -GVAR(seat) = nil; +_seat setVariable [QGVAR(seatOccupied), nil, true]; From 85cff04e0c368caf1f426d5d587e229cfcc9b6c4 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 01:37:19 +0200 Subject: [PATCH 40/66] Stored scroll-wheel action ID into already existing player setVariable instead of having 2 --- addons/sitting/functions/fnc_sit.sqf | 10 +--------- addons/sitting/functions/fnc_stand.sqf | 13 ++++++------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 1b6f979b42..821bb230d1 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -24,12 +24,6 @@ params ["_seat", "_player"]; _player switchMove "amovpknlmstpsraswrfldnon"; // Add scroll-wheel action to release object -_actionID = _player getVariable [QGVAR(StandUpActionID), -1]; - -if (_actionID != -1) then { - _player removeAction _actionID; -}; - _actionID = _player addAction [ format ["%1", localize LSTRING(Stand)], QUOTE((_this select 0) call FUNC(stand)), @@ -41,8 +35,6 @@ _actionID = _player addAction [ QUOTE(_this call FUNC(canStand)) ]; -_player setVariable [QGVAR(StandUpActionID), _actionID]; - // Read config _configFile = configFile >> "CfgVehicles" >> typeOf _seat; _sitDirection = (getDir _seat) + getNumber (_configFile >> QGVAR(sitDirection)); @@ -58,7 +50,7 @@ _player setDir _sitDirection; _player setPos (_seat modelToWorld _sitPosition); // Set variables, save seat object on player -_player setVariable [QGVAR(isSitting), _seat]; +_player setVariable [QGVAR(isSitting), [_seat, _actionID]]; _seat setVariable [QGVAR(seatOccupied), true, true]; // To prevent multiple people sitting on one seat diff --git a/addons/sitting/functions/fnc_stand.sqf b/addons/sitting/functions/fnc_stand.sqf index 4c56eba1c4..4c08461746 100644 --- a/addons/sitting/functions/fnc_stand.sqf +++ b/addons/sitting/functions/fnc_stand.sqf @@ -16,12 +16,14 @@ #include "script_component.hpp" params ["_player"]; +private ["_animation"]; -// Remove scroll wheel action -_player removeAction (_player getVariable [QGVAR(StandUpActionID), -1]); +(_player getVariable QGVAR(isSitting)) params ["_seat", "_actionID"]; + +// Remove scroll-wheel action +_player removeAction _actionID; // Restore animation -private "_animation"; _animation = switch (currentWeapon _player) do { case "": {"amovpercmstpsnonwnondnon"}; case (primaryWeapon _player): {"amovpercmstpslowwrfldnon"}; @@ -31,10 +33,7 @@ _animation = switch (currentWeapon _player) do { [_player, _animation, 2] call EFUNC(common,doAnimation); -// Get seat from variable on player -_seat = _player getVariable [QGVAR(isSitting), objNull]; -if (isNull _seat) exitWith {}; - // Set variables to nil _player setVariable [QGVAR(isSitting), nil]; +if (isNull _seat) exitWith {}; _seat setVariable [QGVAR(seatOccupied), nil, true]; From cd510c8ff75d36e813babcb908ac2450df47dccb Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 02:05:38 +0200 Subject: [PATCH 41/66] Added carrying to chairs --- addons/dragging/CfgEventHandlers.hpp | 12 +----------- addons/sitting/CfgVehicles.hpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/addons/dragging/CfgEventHandlers.hpp b/addons/dragging/CfgEventHandlers.hpp index 2ff7d07c0d..3ee6e9b8cf 100644 --- a/addons/dragging/CfgEventHandlers.hpp +++ b/addons/dragging/CfgEventHandlers.hpp @@ -18,17 +18,7 @@ class Extended_Init_EventHandlers { init = QUOTE(_this call DFUNC(initPerson)); }; }; - class StaticWeapon { - class ADDON { - init = QUOTE(_this call DFUNC(initObject)); - }; - }; - class ReammoBox_F { - class ADDON { - init = QUOTE(_this call DFUNC(initObject)); - }; - }; - class ACE_RepairItem_Base { + class All { class ADDON { init = QUOTE(_this call DFUNC(initObject)); }; diff --git a/addons/sitting/CfgVehicles.hpp b/addons/sitting/CfgVehicles.hpp index 0d41ba1ed6..4ac0d0edb7 100644 --- a/addons/sitting/CfgVehicles.hpp +++ b/addons/sitting/CfgVehicles.hpp @@ -41,6 +41,9 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 180; }; // Camping Chair class Land_CampingChair_V2_F: ThingX { @@ -48,6 +51,9 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -0.45}; + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 180; }; class Furniture_base_F; @@ -57,6 +63,9 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 90; GVAR(sitPosition[]) = {0, 0, -0.5}; + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 270; }; // Chair (Wooden) class Land_ChairWood_F: Furniture_base_F { @@ -64,6 +73,9 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.05, 0}; + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 180; }; // Office Chair class Land_OfficeChair_01_F: Furniture_base_F { @@ -71,6 +83,9 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, 0, -0.6}; + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 180; }; // Rattan Chair class Land_RattanChair_01_F: Furniture_base_F { @@ -78,5 +93,8 @@ class CfgVehicles { GVAR(canSit) = 1; GVAR(sitDirection) = 180; GVAR(sitPosition[]) = {0, -0.1, -1}; // Z must be -1 due to chair's geometry (magic floating seat point) + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,carryPosition[]) = {0, 0.75, 0.5}; + EGVAR(dragging,carryDirection) = 180; }; }; From ae07a71b0de9ac0b34daefc42aafe29f5c500eed Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 27 Sep 2015 02:13:32 +0200 Subject: [PATCH 42/66] Minimized XEH to ThingX config level --- addons/dragging/CfgEventHandlers.hpp | 7 ++++++- addons/sitting/CfgEventHandlers.hpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/dragging/CfgEventHandlers.hpp b/addons/dragging/CfgEventHandlers.hpp index 3ee6e9b8cf..532038c2c5 100644 --- a/addons/dragging/CfgEventHandlers.hpp +++ b/addons/dragging/CfgEventHandlers.hpp @@ -18,7 +18,12 @@ class Extended_Init_EventHandlers { init = QUOTE(_this call DFUNC(initPerson)); }; }; - class All { + class StaticWeapon { + class ADDON { + init = QUOTE(_this call DFUNC(initObject)); + }; + }; + class ThingX { class ADDON { init = QUOTE(_this call DFUNC(initObject)); }; diff --git a/addons/sitting/CfgEventHandlers.hpp b/addons/sitting/CfgEventHandlers.hpp index 8b3768a747..da7efe1601 100644 --- a/addons/sitting/CfgEventHandlers.hpp +++ b/addons/sitting/CfgEventHandlers.hpp @@ -20,7 +20,7 @@ class Extended_Killed_EventHandlers { // Need initPost or there are problems with setVariable class Extended_InitPost_EventHandlers { - class All { + class ThingX { class ADDON { init = QUOTE(_this call DFUNC(addSitActions)) }; From 4521df0a575776a59b0b9db77ce0acc753fdc4cf Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 28 Sep 2015 16:17:12 +0200 Subject: [PATCH 43/66] Add synchronizedObjects vehicle support to assignObjectsInList with an optional parameter --- addons/common/functions/fnc_assignObjectsInList.sqf | 12 +++++++++--- .../functions/fnc_moduleAssignMedicalVehicle.sqf | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_assignObjectsInList.sqf b/addons/common/functions/fnc_assignObjectsInList.sqf index eddd792500..a09447a43a 100644 --- a/addons/common/functions/fnc_assignObjectsInList.sqf +++ b/addons/common/functions/fnc_assignObjectsInList.sqf @@ -8,6 +8,7 @@ * 1: Variable Name * 2: Value * 3: Global + * 4: Vehicle (default: false) * * Return Value: * None @@ -19,7 +20,7 @@ */ #include "script_component.hpp" -params ["_list", "_variable", "_setting", "_global"]; +params ["_list", "_variable", "_setting", "_global", ["_vehicle", false]]; if (typeName _list == "STRING") then { _list = [_list, true, true] call FUNC(parseList); @@ -30,8 +31,13 @@ if (typeName _list == "STRING") then { if (!isNil "_x") then { if (typeName _x == typeName objNull) then { if (local _x) then { - _x setVariable [_variable, _setting, _global]; - TRACE_4("Set variable",_x,_variable,_setting,_global); + if (_vehicle) then { + (vehicle _x) setVariable [_variable, _setting, _global]; + TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); + } else { + _x setVariable [_variable, _setting, _global]; + TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); + }; }; }; }; diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index 9cbb698c82..2bc6d3a332 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -22,5 +22,5 @@ if (!isNull _logic) then { _setting = _logic getVariable ["enabled", 0]; [_list, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); - [synchronizedObjects _logic, QGVAR(medicClass), _setting, true] call EFUNC(common,assignObjectsInList); + [synchronizedObjects _logic, QGVAR(medicClass), _setting, true, true] call EFUNC(common,assignObjectsInList); }; From c0b78ecf3a5695c60e590330ae746c1181c93e4e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 29 Sep 2015 11:36:30 -0500 Subject: [PATCH 44/66] Set Default Channel at mission start --- addons/map/ACE_Settings.hpp | 22 ++++++++++++++++++++++ addons/map/CfgVehicles.hpp | 14 ++++++++++++++ addons/map/XEH_postInitClient.sqf | 15 +++++++++++++++ addons/map/functions/fnc_moduleMap.sqf | 3 ++- addons/map/stringtable.xml | 6 ++++++ 5 files changed, 59 insertions(+), 1 deletion(-) diff --git a/addons/map/ACE_Settings.hpp b/addons/map/ACE_Settings.hpp index 4e2a5d5706..c0d2718c1f 100644 --- a/addons/map/ACE_Settings.hpp +++ b/addons/map/ACE_Settings.hpp @@ -2,33 +2,55 @@ class ACE_Settings { class GVAR(BFT_Interval) { value = 1.0; typeName = "SCALAR"; + displayName = CSTRING(BFT_Interval_DisplayName); + description = CSTRING(BFT_Interval_Description); }; class GVAR(BFT_Enabled) { value = 0; typeName = "BOOL"; + displayName = CSTRING(BFT_Enabled_DisplayName); + description = CSTRING(BFT_Enabled_Description); }; class GVAR(BFT_HideAiGroups) { value = 0; typeName = "BOOL"; + displayName = CSTRING(BFT_HideAiGroups_DisplayName); + description = CSTRING(BFT_HideAiGroups_Description); }; class GVAR(mapIllumination) { value = 1; typeName = "BOOL"; + displayName = CSTRING(MapIllumination_DisplayName); + description = CSTRING(MapIllumination_Description); }; class GVAR(mapGlow) { value = 1; typeName = "BOOL"; + displayName = CSTRING(MapGlow_DisplayName); + description = CSTRING(MapGlow_Description); }; class GVAR(mapShake) { value = 1; typeName = "BOOL"; + displayName = CSTRING(MapShake_DisplayName); + description = CSTRING(MapShake_Description); }; class GVAR(mapLimitZoom) { value = 0; typeName = "BOOL"; + displayName = CSTRING(MapLimitZoom_DisplayName); + description = CSTRING(MapLimitZoom_Description); }; class GVAR(mapShowCursorCoordinates) { value = 0; typeName = "BOOL"; + displayName = CSTRING(MapShowCursorCoordinates_DisplayName); + description = CSTRING(MapShowCursorCoordinates_Description); + }; + class GVAR(DefaultChannel) { + value = -1; + typeName = "SCALAR"; + displayName = CSTRING(DefaultChannel_DisplayName); + description = CSTRING(DefaultChannel_Description); }; }; diff --git a/addons/map/CfgVehicles.hpp b/addons/map/CfgVehicles.hpp index 560453b416..7906de8bb7 100644 --- a/addons/map/CfgVehicles.hpp +++ b/addons/map/CfgVehicles.hpp @@ -55,6 +55,20 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 0; }; + class DefaultChannel { + displayName = CSTRING(DefaultChannel_DisplayName); + description = CSTRING(DefaultChannel_Description); + typeName = "NUMBER"; + class values { + class disable {name = ECSTRING(common,Disabled); value = -1; default = 1;}; + class global {name = "$STR_channel_global"; value = 0;}; + class side {name = "$STR_channel_side"; value = 1;}; + class command {name = "$STR_channel_command"; value = 2;}; + class group {name = "$STR_channel_group"; value = 3;}; + class vehicle {name = "$STR_channel_vehicle"; value = 4;}; + class direct {name = "$STR_channel_direct"; value = 5;}; + }; + }; }; class ModuleDescription { description = CSTRING(Module_Description); diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 02800c2540..c162f8802d 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -56,6 +56,21 @@ call FUNC(determineZoom); }, 0] call CBA_fnc_addPerFrameHandler; ["SettingsInitialized", { + if (isMultiplayer && {GVAR(DefaultChannel) != -1}) then { + //Set the chat channel once the map has finished loading + [{ + if ((isNull findDisplay 37) && {isNull findDisplay 52} && {isNull findDisplay 53} && {isNull findDisplay 12}) exitWith {}; + [_this select 1] call CBA_fnc_removePerFrameHandler; + + setCurrentChannel GVAR(DefaultChannel); + if (currentChannel == GVAR(DefaultChannel)) then { + // ACE_LOGINFO_1("Channel Set - %1", currentChannel); + } else { + ACE_LOGERROR_2("Failed To Set Channel %1 (is %2)", GVAR(DefaultChannel), currentChannel); + }; + }, 0, []] call CBA_fnc_addPerFrameHandler; + }; + // Start Blue Force Tracking if Enabled if (GVAR(BFT_Enabled)) then { GVAR(BFT_markers) = []; diff --git a/addons/map/functions/fnc_moduleMap.sqf b/addons/map/functions/fnc_moduleMap.sqf index b7db6996d6..605c15127e 100644 --- a/addons/map/functions/fnc_moduleMap.sqf +++ b/addons/map/functions/fnc_moduleMap.sqf @@ -13,7 +13,7 @@ if !(isServer) exitWith {}; -params ["_logic", "_units", "_activated"]; +params ["_logic", "", "_activated"]; if !(_activated) exitWith {}; @@ -22,5 +22,6 @@ if !(_activated) exitWith {}; [_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(mapShowCursorCoordinates), "MapShowCursorCoordinates"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(DefaultChannel), "DefaultChannel" ] call EFUNC(common,readSettingFromModule); ACE_LOGINFO("Map Module Initialized."); diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 8f693ef37a..76055cc45a 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -256,5 +256,11 @@ Snížit jas Reducir brillo + + Set Channel At Start + + + Change the starting marker channel at mission start + \ No newline at end of file From 251437c415444f0472ea2395e1e1a860ee680826 Mon Sep 17 00:00:00 2001 From: gienkov Date: Tue, 29 Sep 2015 20:37:30 +0200 Subject: [PATCH 45/66] pl translation --- addons/map/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 76055cc45a..0488a13493 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -258,9 +258,11 @@ Set Channel At Start + Ust. domyślny kanał Change the starting marker channel at mission start + Ustaw domyślny kanał dla markerów przy starcie misji \ No newline at end of file From c75d219b65a2c311293a31dfcc236abafdc0f5b6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 3 Oct 2015 21:34:46 -0500 Subject: [PATCH 46/66] Cleanup Undefined Functions --- addons/common/functions/fnc_dumpArray.sqf | 14 ++--- .../functions/fnc_execPersistentFnc.sqf | 3 +- addons/common/functions/fnc_execRemoteFnc.sqf | 3 +- addons/common/functions/fnc_loadPerson.sqf | 2 +- .../fnc_sendDisplayInformationTo.sqf | 53 ------------------- .../functions/fnc_sendDisplayMessageTo.sqf | 53 ------------------- 6 files changed, 11 insertions(+), 117 deletions(-) delete mode 100644 addons/common/functions/fnc_sendDisplayInformationTo.sqf delete mode 100644 addons/common/functions/fnc_sendDisplayMessageTo.sqf diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index 182c542df2..010736d3a9 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -1,22 +1,24 @@ /* * Author: ? - * ? + * Dumps an array to the RPT, showing the depth of each element. * * Arguments: * 0: Array to be dumped - * 1: Depth + * 1: Depth * * Return Value: * None * + * Example: + * [[0, [1,2], [[3]]]] call ace_common_fnc_dumpArray + * * Public: No */ #include "script_component.hpp" -params ["_var", "_depth"]; +params ["_var", ["_depth", 0, [0]]]; -private "_pad"; -_pad = ""; +local _pad = ""; for "_i" from 0 to _depth do { _pad = _pad + toString [9]; @@ -38,5 +40,5 @@ if (IS_ARRAY(_var)) then { diag_log text format ["%1],", _pad]; }; } else { - diag_log text format ["%1%2", _pad, [_var] call FUNC(formatVar)]; + diag_log text format ["%1%2", _pad, _var]; }; diff --git a/addons/common/functions/fnc_execPersistentFnc.sqf b/addons/common/functions/fnc_execPersistentFnc.sqf index dc88a7c3c9..0b7bccb69a 100644 --- a/addons/common/functions/fnc_execPersistentFnc.sqf +++ b/addons/common/functions/fnc_execPersistentFnc.sqf @@ -20,11 +20,10 @@ GVAR(remoteFnc) = _this; params ["_arguments", "_function", "_unit", "_name"]; +TRACE_4("params", _arguments, _function, _unit, _name); _function = call compile _function; -//["Remote", [_arguments, _this select 1, _name], {format ["%1 call %2 id: %3", _this select 0, _this select 1, _this select 2]}, false] call FUNC(log); - // execute function on every currently connected machine [[_arguments, _unit], _this select 1, 2] call FUNC(execRemoteFnc); diff --git a/addons/common/functions/fnc_execRemoteFnc.sqf b/addons/common/functions/fnc_execRemoteFnc.sqf index 6b617bf92f..0dd0653a33 100644 --- a/addons/common/functions/fnc_execRemoteFnc.sqf +++ b/addons/common/functions/fnc_execRemoteFnc.sqf @@ -23,11 +23,10 @@ GVAR(remoteFnc) = _this; params ["_arguments", "_function", ["_unit", 2]]; +TRACE_3("params", _arguments, _function, _unit); _function = call compile _function; -//["Remote", [_arguments, _this select 1, _unit], {format ["%1 call %2 to: %3", _this select 0, _this select 1, _this select 2]}, false] call FUNC(log); - if (typeName _unit == "SCALAR") exitWith { switch (_unit) do { case 0 : { diff --git a/addons/common/functions/fnc_loadPerson.sqf b/addons/common/functions/fnc_loadPerson.sqf index 377412bd4c..da729ed0d7 100644 --- a/addons/common/functions/fnc_loadPerson.sqf +++ b/addons/common/functions/fnc_loadPerson.sqf @@ -21,7 +21,7 @@ private ["_vehicle", "_loadcar", "_loadair", "_loadtank", "_loadboat"]; _vehicle = objNull; -if (!([_caller] call FUNC(canInteract)) || {_caller == _unit}) exitwith {_vehicle}; +if (!([_caller, _unit, ["isNotDragging", "isNotCarrying"]] call FUNC(canInteractWith)) || {_caller == _unit}) exitwith {_vehicle}; _loadcar = nearestObject [_unit, "Car"]; diff --git a/addons/common/functions/fnc_sendDisplayInformationTo.sqf b/addons/common/functions/fnc_sendDisplayInformationTo.sqf deleted file mode 100644 index aa3dba2365..0000000000 --- a/addons/common/functions/fnc_sendDisplayInformationTo.sqf +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Author: Glowbal - * Sends a display information hint to a receiver - * - * Arguments: - * 0: receiver - * 1: title - * 2: content - * 3: type (optional) - * - * Return Value: - * None - * - * Public: Yes - */ -#include "script_component.hpp" - -params [["_reciever", objNull], ["_title", ""], ["_content", ""], ["_type", 0], ["_parameters", []]]; - -if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QFUNC(sendDisplayInformationTo), _reciever, false] call FUNC(execRemoteFnc); - } else { - if (isLocalized _title) then { - _title = localize _title; - }; - - private "_localizationArray"; - _localizationArray = [_title]; - - { - _localizationArray pushback _x; - false - } count _parameters; - - _title = format _localizationArray; - - { - if (isLocalized _x) then { - _localizationArray = [localize _x]; - - { - _localizationArray pushBack _x; - false - } count _parameters; - - _content set [_forEachIndex, format _localizationArray]; - }; - } forEach _content; - - [_title, _content, _type] call FUNC(displayInformation); - }; -}; diff --git a/addons/common/functions/fnc_sendDisplayMessageTo.sqf b/addons/common/functions/fnc_sendDisplayMessageTo.sqf deleted file mode 100644 index 6f16ec8006..0000000000 --- a/addons/common/functions/fnc_sendDisplayMessageTo.sqf +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Author: Glowbal - * Displays a message on locality of receiver - * - * Arguments: - * 0: receiver - * 1: title - * 2: content - * 3: type (optional) - * - * Return Value: - * None - * - * Public: Yes - */ -#include "script_component.hpp" - -params [["_reciever", objNull], ["_title", ""], ["_content", ""], ["_type", 0], ["_parameters", []]]; - -if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QFUNC(sendDisplayMessageTo), _reciever, false] call FUNC(execRemoteFnc); - } else { - if (isLocalized _title) then { - _title = localize _title; - }; - - if (isLocalized _content) then { - _content = localize _content; - }; - - private "_localizationArray"; - _localizationArray = [_title]; - - { - _localizationArray pushBack _x; - false - } count _parameters; - - _title = format _localizationArray; - - _localizationArray = [_content]; - - { - _localizationArray pushBack _x; - false - } count _parameters; - - _content = format _localizationArray; - - [_title, _content, _type] call FUNC(displayMessage); - }; -}; From 59da3e1c35ee12c1439df9c9c396fb0264ff8153 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 3 Oct 2015 23:05:46 -0500 Subject: [PATCH 47/66] Optimize PFEH Funcs --- .../common/functions/fnc_getTurretIndex.sqf | 24 +++++++------------ addons/common/functions/fnc_timePFH.sqf | 20 +++++++++------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/addons/common/functions/fnc_getTurretIndex.sqf b/addons/common/functions/fnc_getTurretIndex.sqf index b2f28c5f90..050f3e1c4f 100644 --- a/addons/common/functions/fnc_getTurretIndex.sqf +++ b/addons/common/functions/fnc_getTurretIndex.sqf @@ -8,29 +8,23 @@ * Return Value: * Turret Index * + * Example: + * [ace_player] call ace_common_fnc_getTurretIndex + * * Public: Yes */ #include "script_component.hpp" params ["_unit"]; -private ["_vehicle", "_turrets", "_units", "_index"]; - -_vehicle = vehicle _unit; - +local _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {[]}; -_turrets = allTurrets [_vehicle, true]; - -_units = []; +scopeName "main"; { - _units pushBack (_vehicle turretUnit _x); - false -} count _turrets; + if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"}; + nil +} count allTurrets [_vehicle, true]; -_index = _units find _unit; - -if (_index == -1) exitWith {[]}; - -_turrets select _index; +[] diff --git a/addons/common/functions/fnc_timePFH.sqf b/addons/common/functions/fnc_timePFH.sqf index 4f099ea68c..152eceee3f 100644 --- a/addons/common/functions/fnc_timePFH.sqf +++ b/addons/common/functions/fnc_timePFH.sqf @@ -1,26 +1,26 @@ /* - * Author: ? - * ? + * Author: jaynus + * PFEH to set all Ace Time Variables * * Arguments: - * ? + * None * * Return Value: - * ? + * None * - * Public: ? + * Public: No */ #include "script_component.hpp" -private ["_lastTickTime", "_lastGameTime", "_delta"]; +BEGIN_COUNTER(timePFH); -_lastTickTime = ACE_diagTime; -_lastGameTime = ACE_gameTime; +local _lastTickTime = ACE_diagTime; +local _lastGameTime = ACE_gameTime; ACE_gameTime = time; ACE_diagTime = diag_tickTime; -_delta = ACE_diagTime - _lastTickTime; +local _delta = ACE_diagTime - _lastTickTime; if (ACE_gameTime <= _lastGameTime) then { TRACE_1("paused",_delta); @@ -36,3 +36,5 @@ if (ACE_gameTime <= _lastGameTime) then { ACE_virtualTime = ACE_virtualTime + (_delta * accTime); ACE_time = ACE_virtualTime; }; + +END_COUNTER(timePFH); From 616bc9f8a0e4e09f387038aba70b3bd1cddd9f11 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 4 Oct 2015 11:38:31 -0500 Subject: [PATCH 48/66] local-private waitAndXX PFEH --- addons/common/XEH_postInit.sqf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 912acce7c4..032b6148be 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -9,11 +9,11 @@ //Singe PFEH to handle execNextFrame, waitAndExec and waitUntilAndExec: [{ - private ["_entry", "_deleted"]; + BEGIN_COUNTER(waitAndExec); //Handle the waitAndExec array: while {!(GVAR(waitAndExecArray) isEqualTo []) && {GVAR(waitAndExecArray) select 0 select 0 <= ACE_Time}} do { - _entry = GVAR(waitAndExecArray) deleteAt 0; + local _entry = GVAR(waitAndExecArray) deleteAt 0; (_entry select 2) call (_entry select 1); }; @@ -29,7 +29,7 @@ GVAR(nextFrameNo) = diag_frameno + 1; //Handle the waitUntilAndExec array: - _deleted = 0; + local _deleted = 0; { // if condition is satisifed call statement if ((_x select 2) call (_x select 0)) then { @@ -39,6 +39,8 @@ (_x select 2) call (_x select 1); }; } forEach GVAR(waitUntilAndExecArray); + + END_COUNTER(waitAndExec); }, 0, []] call CBA_fnc_addPerFrameHandler; From 4b7f281eba530167bc1093e9750fbc25c3df11e3 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 8 Oct 2015 20:30:54 +0200 Subject: [PATCH 49/66] Fix slacking badge links, Add Travis CI build badge --- README.md | 7 +++++-- docs/README_DE.md | 7 +++++-- docs/README_PL.md | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5a01e5d5de..c3d4c1389f 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,11 @@ ACE3 License - - ACE3 Slack + + ACE3 Slack + + + ACE3 CI Status (master branch)

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

diff --git a/docs/README_DE.md b/docs/README_DE.md index 9921bf3fc6..6f45df8b81 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -17,8 +17,11 @@ ACE3 License - - ACE3 Slack + + ACE3 Slack + + + ACE3 CI Status (master branch)

Benötigt die aktuellste Version von CBA A3. Besucht uns auf Facebook | YouTube | Twitter | Reddit

diff --git a/docs/README_PL.md b/docs/README_PL.md index aa7023a9e4..bf31f0e3b9 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -17,8 +17,11 @@ ACE3 Licencja - - ACE3 Slack + + ACE3 Slack + + + ACE3 CI Status (master branch)

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

From 7efcc3b8d180f95e2a99abd1b19eff056a34f05b Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 8 Oct 2015 20:33:20 +0200 Subject: [PATCH 50/66] Update version and download size --- README.md | 2 +- docs/README_DE.md | 4 ++-- docs/README_PL.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c3d4c1389f..f5a5e5a948 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ACE3 Version - ACE3 Download + ACE3 Download ACE3 Issues diff --git a/docs/README_DE.md b/docs/README_DE.md index 6f45df8b81..849a75a692 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -3,10 +3,10 @@

- ACE3 Version + ACE3 Version - ACE3 Download + ACE3 Download ACE3 Issues diff --git a/docs/README_PL.md b/docs/README_PL.md index bf31f0e3b9..b623d90c11 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -3,10 +3,10 @@

- ACE3 Wersja + ACE3 Wersja - ACE3 Pobierz + ACE3 Pobierz ACE3 Zagadnienia From 7c101bde8757a48d9df44644168799d971c18d78 Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 8 Oct 2015 21:01:06 +0200 Subject: [PATCH 51/66] Change build badge tooltip --- README.md | 2 +- docs/README_DE.md | 2 +- docs/README_PL.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f5a5e5a948..fc02b56898 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ ACE3 Slack - ACE3 CI Status (master branch) + ACE3 Build Status

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

diff --git a/docs/README_DE.md b/docs/README_DE.md index 849a75a692..97dd500019 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -21,7 +21,7 @@ ACE3 Slack - ACE3 CI Status (master branch) + ACE3 Build Status

Benötigt die aktuellste Version von CBA A3. Besucht uns auf Facebook | YouTube | Twitter | Reddit

diff --git a/docs/README_PL.md b/docs/README_PL.md index b623d90c11..13ec07b395 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -21,7 +21,7 @@ ACE3 Slack - ACE3 CI Status (master branch) + ACE3 Build Status

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

From 01a39e7db5438ed7413de77046bf0c3f7441c02d Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 8 Oct 2015 23:53:21 +0200 Subject: [PATCH 52/66] Update badges --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fc02b56898..3aa6ae6af7 100644 --- a/README.md +++ b/README.md @@ -6,22 +6,22 @@ ACE3 Version - ACE3 Download + ACE3 Download - ACE3 Issues + ACE3 Issues BIF Thread - ACE3 License + ACE3 License ACE3 Slack - ACE3 Build Status + ACE3 Build Status

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

From e5a7516ec14137f12f992bec07fdcc4d7829405e Mon Sep 17 00:00:00 2001 From: jonpas Date: Thu, 8 Oct 2015 23:54:44 +0200 Subject: [PATCH 53/66] Non-English as well --- docs/README_DE.md | 8 ++++---- docs/README_PL.md | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/README_DE.md b/docs/README_DE.md index 97dd500019..5c82cc5097 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -6,22 +6,22 @@ ACE3 Version - ACE3 Download + ACE3 Download - ACE3 Issues + ACE3 Issues BIF Thread - ACE3 License + ACE3 License ACE3 Slack - ACE3 Build Status + ACE3 Build Status

Benötigt die aktuellste Version von CBA A3. Besucht uns auf Facebook | YouTube | Twitter | Reddit

diff --git a/docs/README_PL.md b/docs/README_PL.md index 13ec07b395..6447e4b5b9 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -6,22 +6,22 @@ ACE3 Wersja - ACE3 Pobierz + ACE3 Pobierz - ACE3 Zagadnienia + ACE3 Zagadnienia Temat BIF - ACE3 Licencja + ACE3 Licencja ACE3 Slack - ACE3 Build Status + ACE3 Build Status

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

From 36895d2e305de104e14f217e769b52601e330f0c Mon Sep 17 00:00:00 2001 From: jonpas Date: Fri, 9 Oct 2015 00:23:36 +0200 Subject: [PATCH 54/66] Update more version numbers --- docs/README_DE.md | 2 +- docs/README_PL.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README_DE.md b/docs/README_DE.md index 5c82cc5097..24be427392 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -5,7 +5,7 @@ ACE3 Version - + ACE3 Download diff --git a/docs/README_PL.md b/docs/README_PL.md index 6447e4b5b9..b12f574b6f 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -5,7 +5,7 @@ ACE3 Wersja - + ACE3 Pobierz From 33be10126ee7e74411b1b542b095b37414f8e6c6 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 15:01:02 +0200 Subject: [PATCH 55/66] Improve travis yml - Add slack integration - Change the deploy.py to only run on pushes to the master branch - Change email notifications to only mail once on failure --- .travis.yml | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0aadd9cd0b..0506cc0952 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,13 +3,26 @@ branches: - master language: python python: - - "3.4" +- '3.4' before_script: - - pip install pygithub - - pip install pygithub3 +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then + pip install pygithub; + pip install pygithub3; + fi script: - - python3 tools/deploy.py - - python3 tools/sqf_validator.py +- python3 tools/sqf_validator.py +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then + python3 tools/deploy.py; + fi env: global: - - secure: "KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg=" + - secure: KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg= +notifications: + slack: + secure: aWYF/YX7vxEdXJ5w1jhYJQ2TtTP2NRdnXzJDMYXTv2dlXYhO9qp2qjxDGW3dezuPY7B1mPBgebfSKRx3Robkt1rAfEwPWivOiEztL30rwzOy+5Q1wpORv1JkvTC/q2wqQzxQCU/FPVjD2GkF1wtq1Rnx3ESWD8gbvzYoMNdIw1g= + on_success: change + on_failure: always + on_start: never + email: + on_success: never + on_failure: change From 8e9c2754fdb2e1bc72384bf5adf36c7330e6d86f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 15:01:31 +0200 Subject: [PATCH 56/66] Change translation guide link in translations issue to markdown - Change from @Jonpas --- tools/deploy.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/deploy.py b/tools/deploy.py index 0b3a730470..2bc894176d 100755 --- a/tools/deploy.py +++ b/tools/deploy.py @@ -16,8 +16,7 @@ from pygithub3 import Github TRANSLATIONISSUE = 367 -TRANSLATIONBODY = """**How to translate ACE3:** -http://ace3mod.com/wiki/development/how-to-translate-ace3.html +TRANSLATIONBODY = """**[ACE3 Translation Guide](http://ace3mod.com/wiki/development/how-to-translate-ace3.html)** {} """ From fe7f8e66f73268f9f33491f174a41e3aedb41cef Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 15:23:22 +0200 Subject: [PATCH 57/66] Add slack notification for ace3public dev channel --- .travis.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0506cc0952..6063d59b34 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,16 @@ branches: only: - - master + - master language: python python: - '3.4' before_script: -- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then - pip install pygithub; - pip install pygithub3; - fi +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" + == "false" ]; then pip install pygithub; pip install pygithub3; fi script: - python3 tools/sqf_validator.py -- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then - python3 tools/deploy.py; - fi +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" + == "false" ]; then python3 tools/deploy.py; fi env: global: - secure: KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg= @@ -23,6 +20,8 @@ notifications: on_success: change on_failure: always on_start: never + rooms: + secure: MvxmqL1NGwiGTVv6uIVTM7jeNLQH95KYtTgSWlXaSw4jdjnf4cmrb/ofHQ3FHhhNVdhRN6W8n0cJfTC3DBZ90bionVh+528qw2mDnDbKljVdIwmoFSexBcH7H1uTLF3gsEz0tbrHtLcnAyTMxdjsdIXDLZ5hwxABNmW5/03jOgs= email: on_success: never on_failure: change From 51c4b2b89518ccf58bba7610c2826d179e7dbd7d Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 15:26:06 +0200 Subject: [PATCH 58/66] Fix formatting of script --- .travis.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6063d59b34..313b0a11c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,15 @@ language: python python: - '3.4' before_script: -- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" - == "false" ]; then pip install pygithub; pip install pygithub3; fi +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then + pip install pygithub; + pip install pygithub3; + fi script: - python3 tools/sqf_validator.py -- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" - == "false" ]; then python3 tools/deploy.py; fi +- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then + python3 tools/deploy.py; + fi env: global: - secure: KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg= From afb28d01eab012adbd81b32f4a110254894a5cf4 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 17:25:53 +0200 Subject: [PATCH 59/66] Improve sqf validator - fix not all string cases were caught - add basic semi column validation after code blocks - Improve print output - Fix a dot in file path when reporting an error --- tools/sqf_validator.py | 94 +++++++++++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 19 deletions(-) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index e4af90f50f..7d1780c5e0 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -6,6 +6,16 @@ import ntpath import sys import argparse +def validKeyWordAfterCode(content, index): + keyWords = ["for", "do", "count", "each", "forEach", "else", "and", "not", "isEqualTo", "in", "call", "spawn", "execVM", "catch"]; + for word in keyWords: + try: + subWord = content.index(word, index, index+len(word)) + return True; + except: + pass + return False + def check_sqf_syntax(filepath): bad_count_file = 0 def pushClosing(t): @@ -17,61 +27,96 @@ def check_sqf_syntax(filepath): with open(filepath, 'r') as file: content = file.read() + + # Store all brackets we find in this file, so we can validate everything on the end brackets_list = [] + # To check if we are in a comment block isInCommentBlock = False checkIfInComment = False + # Used in case we are in a line comment (//) ignoreTillEndOfLine = False + # Used in case we are in a comment block (/* */). This is true if we detect a * inside a comment block. + # If the next character is a /, it means we end our comment block. checkIfNextIsClosingBlock = False - isInString = False + # We ignore everything inside a string + isInString = False + # Used to store the starting type of a string, so we can match that to the end of a string + inStringType = ''; + + lastIsCurlyBrace = False + checkForSemiColumn = False + + # Extra information so we know what line we find errors at lineNumber = 0 + indexOfCharacter = 0 + # Parse all characters in the content of this file to search for potential errors for c in content: - if c == '\n': + if (lastIsCurlyBrace): + lastIsCurlyBrace = False + checkForSemiColumn = True + + if c == '\n': # Keeping track of our line numbers lineNumber += 1 # so we can print accurate line number information when we detect a possible error - if (isInString): + if (isInString): # while we are in a string, we can ignore everything else, except the end of the string if (c == inStringType): isInString = False - elif (isInCommentBlock == False): # if we are not in a comment block, we will check if we are at the start of one or count the () {} and [] - if (checkIfInComment): # This means we have encountered a /, so we are now checking if this is an inline comment or a comment block + # if we are not in a comment block, we will check if we are at the start of one or count the () {} and [] + elif (isInCommentBlock == False): + + # This means we have encountered a /, so we are now checking if this is an inline comment or a comment block + if (checkIfInComment): checkIfInComment = False if c == '*': # if the next character after / is a *, we are at the start of a comment block isInCommentBlock = True - if (c == '/'): # Otherwise, will check if we are in an line comment + elif (c == '/'): # Otherwise, will check if we are in an line comment ignoreTillEndOfLine = True # and an line comment is a / followed by another / (//) We won't care about anything that comes after it + if (isInCommentBlock == False): if (ignoreTillEndOfLine): # we are in a line comment, just continue going through the characters until we find an end of line if (c == '\n'): ignoreTillEndOfLine = False - else: - if (c == '"'): + else: # validate brackets + if (c == '"' or c == "'"): isInString = True inStringType = c + elif (c == '#'): + ignoreTillEndOfLine = True elif (c == '/'): checkIfInComment = True elif (c == '('): brackets_list.append('(') elif (c == ')'): if (brackets_list[-1] in ['{', '[']): - print("Possible missing round bracket ')' detected at {0} Line number: {1}".format(filepath,lineNumber)) + print("ERROR: Possible missing round bracket ')' detected at {0} Line number: {1}".format(filepath,lineNumber)) bad_count_file += 1 brackets_list.append(')') elif (c == '['): brackets_list.append('[') elif (c == ']'): if (brackets_list[-1] in ['{', '(']): - print("Possible missing square bracket ']' detected at {0} Line number: {1}".format(filepath,lineNumber)) + print("ERROR: Possible missing square bracket ']' detected at {0} Line number: {1}".format(filepath,lineNumber)) bad_count_file += 1 brackets_list.append(']') elif (c == '{'): brackets_list.append('{') elif (c == '}'): + lastIsCurlyBrace = True if (brackets_list[-1] in ['(', '[']): - print("Possible missing curly brace '}}' detected at {0} Line number: {1}".format(filepath,lineNumber)) + print("ERROR: Possible missing curly brace '}}' detected at {0} Line number: {1}".format(filepath,lineNumber)) bad_count_file += 1 brackets_list.append('}') - else: + + if (checkForSemiColumn): + if (c not in [' ', '\t', '\n', '/']): # keep reading until no white space or comments + checkForSemiColumn = False + if (c not in [']', ')', '}', ';', ',', '&', '!', '|', '='] and not validKeyWordAfterCode(content, indexOfCharacter)): # , 'f', 'd', 'c', 'e', 'a', 'n', 'i']): + print("ERROR: Possible missing semi-column ':' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + + else: # Look for the end of our comment block if (c == '*'): checkIfNextIsClosingBlock = True; elif (checkIfNextIsClosingBlock): @@ -79,39 +124,50 @@ def check_sqf_syntax(filepath): isInCommentBlock = False elif (c != '*'): checkIfNextIsClosingBlock = False + indexOfCharacter += 1 if brackets_list.count('[') != brackets_list.count(']'): - print("A possible missing square bracket [ or ] in file {0} [ = {1} ] = {2}".format(filepath,brackets_list.count('['),brackets_list.count(']'))) + print("ERROR: A possible missing square bracket [ or ] in file {0} [ = {1} ] = {2}".format(filepath,brackets_list.count('['),brackets_list.count(']'))) bad_count_file += 1 if brackets_list.count('(') != brackets_list.count(')'): - print("A possible missing round bracket ( or ) in file {0} ( = {1} ) = {2}".format(filepath,brackets_list.count('('),brackets_list.count(')'))) + print("ERROR: A possible missing round bracket ( or ) in file {0} ( = {1} ) = {2}".format(filepath,brackets_list.count('('),brackets_list.count(')'))) bad_count_file += 1 if brackets_list.count('{') != brackets_list.count('}'): - print("A possible missing curly brace {{ or }} in file {0} {{ = {1} }} = {2}".format(filepath,brackets_list.count('{'),brackets_list.count('}'))) + print("ERROR: A possible missing curly brace {{ or }} in file {0} {{ = {1} }} = {2}".format(filepath,brackets_list.count('{'),brackets_list.count('}'))) bad_count_file += 1 return bad_count_file def main(): print("#########################") - print("# Validate SQF files missing brackets #") + print("# Validate SQF #") print("#########################") sqf_list = [] bad_count = 0 parser = argparse.ArgumentParser() - parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default="") args = parser.parse_args() - for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + # Allow running from root directory as well as from inside the tools directory + rootDir = "../addons" + if (os.path.exists("addons")): + rootDir = "addons" + + for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) for filename in sqf_list: bad_count = bad_count + check_sqf_syntax(filename) - print("Bad Count {0}".format(bad_count)) + print("Checked {0} files. Errors detected {1}.".format(len(sqf_list), bad_count)) + if (bad_count == 0): + print("Sqf validation passed") + else: + print("Sqf validation failed") + return bad_count if __name__ == "__main__": From d6ab43d77ea7467abc3ed709f3b39d34f0132cb9 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 17:35:55 +0200 Subject: [PATCH 60/66] Possible fix for travis build failure --- tools/sqf_validator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index 7d1780c5e0..6cfa3e4db3 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -25,7 +25,7 @@ def check_sqf_syntax(filepath): def popClosing(): closing << closingStack.pop() - with open(filepath, 'r') as file: + with open(filepath, 'r', encoding='utf-8', errors='ignore') as file: content = file.read() # Store all brackets we find in this file, so we can validate everything on the end From b524c28d53cfd3accc2120fab30947d8fc2eb844 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 11 Oct 2015 18:31:39 +0200 Subject: [PATCH 61/66] Improved output text - Capitalized SQF everywhere - Break checked files and errors into multiple lines - Add a break by line between reported errors and result - Fix incorrect report message for semi-columns - Change excessive usage of # prints on start --- tools/sqf_validator.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index 6cfa3e4db3..d76434f81d 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -113,7 +113,7 @@ def check_sqf_syntax(filepath): if (c not in [' ', '\t', '\n', '/']): # keep reading until no white space or comments checkForSemiColumn = False if (c not in [']', ')', '}', ';', ',', '&', '!', '|', '='] and not validKeyWordAfterCode(content, indexOfCharacter)): # , 'f', 'd', 'c', 'e', 'a', 'n', 'i']): - print("ERROR: Possible missing semi-column ':' detected at {0} Line number: {1}".format(filepath,lineNumber)) + print("ERROR: Possible missing semi-column ';' detected at {0} Line number: {1}".format(filepath,lineNumber)) bad_count_file += 1 else: # Look for the end of our comment block @@ -139,9 +139,7 @@ def check_sqf_syntax(filepath): def main(): - print("#########################") - print("# Validate SQF #") - print("#########################") + print("Validating SQF") sqf_list = [] bad_count = 0 @@ -162,11 +160,12 @@ def main(): for filename in sqf_list: bad_count = bad_count + check_sqf_syntax(filename) - print("Checked {0} files. Errors detected {1}.".format(len(sqf_list), bad_count)) + + print("------\nChecked {0} files\nErrors detected: {1}".format(len(sqf_list), bad_count)) if (bad_count == 0): - print("Sqf validation passed") + print("SQF validation PASSED") else: - print("Sqf validation failed") + print("SQF validation FAILED") return bad_count From d926a4a52a6ac1acf0341f0d8d92f14e44855d61 Mon Sep 17 00:00:00 2001 From: jonpas Date: Sun, 11 Oct 2015 23:20:56 +0200 Subject: [PATCH 62/66] Add shebang line to specify python version to SQF validator and replace slash with backslash --- tools/sqf_validator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index d76434f81d..8af8e08a61 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 import fnmatch import os @@ -149,11 +150,11 @@ def main(): args = parser.parse_args() # Allow running from root directory as well as from inside the tools directory - rootDir = "../addons" + rootDir = "..\\addons" if (os.path.exists("addons")): rootDir = "addons" - for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): + for root, dirnames, filenames in os.walk(rootDir + '\\' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) From 7062f60f0a667cc3a3e59859d75eaca4e2bd4d35 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 12 Oct 2015 01:07:20 -0500 Subject: [PATCH 63/66] Fix UBC from #2726 --- addons/cargo/CfgVehicles.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index 1fae56749f..111c4d9956 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -222,12 +222,6 @@ class CfgVehicles { class B_supplyCrate_F: ReammoBox_F { GVAR(size) = 6; }; - class O_supplyCrate_F: ReammoBox_F { - GVAR(size) = 6; - }; - class I_supplyCrate_F: ReammoBox_F { - GVAR(size) = 6; - }; class IG_supplyCrate_F: ReammoBox_F { GVAR(size) = 6; }; From 5d76395914271470ed09b22ccc31676902ffab67 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 12 Oct 2015 11:27:38 -0500 Subject: [PATCH 64/66] #2734 - Map effects / flashlights for TrippleHead --- addons/map/functions/fnc_simulateMapLight.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/map/functions/fnc_simulateMapLight.sqf b/addons/map/functions/fnc_simulateMapLight.sqf index 9554409e15..ec08f14d4c 100644 --- a/addons/map/functions/fnc_simulateMapLight.sqf +++ b/addons/map/functions/fnc_simulateMapLight.sqf @@ -22,7 +22,7 @@ _hmd = hmd ACE_player; _flashlight = GVAR(flashlightInUse); //map width (on screen) in pixels -_screenSize = 640 * safeZoneW; +_screenSize = 640 * safeZoneWAbs; //resolution params (every frame in case resolution change) getResolution params ["_resX", "_resY", "_viewPortX", "_viewPortY", "", "_uiScale"]; @@ -58,7 +58,7 @@ if (_flashlight == "") then { if !(_colour in ["white", "red", "green", "blue", "yellow"]) then {_colour = "white"}; _size = getNumber (configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Size"); _flashTex = format[QUOTE(PATHTOF_SYS(ace,flashlights,UI\Flashlight_Beam_%1_ca.paa)), _colour]; - _beamSize = _screenSize / _size; + _beamSize = (safeZoneW/safeZoneWAbs) * _screenSize / _size; //after 5x zoom, it's simulated to be fixed (it actually gets bigger relative to zoom) if (_mapScale < 0.2) then {_beamSize = _beamSize / (_mapScale * (1 / 0.2))}; From 3e4906fa7e1768ff974e48fafc338dbbca333e4a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 12 Oct 2015 21:29:50 +0200 Subject: [PATCH 65/66] Revert the backslash in sqf validator - Use a forward slash in path for travis to work properly --- tools/sqf_validator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index 8af8e08a61..7e7c0183d6 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -150,11 +150,11 @@ def main(): args = parser.parse_args() # Allow running from root directory as well as from inside the tools directory - rootDir = "..\\addons" + rootDir = "../addons" if (os.path.exists("addons")): rootDir = "addons" - for root, dirnames, filenames in os.walk(rootDir + '\\' + args.module): + for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) From f7fe0c08e0af57d2529731d348b31ffd5e64caa6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 14 Oct 2015 11:15:44 -0500 Subject: [PATCH 66/66] #2391 - Use AGL for sitting setPos --- addons/sitting/functions/fnc_sit.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sitting/functions/fnc_sit.sqf b/addons/sitting/functions/fnc_sit.sqf index 5e9c36947e..b6c853f645 100644 --- a/addons/sitting/functions/fnc_sit.sqf +++ b/addons/sitting/functions/fnc_sit.sqf @@ -58,8 +58,8 @@ _sitRotation = if (isNumber (_configFile >> QGVAR(sitRotation))) then {getNumber // Set direction and position _player setDir _sitDirection; -// No need for ATL/ASL as modelToWorld returns in format position -_player setPos (_seat modelToWorld _sitPosition); +//modelToWorld returns AGL +_player setPosASL (AGLtoASL (_seat modelToWorld _sitPosition)); // Set variables _player setVariable [QGVAR(isSitting), true];