Cargo - Add ability to add custom name to cargo objects (#8023)

* First Push

Added the ability to edit cargo objects (crates/boxes only) names. Either via in-game action on the object it self or via 3den attributes.

Added a single function which spawns the UI to edit the name and also edits it. This is an scripted UI, it could be changed to a config version if wanted, but as I'm not good in UI coding I left it on this simple version mainly for testing.

Added 4 new stringtable entries, 2 for action and 2 for 3den attributes.

* Add extra stringtable

Forgot to add the UI to the stringtable.

* Update fnc_renameObject.sqf

fixing tabs

* Show custom name only behind

Added new function "getNameItem" that will get the items name.
Put the custom name behind the original name between brackets "[...]".

* Added "Hide Rename Action" setting

Also removed an unused _itemClass from postInit.

* Apply suggestions from code review

Co-authored-by: jonpas <jonpas33@gmail.com>

* Update AUTHORS.txt

Added my name

* Applied the sugesstions.

* Fixed function crash

* Moved to dialog.

* Removed unused comment/code

* Update renameMenu.hpp

Fixed tabs to spaces.

* Update renameMenu.hpp

* move rename to common

* Update addons/arsenal/ui/RscAttributes.hpp

* style and use addActionToObject

Co-authored-by: jonpas <jonpas33@gmail.com>
Co-authored-by: PabstMirror <pabstmirror@gmail.com>
This commit is contained in:
Jasper 2021-10-13 00:42:38 +02:00 committed by GitHub
parent 005b2aef14
commit 257d9536cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 266 additions and 56 deletions

View File

@ -106,6 +106,7 @@ havena <silveredenis@gmail.com>
Hawkins Hawkins
Head <brobergsebastian@gmail.com> Head <brobergsebastian@gmail.com>
Hybrid V Hybrid V
JasperRab <jasper@jasperrab.eu>
john681611 <john681611@hotmail.com> john681611 <john681611@hotmail.com>
JoramD JoramD
Karneck <dschultz26@hotmail.com> Karneck <dschultz26@hotmail.com>

View File

@ -159,22 +159,6 @@
<Czech>[Shift+Klik pro uložení jako standardního vybavení pro misi]</Czech> <Czech>[Shift+Klik pro uložení jako standardního vybavení pro misi]</Czech>
<Turkish>[Shift+Click varsayılan kıyafetlere kaydet]</Turkish> <Turkish>[Shift+Click varsayılan kıyafetlere kaydet]</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_buttonRenameText">
<English>Rename</English>
<Spanish>Renombrar</Spanish>
<French>Renommer</French>
<German>Umbenennen</German>
<Polish>Zmień nazwę</Polish>
<Japanese>改名</Japanese>
<Italian>Rinomina</Italian>
<Korean>이름바꾸기</Korean>
<Chinese>重新命名</Chinese>
<Chinesesimp>重新命名</Chinesesimp>
<Russian>Переименовать</Russian>
<Portuguese>Renomear</Portuguese>
<Czech>Přejmenovat</Czech>
<Turkish>Yeniden adlandır</Turkish>
</Key>
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip"> <Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
<English>Rename the selected loadout</English> <English>Rename the selected loadout</English>
<Spanish>Renombrar el equipamiento seleccionado</Spanish> <Spanish>Renombrar el equipamiento seleccionado</Spanish>

View File

@ -1005,7 +1005,7 @@ class GVAR(loadoutsDisplay) {
class buttonRename: buttonSave { class buttonRename: buttonSave {
idc = IDC_buttonRename; idc = IDC_buttonRename;
x = QUOTE(32.5 * GRID_W); x = QUOTE(32.5 * GRID_W);
text= CSTRING(buttonRenameText); text = ECSTRING(common,rename);
tooltip = CSTRING(buttonRenameTooltip); tooltip = CSTRING(buttonRenameTooltip);
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsRename)); onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsRename));
}; };

View File

