Merge branch 'master' into pr/8215

This commit is contained in:
PabstMirror 2022-05-24 12:00:12 -05:00
commit 2041c88cee
293 changed files with 3283 additions and 1013 deletions

View File

@ -34,7 +34,7 @@ We welcome anyone to contribute to this repository. Issues that we are actively
## 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.
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
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/).

View File

@ -175,6 +175,7 @@ VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Walthzer <walthzer.69@gmail.com>
Winter <simon@agius-muscat.net>
wizpig64
YetheSamartaka
xrufix
Zakant <Zakant@gmx.de>
zGuba
zGuba

View File

@ -4,7 +4,7 @@
<p align="center">
<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 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">
@ -18,8 +18,8 @@
<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">
</a>
<a href="https://acemod.org/slack">
<img src="https://img.shields.io/badge/Slack-Join-darkviolet.svg?style=flat-square" alt="ACE3 Slack">
<a href="https://acemod.org/discord">
<img src="https://img.shields.io/badge/Discord-Join-darkviolet.svg?style=flat-square" alt="ACE3 Discord">
</a>
<a href="https://circleci.com/gh/acemod/ACE3">
<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>
<tr>
<td><a href="https://acemod.org/slack">Slack</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><a href="https://acemod.org/discord">Discord</a></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>

View File

@ -9,3 +9,9 @@ class Extended_PreInit_EventHandlers {
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -1,2 +1,6 @@
PREP(initEjectAction);
PREP(canShowEject);
PREP(droneAddActions);
PREP(droneGetTurretTargetPos);
PREP(droneModifyWaypoint);
PREP(droneSetWaypoint);
PREP(initEjectAction);

View 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;
};

View 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);
};

View 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]
};

View 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;

View 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;

View File

@ -89,7 +89,7 @@ private _compatibleMagazines = [[[], []], [[], []], [[], []]];
// Magazine groups
{
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups),["#CBA_HASH#",[],[],[]]];
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups), createHashMap];
private _magArray = _magazineGroups get (toLower _x);
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
} foreach ([getArray (_weaponConfig >> _x >> "magazineWell"), getArray (_weaponConfig >> "magazineWell")] select (_x == "this"));

View File

@ -997,7 +997,7 @@
<French>Aucun équipement à importer.</French>
<German>Keine Ausrüstungen zum Importieren</German>
<Japanese>インポートする装備がありません。</Japanese>
<Korean>가져올 로드 아웃이 없습니다.</Korean>
<Korean>가져올 로드아웃이 없습니다.</Korean>
<Chinese>沒有裝備被匯入</Chinese>
<Chinesesimp>没有负载被导入。</Chinesesimp>
<Italian>Non ci sono equipaggiamenti da importare.</Italian>

View File

