mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into pr/8215
This commit is contained in:
commit
2041c88cee
4
.github/CONTRIBUTING.md
vendored
4
.github/CONTRIBUTING.md
vendored
@ -34,7 +34,7 @@ We welcome anyone to contribute to this repository. Issues that we are actively
|
|||||||
|
|
||||||
## Pull Request process
|
## Pull Request process
|
||||||
|
|
||||||
When contributing to this repository, please first discuss the change you wish to make via issue or [Slack](https://acemod.org/slack) with the [ACE3 project maintainers](https://ace3.acemod.org/team.html) before making a change. This may not be necessary if you are contributing for something which has an existing issue in our repository already.
|
When contributing to this repository, please first discuss the change you wish to make via issue or [Discord](https://acemod.org/discord) with the [ACE3 project maintainers](https://ace3.acemod.org/team.html) before making a change. This may not be necessary if you are contributing for something which has an existing issue in our repository already.
|
||||||
|
|
||||||
1. Please make a pull request (PR) as early as possible. This lets use help you in the proces of developing it. When opening a work in progress pull request, mark your PR with a `WIP:` prefix.
|
1. Please make a pull request (PR) as early as possible. This lets use help you in the proces of developing it. When opening a work in progress pull request, mark your PR with a `WIP:` prefix.
|
||||||
2. Describe what this pull request will do and how it solves this in the description of your PR. A clear intent and description of the way the issue is resolved will help us to review the PR more efficiently.
|
2. Describe what this pull request will do and how it solves this in the description of your PR. A clear intent and description of the way the issue is resolved will help us to review the PR more efficiently.
|
||||||
@ -47,4 +47,4 @@ Please note that all contributors to this project are volunteers and do this in
|
|||||||
|
|
||||||
## Assistance with contributing
|
## Assistance with contributing
|
||||||
|
|
||||||
If you require assistance with contributing, check out the #dev channel on our [Slack](https://acemod.org/slack). Additional documentation can be found on our [Development wiki](https://ace3.acemod.org/wiki/development/).
|
If you require assistance with contributing, check out the #dev channel on our [Discord](https://acemod.org/discord). Additional documentation can be found on our [Development wiki](https://ace3.acemod.org/wiki/development/).
|
||||||
|
@ -175,6 +175,7 @@ VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
|
|||||||
Walthzer <walthzer.69@gmail.com>
|
Walthzer <walthzer.69@gmail.com>
|
||||||
Winter <simon@agius-muscat.net>
|
Winter <simon@agius-muscat.net>
|
||||||
wizpig64
|
wizpig64
|
||||||
|
YetheSamartaka
|
||||||
xrufix
|
xrufix
|
||||||
Zakant <Zakant@gmx.de>
|
Zakant <Zakant@gmx.de>
|
||||||
zGuba
|
zGuba
|
10
README.md
10
README.md
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases/latest">
|
<a href="https://github.com/acemod/ACE3/releases/latest">
|
||||||
<img src="https://img.shields.io/badge/Version-3.14.1-blue.svg?style=flat-square" alt="ACE3 Version">
|
<img src="https://img.shields.io/badge/Version-3.15.0-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<a href="https://github.com/acemod/ACE3/issues">
|
||||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
|
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
|
||||||
@ -18,8 +18,8 @@
|
|||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||||
<img src="https://img.shields.io/badge/License-GPLv2-red.svg?style=flat-square" alt="ACE3 License">
|
<img src="https://img.shields.io/badge/License-GPLv2-red.svg?style=flat-square" alt="ACE3 License">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://acemod.org/slack">
|
<a href="https://acemod.org/discord">
|
||||||
<img src="https://img.shields.io/badge/Slack-Join-darkviolet.svg?style=flat-square" alt="ACE3 Slack">
|
<img src="https://img.shields.io/badge/Discord-Join-darkviolet.svg?style=flat-square" alt="ACE3 Discord">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://circleci.com/gh/acemod/ACE3">
|
<a href="https://circleci.com/gh/acemod/ACE3">
|
||||||
<img src="https://circleci.com/gh/acemod/ACE3.svg?style=svg" alt="ACE3 Build Status">
|
<img src="https://circleci.com/gh/acemod/ACE3.svg?style=svg" alt="ACE3 Build Status">
|
||||||
@ -105,8 +105,8 @@ To help us test the latest development changes, download our master branch ([dir
|
|||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://acemod.org/slack">Slack</a></td>
|
<td><a href="https://acemod.org/discord">Discord</a></td>
|
||||||
<td>We have a public Slack team that anyone can join. This is where all our developers and contributors hang out and where we make announcements</td>
|
<td>We have a public Discord server that anyone can join. This is where all our developers and contributors hang out and where we make announcements</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -9,3 +9,9 @@ class Extended_PreInit_EventHandlers {
|
|||||||
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -1,2 +1,6 @@
|
|||||||
PREP(initEjectAction);
|
|
||||||
PREP(canShowEject);
|
PREP(canShowEject);
|
||||||
|
PREP(droneAddActions);
|
||||||
|
PREP(droneGetTurretTargetPos);
|
||||||
|
PREP(droneModifyWaypoint);
|
||||||
|
PREP(droneSetWaypoint);
|
||||||
|
PREP(initEjectAction);
|
||||||
|
8
addons/aircraft/XEH_postInit.sqf
Normal file
8
addons/aircraft/XEH_postInit.sqf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
[QGVAR(droneModifyWaypoint), LINKFUNC(droneModifyWaypoint)] call CBA_fnc_addEventHandler;
|
||||||
|
[QGVAR(droneSetWaypoint), LINKFUNC(droneSetWaypoint)] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
if (hasInterface) then {
|
||||||
|
["ACE_controlledUAV", LINKFUNC(droneAddActions)] call CBA_fnc_addEventHandler;
|
||||||
|
};
|
121
addons/aircraft/functions/fnc_droneAddActions.sqf
Normal file
121
addons/aircraft/functions/fnc_droneAddActions.sqf
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Adds actions to a drone
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: vehicle <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [v] call ace_aircraft_fnc_droneAddActions
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_vehicle"];
|
||||||
|
TRACE_1("droneAddActions",_vehicle);
|
||||||
|
|
||||||
|
if (!alive _vehicle) exitWith {};
|
||||||
|
if (_vehicle getVariable [QGVAR(droneActionsAdded), false]) exitWith {};
|
||||||
|
_vehicle setVariable [QGVAR(droneActionsAdded), true];
|
||||||
|
|
||||||
|
// move to location
|
||||||
|
private _condition = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
|
||||||
|
};
|
||||||
|
private _statement = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
private _pos = ([_vehicle, [0]] call FUNC(droneGetTurretTargetPos)) select 0;
|
||||||
|
[QGVAR(droneSetWaypoint), [_vehicle, _group, _pos, "MOVE"], _group] call CBA_fnc_targetEvent;
|
||||||
|
};
|
||||||
|
private _action = [QGVAR(droneSetWaypointMove), localize "$STR_AC_MOVE",
|
||||||
|
"\a3\3DEN\Data\CfgWaypoints\Move_ca.paa", _statement, _condition] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
|
||||||
|
|
||||||
|
if (_vehicle isKindOf "Air") then {
|
||||||
|
// loiter at location
|
||||||
|
_condition = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
|
||||||
|
};
|
||||||
|
_statement = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
private _pos = ([_vehicle, [0]] call FUNC(droneGetTurretTargetPos)) select 0;
|
||||||
|
[QGVAR(droneSetWaypoint), [_vehicle, _group, _pos, "LOITER"], _group] call CBA_fnc_targetEvent;
|
||||||
|
};
|
||||||
|
_action = [QGVAR(droneSetWaypointLoiter), localize "$STR_AC_LOITER",
|
||||||
|
"\a3\3DEN\Data\CfgWaypoints\Loiter_ca.paa", _statement, _condition] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
|
||||||
|
|
||||||
|
// set height
|
||||||
|
_condition = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
|
||||||
|
};
|
||||||
|
_statement = {
|
||||||
|
params ["_vehicle", "", "_args"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
[QGVAR(droneModifyWaypoint), [_vehicle, _group, "height", _args], _group] call CBA_fnc_targetEvent;
|
||||||
|
};
|
||||||
|
_action = [QGVAR(setAltitude), localize "$STR_3den_waypoint_attribute_loiteraltitude_displayname",
|
||||||
|
"", {}, _condition] call EFUNC(interact_menu,createAction);
|
||||||
|
private _base = [_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
{
|
||||||
|
_action = [str _x, str _x, "", _statement, { true }, {}, _x] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, _base, _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
} forEach [20, 50, 200, 500, 2000];
|
||||||
|
|
||||||
|
|
||||||
|
// set loiter radius
|
||||||
|
_condition = {
|
||||||
|
params ["_vehicle"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
private _index = (currentWaypoint _group) min count waypoints _group;
|
||||||
|
private _waypoint = [_group, _index];
|
||||||
|
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
|
||||||
|
&& {(waypointType _waypoint) == "LOITER"}
|
||||||
|
};
|
||||||
|
_statement = {
|
||||||
|
params ["_vehicle", "", "_args"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
[QGVAR(droneModifyWaypoint), [_vehicle, _group, "radius", _args], _group] call CBA_fnc_targetEvent;
|
||||||
|
};
|
||||||
|
_action = [QGVAR(lotierRadius), localize "$STR_3den_waypoint_attribute_loiterradius_displayname",
|
||||||
|
"", {}, _condition] call EFUNC(interact_menu,createAction);
|
||||||
|
_base = [_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
{
|
||||||
|
_action = [str _x, str _x, "", _statement, { true }, {}, _x] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, _base, _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
} forEach [500, 750, 1000, 1250, 1500];
|
||||||
|
|
||||||
|
|
||||||
|
// set loiter direction
|
||||||
|
_condition = {
|
||||||
|
params ["_vehicle", "", "_args"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
private _index = (currentWaypoint _group) min count waypoints _group;
|
||||||
|
private _waypoint = [_group, _index];
|
||||||
|
|
||||||
|
(missionNamespace getVariable [QGVAR(droneWaypoints), true]) && {waypointsEnabledUAV _vehicle} && {(ACE_controlledUAV select 2) isEqualTo [0]}
|
||||||
|
&& {(waypointType _waypoint) == "LOITER"} && {(waypointLoiterType _waypoint) != _args}
|
||||||
|
};
|
||||||
|
_statement = {
|
||||||
|
params ["_vehicle", "", "_args"];
|
||||||
|
private _group = group driver _vehicle;
|
||||||
|
[QGVAR(droneModifyWaypoint), [_vehicle, _group, "dir", _args], _group] call CBA_fnc_targetEvent;
|
||||||
|
};
|
||||||
|
_action = [QGVAR(lotierTypeR), localize "$STR_3den_waypoint_attribute_loiterdirection_displayname",
|
||||||
|
"\a3\3DEN\Data\Attributes\LoiterDirection\cw_ca.paa", _statement, _condition, {}, "CIRCLE"] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
_action = [QGVAR(lotierTypeR), localize "$STR_3den_waypoint_attribute_loiterdirection_displayname",
|
||||||
|
"\a3\3DEN\Data\Attributes\LoiterDirection\ccw_ca.paa", _statement, _condition, {}, "CIRCLE_L"] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||||
|
};
|
46
addons/aircraft/functions/fnc_droneGetTurretTargetPos.sqf
Normal file
46
addons/aircraft/functions/fnc_droneGetTurretTargetPos.sqf
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Get drone's target location, if aimed at infinity it will return a virtual point
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: vehicle <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* [PosASL <ARRAY>, Real <BOOL>]
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [v] call ace_aircraft_fnc_droneGetTurretTargetPos
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_vehicle"];
|
||||||
|
private _turret = [0];
|
||||||
|
TRACE_2("droneGetTurretTargetPos",_vehicle,_turret);
|
||||||
|
|
||||||
|
private _turretConfig = [_vehicle, _turret] call CBA_fnc_getTurret;
|
||||||
|
|
||||||
|
private _gunBeg = _vehicle selectionPosition getText (_turretConfig >> "gunBeg");
|
||||||
|
private _gunEnd = _vehicle selectionPosition getText (_turretConfig >> "gunEnd");
|
||||||
|
|
||||||
|
if (_gunEnd isEqualTo _gunBeg) then {
|
||||||
|
// e.g. Darter doesn't have valid gunBeg/gunEnd
|
||||||
|
private _vehicleConfig = configOf _vehicle;
|
||||||
|
_gunBeg = _vehicle selectionPosition getText (_vehicleConfig >> "uavCameraGunnerDir");
|
||||||
|
_gunEnd = _vehicle selectionPosition getText (_vehicleConfig >> "uavCameraGunnerPos");
|
||||||
|
};
|
||||||
|
|
||||||
|
_gunBeg = AGLToASL (_vehicle modelToWorld _gunBeg);
|
||||||
|
_gunEnd = AGLToASL (_vehicle modelToWorld _gunEnd);
|
||||||
|
private _turretDir = _gunEnd vectorFromTo _gunBeg;
|
||||||
|
private _farPoint = _gunEnd vectorAdd (_turretDir vectorMultiply 4999);
|
||||||
|
|
||||||
|
private _intersections = lineIntersectsSurfaces [_gunEnd, _farPoint, _vehicle, objNull, true, 1];
|
||||||
|
if (_intersections isNotEqualTo []) then {
|
||||||
|
[_intersections select 0 select 0, true]
|
||||||
|
} else {
|
||||||
|
// Not looking at anything, just get a virtual point where the camera is pointing
|
||||||
|
_farPoint set [2, 0 max getTerrainHeightASL _farPoint];
|
||||||
|
[_farPoint, false]
|
||||||
|
};
|
36
addons/aircraft/functions/fnc_droneModifyWaypoint.sqf
Normal file
36
addons/aircraft/functions/fnc_droneModifyWaypoint.sqf
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Modify the current waypoint of a drone
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Vehicle <OBJECT>
|
||||||
|
* 1: Group <GROUP>
|
||||||
|
* 2: Type <STRING>
|
||||||
|
* 3: Value <ANY>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [v, group v, "height", 2000] call ace_aircraft_fnc_droneModifyWaypoint
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_vehicle", "_group", "_type", "_value"];
|
||||||
|
TRACE_4("droneModifyWaypoint",_vehicle,_group,_type,_value);
|
||||||
|
|
||||||
|
private _index = (currentWaypoint _group) min count waypoints _group;
|
||||||
|
private _waypoint = [_group, _index];
|
||||||
|
switch (toLower _type) do {
|
||||||
|
case ("height"): {
|
||||||
|
private _pos = waypointPosition _waypoint;
|
||||||
|
_pos set [2, _value];
|
||||||
|
_waypoint setWaypointPosition [_pos, 0];
|
||||||
|
_vehicle flyInHeight _value;
|
||||||
|
};
|
||||||
|
case ("radius"): { _waypoint setWaypointLoiterRadius _value; };
|
||||||
|
case ("dir"): { _waypoint setWaypointLoiterType _value; };
|
||||||
|
};
|
||||||
|
_group setCurrentWaypoint _waypoint;
|
43
addons/aircraft/functions/fnc_droneSetWaypoint.sqf
Normal file
43
addons/aircraft/functions/fnc_droneSetWaypoint.sqf
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Set new waypoint of a drone
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Vehicle <OBJECT>
|
||||||
|
* 1: Group <GROUP>
|
||||||
|
* 2: Pos 2D <ARRAY>
|
||||||
|
* 3: Type <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [v, group v, [2000,5000], "LOITER"] call ace_aircraft_fnc_droneSetWaypoint
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_vehicle", "_group", "_pos", "_type"];
|
||||||
|
TRACE_4("droneSetWaypoint",_vehicle,_group,_pos,_type);
|
||||||
|
|
||||||
|
private _index = (currentWaypoint _group) min count waypoints _group;
|
||||||
|
private _waypoint = [_group, _index];
|
||||||
|
// Try to save attributes from existing waypoint
|
||||||
|
private _currentHeight = round ((waypointPosition _waypoint) select 2);
|
||||||
|
private _currentLoiterRadius = waypointLoiterRadius _waypoint;
|
||||||
|
private _currentLoiterType = waypointLoiterType _waypoint;
|
||||||
|
|
||||||
|
// Set pos to ATL
|
||||||
|
_pos set [2, if (_currentHeight >= 50) then { _currentHeight } else { 0 }];
|
||||||
|
|
||||||
|
// [_group] call CBA_fnc_clearWaypoints;
|
||||||
|
_waypoint = _group addWaypoint [_pos, 0];
|
||||||
|
_waypoint setWaypointType _type;
|
||||||
|
|
||||||
|
TRACE_3("",_currentHeight,_currentLoiterRadius,_currentLoiterType);
|
||||||
|
if (_currentHeight > 1) then { _vehicle flyInHeight _currentHeight; };
|
||||||
|
if (_currentLoiterRadius > 1) then { _waypoint setWaypointLoiterRadius _currentLoiterRadius; };
|
||||||
|
if (_currentLoiterType != "") then { _waypoint setWaypointLoiterType _currentLoiterType; };
|
||||||
|
|
||||||
|
_group setCurrentWaypoint _waypoint;
|
@ -89,7 +89,7 @@ private _compatibleMagazines = [[[], []], [[], []], [[], []]];
|
|||||||
|
|
||||||
// Magazine groups
|
// Magazine groups
|
||||||
{
|
{
|
||||||
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups),["#CBA_HASH#",[],[],[]]];
|
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups), createHashMap];
|
||||||
private _magArray = _magazineGroups get (toLower _x);
|
private _magArray = _magazineGroups get (toLower _x);
|
||||||
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
|
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
|
||||||
} foreach ([getArray (_weaponConfig >> _x >> "magazineWell"), getArray (_weaponConfig >> "magazineWell")] select (_x == "this"));
|
} foreach ([getArray (_weaponConfig >> _x >> "magazineWell"), getArray (_weaponConfig >> "magazineWell")] select (_x == "this"));
|
||||||
|
@ -322,6 +322,11 @@ class CfgVehicles {
|
|||||||
GVAR(canLoad) = 1;
|
GVAR(canLoad) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Invisible Target Soldier
|
||||||
|
class TargetSoldierBase: StaticWeapon {
|
||||||
|
GVAR(canLoad) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class StaticMortar;
|
class StaticMortar;
|
||||||
class Mortar_01_base_F: StaticMortar {
|
class Mortar_01_base_F: StaticMortar {
|
||||||
GVAR(size) = 2; // 1 = small, 2 = large
|
GVAR(size) = 2; // 1 = small, 2 = large
|
||||||
|
@ -19,5 +19,6 @@ PREP(setSize);
|
|||||||
PREP(setSpace);
|
PREP(setSpace);
|
||||||
PREP(startLoadIn);
|
PREP(startLoadIn);
|
||||||
PREP(startUnload);
|
PREP(startUnload);
|
||||||
|
PREP(unloadCarryItem);
|
||||||
PREP(unloadItem);
|
PREP(unloadItem);
|
||||||
PREP(validateCargoSpace);
|
PREP(validateCargoSpace);
|
||||||
|
@ -50,8 +50,6 @@
|
|||||||
GVAR(interactionParadrop) = false;
|
GVAR(interactionParadrop) = false;
|
||||||
createDialog QGVAR(menu);
|
createDialog QGVAR(menu);
|
||||||
};
|
};
|
||||||
|
|
||||||
// TOOO maybe drag/carry the unloaded item?
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
[QGVAR(serverUnload), {
|
[QGVAR(serverUnload), {
|
||||||
|
@ -35,7 +35,8 @@ if (_item isEqualType "") then {
|
|||||||
} else {
|
} else {
|
||||||
_validItem =
|
_validItem =
|
||||||
(alive _item) &&
|
(alive _item) &&
|
||||||
{_ignoreInteraction || {([_item, _vehicle] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}};
|
{_ignoreInteraction || {([_item, _vehicle] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}} &&
|
||||||
|
{!(_item getVariable [QEGVAR(cookoff,isCookingOff), false])};
|
||||||
};
|
};
|
||||||
|
|
||||||
_validItem &&
|
_validItem &&
|
||||||
|
@ -19,6 +19,7 @@ private _display = uiNamespace getVariable QGVAR(menuDisplay);
|
|||||||
if (isNil "_display") exitWith {};
|
if (isNil "_display") exitWith {};
|
||||||
|
|
||||||
private _ctrlEditText = ctrlText 100;
|
private _ctrlEditText = ctrlText 100;
|
||||||
|
_ctrlEditText = _ctrlEditText select [0,32];
|
||||||
if (_ctrlEditText isEqualTo "") then { // custom name has been removed
|
if (_ctrlEditText isEqualTo "") then { // custom name has been removed
|
||||||
[LSTRING(clearedCustomName), 3] call EFUNC(common,displayTextStructured);
|
[LSTRING(clearedCustomName), 3] call EFUNC(common,displayTextStructured);
|
||||||
} else {
|
} else {
|
||||||
|
39
addons/cargo/functions/fnc_unloadCarryItem.sqf
Normal file
39
addons/cargo/functions/fnc_unloadCarryItem.sqf
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: GhostIsSpooky
|
||||||
|
* Dragging integration. Unloader starts carrying unloaded object.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unloader <OBJECT>
|
||||||
|
* 1: Item <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [player, object] call ace_cargo_fnc_unloadCarryItem
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
params ["_unloader", "_object"];
|
||||||
|
TRACE_2("unloadCarryItem-start",_unloader,_object);
|
||||||
|
|
||||||
|
if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {};
|
||||||
|
|
||||||
|
// When unloading attached objects, this code will run before server has finished moving object to the safe position
|
||||||
|
[{
|
||||||
|
params ["_unloader", "_object"];
|
||||||
|
(_unloader distance _object) < 10
|
||||||
|
}, {
|
||||||
|
params ["_unloader", "_object"];
|
||||||
|
TRACE_2("unloadCarryItem-unloaded",_unloader,_object);
|
||||||
|
if ([_unloader, _object] call EFUNC(dragging,canCarry)) exitWith {
|
||||||
|
[_unloader, _object] call EFUNC(dragging,startCarry);
|
||||||
|
};
|
||||||
|
if ([_unloader, _object] call EFUNC(dragging,canDrag)) exitWith {
|
||||||
|
[_unloader, _object] call EFUNC(dragging,startDrag);
|
||||||
|
};
|
||||||
|
}, _this, 1.0, { // delay is based on how long it will take server event to trigger and take effect
|
||||||
|
// not a hard error if this fails, could have just unloaded to other side of vehicle because of findSafePos
|
||||||
|
TRACE_1("unloadCarryItem-failed to unload nearby player",_this);
|
||||||
|
}] call CBA_fnc_waitUntilAndExecute;
|
@ -60,6 +60,10 @@ if (_object isEqualType objNull) then {
|
|||||||
[QEGVAR(common,fixCollision), _object] call CBA_fnc_localEvent;
|
[QEGVAR(common,fixCollision), _object] call CBA_fnc_localEvent;
|
||||||
[QEGVAR(common,fixPosition), _object] call CBA_fnc_localEvent;
|
[QEGVAR(common,fixPosition), _object] call CBA_fnc_localEvent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Dragging integration
|
||||||
|
[_unloader, _object] call FUNC(unloadCarryItem);
|
||||||
|
|
||||||
// Invoke listenable event
|
// Invoke listenable event
|
||||||
["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent;
|
["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent;
|
||||||
true
|
true
|
||||||
|
1
addons/casings/$PBOPREFIX$
Normal file
1
addons/casings/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\addons\casings
|
17
addons/casings/CfgEventHandlers.hpp
Normal file
17
addons/casings/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class Extended_PreStart_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
|
||||||
|
};
|
||||||
|
};
|
4
addons/casings/README.md
Normal file
4
addons/casings/README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
ace_casings
|
||||||
|
===============
|
||||||
|
|
||||||
|
Create persistent empty casing when bullets are fired by infantry weapons.
|
1
addons/casings/XEH_PREP.hpp
Normal file
1
addons/casings/XEH_PREP.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
PREP(createCasing);
|
7
addons/casings/XEH_postInit.sqf
Normal file
7
addons/casings/XEH_postInit.sqf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface || !GVAR(enabled)) exitWith {};
|
||||||
|
|
||||||
|
GVAR(cachedCasings) = createHashMap;
|
||||||
|
GVAR(casings) = [];
|
||||||
|
["CAManBase", "FiredMan", {call FUNC(createCasing)}] call CBA_fnc_addClassEventHandler;
|
11
addons/casings/XEH_preInit.sqf
Normal file
11
addons/casings/XEH_preInit.sqf
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP_RECOMPILE_START;
|
||||||
|
#include "XEH_PREP.hpp"
|
||||||
|
PREP_RECOMPILE_END;
|
||||||
|
|
||||||
|
#include "initSettings.sqf"
|
||||||
|
|
||||||
|
ADDON = true;
|
3
addons/casings/XEH_preStart.sqf
Normal file
3
addons/casings/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#include "XEH_PREP.hpp"
|
17
addons/casings/config.cpp
Normal file
17
addons/casings/config.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
name = COMPONENT_NAME;
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"ace_common"};
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
authors[] = {"esteldunedain","Cyruz","diwako"};
|
||||||
|
url = ECSTRING(main,URL);
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
68
addons/casings/functions/fnc_createCasing.sqf
Normal file
68
addons/casings/functions/fnc_createCasing.sqf
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: esteldunedain / Cyruz / diwako
|
||||||
|
* Produces a casing matching the fired weapons caliber on the ground around the unit
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: unit - Object the event handler is assigned to <OBJECT>
|
||||||
|
* 1: ammo - Ammo used <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [player, "", "","", "B_556x45_Ball"] call ace_casings_fnc_createCasing
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit", "", "", "", "_ammo"];
|
||||||
|
|
||||||
|
if (!isNull objectParent _unit) exitWith {};
|
||||||
|
|
||||||
|
private _modelPath = GVAR(cachedCasings) get _ammo;
|
||||||
|
|
||||||
|
if (isNil "_modelPath") then {
|
||||||
|
private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge");
|
||||||
|
//Default cartridge is a 5.56mm model
|
||||||
|
_modelPath = switch (_cartridge) do {
|
||||||
|
case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" };
|
||||||
|
case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" };
|
||||||
|
case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" };
|
||||||
|
case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" };
|
||||||
|
case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" };
|
||||||
|
case "": { "" };
|
||||||
|
default { "A3\Weapons_f\ammo\cartridge.p3d" };
|
||||||
|
};
|
||||||
|
GVAR(cachedCasings) set [_ammo, _modelPath];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_modelPath isEqualTo "") exitWith {};
|
||||||
|
|
||||||
|
private _unitPos = getposASL _unit;
|
||||||
|
// Distant shooters don't produce as many cases
|
||||||
|
if ((AGLToASL positionCameraToWorld [0,0,0]) vectorDistance _unitPos > 100 && {random 1 < 0.9}) exitWith {};
|
||||||
|
|
||||||
|
private _weapDir = _unit weaponDirection currentWeapon _unit;
|
||||||
|
private _ejectDir = _weapDir vectorCrossProduct [0, 0, 1];
|
||||||
|
private _pos = _unitPos
|
||||||
|
vectorAdd (_weapDir vectorMultiply (-0.5 + random 2))
|
||||||
|
vectorAdd (_ejectDir vectorMultiply (0.2 + random 2));
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
params ["_modelPath", "_pos"];
|
||||||
|
|
||||||
|
private _lisPos = (lineIntersectsSurfaces [_pos, _pos vectorAdd [0,0,-1e11], objNull, objNull, true, 1, "ROADWAY", "FIRE"]) #0;
|
||||||
|
private _casing = createSimpleObject [_modelPath, (_lisPos #0 vectorAdd [0,0,0.005]), true];
|
||||||
|
_casing setDir (random 360);
|
||||||
|
_casing setVectorUp _lisPos #1;
|
||||||
|
private _idx = GVAR(casings) pushBack _casing;
|
||||||
|
|
||||||
|
for "_" from 0 to (_idx - GVAR(maxCasings)) do {
|
||||||
|
deleteVehicle (GVAR(casings) deleteAt 0);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
[_modelPath,_pos],
|
||||||
|
0.4
|
||||||
|
] call CBA_fnc_waitAndExecute;
|
1
addons/casings/functions/script_component.hpp
Normal file
1
addons/casings/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "\z\ace\addons\casings\script_component.hpp"
|
17
addons/casings/initSettings.sqf
Normal file
17
addons/casings/initSettings.sqf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[
|
||||||
|
QGVAR(enabled), "CHECKBOX",
|
||||||
|
[LSTRING(displayName), LSTRING(description)],
|
||||||
|
LSTRING(Settings_DisplayName),
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
{},
|
||||||
|
true
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(maxCasings), "SLIDER",
|
||||||
|
[LSTRING(maxCasings_displayName), LSTRING(maxCasings_description)],
|
||||||
|
LSTRING(Settings_DisplayName),
|
||||||
|
[100, 500, 250, -1],
|
||||||
|
false
|
||||||
|
] call CBA_fnc_addSetting;
|
17
addons/casings/script_component.hpp
Normal file
17
addons/casings/script_component.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#define COMPONENT casings
|
||||||
|
#define COMPONENT_BEAUTIFIED Casings
|
||||||
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
// #define DISABLE_COMPILE_CACHE
|
||||||
|
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_CASINGS
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_CASINGS
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_CASINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\addons\main\script_macros.hpp"
|
20
addons/casings/stringtable.xml
Normal file
20
addons/casings/stringtable.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project name="ACE">
|
||||||
|
<Package name="Casings">
|
||||||
|
<Key ID="STR_ACE_Casings_Settings_DisplayName">
|
||||||
|
<English>ACE Casings</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_displayName">
|
||||||
|
<English>Casings Enabled</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_description">
|
||||||
|
<English>Enable persistent casings (POTENTIAL performance impact on old/weak systems)</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_maxCasings_displayName">
|
||||||
|
<English>Maximum casings</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Casings_maxCasings_description">
|
||||||
|
<English>Maximum amount of casings to display</English>
|
||||||
|
</Key>
|
||||||
|
</Package>
|
||||||
|
</Project>
|
@ -111,7 +111,6 @@ PREP(inTransitionAnim);
|
|||||||
PREP(isAwake);
|
PREP(isAwake);
|
||||||
PREP(isEngineer);
|
PREP(isEngineer);
|
||||||
PREP(isEOD);
|
PREP(isEOD);
|
||||||
PREP(isFeatureCameraActive);
|
|
||||||
PREP(isInBuilding);
|
PREP(isInBuilding);
|
||||||
PREP(isMedic);
|
PREP(isMedic);
|
||||||
PREP(isModLoaded);
|
PREP(isModLoaded);
|
||||||
@ -127,7 +126,6 @@ PREP(muteUnitHandleInitPost);
|
|||||||
PREP(muteUnitHandleRespawn);
|
PREP(muteUnitHandleRespawn);
|
||||||
PREP(nearestVehiclesFreeSeat);
|
PREP(nearestVehiclesFreeSeat);
|
||||||
PREP(numberToDigits);
|
PREP(numberToDigits);
|
||||||
PREP(numberToDigitsString);
|
|
||||||
PREP(numberToString);
|
PREP(numberToString);
|
||||||
PREP(onAnswerRequest);
|
PREP(onAnswerRequest);
|
||||||
PREP(owned);
|
PREP(owned);
|
||||||
@ -187,6 +185,7 @@ PREP(uniqueElements);
|
|||||||
PREP(uniqueItems);
|
PREP(uniqueItems);
|
||||||
PREP(unloadPerson);
|
PREP(unloadPerson);
|
||||||
PREP(unloadPersonLocal);
|
PREP(unloadPersonLocal);
|
||||||
|
PREP(unloadUnitWeapon);
|
||||||
PREP(unmuteUnit);
|
PREP(unmuteUnit);
|
||||||
PREP(useItem);
|
PREP(useItem);
|
||||||
PREP(useMagazine);
|
PREP(useMagazine);
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
["blockThrow", false, ["ACE_Attach", "ACE_concertina_wire", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_rearm", "ACE_refuel", "ACE_Sandbag", "ACE_Trenches", "ACE_tripod"]] call FUNC(statusEffect_addType);
|
["blockThrow", false, ["ACE_Attach", "ACE_concertina_wire", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_rearm", "ACE_refuel", "ACE_Sandbag", "ACE_Trenches", "ACE_tripod"]] call FUNC(statusEffect_addType);
|
||||||
["setHidden", true, ["ace_unconscious"]] call FUNC(statusEffect_addType);
|
["setHidden", true, ["ace_unconscious"]] call FUNC(statusEffect_addType);
|
||||||
["blockRadio", false, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered), "ace_unconscious"]] call FUNC(statusEffect_addType);
|
["blockRadio", false, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered), "ace_unconscious"]] call FUNC(statusEffect_addType);
|
||||||
|
["blockSpeaking", false, ["ace_unconscious"]] call FUNC(statusEffect_addType);
|
||||||
|
|
||||||
[QGVAR(forceWalk), {
|
[QGVAR(forceWalk), {
|
||||||
params ["_object", "_set"];
|
params ["_object", "_set"];
|
||||||
@ -86,6 +87,17 @@
|
|||||||
};
|
};
|
||||||
}] call CBA_fnc_addEventHandler;
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
[QGVAR(blockSpeaking), {
|
||||||
|
params ["_object", "_set"];
|
||||||
|
TRACE_2("blockSpeaking EH",_object,_set);
|
||||||
|
if (["acre_main"] call FUNC(isModLoaded)) then {
|
||||||
|
_object setVariable ["acre_sys_core_isDisabled", _set > 0, true];
|
||||||
|
};
|
||||||
|
if (["task_force_radio"] call FUNC(isModLoaded)) then {
|
||||||
|
_object setVariable ["tf_voiceVolume", [1, 0] select (_set > 0), true];
|
||||||
|
};
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
[QGVAR(blockDamage), { //Name reversed from `allowDamage` because we want NOR logic
|
[QGVAR(blockDamage), { //Name reversed from `allowDamage` because we want NOR logic
|
||||||
params ["_object", "_set"];
|
params ["_object", "_set"];
|
||||||
if ((_object isKindOf "CAManBase") && {(["ace_medical"] call FUNC(isModLoaded))}) then {
|
if ((_object isKindOf "CAManBase") && {(["ace_medical"] call FUNC(isModLoaded))}) then {
|
||||||
@ -527,4 +539,21 @@ GVAR(deviceKeyCurrentIndex) = -1;
|
|||||||
{false},
|
{false},
|
||||||
[0xC7, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + Home Key
|
[0xC7, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + Home Key
|
||||||
|
|
||||||
|
|
||||||
|
["ACE3 Weapons", QGVAR(unloadWeapon), localize LSTRING(unloadWeapon), {
|
||||||
|
// Conditions:
|
||||||
|
if !([ACE_player, objNull, ["isNotInside"]] call FUNC(canInteractWith)) exitWith {false};
|
||||||
|
|
||||||
|
private _currentWeapon = currentWeapon ACE_player;
|
||||||
|
if !(_currentWeapon != primaryWeapon _unit && {_currentWeapon != handgunWeapon _unit} && {_currentWeapon != secondaryWeapon _unit}) exitWith {false};
|
||||||
|
|
||||||
|
private _currentMuzzle = currentMuzzle ACE_player;
|
||||||
|
private _currentAmmoCount = ACE_player ammo _currentMuzzle;
|
||||||
|
if (_currentAmmoCount < 1) exitWith {false};
|
||||||
|
|
||||||
|
// Statement:
|
||||||
|
[ACE_player, _currentWeapon, _currentMuzzle, _currentAmmoCount, false] call FUNC(unloadUnitWeapon);
|
||||||
|
true
|
||||||
|
}, {false}, [19, [false, false, true]], false] call CBA_fnc_addKeybind; //ALT + R Key
|
||||||
|
|
||||||
GVAR(commonPostInited) = true;
|
GVAR(commonPostInited) = true;
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
/*
|
|
||||||
* Author: Sniperwolf572
|
|
||||||
* Checks if one of the following common feature cameras is active:
|
|
||||||
*
|
|
||||||
* - Curator
|
|
||||||
* - ACE Spectator
|
|
||||||
* - Arsenal camera (BIS_fnc_arsenal)
|
|
||||||
* - Nexus Spectator (BIS_fnc_EGSpectator)
|
|
||||||
* - Establishing shot (BIS_fnc_establishingShot)
|
|
||||||
* - Splendid camera (BIS_fnc_camera)
|
|
||||||
* - Animation viewer (BIS_fnc_animViewer)
|
|
||||||
* - Classic camera (BIS_fnc_cameraOld)
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* 0: None <NIL>
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* A feature camera is active <BOOL>
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* [] call ace_common_fnc_isFeatureCameraActive
|
|
||||||
*
|
|
||||||
* Public: Yes
|
|
||||||
*/
|
|
||||||
|
|
||||||
ACE_DEPRECATED(QFUNC(isFeatureCameraActive),"3.14.0","CBA_fnc_getActiveFeatureCamera");
|
|
||||||
|
|
||||||
!(
|
|
||||||
isNull curatorCamera && // Curator
|
|
||||||
{!GETMVAR(EGVAR(spectator,isSet),false)} && // ACE Spectator
|
|
||||||
{GETMVAR(EGVAR(huntir,stop),true)} && // ACE Hunt IR
|
|
||||||
{isNull GETMVAR(BIS_EGSpectatorCamera_camera, objNull)} && // BIS Nexus Spectator
|
|
||||||
{isNull GETUVAR(BIS_fnc_arsenal_cam, objNull)} && // Arsenal camera
|
|
||||||
{isNull GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull)} && // Establishing shot camera
|
|
||||||
{isNull GETMVAR(BIS_fnc_camera_cam, objNull)} && // Splendid camera
|
|
||||||
{isNull GETUVAR(BIS_fnc_animViewer_cam, objNull)} && // Animation viewer camera
|
|
||||||
{isNull GETMVAR(BIS_DEBUG_CAM, objNull)} // Classic camera
|
|
||||||
) // return
|
|
@ -1,21 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
/*
|
|
||||||
* Author: commy2
|
|
||||||
* Transforms a number to an string of the correspondending digits.
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* 0: Number to 'digitize' <NUMBER>
|
|
||||||
* 1: Set the minimal length of the returned string. Useful for getting left hand zeroes. (Optional) <NUMBER>
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* Digits. The maximum length is six digits. <STRING>
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* [5, 5] call ace_common_fnc_numberToDigitsString
|
|
||||||
*
|
|
||||||
* Public: Yes
|
|
||||||
*/
|
|
||||||
|
|
||||||
ACE_DEPRECATED(QFUNC(numberToDigitsString),"3.14.0","CBA_fnc_formatNumber");
|
|
||||||
|
|
||||||
_this call CBA_fnc_formatNumber
|
|
@ -31,7 +31,6 @@ if (_setVolume) then {
|
|||||||
2 fadeSound NORMAL_LEVEL;
|
2 fadeSound NORMAL_LEVEL;
|
||||||
|
|
||||||
// TFAR
|
// TFAR
|
||||||
_unit setVariable ["tf_voiceVolume", NORMAL_LEVEL, true];
|
|
||||||
_unit setVariable ["tf_globalVolume", NORMAL_LEVEL];
|
_unit setVariable ["tf_globalVolume", NORMAL_LEVEL];
|
||||||
|
|
||||||
// ACRE2
|
// ACRE2
|
||||||
@ -42,7 +41,6 @@ if (_setVolume) then {
|
|||||||
2 fadeSound MUTED_LEVEL;
|
2 fadeSound MUTED_LEVEL;
|
||||||
|
|
||||||
// TFAR
|
// TFAR
|
||||||
_unit setVariable ["tf_voiceVolume", NO_SOUND, true];
|
|
||||||
_unit setVariable ["tf_globalVolume", MUTED_LEVEL];
|
_unit setVariable ["tf_globalVolume", MUTED_LEVEL];
|
||||||
|
|
||||||
// ACRE2
|
// ACRE2
|
||||||
|
87
addons/common/functions/fnc_unloadUnitWeapon.sqf
Normal file
87
addons/common/functions/fnc_unloadUnitWeapon.sqf
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: drofseh & Commy2
|
||||||
|
* Unload the magazine from the unit's weapon and attempt to put it in a sensible place.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Player <OBJECT>
|
||||||
|
* 1: Weapon <STRING>
|
||||||
|
* 2: Muzzle (optional, default: Weapon)<STRING>
|
||||||
|
* 3: Ammo count (optional, default: ammo currentMuzzle Player) <NUMBER>
|
||||||
|
* 4: Skip animation? (optional, default: false) <BOOL>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player, 23, false] call ace_common_fnc_unloadUnitWeapon
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit", "_weapon", ["_muzzle", _weapon], ["_ammoCount", _unit ammo _muzzle ], ["_skipAnim", false]];
|
||||||
|
TRACE_5("params",_unit,_weapon,_muzzle,_ammoCount,_skipAnim);
|
||||||
|
|
||||||
|
// audiovisual effects
|
||||||
|
private _delay = 0;
|
||||||
|
if !(_skipAnim) then {
|
||||||
|
_delay = 1.5;
|
||||||
|
private _config = configFile >> "CfgWeapons" >> _weapon;
|
||||||
|
if (_weapon != _muzzle) then {
|
||||||
|
_config = _config >> _muzzle;
|
||||||
|
};
|
||||||
|
|
||||||
|
// get and play animation
|
||||||
|
private _unloadAction = getText (_config >> "ACE_unloadAction");
|
||||||
|
|
||||||
|
if (_unloadAction == "") then {
|
||||||
|
_unloadAction = getText (_config >> "reloadAction");
|
||||||
|
};
|
||||||
|
|
||||||
|
[_unit, _unloadAction, 1] call FUNC(doGesture);
|
||||||
|
|
||||||
|
// get and play sound
|
||||||
|
private _unloadSound = getText (_config >> "ACE_unloadSound");
|
||||||
|
|
||||||
|
if (_unloadSound == "") then {
|
||||||
|
_unloadSound = "A3\Sounds_F\arsenal\weapons\Rifles\Katiba\reload_Katiba.wss";
|
||||||
|
private _unloadSoundArray = getArray (_config >> "reloadMagazineSound");
|
||||||
|
|
||||||
|
// file extention is required for playSound3D
|
||||||
|
if (_unloadSoundArray isNotEqualTo []) then {
|
||||||
|
private _wssTest = format ["%1.wss", _unloadSoundArray select 0];
|
||||||
|
if (fileExists _wssTest) then {
|
||||||
|
_unloadSound = _wssTest;
|
||||||
|
} else {
|
||||||
|
private _wavTest = format ["%1.wav", _unloadSoundArray select 0];
|
||||||
|
if (fileExists _wavTest) then {
|
||||||
|
_unloadSound = _wavTest;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
playSound3D [_unloadSound, _unit];
|
||||||
|
};
|
||||||
|
|
||||||
|
// remove magazine from weapon and add it to inventory
|
||||||
|
[{
|
||||||
|
params ["_unit", "_weapon", "_ammoCount"];
|
||||||
|
|
||||||
|
// remove weapon item
|
||||||
|
private _magazineClass = currentMagazine _unit;
|
||||||
|
|
||||||
|
switch true do {
|
||||||
|
case (_weapon == primaryWeapon _unit): {
|
||||||
|
_unit removePrimaryWeaponItem _magazineClass;
|
||||||
|
};
|
||||||
|
case (_weapon == handgunWeapon _unit): {
|
||||||
|
_unit removeHandgunItem _magazineClass;
|
||||||
|
};
|
||||||
|
case (_weapon == secondaryWeapon _unit): {
|
||||||
|
_unit removeSecondaryWeaponItem _magazineClass;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
[_unit, _magazineClass, _ammoCount, true] call CBA_fnc_addMagazine;
|
||||||
|
}, [_unit, _weapon, _ammoCount], _delay] call CBA_fnc_waitAndExecute;
|
@ -890,7 +890,7 @@
|
|||||||
<Russian>Проверять все аддоны</Russian>
|
<Russian>Проверять все аддоны</Russian>
|
||||||
<Italian>Controlla tutti gli addon</Italian>
|
<Italian>Controlla tutti gli addon</Italian>
|
||||||
<Japanese>全アドオンを検査</Japanese>
|
<Japanese>全アドオンを検査</Japanese>
|
||||||
<Korean>모든 에드온 검사</Korean>
|
<Korean>모든 애드온 검사</Korean>
|
||||||
<Chinese>檢查所有模組</Chinese>
|
<Chinese>檢查所有模組</Chinese>
|
||||||
<Chinesesimp>检查所有模组</Chinesesimp>
|
<Chinesesimp>检查所有模组</Chinesesimp>
|
||||||
</Key>
|
</Key>
|
||||||
@ -939,7 +939,7 @@
|
|||||||
<Russian>Какие аддоны дополнительно разрешены?</Russian>
|
<Russian>Какие аддоны дополнительно разрешены?</Russian>
|
||||||
<Italian>Quali addon sono permessi in ogni caso?</Italian>
|
<Italian>Quali addon sono permessi in ogni caso?</Italian>
|
||||||
<Japanese>どのようなアドオンを許可しますか?</Japanese>
|
<Japanese>どのようなアドオンを許可しますか?</Japanese>
|
||||||
<Korean>허가되는 에드온은 어느것입니까?</Korean>
|
<Korean>허가되는 애드온은 어느 것입니까?</Korean>
|
||||||
<Chinese>哪些模組是可被允許/忽略的?</Chinese>
|
<Chinese>哪些模組是可被允許/忽略的?</Chinese>
|
||||||
<Chinesesimp>无论如何都允许的附加组件</Chinesesimp>
|
<Chinesesimp>无论如何都允许的附加组件</Chinesesimp>
|
||||||
</Key>
|
</Key>
|
||||||
@ -1635,5 +1635,8 @@
|
|||||||
<Chinese>受所在位置影響提升醫療能力</Chinese>
|
<Chinese>受所在位置影響提升醫療能力</Chinese>
|
||||||
<Turkish>Konumlar Tedaviyi Hızlandırır</Turkish>
|
<Turkish>Konumlar Tedaviyi Hızlandırır</Turkish>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Common_unloadWeapon">
|
||||||
|
<English>Unload Weapon</English>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -96,7 +96,7 @@ if (_smokeDelayEnabled) then {
|
|||||||
_fireSource = selectRandom _positions;
|
_fireSource = selectRandom _positions;
|
||||||
};
|
};
|
||||||
|
|
||||||
[QGVAR(cookOffEffect), [_vehicle, true, _ring, _time, _fireSource]] call CBA_fnc_globalEvent;
|
[QGVAR(cookOffEffect), [_vehicle, true, _ring, _time, _fireSource, _intensity]] call CBA_fnc_globalEvent;
|
||||||
|
|
||||||
_intensity = _intensity - (0.5 max random 1);
|
_intensity = _intensity - (0.5 max random 1);
|
||||||
_vehicle setVariable [QGVAR(intensity), _intensity];
|
_vehicle setVariable [QGVAR(intensity), _intensity];
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* 2: Spawn fire ring <Boolean>
|
* 2: Spawn fire ring <Boolean>
|
||||||
* 3: How long effect will last (Max 20 seconds) <Number>
|
* 3: How long effect will last (Max 20 seconds) <Number>
|
||||||
* 4: What selection will fire originate from <String>
|
* 4: What selection will fire originate from <String>
|
||||||
|
* 5: Cookoff intensity value <Number>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
@ -19,7 +20,7 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
|
|
||||||
params ["_obj", "_jet", "_ring", "_time", "_fireSelection"];
|
params ["_obj", "_jet", "_ring", "_time", "_fireSelection", "_intensity"];
|
||||||
private _light = "#lightpoint" createVehicleLocal [0,0,0];
|
private _light = "#lightpoint" createVehicleLocal [0,0,0];
|
||||||
_light setLightBrightness 5;
|
_light setLightBrightness 5;
|
||||||
_light setLightAmbient [0.8, 0.6, 0.2];
|
_light setLightAmbient [0.8, 0.6, 0.2];
|
||||||
@ -43,12 +44,14 @@ if (isServer) then {
|
|||||||
|
|
||||||
[{
|
[{
|
||||||
params ["_args", "_pfh"];
|
params ["_args", "_pfh"];
|
||||||
_args params ["_obj", "_jet", "_ring", "_time", "_startTime", "_light", "_fireSelection", "_sound"];
|
_args params ["_obj", "_jet", "_ring", "_time", "_startTime", "_light", "_fireSelection", "_sound", "_intensity"];
|
||||||
private _elapsedTime = CBA_missionTime - _startTime;
|
private _elapsedTime = CBA_missionTime - _startTime;
|
||||||
if (_elapsedTime >= _time) exitWith {
|
if (_elapsedTime >= _time) exitWith {
|
||||||
deleteVehicle _light;
|
deleteVehicle _light;
|
||||||
deleteVehicle _sound;
|
deleteVehicle _sound;
|
||||||
[QEGVAR(fire,removeFireSource), [_obj]] call CBA_fnc_globalEvent;
|
if (isServer) then {
|
||||||
|
[QEGVAR(fire,removeFireSource), [_obj]] call CBA_fnc_localEvent;
|
||||||
|
};
|
||||||
[_pfh] call CBA_fnc_removePerFrameHandler;
|
[_pfh] call CBA_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
private _factor = (1 + (_elapsedTime / 2) min 2);
|
private _factor = (1 + (_elapsedTime / 2) min 2);
|
||||||
@ -183,5 +186,14 @@ if (isServer) then {
|
|||||||
[2 + random 1], 1, 0, "", "", _obj
|
[2 + random 1], 1, 0, "", "", _obj
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}, 0, [_obj, _jet, _ring, _time, CBA_missionTime, _light, _fireSelection, _sound]] call cba_fnc_addPerFrameHandler;
|
|
||||||
|
(getVehicleTIPars _obj) params ["_tiEngine", "_tiWheels", "_tiWeapon"];
|
||||||
|
_obj setVehicleTIPars [
|
||||||
|
// formula is designed to have the temperature ramp up quickly and then level out
|
||||||
|
(_tiEngine + (_intensity * 0.01))/1.005,
|
||||||
|
(_tiWheels + (_intensity * 0.004))/1.002, // wheels//tracks are further away from burning parts
|
||||||
|
(_tiWeapon + (_intensity * 0.01))/1.005
|
||||||
|
];
|
||||||
|
|
||||||
|
}, 0, [_obj, _jet, _ring, _time, CBA_missionTime, _light, _fireSelection, _sound, _intensity]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ PREP(assemble_pickupWeapon);
|
|||||||
PREP(canGetIn);
|
PREP(canGetIn);
|
||||||
PREP(getIn);
|
PREP(getIn);
|
||||||
|
|
||||||
|
PREP(getCarryMagazine);
|
||||||
PREP(proxyWeapon);
|
PREP(proxyWeapon);
|
||||||
|
|
||||||
PREP(reload_actionsLoad);
|
PREP(reload_actionsLoad);
|
||||||
|
@ -31,13 +31,7 @@ private _allCarryMags = [];
|
|||||||
private _weapon = _x;
|
private _weapon = _x;
|
||||||
{
|
{
|
||||||
private _xMag = _x;
|
private _xMag = _x;
|
||||||
private _carryMag = GVAR(vehicleMagCache) get _xMag;
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
||||||
if (isNil "_carryMag") then {
|
|
||||||
private _groups = "getNumber (_x >> _xMag) == 1 && {isClass (configFile >> 'CfgMagazines' >> configName _x)}" configClasses (configFile >> QGVAR(groups));
|
|
||||||
_carryMag = configName (_groups param [0, configNull]);
|
|
||||||
GVAR(vehicleMagCache) set [_x, _carryMag];
|
|
||||||
TRACE_2("setting cache",_xMag,_carryMag);
|
|
||||||
};
|
|
||||||
if (_carryMag != "") then {
|
if (_carryMag != "") then {
|
||||||
_turretMagsCSW pushBackUnique _xMag;
|
_turretMagsCSW pushBackUnique _xMag;
|
||||||
_allCarryMags pushBackUnique _carryMag;
|
_allCarryMags pushBackUnique _carryMag;
|
||||||
|
@ -21,12 +21,14 @@
|
|||||||
|
|
||||||
// Remove the tripod from the launcher slot
|
// Remove the tripod from the launcher slot
|
||||||
private _secondaryWeaponClassname = secondaryWeapon _player;
|
private _secondaryWeaponClassname = secondaryWeapon _player;
|
||||||
|
// handle loaded launchers which can become csw like CUP Metis
|
||||||
|
private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""];
|
||||||
_player removeWeaponGlobal (secondaryWeapon _player);
|
_player removeWeaponGlobal (secondaryWeapon _player);
|
||||||
|
|
||||||
private _onFinish = {
|
private _onFinish = {
|
||||||
params ["_args"];
|
params ["_args"];
|
||||||
_args params ["_player", "_secondaryWeaponClassname"];
|
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
|
||||||
TRACE_2("deployTripod finish",_player,_secondaryWeaponClassname);
|
TRACE_3("deployTripod finish",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
|
||||||
|
|
||||||
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
|
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
|
||||||
|
|
||||||
@ -34,6 +36,9 @@
|
|||||||
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
|
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
|
||||||
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
|
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
|
||||||
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
|
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
|
||||||
|
if (_secondaryWeaponMagazine isNotEqualTo "") then {
|
||||||
|
_cswTripod setVariable [QGVAR(secondaryWeaponMagazine), _secondaryWeaponMagazine];
|
||||||
|
};
|
||||||
if (!GVAR(defaultAssemblyMode)) then {
|
if (!GVAR(defaultAssemblyMode)) then {
|
||||||
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
|
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
|
||||||
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
|
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
|
||||||
@ -61,12 +66,15 @@
|
|||||||
|
|
||||||
private _onFailure = {
|
private _onFailure = {
|
||||||
params ["_args"];
|
params ["_args"];
|
||||||
_args params ["_player", "_secondaryWeaponClassname"];
|
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
|
||||||
TRACE_2("deployTripod failure",_player,_secondaryWeaponClassname);
|
TRACE_3("deployTripod failure",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
|
||||||
|
|
||||||
_player addWeaponGlobal _secondaryWeaponClassname;
|
_player addWeaponGlobal _secondaryWeaponClassname;
|
||||||
|
if (_secondaryWeaponMagazine isNotEqualTo "") then {
|
||||||
|
_player addWeaponItem [_secondaryWeaponClassname, _secondaryWeaponMagazine, true];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
||||||
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
|
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
|
||||||
}, _this] call CBA_fnc_execNextFrame;
|
}, _this] call CBA_fnc_execNextFrame;
|
||||||
|
@ -37,16 +37,18 @@
|
|||||||
_weaponPos set [2, (_weaponPos select 2) + 0.1];
|
_weaponPos set [2, (_weaponPos select 2) + 0.1];
|
||||||
private _weaponDir = getDir _staticWeapon;
|
private _weaponDir = getDir _staticWeapon;
|
||||||
|
|
||||||
|
private _carryWeaponMag = "";
|
||||||
|
private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLower _x};
|
||||||
LOG("remove ammo");
|
LOG("remove ammo");
|
||||||
{
|
{
|
||||||
_x params ["_xMag", "", "_xAmmo"];
|
_x params ["_xMag", "", "_xAmmo"];
|
||||||
|
if (_xAmmo == 0) then {continue};
|
||||||
|
|
||||||
private _carryMag = GVAR(vehicleMagCache) get _xMag;
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
||||||
if (isNil "_carryMag") then {
|
if (_carryWeaponMag isEqualTo "" && {toLower _carryMag in _carryWeaponMags}) then {
|
||||||
private _groups = "getNumber (_x >> _xMag) == 1 && {isClass (configFile >> 'CfgMagazines' >> configName _x)}" configClasses (configFile >> QGVAR(groups));
|
TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag);
|
||||||
_carryMag = configName (_groups param [0, configNull]);
|
_carryWeaponMag = _carryMag;
|
||||||
GVAR(vehicleMagCache) set [_xMag, _carryMag];
|
DEC(_xAmmo);
|
||||||
TRACE_2("setting cache",_xMag,_carryMag);
|
|
||||||
};
|
};
|
||||||
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
||||||
TRACE_2("Removing ammo",_xMag,_carryMag);
|
TRACE_2("Removing ammo",_xMag,_carryMag);
|
||||||
@ -68,16 +70,23 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
[{
|
[{
|
||||||
params ["_player", "_weaponPos", "_carryWeaponClassname"];
|
params ["_player", "_weaponPos", "_carryWeaponClassname", "_carryWeaponMag"];
|
||||||
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
||||||
_player addWeapon _carryWeaponClassname;
|
_player addWeapon _carryWeaponClassname;
|
||||||
|
if (_carryWeaponMag isNotEqualTo "") then {
|
||||||
|
_player addWeaponItem [_carryWeaponClassname, _carryWeaponMag, true];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
|
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
|
||||||
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
||||||
_weaponHolder setDir random [0, 180, 360];
|
_weaponHolder setDir random [0, 180, 360];
|
||||||
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
|
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
|
||||||
|
if (_carryWeaponMag isEqualTo "") then {
|
||||||
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
|
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
|
||||||
}, [_player, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
|
} else {
|
||||||
|
_weaponHolder addWeaponWithAttachmentsCargoGlobal [[_carryWeaponClassname, "", "", "", [_carryWeaponMag, 1], [], ""], 1];
|
||||||
|
};
|
||||||
|
}, [_player, _weaponPos, _carryWeaponClassname, _carryWeaponMag]] call CBA_fnc_execNextFrame;
|
||||||
|
|
||||||
LOG("delete weapon");
|
LOG("delete weapon");
|
||||||
deleteVehicle _staticWeapon;
|
deleteVehicle _staticWeapon;
|
||||||
|
28
addons/csw/functions/fnc_getCarryMagazine.sqf
Normal file
28
addons/csw/functions/fnc_getCarryMagazine.sqf
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror, Dystopian
|
||||||
|
* Gets magazine that the player can carry, suitable to vehicle magazine
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Vehicle Magazine <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Carry Magazine <STRING>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* "1Rnd_GAT_missiles" call ace_csw_fnc_getCarryMagazine
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_vehicleMag"];
|
||||||
|
|
||||||
|
private _carryMag = GVAR(vehicleMagCache) get _vehicleMag;
|
||||||
|
if (isNil "_carryMag") then {
|
||||||
|
private _groups = "getNumber (_x >> _vehicleMag) == 1 && {isClass (configFile >> 'CfgMagazines' >> configName _x)}" configClasses (configFile >> QGVAR(groups));
|
||||||
|
_carryMag = configName (_groups param [0, configNull]);
|
||||||
|
GVAR(vehicleMagCache) set [_vehicleMag, _carryMag];
|
||||||
|
TRACE_2("setting cache",_vehicleMag,_carryMag);
|
||||||
|
};
|
||||||
|
|
||||||
|
_carryMag
|
@ -60,14 +60,7 @@ private _cfgMagazines = configFile >> "CfgMagazines";
|
|||||||
|
|
||||||
if ((_xAmmo > 0) && {!(_xMag in _handeledMagTypes)}) then {
|
if ((_xAmmo > 0) && {!(_xMag in _handeledMagTypes)}) then {
|
||||||
_handeledMagTypes pushBack _xMag;
|
_handeledMagTypes pushBack _xMag;
|
||||||
private _carryMag = GVAR(vehicleMagCache) get _xMag;
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
||||||
|
|
||||||
if (isNil "_carryMag") then {
|
|
||||||
private _groups = "getNumber (_x >> _xMag) == 1 && {isClass (configFile >> 'CfgMagazines' >> configName _x)}" configClasses (configFile >> QGVAR(groups));
|
|
||||||
_carryMag = configName (_groups param [0, configNull]);
|
|
||||||
GVAR(vehicleMagCache) set [_xMag, _carryMag];
|
|
||||||
TRACE_2("setting cache",_xMag,_carryMag);
|
|
||||||
};
|
|
||||||
if (_carryMag == "") exitWith {};
|
if (_carryMag == "") exitWith {};
|
||||||
|
|
||||||
private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName");
|
private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName");
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
|
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Weapon <STRING>
|
* 0: Vehicle <OBJECT>
|
||||||
* 1: Magazine that is carryable <STRING>
|
* 1: Turret <ARRAY>
|
||||||
|
* 2: Magazine that is carryable <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Vehicle Magazine <STRING>
|
* Vehicle Magazine <STRING>
|
||||||
|
@ -36,13 +36,7 @@ private _containerMagazineCount = [];
|
|||||||
{
|
{
|
||||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||||
|
|
||||||
private _carryMag = GVAR(vehicleMagCache) get _xMag;
|
private _carryMag = _xMag call FUNC(getCarryMagazine);
|
||||||
if (isNil "_carryMag") then {
|
|
||||||
private _groups = "getNumber (_x >> _xMag) == 1 && {isClass (configFile >> 'CfgMagazines' >> configName _x)}" configClasses (configFile >> QGVAR(groups));
|
|
||||||
_carryMag = configName (_groups param [0, configNull]);
|
|
||||||
GVAR(vehicleMagCache) set [_xMag, _carryMag];
|
|
||||||
TRACE_2("setting cache",_xMag,_carryMag);
|
|
||||||
};
|
|
||||||
if (_carryMag != "") then {
|
if (_carryMag != "") then {
|
||||||
if ((_desiredAmmo > 0) && {_loadedMagazineInfo isEqualTo []}) then {
|
if ((_desiredAmmo > 0) && {_loadedMagazineInfo isEqualTo []}) then {
|
||||||
private _loadedMagAmmo = _desiredAmmo min _xAmmo;
|
private _loadedMagAmmo = _desiredAmmo min _xAmmo;
|
||||||
@ -74,6 +68,15 @@ TRACE_1("Remove all loaded magazines",_magsToRemove);
|
|||||||
};
|
};
|
||||||
} forEach _magsToRemove;
|
} forEach _magsToRemove;
|
||||||
|
|
||||||
|
if (_staticWeapon getVariable [QGVAR(secondaryWeaponMagazine), ""] isNotEqualTo "") then {
|
||||||
|
private _secondaryWeaponMagazine = _staticWeapon getVariable QGVAR(secondaryWeaponMagazine);
|
||||||
|
private _turret = allTurrets _staticWeapon param [0, []];
|
||||||
|
private _vehicleMag = [_staticWeapon, _turret, _secondaryWeaponMagazine] call FUNC(reload_getVehicleMagazine);
|
||||||
|
TRACE_3("Re-add previous mag",_secondaryWeaponMagazine,_turret,_vehicleMag);
|
||||||
|
if (!isClass (configFile >> "CfgMagazines" >> _vehicleMag)) exitWith {};
|
||||||
|
_staticWeapon addMagazineTurret [_vehicleMag, _turret, 1];
|
||||||
|
_staticWeapon setVariable [QGVAR(secondaryWeaponMagazine), nil];
|
||||||
|
};
|
||||||
|
|
||||||
if (_storeExtraMagazines) then {
|
if (_storeExtraMagazines) then {
|
||||||
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
||||||
|
@ -18,6 +18,12 @@ class CfgVehicles {
|
|||||||
GVAR(canDrag) = 0;
|
GVAR(canDrag) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Invisible Target Soldier
|
||||||
|
class TargetSoldierBase: StaticWeapon {
|
||||||
|
GVAR(canCarry) = 0;
|
||||||
|
GVAR(canDrag) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class StaticMortar;
|
class StaticMortar;
|
||||||
class Mortar_01_base_F: StaticMortar {
|
class Mortar_01_base_F: StaticMortar {
|
||||||
GVAR(canCarry) = 1;
|
GVAR(canCarry) = 1;
|
||||||
|
@ -824,7 +824,7 @@
|
|||||||
<Russian>Штраф не-специалистам?</Russian>
|
<Russian>Штраф не-специалистам?</Russian>
|
||||||
<Italian>Punisci non-specialisti?</Italian>
|
<Italian>Punisci non-specialisti?</Italian>
|
||||||
<Japanese>非特技兵へ足かせ</Japanese>
|
<Japanese>非特技兵へ足かせ</Japanese>
|
||||||
<Korean>비-전문가에 불이익을 줍니까?</Korean>
|
<Korean>비전문가에게 불이익을 줍니까?</Korean>
|
||||||
<Chinesesimp>惩罚非专业人士?</Chinesesimp>
|
<Chinesesimp>惩罚非专业人士?</Chinesesimp>
|
||||||
<Chinese>折磨非專業人員?</Chinese>
|
<Chinese>折磨非專業人員?</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -840,7 +840,7 @@
|
|||||||
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
|
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
|
||||||
<Italian>Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si</Italian>
|
<Italian>Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si</Italian>
|
||||||
<Japanese>非特技兵は動作完了までの時間を増加させますか? 標準: 有効化</Japanese>
|
<Japanese>非特技兵は動作完了までの時間を増加させますか? 標準: 有効化</Japanese>
|
||||||
<Korean>비-전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예</Korean>
|
<Korean>비전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예</Korean>
|
||||||
<Chinesesimp>增加非专业人员相关操作的时间? 预设:是</Chinesesimp>
|
<Chinesesimp>增加非专业人员相关操作的时间? 预设:是</Chinesesimp>
|
||||||
<Chinese>增加非專業人員相關操作的時間? 預設: 是</Chinese>
|
<Chinese>增加非專業人員相關操作的時間? 預設: 是</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
|
@ -1,16 +1,3 @@
|
|||||||
#define EQUIP_FRIES_ATTRIBUTE class Attributes { \
|
|
||||||
class GVAR(equipFRIES) { \
|
|
||||||
property = QGVAR(equipFRIES); \
|
|
||||||
control = "Checkbox"; \
|
|
||||||
displayName = CSTRING(Eden_equipFRIES); \
|
|
||||||
tooltip = CSTRING(Eden_equipFRIES_Tooltip); \
|
|
||||||
expression = QUOTE(if (_value) then {[_this] call FUNC(equipFRIES)}); \
|
|
||||||
typeName = "BOOL"; \
|
|
||||||
condition = "objectVehicle"; \
|
|
||||||
defaultValue = "(false)"; \
|
|
||||||
}; \
|
|
||||||
}
|
|
||||||
|
|
||||||
class CfgVehicles {
|
class CfgVehicles {
|
||||||
class Logic;
|
class Logic;
|
||||||
class Module_F: Logic {
|
class Module_F: Logic {
|
||||||
@ -221,8 +208,10 @@ class CfgVehicles {
|
|||||||
GVAR(friesAttachmentPoint)[] = {0.035, 2.2, -0.15};
|
GVAR(friesAttachmentPoint)[] = {0.035, 2.2, -0.15};
|
||||||
GVAR(onPrepare) = QFUNC(onPrepareCommon);
|
GVAR(onPrepare) = QFUNC(onPrepareCommon);
|
||||||
GVAR(onCut) = QFUNC(onCutCommon);
|
GVAR(onCut) = QFUNC(onCutCommon);
|
||||||
|
class Attributes {
|
||||||
EQUIP_FRIES_ATTRIBUTE;
|
EQUIP_FRIES_ATTRIBUTE;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
class Heli_Transport_02_base_F: Helicopter_Base_H {
|
class Heli_Transport_02_base_F: Helicopter_Base_H {
|
||||||
GVAR(enabled) = 1;
|
GVAR(enabled) = 1;
|
||||||
GVAR(ropeOrigins)[] = {{0.94, -4.82, -1.16}, {-0.94, -4.82, -1.16}};
|
GVAR(ropeOrigins)[] = {{0.94, -4.82, -1.16}, {-0.94, -4.82, -1.16}};
|
||||||
@ -254,15 +243,20 @@ class CfgVehicles {
|
|||||||
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
|
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
|
||||||
GVAR(friesType) = "ACE_friesGantryReverse";
|
GVAR(friesType) = "ACE_friesGantryReverse";
|
||||||
GVAR(friesAttachmentPoint)[] = {-1.04, 2.5, -0.34};
|
GVAR(friesAttachmentPoint)[] = {-1.04, 2.5, -0.34};
|
||||||
|
class Attributes {
|
||||||
EQUIP_FRIES_ATTRIBUTE;
|
EQUIP_FRIES_ATTRIBUTE;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
|
class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
|
||||||
GVAR(enabled) = 2;
|
GVAR(enabled) = 2;
|
||||||
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
|
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
|
||||||
GVAR(friesType) = "ACE_friesGantry";
|
GVAR(friesType) = "ACE_friesGantry";
|
||||||
GVAR(friesAttachmentPoint)[] = {1.07, 2.5, -0.5};
|
GVAR(friesAttachmentPoint)[] = {1.07, 2.5, -0.5};
|
||||||
|
|
||||||
|
class Attributes {
|
||||||
EQUIP_FRIES_ATTRIBUTE;
|
EQUIP_FRIES_ATTRIBUTE;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
class Heli_Transport_04_base_F: Helicopter_Base_H {
|
class Heli_Transport_04_base_F: Helicopter_Base_H {
|
||||||
class UserActions;
|
class UserActions;
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "\z\ace\addons\main\script_macros.hpp"
|
#include "\z\ace\addons\main\script_macros.hpp"
|
||||||
|
#include "script_macros.hpp"
|
||||||
|
|
||||||
#define DEFAULT_ROPE_LENGTH 34.5
|
#define DEFAULT_ROPE_LENGTH 34.5
|
||||||
|
|
||||||
|
10
addons/fastroping/script_macros.hpp
Normal file
10
addons/fastroping/script_macros.hpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#define EQUIP_FRIES_ATTRIBUTE class EGVAR(fastroping,equipFRIES) { \
|
||||||
|
property = QEGVAR(fastroping,equipFRIES); \
|
||||||
|
control = "Checkbox"; \
|
||||||
|
displayName = ECSTRING(fastroping,Eden_equipFRIES); \
|
||||||
|
tooltip = ECSTRING(fastroping,Eden_equipFRIES_Tooltip); \
|
||||||
|
expression = QUOTE(if (_value) then {[_this] call EFUNC(fastroping,equipFRIES)}); \
|
||||||
|
typeName = "BOOL"; \
|
||||||
|
condition = "objectVehicle"; \
|
||||||
|
defaultValue = false; \
|
||||||
|
}
|
@ -83,7 +83,7 @@
|
|||||||
<Hungarian>Terepi adagok engedélyezése / letiltása</Hungarian>
|
<Hungarian>Terepi adagok engedélyezése / letiltása</Hungarian>
|
||||||
<Italian>Abilita / disabilita le razioni di campo</Italian>
|
<Italian>Abilita / disabilita le razioni di campo</Italian>
|
||||||
<Japanese>フィールド レーションを有効/無効化します</Japanese>
|
<Japanese>フィールド レーションを有効/無効化します</Japanese>
|
||||||
<Korean>전투식량 활성화/비활서오하</Korean>
|
<Korean>전투식량 활성화/비활성화</Korean>
|
||||||
<Polish>Włącz / wyłącz racje polowe</Polish>
|
<Polish>Włącz / wyłącz racje polowe</Polish>
|
||||||
<Portuguese>Ativar / Desativar rações de campo</Portuguese>
|
<Portuguese>Ativar / Desativar rações de campo</Portuguese>
|
||||||
<Russian>Включение/отключение жажды и голода</Russian>
|
<Russian>Включение/отключение жажды и голода</Russian>
|
||||||
@ -100,7 +100,7 @@
|
|||||||
<Hungarian>Víz nélküli idő</Hungarian>
|
<Hungarian>Víz nélküli idő</Hungarian>
|
||||||
<Italian>Tempo senza acqua</Italian>
|
<Italian>Tempo senza acqua</Italian>
|
||||||
<Japanese>水なしの時間</Japanese>
|
<Japanese>水なしの時間</Japanese>
|
||||||
<Korean>물 없이 생존 시간</Korean>
|
<Korean>물 없이 생존 가능 시간</Korean>
|
||||||
<Polish>Czas bez wody</Polish>
|
<Polish>Czas bez wody</Polish>
|
||||||
<Portuguese>Tempo sem água</Portuguese>
|
<Portuguese>Tempo sem água</Portuguese>
|
||||||
<Russian>Время без воды</Russian>
|
<Russian>Время без воды</Russian>
|
||||||
@ -134,7 +134,7 @@
|
|||||||
<Hungarian>Élelmiszer nélkül</Hungarian>
|
<Hungarian>Élelmiszer nélkül</Hungarian>
|
||||||
<Italian>Tempo senza cibo</Italian>
|
<Italian>Tempo senza cibo</Italian>
|
||||||
<Japanese>食べ物なしの時間</Japanese>
|
<Japanese>食べ物なしの時間</Japanese>
|
||||||
<Korean>밥 없이 생존 시간</Korean>
|
<Korean>밥 없이 생존 가능 시간</Korean>
|
||||||
<Polish>Czas bez jedzenia</Polish>
|
<Polish>Czas bez jedzenia</Polish>
|
||||||
<Portuguese>Tempo sem comida</Portuguese>
|
<Portuguese>Tempo sem comida</Portuguese>
|
||||||
<Russian>Время без еды</Russian>
|
<Russian>Время без еды</Russian>
|
||||||
@ -151,7 +151,7 @@
|
|||||||
<Hungarian>Mennyi ideig kell egy egység élni nélkül (óra)</Hungarian>
|
<Hungarian>Mennyi ideig kell egy egység élni nélkül (óra)</Hungarian>
|
||||||
<Italian>Per quanto tempo un'unità dovrebbe essere in grado di andare senza cibo (ore)</Italian>
|
<Italian>Per quanto tempo un'unità dovrebbe essere in grado di andare senza cibo (ore)</Italian>
|
||||||
<Japanese>ユニットが食糧なしでどれくらい時間を過ごすことができるか (一時間単位)</Japanese>
|
<Japanese>ユニットが食糧なしでどれくらい時間を過ごすことができるか (一時間単位)</Japanese>
|
||||||
<Korean>밥을 안먹고 얼마나 생존할 수 있는지를 정합니다 (시간)</Korean>
|
<Korean>밥을 안 먹고 얼마나 생존할 수 있는지 정합니다 (시간)</Korean>
|
||||||
<Polish>Jak długo jednostka powinna przetrwać bez jedzenia (godziny)</Polish>
|
<Polish>Jak długo jednostka powinna przetrwać bez jedzenia (godziny)</Polish>
|
||||||
<Portuguese>Quanto tempo uma unidade pode ir sem alimentos (horas)</Portuguese>
|
<Portuguese>Quanto tempo uma unidade pode ir sem alimentos (horas)</Portuguese>
|
||||||
<Russian>Как долго персонаж может обходиться без пищи (часы)</Russian>
|
<Russian>Как долго персонаж может обходиться без пищи (часы)</Russian>
|
||||||
@ -929,7 +929,7 @@
|
|||||||
<Hungarian>A csirke leves tartalmú MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében</Hungarian>
|
<Hungarian>A csirke leves tartalmú MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében</Hungarian>
|
||||||
<Italian>Un MRE contenente zuppa di pollo. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
|
<Italian>Un MRE contenente zuppa di pollo. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
|
||||||
<Japanese>チキン スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
|
<Japanese>チキン スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
|
||||||
<Korean>치킨 수프가 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
|
<Korean>치킨 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
|
||||||
<Polish>MRE zawierające rosół. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt</Polish>
|
<Polish>MRE zawierające rosół. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt</Polish>
|
||||||
<Portuguese>Um MRE contendo Sopa de Frango. Misture com água e calor para melhor efeito</Portuguese>
|
<Portuguese>Um MRE contendo Sopa de Frango. Misture com água e calor para melhor efeito</Portuguese>
|
||||||
<Russian>Сухой паёк, содержащий сублимированный куриный крем-суп. Перед употреблением растворить в воде и разогреть</Russian>
|
<Russian>Сухой паёк, содержащий сублимированный куриный крем-суп. Перед употреблением растворить в воде и разогреть</Russian>
|
||||||
@ -1031,7 +1031,7 @@
|
|||||||
<Hungarian>Húsgombócokat és tésztát tartalmazó MRE. Hő a legjobb hatás érdekében</Hungarian>
|
<Hungarian>Húsgombócokat és tésztát tartalmazó MRE. Hő a legjobb hatás érdekében</Hungarian>
|
||||||
<Italian>Un MRE contenente polpette e pasta. Calore per il miglior effetto</Italian>
|
<Italian>Un MRE contenente polpette e pasta. Calore per il miglior effetto</Italian>
|
||||||
<Japanese>ミートボールとパスタの MRE。温めるとなお美味しい</Japanese>
|
<Japanese>ミートボールとパスタの MRE。温めるとなお美味しい</Japanese>
|
||||||
<Korean>미트볼과 파스타를 포함한 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
|
<Korean>미트볼과 파스타가 들어 있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
|
||||||
<Polish>MRE zawierające klopsiki i makaron. Podgrzej dla najlepszego efektu</Polish>
|
<Polish>MRE zawierające klopsiki i makaron. Podgrzej dla najlepszego efektu</Polish>
|
||||||
<Portuguese>Um MRE contendo Meatballs e Pasta. Calor para melhor efeito</Portuguese>
|
<Portuguese>Um MRE contendo Meatballs e Pasta. Calor para melhor efeito</Portuguese>
|
||||||
<Russian>Сухой паёк, содержащий макароны с фрикадельками. Перед употреблением рекомендуется разогреть</Russian>
|
<Russian>Сухой паёк, содержащий макароны с фрикадельками. Перед употреблением рекомендуется разогреть</Russian>
|
||||||
@ -1108,7 +1108,7 @@
|
|||||||
<English>Sunflower Seeds</English>
|
<English>Sunflower Seeds</English>
|
||||||
<German>Sonnenblumenkerne</German>
|
<German>Sonnenblumenkerne</German>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Descriptione">
|
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Description">
|
||||||
<English>Roasted And Salted</English>
|
<English>Roasted And Salted</English>
|
||||||
<German>Geröstet und Gesalzen</German>
|
<German>Geröstet und Gesalzen</German>
|
||||||
</Key>
|
</Key>
|
||||||
|
@ -88,18 +88,22 @@
|
|||||||
<Key ID="STR_ACE_Finger_sizeCoef_displayName">
|
<Key ID="STR_ACE_Finger_sizeCoef_displayName">
|
||||||
<English>Visual Marker Size Coefficient</English>
|
<English>Visual Marker Size Coefficient</English>
|
||||||
<German>Visueller Markergrößenkoeffizient</German>
|
<German>Visueller Markergrößenkoeffizient</German>
|
||||||
|
<Korean>보이는 마커 크기 계수</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Finger_sizeCoef_description">
|
<Key ID="STR_ACE_Finger_sizeCoef_description">
|
||||||
<English>Adjusts the size of the visual marker.</English>
|
<English>Adjusts the size of the visual marker.</English>
|
||||||
<German>Passt die Größe der visuellen Markierung an.</German>
|
<German>Passt die Größe der visuellen Markierung an.</German>
|
||||||
|
<Korean>눈에 보이는 마커의 크기를 조정합니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Finger_proximityScaling_displayName">
|
<Key ID="STR_ACE_Finger_proximityScaling_displayName">
|
||||||
<English>Proximity Scaling</English>
|
<English>Proximity Scaling</English>
|
||||||
<German>Näherungsskalierung</German>
|
<German>Näherungsskalierung</German>
|
||||||
|
<Korean>근접 스케일링</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Finger_proximityScaling_description">
|
<Key ID="STR_ACE_Finger_proximityScaling_description">
|
||||||
<English>Scales the size of the visual marker based on the distance between the player observing and the player pointing.</English>
|
<English>Scales the size of the visual marker based on the distance between the player observing and the player pointing.</English>
|
||||||
<German>Skaliert die Größe der visuellen Markierung basierend auf der Entfernung zwischen dem beobachtenden Spieler und dem zeigenden Spieler.</German>
|
<German>Skaliert die Größe der visuellen Markierung basierend auf der Entfernung zwischen dem beobachtenden Spieler und dem zeigenden Spieler.</German>
|
||||||
|
<Korean>관찰하는 플레이어와 가리키는 플레이어 사이의 거리에 따라 보이는 마커의 크기를 조정합니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Finger_indicatorForSelf_name">
|
<Key ID="STR_ACE_Finger_indicatorForSelf_name">
|
||||||
<English>Show pointing indicator to self</English>
|
<English>Show pointing indicator to self</English>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<Russian>Пламегаситель (6,5 мм)</Russian>
|
<Russian>Пламегаситель (6,5 мм)</Russian>
|
||||||
<Spanish>Bocacha (6,5 mm)</Spanish>
|
<Spanish>Bocacha (6,5 mm)</Spanish>
|
||||||
<Japanese>消炎器 (6.5 mm)</Japanese>
|
<Japanese>消炎器 (6.5 mm)</Japanese>
|
||||||
<Korean>소염기 (6.5 mm)</Korean>
|
<Korean>소염기 (6.5mm)</Korean>
|
||||||
<Chinesesimp>消焰器(6.5 mm)</Chinesesimp>
|
<Chinesesimp>消焰器(6.5 mm)</Chinesesimp>
|
||||||
<Chinese>消光器 (6.5 mm)</Chinese>
|
<Chinese>消光器 (6.5 mm)</Chinese>
|
||||||
<Turkish>Flash Suppressor (6.5 mm)</Turkish>
|
<Turkish>Flash Suppressor (6.5 mm)</Turkish>
|
||||||
@ -30,7 +30,7 @@
|
|||||||
<Russian>Пламегаситель (7,62 мм)</Russian>
|
<Russian>Пламегаситель (7,62 мм)</Russian>
|
||||||
<Spanish>Bocacha (7,62 mm)</Spanish>
|
<Spanish>Bocacha (7,62 mm)</Spanish>
|
||||||
<Japanese>消炎器 (7.62 mm)</Japanese>
|
<Japanese>消炎器 (7.62 mm)</Japanese>
|
||||||
<Korean>소염기 (7.62 mm)</Korean>
|
<Korean>소염기 (7.62mm)</Korean>
|
||||||
<Chinesesimp>消焰器(7.62 mm)</Chinesesimp>
|
<Chinesesimp>消焰器(7.62 mm)</Chinesesimp>
|
||||||
<Chinese>消光器 (7.62 毫米)</Chinese>
|
<Chinese>消光器 (7.62 毫米)</Chinese>
|
||||||
<Turkish>Flash Suppressor (7.62 mm)</Turkish>
|
<Turkish>Flash Suppressor (7.62 mm)</Turkish>
|
||||||
@ -47,7 +47,7 @@
|
|||||||
<Russian>Пламегаситель (5,56 мм)</Russian>
|
<Russian>Пламегаситель (5,56 мм)</Russian>
|
||||||
<Spanish>Bocacha (5,56 mm)</Spanish>
|
<Spanish>Bocacha (5,56 mm)</Spanish>
|
||||||
<Japanese>消炎器 (5.56 mm)</Japanese>
|
<Japanese>消炎器 (5.56 mm)</Japanese>
|
||||||
<Korean>소염기 (5.56 mm)</Korean>
|
<Korean>소염기 (5.56mm)</Korean>
|
||||||
<Chinesesimp>消焰器(5.56 mm)</Chinesesimp>
|
<Chinesesimp>消焰器(5.56 mm)</Chinesesimp>
|
||||||
<Chinese>消光器 (5.56 mm)</Chinese>
|
<Chinese>消光器 (5.56 mm)</Chinese>
|
||||||
<Turkish>Flash Suppressor (5.56 mm)</Turkish>
|
<Turkish>Flash Suppressor (5.56 mm)</Turkish>
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
<Russian>Симуляция обломков</Russian>
|
<Russian>Симуляция обломков</Russian>
|
||||||
<Italian>Simulazione Spalling</Italian>
|
<Italian>Simulazione Spalling</Italian>
|
||||||
<Japanese>剥離シミュレーション</Japanese>
|
<Japanese>剥離シミュレーション</Japanese>
|
||||||
<Korean>조각 시뮬레이션</Korean>
|
<Korean>탄환파편 시뮬레이션</Korean>
|
||||||
<Chinesesimp>模拟剥落</Chinesesimp>
|
<Chinesesimp>模拟剥落</Chinesesimp>
|
||||||
<Chinese>模擬剝落</Chinese>
|
<Chinese>模擬剝落</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -77,7 +77,7 @@
|
|||||||
<Russian>Включить симуляцию обломков ACE</Russian>
|
<Russian>Включить симуляцию обломков ACE</Russian>
|
||||||
<Italian>Abilita la Simulazione Spalling di ACE</Italian>
|
<Italian>Abilita la Simulazione Spalling di ACE</Italian>
|
||||||
<Japanese>ACE 剥離シミュレーションを有効化</Japanese>
|
<Japanese>ACE 剥離シミュレーションを有効化</Japanese>
|
||||||
<Korean>ACE 조각 시뮬레이션을 적용합니다.</Korean>
|
<Korean>ACE 탄환파편 시뮬레이션을 적용합니다.</Korean>
|
||||||
<Chinesesimp>启用 ACE 模拟剥落</Chinesesimp>
|
<Chinesesimp>启用 ACE 模拟剥落</Chinesesimp>
|
||||||
<Chinese>啟用ACE模擬剝落</Chinese>
|
<Chinese>啟用ACE模擬剝落</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -139,7 +139,7 @@
|
|||||||
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов)</Russian>
|
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (> 200 одновременно летящих снарядов)</Russian>
|
||||||
<Italian>Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se più proiettili sono sparati, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (>200 proiettili in aria contemporaneamente)</Italian>
|
<Italian>Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se più proiettili sono sparati, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (>200 proiettili in aria contemporaneamente)</Italian>
|
||||||
<Japanese>時間が許すかぎり、破片と剥離システムの最大数を設定できます。設定数以上の弾丸が発射された場合、それは対象になりません。もし多い弾数による FPS の低下を望まない場合は、低い数へ設定にします。( &gt;一度に空中内で200発)</Japanese>
|
<Japanese>時間が許すかぎり、破片と剥離システムの最大数を設定できます。設定数以上の弾丸が発射された場合、それは対象になりません。もし多い弾数による FPS の低下を望まない場合は、低い数へ設定にします。( &gt;一度に空中内で200発)</Japanese>
|
||||||
<Korean>이 설정은 조각 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) </Korean>
|
<Korean>이 설정은 탄환파편 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올 경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하)</Korean>
|
||||||
<Chinesesimp>设定在指定时间内,系统最大可追踪的破片粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( >一次200颗粒子)</Chinesesimp>
|
<Chinesesimp>设定在指定时间内,系统最大可追踪的破片粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( >一次200颗粒子)</Chinesesimp>
|
||||||
<Chinese>設定在指定時間內,系統最大可追蹤的碎片/剝落粒子數量。如有更多的碎片在這之後產生,這些粒子將不會被追蹤。如果你想要維持好的幀數,此設定勿調的過高。( >一次200顆粒子)</Chinese>
|
<Chinese>設定在指定時間內,系統最大可追蹤的碎片/剝落粒子數量。如有更多的碎片在這之後產生,這些粒子將不會被追蹤。如果你想要維持好的幀數,此設定勿調的過高。( >一次200顆粒子)</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -187,7 +187,7 @@
|
|||||||
<Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian>
|
<Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian>
|
||||||
<Italian>(Solo SP) Debug Tracciamento Frag/Spall</Italian>
|
<Italian>(Solo SP) Debug Tracciamento Frag/Spall</Italian>
|
||||||
<Japanese>(SP のみ) 破片/剥離のデバッグ用表示</Japanese>
|
<Japanese>(SP のみ) 破片/剥離のデバッグ用表示</Japanese>
|
||||||
<Korean>(싱글플레이 전용) 조각/파편 디버그 추적화</Korean>
|
<Korean>(싱글플레이 전용) 탄환파편/파편 디버그 추적화</Korean>
|
||||||
<Chinesesimp>(仅单人)追踪显示破片粒子</Chinesesimp>
|
<Chinesesimp>(仅单人)追踪显示破片粒子</Chinesesimp>
|
||||||
<Chinese>(僅在單人模式) 碎片/剝落除錯追蹤</Chinese>
|
<Chinese>(僅在單人模式) 碎片/剝落除錯追蹤</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -205,7 +205,7 @@
|
|||||||
<Japanese>(SP のみ) ミッションとエディタの再起動が必要です。有効化すると、シングルプレイでのみ破片と剥離の弾頭が見えるようになります。</Japanese>
|
<Japanese>(SP のみ) ミッションとエディタの再起動が必要です。有効化すると、シングルプレイでのみ破片と剥離の弾頭が見えるようになります。</Japanese>
|
||||||
<Chinesesimp>(仅单人)激活后,只有在单人模式下才可观察到破片粒子的移动轨迹。</Chinesesimp>
|
<Chinesesimp>(仅单人)激活后,只有在单人模式下才可观察到破片粒子的移动轨迹。</Chinesesimp>
|
||||||
<Chinese>(僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡</Chinese>
|
<Chinese>(僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡</Chinese>
|
||||||
<Korean>(SP 전용) 임무 / 편집자가 다시 시작해야합니다. SP 게임 모드에서만 조각화 및 스 폴링 라운드의 시각적 추적을 가능하게합니다.</Korean>
|
<Korean>(SP 전용) 임무 / 편집자가 다시 시작해야합니다. SP 게임 모드에서만 파편화 및 탄환파편의 시각적 추적을 가능하게 합니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -168,7 +168,7 @@
|
|||||||
<Turkish>CTS 7290 9- Flaş Bombası</Turkish>
|
<Turkish>CTS 7290 9- Flaş Bombası</Turkish>
|
||||||
<Russian>CTS 7290-9 Светошумовая граната</Russian>
|
<Russian>CTS 7290-9 Светошумовая граната</Russian>
|
||||||
<Spanish>Granada aturdidora CTS 7290 9-explosiones</Spanish>
|
<Spanish>Granada aturdidora CTS 7290 9-explosiones</Spanish>
|
||||||
<Korean>CTS 7290 9-뱅 섬광 수류탄</Korean>
|
<Korean>CTS 7290 9-bang 섬광 수류탄</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Grenades_CTS9_NameShort">
|
<Key ID="STR_ACE_Grenades_CTS9_NameShort">
|
||||||
<English>CTS 7290-9</English>
|
<English>CTS 7290-9</English>
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
<English>Log transfer statistics and Headless Client (dis)connections to RPT. (Default: No)</English>
|
<English>Log transfer statistics and Headless Client (dis)connections to RPT. (Default: No)</English>
|
||||||
<German>Zeichnet Transferstatistiken, Verbindungen und Verbindungsabbrüche in einer RPT-Datei auf. (Standard: Nein)</German>
|
<German>Zeichnet Transferstatistiken, Verbindungen und Verbindungsabbrüche in einer RPT-Datei auf. (Standard: Nein)</German>
|
||||||
<Polish>Zapisz statystyki transferu i status połączenia Headless Clienta do RPT. (Domyślnie: Tak)</Polish>
|
<Polish>Zapisz statystyki transferu i status połączenia Headless Clienta do RPT. (Domyślnie: Tak)</Polish>
|
||||||
<Korean>전송 통계 및 헤드리스 클라이언트 연결(해제) 로그 RPT. (기본값: No)</Korean>
|
<Korean>전송 통계 및 헤드리스 클라이언트 연결(해제)를 RPT파일에 로그함. (기본값: No)</Korean>
|
||||||
<Japanese>統計とヘッドレス クライアントの接続有無を PRT へ記録します。(標準: 無効)</Japanese>
|
<Japanese>統計とヘッドレス クライアントの接続有無を PRT へ記録します。(標準: 無効)</Japanese>
|
||||||
<French>Archive les statistiques de transfert et de (dé)connections du Headless Client dans le RPT. (Défaut: Non)</French>
|
<French>Archive les statistiques de transfert et de (dé)connections du Headless Client dans le RPT. (Défaut: Non)</French>
|
||||||
<Chinesesimp>记录 Headless 客户端间的转换数量与连线/断线等记录到 RPT 报告档中。(预设:关闭)</Chinesesimp>
|
<Chinesesimp>记录 Headless 客户端间的转换数量与连线/断线等记录到 RPT 报告档中。(预设:关闭)</Chinesesimp>
|
||||||
|
@ -331,7 +331,7 @@
|
|||||||
<French>Volume audio perçu par les joueurs portant des bouchons anti bruit.</French>
|
<French>Volume audio perçu par les joueurs portant des bouchons anti bruit.</French>
|
||||||
<Czech>Hlasitost při používání špuntů do uší.</Czech>
|
<Czech>Hlasitost při používání špuntů do uší.</Czech>
|
||||||
<Spanish>Volumen cuando se utilizan protectores auditivos.</Spanish>
|
<Spanish>Volumen cuando se utilizan protectores auditivos.</Spanish>
|
||||||
<Korean>귀마개 사용시 볼륨입니다.</Korean>
|
<Korean>귀마개 사용 시의 볼륨입니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Hearing_unconsciousnessVolume_DisplayName">
|
<Key ID="STR_ACE_Hearing_unconsciousnessVolume_DisplayName">
|
||||||
<English>Unconscious Volume</English>
|
<English>Unconscious Volume</English>
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
<Polish>Rakieta naprowadzana laserowo z głowicą odłamkową</Polish>
|
<Polish>Rakieta naprowadzana laserowo z głowicą odłamkową</Polish>
|
||||||
<German>Halbaktive Laser-Zielsuchrakete mit metallverstärktem Antipersonen-Gefechtskopf</German>
|
<German>Halbaktive Laser-Zielsuchrakete mit metallverstärktem Antipersonen-Gefechtskopf</German>
|
||||||
<Chinesesimp>金属增强人员杀伤弹头半主动激光制导导弹</Chinesesimp>
|
<Chinesesimp>金属增强人员杀伤弹头半主动激光制导导弹</Chinesesimp>
|
||||||
<Korean>반능동 레이저 유도 미사일로 대인 금속 강화 탄두가 탑재되었습니다.</Korean>
|
<Korean>반능동 레이저 유도 미사일로 대인 금속 강화 탄두가 탑재하고 있습니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<Chinese>觸發倒下前最低需受到多少傷害</Chinese>
|
<Chinese>觸發倒下前最低需受到多少傷害</Chinese>
|
||||||
<Chinesesimp>触发倒下前最低需受到多少伤害</Chinesesimp>
|
<Chinesesimp>触发倒下前最低需受到多少伤害</Chinesesimp>
|
||||||
<Japanese>崩れ落ちるまでの最低損傷値</Japanese>
|
<Japanese>崩れ落ちるまでの最低損傷値</Japanese>
|
||||||
<Korean>방아쇠를 당기는 최소한의 피해</Korean>
|
<Korean>넘어질 때 발생하는 최소 피해량</Korean>
|
||||||
<German>Mindestschaden, um Sturz auszulösen</German>
|
<German>Mindestschaden, um Sturz auszulösen</German>
|
||||||
<Polish>Minimalne obrażenie, żeby aktywować spadanie</Polish>
|
<Polish>Minimalne obrażenie, żeby aktywować spadanie</Polish>
|
||||||
<Russian>Минимальный урон для активации падения</Russian>
|
<Russian>Минимальный урон для активации падения</Russian>
|
||||||
|
@ -302,7 +302,7 @@
|
|||||||
<Hungarian>Hozzáférést biztosít a szöveg árnyékának kezeléséhez. A körvonal nem veszi figyelembe az egyedi árnyékszíneket.</Hungarian>
|
<Hungarian>Hozzáférést biztosít a szöveg árnyékának kezeléséhez. A körvonal nem veszi figyelembe az egyedi árnyékszíneket.</Hungarian>
|
||||||
<Italian>Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.</Italian>
|
<Italian>Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.</Italian>
|
||||||
<Japanese>文字への影を設定します。縁取りは設定された影の色を無視します。</Japanese>
|
<Japanese>文字への影を設定します。縁取りは設定された影の色を無視します。</Japanese>
|
||||||
<Korean>문자의 그림자를 조절하는것을 가능케합니다. 외각선은 임의의 그림자색을 무시합니다.</Korean>
|
<Korean>문자의 그림자를 조절하는 것을 가능케 합니다. 외곽선은 임의의 그림자색을 무시합니다.</Korean>
|
||||||
<Chinesesimp>允许控制文字阴影。轮廓部分则会忽略自定义的阴影颜色。</Chinesesimp>
|
<Chinesesimp>允许控制文字阴影。轮廓部分则会忽略自定义的阴影颜色。</Chinesesimp>
|
||||||
<Chinese>允許控制文字陰影。輪廓部分則會忽略自定義的陰影顏色</Chinese>
|
<Chinese>允許控制文字陰影。輪廓部分則會忽略自定義的陰影顏色</Chinese>
|
||||||
<Turkish>Metin gölgesinin kontrolüne izin verir. Dış çizgi, özel gölge renklerini yok sayar.</Turkish>
|
<Turkish>Metin gölgesinin kontrolüne izin verir. Dış çizgi, özel gölge renklerini yok sayar.</Turkish>
|
||||||
@ -319,7 +319,7 @@
|
|||||||
<Hungarian>Körvonal</Hungarian>
|
<Hungarian>Körvonal</Hungarian>
|
||||||
<Italian>Contorno</Italian>
|
<Italian>Contorno</Italian>
|
||||||
<Japanese>縁取り</Japanese>
|
<Japanese>縁取り</Japanese>
|
||||||
<Korean>외각선</Korean>
|
<Korean>외곽선</Korean>
|
||||||
<Chinesesimp>只显示轮廓</Chinesesimp>
|
<Chinesesimp>只显示轮廓</Chinesesimp>
|
||||||
<Chinese>只顯示輪廓</Chinese>
|
<Chinese>只顯示輪廓</Chinese>
|
||||||
<Turkish>Dış Çizgi</Turkish>
|
<Turkish>Dış Çizgi</Turkish>
|
||||||
|
@ -47,7 +47,7 @@ if ((_house animationPhase (_animations select 0) <= 0) && {_house getVariable [
|
|||||||
|
|
||||||
// Add handle on carrier
|
// Add handle on carrier
|
||||||
if (typeOf _house == "Land_Carrier_01_island_01_F") then {
|
if (typeOf _house == "Land_Carrier_01_island_01_F") then {
|
||||||
private _handle = format ["door_handle_%1_rot_1", (_animations select 0) select [5, 1]];
|
private _handle = format ["door_handle_%1_rotate_1", (_animations select 0) select [5, 1]];
|
||||||
TRACE_1("carrier handle",_handle);
|
TRACE_1("carrier handle",_handle);
|
||||||
_animations pushBack _handle;
|
_animations pushBack _handle;
|
||||||
};
|
};
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
<Italian>Braccio sinistro</Italian>
|
<Italian>Braccio sinistro</Italian>
|
||||||
<Portuguese>Braço Esquerdo</Portuguese>
|
<Portuguese>Braço Esquerdo</Portuguese>
|
||||||
<Japanese>左腕</Japanese>
|
<Japanese>左腕</Japanese>
|
||||||
<Korean>왼쪽 팔</Korean>
|
<Korean>왼팔</Korean>
|
||||||
<Chinesesimp>左手</Chinesesimp>
|
<Chinesesimp>左手</Chinesesimp>
|
||||||
<Chinese>左手</Chinese>
|
<Chinese>左手</Chinese>
|
||||||
<Turkish>Sol Kol</Turkish>
|
<Turkish>Sol Kol</Turkish>
|
||||||
@ -97,7 +97,7 @@
|
|||||||
<Italian>Braccio destro</Italian>
|
<Italian>Braccio destro</Italian>
|
||||||
<Portuguese>Braço Direito</Portuguese>
|
<Portuguese>Braço Direito</Portuguese>
|
||||||
<Japanese>右腕</Japanese>
|
<Japanese>右腕</Japanese>
|
||||||
<Korean>오른쪽 팔</Korean>
|
<Korean>오른팔</Korean>
|
||||||
<Chinesesimp>右手</Chinesesimp>
|
<Chinesesimp>右手</Chinesesimp>
|
||||||
<Chinese>右手</Chinese>
|
<Chinese>右手</Chinese>
|
||||||
<Turkish>Sağ Kol</Turkish>
|
<Turkish>Sağ Kol</Turkish>
|
||||||
@ -114,7 +114,7 @@
|
|||||||
<Italian>Gamba sinistra</Italian>
|
<Italian>Gamba sinistra</Italian>
|
||||||
<Portuguese>Perna Esquerda</Portuguese>
|
<Portuguese>Perna Esquerda</Portuguese>
|
||||||
<Japanese>左足</Japanese>
|
<Japanese>左足</Japanese>
|
||||||
<Korean>왼쪽 다리</Korean>
|
<Korean>왼다리</Korean>
|
||||||
<Chinesesimp>左脚</Chinesesimp>
|
<Chinesesimp>左脚</Chinesesimp>
|
||||||
<Chinese>左腳</Chinese>
|
<Chinese>左腳</Chinese>
|
||||||
<Turkish>Sol Bacak</Turkish>
|
<Turkish>Sol Bacak</Turkish>
|
||||||
@ -131,7 +131,7 @@
|
|||||||
<Italian>Gamba destra</Italian>
|
<Italian>Gamba destra</Italian>
|
||||||
<Portuguese>Perna Direita</Portuguese>
|
<Portuguese>Perna Direita</Portuguese>
|
||||||
<Japanese>右足</Japanese>
|
<Japanese>右足</Japanese>
|
||||||
<Korean>오른쪽 다리</Korean>
|
<Korean>오른다리</Korean>
|
||||||
<Chinesesimp>右脚</Chinesesimp>
|
<Chinesesimp>右脚</Chinesesimp>
|
||||||
<Chinese>右腳</Chinese>
|
<Chinese>右腳</Chinese>
|
||||||
<Turkish>Sağ Bacak</Turkish>
|
<Turkish>Sağ Bacak</Turkish>
|
||||||
@ -687,7 +687,7 @@
|
|||||||
<French>Assigner à bleu</French>
|
<French>Assigner à bleu</French>
|
||||||
<Italian>Assegna al team blu</Italian>
|
<Italian>Assegna al team blu</Italian>
|
||||||
<Japanese>ブルーにする</Japanese>
|
<Japanese>ブルーにする</Japanese>
|
||||||
<Korean>파랑이 등록</Korean>
|
<Korean>파랑에 등록</Korean>
|
||||||
<Chinesesimp>指派为蓝组</Chinesesimp>
|
<Chinesesimp>指派为蓝组</Chinesesimp>
|
||||||
<Chinese>指派為藍組</Chinese>
|
<Chinese>指派為藍組</Chinese>
|
||||||
<Turkish>Maviye Ata</Turkish>
|
<Turkish>Maviye Ata</Turkish>
|
||||||
@ -1070,7 +1070,7 @@
|
|||||||
<Italian>I giocatori dovrebbero ricevere delle valutazioni negative ? Quando è abilitato i giocatori ricevono esclusivamente valutazioni positive che prevengono il fuoco delle AI alleate quando distruggono equipaggiamenti o uccidono membri della squadra.</Italian>
|
<Italian>I giocatori dovrebbero ricevere delle valutazioni negative ? Quando è abilitato i giocatori ricevono esclusivamente valutazioni positive che prevengono il fuoco delle AI alleate quando distruggono equipaggiamenti o uccidono membri della squadra.</Italian>
|
||||||
<Chinese>玩家是否會收到負面評價? 當本功能開啟時玩家只會接收到正面評價,所以當玩家做出擊殺友軍AI、毀壞友軍裝備或殺害小隊夥伴都不會收到負面評價</Chinese>
|
<Chinese>玩家是否會收到負面評價? 當本功能開啟時玩家只會接收到正面評價,所以當玩家做出擊殺友軍AI、毀壞友軍裝備或殺害小隊夥伴都不會收到負面評價</Chinese>
|
||||||
<Chinesesimp>玩家是否会收到负面评价? 当本功能开启时玩家只会接收到正面评价,所以当玩家做出击杀友军 AI、毁坏友军装备或杀害小队伙伴都不会收到负面评价。</Chinesesimp>
|
<Chinesesimp>玩家是否会收到负面评价? 当本功能开启时玩家只会接收到正面评价,所以当玩家做出击杀友军 AI、毁坏友军装备或杀害小队伙伴都不会收到负面评价。</Chinesesimp>
|
||||||
<Korean>플레이어의 부정행위 가중치를 계산합니까? 활성화된 플레이어는 높은 레이팅을 가질때, 아군의 장비나 병력을 사격해도 아군 AI의 사격을 받지 않습니다.</Korean>
|
<Korean>플레이어의 부정행위 가중치를 계산합니까? 활성화된 플레이어는 낮은 부정행위 가중치를 가질 때, 아군의 장비나 병력을 사격해도 아군 AI의 사격을 받지 않습니다.</Korean>
|
||||||
<Polish>Czy powinni gracze otrzymywać negatywną ocenę? Kiedy aktywowani gracze otrzymuję wyłącznie pozytywną ocenę, która zapobiega ognia przyjaznego SI podczas niszczenia przyjaznego wyposażenia lub zabijaniu członków drużyny.</Polish>
|
<Polish>Czy powinni gracze otrzymywać negatywną ocenę? Kiedy aktywowani gracze otrzymuję wyłącznie pozytywną ocenę, która zapobiega ognia przyjaznego SI podczas niszczenia przyjaznego wyposażenia lub zabijaniu członków drużyny.</Polish>
|
||||||
<Russian>Должны ли игроки получать отрицательный рейтинг? Когда включено, игроки получают только положительный рейтинг, что предотвращает дружественный огонь от ИИ при уничтожении дружественного оборудования или убийстве членов команды.</Russian>
|
<Russian>Должны ли игроки получать отрицательный рейтинг? Когда включено, игроки получают только положительный рейтинг, что предотвращает дружественный огонь от ИИ при уничтожении дружественного оборудования или убийстве членов команды.</Russian>
|
||||||
<Portuguese>Jogadores devem receber uma avaliação negativa? Quando ativado, os jogadores estão recebendo avaliações positivas, prevenindo que IA amigável atire quando destruir algum equipamento aliado ou matar membros de equipe.</Portuguese>
|
<Portuguese>Jogadores devem receber uma avaliação negativa? Quando ativado, os jogadores estão recebendo avaliações positivas, prevenindo que IA amigável atire quando destruir algum equipamento aliado ou matar membros de equipe.</Portuguese>
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<Italian>Normalmente il menù inventario è scalato in base alle dimensioni dell'interfaccia. Questa opzione permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo.</Italian>
|
<Italian>Normalmente il menù inventario è scalato in base alle dimensioni dell'interfaccia. Questa opzione permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo.</Italian>
|
||||||
<Portuguese>Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas.</Portuguese>
|
<Portuguese>Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas.</Portuguese>
|
||||||
<Japanese>通常、インベントリは UI の大きさにより調整して表示されます。これはインベントリ UI を大きくできますが、文字は大きくできません。</Japanese>
|
<Japanese>通常、インベントリは UI の大きさにより調整して表示されます。これはインベントリ UI を大きくできますが、文字は大きくできません。</Japanese>
|
||||||
<Korean>보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케하면서 글씨는 그대로 냅두게 해줍니다.</Korean>
|
<Korean>보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케 하면서 글씨는 그대로 놔두게 해줍니다.</Korean>
|
||||||
<Chinesesimp>一般来说,物品清单尺寸是由使用者界面来决定的。此选项能让你的物品显示清单更大但不会增加字体大小,此举可增加更多能被显示的描述行数!</Chinesesimp>
|
<Chinesesimp>一般来说,物品清单尺寸是由使用者界面来决定的。此选项能让你的物品显示清单更大但不会增加字体大小,此举可增加更多能被显示的描述行数!</Chinesesimp>
|
||||||
<Chinese>一般來說,物品清單尺寸是由使用者介面來決定的。此選項能讓你的物品顯示清單更大但不會增加字體大小,此舉可增加更多能被顯示的描述行數!</Chinese>
|
<Chinese>一般來說,物品清單尺寸是由使用者介面來決定的。此選項能讓你的物品顯示清單更大但不會增加字體大小,此舉可增加更多能被顯示的描述行數!</Chinese>
|
||||||
<Turkish>Normalde envanter görüntüleme, kullanıcı arayüzü boyutuna göre ölçeklenir. Bu, Envanter kullanıcı arayüzü boyutunu büyütmeye izin verir, ancak daha fazla satır görüntülenmesine izin vermek için yazı tipi boyutunu büyütmez.</Turkish>
|
<Turkish>Normalde envanter görüntüleme, kullanıcı arayüzü boyutuna göre ölçeklenir. Bu, Envanter kullanıcı arayüzü boyutunu büyütmeye izin verir, ancak daha fazla satır görüntülenmesine izin vermek için yazı tipi boyutunu büyütmez.</Turkish>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
PREP(addLaserTarget);
|
PREP(addLaserTarget);
|
||||||
|
PREP(addMapHandler);
|
||||||
PREP(dev_drawVisibleLaserTargets);
|
PREP(dev_drawVisibleLaserTargets);
|
||||||
PREP(findLaserSource);
|
PREP(findLaserSource);
|
||||||
PREP(handleLaserTargetCreation);
|
PREP(handleLaserTargetCreation);
|
||||||
|
@ -6,6 +6,13 @@ if (hasInterface) then {
|
|||||||
GVAR(pfID) = -1;
|
GVAR(pfID) = -1;
|
||||||
|
|
||||||
["CBA_settingsInitialized", {
|
["CBA_settingsInitialized", {
|
||||||
|
// Handle Map Drawing
|
||||||
|
GVAR(mapLaserSource) = objNull;
|
||||||
|
["ACE_controlledUAV", LINKFUNC(addMapHandler)] call CBA_fnc_addEventHandler;
|
||||||
|
["turret", LINKFUNC(addMapHandler), false] call CBA_fnc_addPlayerEventHandler;
|
||||||
|
["unit", LINKFUNC(addMapHandler), true] call CBA_fnc_addPlayerEventHandler;
|
||||||
|
|
||||||
|
// Laser code display
|
||||||
["turret", LINKFUNC(showVehicleHud), false] call CBA_fnc_addPlayerEventHandler;
|
["turret", LINKFUNC(showVehicleHud), false] call CBA_fnc_addPlayerEventHandler;
|
||||||
["vehicle", LINKFUNC(showVehicleHud), true] call CBA_fnc_addPlayerEventHandler; // only one of these needs the retro flag
|
["vehicle", LINKFUNC(showVehicleHud), true] call CBA_fnc_addPlayerEventHandler; // only one of these needs the retro flag
|
||||||
|
|
||||||
|
70
addons/laser/functions/fnc_addMapHandler.sqf
Normal file
70
addons/laser/functions/fnc_addMapHandler.sqf
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Add laser drawing to map
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_laser_fnc_addMapHandler
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
TRACE_3("addMapHandler",ace_player,typeOf vehicle ace_player,ACE_controlledUAV);
|
||||||
|
|
||||||
|
GVAR(mapLaserSource) = call {
|
||||||
|
if (GVAR(showLaserOnMap) == 0) exitWith {
|
||||||
|
TRACE_1("setting - disabled",GVAR(showLaserOnMap));
|
||||||
|
objNull
|
||||||
|
};
|
||||||
|
if (alive (ACE_controlledUAV # 0)) exitWith {
|
||||||
|
TRACE_1("using UAV",objNull);
|
||||||
|
ACE_controlledUAV # 0;
|
||||||
|
};
|
||||||
|
if (GVAR(showLaserOnMap) == 1) exitWith {
|
||||||
|
TRACE_1("setting - no UAV",GVAR(showLaserOnMap));
|
||||||
|
objNull
|
||||||
|
};
|
||||||
|
private _player = ace_player;
|
||||||
|
private _vehicle = vehicle _player;
|
||||||
|
if ((_player != _vehicle) && {_player in [gunner _vehicle, commander _vehicle]}) exitWith {
|
||||||
|
TRACE_1("using player's vehicle",_vehicle);
|
||||||
|
_vehicle
|
||||||
|
};
|
||||||
|
if (GVAR(showLaserOnMap) == 2) exitWith {
|
||||||
|
TRACE_1("setting - no UAV or vehicle",GVAR(showLaserOnMap));
|
||||||
|
objNull
|
||||||
|
};
|
||||||
|
TRACE_1("using player",_player);
|
||||||
|
_player
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!alive GVAR(mapLaserSource)) exitWith {};
|
||||||
|
|
||||||
|
[{!isNull findDisplay 12}, // for some reason the display is null for the frame when starting to control drone
|
||||||
|
{
|
||||||
|
private _map = ((findDisplay 12) displayCtrl 51);
|
||||||
|
private _ehID = _map getVariable [QGVAR(ehID), -1];
|
||||||
|
if (_ehID > -1) exitWith {};
|
||||||
|
_ehID = _map ctrlAddEventHandler ["Draw", {
|
||||||
|
if (!alive GVAR(mapLaserSource)) exitWith {};
|
||||||
|
private _laserTarget = laserTarget GVAR(mapLaserSource);
|
||||||
|
if (!alive _laserTarget) exitWith {};
|
||||||
|
|
||||||
|
params ["_map"];
|
||||||
|
_map drawLine [getPos _laserTarget, getPos GVAR(mapLaserSource), [1,0,0,0.333]];
|
||||||
|
_map drawIcon [
|
||||||
|
"\A3\ui_f\data\igui\rscingameui\rscoptics\laser_designator_iconLaserOn.paa",
|
||||||
|
[1,0,1,1],
|
||||||
|
(getPos _laserTarget),
|
||||||
|
16, 16,
|
||||||
|
((getDir _laserTarget) + 90)
|
||||||
|
];
|
||||||
|
}];
|
||||||
|
TRACE_2("added map drawEH",_map,_ehID);
|
||||||
|
_map setVariable [QGVAR(ehID), _ehID];
|
||||||
|
}, []] call CBA_fnc_waitUntilAndExecute;
|
@ -1,4 +1,4 @@
|
|||||||
private _category = [LELSTRING(common,categoryUncategorized), localize "str_a3_itemtype_laser"];
|
private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(laser)];
|
||||||
|
|
||||||
[
|
[
|
||||||
QGVAR(dispersionCount), "SLIDER",
|
QGVAR(dispersionCount), "SLIDER",
|
||||||
@ -7,3 +7,15 @@ private _category = [LELSTRING(common,categoryUncategorized), localize "str_a3_i
|
|||||||
[0, 5, 2, -1],
|
[0, 5, 2, -1],
|
||||||
1
|
1
|
||||||
] call CBA_fnc_addSetting;
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(showLaserOnMap), "LIST",
|
||||||
|
[LSTRING(showLaserOnMap), LSTRING(showLaserOnMap_tooltip)],
|
||||||
|
_category,
|
||||||
|
[
|
||||||
|
[0, 1, 2, 3],
|
||||||
|
[LELSTRING(Common,Disabled), "STR_A3_CfgEditorSubcategories_EdSubcat_Drones0", "str_dn_vehicles", LELSTRING(common,Always)],
|
||||||
|
1
|
||||||
|
],
|
||||||
|
true
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
@ -1,6 +1,23 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="Laser">
|
<Package name="Laser">
|
||||||
|
<Key ID="STR_ACE_Laser_laser">
|
||||||
|
<English>Laser</English>
|
||||||
|
<German>Laser</German>
|
||||||
|
<Polish>Laser</Polish>
|
||||||
|
<French>Laser</French>
|
||||||
|
<Russian>Лазер</Russian>
|
||||||
|
<Portuguese>Laser</Portuguese>
|
||||||
|
<Hungarian>Lézer</Hungarian>
|
||||||
|
<Spanish>Láser</Spanish>
|
||||||
|
<Czech>Laser</Czech>
|
||||||
|
<Italian>Laser</Italian>
|
||||||
|
<Japanese>レーザー</Japanese>
|
||||||
|
<Korean>레이저</Korean>
|
||||||
|
<Chinesesimp>激光</Chinesesimp>
|
||||||
|
<Chinese>雷射</Chinese>
|
||||||
|
<Turkish>Lazer</Turkish>
|
||||||
|
</Key>
|
||||||
<Key ID="STR_ACE_Laser_dispersionCount_displayName">
|
<Key ID="STR_ACE_Laser_dispersionCount_displayName">
|
||||||
<English>Laser Dispersion Simulation Count</English>
|
<English>Laser Dispersion Simulation Count</English>
|
||||||
<Japanese>レーザーの分散シミュレート数</Japanese>
|
<Japanese>レーザーの分散シミュレート数</Japanese>
|
||||||
@ -68,5 +85,11 @@
|
|||||||
<Chinese>雷射 - 循環切換雷射碼 下</Chinese>
|
<Chinese>雷射 - 循環切換雷射碼 下</Chinese>
|
||||||
<Turkish>Lazer - Çevrim Kodu aşağı</Turkish>
|
<Turkish>Lazer - Çevrim Kodu aşağı</Turkish>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Laser_showLaserOnMap">
|
||||||
|
<English>Draw Laser on Map</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Laser_showLaserOnMap_tooltip">
|
||||||
|
<English>Active laser designator's position will be drawn on the map</English>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -97,7 +97,7 @@
|
|||||||
<Hungarian>Lézer</Hungarian>
|
<Hungarian>Lézer</Hungarian>
|
||||||
<Czech>Laser</Czech>
|
<Czech>Laser</Czech>
|
||||||
<Portuguese>Laser</Portuguese>
|
<Portuguese>Laser</Portuguese>
|
||||||
<Japanese>レーザ</Japanese>
|
<Japanese>レーザー</Japanese>
|
||||||
<Korean>레이저</Korean>
|
<Korean>레이저</Korean>
|
||||||
<Chinesesimp>激光</Chinesesimp>
|
<Chinesesimp>激光</Chinesesimp>
|
||||||
<Chinese>雷射</Chinese>
|
<Chinese>雷射</Chinese>
|
||||||
@ -132,7 +132,7 @@
|
|||||||
<Czech>Přepnout Laser / Infračervený Laser</Czech>
|
<Czech>Přepnout Laser / Infračervený Laser</Czech>
|
||||||
<Portuguese>Alternar entre Laser / Laser IV</Portuguese>
|
<Portuguese>Alternar entre Laser / Laser IV</Portuguese>
|
||||||
<Japanese>レーザ/赤外線レーザを切り替える</Japanese>
|
<Japanese>レーザ/赤外線レーザを切り替える</Japanese>
|
||||||
<Korean>가시 / 적외선 레이저 전환</Korean>
|
<Korean>가시광/적외선 레이저 전환</Korean>
|
||||||
<Chinesesimp>切换激光/红外线激光</Chinesesimp>
|
<Chinesesimp>切换激光/红外线激光</Chinesesimp>
|
||||||
<Chinese>切換雷射/紅外線雷射</Chinese>
|
<Chinese>切換雷射/紅外線雷射</Chinese>
|
||||||
<Turkish>Değiştir Lazer/IR Lazer</Turkish>
|
<Turkish>Değiştir Lazer/IR Lazer</Turkish>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<German>Ein verdrehtes Geflecht aus Fasern. Wird normalerweise zum Abseilen oder Abschleppen verwendet.</German>
|
<German>Ein verdrehtes Geflecht aus Fasern. Wird normalerweise zum Abseilen oder Abschleppen verwendet.</German>
|
||||||
<Polish>Lina skręcona z włókien. Zwykle używana do zjazdów lub holowania.</Polish>
|
<Polish>Lina skręcona z włókien. Zwykle używana do zjazdów lub holowania.</Polish>
|
||||||
<Chinesesimp>编织绳。通常用于索降和牵引拖曳。</Chinesesimp>
|
<Chinesesimp>编织绳。通常用于索降和牵引拖曳。</Chinesesimp>
|
||||||
<Korean>꼬아진 섬유질입니다. 주로 레펠이나 견인시 사용됩니다.</Korean>
|
<Korean>꼬아진 섬유입니다. 주로 레펠이나 견인에 사용됩니다.</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Logistics_Rope_Rope_3_Display">
|
<Key ID="STR_ACE_Logistics_Rope_Rope_3_Display">
|
||||||
<English>Rope 3.2 meters</English>
|
<English>Rope 3.2 meters</English>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<Chinese>每發所需時間</Chinese>
|
<Chinese>每發所需時間</Chinese>
|
||||||
<Chinesesimp>每发所需时间</Chinesesimp>
|
<Chinesesimp>每发所需时间</Chinesesimp>
|
||||||
<Japanese>弾頭毎の所有時間</Japanese>
|
<Japanese>弾頭毎の所有時間</Japanese>
|
||||||
<Korean>탄당 시간</Korean>
|
<Korean>탄알 당 시간</Korean>
|
||||||
<Polish>Czas na nabój</Polish>
|
<Polish>Czas na nabój</Polish>
|
||||||
<Russian>Время на патрон</Russian>
|
<Russian>Время на патрон</Russian>
|
||||||
<Portuguese>Tempo por projétil</Portuguese>
|
<Portuguese>Tempo por projétil</Portuguese>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
<Chinese>每彈鍊所需時間</Chinese>
|
<Chinese>每彈鍊所需時間</Chinese>
|
||||||
<Chinesesimp>每弹炼所需时间</Chinesesimp>
|
<Chinesesimp>每弹炼所需时间</Chinesesimp>
|
||||||
<Japanese>ベルトリンク毎の所有時間</Japanese>
|
<Japanese>ベルトリンク毎の所有時間</Japanese>
|
||||||
<Korean>탄약띠 당 시간</Korean>
|
<Korean>탄띠 당 시간</Korean>
|
||||||
<Polish>Czas na taśmę</Polish>
|
<Polish>Czas na taśmę</Polish>
|
||||||
<Russian>Время на звено ленты</Russian>
|
<Russian>Время на звено ленты</Russian>
|
||||||
<Portuguese>Tempo por carregador de cinto</Portuguese>
|
<Portuguese>Tempo por carregador de cinto</Portuguese>
|
||||||
@ -161,7 +161,7 @@
|
|||||||
<Italian>%1 Pieno(i) e %2 Parziale(i)</Italian>
|
<Italian>%1 Pieno(i) e %2 Parziale(i)</Italian>
|
||||||
<Portuguese>%1 Total e %2 Parcial </Portuguese>
|
<Portuguese>%1 Total e %2 Parcial </Portuguese>
|
||||||
<Japanese>%1 個の満杯と %2 個の弾薬入り弾倉</Japanese>
|
<Japanese>%1 個の満杯と %2 個の弾薬入り弾倉</Japanese>
|
||||||
<Korean>%1 꽉찼고 %2 부분참</Korean>
|
<Korean>%1 꽉 찼고 %2 부분적으로 참</Korean>
|
||||||
<Chinesesimp>%1个满的与%2个部分的</Chinesesimp>
|
<Chinesesimp>%1个满的与%2个部分的</Chinesesimp>
|
||||||
<Chinese>%1個滿的與%2個部分的</Chinese>
|
<Chinese>%1個滿的與%2個部分的</Chinese>
|
||||||
<Turkish>%1 Dolu ve %2 Partial</Turkish>
|
<Turkish>%1 Dolu ve %2 Partial</Turkish>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
// MINIMAL required version for the Mod. Components can specify others..
|
// MINIMAL required version for the Mod. Components can specify others..
|
||||||
#define REQUIRED_VERSION 2.06
|
#define REQUIRED_VERSION 2.06
|
||||||
#define REQUIRED_CBA_VERSION {3,15,6}
|
#define REQUIRED_CBA_VERSION {3,15,7}
|
||||||
|
|
||||||
#ifdef COMPONENT_BEAUTIFIED
|
#ifdef COMPONENT_BEAUTIFIED
|
||||||
#define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED)
|
#define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#define MAJOR 3
|
#define MAJOR 3
|
||||||
#define MINOR 14
|
#define MINOR 15
|
||||||
#define PATCHLVL 1
|
#define PATCHLVL 0
|
||||||
#define BUILD 65
|
#define BUILD 67
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<Japanese>ACE ロジスティクス</Japanese>
|
<Japanese>ACE ロジスティクス</Japanese>
|
||||||
<Chinesesimp>ACE 后勤</Chinesesimp>
|
<Chinesesimp>ACE 后勤</Chinesesimp>
|
||||||
<Chinese>ACE 後勤</Chinese>
|
<Chinese>ACE 後勤</Chinese>
|
||||||
<Korean>ACE 군수</Korean>
|
<Korean>ACE 병참</Korean>
|
||||||
<Turkish>ACE Lojistik</Turkish>
|
<Turkish>ACE Lojistik</Turkish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Main_URL">
|
<Key ID="STR_ACE_Main_URL">
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
<Italian>Luce della torcia in mappa</Italian>
|
<Italian>Luce della torcia in mappa</Italian>
|
||||||
<French>Lueur lampe carte</French>
|
<French>Lueur lampe carte</French>
|
||||||
<Japanese>地図をライトで照らす</Japanese>
|
<Japanese>地図をライトで照らす</Japanese>
|
||||||
<Korean>지도 조명이 빛이 납니까</Korean>
|
<Korean>지도 조명 발광</Korean>
|
||||||
<Chinesesimp>增加地图亮度</Chinesesimp>
|
<Chinesesimp>增加地图亮度</Chinesesimp>
|
||||||
<Chinese>增加地圖亮度</Chinese>
|
<Chinese>增加地圖亮度</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -76,7 +76,7 @@
|
|||||||
<Czech>Přidat externí záři hráči který používá baterku v mapě?</Czech>
|
<Czech>Přidat externí záři hráči který používá baterku v mapě?</Czech>
|
||||||
<Italian>Aggiungi luce esterna a giocatori che usano la torcia in mappa?</Italian>
|
<Italian>Aggiungi luce esterna a giocatori che usano la torcia in mappa?</Italian>
|
||||||
<Japanese>プレイヤーが地図をフラッシュライトで照らせられるように設定します。</Japanese>
|
<Japanese>プレイヤーが地図をフラッシュライトで照らせられるように設定します。</Japanese>
|
||||||
<Korean>지도에 불빛을 비치는 플레이어를 조금 더 밝게 합니까?</Korean>
|
<Korean>지도에 조명을 사용하는 플레이어에 외부 불빛을 추가합니까?</Korean>
|
||||||
<Chinesesimp>当玩家打开手电筒时,增加地图亮度。</Chinesesimp>
|
<Chinesesimp>当玩家打开手电筒时,增加地图亮度。</Chinesesimp>
|
||||||
<Chinese>當玩家擁有手電筒時,增加地圖亮度?</Chinese>
|
<Chinese>當玩家擁有手電筒時,增加地圖亮度?</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<Russian>Заставлять карту трястись при ходьбе?</Russian>
|
<Russian>Заставлять карту трястись при ходьбе?</Russian>
|
||||||
<Italian>Far scuotere la mappa mentre cammini?</Italian>
|
<Italian>Far scuotere la mappa mentre cammini?</Italian>
|
||||||
<Japanese>歩いているときは地図を揺らすかかどうかを設定できます。</Japanese>
|
<Japanese>歩いているときは地図を揺らすかかどうかを設定できます。</Japanese>
|
||||||
<Korean>걸을때 지도보면 흔들리게 합니까?</Korean>
|
<Korean>걸을 때 지도를 보면 흔들리게 합니까?</Korean>
|
||||||
<Chinesesimp>走路时打开地图会产生晃动。</Chinesesimp>
|
<Chinesesimp>走路时打开地图会产生晃动。</Chinesesimp>
|
||||||
<Chinese>走路時讓地圖有震動的感覺?</Chinese>
|
<Chinese>走路時讓地圖有震動的感覺?</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -157,7 +157,7 @@
|
|||||||
<Russian>Показывать координаты курсора</Russian>
|
<Russian>Показывать координаты курсора</Russian>
|
||||||
<Italian>Mostra coordinate sul cursore</Italian>
|
<Italian>Mostra coordinate sul cursore</Italian>
|
||||||
<Japanese>カーソル先で座標を表示</Japanese>
|
<Japanese>カーソル先で座標を表示</Japanese>
|
||||||
<Korean>커서에 좌표를 보이게 합니까</Korean>
|
<Korean>커서에 좌표를 보이기</Korean>
|
||||||
<Chinesesimp>显示光标的座标</Chinesesimp>
|
<Chinesesimp>显示光标的座标</Chinesesimp>
|
||||||
<Chinese>顯示游標的座標</Chinese>
|
<Chinese>顯示游標的座標</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -285,7 +285,7 @@
|
|||||||
<Russian>Скрыть группы ботов</Russian>
|
<Russian>Скрыть группы ботов</Russian>
|
||||||
<Italian>Nascondere gruppi IA</Italian>
|
<Italian>Nascondere gruppi IA</Italian>
|
||||||
<Japanese>AI グループを非表示</Japanese>
|
<Japanese>AI グループを非表示</Japanese>
|
||||||
<Korean>인공지능 그룹을 숨깁니까</Korean>
|
<Korean>인공지능 그룹 숨기기</Korean>
|
||||||
<Chinesesimp>隐藏 AI 小队</Chinesesimp>
|
<Chinesesimp>隐藏 AI 小队</Chinesesimp>
|
||||||
<Chinese>隱藏AI小隊</Chinese>
|
<Chinese>隱藏AI小隊</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -317,7 +317,7 @@
|
|||||||
<Russian>Показать имена игроков</Russian>
|
<Russian>Показать имена игроков</Russian>
|
||||||
<Italian>Mostra i nomi dei giocatori</Italian>
|
<Italian>Mostra i nomi dei giocatori</Italian>
|
||||||
<Japanese>プレイヤー名を表示</Japanese>
|
<Japanese>プレイヤー名を表示</Japanese>
|
||||||
<Korean>플레이어 이름을 표시합니까</Korean>
|
<Korean>플레이어 이름 표시</Korean>
|
||||||
<Chinesesimp>显示玩家名称</Chinesesimp>
|
<Chinesesimp>显示玩家名称</Chinesesimp>
|
||||||
<Chinese>顯示玩家名稱</Chinese>
|
<Chinese>顯示玩家名稱</Chinese>
|
||||||
</Key>
|
</Key>
|
||||||
@ -380,7 +380,7 @@
|
|||||||
<Spanish>NVG</Spanish>
|
<Spanish>NVG</Spanish>
|
||||||
<Italian>NVG</Italian>
|
<Italian>NVG</Italian>
|
||||||
<Japanese>夜間暗視装置</Japanese>
|
<Japanese>夜間暗視装置</Japanese>
|
||||||
<Korean>야투경</Korean>
|
<Korean>야간투시경</Korean>
|
||||||
<Chinesesimp>夜视仪</Chinesesimp>
|
<Chinesesimp>夜视仪</Chinesesimp>
|
||||||
<Chinese>夜視鏡</Chinese>
|
<Chinese>夜視鏡</Chinese>
|
||||||
<Turkish>NVG</Turkish>
|
<Turkish>NVG</Turkish>
|
||||||
|
@ -168,7 +168,7 @@
|
|||||||
<Spanish>Color por defecto para líderes cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
|
<Spanish>Color por defecto para líderes cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
|
||||||
<French>Définit la couleur par défaut pour les chefs de groupe quand il n'y a pas de réglage de groupe. [Module : laisser vide pour ne pas forcer chez les clients.]</French>
|
<French>Définit la couleur par défaut pour les chefs de groupe quand il n'y a pas de réglage de groupe. [Module : laisser vide pour ne pas forcer chez les clients.]</French>
|
||||||
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
|
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
|
||||||
<Korean>그룹 설정이 없는 경우 리더의 예비 색상 값입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것]</Korean>
|
<Korean>그룹 설정이 없는 경우 리더의 예비 색상 값입니다. [모듈: 클라이언트에서 강체하지 않기 위해 공백으로 비워둘 것]</Korean>
|
||||||
<Chinesesimp>当没有设定小队颜色时,此功能会定义队长的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
|
<Chinesesimp>当没有设定小队颜色时,此功能会定义队长的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
|
||||||
<Chinese>當沒有設定小隊顏色時,此功能會定義隊長的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
|
<Chinese>當沒有設定小隊顏色時,此功能會定義隊長的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
|
||||||
<Czech>Záložní barva pro velitele skupin pokud není žádné skupinové nastavení [Modul: ponechat prázdné abyste nepřepsali nastavení klientů]</Czech>
|
<Czech>Záložní barva pro velitele skupin pokud není žádné skupinové nastavení [Modul: ponechat prázdné abyste nepřepsali nastavení klientů]</Czech>
|
||||||
@ -199,7 +199,7 @@
|
|||||||
<Spanish>Color por defecto cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
|
<Spanish>Color por defecto cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
|
||||||
<French>Définit la couleur par défaut quand il n'y a pas de réglage pour le groupe. [Module : laisser vide pour ne pas forcer chez les clients.]</French>
|
<French>Définit la couleur par défaut quand il n'y a pas de réglage pour le groupe. [Module : laisser vide pour ne pas forcer chez les clients.]</French>
|
||||||
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
|
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
|
||||||
<Korean>그룹 설정이 없을 경우의 예비 색상입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것]</Korean>
|
<Korean>그룹 설정이 없을 경우의 예비 색상입니다. [모듈: 클라이언트에서 강체하지 않기 위해 공백으로 비워둘 것]</Korean>
|
||||||
<Chinesesimp>当没有设定小队颜色时,此功能会定义玩家的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
|
<Chinesesimp>当没有设定小队颜色时,此功能会定义玩家的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
|
||||||
<Chinese>當沒有設定小隊顏色時,此功能會定義玩家的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
|
<Chinese>當沒有設定小隊顏色時,此功能會定義玩家的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
|
||||||
<Czech>Záložní barva pokud není žádné skupinové nastavení [Modul: ponechat prázdné abyste nepřepsali nastavení klientů]</Czech>
|
<Czech>Záložní barva pokud není žádné skupinové nastavení [Modul: ponechat prázdné abyste nepřepsali nastavení klientů]</Czech>
|
||||||
@ -296,7 +296,7 @@
|
|||||||
<Polish>Maksymalny zasięg kamery</Polish>
|
<Polish>Maksymalny zasięg kamery</Polish>
|
||||||
<German>Maximale Kamerareichweite</German>
|
<German>Maximale Kamerareichweite</German>
|
||||||
<Chinesesimp>摄像机最大范围</Chinesesimp>
|
<Chinesesimp>摄像机最大范围</Chinesesimp>
|
||||||
<Korean>킴[리 처;데 갈;</Korean>
|
<Korean>카메라와 지도 신호의 최대 거리</Korean>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Map_Gestures_maxRangeCamera_description">
|
<Key ID="STR_ACE_Map_Gestures_maxRangeCamera_description">
|
||||||
<English>Max range between a Camera and players to show the map gesture indicator</English>
|
<English>Max range between a Camera and players to show the map gesture indicator</English>
|
||||||
|
@ -52,7 +52,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_MapToolsAlignCompass {
|
class ACE_MapToolsAlignCompass {
|
||||||
displayName = CSTRING(MapToolsAlignCompass);
|
displayName = CSTRING(MapToolsAlignCompass);
|
||||||
condition = QUOTE((GVAR(mapTool_Shown) != 0) && {'ItemCompass' in assigneditems ACE_player});
|
condition = QUOTE(GVAR(mapTool_Shown) != 0 && {getUnitLoadout ACE_player param [ARR_2(9, [])] param [ARR_2(3, '')] != ''});
|
||||||
statement = QUOTE(GVAR(mapTool_angle) = getDir ACE_player;);
|
statement = QUOTE(GVAR(mapTool_angle) = getDir ACE_player;);
|
||||||
exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"};
|
exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"};
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
visibleMap &&
|
visibleMap &&
|
||||||
{alive ACE_player} &&
|
{alive ACE_player} &&
|
||||||
{getText (configFile >> "CfgWeapons" >> (assignedItems ACE_player param [0, ""]) >> "simulation") == "ItemMap"} &&
|
|
||||||
{"ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems))} &&
|
{"ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems))} &&
|
||||||
{!GVAR(mapTool_isDragging)} &&
|
{!GVAR(mapTool_isDragging)} &&
|
||||||
{!GVAR(mapTool_isRotating)}
|
{!GVAR(mapTool_isRotating)} &&
|
||||||
|
{getUnitLoadout ACE_player param [9, []] param [0, ""] != ""}
|
||||||
|
1
addons/marker_flags/$PBOPREFIX$
Normal file
1
addons/marker_flags/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\addons\marker_flags
|
17
addons/marker_flags/CfgEventHandlers.hpp
Normal file
17
addons/marker_flags/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class Extended_PreStart_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
|
||||||
|
};
|
||||||
|
};
|
51
addons/marker_flags/CfgVehicles.hpp
Normal file
51
addons/marker_flags/CfgVehicles.hpp
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
class CfgVehicles {
|
||||||
|
class Man;
|
||||||
|
class CAManBase: Man {
|
||||||
|
class ACE_SelfActions {
|
||||||
|
class ACE_Equipment {
|
||||||
|
class ADDON {
|
||||||
|
displayName = CSTRING(ActionPlace);
|
||||||
|
condition = QUOTE(_player call FUNC(canPlace));
|
||||||
|
insertChildren = QUOTE(_this call FUNC(addActions));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class FlagMarker_01_F;
|
||||||
|
class GVAR(white): FlagMarker_01_F {
|
||||||
|
scope = 2;
|
||||||
|
scopeCurator = 2;
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
displayName = CSTRING(white);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,1,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(black): GVAR(white) {
|
||||||
|
displayName = CSTRING(black);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,0,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(red): GVAR(white) {
|
||||||
|
displayName = CSTRING(red);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0,0,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(green): GVAR(white) {
|
||||||
|
displayName = CSTRING(green);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,1,0,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(blue): GVAR(white) {
|
||||||
|
displayName = CSTRING(blue);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,1,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(yellow): GVAR(white) {
|
||||||
|
displayName = CSTRING(yellow);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,0,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(orange): GVAR(white) {
|
||||||
|
displayName = CSTRING(orange);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0.5,0,1,co)"};
|
||||||
|
};
|
||||||
|
class GVAR(purple): GVAR(white) {
|
||||||
|
displayName = CSTRING(purple);
|
||||||
|
hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.5,0,0.5,1,co)"};
|
||||||
|
};
|
||||||
|
};
|
55
addons/marker_flags/CfgWeapons.hpp
Normal file
55
addons/marker_flags/CfgWeapons.hpp
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
class CfgWeapons {
|
||||||
|
class ACE_ItemCore;
|
||||||
|
class CBA_MiscItem_ItemInfo;
|
||||||
|
|
||||||
|
class GVAR(white): ACE_ItemCore {
|
||||||
|
GVAR(vehicle) = GVAR(white);
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
scope = 2;
|
||||||
|
displayName = CSTRING(white);
|
||||||
|
model = QPATHTOF(data\ace_markerpole.p3d);
|
||||||
|
picture = QPATHTOF(ui\white_ca.paa);
|
||||||
|
icon = "iconObject_1x10";
|
||||||
|
mapSize = 0.2;
|
||||||
|
|
||||||
|
class ItemInfo: CBA_MiscItem_ItemInfo {
|
||||||
|
mass = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class GVAR(black): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(black);
|
||||||
|
displayName = CSTRING(black);
|
||||||
|
picture = QPATHTOF(ui\black_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(red): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(red);
|
||||||
|
displayName = CSTRING(red);
|
||||||
|
picture = QPATHTOF(ui\red_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(green): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(green);
|
||||||
|
displayName = CSTRING(green);
|
||||||
|
picture = QPATHTOF(ui\green_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(blue): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(blue);
|
||||||
|
displayName = CSTRING(blue);
|
||||||
|
picture = QPATHTOF(ui\blue_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(yellow): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(yellow);
|
||||||
|
displayName = CSTRING(yellow);
|
||||||
|
picture = QPATHTOF(ui\yellow_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(orange): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(orange);
|
||||||
|
displayName = CSTRING(orange);
|
||||||
|
picture = QPATHTOF(ui\orange_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(purple): GVAR(white) {
|
||||||
|
GVAR(vehicle) = GVAR(purple);
|
||||||
|
displayName = CSTRING(purple);
|
||||||
|
picture = QPATHTOF(ui\purple_ca.paa);
|
||||||
|
};
|
||||||
|
};
|
5
addons/marker_flags/XEH_PREP.hpp
Normal file
5
addons/marker_flags/XEH_PREP.hpp
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
PREP(addActions);
|
||||||
|
PREP(canPlace);
|
||||||
|
PREP(getFlags);
|
||||||
|
PREP(pickUpFlag);
|
||||||
|
PREP(placeFlag);
|
22
addons/marker_flags/XEH_postInit.sqf
Normal file
22
addons/marker_flags/XEH_postInit.sqf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
private _weapons = (call (uiNamespace getVariable [QGVAR(flagItems), {[]}])) apply {configFile >> "CfgWeapons" >> _x};
|
||||||
|
|
||||||
|
{
|
||||||
|
private _name = configName _x;
|
||||||
|
private _vehicle = getText (_x >> QGVAR(vehicle));
|
||||||
|
GVAR(flagCache) set [_name, _vehicle];
|
||||||
|
|
||||||
|
private _action = [
|
||||||
|
QGVAR(pickup),
|
||||||
|
LLSTRING(ActionPickUp),
|
||||||
|
"",
|
||||||
|
{call FUNC(pickUpFlag)},
|
||||||
|
{[_player, _target, []] call EFUNC(common,canInteractWith)},
|
||||||
|
{},
|
||||||
|
[_name]
|
||||||
|
] call EFUNC(interact_menu,createAction);
|
||||||
|
[_vehicle, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);
|
||||||
|
} forEach _weapons;
|
13
addons/marker_flags/XEH_preInit.sqf
Normal file
13
addons/marker_flags/XEH_preInit.sqf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP_RECOMPILE_START;
|
||||||
|
#include "XEH_PREP.hpp"
|
||||||
|
PREP_RECOMPILE_END;
|
||||||
|
|
||||||
|
#include "initSettings.sqf"
|
||||||
|
|
||||||
|
GVAR(flagCache) = createHashMap;
|
||||||
|
|
||||||
|
ADDON = true;
|
6
addons/marker_flags/XEH_preStart.sqf
Normal file
6
addons/marker_flags/XEH_preStart.sqf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#include "XEH_PREP.hpp"
|
||||||
|
|
||||||
|
private _weapons = (configProperties [configfile >> "CfgWeapons", QUOTE(isClass _x && (isText (_x >> QQGVAR(vehicle)))), true]) apply {configName _x};
|
||||||
|
uiNamespace setVariable [QGVAR(flagItems), compileFinal str _weapons];
|
37
addons/marker_flags/config.cpp
Normal file
37
addons/marker_flags/config.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
name = COMPONENT_NAME;
|
||||||
|
units[] = {
|
||||||
|
QGVAR(white),
|
||||||
|
QGVAR(black),
|
||||||
|
QGVAR(red),
|
||||||
|
QGVAR(green),
|
||||||
|
QGVAR(blue),
|
||||||
|
QGVAR(yellow),
|
||||||
|
QGVAR(orange),
|
||||||
|
QGVAR(purple)
|
||||||
|
};
|
||||||
|
weapons[] = {
|
||||||
|
QGVAR(white),
|
||||||
|
QGVAR(black),
|
||||||
|
QGVAR(red),
|
||||||
|
QGVAR(green),
|
||||||
|
QGVAR(blue),
|
||||||
|
QGVAR(yellow),
|
||||||
|
QGVAR(orange),
|
||||||
|
QGVAR(purple)
|
||||||
|
};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"ace_interact_menu"};
|
||||||
|
author = ECSTRING(common,ACETeam);
|
||||||
|
authors[] = {"Brett Mayson"};
|
||||||
|
url = ECSTRING(main,URL);
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
||||||
|
#include "CfgVehicles.hpp"
|
||||||
|
#include "CfgWeapons.hpp"
|
79
addons/marker_flags/data/ace_default.rvmat
Normal file
79
addons/marker_flags/data/ace_default.rvmat
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
ambient[]={1,1,1,1};
|
||||||
|
diffuse[]={1,1,1,1};
|
||||||
|
forcedDiffuse[]={0,0,0,0};
|
||||||
|
emmisive[]={0,0,0,1};
|
||||||
|
specular[]={0.01,0.01,0.01,1}; //amount of glossiness - the higher the number, the higher the glossiness
|
||||||
|
specularPower=500; //area of glossiness - the higher the number, the smaller the area
|
||||||
|
PixelShaderID="Super";
|
||||||
|
VertexShaderID="Super";
|
||||||
|
|
||||||
|
class Stage1 {
|
||||||
|
texture="#(rgb,1,1,1)color(0.5,0.5,1,1)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,0};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage2 {
|
||||||
|
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,dt)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,0};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage3 {
|
||||||
|
texture="#(argb,8,8,3)color(0,0,0,0,mc)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,0};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage4 {
|
||||||
|
texture="#(argb,8,8,3)color(1,1,1,1,as)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,1};
|
||||||
|
pos[]={0,0,1};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage5 {
|
||||||
|
texture="#(rgb,1,1,1)color(0.2,0.2,1,1)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,0};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage6 {
|
||||||
|
texture="#(ai,64,64,1)fresnel(4.7,1.2)";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,1};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Stage7 {
|
||||||
|
texture="a3\data_f\env_land_ca.paa";
|
||||||
|
uvSource="tex";
|
||||||
|
class uvTransform {
|
||||||
|
aside[]={1,0,0};
|
||||||
|
up[]={0,1,0};
|
||||||
|
dir[]={0,0,1};
|
||||||
|
pos[]={0,0,0};
|
||||||
|
};
|
||||||
|
};
|
BIN
addons/marker_flags/data/ace_markerpole.p3d
Normal file
BIN
addons/marker_flags/data/ace_markerpole.p3d
Normal file
Binary file not shown.
39
addons/marker_flags/functions/fnc_addActions.sqf
Normal file
39
addons/marker_flags/functions/fnc_addActions.sqf
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: Brett Mayson
|
||||||
|
* Adds the child actions for placing flags.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Player <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Actions <ARRAY>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [player] call ace_marker_flags_fnc_addActions
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
private _actions = [];
|
||||||
|
|
||||||
|
{
|
||||||
|
private _config = configFile >> "CfgWeapons" >> _x;
|
||||||
|
_actions pushBack [
|
||||||
|
[
|
||||||
|
_x,
|
||||||
|
getText (_config >> "displayName"),
|
||||||
|
getText (_config >> "picture"),
|
||||||
|
{[_this select 0, _this select 2] call FUNC(placeFlag)},
|
||||||
|
{true},
|
||||||
|
{},
|
||||||
|
_x
|
||||||
|
] call EFUNC(interact_menu,createAction),
|
||||||
|
[],
|
||||||
|
_unit
|
||||||
|
];
|
||||||
|
} forEach ([_unit] call FUNC(getFlags));
|
||||||
|
|
||||||
|
_actions
|
20
addons/marker_flags/functions/fnc_canPlace.sqf
Normal file
20
addons/marker_flags/functions/fnc_canPlace.sqf
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Authors: Brett Mayson
|
||||||
|
* Checks if a flag can be placed by a unit.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Can place <BOOL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* player call ace_marker_flags_fnc_canPlace
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
GVAR(placeAnywhere) || {_unit call EFUNC(common,canDig)}
|
20
addons/marker_flags/functions/fnc_getFlags.sqf
Normal file
20
addons/marker_flags/functions/fnc_getFlags.sqf
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Authors: Brett Mayson
|
||||||
|
* Get the placeable flags in the unit's inventory.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* flags <ARRAY>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [_unit] call ace_marker_flags_fnc_getFlags
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
(_unit call EFUNC(common,uniqueItems)) arrayIntersect keys GVAR(flagCache)
|
28
addons/marker_flags/functions/fnc_pickUpFlag.sqf
Normal file
28
addons/marker_flags/functions/fnc_pickUpFlag.sqf
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: Brett Mayson
|
||||||
|
* Places a flag in front of the unit.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Flag <OBJECT>
|
||||||
|
* 1: Unit <OBJECT>
|
||||||
|
* 2: Action Args <ARRAY>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Nothing
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [_flag,player,"x"] call ace_marker_flags_fnc_pickupFlag
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params [["_flag", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_args", [""], [[]]]];
|
||||||
|
private _itemName = _args # 0;
|
||||||
|
TRACE_3("pickupFlag",_unit,_flag,_itemName);
|
||||||
|
|
||||||
|
if (isNull _flag) exitWith {};
|
||||||
|
|
||||||
|
[_unit, "PutDown"] call EFUNC(common,doGesture);
|
||||||
|
deleteVehicle _flag;
|
||||||
|
[_unit, _itemName] call EFUNC(common,addToInventory);
|
27
addons/marker_flags/functions/fnc_placeFlag.sqf
Normal file
27
addons/marker_flags/functions/fnc_placeFlag.sqf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
/*
|
||||||
|
* Author: Brett Mayson
|
||||||
|
* Places a flag in front of the unit.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
* 1: Flag <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Flag <OBJECT>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [player, "ace_marker_flags_white"] call ace_marker_flags_fnc_placeFlag
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
params [["_unit", objNull, [objNull]], ["_flag", QGVAR(white), [""]]];
|
||||||
|
|
||||||
|
_unit removeItem _flag;
|
||||||
|
_flag = GVAR(flagCache) get _flag; // convert to vehicle type
|
||||||
|
private _pos = _unit modelToWorld [0, 1, 0];
|
||||||
|
private _flag = _flag createVehicle _pos;
|
||||||
|
_flag setPos _pos;
|
||||||
|
[QGVAR(placed), [_unit, _flag]] call CBA_fnc_localEvent;
|
||||||
|
[_unit, "PutDown"] call EFUNC(common,doGesture);
|
1
addons/marker_flags/functions/script_component.hpp
Normal file
1
addons/marker_flags/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "\z\ace\addons\marker_flags\script_component.hpp"
|
9
addons/marker_flags/initSettings.sqf
Normal file
9
addons/marker_flags/initSettings.sqf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(DisplayName_Settings)];
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(placeAnywhere), "CHECKBOX",
|
||||||
|
[LSTRING(PlaceAnywhere_DisplayName), LSTRING(PlaceAnywhere_Description)],
|
||||||
|
_category,
|
||||||
|
false, // default value
|
||||||
|
true // isGlobal
|
||||||
|
] call CBA_fnc_addSetting;
|
17
addons/marker_flags/script_component.hpp
Normal file
17
addons/marker_flags/script_component.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#define COMPONENT marker_flags
|
||||||
|
#define COMPONENT_BEAUTIFIED Marker Flags
|
||||||
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
// #define DISABLE_COMPILE_CACHE
|
||||||
|
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_MARKER_FLAGS
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_MARKER_FLAGS
|
||||||
|
#define DEBUG_SETTINGS DEBUG_ENABLED_MARKER_FLAGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\addons\main\script_macros.hpp"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user