@ -3,6 +3,18 @@ class Cfg3DEN {
class AttributeCategories { class AttributeCategories {
class ace_attributes { class ace_attributes {
class Attributes { class Attributes {
class GVAR(customName) {
displayName = CSTRING(customName_edenName);
tooltip = CSTRING(customName_edenDesc);
property = QGVAR(customName);
control = "Edit";
expression = QUOTE(_this setVariable [ARR_3(QQGVAR(customName), _value, true)];);
defaultValue = "''";
condition = "objectHasInventoryCargo - objectVehicle";
typeName = "STRING";
};
class GVAR(space) { class GVAR(space) {
displayName = CSTRING(space_edenName); displayName = CSTRING(space_edenName);
tooltip = CSTRING(space_edenDesc); tooltip = CSTRING(space_edenDesc);

View File

@ -3,6 +3,7 @@ PREP(addCargoVehiclesActions);
PREP(canLoadItemIn); PREP(canLoadItemIn);
PREP(canUnloadItem); PREP(canUnloadItem);
PREP(getCargoSpaceLeft); PREP(getCargoSpaceLeft);
PREP(getNameItem);
PREP(getSizeItem); PREP(getSizeItem);
PREP(handleDeleted); PREP(handleDeleted);
PREP(handleDestroyed); PREP(handleDestroyed);
@ -13,6 +14,7 @@ PREP(moduleSettings);
PREP(onMenuOpen); PREP(onMenuOpen);
PREP(paradropItem); PREP(paradropItem);
PREP(removeCargoItem); PREP(removeCargoItem);
PREP(renameObject);
PREP(setSize); PREP(setSize);
PREP(setSpace); PREP(setSpace);
PREP(startLoadIn); PREP(startLoadIn);

View File

@ -21,7 +21,7 @@
// Show hint as feedback // Show hint as feedback
private _hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded; private _hint = [LSTRING(LoadingFailed), LSTRING(LoadedItem)] select _loaded;
private _itemName = getText (configOf _item >> "displayName"); private _itemName = [_item, true] call FUNC(getNameItem);
private _vehicleName = getText (configOf _vehicle >> "displayName"); private _vehicleName = getText (configOf _vehicle >> "displayName");
[[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured); [[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured);
@ -38,11 +38,9 @@
private _unloaded = [_item, _vehicle, _unloader] call FUNC(unloadItem); //returns true if sucessful private _unloaded = [_item, _vehicle, _unloader] call FUNC(unloadItem); //returns true if sucessful
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
// Show hint as feedback // Show hint as feedback
private _hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded; private _hint = [LSTRING(UnloadingFailed), LSTRING(UnloadedItem)] select _unloaded;
private _itemName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName"); private _itemName = [_item, true] call FUNC(getNameItem);
private _vehicleName = getText (configOf _vehicle >> "displayName"); private _vehicleName = getText (configOf _vehicle >> "displayName");
[[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured); [[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured);
@ -89,8 +87,24 @@ GVAR(vehicleAction) = [
} }
] call EFUNC(interact_menu,createAction); ] call EFUNC(interact_menu,createAction);
GVAR(objectAction) = [ GVAR(objectActions) = [
QGVAR(load), localize LSTRING(loadObject), "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa", [QGVAR(renameObject), LELSTRING(common,rename), "", //TODO: add icon, maybe a pencil couldn't find it before.
{
GVAR(interactionVehicle) = _target;
createDialog QGVAR(renameMenu);
},
{
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
GVAR(enable) &&
{GVAR(enableRename)} &&
{(_target getVariable [QGVAR(canLoad), getNumber (configOf _target >> QGVAR(canLoad))]) in [true, 1]} &&
{alive _target} &&
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} &&
{!((typeOf _target) in ["ACE_Wheel", "ACE_Track"])} && // Exclude Wheel and Track
{!(_target iskindOf "Land_CanisterFuel_F")} // Exclude Fuel Canisters
}
] call EFUNC(interact_menu,createAction),
[QGVAR(load), localize LSTRING(loadObject), "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa",
{ {
params ["_target", "_player"]; params ["_target", "_player"];
[_player, _target] call FUNC(startLoadIn); [_player, _target] call FUNC(startLoadIn);
@ -110,7 +124,8 @@ GVAR(objectAction) = [
}) > -1} }) > -1}
}, },
LINKFUNC(addCargoVehiclesActions) LINKFUNC(addCargoVehiclesActions)
] call EFUNC(interact_menu,createAction); ] call EFUNC(interact_menu,createAction)
];
// find all remaining configured classes and init them, see XEH_preStart.sqf // find all remaining configured classes and init them, see XEH_preStart.sqf
private _vehicleClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedVehicleClasses), {[]}]); private _vehicleClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedVehicleClasses), {[]}]);
@ -121,7 +136,10 @@ GVAR(initializedVehicleClasses) append _vehicleClassesAddAction;
private _objectClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedItemClasses), {[]}]); private _objectClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedItemClasses), {[]}]);
{ {
[_x, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass); private _objectClass = _x;
{
[_objectClass, 0, ["ACE_MainActions"], _x] call EFUNC(interact_menu,addActionToClass);
} forEach GVAR(objectActions);
} forEach _objectClassesAddAction; } forEach _objectClassesAddAction;
GVAR(initializedItemClasses) append _objectClassesAddAction; GVAR(initializedItemClasses) append _objectClassesAddAction;