@ -322,6 +322,11 @@ class CfgVehicles {
GVAR(canLoad) = 1;
};
// Invisible Target Soldier
class TargetSoldierBase: StaticWeapon {
GVAR(canLoad) = 0;
};
class StaticMortar;
class Mortar_01_base_F: StaticMortar {
GVAR(size) = 2; // 1 = small, 2 = large

View File

@ -19,5 +19,6 @@ PREP(setSize);
PREP(setSpace);
PREP(startLoadIn);
PREP(startUnload);
PREP(unloadCarryItem);
PREP(unloadItem);
PREP(validateCargoSpace);

View File

@ -50,8 +50,6 @@
GVAR(interactionParadrop) = false;
createDialog QGVAR(menu);
};
// TOOO maybe drag/carry the unloaded item?
}] call CBA_fnc_addEventHandler;
[QGVAR(serverUnload), {

View File

@ -35,7 +35,8 @@ if (_item isEqualType "") then {
} else {
_validItem =
(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 &&

View File

@ -19,6 +19,7 @@ private _display = uiNamespace getVariable QGVAR(menuDisplay);
if (isNil "_display") exitWith {};
private _ctrlEditText = ctrlText 100;
_ctrlEditText = _ctrlEditText select [0,32];
if (_ctrlEditText isEqualTo "") then { // custom name has been removed
[LSTRING(clearedCustomName), 3] call EFUNC(common,displayTextStructured);
} else {

View 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;

View File

@ -60,6 +60,10 @@ if (_object isEqualType objNull) then {
[QEGVAR(common,fixCollision), _object] call CBA_fnc_localEvent;
[QEGVAR(common,fixPosition), _object] call CBA_fnc_localEvent;
};
// Dragging integration
[_unloader, _object] call FUNC(unloadCarryItem);
// Invoke listenable event
["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent;
true

View File

@ -81,7 +81,7 @@
<German>Aktiviert die Umbenennungs-Aktion für neu benennbare Objekte.</German>
<Polish>Włącza akcję zmiany nazwy dla obiektów z możliwością zmiany nazwy.</Polish>
<Chinesesimp>启用可重命名物体的重命名动作。</Chinesesimp>
<Korean>개체의 명칭을 새로 짓는것을 허가합니다.</Korean>
<Korean>개체의 명칭을 새로 짓는 것을 허가합니다.</Korean>
</Key>
<Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English>

View File

@ -0,0 +1 @@
z\ace\addons\casings

View 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
View File

@ -0,0 +1,4 @@
ace_casings
===============
Create persistent empty casing when bullets are fired by infantry weapons.

View File

@ -0,0 +1 @@
PREP(createCasing);

View 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;

View 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;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

17
addons/casings/config.cpp Normal file
View 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"

View 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;

View File

@ -0,0 +1 @@
#include "\z\ace\addons\casings\script_component.hpp"

View 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;

View 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"

View 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>

View File

@ -111,7 +111,6 @@ PREP(inTransitionAnim);
PREP(isAwake);
PREP(isEngineer);
PREP(isEOD);
PREP(isFeatureCameraActive);
PREP(isInBuilding);
PREP(isMedic);
PREP(isModLoaded);
@ -127,7 +126,6 @@ PREP(muteUnitHandleInitPost);
PREP(muteUnitHandleRespawn);
PREP(nearestVehiclesFreeSeat);
PREP(numberToDigits);
PREP(numberToDigitsString);
PREP(numberToString);
PREP(onAnswerRequest);
PREP(owned);
@ -187,6 +185,7 @@ PREP(uniqueElements);
PREP(uniqueItems);
PREP(unloadPerson);
PREP(unloadPersonLocal);
PREP(unloadUnitWeapon);
PREP(unmuteUnit);
PREP(useItem);
PREP(useMagazine);

View File

@ -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);
["setHidden", true, ["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), {
params ["_object", "_set"];
@ -86,6 +87,17 @@
};
}] 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
params ["_object", "_set"];
if ((_object isKindOf "CAManBase") && {(["ace_medical"] call FUNC(isModLoaded))}) then {
@ -527,4 +539,21 @@ GVAR(deviceKeyCurrentIndex) = -1;
{false},
[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;

View File

@ -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

View File

@ -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

View File

@ -31,7 +31,6 @@ if (_setVolume) then {
2 fadeSound NORMAL_LEVEL;
// TFAR
_unit setVariable ["tf_voiceVolume", NORMAL_LEVEL, true];
_unit setVariable ["tf_globalVolume", NORMAL_LEVEL];
// ACRE2
@ -42,7 +41,6 @@ if (_setVolume) then {
2 fadeSound MUTED_LEVEL;
// TFAR
_unit setVariable ["tf_voiceVolume", NO_SOUND, true];
_unit setVariable ["tf_globalVolume", MUTED_LEVEL];
// ACRE2

View 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;

View File

@ -890,7 +890,7 @@
<Russian>Проверять все аддоны</Russian>
<Italian>Controlla tutti gli addon</Italian>
<Japanese>全アドオンを検査</Japanese>
<Korean>모든 드온 검사</Korean>
<Korean>모든 드온 검사</Korean>
<Chinese>檢查所有模組</Chinese>
<Chinesesimp>检查所有模组</Chinesesimp>
</Key>
@ -939,7 +939,7 @@
<Russian>Какие аддоны дополнительно разрешены?</Russian>
<Italian>Quali addon sono permessi in ogni caso?</Italian>
<Japanese>どのようなアドオンを許可しますか?</Japanese>
<Korean>허가되는 에드온은 어느것입니까?</Korean>
<Korean>허가되는 애드온은 어느 것입니까?</Korean>
<Chinese>哪些模組是可被允許/忽略的?</Chinese>
<Chinesesimp>无论如何都允许的附加组件</Chinesesimp>
</Key>
@ -1215,7 +1215,7 @@
<Italian>Non forzare</Italian>
<French>Ne pas forcer</French>
<Japanese>強制しない</Japanese>
<Korean>강제하지 말것</Korean>
<Korean>강제하지 말 </Korean>
<Chinese>不要強行</Chinese>
<Chinesesimp>不要强行</Chinesesimp>
<Turkish>Zorlama</Turkish>
@ -1601,7 +1601,7 @@
<Polish>Zmień nazwę</Polish>
<Japanese>改名</Japanese>
<Italian>Rinomina</Italian>
<Korean>이름바꾸기</Korean>
<Korean>이름 바꾸기</Korean>
<Chinese>重新命名</Chinese>
<Chinesesimp>重新命名</Chinesesimp>
<Russian>Переименовать</Russian>
@ -1635,5 +1635,8 @@
<Chinese>受所在位置影響提升醫療能力</Chinese>
<Turkish>Konumlar Tedaviyi Hızlandırır</Turkish>
</Key>
<Key ID="STR_ACE_Common_unloadWeapon">
<English>Unload Weapon</English>
</Key>
</Package>
</Project>

View File

@ -96,7 +96,7 @@ if (_smokeDelayEnabled) then {
_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);
_vehicle setVariable [QGVAR(intensity), _intensity];

View File

@ -9,6 +9,7 @@
* 2: Spawn fire ring <Boolean>
* 3: How long effect will last (Max 20 seconds) <Number>
* 4: What selection will fire originate from <String>
* 5: Cookoff intensity value <Number>
*
* Return Value:
* None
@ -19,7 +20,7 @@
* Public: No
*/
params ["_obj", "_jet", "_ring", "_time", "_fireSelection"];
params ["_obj", "_jet", "_ring", "_time", "_fireSelection", "_intensity"];
private _light = "#lightpoint" createVehicleLocal [0,0,0];
_light setLightBrightness 5;
_light setLightAmbient [0.8, 0.6, 0.2];
@ -43,12 +44,14 @@ if (isServer) then {
[{
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;
if (_elapsedTime >= _time) exitWith {
deleteVehicle _light;
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;
};
private _factor = (1 + (_elapsedTime / 2) min 2);
@ -183,5 +186,14 @@ if (isServer) then {
[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;

View File

@ -101,7 +101,7 @@
<Italian>Abilita l'esplosione delle munizioni. Spara munizioni di proiettili quando il veicolo va a fuoco e contiene munizioni.</Italian>
<Chinese>開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果</Chinese>
<Chinesesimp>开启弹药殉爆效果。当一台载有弹药的载具起火时,将会有殉爆的效果。</Chinesesimp>
<Korean>쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어있는 동안 주변에 발사체를 발사합니다.</Korean>
<Korean>쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어 있는 동안 주변에 발사체를 발사합니다.</Korean>
<Russian>Активирует возгорание и детонацию боекомплекта в горящей технике</Russian>
<Portuguese>Permite que a munição cozinhe. Dispara projéteis de munição enquanto o veículo está em chamas e tem munição.</Portuguese>
<Czech>Zapíná vznícení munice. Vystřeluje projektily po dobu kdy vozidlo hoří a má munici.</Czech>

View File

@ -19,6 +19,7 @@ PREP(assemble_pickupWeapon);
PREP(canGetIn);
PREP(getIn);
PREP(getCarryMagazine);
PREP(proxyWeapon);
PREP(reload_actionsLoad);

View File

@ -31,13 +31,7 @@ private _allCarryMags = [];
private _weapon = _x;
{
private _xMag = _x;
private _carryMag = GVAR(vehicleMagCache) get _xMag;
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);
};
private _carryMag = _xMag call FUNC(getCarryMagazine);
if (_carryMag != "") then {
_turretMagsCSW pushBackUnique _xMag;
_allCarryMags pushBackUnique _carryMag;

View File

@ -21,12 +21,14 @@
// Remove the tripod from the launcher slot
private _secondaryWeaponClassname = secondaryWeapon _player;
// handle loaded launchers which can become csw like CUP Metis
private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""];
_player removeWeaponGlobal (secondaryWeapon _player);
private _onFinish = {
params ["_args"];
_args params ["_player", "_secondaryWeaponClassname"];
TRACE_2("deployTripod finish",_player,_secondaryWeaponClassname);
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
TRACE_3("deployTripod finish",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
@ -34,6 +36,9 @@
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
_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 {
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
@ -61,12 +66,15 @@
private _onFailure = {
params ["_args"];
_args params ["_player", "_secondaryWeaponClassname"];
TRACE_2("deployTripod failure",_player,_secondaryWeaponClassname);
_args params ["_player", "_secondaryWeaponClassname", "_secondaryWeaponMagazine"];
TRACE_3("deployTripod failure",_player,_secondaryWeaponClassname,_secondaryWeaponMagazine);
_player addWeaponGlobal _secondaryWeaponClassname;
if (_secondaryWeaponMagazine isNotEqualTo "") then {
_player addWeaponItem [_secondaryWeaponClassname, _secondaryWeaponMagazine, true];
};
};
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;

View File

@ -37,16 +37,18 @@
_weaponPos set [2, (_weaponPos select 2) + 0.1];
private _weaponDir = getDir _staticWeapon;
private _carryWeaponMag = "";
private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLower _x};
LOG("remove ammo");
{
_x params ["_xMag", "", "_xAmmo"];
if (_xAmmo == 0) then {continue};
private _carryMag = GVAR(vehicleMagCache) get _xMag;
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);
private _carryMag = _xMag call FUNC(getCarryMagazine);
if (_carryWeaponMag isEqualTo "" && {toLower _carryMag in _carryWeaponMags}) then {
TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag);
_carryWeaponMag = _carryMag;
DEC(_xAmmo);
};
if ((_xAmmo > 0) && {_carryMag != ""}) then {
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 {
_player addWeapon _carryWeaponClassname;
if (_carryWeaponMag isNotEqualTo "") then {
_player addWeaponItem [_carryWeaponClassname, _carryWeaponMag, true];
};
};
private _weaponRelPos = _weaponPos getPos RELATIVE_DIRECTION(90);
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
_weaponHolder setDir random [0, 180, 360];
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
}, [_player, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
if (_carryWeaponMag isEqualTo "") then {
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
} else {
_weaponHolder addWeaponWithAttachmentsCargoGlobal [[_carryWeaponClassname, "", "", "", [_carryWeaponMag, 1], [], ""], 1];
};
}, [_player, _weaponPos, _carryWeaponClassname, _carryWeaponMag]] call CBA_fnc_execNextFrame;
LOG("delete weapon");
deleteVehicle _staticWeapon;

View 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

View File

@ -60,14 +60,7 @@ private _cfgMagazines = configFile >> "CfgMagazines";
if ((_xAmmo > 0) && {!(_xMag in _handeledMagTypes)}) then {
_handeledMagTypes pushBack _xMag;
private _carryMag = GVAR(vehicleMagCache) get _xMag;
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);
};
private _carryMag = _xMag call FUNC(getCarryMagazine);
if (_carryMag == "") exitWith {};
private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName");

View File

@ -4,8 +4,9 @@
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
*
* Arguments:
* 0: Weapon <STRING>
* 1: Magazine that is carryable <STRING>
* 0: Vehicle <OBJECT>
* 1: Turret <ARRAY>
* 2: Magazine that is carryable <STRING>
*
* Return Value:
* Vehicle Magazine <STRING>

View File

@ -36,13 +36,7 @@ private _containerMagazineCount = [];
{
_x params ["_xMag", "_xTurret", "_xAmmo"];
private _carryMag = GVAR(vehicleMagCache) get _xMag;
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);
};
private _carryMag = _xMag call FUNC(getCarryMagazine);
if (_carryMag != "") then {
if ((_desiredAmmo > 0) && {_loadedMagazineInfo isEqualTo []}) then {
private _loadedMagAmmo = _desiredAmmo min _xAmmo;
@ -74,6 +68,15 @@ TRACE_1("Remove all loaded magazines",_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 {
TRACE_1("saving extra mags to container",_containerMagazineCount);

View File

@ -18,6 +18,12 @@ class CfgVehicles {
GVAR(canDrag) = 0;
};
// Invisible Target Soldier
class TargetSoldierBase: StaticWeapon {
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class StaticMortar;
class Mortar_01_base_F: StaticMortar {
GVAR(canCarry) = 1;

View File

@ -824,7 +824,7 @@
<Russian>Штраф не-специалистам?</Russian>
<Italian>Punisci non-specialisti?</Italian>
<Japanese>非特技兵へ足かせ</Japanese>
<Korean>-전문가에 불이익을 줍니까?</Korean>
<Korean>비전문가에 불이익을 줍니까?</Korean>
<Chinesesimp>惩罚非专业人士?</Chinesesimp>
<Chinese>折磨非專業人員?</Chinese>
</Key>
@ -840,7 +840,7 @@
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
<Italian>Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si</Italian>
<Japanese>非特技兵は動作完了までの時間を増加させますか? 標準: 有効化</Japanese>
<Korean>-전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예</Korean>
<Korean>비전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예</Korean>
<Chinesesimp>增加非专业人员相关操作的时间? 预设:是</Chinesesimp>
<Chinese>增加非專業人員相關操作的時間? 預設: 是</Chinese>
</Key>
@ -856,7 +856,7 @@
<Russian>Взрыв при разминир.?</Russian>
<Italian>Fai esplodere quando disarmato?</Italian>
<Japanese>解除中に爆発</Japanese>
<Korean>해제시 폭발합니까?</Korean>
<Korean>해제 시 폭발합니까?</Korean>
<Chinesesimp>拆除时引爆?</Chinesesimp>
<Chinese>拆除時引爆?</Chinese>
</Key>
@ -872,7 +872,7 @@
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian>
<Italian>Abilita alcuni esplosivi per esplosione al disarmo? Default: Si</Italian>
<Japanese>特定の爆発物を解除中に爆発させるかどうかを設定できます。? 標準: 有効化</Japanese>
<Korean>특정 폭발물이 해제시 폭발하게 합니까? 기본설정: 예</Korean>
<Korean>특정 폭발물이 해제 시 폭발하게 합니까? 기본설정: 예</Korean>
<Chinesesimp>启用后,某些爆炸物会在拆除时引爆? 预设:是</Chinesesimp>
<Chinese>啟用後, 某些炸彈會在拆除時引爆? 預設: 是</Chinese>
</Key>

View File

@ -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 Logic;
class Module_F: Logic {
@ -221,7 +208,9 @@ class CfgVehicles {
GVAR(friesAttachmentPoint)[] = {0.035, 2.2, -0.15};
GVAR(onPrepare) = QFUNC(onPrepareCommon);
GVAR(onCut) = QFUNC(onCutCommon);
EQUIP_FRIES_ATTRIBUTE;
class Attributes {
EQUIP_FRIES_ATTRIBUTE;
};
};
class Heli_Transport_02_base_F: Helicopter_Base_H {
GVAR(enabled) = 1;
@ -254,14 +243,19 @@ class CfgVehicles {
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesGantryReverse";
GVAR(friesAttachmentPoint)[] = {-1.04, 2.5, -0.34};
EQUIP_FRIES_ATTRIBUTE;
class Attributes {
EQUIP_FRIES_ATTRIBUTE;
};
};
class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
GVAR(enabled) = 2;
GVAR(ropeOrigins)[] = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesGantry";
GVAR(friesAttachmentPoint)[] = {1.07, 2.5, -0.5};
EQUIP_FRIES_ATTRIBUTE;
class Attributes {
EQUIP_FRIES_ATTRIBUTE;
};
};
class Heli_Transport_04_base_F: Helicopter_Base_H {
class UserActions;

View File

@ -16,6 +16,7 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#include "script_macros.hpp"
#define DEFAULT_ROPE_LENGTH 34.5

View 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; \
}

View File

@ -83,7 +83,7 @@
<Hungarian>Terepi adagok engedélyezése / letiltása</Hungarian>
<Italian>Abilita / disabilita le razioni di campo</Italian>
<Japanese>フィールド レーションを有効/無効化します</Japanese>
<Korean>전투식량 활성화/비활서오하</Korean>
<Korean>전투식량 활성화/비활성화</Korean>
<Polish>Włącz / wyłącz racje polowe</Polish>
<Portuguese>Ativar / Desativar rações de campo</Portuguese>
<Russian>Включение/отключение жажды и голода</Russian>
@ -100,7 +100,7 @@
<Hungarian>Víz nélküli idő</Hungarian>
<Italian>Tempo senza acqua</Italian>
<Japanese>水なしの時間</Japanese>
<Korean>물 없이 생존 시간</Korean>
<Korean>물 없이 생존 가능 시간</Korean>
<Polish>Czas bez wody</Polish>
<Portuguese>Tempo sem água</Portuguese>
<Russian>Время без воды</Russian>
@ -117,7 +117,7 @@
<Hungarian>Mennyi ideig kell egy egység víz nélkül (óra)</Hungarian>
<Italian>Mennyi ideig kell egy egység víz nélkül (óra)</Italian>
<Japanese>ユニットが水なしでどれくらい時間を過ごすことができるか (一時間単位)</Japanese>
<Korean>물을 안마시고 얼마나 생존 할 수 있는지 정합니다 (시간)</Korean>
<Korean>물을 안 마시고 얼마나 생존할 수 있는지 정합니다 (시간)</Korean>
<Polish>Jak długo jednostka powinna przetrwać bez wody (godziny)</Polish>
<Portuguese>Quanto tempo uma unidade pode passar sem água (horas)</Portuguese>
<Russian>Как долго персонаж может обходиться без воды (часы)</Russian>
@ -134,7 +134,7 @@
<Hungarian>Élelmiszer nélkül</Hungarian>
<Italian>Tempo senza cibo</Italian>
<Japanese>食べ物なしの時間</Japanese>
<Korean>밥 없이 생존 시간</Korean>
<Korean>밥 없이 생존 가능 시간</Korean>
<Polish>Czas bez jedzenia</Polish>
<Portuguese>Tempo sem comida</Portuguese>
<Russian>Время без еды</Russian>
@ -151,7 +151,7 @@
<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>
<Japanese>ユニットが食糧なしでどれくらい時間を過ごすことができるか (一時間単位)</Japanese>
<Korean>밥을 안먹고 얼마나 생존할 수 있는지 정합니다 (시간)</Korean>
<Korean>밥을 안 먹고 얼마나 생존할 수 있는지 정합니다 (시간)</Korean>
<Polish>Jak długo jednostka powinna przetrwać bez jedzenia (godziny)</Polish>
<Portuguese>Quanto tempo uma unidade pode ir sem alimentos (horas)</Portuguese>
<Russian>Как долго персонаж может обходиться без пищи (часы)</Russian>
@ -250,7 +250,7 @@
<Japanese>マップに存在するオブジェクトを水源として動作するよう設定できます。</Japanese>
<German>Aktiviert Wasserquellen-Aktionen für Geländeobjekte.</German>
<Chinesesimp>为地形物体启用水源动作。</Chinesesimp>
<Korean>지형 물체에서 물을 얻는게 가능해집니다.</Korean>
<Korean>지형 물체에서 물을 얻는 게 가능해집니다.</Korean>
</Key>
<Key ID="STR_ACE_Field_Rations_AffectAdvancedFatigue_DisplayName">
<English>Affect Advanced Fatigue</English>
@ -469,7 +469,7 @@
<Polish>Nie ma wody</Polish>
<Russian>Воды больше не осталось</Russian>
<Turkish>Hiç su kalmadı.</Turkish>
<Korean>물이 한방울도 없습니다.</Korean>
<Korean>물이 한 방울도 없습니다.</Korean>
</Key>
<Key ID="STR_ACE_Field_Rations_DrinkFromSource">
<English>Drink From Source</English>
@ -479,7 +479,7 @@
<Turkish>Mataradan Iç</Turkish>
<Japanese>水源から飲む</Japanese>
<Chinesesimp>从水源处喝水</Chinesesimp>
<Korean>수원에서 물마시기</Korean>
<Korean>수원에서 물 마시기</Korean>
</Key>
<Key ID="STR_ACE_Field_Rations_Refill">
<English>Refill</English>
@ -636,7 +636,7 @@
<Hungarian>Fél-teljes vizes palack</Hungarian>
<Italian>Una mezza bottiglia piena d'acqua</Italian>
<Japanese>半分入っているウォーター ボトル</Japanese>
<Korean>절반만 차있는 물병입니다.</Korean>
<Korean>절반만 차 있는 물병입니다.</Korean>
<Polish>Pół butelki z wodą</Polish>
<Portuguese>Uma garrafa de água meia cheia</Portuguese>
<Russian>Половина бутылки с водой</Russian>
@ -738,7 +738,7 @@
<Hungarian>A vízzel töltött kantin</Hungarian>
<Italian>Una mensa riempita per metà di acqua</Italian>
<Japanese>半分入っている水筒</Japanese>
<Korean>반이 차있는 수통입니다</Korean>
<Korean>반이 차 있는 수통입니다</Korean>
<Polish>Manierka w połowie wypełniona wodą</Polish>
<Portuguese>Uma meia cantina cheia de água</Portuguese>
<Russian>Наполовину заполненая водой фляга</Russian>
@ -895,7 +895,7 @@
<Hungarian>Egy krémes paradicsomleveset tartalmazó MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente zuppa di pomodoro crema. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
<Japanese>クリーム トマト スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Korean>크림 토마토 수프가 들어있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Korean>크림 토마토 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierające śmietanową zupę pomidorową. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt</Polish>
<Portuguese>Uma MRE contendo Cream Tomato Soup. Misture com água e calor para melhor efeito</Portuguese>
<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>
<Italian>Un MRE contenente zuppa di pollo. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
<Japanese>チキン スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Korean>치킨 수프가 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Korean>치킨 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<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>
<Russian>Сухой паёк, содержащий сублимированный куриный крем-суп. Перед употреблением растворить в воде и разогреть</Russian>
@ -997,7 +997,7 @@
<Hungarian>Egy MRE, amely Steak és Zöldségeket tartalmaz. Hő a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente bistecche e verdure. Calore per il miglior effetto</Italian>
<Japanese>野菜とステーキの MRE。温めるとなお美味しい</Japanese>
<Korean>스테이크와 채소가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Korean>스테이크와 채소가 들어 있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierający stek i warzywa. Podgrzej dla najlepszego efektu</Polish>
<Portuguese>Um MRE contendo Bife e Legumes. Calor para melhor efeito</Portuguese>
<Russian>Сухой паёк, содержащий стейк с овощами. Перед употреблением рекомендуется разогреть</Russian>
@ -1014,7 +1014,7 @@
<Hungarian>MRE húsgombóc és tészta</Hungarian>
<Italian>MRE Pasta e polpette</Italian>
<Japanese>MRE ミートボールとパスタ</Japanese>
<Korean>MRE 미트볼파스타</Korean>
<Korean>MRE 미트볼 파스타</Korean>
<Polish>MRE Klopsiki i makaron</Polish>
<Portuguese>MRE Macarrão com almôndegas</Portuguese>
<Russian>ИРП Макароны с фрикадельками</Russian>
@ -1031,7 +1031,7 @@
<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>
<Japanese>ミートボールとパスタの MRE。温めるとなお美味しい</Japanese>
<Korean>미트볼과 파스타를 포함한 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Korean>미트볼과 파스타가 들어 있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierające klopsiki i makaron. Podgrzej dla najlepszego efektu</Polish>
<Portuguese>Um MRE contendo Meatballs e Pasta. Calor para melhor efeito</Portuguese>
<Russian>Сухой паёк, содержащий макароны с фрикадельками. Перед употреблением рекомендуется разогреть</Russian>
@ -1108,7 +1108,7 @@
<English>Sunflower Seeds</English>
<German>Sonnenblumenkerne</German>
</Key>
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Descriptione">
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Description">
<English>Roasted And Salted</English>
<German>Geröstet und Gesalzen</German>
</Key>

View File

@ -46,7 +46,7 @@
<Czech>Ukazuje virtuální značku kruhu ve směru, kterým se díváte pro všechny blízké jednotky.</Czech>
<Italian>Punta e mostra un marker virtuale di dove stai guardando alle unità vicine. Può essere tenuto premuto.</Italian>
<Japanese>指差し表記は自ユニットの近くにいる人のみに表記されます。また押しっぱなしにできます。</Japanese>
<Korean>당신이 보는것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른채로 유지할 수 있습니다.</Korean>
<Korean>당신이 보는 것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른 채로 유지할 수 있습니다.</Korean>
<Chinesesimp>当按下此按键后,你附近的单位即可看见一个虚拟图示,标明你正在指向的位置。此按键可以被按住来持续显示。</Chinesesimp>
<Chinese>當按下此按鍵後,你附近的單位即可看見一個虛擬圖示,標明你正在指向的位置。此按鍵可以被按住來持續顯示。</Chinese>
<Turkish>Işaretleyince nereye baktığınıza dair sanal bir daire gösterir. Basılı da tutulabilir. </Turkish>
@ -88,18 +88,22 @@
<Key ID="STR_ACE_Finger_sizeCoef_displayName">
<English>Visual Marker Size Coefficient</English>
<German>Visueller Markergrößenkoeffizient</German>
<Korean>보이는 마커 크기 계수</Korean>
</Key>
<Key ID="STR_ACE_Finger_sizeCoef_description">
<English>Adjusts the size of the visual marker.</English>
<German>Passt die Größe der visuellen Markierung an.</German>
<Korean>눈에 보이는 마커의 크기를 조정합니다.</Korean>
</Key>
<Key ID="STR_ACE_Finger_proximityScaling_displayName">
<English>Proximity Scaling</English>
<German>Näherungsskalierung</German>
<Korean>근접 스케일링</Korean>
</Key>
<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>
<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 ID="STR_ACE_Finger_indicatorForSelf_name">
<English>Show pointing indicator to self</English>
@ -181,7 +185,7 @@
<Czech>Akce "ukázat prstem na"</Czech>
<Italian>Azione "punta il dito a"</Italian>
<Japanese>"指差し"キー</Japanese>
<Korean>"손가락으로 가리키기"행동</Korean>
<Korean>"손가락으로 가리키기" 행동</Korean>
<Chinesesimp>使"手指指向在"</Chinesesimp>
<Chinese>使"手指指向在"</Chinese>
<Turkish>Animasyon "Parmakla Gösterme"</Turkish>
@ -198,7 +202,7 @@
<Czech>Ukazuje virtuální značku kruhu ve směru, kterým se díváte pro všechny blízké jednotky.</Czech>
<Italian>Punta e mostra un marker virtuale di dove stai guardando alle unità vicine. Può essere tenuto premuto.</Italian>
<Japanese>指差し表記は自ユニットの近くにいる人のみに表記されます。また押しっぱなしにできます。</Japanese>
<Korean>당신이 보는것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른채로 유지할 수 있습니다.</Korean>
<Korean>당신이 보는 것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른 채로 유지할 수 있습니다.</Korean>
<Chinesesimp>当按下此按键后,你附近的单位即可看见一个虚拟图示,标明你正在指向的位置。此按键可以被按住来持续显示。</Chinesesimp>
<Chinese>當按下此按鍵後,你附近的單位即可看見一個虛擬圖示,標明你正在指向的位置。此按鍵可以被按住來持續顯示。</Chinese>
<Turkish>Işaretleyince nereye baktığınıza dair sanal bir daire gösterir. Basılı da tutulabilir. </Turkish>

View File

@ -28,7 +28,7 @@
<Italian>Torcia con filtro rosso. Da usare in mappa.</Italian>
<French>Lampe torche avec un filtre rouge. Pour utilisation sur carte.</French>
<Japanese>赤色フィルタ付きのフラッシュライト。地図上でつかいます。</Japanese>
<Korean>빨간색 필터가 달린 손전등입니다. 지도를 비출때 씁니다.</Korean>
<Korean>빨간색 필터가 달린 손전등입니다. 지도를 비출 때 씁니다.</Korean>
<Chinesesimp>拥有红色滤光片的手电筒。用来照亮地图。</Chinesesimp>
<Chinese>擁有紅色濾光片的手電筒。用來照亮地圖。</Chinese>
<Turkish>Kırmızı filtreli el feneri. Harita üzerin de kullanım için.</Turkish>
@ -92,7 +92,7 @@
<Italian>Torcia con filtro rosso. Da usare in mappa.</Italian>
<French>Lampe torche avec un filtre rouge. Pour utilisation sur carte.</French>
<Japanese>赤色フィルタ付きのフラッシュライト。地図上で使用します。</Japanese>
<Korean>빨간색 필터가 달린 손전등입니다. 지도를 비출때 씁니다.</Korean>
<Korean>빨간색 필터가 달린 손전등입니다. 지도를 비출 때 씁니다.</Korean>
<Chinesesimp>拥有红色滤光片的手电筒。用来照亮地图。</Chinesesimp>
<Chinese>擁有紅色濾光片的手電筒。用來照亮地圖。</Chinese>
<Turkish>Kırmızı filtreli el feneri. Harita üzerin de kullanım için.</Turkish>

View File

@ -13,7 +13,7 @@
<Russian>Пламегаситель (6,5 мм)</Russian>
<Spanish>Bocacha (6,5 mm)</Spanish>
<Japanese>消炎器 (6.5 mm)</Japanese>
<Korean>소염기 (6.5 mm)</Korean>
<Korean>소염기 (6.5mm)</Korean>
<Chinesesimp>消焰器6.5 mm</Chinesesimp>
<Chinese>消光器 (6.5 mm)</Chinese>
<Turkish>Flash Suppressor (6.5 mm)</Turkish>
@ -30,7 +30,7 @@
<Russian>Пламегаситель (7,62 мм)</Russian>
<Spanish>Bocacha (7,62 mm)</Spanish>
<Japanese>消炎器 (7.62 mm)</Japanese>
<Korean>소염기 (7.62 mm)</Korean>
<Korean>소염기 (7.62mm)</Korean>
<Chinesesimp>消焰器7.62 mm</Chinesesimp>
<Chinese>消光器 (7.62 毫米)</Chinese>
<Turkish>Flash Suppressor (7.62 mm)</Turkish>
@ -47,7 +47,7 @@
<Russian>Пламегаситель (5,56 мм)</Russian>
<Spanish>Bocacha (5,56 mm)</Spanish>
<Japanese>消炎器 (5.56 mm)</Japanese>
<Korean>소염기 (5.56 mm)</Korean>
<Korean>소염기 (5.56mm)</Korean>
<Chinesesimp>消焰器5.56 mm</Chinesesimp>
<Chinese>消光器 (5.56 mm)</Chinese>
<Turkish>Flash Suppressor (5.56 mm)</Turkish>
@ -81,7 +81,7 @@
<Russian>Пламегаситель (9 мм)</Russian>
<Spanish>Bocacha (9 mm)</Spanish>
<Japanese>消炎器 (9 mm)</Japanese>
<Korean>소염기 (9 mm)</Korean>
<Korean>소염기 (9mm)</Korean>
<Chinesesimp>消焰器9 mm</Chinesesimp>
<Chinese>消光器 (9 毫米)</Chinese>
<Turkish>Flash Suppressor (9 mm)</Turkish>
@ -115,7 +115,7 @@
<Russian>Пламегаситель (9,3 мм)</Russian>
<Spanish>Bocacha (9,3 mm)</Spanish>
<Japanese>消炎器 (9.3 mm)</Japanese>
<Korean>소염기 (9.3 mm)</Korean>
<Korean>소염기 (9.3mm)</Korean>
<Chinesesimp>消焰器9.3 mm</Chinesesimp>
<Chinese>消光器 (9.3 毫米)</Chinese>
<Turkish>Flash Suppressor (9.3 mm)</Turkish>

View File

@ -142,7 +142,7 @@
<Polish>Nigdy</Polish>
<Russian>Не показывать никогда</Russian>
<Turkish>Asla Gösterme</Turkish>
<Korean>안보여줌</Korean>
<Korean> 보여줌</Korean>
</Key>
<Key ID="STR_ACE_Fortify_settingHintHasTool">
<English>Has fortify tool</English>

View File

@ -61,7 +61,7 @@
<Russian>Симуляция обломков</Russian>
<Italian>Simulazione Spalling</Italian>
<Japanese>剥離シミュレーション</Japanese>
<Korean>조각 시뮬레이션</Korean>
<Korean>탄환파편 시뮬레이션</Korean>
<Chinesesimp>模拟剥落</Chinesesimp>
<Chinese>模擬剝落</Chinese>
</Key>
@ -77,7 +77,7 @@
<Russian>Включить симуляцию обломков ACE</Russian>
<Italian>Abilita la Simulazione Spalling di ACE</Italian>
<Japanese>ACE 剥離シミュレーションを有効化</Japanese>
<Korean>ACE 조각 시뮬레이션을 적용합니다.</Korean>
<Korean>ACE 탄환파편 시뮬레이션을 적용합니다.</Korean>
<Chinesesimp>启用 ACE 模拟剥落</Chinesesimp>
<Chinese>啟用ACE模擬剝落</Chinese>
</Key>
@ -139,7 +139,7 @@
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 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 (&gt;200 proiettili in aria contemporaneamente)</Italian>
<Japanese>時間が許すかぎり、破片と剥離システムの最大数を設定できます。設定数以上の弾丸が発射された場合、それは対象になりません。もし多い弾数による FPS の低下を望まない場合は、低い数へ設定にします。( &amp;gt;一度に空中内で200発)</Japanese>
<Korean>이 설정은 조각 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) </Korean>
<Korean>이 설정은 탄환파편 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올 경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하)</Korean>
<Chinesesimp>设定在指定时间内,系统最大可追踪的破片粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( &gt;一次200颗粒子</Chinesesimp>
<Chinese>設定在指定時間內,系統最大可追蹤的碎片/剝落粒子數量。如有更多的碎片在這之後產生,這些粒子將不會被追蹤。如果你想要維持好的幀數,此設定勿調的過高。( &gt;一次200顆粒子)</Chinese>
</Key>
@ -155,7 +155,7 @@
<Russian>Макс. количество снарядов за кадр</Russian>
<Italian>Numero massimo di proiettili per Frame</Italian>
<Japanese>フレームごとの最大弾頭数</Japanese>
<Korean>프레임당 최대 발사체 수</Korean>
<Korean>프레임 당 최대 발사체 수</Korean>
<Chinesesimp>每帧最大破片粒子数量</Chinesesimp>
<Chinese>每一幀數(FPS)最大碎片/剝落粒子數量</Chinese>
</Key>
@ -187,7 +187,7 @@
<Russian>(Только для одиночной игры) Отслеживаение/отладка осколков</Russian>
<Italian>(Solo SP) Debug Tracciamento Frag/Spall</Italian>
<Japanese>(SP のみ) 破片/剥離のデバッグ用表示</Japanese>
<Korean>(싱글플레이 전용) 조각/파편 디버그 추적화</Korean>
<Korean>(싱글플레이 전용) 탄환파편/파편 디버그 추적화</Korean>
<Chinesesimp>(仅单人)追踪显示破片粒子</Chinesesimp>
<Chinese>(僅在單人模式) 碎片/剝落除錯追蹤</Chinese>
</Key>
@ -205,7 +205,7 @@
<Japanese>(SP のみ) ミッションとエディタの再起動が必要です。有効化すると、シングルプレイでのみ破片と剥離の弾頭が見えるようになります。</Japanese>
<Chinesesimp>(仅单人)激活后,只有在单人模式下才可观察到破片粒子的移动轨迹。</Chinesesimp>
<Chinese>(僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡</Chinese>
<Korean>(SP 전용) 임무 / 편집자가 다시 시작해야합니다. SP 게임 모드에서만 조각화 및 스 폴링 라운드의 시각적 추적을 가능하게합니다.</Korean>
<Korean>(SP 전용) 임무 / 편집자가 다시 시작해야합니다. SP 게임 모드에서만 파편화 및 탄환파편의 시각적 추적을 가능하게 합니다.</Korean>
</Key>
</Package>
</Project>

View File

@ -342,7 +342,7 @@
<Portuguese>Atalhos + Menu de Interação</Portuguese>
<Russian>Клавиши + Меню взаимодействия</Russian>
<Japanese>キー操作とインタラクション メニュ</Japanese>
<Korean>단축키및 상호작용 메뉴</Korean>
<Korean>단축키 및 상호작용 메뉴</Korean>
<Chinesesimp>键盘 + 互动菜单</Chinesesimp>
<Chinese>鍵盤 + 互動選單</Chinese>
<Turkish>Tuş Atamaları + Etkileşim Menüsü</Turkish>

View File

@ -45,7 +45,7 @@
<Portuguese>Mostrar efeitos de óculos em Terceira Pessoa</Portuguese>
<Italian>Attiva l'effetto degli occhiali in terza persona</Italian>
<Japanese>三人称視点でもゴーグルによる効果を表示</Japanese>
<Korean>3인칭시에도 고글 효과를 보이게 합니다</Korean>
<Korean>3인칭 시에도 고글 효과를 보이게 합니다</Korean>
<Chinesesimp>在第三人称视角显示护目镜效果</Chinesesimp>
<Chinese>在第三人稱視角顯示護目鏡效果</Chinese>
<Turkish>Gözlük efektlerini 3. şahıs görünümün de göster</Turkish>

View File

@ -168,7 +168,7 @@
<Turkish>CTS 7290 9- Flaş Bombası</Turkish>
<Russian>CTS 7290-9 Светошумовая граната</Russian>
<Spanish>Granada aturdidora CTS 7290 9-explosiones</Spanish>
<Korean>CTS 7290 9- 섬광 수류탄</Korean>
<Korean>CTS 7290 9-bang 섬광 수류탄</Korean>
</Key>
<Key ID="STR_ACE_Grenades_CTS9_NameShort">
<English>CTS 7290-9</English>
@ -429,7 +429,7 @@
<Russian>Зажигательная граната используется для уничтожения оружия, боеприпасов и прочего оборудования.</Russian>
<Japanese>焼夷手榴弾は武器や弾薬箱などの装備を破壊する為に使われます。</Japanese>
<Polish>Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu.</Polish>
<Korean>소이 수류탄은 무기나 탄약 그리고 장비를 파괴할때 쓰입니다.</Korean>
<Korean>소이 수류탄은 무기나 탄약 그리고 장비를 파괴할 때 쓰입니다.</Korean>
<French>Grenade incendiaire utilisée pour détruire des armes, des munitions et d'autres équipements.</French>
<Italian>Granata incendiaria usata per distruggere armi, munizioni e altri equipaggiamenti.</Italian>
<Chinesesimp>燃烧手榴弹是用来摧毁武器,弹药以及其他装备的好帮手。</Chinesesimp>
@ -566,7 +566,7 @@
<Polish>Rzucany pakiet ładunków wybuchowych. 7 sekundowy zapalnik</Polish>
<German>Werfbare Rucksackladung. 7 Sekunden Zeitzünder</German>
<Chinesesimp>一个可投掷的炸药包。7秒定时引信</Chinesesimp>
<Korean>던질 수 있는 폭파 장약 입니다. 던지고 7초 후에 터집니다</Korean>
<Korean>던질 수 있는 폭파 장약입니다. 던지고 7초 후에 터집니다</Korean>
</Key>
<Key ID="STR_ACE_Grenades_DemoCharge_Remote_Mag_Throwable">
<English>Explosive Charge (Throwable)</English>
@ -588,7 +588,7 @@
<Polish>Rzucany ładunkek wybuchowy. 7 sekundowy zapalnik</Polish>
<German>Werfbare Sprengladung. 7 Sekunden Zeitzünder</German>
<Chinesesimp>一个可投掷的炸药块。7秒定时引信</Chinesesimp>
<Korean>던질 수 있는 폭파 블럭 입니다. 던지고 7초 후에 터집니다</Korean>
<Korean>던질 수 있는 폭파 블럭입니다. 던지고 7초 후에 터집니다</Korean>
</Key>
<Key ID="STR_ACE_Grenades_Convert_Fuse">
<English>Convert to short fuse</English>

View File

@ -99,7 +99,7 @@
<Spanish>Permitir interacción para intercambiar el arma principal y el arma guardada.</Spanish>
<German>Erlaube den direkten Wechsel von Primärer und verstauter Waffe über das Interaktionsmenü.</German>
<Chinesesimp>允许互动直接切换主武器和存储武器。</Chinesesimp>
<Korean>보관중인 무기와 주무기와 바로 바꾸는것을 허용합니다.</Korean>
<Korean>보관 중인 무기와 주무기와 바로 바꾸는 것을 허용합니다.</Korean>
</Key>
<Key ID="STR_ACE_Gunbag_OffGunbag">
<English>Get weapon out of gunbag</English>

View File

@ -125,7 +125,7 @@
<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>
<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>
<French>Archive les statistiques de transfert et de (dé)connections du Headless Client dans le RPT. (Défaut: Non)</French>
<Chinesesimp>记录 Headless 客户端间的转换数量与连线/断线等记录到 RPT 报告档中。(预设:关闭)</Chinesesimp>
@ -151,7 +151,7 @@
<Chinese>裝備傳輸用於試著暫時應付單位透過無頭客戶端傳輸時所導致裸裝之問題。</Chinese>
<Chinesesimp>装备转移用于试着暂时应付单位透过 Headless 客户端传输时所导致裸装之问题。</Chinesesimp>
<Polish>Transfer Wyposażenia jednostek usiłuje uniknąć problemu z nagimi jednostkami po transferze do Headless Clienta</Polish>
<Korean>헤드리스 클라이언트로 넘어갈때 유닛이 벌거벗고 있는 상황을 해결하기 위해 로드아웃을 유닛에 전송합니다.</Korean>
<Korean>헤드리스 클라이언트로 넘어갈 때 유닛이 벌거벗고 있는 상황을 해결하기 위해 로드아웃을 유닛에 전송합니다.</Korean>
</Key>
<Key ID="STR_ACE_Headless_TransferLoadoutCurrent">
<English>Current Loadout</English>
@ -193,7 +193,7 @@
<Chinesesimp>禁止转换黑名单中的 AI 单位/群组到 Headless 客户端上。此功能对玩家单位无用。</Chinesesimp>
<Chinese>禁止轉換黑名單中的AI單位/群組到無頭客戶端上。此功能對玩家單位無用。</Chinese>
<Italian>Disabilita il trasferimento di questa unità/gruppo di AI negli Headless Client. Non ha effetto sui giocatori.</Italian>
<Korean>이 AI 유닛 / 그룹을 헤드리스 클라이언트로 전송하지 못하도록합니다. 플레이어 유닛에는 영향을주지 않습니다.</Korean>
<Korean>이 AI 유닛/그룹을 헤드리스 클라이언트로 전송하지 못하도록 합니다. 플레이어 유닛에는 영향을 주지 않습니다.</Korean>
<Polish>Wyłącza transfer tych jednostek/grup AI do Headless Clients. Bez efektu na jednostkach gracza.</Polish>
<Russian>Отключает передачу управления этого юнита/группы Headless клиентам. Не влияет на юниты игроков.</Russian>
</Key>

View File

@ -145,7 +145,7 @@
<Portuguese>Remove o efeito de zunido quando o jogador recebe dano na audição</Portuguese>
<Russian>Убирает эффект звона в ушах, когда игрок получает повреждение слуха</Russian>
<Japanese>プレイヤーの聴覚が損傷したら耳鳴りの効果を削除します</Japanese>
<Korean>플레이어가 청력손실을 입을때 생기는 이명현상을 제거합니다.</Korean>
<Korean>플레이어가 청력손실을 입을 때 생기는 이명현상을 제거합니다.</Korean>
<Chinesesimp>关闭耳鸣效果时,就算玩家受到相当程度的听力伤害,也不会造成耳鸣效果</Chinesesimp>
<Chinese>關閉耳鳴效果時,就算玩家受到相當程度的聽力傷害, 也不會造成耳鳴效果</Chinese>
<Czech>Odstranit tinitus když hráč utrpí poškození sluchu</Czech>
@ -269,7 +269,7 @@
<Spanish>Agregar el item `ACE_EarPlugs` a todas las unidades equipadas con armas muy ruidosas. Desactivar si quieren utilizarse equipamientos personalizados.</Spanish>
<French>Ajoute l'objet `Ace_EarPlugs` à toutes les unités ayant des armes bruyantes. Peut être désactivé si de l'équipement personnalisé est utilisé.</French>
<Japanese>全ユニットへ`ACE_EarPlugs`アイテムを持たせます。これは変更された武装で無効化できます。</Japanese>
<Korean>무기를 가지고 있는 모든 인원에게 'ACE_EarPlugs'를 지급합니다. 임의의 장비를 사용시 비활성화 할 수 있습니다.</Korean>
<Korean>무기를 가지고 있는 모든 인원에게 'ACE_EarPlugs'를 지급합니다. 임의의 장비를 사용시 비활성화할 수 있습니다.</Korean>
<Chinesesimp>增加`ACE_EarPlugs`物品给拥有巨大噪音武器的单位。当你想自定装备时,此功能可被关闭。</Chinesesimp>
<Chinese>增加`ACE_EarPlugs`物品給擁有巨大噪音武器的單位。當你想自定裝備時,此功能可被關閉。</Chinese>
</Key>
@ -331,7 +331,7 @@
<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>
<Spanish>Volumen cuando se utilizan protectores auditivos.</Spanish>
<Korean>귀마개 사용시 볼륨입니다.</Korean>
<Korean>귀마개 사용 볼륨입니다.</Korean>
</Key>
<Key ID="STR_ACE_Hearing_unconsciousnessVolume_DisplayName">
<English>Unconscious Volume</English>

View File

@ -48,7 +48,7 @@
<Polish>Rakieta naprowadzana laserowo z głowicą odłamkową</Polish>
<German>Halbaktive Laser-Zielsuchrakete mit metallverstärktem Antipersonen-Gefechtskopf</German>
<Chinesesimp>金属增强人员杀伤弹头半主动激光制导导弹</Chinesesimp>
<Korean>반능동 레이저 유도 미사일로 대인 금속 강화 탄두가 탑재되었습니다.</Korean>
<Korean>반능동 레이저 유도 미사일로 대인 금속 강화 탄두가 탑재하고 있습니다.</Korean>
</Key>
</Package>
</Project>

View File

@ -7,7 +7,7 @@
<Chinese>觸發倒下前最低需受到多少傷害</Chinese>
<Chinesesimp>触发倒下前最低需受到多少伤害</Chinesesimp>
<Japanese>崩れ落ちるまでの最低損傷値</Japanese>
<Korean>방아쇠를 당기는 최소한의 피해</Korean>
<Korean>넘어질 때 발생하는 최소 피해량</Korean>
<German>Mindestschaden, um Sturz auszulösen</German>
<Polish>Minimalne obrażenie, żeby aktywować spadanie</Polish>
<Russian>Минимальный урон для активации падения</Russian>

View File

@ -13,7 +13,7 @@
<Italian>Mostra sempre il cursore delle autointerazioni</Italian>
<Portuguese>Sempre mostrar cursor para interação pessoal</Portuguese>
<Japanese>セルフ インタラクションへ常にカーソルを表示</Japanese>
<Korean>자기상호작용시 항상 커서를 보이기</Korean>
<Korean>자기상호작용 시 항상 커서를 보이기</Korean>
<Chinesesimp>自我互动时永远显示光标</Chinesesimp>
<Chinese>自我互動時永遠顯示游標</Chinese>
<Turkish>Kendi kendine etkileşim için daima imleci göster</Turkish>
@ -30,7 +30,7 @@
<Hungarian>Mindig legyen a cselekvés kurzorja látható</Hungarian>
<Portuguese>Sempre mostrar cursor para interação</Portuguese>
<Japanese>インタラクションへ常にカーソルを表示</Japanese>
<Korean>상호작용시 항상 커서를 보이기</Korean>
<Korean>상호작용 시 항상 커서를 보이기</Korean>
<Chinesesimp>互动时永远显示光标</Chinesesimp>
<Chinese>互動時永遠顯示游標</Chinese>
<Turkish>Etkileşim için her zaman imleci göster</Turkish>
@ -234,7 +234,7 @@
<Portuguese>Manter o cursor centralizado e mover o menu de opções. Útil caso o tamanho da tela seja limitado.</Portuguese>
<Italian>Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo.</Italian>
<Japanese>常にカーソルを中央へ表示させ、オプション メニューが移動します。画面の大きさが制限されている時に使いやすくなります。</Japanese>
<Korean>커서를 항상 가운데에 두고 메뉴를 움직입니다. 화면의 크기가 제한되있을때 유용합니다.</Korean>
<Korean>커서를 항상 가운데에 두고 메뉴를 움직입니다. 화면의 크기가 제한되있을 때 유용합니다.</Korean>
<Chinesesimp>保持光标在中心点并平移周遭的选项菜单。这对在屏幕尺寸有限的玩家很有用!</Chinesesimp>
<Chinese>保持游標在中心點並平移周遭的選項選單。這對在螢幕尺寸有限的玩家很有用!</Chinese>
<Turkish>İmleci ortalanmış halde tutar ve seçenek menüsünü kaydırır. Ekran boyutu sınırlıysa kullanışlıdır.</Turkish>
@ -251,7 +251,7 @@
<Hungarian>Cselekvés végrehajtása a menügomb elengedésekor</Hungarian>
<Italian>Esegui l'azione quando rilasci il tasto menu</Italian>
<Japanese>メニュー キーを離した時に動作を実行</Japanese>
<Korean>메뉴키를 놓을때 행동하기</Korean>
<Korean>메뉴 키를 놓을 때 행동하기</Korean>
<Chinesesimp>当放开菜单键后就执行动作</Chinesesimp>
<Chinese>當放開選單鍵後就執行動作</Chinese>
<Turkish>Menü tuşunu bırakırken işlem yap</Turkish>
@ -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>
<Italian>Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.</Italian>
<Japanese>文字への影を設定します。縁取りは設定された影の色を無視します。</Japanese>
<Korean>문자의 그림자를 조절하는것을 가능케합니다. 외각선은 임의의 그림자색을 무시합니다.</Korean>
<Korean>문자의 그림자를 조절하는 것을 가능케 합니다. 외곽선은 임의의 그림자색을 무시합니다.</Korean>
<Chinesesimp>允许控制文字阴影。轮廓部分则会忽略自定义的阴影颜色。</Chinesesimp>
<Chinese>允許控制文字陰影。輪廓部分則會忽略自定義的陰影顏色</Chinese>
<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>
<Italian>Contorno</Italian>
<Japanese>縁取り</Japanese>
<Korean></Korean>
<Korean></Korean>
<Chinesesimp>只显示轮廓</Chinesesimp>
<Chinese>只顯示輪廓</Chinese>
<Turkish>Dış Çizgi</Turkish>
@ -353,7 +353,7 @@
<Russian>Размыть фон, пока открыто меню взаимодействия.</Russian>
<Italian>Sfoca lo sfondo mentre il Menù Interazioni è aperto.</Italian>
<Japanese>インタラクション メニューを開いたとき、背景にボケを与えます。</Japanese>
<Korean>상호작용 메뉴가 열릴시 배경을 흐릿하게 처리합니다.</Korean>
<Korean>상호작용 메뉴가 열릴 시 배경을 흐릿하게 처리합니다.</Korean>
<Chinesesimp>当互动菜单开启时,模糊背景画面。</Chinesesimp>
<Chinese>當互動選單開啟時,模糊背景畫面</Chinese>
<Turkish>Etkileşim menüsü açıkken arka planı bulanıklaştırın.</Turkish>
@ -421,7 +421,7 @@
<Russian>Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах)</Russian>
<Italian>Aggiunge azioni interattive per l'apertura delle porte e piazzamento scale su edifici. (Nota: C'è un costo in performance quando si apre il Menù Interazioni, soprattutto in città)</Italian>
<Japanese>建物にある扉の開閉やはしごの昇降といった動作をインタラクションへ追加します。(街などでインタラクション メニューを開くと動作が低下します)</Japanese>
<Korean>건물의 문을 열거나 사다리에 오르는 상호작용 행동을 추가합니다. (주의: 상호작용 메뉴를 열경우 성능하락이 있을 수 있음, 특히 마을 내부에서)</Korean>
<Korean>건물의 문을 열거나 사다리에 오르는 상호작용 행동을 추가합니다. (주의: 상호작용 메뉴를 열 경우 성능하락이 있을 수 있음, 특히 마을 내부에서)</Korean>
<Chinesesimp>增加互动菜单的功能在可开启的门与建筑物的梯子上。(注意:此功能有可能会降低系统效能,特别是在城镇区更明显)</Chinesesimp>
<Chinese>增加互動選單的功能在可開啟的門與建築物的梯子上。(注意: 此功能有可能會降低系統效能,特別是在城鎮區更明顯)</Chinese>
<Turkish>Binalara kapıları açmak ve merdivenleri monte etmek için etkileşim eylemleri ekler. (Not: Etkileşim menüsünü açarken, özellikle şehirlerde bir performansı etkiler)</Turkish>
@ -471,7 +471,7 @@
<Japanese>ホバーで子アクションを表示した時に出るメニューのアニメーション速度を早くしたり遅くしたりできます</Japanese>
<Chinesesimp>使菜单的动画速度更快,并减少子选项显现出来的时间</Chinesesimp>
<Chinese>使選單的動畫速度更快,並減少子選項顯現出來的時間</Chinese>
<Korean>상호 작용을 표시하기 위해 메뉴 애니메이션을 빠르게 만들고 마우스를 가져 오는 데 필요한 시간을 줄입니다.</Korean>
<Korean>상호작용을 표시하기 위해 메뉴 애니메이션을 빠르게 만들고 마우스를 가져오는 데 필요한 시간을 줄입니다.</Korean>
<Turkish>Menü animasyonlarını daha hızlı hale getirir ve alt eylemleri göstermek için fareyle üzerine gelmek için gereken süreyi azaltır</Turkish>
</Key>
<Key ID="STR_ACE_Interact_Menu_SelectorColor">

View File

@ -47,7 +47,7 @@ if ((_house animationPhase (_animations select 0) <= 0) && {_house getVariable [
// Add handle on carrier
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);
_animations pushBack _handle;
};

View File

@ -80,7 +80,7 @@
<Italian>Braccio sinistro</Italian>
<Portuguese>Braço Esquerdo</Portuguese>
<Japanese>左腕</Japanese>
<Korean></Korean>
<Korean>왼팔</Korean>
<Chinesesimp>左手</Chinesesimp>
<Chinese>左手</Chinese>
<Turkish>Sol Kol</Turkish>
@ -97,7 +97,7 @@
<Italian>Braccio destro</Italian>
<Portuguese>Braço Direito</Portuguese>
<Japanese>右腕</Japanese>
<Korean>오른</Korean>
<Korean>오른팔</Korean>
<Chinesesimp>右手</Chinesesimp>
<Chinese>右手</Chinese>
<Turkish>Sağ Kol</Turkish>
@ -114,7 +114,7 @@
<Italian>Gamba sinistra</Italian>
<Portuguese>Perna Esquerda</Portuguese>
<Japanese>左足</Japanese>
<Korean>다리</Korean>
<Korean>왼다리</Korean>
<Chinesesimp>左脚</Chinesesimp>
<Chinese>左腳</Chinese>
<Turkish>Sol Bacak</Turkish>
@ -131,7 +131,7 @@
<Italian>Gamba destra</Italian>
<Portuguese>Perna Direita</Portuguese>
<Japanese>右足</Japanese>
<Korean>오른다리</Korean>
<Korean>오른다리</Korean>
<Chinesesimp>右脚</Chinesesimp>
<Chinese>右腳</Chinese>
<Turkish>Sağ Bacak</Turkish>
@ -233,7 +233,7 @@
<Polish>Odblokuj drzwi</Polish>
<Czech>Odemknout dveře</Czech>
<Japanese>ドアの鍵をあける</Japanese>
<Korean>잠긴문 열기</Korean>
<Korean>잠긴 문 열기</Korean>
<Chinesesimp>解锁门</Chinesesimp>
<Chinese>解鎖門</Chinese>
<Turkish>Kapının Kilidini Aç</Turkish>
@ -331,7 +331,7 @@
<German>Gruppe umbenennen</German>
<Polish>Zmień nazwę grupy</Polish>
<Chinesesimp>小队重命名</Chinesesimp>
<Korean>그룹 명칭 다시짓기</Korean>
<Korean>그룹 명칭 다시 짓기</Korean>
</Key>
<Key ID="STR_ACE_Interaction_RenameGroupAlreadyExists">
<English>This group name is already in use.</English>
@ -687,7 +687,7 @@
<French>Assigner à bleu</French>
<Italian>Assegna al team blu</Italian>
<Japanese>ブルーにする</Japanese>
<Korean>파랑 등록</Korean>
<Korean>파랑 등록</Korean>
<Chinesesimp>指派为蓝组</Chinesesimp>
<Chinese>指派為藍組</Chinese>
<Turkish>Maviye Ata</Turkish>
@ -1055,7 +1055,7 @@
<Italian>Disabilita valutazione negativa</Italian>
<Chinese>關閉負面評價</Chinese>
<Chinesesimp>关闭负面评价</Chinesesimp>
<Korean>부정행위 가중치 사용안함</Korean>
<Korean>부정행위 가중치 사용 안함</Korean>
<Polish>Wyłącz negatywną ocenę</Polish>
<Russian>Отключить отрицательный рейтинг</Russian>
<Portuguese>Desativar avaliação negativa</Portuguese>
@ -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>
<Chinese>玩家是否會收到負面評價? 當本功能開啟時玩家只會接收到正面評價所以當玩家做出擊殺友軍AI、毀壞友軍裝備或殺害小隊夥伴都不會收到負面評價</Chinese>
<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>
<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>
@ -1288,7 +1288,7 @@
<German>Erlaube Gruppenführer das Umbenennen Ihrer Gruppe, wenn der Name nicht bereits vergeben ist.</German>
<Polish>Pozwala liderowi grupy na zmianę jej nazwy, jeżeli ta nazwa nie jest już w użyciu.</Polish>
<Chinesesimp>允许队长在队名未被占用的情况下重命名。</Chinesesimp>
<Korean>그룹 리더가 그룹 이름을 재설정 하는것을 허가합니다.</Korean>
<Korean>그룹 리더가 그룹 이름을 재설정 하는 것을 허가합니다.</Korean>
</Key>
<Key ID="STR_ACE_Interaction_interactWithTerrainObjects_Description">
<English>Warning: can cause some objects to collide with others.</English>
@ -1298,7 +1298,7 @@
<German>Achtung: einige Objekte könnten mit anderen Kollidieren.</German>
<Polish>Uwaga: niektóre obiekty mogą kolidować z innymi.</Polish>
<Chinesesimp>警告:会导致一些物体与其他物体发生碰撞。</Chinesesimp>
<Korean>주의: 물체 끼리 충돌하는 현상이 있을 수 있음.</Korean>
<Korean>주의: 물체끼리 충돌하는 현상이 있을 수 있음.</Korean>
</Key>
</Package>
</Project>

View File

@ -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>
<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>
<Korean>보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케하면서 글씨는 그대로 냅두게 해줍니다.</Korean>
<Korean>보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케 하면서 글씨는 그대로 놔두게 해줍니다.</Korean>
<Chinesesimp>一般来说,物品清单尺寸是由使用者界面来决定的。此选项能让你的物品显示清单更大但不会增加字体大小,此举可增加更多能被显示的描述行数!</Chinesesimp>
<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>

View File

@ -1,5 +1,6 @@
PREP(addLaserTarget);
PREP(addMapHandler);
PREP(dev_drawVisibleLaserTargets);
PREP(findLaserSource);
PREP(handleLaserTargetCreation);

View File

@ -6,6 +6,13 @@ if (hasInterface) then {
GVAR(pfID) = -1;
["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;
["vehicle", LINKFUNC(showVehicleHud), true] call CBA_fnc_addPlayerEventHandler; // only one of these needs the retro flag

View 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;

View File

@ -1,4 +1,4 @@
private _category = [LELSTRING(common,categoryUncategorized), localize "str_a3_itemtype_laser"];
private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(laser)];
[
QGVAR(dispersionCount), "SLIDER",
@ -7,3 +7,15 @@ private _category = [LELSTRING(common,categoryUncategorized), localize "str_a3_i
[0, 5, 2, -1],
1
] 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;

View File

@ -1,6 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<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">
<English>Laser Dispersion Simulation Count</English>
<Japanese>レーザーの分散シミュレート数</Japanese>
@ -68,5 +85,11 @@
<Chinese>雷射 - 循環切換雷射碼 下</Chinese>
<Turkish>Lazer - Çevrim Kodu aşağı</Turkish>
</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>
</Project>

View File

@ -97,7 +97,7 @@
<Hungarian>Lézer</Hungarian>
<Czech>Laser</Czech>
<Portuguese>Laser</Portuguese>
<Japanese>レーザ</Japanese>
<Japanese>レーザ</Japanese>
<Korean>레이저</Korean>
<Chinesesimp>激光</Chinesesimp>
<Chinese>雷射</Chinese>
@ -132,7 +132,7 @@
<Czech>Přepnout Laser / Infračervený Laser</Czech>
<Portuguese>Alternar entre Laser / Laser IV</Portuguese>
<Japanese>レーザ/赤外線レーザを切り替える</Japanese>
<Korean>가시 / 적외선 레이저 전환</Korean>
<Korean>가시광/적외선 레이저 전환</Korean>
<Chinesesimp>切换激光/红外线激光</Chinesesimp>
<Chinese>切換雷射/紅外線雷射</Chinese>
<Turkish>Değiştir Lazer/IR Lazer</Turkish>

View File

@ -9,7 +9,7 @@
<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>
<Chinesesimp>编织绳。通常用于索降和牵引拖曳。</Chinesesimp>
<Korean>꼬아진 섬유질입니다. 주로 레펠이나 견인시 사용됩니다.</Korean>
<Korean>꼬아진 섬유입니다. 주로 레펠이나 견인에 사용됩니다.</Korean>
</Key>
<Key ID="STR_ACE_Logistics_Rope_Rope_3_Display">
<English>Rope 3.2 meters</English>

View File

@ -13,7 +13,7 @@
<Italian>Il drone è pieno</Italian>
<Russian>БПЛА полностью заряжен</Russian>
<Japanese>ドローンは充電完了</Japanese>
<Korean>무인기 충전완료</Korean>
<Korean>무인기 충전 완료</Korean>
<Chinesesimp>无人机电池已充满</Chinesesimp>
<Chinese>無人載具電池已充滿</Chinese>
<Turkish>IHA Dolu</Turkish>
@ -81,7 +81,7 @@
<Italian>Usata per ricaricare la Batteria dell'UAV</Italian>
<Russian>Используется для зарядки переносных БПЛА</Russian>
<Japanese>運んでいる UAV を充電に使う</Japanese>
<Korean>무인기를 재충전 할때 씁니다.</Korean>
<Korean>무인기를 재충전 할 때 씁니다.</Korean>
<Chinesesimp>对可携式无人机进行充电</Chinesesimp>
<Chinese>對可攜式無人載具進行充電</Chinese>
<Turkish>Used to refuel Carried UAV's</Turkish>
@ -100,7 +100,7 @@
<Japanese>充電しています・・・</Japanese>
<Chinesesimp>正在充电...</Chinesesimp>
<Chinese>充電中...</Chinese>
<Korean>충전중...</Korean>
<Korean>충전 중...</Korean>
<Turkish>Şarj Oluyor</Turkish>
</Key>
</Package>

View File

@ -64,7 +64,7 @@
<Hungarian>Drótok elvágása...</Hungarian>
<Russian>Разрезаем забор / провода...</Russian>
<Japanese>フェンス/ワイヤを切断しています・・・</Japanese>
<Korean>철망/철조망 자르는중...</Korean>
<Korean>철망/철조망 자르는 중...</Korean>
<Chinesesimp>正在剪断护栏/刺网...</Chinesesimp>
<Chinese>剪斷護欄/刺網中...</Chinese>
<Turkish>Kesiliyor Çit/Tel</Turkish>

View File

@ -24,7 +24,7 @@
<Chinese>每發所需時間</Chinese>
<Chinesesimp>每发所需时间</Chinesesimp>
<Japanese>弾頭毎の所有時間</Japanese>
<Korean>탄당 시간</Korean>
<Korean>당 시간</Korean>
<Polish>Czas na nabój</Polish>
<Russian>Время на патрон</Russian>
<Portuguese>Tempo por projétil</Portuguese>
@ -56,7 +56,7 @@
<Chinese>每彈鍊所需時間</Chinese>
<Chinesesimp>每弹炼所需时间</Chinesesimp>
<Japanese>ベルトリンク毎の所有時間</Japanese>
<Korean>띠 당 시간</Korean>
<Korean>탄띠 당 시간</Korean>
<Polish>Czas na taśmę</Polish>
<Russian>Время на звено ленты</Russian>
<Portuguese>Tempo por carregador de cinto</Portuguese>
@ -93,7 +93,7 @@
<Hungarian>Újratárazás...</Hungarian>
<Russian>Перепаковка магазинов...</Russian>
<Japanese>弾倉を詰め替えしています・・・</Japanese>
<Korean>다시 채우는중...</Korean>
<Korean>다시 채우는 중...</Korean>
<Chinesesimp>正在整理弹匣 ...</Chinesesimp>
<Chinese>重新整理彈匣中 ...</Chinese>
<Turkish>Şarjör Yeniden Dolduruluyor...</Turkish>
@ -161,7 +161,7 @@
<Italian>%1 Pieno(i) e %2 Parziale(i)</Italian>
<Portuguese>%1 Total e %2 Parcial </Portuguese>
<Japanese>%1 個の満杯と %2 個の弾薬入り弾倉</Japanese>
<Korean>%1 꽉찼고 %2 부분참</Korean>
<Korean>%1 꽉 찼고 %2 부분적으로 </Korean>
<Chinesesimp>%1个满的与%2个部分的</Chinesesimp>
<Chinese>%1個滿的與%2個部分的</Chinese>
<Turkish>%1 Dolu ve %2 Partial</Turkish>

View File

@ -11,7 +11,7 @@
// MINIMAL required version for the Mod. Components can specify others..
#define REQUIRED_VERSION 2.06
#define REQUIRED_CBA_VERSION {3,15,6}
#define REQUIRED_CBA_VERSION {3,15,7}
#ifdef COMPONENT_BEAUTIFIED
#define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED)

View File

@ -1,4 +1,4 @@
#define MAJOR 3
#define MINOR 14
#define PATCHLVL 1
#define BUILD 65
#define MINOR 15
#define PATCHLVL 0
#define BUILD 67

View File

@ -14,7 +14,7 @@
<Japanese>ACE ロジスティクス</Japanese>
<Chinesesimp>ACE 后勤</Chinesesimp>
<Chinese>ACE 後勤</Chinese>
<Korean>ACE 군수</Korean>
<Korean>ACE 병참</Korean>
<Turkish>ACE Lojistik</Turkish>
</Key>
<Key ID="STR_ACE_Main_URL">

View File

@ -46,7 +46,7 @@
<Czech>Simulovat nasvícení mapy v závisloti na okolí a předmětů hráče?</Czech>
<Italian>Simula illuminazione della mappa in base alla luce ambientale e agli oggetti del giocatore?</Italian>
<Japanese>地図へ環境光やプレイヤーのアイテムに基づいた光のシミュレーションを行うかどうかを設定できます。</Japanese>
<Korean>주변 환경및 플레이어 조명에 의한 빛 변화를 지도에 반영할까요?</Korean>
<Korean>주변 환경 및 플레이어 조명에 의한 빛 변화를 지도에 반영할까요?</Korean>
<Chinesesimp>透过环境光与玩家的手电筒来决定地图亮度。</Chinesesimp>
<Chinese>透過環境光與玩家的物品來決定地圖亮度?</Chinese>
</Key>
@ -61,7 +61,7 @@
<Italian>Luce della torcia in mappa</Italian>
<French>Lueur lampe carte</French>
<Japanese>地図をライトで照らす</Japanese>
<Korean>지도 조명이 빛이 납니까</Korean>
<Korean>지도 조명 발광</Korean>
<Chinesesimp>增加地图亮度</Chinesesimp>
<Chinese>增加地圖亮度</Chinese>
</Key>
@ -76,7 +76,7 @@
<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>
<Japanese>プレイヤーが地図をフラッシュライトで照らせられるように設定します。</Japanese>
<Korean>지도에 불빛을 비치는 플레이어를 조금 더 밝게 합니까?</Korean>
<Korean>지도에 조명을 사용하는 플레이어에 외부 불빛을 추가합니까?</Korean>
<Chinesesimp>当玩家打开手电筒时,增加地图亮度。</Chinesesimp>
<Chinese>當玩家擁有手電筒時,增加地圖亮度?</Chinese>
</Key>
@ -109,7 +109,7 @@
<Russian>Заставлять карту трястись при ходьбе?</Russian>
<Italian>Far scuotere la mappa mentre cammini?</Italian>
<Japanese>歩いているときは地図を揺らすかかどうかを設定できます。</Japanese>
<Korean>걸을때 지도보면 흔들리게 합니까?</Korean>
<Korean>걸을 때 지도보면 흔들리게 합니까?</Korean>
<Chinesesimp>走路时打开地图会产生晃动。</Chinesesimp>
<Chinese>走路時讓地圖有震動的感覺?</Chinese>
</Key>
@ -157,7 +157,7 @@
<Russian>Показывать координаты курсора</Russian>
<Italian>Mostra coordinate sul cursore</Italian>
<Japanese>カーソル先で座標を表示</Japanese>
<Korean>커서에 좌표를 보이게 합니까</Korean>
<Korean>커서에 좌표를 보이</Korean>
<Chinesesimp>显示光标的座标</Chinesesimp>
<Chinese>顯示游標的座標</Chinese>
</Key>
@ -205,7 +205,7 @@
<Russian>Система слежения Blue Force Tracking</Russian>
<Italian>Blue Force Tracking</Italian>
<Japanese>ブルー フォース トラッキング</Japanese>
<Korean>GPS피아식별기</Korean>
<Korean>GPS 피아식별기</Korean>
<Chinesesimp>显示蓝方追踪</Chinesesimp>
<Chinese>顯示藍方蹤跡</Chinese>
</Key>
@ -221,7 +221,7 @@
<Russian>Включить BFT</Russian>
<Italian>Abilita BFT</Italian>
<Japanese>BFT を有効化</Japanese>
<Korean>GPS피아식별기 켜기</Korean>
<Korean>GPS 피아식별기 켜기</Korean>
<Chinesesimp>蓝方追踪启用</Chinesesimp>
<Chinese>藍方蹤跡啟用</Chinese>
</Key>
@ -237,7 +237,7 @@
<Russian>Включает систему служения BFT. По-умолчанию: Нет</Russian>
<Italian>Abilita Blue Force Tracking. Default: No</Italian>
<Japanese>ブルー フォース トラッキングを有効化します。標準: 無効</Japanese>
<Korean>GPS피아식별기 켭니다. 기본설정: 아니요</Korean>
<Korean>GPS 피아식별기 켭니다. 기본설정: 아니요</Korean>
<Chinesesimp>启用显示蓝方追踪。预设:否</Chinesesimp>
<Chinese>啟用顯示藍方蹤跡. 預設: 否</Chinese>
</Key>
@ -285,7 +285,7 @@
<Russian>Скрыть группы ботов</Russian>
<Italian>Nascondere gruppi IA</Italian>
<Japanese>AI グループを非表示</Japanese>
<Korean>인공지능 그룹을 숨깁니까</Korean>
<Korean>인공지능 그룹 숨기기</Korean>
<Chinesesimp>隐藏 AI 小队</Chinesesimp>
<Chinese>隱藏AI小隊</Chinese>
</Key>
@ -317,7 +317,7 @@
<Russian>Показать имена игроков</Russian>
<Italian>Mostra i nomi dei giocatori</Italian>
<Japanese>プレイヤー名を表示</Japanese>
<Korean>플레이어 이름 표시합니까</Korean>
<Korean>플레이어 이름 표시</Korean>
<Chinesesimp>显示玩家名称</Chinesesimp>
<Chinese>顯示玩家名稱</Chinese>
</Key>
@ -380,7 +380,7 @@
<Spanish>NVG</Spanish>
<Italian>NVG</Italian>
<Japanese>夜間暗視装置</Japanese>
<Korean>야투경</Korean>
<Korean></Korean>
<Chinesesimp>夜视仪</Chinesesimp>
<Chinese>夜視鏡</Chinese>
<Turkish>NVG</Turkish>
@ -507,7 +507,7 @@
<Spanish>Cambiar el canal de marcadores inicial al comenzar la misión</Spanish>
<French>Change le canal de communication par défaut au début de la mission.</French>
<Japanese>ミッション開始時にあらかじめ設定されているマーカ チャンネルを変更します</Japanese>
<Korean>미션시작시 마커채널을 변경합니다</Korean>
<Korean>미션 시작시 마커채널을 변경합니다</Korean>
<Chinesesimp>更改任务启动时的聊天频道</Chinesesimp>
<Chinese>更改任務啟動時的聊天頻道</Chinese>
</Key>
@ -515,7 +515,7 @@
<English>Disable BFT</English>
<German>BFT deaktivieren</German>
<Japanese>BFTを無効化</Japanese>
<Korean>GPS피아식별기 끄기</Korean>
<Korean>GPS 피아식별기 끄기</Korean>
<Polish>Wyłącz BFT</Polish>
<French>Désactiver le SFA</French>
<Italian>Disablita BFT</Italian>
@ -530,7 +530,7 @@
<English>Always disable Blue Force Tracking for this group.</English>
<German>Blue Force Tracking für diese Gruppe immer deaktivieren.</German>
<Japanese>このグループへのブルー フォース トラッキングを常に無効化します。</Japanese>
<Korean>이 그룹에 한해 GPS피아식별기를 항상 끕니다.</Korean>
<Korean>이 그룹에 한해 GPS 피아식별기를 항상 끕니다.</Korean>
<Polish>Zawsze wyłączaj Blue Force Tracking dla tej grupy.</Polish>
<French>Désactive en permanence le Suivi des Forces Alliées pour ce groupe.</French>
<Italian>Disabilita sempre il Blue Force Tracking per questo gruppo.</Italian>

View File

@ -168,7 +168,7 @@
<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>
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
<Korean>그룹 설정이 없는 경우 리더의 예비 색상 값입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것]</Korean>
<Korean>그룹 설정이 없는 경우 리더의 예비 색상 값입니다. [모듈: 클라이언트에서 강체하지 않기 위해 공백으로 비워둘 것]</Korean>
<Chinesesimp>当没有设定小队颜色时,此功能会定义队长的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
<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>
@ -199,7 +199,7 @@
<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>
<Japanese>グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません]</Japanese>
<Korean>그룹 설정이 없을 경우의 예비 색상입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것]</Korean>
<Korean>그룹 설정이 없을 경우의 예비 색상입니다. [모듈: 클라이언트에서 강체하지 않기 위해 공백으로 비워둘 것]</Korean>
<Chinesesimp>当没有设定小队颜色时,此功能会定义玩家的指示颜色。[模块:此栏留空来保持预设颜色]</Chinesesimp>
<Chinese>當沒有設定小隊顏色時,此功能會定義玩家的指示器顏色。[模塊: 此欄留空來保持預設顏色]</Chinese>
<Czech>Záložní barva pokud není žádné skupinové nastavení [Modul: ponechat prázdné abyste nepřepsali nastavení klientů]</Czech>
@ -229,7 +229,7 @@
<Spanish>Color para los líderes de los grupos sincronizados al módulo.</Spanish>
<French>Couleur pour les chefs des groupes synchronisés avec ce module.</French>
<Japanese>モジュールで同期されたグループのリーダー用に色の値を決定します。</Japanese>
<Korean>그룹이 이 모듈에 동기화 됐을때의 리더 색상입니다.</Korean>
<Korean>그룹이 이 모듈에 동기화 됐을 때의 리더 색상입니다.</Korean>
<Chinesesimp>改变与此同步小队队长的指示颜色。</Chinesesimp>
<Chinese>改變與此同步小隊隊長的指示器顏色</Chinese>
<Czech>Barva pro velitele skupin které jsou synchronizované s tímto modulem.</Czech>
@ -260,7 +260,7 @@
<Spanish>Color para los miembros de los grupos sincronizados al módulo.</Spanish>
<French>Couleur pour les membres des groupes synchronisés avec ce module.</French>
<Japanese>モジュールで同期されたグループのメンバ用に色の値を決定します。</Japanese>
<Korean>그룹이 이 모듈에 동기화 됐을때의 멤버 색상입니다.</Korean>
<Korean>그룹이 이 모듈에 동기화 됐을 때의 멤버 색상입니다.</Korean>
<Chinesesimp>改变与此同步小队队员的指示颜色</Chinesesimp>
<Chinese>改變與此同步小隊隊員的指示器顏色</Chinese>
<Czech>Barva pro členy skupin které jsou synchronizované s tímto modulem.</Czech>
@ -296,7 +296,7 @@
<Polish>Maksymalny zasięg kamery</Polish>
<German>Maximale Kamerareichweite</German>
<Chinesesimp>摄像机最大范围</Chinesesimp>
<Korean>킴[리 처;데 갈;</Korean>
<Korean>카메라와 지도 신호의 최대 거리</Korean>
</Key>
<Key ID="STR_ACE_Map_Gestures_maxRangeCamera_description">
<English>Max range between a Camera and players to show the map gesture indicator</English>

View File

@ -52,7 +52,7 @@ class CfgVehicles {
};
class ACE_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;);
exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"};
showDisabled = 1;

View File

@ -17,7 +17,7 @@
visibleMap &&
{alive ACE_player} &&
{getText (configFile >> "CfgWeapons" >> (assignedItems ACE_player param [0, ""]) >> "simulation") == "ItemMap"} &&
{"ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems))} &&
{!GVAR(mapTool_isDragging)} &&
{!GVAR(mapTool_isRotating)}
{!GVAR(mapTool_isRotating)} &&
{getUnitLoadout ACE_player param [9, []] param [0, ""] != ""}

View File

@ -0,0 +1 @@
z\ace\addons\marker_flags

View 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));
};
};

View 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)"};
};
};

View 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);
};
};

View File

@ -0,0 +1,5 @@
PREP(addActions);
PREP(canPlace);
PREP(getFlags);
PREP(pickUpFlag);
PREP(placeFlag);

View 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;

View 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;

View 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];

View 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"

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