View File

@ -19,3 +19,4 @@ class CfgPatches {
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "menu.hpp" #include "menu.hpp"
#include "renameMenu.hpp"

View File

@ -0,0 +1,32 @@
#include "script_component.hpp"
/*
* Author: JasperRab
* Gets the name of the item, and alternatively the custom name if requested and available.
*
* Arguments:
* 0: Target <OBJECT>
* 1: Add custom name part <BOOL> (default: false)
*
* Return Value:
* Item Name <STRING>
*
* Example:
* [crate_7] call ace_cargo_fnc_getNameItem
*
* Public: Yes
*/
params ["_object", ["_addCustomPart", false]];
private _class = if (_object isEqualType "") then {_object} else {typeOf _object};
private _displayName = getText (configFile >> "CfgVehicles" >> _class >> "displayName");
if (_addCustomPart && {!(_object isEqualType "")}) then {
private _customPart = _object getVariable [QGVAR(customName), ""];
if (_customPart isNotEqualTo "") then {
_displayName = _displayName + " [" + _customPart + "]";
};
};
_displayName

View File

@ -41,9 +41,13 @@ if (_object getVariable [QGVAR(initObject),false]) exitWith {};
if (_canLoadConfig) then { if (_canLoadConfig) then {
GVAR(initializedItemClasses) pushBack _type; GVAR(initializedItemClasses) pushBack _type;
TRACE_1("Adding load cargo action to class", _type); TRACE_1("Adding load cargo action to class", _type);
[_type, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass); {
[_type, 0, ["ACE_MainActions"], _x] call EFUNC(interact_menu,addActionToClass);
} forEach GVAR(objectActions);
} else { } else {
_object setVariable [QGVAR(initObject),true]; _object setVariable [QGVAR(initObject),true];
TRACE_1("Adding load cargo action to object", _object); TRACE_1("Adding load cargo action to object", _object);
[_object, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToObject); {
[_object, 0, ["ACE_MainActions"], _x] call EFUNC(interact_menu,addActionToObject);
} forEach GVAR(objectActions);
}; };

View File

@ -44,7 +44,7 @@ if (GVAR(interactionParadrop)) then {
lbClear _ctrl; lbClear _ctrl;
{ {
private _class = if (_x isEqualType "") then {_x} else {typeOf _x}; private _class = if (_x isEqualType "") then {_x} else {typeOf _x};
private _displayName = getText (configfile >> "CfgVehicles" >> _class >> "displayName"); private _displayName = [_x, true] call FUNC(getNameItem);
if (GVAR(interactionParadrop)) then { if (GVAR(interactionParadrop)) then {
_ctrl lbAdd format ["%1 (%2s)", _displayName, GVAR(paradropTimeCoefficent) * ([_class] call FUNC(getSizeItem))]; _ctrl lbAdd format ["%1 (%2s)", _displayName, GVAR(paradropTimeCoefficent) * ([_class] call FUNC(getSizeItem))];
} else { } else {

View File

@ -98,7 +98,7 @@ if (_showHint) then {
[ [
[ [
LSTRING(UnloadedItem), LSTRING(UnloadedItem),
getText (configOf _object >> "displayName"), [_itemObject, true] call FUNC(getNameItem),
getText (configOf _vehicle >> "displayName") getText (configOf _vehicle >> "displayName")
], ],
3 3

View File

@ -0,0 +1,27 @@
#include "script_component.hpp"
/*
* Author: JasperRab
* Renames object.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_cargo_fnc_renameObject
*
* Public: Yes
*/
private _display = uiNamespace getVariable QGVAR(menuDisplay);
if (isNil "_display") exitWith {};
private _ctrlEditText = ctrlText 100;
if (_ctrlEditText isEqualTo "") then { // custom name has been removed
[LSTRING(clearedCustomName), 3] call EFUNC(common,displayTextStructured);
} else {
[[LSTRING(renamedObject), _ctrlEditText], 3] call EFUNC(common,displayTextStructured);
};
GVAR(interactionVehicle) setVariable [QGVAR(customName), _ctrlEditText, true];

View File

@ -48,7 +48,7 @@ if ([_object, _vehicle] call FUNC(canLoadItemIn)) then {
}, },
{ {
TRACE_1("load fail",_this); TRACE_1("load fail",_this);
[objNull, _this select 0 select 0, true] call EFUNC(common,claim) [objNull, _this select 0 select 0, true] call EFUNC(common,claim);
}, },
localize LSTRING(LoadingItem), localize LSTRING(LoadingItem),
{ {
@ -60,8 +60,7 @@ if ([_object, _vehicle] call FUNC(canLoadItemIn)) then {
] call EFUNC(common,progressBar); ] call EFUNC(common,progressBar);
_return = true; _return = true;
} else { } else {
private _displayName = getText (configOf _object >> "displayName"); private _displayName = [_object, true] call FUNC(getNameItem);
[[LSTRING(LoadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured); [[LSTRING(LoadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured);
}; };

View File

@ -86,8 +86,7 @@ if ([_item, GVAR(interactionVehicle), ACE_player] call FUNC(canUnloadItem)) then
["isNotSwimming"] ["isNotSwimming"]
] call EFUNC(common,progressBar); ] call EFUNC(common,progressBar);
} else { } else {
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item}; private _displayName = [_item, true] call FUNC(getNameItem);
private _displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");
[[LSTRING(UnloadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured); [[LSTRING(UnloadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured);
}; };

View File

@ -33,3 +33,12 @@
false, false,
{[QGVAR(openAfterUnload), _this, true] call EFUNC(common,cbaSettings_settingChanged)} {[QGVAR(openAfterUnload), _this, true] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
[
QGVAR(enableRename), "CHECKBOX",
[LSTRING(ModuleSettings_enableRename), LSTRING(ModuleSettings_enableRename_Description)],
[LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)],
true,
false,
{[QGVAR(enableRename), _this, true] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;

View File

@ -0,0 +1,85 @@
#include "\z\ace\addons\common\define.hpp"
class GVAR(renameMenu) {
idd = 314615;
movingEnable = 0;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(menuDisplay)),_this select 0)];);
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(menuDisplay)),nil)];);
class controlsBackground {
class HeaderBackground: ACE_gui_backgroundBase{
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "13 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "13 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0)";
};
class CenterBackground: HeaderBackground {
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
h = "2.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0.8)";
colorText[] = {0, 0, 0, "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
colorBackground[] = {0,0,0,"(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
};
};
class controls {
class HeaderName {
idc = 1;
type = CT_STATIC;
x = "13 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "13 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_LEFT + ST_SHADOW;
font = "RobotoCondensed";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
colorText[] = {0.95, 0.95, 0.95, 0.75};
colorBackground[] = {"(profilenamespace getVariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getVariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getVariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
text = CSTRING(renameObjectUI);
};
class edit: ACE_gui_editBase {
onLoad = QUOTE((_this select 0) ctrlSetText (GVAR(interactionVehicle) getVariable [ARR_2(QUOTE(QGVAR(customName)), '')]));
idc = 100;
canModify = 1;
x = "13.1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "2.3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.8 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "1.5 * (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
};
class btnCancel: ACE_gui_buttonBase {
text = "$STR_DISP_CANCEL";
idc = 11;
x = "13.1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)";
animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
color[] = {1, 1, 1, 1};
color2[] = {0,0,0, 1};
colorBackgroundFocused[] = {1,1,1,1};
colorBackground[] = {1,1,1,1};
colorbackground2[] = {1,1,1,1};
colorDisabled[] = {1,1,1,1};
colorFocused[] = {0,0,0,1};
periodFocus = 1;
periodOver = 1;
action = QUOTE(closeDialog 0);
};
class btnSave: btnCancel {
text = ECSTRING(Common,Save);
idc = 12;
x = "20.9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(closeDialog 1; call FUNC(renameObject));
};
};
};

View File

@ -33,6 +33,21 @@
<Chinesesimp>卸载</Chinesesimp> <Chinesesimp>卸载</Chinesesimp>
<Turkish>Boşalt</Turkish> <Turkish>Boşalt</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_renamedObject">
<English>Renamed to:&lt;br/&gt;%1</English>
</Key>
<Key ID="STR_ACE_Cargo_clearedCustomName">
<English>Custom name has been cleared.</English>
</Key>
<Key ID="STR_ACE_Cargo_renameObjectUI">
<English>Set New Name:</English>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enableRename">
<English>Enable Rename Action</English>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enableRename_Description">
<English>Enables the rename action for renamable objects.</English>
</Key>
<Key ID="STR_ACE_Cargo_openMenu"> <Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English> <English>Cargo</English>
<German>Fracht</German> <German>Fracht</German>
@ -239,6 +254,12 @@
<Chinesesimp>%1&lt;br/&gt;无法被卸载</Chinesesimp> <Chinesesimp>%1&lt;br/&gt;无法被卸载</Chinesesimp>
<Turkish>%1&lt;br/&gt; kargo boşaltılamadı</Turkish> <Turkish>%1&lt;br/&gt; kargo boşaltılamadı</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_customName_edenName">
<English>Custom Name</English>
</Key>
<Key ID="STR_ACE_Cargo_customName_edenDesc">
<English>Set a custom cargo name used in the cargo interface.</English>
</Key>
<Key ID="STR_ACE_Cargo_space_edenName"> <Key ID="STR_ACE_Cargo_space_edenName">
<English>Cargo Space</English> <English>Cargo Space</English>
<German>Frachtraum</German> <German>Frachtraum</German>

View File

@ -1500,6 +1500,22 @@
<Chinesesimp></Chinesesimp> <Chinesesimp></Chinesesimp>
<Turkish>Yok</Turkish> <Turkish>Yok</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Common_Rename">
<English>Rename</English>
<Spanish>Renombrar</Spanish>
<French>Renommer</French>
<German>Umbenennen</German>
<Polish>Zmień nazwę</Polish>
<Japanese>改名</Japanese>
<Italian>Rinomina</Italian>
<Korean>이름바꾸기</Korean>
<Chinese>重新命名</Chinese>
<Chinesesimp>重新命名</Chinesesimp>
<Russian>Переименовать</Russian>
<Portuguese>Renomear</Portuguese>
<Czech>Přejmenovat</Czech>
<Turkish>Yeniden adlandır</Turkish>
</Key>
<Key ID="STR_ACE_Common_TimeLeft"> <Key ID="STR_ACE_Common_TimeLeft">
<English>Time left: %1s</English> <English>Time left: %1s</English>
</Key> </Key>