new crafting system by Raymix

This commit is contained in:
vbawol 2015-09-28 17:04:43 -05:00
parent fce2dd0997
commit 70ca1eae15
69 changed files with 2477 additions and 539 deletions

View File

@ -22,7 +22,7 @@
7 onMapSingleClick !="onMapSingleClick '';"
7 addMagazine !"addMagazineCargo" !="player addMagazine _craftItem;" !="player addMagazine \"jerrycanE_epoch\";" !="player addMagazine \"emptyjar_epoch\";" !="player addMagazine \"jerrycan_epoch\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine [(_x select 0),(_x select 1)]" !="player addMagazine _x;" !="if !(player canAdd (_x select 0)) exitWith {};\nplayer addMagazine[_x select 0, _x select 1];"
7 addMagazineCargo !"_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;"
7 addItem !="player addItem _craftItem;" !="player addItem _x;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;"
7 addItem !="player addItem _item;" !="player addItem _craftItem;" !="player addItem _x;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;"
7 addBackPack
7 removeAllWeapons !="removeAllWeapons axeGeneral;"
7 removeAllItems
@ -34,7 +34,8 @@
7 createUnit !="_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, \"FORM\"];" !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit ["I_officer_F", axeGeneralPos, [], 1, "CAN_COLLIDE"];"
7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];"
7 createTeam
7 createDialog !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog \"TapOut\";" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
7 createDialog !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog \"TapOut\";" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
7 createDisplay !="createDisplay \"rmx_dynamenu\";"
7 deleteMarker
7 setMarker
7 createMarker
@ -48,7 +49,7 @@
7 addMPEventHandler
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"FiredNear" !"EpeContactStart" !"InventoryClosed" !"GetOut" !"InventoryOpened" !"local" !"Respawn" !"Put" !"Take" !"Fired" !"Killed" !" [\"PostReset\",{BIS_EnginePPReset = true;} ];" !"_logic addeventhandler [\n\"local\""
7 displayAddEventHandler !"[_display] call _fnc_animate;" !"tVersion select 4) == \"Development\") then" !"_display displayaddeventhandler\n[\n\"mousemoving\"," !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"_this call EPOCH_KeyDown\"];" !="_addCase = _display46 displayAddEventHandler ['KeyDown',{_this call EPOCH_KeyDown;}];" !"_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'"
7 ctrlAddEventHandler !"rCfg >> \"refreshDelay\");" !" [\n\"draw\"," !" [\"buttonclick\"," !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="(_display displayctrl _idc) ctrlAddEventHandler [\"LBSelChanged\","
7 ctrlAddEventHandler !"rCfg >> \"refreshDelay\");" !" [\n\"draw\"," !" [\"buttonclick\"," !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="(_display displayctrl _idc) ctrlAddEventHandler [\"LBSelChanged\"," !="_ctrl ctrlSetEventHandler [\"mouseEnter\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseExit\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseButtonDown\", (format [\"call %1;\",(_buttonSettings select _e select 2)])];"
7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_display46 displayRemoveAllEventHandlers 'KeyDown';"
7 removeAllMissionEventHandlers
7 ctrlRemoveAllEventHandlers !="(uiNamespace getVariable 'ESP_map') ctrlRemoveAllEventHandlers 'Draw';" !="ctrlAddEventHandler ['MouseButtonDown'"
@ -58,15 +59,14 @@
7 remoteControl !"fn_moduleRemoteControl.sqf" !="\"BIS_fnc_moduleRemoteControl"\"
7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\""
7 drawLine3D !"{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari"
7 ctrlCreate !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\""
7 ctrlDelete !="ctrlDelete _ListGroup;"
7 ctrlCreate !="_ctrl = _display ctrlCreate [\"RscProgress\",_idc + 1];" !="_display ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\""
7 ctrlDelete !="ctrlDelete _ListGroup;" !="ctrlDelete (rmx_var_crafting_ctrl_GROUP select 0);"
7 ctrlClassName
7 ctrlModel
7 ctrlModelDirection
7 ctrlModelSide
7 ctrlModelUp
7 ctrlSetDirection
7 ctrlSetModel
7 deleteVehicleCrew !"fn_deleteVehicleCrew.sqf" !="\"BIS_fnc_deleteVehicleCrew"\"
7 loadFile
7 selectPlayer !="selectPlayer _playerObject;"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,128 +0,0 @@
_craftItem = EPOCH_CraftItemData;
_abort = false;
_msg = "";
_craftedItemCount = 0;
// _craftingConfig = configfile >> "CfgCrafting" >> _craftItem;
_config = 'CfgCrafting' call EPOCH_returnConfig;
_craftingConfig = _config >> _craftItem;
if (isClass (_craftingConfig)) then {
_recipe = [] + getArray(_craftingConfig >> "recipe");
_nearby = [] + getArray(_craftingConfig >> "nearby");
//diag_log format["DEBUG craftitem: _nearby %1", _nearby];
_proceed = true;
// check nearby
{
_needType = _x select 0; // fire. alive, noclass
_needClasses = _x select 1; // ["ALL"]. ["filename.p3d"]
_needRange = _x select 2; // 3
_needCount = _x select 3; // 1
_needReason = _x select 4; // "Fire", "Water Source"
_nearObjects = nearestObjects[player, _needClasses, _needRange];
_nearbyCount = 0;
switch (_needType) do
{
case "fire": {_nearbyCount = {inflamed _x} count _nearObjects; };
case "alive": {_nearbyCount = {alive _x} count _nearObjects; };
case "noclass": {
{
_needName = _x;
_nearbyCount = {((str(_x) find _needName) != -1)} count nearestObjects[player, [], _needRange];
if (_nearbyCount > 0) exitWith{};
} foreach _needClasses;
};
};
if (_nearbyCount < _needCount)exitWith{
_proceed = false;
_msg = format["Need %1", _needReason];
};
} forEach _nearby;
if (_proceed) then {
_countIndex = lbCurSel 2100;
_craftCount = lbValue[2100, _countIndex];
//diag_log format["CRAFT COUNT: index %1 count %2", _countIndex, _craftCount];
closeDialog 0;
for "_r" from 1 to _craftCount do {
if (player canAdd _craftItem) then {
_recipeCount = 0;
_numRemoved = 0;
{
_recipeItem = _x;
_recipeQty = 1;
if (typeName _x == "ARRAY") then {
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
_recipeCount = _recipeCount + _recipeQty;
// TODO dry run before removing anything
if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
_items = items player;
_currentCount = { _x == _recipeItem } count _items;
if (_currentCount >= _recipeQty) then {
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _items) then {
player removeItem _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
}
else {
_mags = magazines player;
_currentCount = { _x == _recipeItem } count _mags;
if (_currentCount >= _recipeQty) then {
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _mags) then {
player removeMagazine _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
};
} forEach _recipe;
if (_numRemoved == _recipeCount) then {
if (player canAdd _craftItem) then {
if ([_craftItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
player addItem _craftItem;
}
else {
player addMagazine _craftItem;
};
_craftedItemCount = _craftedItemCount + 1;
}
else {
_abort = true;
_msg = "Not enough space";
};
} else {
_abort = true;
_msg = "Incorrect item count";
};
} else {
_abort = true;
_msg = "Not enough space";
};
if (_abort) exitWith{};
};
};
if (_craftedItemCount > 0) then {
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>Crafted %1 %2</t>",_craftedItemCount,_craftItem call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
} else {
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>%1</t>", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};

View File

@ -1,162 +0,0 @@
disableSerialization;
ctrlShow[1600, false];
ctrlShow[2100, false];
ctrlShow[1000, false];
ctrlShow[41008, true];
ctrlShow[42000, true];
_index = _this select 0;
EPOCH_CraftItemData = "";
_activeDisplay = findDisplay -15;
_data = EPOCH_InteractedItem select 1;
// _craftingConfig = configfile >> "CfgCrafting" >> (_data);
_config = 'CfgCrafting' call EPOCH_returnConfig;
_craftingConfig = _config >> _data;
if (isClass (_craftingConfig)) then {
_usedIn = getArray (_craftingConfig >> "usedIn");
_selectedRecipe = _usedIn select _index;
EPOCH_CraftItemData = _selectedRecipe;
_craftingConfig = _config >> _selectedRecipe;
if (isClass (_craftingConfig)) then {
_recipe = getArray(_craftingConfig >> "recipe");
_nearby = getArray(_craftingConfig >> "nearby");
_recipeItems = [1200,1201,1202,1203,1204,1205];
_recipeStatus = [42200,42201,42202,42203,42204,42205];
_recipetooltip = [43200,43201,43202,43203,43204,43205];
_recipeCounts = [41001,41002,41003,41004,41005,41006];
_recipeResources = [45202,45203,45204,45205,45206,45207];
_recipeResourcesbtn = [44202,44203,44204,44205,44206,44207];
{
ctrlShow[_x, false];
} forEach _recipeItems;
{
ctrlShow[_x, false];
} forEach _recipeStatus;
{
ctrlShow[_x, false];
} forEach _recipeCounts;
// check for nearby resources
_proceed = true;
// check nearby
{
_needType = _x select 0; // fire. alive, noclass
_needClasses = _x select 1; // ["ALL"]. ["filename.p3d"]
_needRange = _x select 2; // 3
_needCount = _x select 3; // 1
_needReason = _x select 4; // "Fire", "Water Source"
_needImage = _x select 5; // fire, fuel, water, electricity
_nearObjects = nearestObjects[player, _needClasses, _needRange];
_nearbyCount = 0;
switch (_needType) do
{
case "fire": {_nearbyCount = {inflamed _x} count _nearObjects; };
case "alive": {_nearbyCount = {alive _x} count _nearObjects; };
case "noclass": {
{
_needName = _x;
_nearbyCount = {((str(_x) find _needName) != -1)} count nearestObjects[player, [], _needRange];
if (_nearbyCount > 0) exitWith{};
} foreach _needClasses;
};
};
(_activeDisplay displayCtrl(_recipeResourcesbtn select _forEachIndex)) ctrlSetTooltip _needReason;
if (_nearbyCount < _needCount) then {
_proceed = false;
// display needed icons
_icon = format["\x\addons\a3_epoch_code\Data\UI\need_%1_ca.paa", _needImage];
//diag_log format["%1", _icon];
ctrlSetText[(_recipeResources select _forEachIndex), _icon];
} else {
// display needed icons
_icon = format["\x\addons\a3_epoch_code\Data\UI\has_%1_ca.paa", _needImage];
//diag_log format["%1", _icon];
ctrlSetText[(_recipeResources select _forEachIndex), _icon];
};
} forEach _nearby;
_recipeCount = 0;
_itemCount = 0;
_mags = magazines player;
_items = items player;
{
_recipeItem = _x;
_recipeQty = 1;
if (typeName _x == "ARRAY") then {
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
_recipeCount = _recipeCount + _recipeQty;
_index = _forEachIndex;
_recipePic = _recipeItem call EPOCH_itemPicture;
ctrlSetText [(_recipeItems select _index), _recipePic];
_actualCount = 0;
if (isClass(configfile >> "cfgweapons" >> _recipeItem)) then {
_actualCount = { _x == _recipeItem } count _items;
} else {
_actualCount = { _x == _recipeItem } count _mags;
};
ctrlSetText[(_recipeCounts select _index), format["%1/%2", _actualCount, _recipeQty]];
ctrlShow[(_recipeItems select _index), true];
ctrlShow[(_recipeStatus select _index), true];
ctrlShow[(_recipeCounts select _index), true];
(_activeDisplay displayCtrl (_recipetooltip select _index)) ctrlSetTooltip format["%1",(_recipeItem call EPOCH_itemDisplayName)];
if (_actualCount >= _recipeQty) then {
ctrlSetText [(_recipeStatus select _index), ""];
_itemCount = _itemCount + _recipeQty;
(_activeDisplay displayCtrl (_recipeCounts select _index)) ctrlSetTextColor[1, 1, 1, 1];
} else {
ctrlSetText [(_recipeStatus select _index), "\x\addons\a3_epoch_assets\ui\xicon.paa"];
(_activeDisplay displayCtrl (_recipeCounts select _index)) ctrlSetTextColor[1, 0, 0, 1];
};
} forEach _recipe;
if (_itemCount == _recipeCount && _proceed) then {
ctrlShow [1600, true];
ctrlShow [2100, true];
ctrlShow [1000, true];
for "_i" from 0 to 9 do {
_num = _i + 1;
_index = lbAdd[2100, str(_num)]; lbSetValue[2100, _index, _num];
};
lbSetCurSel[2100, 0];
};
//diag_log format["DEBUG: EPOCH_craftItem %1 index: %2",_selectedRecipe,_index];
};
//diag_log format["DEBUG: EPOCH_craftItem %1 index: %2",_selectedRecipe,_index];
};

View File

@ -1,93 +0,0 @@
disableSerialization;
_text = "";
_data = "";
_pic = "";
if (typeName _this isEqualTo "BOOL" && count EPOCH_InteractedItem == 3) then {
_text = EPOCH_InteractedItem select 0;
_data = EPOCH_InteractedItem select 1;
_pic = EPOCH_InteractedItem select 2;
//diag_log "DEBUG: mode 1";
} else {
//diag_log "DEBUG: mode 2";
EPOCH_InteractedItem = [];
_control = _this select 0;
_index = _this select 1;
_text = _control lbText _index;
_data = _control lbData _index;
_pic = _control lbPicture _index;
if (_data == "") then {
_confData = "getText (_x >> 'displayName') == _text" configClasses(configFile >> "CfgWeapons");
if !(_confData isEqualTo[]) then {
_data = configName(_confData select 0);
};
};
EPOCH_InteractedItem = [_text,_data,_pic];
};
_craftingArray = [];
_craftingArrayNames = [];
// _craftingConfig = configfile >> "CfgCrafting" >> _data;
_config = 'CfgCrafting' call EPOCH_returnConfig;
_craftingConfig = _config >> _data;
if (isClass (_craftingConfig)) then {
_usedIn = [] + getArray (_craftingConfig >> "usedIn");
{
//diag_log format["DEBUG: %1",_x,(_x call EPOCH_itemPicture),(_x call EPOCH_itemDisplayName)];
_craftingArray pushBack (_x call EPOCH_itemPicture);
_craftingArrayNames pushBack (_x call EPOCH_itemDisplayName);
} forEach _usedIn;
};
//diag_log format["DEBUG: EPOCH_itemInteract %1 EPOCH_InteractedItem %2", _this, EPOCH_InteractedItem];
// diag_log format["DEBUG: _craftingArrayNames %1 _craftingArray %2", _craftingArrayNames, _craftingArray];
closeDialog 0;
if !(createdialog "InteractItem") exitWith {};
ctrlShow[1600, false];
ctrlShow[2100, false];
ctrlShow[1000, false];
ctrlShow[41008, false];
ctrlShow[42000, false];
_interactOption = 0;
_buttonTXT = "";
if (isClass (configfile >> "cfgweapons" >> _data)) then {
_type = getNumber (configfile >> "CfgWeapons" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgWeapons" >> _data >> "interactAction");
_buttonTXT = getText(configfile >> "CfgWeapons" >> _data >> "interactText");
} else {
_type = getNumber (configfile >> "CfgMagazines" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgMagazines" >> _data >> "interactAction");
_buttonTXT = getText(configfile >> "CfgMagazines" >> _data >> "interactText");
};
if (_buttonTXT == "") then {
_buttonTXT = "EXAMINE";
};
ctrlSetText [41201, _buttonTXT];
ctrlSetText [41200, _pic];
_craftingArrayCount = count _craftingArray;
_controls = [41202,41203,41204,41205,41206,41207];
_buttons = [1602,1603,1604,1605,1606,1607];
{
if (_craftingArrayCount >= (_forEachIndex+1)) then {
ctrlSetText [_x, (_craftingArray select _forEachIndex)];
((findDisplay -15) displayCtrl (_buttons select _forEachIndex)) ctrlSetTooltip (_craftingArrayNames select _forEachIndex);
ctrlShow [_buttons select _forEachIndex, true];
} else {
ctrlShow [_buttons select _forEachIndex, false];
};
}forEach _controls;

View File

@ -0,0 +1,33 @@
/*
Returns string if only one element in second param, otherwise returns array
_displayName = _item call epoch_itemData; // string
_pic = [_item,["Picture"]] call epoch_itemData; //string
_data = [_item,["picture","model","displayName"]] call epoch_itemData; //array
*/
private ["_item","_entries","_single","_arr","_return"];
_item = param [0,""];
_entries = param [1,["DisplayName"],[[]]];
_single = (count _entries) == 1;
_arr = [];
{
if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then {
_arr pushBack (getText(configfile >> "CfgMagazines" >> _item >> _x));
} else {
if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
_arr pushBack (getText(configfile >> "CfgWeapons" >> _item >> _x));
} else {
if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
_arr pushBack (getText(configfile >> "CfgVehicles" >> _item >> _x));
};
};
};
} forEach _entries;
if (_arr isEqualTo []) then {_arr = [""]};
_return = if (_single) then {_arr select 0} else {_arr};
_return

View File

@ -12,7 +12,7 @@ EPOCH_lastContainer = _this select 1;
waitUntil {!isNull findDisplay 602};
_display = (findDisplay 602);
{(_display displayCtrl _x) ctrlEnable false} forEach [-13,-14];
(_display displayCtrl -13) ctrlEnable false;
_totalArmor = 0;
_totalArmorMax = EPOCH_MAX_ARMOR select 3;

View File

@ -8,9 +8,6 @@ _text = _control lbText _index;
_data = _control lbData _index;
_pic = _control lbPicture _index;
_craftingArray = [];
_craftingArrayNames = [];
if (_data == "") then {
_confData = "getText (_x >> 'displayName') == _text" configClasses(configFile >> "CfgWeapons");
if !(_confData isEqualTo[]) then {
@ -18,17 +15,6 @@ if (_data == "") then {
};
};
_config = 'CfgCrafting' call EPOCH_returnConfig;
_craftingConfig = _config >> _data;
if (isClass (_craftingConfig)) then {
_usedIn = [] + getArray (_craftingConfig >> "usedIn");
{
_craftingArray pushBack (_x call EPOCH_itemPicture);
_craftingArrayNames pushBack (_x call EPOCH_itemDisplayName);
} forEach _usedIn;
};
EPOCH_InteractedItem = [_text,_data,_pic];
_interactOption = 0;
@ -55,8 +41,15 @@ if (_buttonTXT != "") then {
};
_useBtn = _display displayCtrl -14;
if !(_craftingArray isEqualTo []) then {
_useBtn ctrlEnable true;
_useBtn ctrlEnable true;
_config = 'CfgCrafting' call EPOCH_returnConfig;
_craftingConfig = _config >> _data;
if (isClass (_craftingConfig)) then {
_useBtn ctrlSetTextColor [0,1,0,1];
EPOCH_CraftingItem = EPOCH_InteractedItem select 0;
} else {
_useBtn ctrlEnable false;
_useBtn ctrlSetTextColor [1,0,0,1];
EPOCH_CraftingItem = "";
};

View File

@ -134,10 +134,7 @@ class CfgClientFunctions
class niteLight {};
class LootIT {};
class supportCopter {};
class itemInteract {};
class consumeItem {};
class craftItemPreview {};
class craftItem {};
class unitSpawn {};
class antiWall {};
class onEachFrame {};
@ -211,6 +208,7 @@ class CfgClientFunctions
class fnc_findSafePos {};
class pushCustomVar {};
class itemData {};
class itemPicture {};
class itemDisplayName {};
class SortArrayByDistance {};
@ -255,12 +253,35 @@ class CfgClientFunctions
};
class gui {
file = "\x\addons\a3_epoch_code\gui\scripts";
class onPause {};
class interactVehicle {};
class showStats {};
file = "\x\addons\a3_epoch_code\gui\scripts";
class onPause {};
class interactVehicle {};
class showStats {};
class dynamicMenu {};
class dynamicMenuCleanup {};
class 3DctrlPitchYaw {};
class 3DctrlSpin {};
class 3DctrlYaw {};
};
class gui_craft {
file = "\x\addons\a3_epoch_code\gui\scripts\craftingv2";
class crafting_animate {};
class crafting_ctrl_collector {};
class crafting_dev_toggle {};
class crafting_getConfig {};
class crafting_checkGear {};
class crafting_checkNearby {};
class crafting_checkResources {};
class crafting_craft {};
class crafting_progress {};
class crafting_load {};
class crafting_unload {};
class crafting_LB_click {};
class crafting_LB_defaults {};
class crafting_LB_doubleClick {};
class crafting_colorScheme {};
};
class group {
file = "\x\addons\a3_epoch_code\gui\scripts\group";
class Group_invitePlayer {};
@ -291,7 +312,12 @@ class CfgClientFunctions
class mission_refresh {};
class mission_description {};
};
class gui_postProcessing {
file = "\x\addons\a3_epoch_code\gui\scripts\post_process";
class postprocessCreate {};
class postprocessAdjust {};
class postprocessDestroy {};
};
};
};
#include "\x\addons\a3_epoch_code\gui\Epoch_GUI_Config.hpp"

View File

@ -38,6 +38,550 @@ class IGUIBack;
class CA_Title;
class ScrollBar;
class rmx_dynamenu {
idd = 66600;
enableSimulation = 1;
movingEnable = 1;
onLoad = "setMousePosition [0.5, 0.5];";
class controls {};
};
class rmx_rscPicture: RscPicture {
idc = -1;
x = 0.425; y = 0.4; w = 0.15; h = 0.2;
text = "";
};
class rmx_rscObject
{
idd = 77770;
movingEnable = 0;
enableSimulation = 1;
class Objects
{
class randomItem //pref less polies for starting item
{
idc = 77771;
type = 82;
model = "\x\addons\a3_epoch_assets\models\logo.p3d";
scale = 1;
direction[] = {0, -0.35, -0.65};
up[] = {0, 0.65, -0.35};
x = 0.5;
y = 0.5;
z = 0.2;
xBack = 0.5;
yBack = 0.5;
zBack = 1.2;
inBack = 1;
enableZoom = 0;
zoomDuration = 0.001;
};
};
};
class rmx_rscControlsGroup: RscControlsGroup
{
idc = -1;
x = 0; y = 0; w = 0; h = 0;
colorBackground[] = {0,0,0,0};
class VScrollbar: VScrollbar
{
width = 0;
};
class HScrollbar: VScrollbar
{
height = 0;
};
class controls {};
};
class rmx_craftingUI {
idd = 77700;
enableSimulation = 1;
movingEnable = 1;
onUnload = "call EPOCH_crafting_unload;";
onLoad = "setMousePosition [0.5, 0.5];";
class Objects
{
class randomItem2 //pref less polies for starting item
{
idc = 77701;
type = 82;
model = "\x\addons\a3_epoch_assets\models\logo.p3d";
scale = 1;
direction[] = {0, -0.35, -0.65};
up[] = {0, 0.65, -0.35};
x = 0.8125;
y = 0.287782;
z = 1;
xBack = 0.8125;
yBack = 0.287782;
zBack = 1.2;
inBack = 1;
enableZoom = 0;
zoomDuration = 0.001;
};
};
class controls
{
//Developer menu (DISABLE ON RELEASE)
//background
class dev_backgrnd: IGUIBack
{
idc = 77703;
x = 0.710375 * safezoneW + safezoneX;
y = 0.224906 * safezoneH + safezoneY;
w = 0.0845625 * safezoneW;
h = 0.22001 * safezoneH;
colorBackground[] = {0,0,0,0.5};
onLoad = "(_this select 0) ctrlShow false";
};
//buttons
class dev_btn_pic: RscPicture
{
idc = 77702;
text = "x\addons\a3_epoch_code\Data\UI\dev_mode_off.paa";
x = 0.795;
y = -0.064;
w = 0.2;
h = 0.075;
onLoad = "(_this select 0) ctrlShow false";
onMouseButtonDown = "call EPOCH_crafting_dev_toggle;";
};
class dev_btn_set: RscButton
{
idc = 77704;
text = "Set"; //--- ToDo: Localize;
x = 0.770187 * safezoneW + safezoneX;
y = 0.2316 * safezoneH + safezoneY;
w = 0.020625 * safezoneW;
h = 0.022 * safezoneH;
onLoad = "(_this select 0) ctrlShow false";
};
class dev_btn_rpt: RscButton
{
idc = 77705;
text = "Export"; //--- ToDo: Localize;
x = 0.712437 * safezoneW + safezoneX;
y = 0.414171 * safezoneH + safezoneY;
w = 0.0804375 * safezoneW;
h = 0.022 * safezoneH;
onLoad = "(_this select 0) ctrlShow false";
};
class dev_btn_setPos: RscButton
{
idc = 77706;
onLoad = "(_this select 0) ctrlShow false";
text = "Set Position"; //--- ToDo: Localize;
x = 0.712575 * safezoneW + safezoneX;
y = 0.384407 * safezoneH + safezoneY;
w = 0.0804375 * safezoneW;
h = 0.022 * safezoneH;
};
class dev_btn_vectorPlus: RscButton
{
idc = 77707;
onLoad = "(_this select 0) ctrlShow false";
text = "+"; //--- ToDo: Localize;
x = 0.778437 * safezoneW + safezoneX;
y = 0.266721 * safezoneH + safezoneY;
w = 0.012375 * safezoneW;
h = 0.022 * safezoneH;
action = "rmx_var_3dCtrlSpin_Vector = rmx_var_3dCtrlSpin_Vector + 0.1; (rmx_var_crafting_ctrl_DEV select 10) ctrlSetText str rmx_var_3dCtrlSpin_Vector;";
};
class dev_btn_vectorMinus: RscButton
{
idc = 77708;
onLoad = "(_this select 0) ctrlShow false";
text = "-"; //--- ToDo: Localize;
x = 0.73925 * safezoneW + safezoneX;
y = 0.266721 * safezoneH + safezoneY;
w = 0.012375 * safezoneW;
h = 0.022 * safezoneH;
action = "rmx_var_3dCtrlSpin_Vector = rmx_var_3dCtrlSpin_Vector - 0.1; (rmx_var_crafting_ctrl_DEV select 10) ctrlSetText str rmx_var_3dCtrlSpin_Vector;";
};
//edit
class dev_edit_scale: RscEdit
{
idc = 77709;
text = "1"; //--- ToDo: Localize;
x = 0.743375 * safezoneW + safezoneX;
y = 0.2316 * safezoneH + safezoneY;
w = 0.02475 * safezoneW;
h = 0.022 * safezoneH;
onLoad = "(_this select 0) ctrlShow false";
};
class dev_edit_x: RscEdit
{
idc = 77710;
onLoad = "(_this select 0) ctrlShow false";
text = "0.123456"; //--- ToDo: Localize;
x = 0.748524 * safezoneW + safezoneX;
y = 0.2998 * safezoneH + safezoneY;
w = 0.0443435 * safezoneW;
h = 0.022 * safezoneH;
};
class dev_edit_z: RscEdit
{
idc = 77711;
onLoad = "(_this select 0) ctrlShow false";
text = "0.123456"; //--- ToDo: Localize;
x = 0.748948 * safezoneW + safezoneX;
y = 0.325807 * safezoneH + safezoneY;
w = 0.0443435 * safezoneW;
h = 0.022 * safezoneH;
};
class dev_edit_y: RscEdit
{
idc = 77712;
onLoad = "(_this select 0) ctrlShow false";
text = "0.123456"; //--- ToDo: Localize;
x = 0.749458 * safezoneW + safezoneX;
y = 0.352082 * safezoneH + safezoneY;
w = 0.0443435 * safezoneW;
h = 0.022 * safezoneH;
};
class dev_edit_vector: RscEdit
{
idc = 77713;
onLoad = "(_this select 0) ctrlShow false";
text = "0"; //--- ToDo: Localize;
x = 0.755234 * safezoneW + safezoneX;
y = 0.267601 * safezoneH + safezoneY;
w = 0.0195937 * safezoneW;
h = 0.022 * safezoneH;
};
//text
class dev_txt_scale: RscText
{
idc = 77714;
text = "Scale:"; //--- ToDo: Localize;
x = 0.712437 * safezoneW + safezoneX;
y = 0.2338 * safezoneH + safezoneY;
w = 0.028875 * safezoneW;
h = 0.0154 * safezoneH;
onLoad = "(_this select 0) ctrlShow false";
};
class dev_txt_X: RscText
{
idc = 77715;
onLoad = "(_this select 0) ctrlShow false";
text = "X:"; //--- ToDo: Localize;
x = 0.712703 * safezoneW + safezoneX;
y = 0.303578 * safezoneH + safezoneY;
w = 0.028875 * safezoneW;
h = 0.0154 * safezoneH;
};
class dev_txt_z: RscText
{
idc = 77716;
onLoad = "(_this select 0) ctrlShow false";
text = "Z:"; //--- ToDo: Localize;
x = 0.712543 * safezoneW + safezoneX;
y = 0.329511 * safezoneH + safezoneY;
w = 0.028875 * safezoneW;
h = 0.0154 * safezoneH;
};
class dev_txt_y: RscText
{
idc = 77717;
onLoad = "(_this select 0) ctrlShow false";
text = "Y:"; //--- ToDo: Localize;
x = 0.712564 * safezoneW + safezoneX;
y = 0.356482 * safezoneH + safezoneY;
w = 0.028875 * safezoneW;
h = 0.0154 * safezoneH;
};
class dev_txt_3D: RscText //3d preview red
{
idc = 77718;
text = "";
x = 0.6;
y = 0.04;
w = 0.4;
h = 0.44;
colorBackground[] = {1,0,0,0.3};
onLoad = "(_this select 0) ctrlShow false";
};
class dev_txt_Vector: RscText
{
idc = 77719;
onLoad = "(_this select 0) ctrlShow false";
text = "vUP:"; //--- ToDo: Localize;
x = 0.712437 * safezoneW + safezoneX;
y = 0.268921 * safezoneH + safezoneY;
w = 0.0226875 * safezoneW;
h = 0.0154 * safezoneH;
};
// ----------- MAIN GUI PART ----------- //
//background
class rmx_cUI_back: IGUIBack
{
idc = 77800;
x = 0;
y = 0;
w = 1;
h = 1;
colorBackground[] = {0,0,0,0.1};
onLoad = "_cl = _this select 0; _cl ctrlSetFade 1; _cl ctrlCommit 0; _cl ctrlSetFade 0; _cl ctrlCommit 1;";
};
//Buttons
class rmx_cUI_btn_craft: RscPicture
{
idc = 77801;
text = "\x\addons\a3_epoch_code\Data\UI\crafting\close.paa";
x = 0.9;
y = 0.92;
w = 0.1;
h = 0.08;
onLoad = "[(_this select 0),[1,0.92,0,0.08],[0.9,0.92,0.1,0.08]] call EPOCH_crafting_animate;";
onMouseButtonUp = "call epoch_crafting_craft;";
};
class rmx_cUI_btn_clear: RscButton
{
idc = 77802;
text = "X"; //--- ToDo: Localize;
x = 0.26;
y = 0.04;
w = 0.04;
h = 0.052;
onLoad = "[(_this select 0),[0.26,0.04,0,0],[0.26,0.04,0.04,0.052]] call EPOCH_crafting_animate;";
action = "(rmx_var_crafting_ctrl_Interact select 4) ctrlSetText ''; lbClear (rmx_var_crafting_ctrl_main select 1);";
};
//Progressbar
class rmx_cUI_pb: RscProgress
{
idc = 77803;
texture = "#(argb,8,8,3)color(1,1,1,1)";
textureExt = "";
colorBar[] = {1, 1, 1, 0.1};
colorExtBar[] = {1, 1, 1, 1};
colorFrame[] = {1, 1, 1, 1};
x = 0.6;
y = 0.92;
w = 0.3;
h = 0.08;
onLoad = "[(_this select 0),[0.6,0.92,0,0.08],[0.6,0.92,0.3,0.08]] call EPOCH_crafting_animate; (_this select 0) ctrlEnable true;";
onMouseMoving = "if (rmx_var_crafting_progressClicked && rmx_var_craftQTY != 0) then {(_this select 0) progressSetPosition (((_this select 1)-0.6)*3.3 );};";
onMouseHolding = "if (rmx_var_crafting_progressClicked && rmx_var_craftQTY != 0) then {(_this select 0) progressSetPosition (((_this select 1)-0.6)*3.3 );};";
onMouseButtonDown = "rmx_var_crafting_progressClicked = true;";
onMouseButtonUp = "rmx_var_crafting_progressClicked = false;";
};
//progressbar QTY
class rmx_cUI_txt_QTY: RscText
{
idc = 77804;
style = 0x02; //vcenter = 0x0c
text = "";
x = 0.6;
y = 0.92;
w = 0.3;
h = 0.08;
colorBackground[] = {0,0,0,0.2};
colorText[] = {1,0.6,0.01,1};
onLoad = "[(_this select 0),[0.6,0.92,0,0.08],[0.6,0.92,0.3,0.08]] call EPOCH_crafting_animate;";
};
//edit
class rmx_cUI_edit_searchField: RscEdit
{
idc = 77810;
text = ""; //--- ToDo: Localize;
x = 0.0025;
y = 0.04;
w = 0.2575;
h = 0.052;
colorBackground[] = {0,0,0,0.5};
onLoad = "[(_this select 0),[0.0025,0.04,0,0.052],[0.0025,0.04,0.2575,0.052]] call EPOCH_crafting_animate;";
};
//listboxes
class rmx_cUI_LB_recipes: RscListbox
{
idc = 77811;
x = 0;
y = 0.092;
w = 0.3;
h = 0.908;
onLoad = "[(_this select 0),[0,0.092,0.3,0],[0,0.092,0.3,0.908]] call EPOCH_crafting_animate;";
onLBSelChanged = "call EPOCH_crafting_LB_click;";
};
class rmx_cUI_LB_ingredients: RscListbox
{
idc = 77812;
x = 0.3;
y = 0.04;
w = 0.3;
h = 0.96;
onLoad = "[(_this select 0),[0.3,0.04,0.3,0],[0.3,0.04,0.3,0.96]] call EPOCH_crafting_animate;";
onLBDblClick = "call EPOCH_crafting_LB_doubleClick;";
};
//Structured Text
class rmx_cUI_st_description: RscStructuredText
{
idc = 77820;
text = "..............................."; //--- ToDo: Localize;
x = 0.6;
y = 0.524;
w = 0.4;
h = 0.392;
colorBackground[] = {0,0,0,0};
};
//Text
class rmx_cUI_txt_recipes: RscText
{
idc = 77840;
text = "Recipes"; //--- ToDo: Localize;
x = 0;
y = 0;
w = 0.3;
h = 0.04;
colorBackground[] = {0,0,0,0.8};
onLoad = "[(_this select 0),[0,0,0,0.04],[0,0,0.3,0.04]] call EPOCH_crafting_animate;";
};
class rmx_cUI_txt_ingredients: RscText
{
idc = 77841;
text = "Ingredients"; //--- ToDo: Localize;
x = 0.3;
y = 0;
w = 0.2975;
h = 0.04;
colorBackground[] = {0,0,0,0.8};
onLoad = "[(_this select 0),[0.3,0,0,0.04],[0.3,0,0.2975,0.04]] call EPOCH_crafting_animate;";
};
class rmx_cUI_txt_preview: RscText
{
idc = 77842;
text = "Preview"; //--- ToDo: Localize;
x = 0.6;
y = 0;
w = 0.3975;
h = 0.04;
colorBackground[] = {1,0.6,0.01,0.8};
onLoad = "[(_this select 0),[0.6,0,0,0.04],[0.6,0,0.3975,0.04]] call EPOCH_crafting_animate;";
};
class rmx_cUI_txt_resources: RscText
{
idc = 77843;
text = "Resources"; //--- ToDo: Localize;
x = 0.3;
y = 0.96;
w = 0.2975;
h = 0.04;
colorBackground[] = {0,0,0,0.8};
onLoad = "(_this select 0) ctrlShow false";
};
class rmx_cUI_txt_description: RscText
{
idc = 77844;
text = "Description"; //--- ToDo: Localize;
x = 0.6;
y = 0.48;
w = 0.3975;
h = 0.04;
colorBackground[] = {0,0,0,0.8};
onLoad = "[(_this select 0),[0.6,0.48,0,0.04],[0.6,0.48,0.3975,0.04]] call EPOCH_crafting_animate;";
};
//frames
class rmx_cUI_frame_recipes: RscFrame
{
idc = 77830;
x = 0;
y = 0;
w = 0.3;
h = 1;
};
class rmx_cUI_frame_craft: RscFrame
{
idc = 77831;
x = 0.3;
y = 0;
w = 0.3;
h = 1;
};
class rmx_cUI_frame_preview: RscFrame
{
idc = 77832;
x = 0.6;
y = 0;
w = 0.4;
h = 0.48;
};
class rmx_cUI_frame_resources: RscFrame
{
idc = 77833;
x = 0.3;
y = 0.92;
w = 0.3;
h = 0.08;
onLoad = "(_this select 0) ctrlShow false";
};
class rmx_cUI_frame_description: RscFrame
{
idc = 77834;
x = 0.6;
y = 0.48;
w = 0.4;
h = 0.44;
};
class rmx_cUI_frame_qty: RscFrame
{
idc = 77835;
x = 0.6;
y = 0.92;
w = 0.4;
h = 0.08;
};
};
};
class RscCustomProgress : RscProgress
{
texture = "";
@ -231,7 +775,33 @@ class RscTitles
};
};
};
class rmx_progressTest
{
idd = 10200;
duration = 999999;
fadein = 0.5;
fadeout = 0.5;
onLoad = "uiNamespace setVariable ['rmx_var_progressTestDisplay',_this select 0]";
class controls {};
};
class rmx_CraftingProgress
{
idd = 10100;
duration = 999999;
fadein = 0.2;
fadeout = 0.2;
onLoad = "uiNamespace setVariable ['rmx_var_CraftingProgressDisplay',_this select 0]";
class controls {};
};
class Default //use to delete title resources
{
idd = -1;
fadein = 0;
fadeout = 0;
duration = 0;
};
};
/*
@ -1693,7 +2263,7 @@ class InteractBaseBuilding
*/
};
};
/*
class InteractItem
{
idd = -15;
@ -2256,7 +2826,7 @@ class InteractItem
};
};
*/
class Trade
{
idd = -1900;
@ -2546,6 +3116,7 @@ class RscDisplayInventory_DLCTemplate
};
};
};
class RscDisplayInventory
{
@ -3246,10 +3817,8 @@ class RscDisplayInventory
class UniformContainer : GroundContainer
{
onLBDblClick = "_this call EPOCH_itemInteract";
//onLBDblClick = "_this call EPOCH_itemInteract";
onLBSelChanged = "_this call EPOCH_itemInteractV2";
onLBDrag = "";
onLBSelChanged = "";
idc = 633;
x = "15.1 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
@ -3384,13 +3953,13 @@ class RscDisplayInventory
class EpochBtnBG : IGUIBack
{
idc = -10;
/*
x = 0.433468 * safezoneW + safezoneX;
y = 0.75872 * safezoneH + safezoneY;
w = 0.30231 * safezoneW;
h = 0.0337482 * safezoneH;
*/
//x = 0.433468 * safezoneW + safezoneX;
//y = 0.75872 * safezoneH + safezoneY;
//w = 0.30231 * safezoneW;
//h = 0.0337482 * safezoneH;
x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "23.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "24.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
@ -3403,12 +3972,12 @@ class RscDisplayInventory
idc = -11;
text = "Group Menu";
onMouseButtonDown = "_this call EPOCH_Inventory_Group";
/*
x = 0.437079 * safezoneW + safezoneX;
y = 0.764 * safezoneH + safezoneY;
w = 0.0711741 * safezoneW;
h = 0.022 * safezoneH;
*/
//x = 0.437079 * safezoneW + safezoneX;
//y = 0.764 * safezoneH + safezoneY;
//w = 0.0711741 * safezoneW;
//h = 0.022 * safezoneH;
x = "33.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
@ -3419,12 +3988,12 @@ class RscDisplayInventory
idc = -12;
text = "Requests";
onMouseButtonDown = "_this call EPOCH_Inventory_iGroup";
/*
x = 0.511347 * safezoneW + safezoneX;
y = 0.764 * safezoneH + safezoneY;
w = 0.0711741 * safezoneW;
h = 0.022 * safezoneH;
*/
//x = 0.511347 * safezoneW + safezoneX;
//y = 0.764 * safezoneH + safezoneY;
//w = 0.0711741 * safezoneW;
//h = 0.022 * safezoneH;
x = "27.0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
@ -3435,12 +4004,12 @@ class RscDisplayInventory
idc = -13;
text = "EXAMINE";
onMouseButtonDown = "call EPOCH_consumeItem";
/*
x = 0.585617 * safezoneW + safezoneX;
y = 0.764 * safezoneH + safezoneY;
w = 0.0711741 * safezoneW;
h = 0.022 * safezoneH;
*/
//x = 0.585617 * safezoneW + safezoneX;
//y = 0.764 * safezoneH + safezoneY;
//w = 0.0711741 * safezoneW;
//h = 0.022 * safezoneH;
x = "14.62 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
@ -3450,13 +4019,13 @@ class RscDisplayInventory
{
idc = -14;
text = "CRAFT";
onMouseButtonDown = "true call EPOCH_itemInteract";
/*
x = 0.659883 * safezoneW + safezoneX;
y = 0.764 * safezoneH + safezoneY;
w = 0.0711741 * safezoneW;
h = 0.022 * safezoneH;
*/
onMouseButtonDown = "EPOCH_CraftingItem call EPOCH_crafting_load;";
//x = 0.659883 * safezoneW + safezoneX;
//y = 0.764 * safezoneH + safezoneY;
//w = 0.0711741 * safezoneW;
//h = 0.022 * safezoneH;
x = "20.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)";

View File

@ -0,0 +1,25 @@
/*
Spins 3D dialog along X and Z axis following mouse input
Requires source control to read coords from and destination 3D control
Can be applied to 3D control itself, but not recommended, pref use transparent rscPicture (enable it).
_ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"];
*/
params ["_arr","_ctrl3D"];
disableSerialization;
_inX = (_arr select 2) * 720;
_inY = (_arr select 1) * 720;
_dirY = cos _inX;
_upY = -sin _inX;
_dirX = -(_dirY * sin _inY);
_dirY = _dirY * cos _inY;
_upX = -(_upY * sin _inY);
_upY = _upY * cos _inY;
_ctrl3D ctrlSetModelDirAndUp [[_dirX,_dirY,sin _inX],[_upX,_upY,cos _inX]];
true

View File

@ -0,0 +1,25 @@
/*
Spins a 3D dialog
[control] call epoch_3DctrlSpin;
*/
_this spawn {
disableSerialization;
params ["_ctrl3D"];
rmx_var_3dCtrlSpin = true;
_ctrlPos = ctrlPosition _ctrl3D;
if (isNil "rmx_var_3dCtrlSpin_Vector") then {rmx_var_3dCtrlSpin_Vector = 0;};
while {rmx_var_3dCtrlSpin} do {
for "_i" from 0 to 360 do {
_vector = (360 - _i) - 360;
_ctrl3D ctrlSetModelDirAndUp [[-(sin _vector),cos _vector,0],[cos _vector * rmx_var_3dCtrlSpin_Vector,sin _vector * rmx_var_3dCtrlSpin_Vector,1]];
if !(rmx_var_3dCtrlSpin) exitWith{};
uiSleep 0.01;
};
};
};
true

View File

@ -0,0 +1,17 @@
/*
Spins 3D dialog along Z axis following mouse input
Requires source control to read coords from and destination 3D control
Can be applied to 3D control itself, but not recommended, pref use transparent rscPicture (enable it).
_ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"];
*/
params ["_arr","_ctrl3D"];
disableSerialization;
_inX = (_arr select 2) * 180;
_inY = (_arr select 1) * 180;
_ctrl3D ctrlSetModelDirAndUp [[-(cos _inX * sin _inY),cos _inX * cos _inY,0],[0,0,1]];
true

View File

@ -0,0 +1,138 @@
//TODO: read key press from global var (profileNamespace config)
//TODO: admin choice to use missionConfigFile
//TODO: (Ask team) suffix code to close dialog when button pressed
//TODO: unlimited categories
//TODO: functionize var Defines, do check before button action
//TODO: nil before closing display
//TODO: add commented out dialog version to display
//TODO: add cooldown
//TODO: prevent from opening and instantly close if known display is on
if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {};
if (isNil "rmx_var_dynamicMenuCat") then {rmx_var_dynamicMenuCat = "";};
if (rmx_var_dynamicMenuCat isEqualTo "" && !isNil "rmx_var_dynamicMenuHOLD") exitWith {};
private ["_display","_cfg","_cat","_buttonSettings","_configs","_subclasses","_action","_entries","_img","_img2","_center","_defaultScaleX","_defaultScaleY","_distance","_scaleLargeX","_scaleLargeY","_scaleSmallX","_scaleSmallY","_scaleSelectedX","_scaleSelectedY","_points","_positions","_positions2","_positions3","_x","_y"];
disableSerialization;
rmx_var_dynamicMenuInProgress = true; //needed to suspend button spam, removed later
_display = (findDisplay 46) createDisplay "rmx_dynamenu";
_display displaySetEventHandler ["keyUp", "[false,_this select 1] call Epoch_dynamicMenuCleanup;"];
//TODO: config choice based on global variable or dynamic config update (slower)
_cfg = configFile;
/** Variable Defines **/
{
call compile (format ["%1 = %2;",configName _x,getText _x]);
} count (configProperties [(_cfg >> "cfgDynamicMenu" >> "variableDefines"),"true",false]);
_cat = if (rmx_var_dynamicMenuCat isEqualTo "") then {
(_cfg >> "cfgDynamicMenu" >> "dynaButtons")
} else {
(_cfg >> "cfgDynamicMenu" >> "dynaButtons" >> rmx_var_dynamicMenuCat)
};
/** Button configs **/
_buttonSettings = [];
_configs = "true" configClasses (_cat);
{
if (call compile (getText(_x >> "condition"))) then {
_subclasses = configProperties [_x, "isClass _x",true];
_action = if (_subclasses isEqualTo []) then {
compile (format ["%1",getText(_x >> "action")])
} else {
compile (format ["[true,57] call Epoch_dynamicMenuCleanup; rmx_var_dynamicMenuCat = '%1'; %2",(configName _x),getText(_x >> "action")])
};
//diag_log _action;
_buttonSettings pushBack [
getText(_x >> "icon"),
getText(_x >> "tooltip"),
_action
];
};
} forEach _configs;
_entries = count _buttonSettings;
if (_entries <= 0) exitWith {rmx_var_tabmenu = true; rmx_var_dynamicMenuInProgress = nil;};
//Post processing
if (isNil "rmx_var_dynamenuPPHandle") then {
rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate;
[rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust;
};
_img = "#(rgb,8,8,3)color(0,0,0,0)";
_img2 = "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection.paa";
//defaults don't edit
_center = 0.5;
_defaultScaleX = 0.4;
_defaultScaleY = 0.5;
_distance = 0.7 + _entries / 100;
//edit scaling here (divisor only, larger values produce smaller image)
_scaleLargeX = _defaultScaleX / (1.5 + _entries / 10); //anim invisible
_scaleLargeY = _defaultScaleY / (1.5 + _entries / 10);
_scaleSmallX = _defaultScaleX / (2.5 + _entries / 10); //icons
_scaleSmallY = _defaultScaleY / (2.5 + _entries / 10);
_scaleSelectedX = _defaultScaleX / (1.75 + _entries / 10); //anim selected
_scaleSelectedY = _defaultScaleY / (1.75 + _entries / 10);
_points = 360 / _entries;
_positions = [];
_positions2 = [];
_positions3 = [];
for "_p" from 0 to 360 step _points do {
_x = cos _p * (0.3 * _distance);
_y = sin _p * (0.4 * _distance);
_positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY];
_positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY];
_positions3 pushBack [_x + (_center - (_scaleSelectedX / 2)),_y + (_center - (_scaleSelectedY / 2)),_scaleSelectedX,_scaleSelectedY];
};
rmx_var_controls = [];
//_buttonSettings [icon,tooltip,action]
for "_e" from 0 to (_entries - 1) do {
private ["_ctrl","_ctrl2"];
_ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)];
_ctrl ctrlSetText _img;
_ctrl ctrlSetPosition (_positions select _e);
_ctrl ctrlCommit 0.1;
_ctrl ctrlSetTooltip (_buttonSettings select _e select 1);
_ctrl ctrlSetTooltipColorBox [0, 0, 0, 0];
_ctrl ctrlSetTooltipColorShade [0, 0, 0, 0];
_ctrl ctrlSetEventHandler ["mouseEnter", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img2,(_positions3 select _e)])];
_ctrl ctrlSetEventHandler ["mouseExit", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img,(_positions select _e)])];
_ctrl ctrlSetEventHandler ["mouseButtonDown", (format ["call %1;",(_buttonSettings select _e select 2)])];
_ctrl ctrlEnable true;
_ctrl2 = _display ctrlCreate ["rmx_rscPicture",-(66600 + _e)];
_ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1);
_ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0];
_ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0];
_ctrl2 ctrlSetText (_buttonSettings select _e select 0);
_ctrl2 ctrlSetPosition (_positions2 select _e);
_ctrl2 ctrlCommit 0.1;
rmx_var_controls pushBack _ctrl;
rmx_var_controls pushBack _ctrl2;
};
/** Variable Cleanup **/
{
call compile (format ["%1 = nil;",configName _x]);
} count (configProperties [(_cfg >> "cfgDynamicMenu" >> "variableDefines"),"true",false]);
rmx_var_dynamicMenuInProgress = nil;
rmx_var_dynamicMenuCat = "";
true

View File

@ -0,0 +1,31 @@
_test = param [1,0];
if (_test != 57) exitWith {true}; //dirty fix, TODO: read values from epoch startup vars for key
_this spawn {
if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {};
_args = param [0,false,[false]]; //true if redirected with category, false for full cleanup
if (_args) then {rmx_var_dynamicMenuHOLD = true;} else {rmx_var_dynamicMenuHOLD = nil; rmx_var_dynamicMenuCat = nil;};
disableSerialization;
private "_animSpeed";
_animSpeed = 0.1;
{
_x ctrlSetPosition [0.4625,0.45,0.075,0.1];
_x ctrlSetFade 1;
_x ctrlCommit _animSpeed;
} forEach rmx_var_controls;
[rmx_var_dynamenuPPHandle, _animSpeed, [0]] call epoch_postprocessAdjust;
uiSleep _animSpeed;
findDisplay 66600 closeDisplay 1;
rmx_var_controls = nil;
rmx_var_dynamenuPPHandle call epoch_postprocessDestroy;
rmx_var_dynamenuPPHandle = nil;
};
true

View File

@ -0,0 +1,94 @@
if (rmx_var_crafting_SearchConfigData isEqualTo []) exitWith {false};
private ["_cfg","_ingredientCTRL","_STdesc","_3DCTRL","_selection","_ingredientData","_recipes","_usedIn","_nearbyCount","_idx","_data","_countData","_itemsPlayer","_itemsNearby","_itemsRequired","_lbColor"];
_cfg = 'CfgCrafting' call EPOCH_returnConfig;
_ingredientCTRL = rmx_var_crafting_ctrl_main select 1;
_STdesc = rmx_var_crafting_ctrl_main select 2;
_3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0;
_selection = lbCurSel (rmx_var_crafting_ctrl_main select 0);
_ingredientData = rmx_var_crafting_SearchConfigData select _selection;
_recipes = _ingredientData select 7;
_usedIn = _ingredientData select 9;
_nearbyCount = []; //required
lbClear _ingredientCTRL;
if !(_recipes isEqualTo []) then {
_nearbyCount = [_recipes] call EPOCH_crafting_checkGear;
_idx = _ingredientCTRL lbAdd (rmx_var_crafting_colorScheme select 8 select 0);
_ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 8 select 1)];
{
if !(typeName _x isEqualTo typeName []) then {_x = [_x,1]};
_data = ([(_cfg >> (_x select 0))] call EPOCH_crafting_getConfig) select 0;
_idx = _ingredientCTRL lbAdd format ["%2 x %1",(_data select 1),_x select 1];
_ingredientCTRL lbSetPictureRight [_idx,(_data select 2)];
_ingredientCTRL lbSetData [_idx, (_data select 1)];
_countData = _nearbyCount select _forEachIndex;
_itemsPlayer = _countData select 0;
_itemsNearby = _countData select 1;
_itemsRequired = _countData select 2;
_ingredientCTRL lbSetTooltip [_idx,format ["On player: [%1/%2], Nearby: [%3/%2], Crafting time: %4 second(s)",_itemsPlayer,_itemsRequired,_itemsNearby,_ingredientData select 6]];
_lbColor = if (_itemsPlayer >= _itemsRequired) then {
rmx_var_crafting_colorScheme select 11
} else {
if (_itemsNearby >= _itemsRequired) then {
rmx_var_crafting_colorScheme select 12
} else {
rmx_var_crafting_colorScheme select 13
};
};
_ingredientCTRL lbSetColor [_idx,_lbColor];
} forEach _recipes;
};
if !(_usedIn isEqualTo []) then {
_ingredientCTRL lbAdd "";
_idx = _ingredientCTRL lbAdd (rmx_var_crafting_colorScheme select 9 select 0);
_ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 9 select 1)];
{
if !(typeName _x isEqualTo typeName []) then {_x = [_x,1]};
_data = ([(_cfg >> (_x select 0))] call EPOCH_crafting_getConfig) select 0;
_idx = _ingredientCTRL lbAdd format ["%2 x %1",(_data select 1),_x select 1];
_ingredientCTRL lbSetPictureRight [_idx,(_data select 2)];
_ingredientCTRL lbSetData [_idx, (_data select 1)];
_ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 14)];
_ingredientCTRL lbSetTooltip [_idx,"Double click to search for this item"];
} forEach _usedIn;
};
_STdesc ctrlSetStructuredText (composeText [(_ingredientData select 3),parseText "<br /><br />",parseText(_ingredientData select 14)]);
_3DCTRL ctrlSetModel (_ingredientData select 4);
_3DCTRL ctrlSetPosition (_ingredientData select 10);
_3DCTRL ctrlSetModelScale (_ingredientData select 11);
rmx_var_3dCtrlSpin_Vector = (_ingredientData select 12);
ctrlSetFocus _ingredientCTRL;
(rmx_var_crafting_ctrl_Interact select 2) progressSetPosition 0;
//Crafting quantity math
rmx_var_craftQTY = if !(_nearbyCount isEqualTo []) then {
private ["_c","_p","_r","_arr"];
_c = 1e39; //infinite
{
_p = _x select 0;
_r = _x select 2;
if (_p < _r) exitWith {_c = 0};
_c = _c min (_p / _r);
} forEach _nearbyCount;
floor _c
} else { 0 };
true call EPOCH_crafting_checkResources;
if (ctrlShown (rmx_var_crafting_ctrl_DEV select 0)) then {
call rmx_fnc_crafting3DPosText;
(rmx_var_crafting_ctrl_DEV select 6) ctrlSetText str (_ingredientData select 11); //scale
(rmx_var_crafting_ctrl_DEV select 10) ctrlSetText str (_ingredientData select 12); //vector
};
true

View File

@ -0,0 +1,32 @@
private ["_recipeCTRL","_STdesc","_lbColor","_playerGear"];
_recipeCTRL = rmx_var_crafting_ctrl_main select 0;
_STdesc = rmx_var_crafting_ctrl_main select 2;
_lbColor = rmx_var_crafting_colorScheme select 10;
lbClear _recipeCTRL;
_playerGear = (magazines player) + (items player) + (weapons player);
{
_idx = if (_x select 0 in _playerGear) then {
_y = _x select 0;
_idx = _recipeCTRL lbAdd format (["%1x %2",({_x == _y}count _playerGear),(_x select 1)]);
_recipeCTRL lbSetColor [_idx,_lbColor];
_idx
} else {
_recipeCTRL lbAdd (_x select 1)
};
_recipeCTRL lbSetPictureRight [_idx,(_x select 2)];
_recipeCTRL lbSetData [_idx,(_x select 0)];
} forEach rmx_var_crafting_SearchConfigData;
_STdesc ctrlSetStructuredText composeText
[
parseText "<t color='#FD7F30'>Search: <t color='#FFFFFF'>Find recipe, X to clear.</t><br />",
parseText "<t color='#FD7F30'>Recipes: <t color='#FFFFFF'>Select an item to craft.</t><br />",
parseText "<t color='#FD7F30'>Ingredients: <t color='#FFFFFF'>Items required to craft.</t><br />",
parseText "<t color='#FD7F30'>Quantity: <t color='#FFFFFF'>Move slider to set amount.</t><br />",
parseText "<br /><t color='#E1FD70'>TIP: <t color='#FFFFFF'>Double click an item inside ingredients list to find recipe for it.</t><br />",
parseText "<br /><t color='#FD7F30'>www: <t color='#FFFFFF'><a href='http://epochmod.com/'>EpochMod.com</a></t>"
];
true

View File

@ -0,0 +1,7 @@
private ["_idx","_txt"];
_idx = lbCurSel (rmx_var_crafting_ctrl_main select 1);
_txt = (rmx_var_crafting_ctrl_main select 1) lbData _idx;
(rmx_var_crafting_ctrl_Interact select 4) ctrlSetText _txt;
true

View File

@ -0,0 +1,9 @@
params ["_ctrl","_first","_second",["_speed",0.5]];
_ctrl ctrlSetPosition _first;
_ctrl ctrlCommit 0;
_ctrl ctrlSetPosition _second;
_ctrl ctrlCommit _speed;
true

View File

@ -0,0 +1,22 @@
private ["_recipes","_nearObjects","_near","_out","_player","_recipe","_cP","_cN"];
params ["_recipes"];
_nearObjects = nearestObjects [position player,["WeaponHolder","LandVehicle","Air"],10];
_near = []; _out = [];
{
_near append magazineCargo _x;
_near append itemCargo _x;
_near append weaponCargo _x;
} forEach _nearObjects;
_player = (magazines player) + (items player) + (weapons player);
{
_recipe = if (typeName _x isEqualTo "STRING") then {[_x,1]} else {_x};
_cP = {_x == (_recipe select 0)} count _player;
_cN = {_x == (_recipe select 0)} count _near;
_out pushBack [_cP, _cN, _recipe select 1];
} forEach _recipes;
_out

View File

@ -0,0 +1,46 @@
private ["_arr","_type","_check","_dist","_cnt","_inflamed","_alive","_nearObjects","_result"];
_arr = param [3,[2,""]];
_type = _arr select 0;
_check = _arr select 1;
_dist = param [4,0];
_cnt = param [5,1];
_inflamed = param [6,0];
_alive = param [7,0];
_result = true;
switch (_type) do {
case 0:
{
private ["_test1","_test2","_find"];
_nearObjects = nearestObjects [player, [], _dist];
_test1 = 0;
{
_test2 = _x;
_find = {(str _x find _test2) != -1} count _nearObjects;
_test1 = _test1 + _find;
} forEach _check;
_result = (_cnt <= _test1);
};
case 1:
{
_nearObjects = nearestObjects [player, _check, _dist];
_result = (_cnt <= (count _nearObjects));
};
};
if !(_result) exitWith {false}; //not enough objects
if (_inflamed > 0) then {
_countOnFire = 0;
_countOnFire = {inflamed _x} count _nearObjects;
_result = (_cnt <= _countOnFire);
};
if !(_result) exitWith {false};
if (_alive > 0) then {
_countAlive = 0;
_countAlive = {alive _x} count _nearObjects;
_result = (_cnt <= _countAlive);
};
_result

View File

@ -0,0 +1,93 @@
private ["_in","_out","_cfg","_selection","_nearbyArr"];
params [["_in",false,[true]]];
//Defines
_out = true;
_cfg = 'CfgCrafting' call EPOCH_returnConfig;
_selection = lbCurSel (rmx_var_crafting_ctrl_main select 0);
_nearbyArr = rmx_var_crafting_SearchConfigData select _selection select 8;
//check nearby resources only, requires false args
if !(_in) exitWith {
if !(_nearbyArr isEqualTo []) then { //just to be safe
{
_out = _x call EPOCH_crafting_checkNearby;
if !(_out) exitWith {};
} forEach _nearbyArr;
};
_out
};
disableSerialization;
private ["_display","_ncGroup","_ncCFrame","_ncRFrame","_ncRText","_ncCLB"];
_display = findDisplay 77700;
if (isNil "rmx_var_crafting_ctrl_GROUP") then {
rmx_var_crafting_ctrl_GROUP = [_display ctrlCreate ["rmx_rscControlsGroup",77821]];
} else {
ctrlDelete (rmx_var_crafting_ctrl_GROUP select 0);
rmx_var_crafting_ctrl_GROUP = [_display ctrlCreate ["rmx_rscControlsGroup",77821]];
};
_ncCFrame = rmx_var_crafting_ctrl_main select 3;
_ncRFrame = rmx_var_crafting_ctrl_main select 4;
_ncRText = rmx_var_crafting_ctrl_main select 5;
_ncCLB = rmx_var_crafting_ctrl_main select 1;
_ncGroup = rmx_var_crafting_ctrl_GROUP select 0;
if !(_nearbyArr isEqualTo []) then {
_ncGroup ctrlShow true;
_ncRFrame ctrlShow true;
_ncRText ctrlShow true;
private ["_chck","_color","_img","_imgParsed","_cnt","_countTxt","_txt","_stText","_count","_h","_animSpeed"];
{
private "_ctrl";
_chck = _x call EPOCH_crafting_checkNearby;
if !(_chck) then {_out = false};
_color = if (_chck) then {"#00FF00"} else {"#FF0000"};
_img = if (_x select 1 isEqualTo "") then {
format ["\x\addons\a3_epoch_code\Data\UI\crafting\%1_%2.paa",(_x select 2),_chck]
} else {
format ["%1%2_%3",(_x select 1),(_x select 2),_chck]
};
_imgParsed = parseText format ["<t size='2'><img image='%1' /></t>",_img];
_cnt = if ((_x select 5) < 1) then {1} else {_x select 5};
_countTxt = if (_cnt isEqualTo 1) then {""} else {format ["%1x",_cnt]};
_txt = parseText format ["<t size='1' color='%1'> %3 %2 %4m</t>",_color,(_x select 0),_countTxt,(_x select 4)];
_stText = composeText [_imgParsed,_txt];
_ctrl = _display ctrlCreate ["RscStructuredText", -(77800 + _forEachIndex),_ncGroup];
_ctrl ctrlSetPosition [0,(0.08 * _forEachIndex),0.3,0.08];
_ctrl ctrlCommit 0;
_ctrl ctrlSetStructuredText _stText;
} forEach _nearbyArr;
_count = 8 min (count _nearbyArr); //maximum 8 of resources displayed
_h = 0.08 * _count;
_animSpeed = 0.2;
[_ncGroup, [0.3,1,0.3,0], [0.3,(1-_h),0.3,_h], _animSpeed] call EPOCH_crafting_animate;
[_ncCFrame, [0.3,0,0.3,1], [0.3,0,0.3,(1-_h)], _animSpeed] call EPOCH_crafting_animate;
[_ncRFrame, [0.3,1,0.3,0], [0.3,(0.96-_h),0.3,(_h + 0.04)],_animSpeed] call EPOCH_crafting_animate;
[_ncRText, [0.3,0.96,0.3,0.04], [0.3,(0.96-_h),0.3,0.04], _animSpeed] call EPOCH_crafting_animate;
[_ncCLB, [0.3,0.04,0.3,0.96], [0.3,0.04,0.3,(0.96-_h)], _animSpeed] call EPOCH_crafting_animate;
} else {
_ncGroup ctrlShow false;
_ncRFrame ctrlShow false;
_ncRText ctrlShow false;
_ncCLB ctrlSetPosition [0.3,0.04,0.3,0.96];
_ncCLB ctrlCommit 0;
_ncCFrame ctrlSetPosition [0.3,0,0.3,1];
_ncCFrame ctrlCommit 0;
};
_out

View File

@ -0,0 +1,37 @@
params ["_cfg"];
rmx_var_crafting_colorScheme = getArray (_cfg >> "colorScheme");
//frames
for "_i" from 0 to 5 do {
(rmx_var_crafting_ctrl_colorScheme select _i) ctrlSetTextColor (rmx_var_crafting_colorScheme select 16);
};
//recipes
(rmx_var_crafting_ctrl_colorScheme select 6) ctrlSetText (rmx_var_crafting_colorScheme select 3 select 0);
(rmx_var_crafting_ctrl_colorScheme select 6) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 3 select 1);
(rmx_var_crafting_ctrl_main select 0) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 18);
//ingredients
(rmx_var_crafting_ctrl_colorScheme select 7) ctrlSetText (rmx_var_crafting_colorScheme select 4 select 0);
(rmx_var_crafting_ctrl_colorScheme select 7) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 4 select 1);
(rmx_var_crafting_ctrl_main select 0) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 19);
//preview
(rmx_var_crafting_ctrl_colorScheme select 8) ctrlSetText (rmx_var_crafting_colorScheme select 5 select 0);
(rmx_var_crafting_ctrl_colorScheme select 8) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 5 select 1);
//resources
(rmx_var_crafting_ctrl_colorScheme select 9) ctrlSetText (rmx_var_crafting_colorScheme select 6 select 0);
(rmx_var_crafting_ctrl_colorScheme select 9) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 6 select 1);
//description
(rmx_var_crafting_ctrl_colorScheme select 10) ctrlSetText (rmx_var_crafting_colorScheme select 7 select 0);
(rmx_var_crafting_ctrl_colorScheme select 10) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 7 select 1);
(rmx_var_crafting_ctrl_main select 2) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 17);
//background
(rmx_var_crafting_ctrl_colorScheme select 11) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 15);
//QTY
(rmx_var_crafting_ctrl_Interact select 3) ctrlSetTextColor (rmx_var_crafting_colorScheme select 23);

View File

@ -0,0 +1,73 @@
//dialog closed
if (!rmx_var_craftingENABLED || !rmx_var_craftingLOOPS) exitWith {rmx_var_craftInProgress = false;};
//cancel craft button
if (rmx_var_craftInProgress) exitWith {rmx_var_craftInProgress = false;};
//close button
if (rmx_var_craftQTYOut isEqualTo 0) exitWith {closeDialog 0;};
//craft button
[] spawn {
private ["_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos"];
disableSerialization;
_fnc_UILock = {
private "_lock";
_lock = param [0,true];
(rmx_var_crafting_ctrl_main select 0) ctrlEnable _lock;
(rmx_var_crafting_ctrl_main select 1) ctrlEnable _lock;
(rmx_var_crafting_ctrl_Interact select 1) ctrlEnable _lock;
(rmx_var_crafting_ctrl_Interact select 4) ctrlEnable _lock;
};
rmx_var_craftInProgress = true;
_selection = lbCurSel (rmx_var_crafting_ctrl_main select 0);
_craftItem = rmx_var_crafting_SearchConfigData select _selection;
_item = _craftItem select 0;
_itemName = _craftItem select 1;
_itemCraftTime = _craftItem select 6;
_itemRecipeItems = _craftItem select 7;
_itemType = _craftItem select 13;
for "_c" from 1 to rmx_var_craftQTYOut do {
false call _fnc_UILock;
_hasNearby = false call EPOCH_crafting_checkResources;
_canCraft = [format ["Crafting: %1, %2 seconds",_itemName,_itemCraftTime],_itemCraftTime] call EPOCH_crafting_progress;
if !(_canCraft && _hasNearby && rmx_var_craftingLOOPS) exitWith {}; //{hint "Crafting canceled";};
if (player canAdd _item) then { //Puts in a weaponholder nearby if can't add to inventory
{
for "_r" from 1 to (_x select 1) do {
player removeItem (_x select 0); //removes any type of item, but only if not in special slots
};
} forEach _itemRecipeItems;
player addItem _item; //adds any type of item, but does not assign
} else {
_wH = objNull;
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3]; //TODO: adjust best range to reuse existing holders
if (_nearByHolder isEqualTo []) then {
_wHPos = player modelToWorld [0,1,0];
if (surfaceIsWater _wHPos) then { //should work anywhere, even on water
_wHPos = ASLToATL _wHPos;
};
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
} else {
_wH = _nearByHolder select 0;
};
_wh addItemCargoGlobal [_item,1];
};
call EPOCH_crafting_LB_defaults;
call EPOCH_crafting_LB_click;
};
true call _fnc_UILock;
rmx_var_craftInProgress = false;
};
true

View File

@ -0,0 +1,67 @@
disableSerialization;
private "_display";
_display = findDisplay 77700;
rmx_var_crafting_ctrl_DEVMisc = [_display displayCtrl 77701,_display displayCtrl 77702];
rmx_var_crafting_ctrl_DEV = [];
{rmx_var_crafting_ctrl_DEV set [count rmx_var_crafting_ctrl_DEV,_display displayCtrl _x];} count
[
77703, //bckgrnd
77704, //btn setScale
77705, //btn export
77706, //btn setpos
77707, //btn +
77708, //btn - //5
77709, //edit scale
77710, //edit x
77711, //edit z
77712, //edit y
77713, //edit vector //10
77714,77715,77716,77717,77718,77719 //text
];
rmx_var_crafting_ctrl_Interact = [];
{rmx_var_crafting_ctrl_Interact set [count rmx_var_crafting_ctrl_Interact,_display displayCtrl _x];} count
[
77801, //btn craft
77802, //btn clear
77803, //progress bar
77804, //progress QTY
77810 //Search field
];
rmx_var_crafting_ctrl_main = [];
{rmx_var_crafting_ctrl_main set [count rmx_var_crafting_ctrl_main,_display displayCtrl _x];} count
[
77811, //LB recipes
77812, //LB ingredients
77820, //ST description
77831, //craft frame
77833, //resource frame
77843 //resource text
];
rmx_var_crafting_ctrl_colorScheme = [];
{rmx_var_crafting_ctrl_colorScheme set [count rmx_var_crafting_ctrl_colorScheme,_display displayCtrl _x];} count
[
77830,77831,77832,77833,77834,77835, //frames
77840, //recipes
77841, //ingredients
77842, //preview
77843, //resources
77844, //description
77800 //background
];
rmx_var_craftingENABLED = true;
rmx_var_craftingLOOPS = true;
true

View File

@ -0,0 +1,95 @@
private ["_mainDevBtn","_3DCTRL"];
_mainDevBtn = rmx_var_crafting_ctrl_DEVMisc select 1;
_3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0;
switch (ctrlShown (rmx_var_crafting_ctrl_DEV select 0)) do {
case true: //off
{
disableSerialization;
{
_x ctrlShow false;
} forEach rmx_var_crafting_ctrl_DEV;
_mainDevBtn ctrlSetText "x\addons\a3_epoch_code\Data\UI\dev_mode_off.paa";
_3DCTRL ctrlEnable false;
_3DCTRL ctrlRemoveAllEventHandlers "MouseButtonUp";
rmx_fnc_craftingExport = nil;
rmx_fnc_crafting3DPosText = nil;
rmx_fnc_crafting3DMove = nil;
};
case false: //on
{
disableSerialization;
{
_x ctrlShow true;
} forEach rmx_var_crafting_ctrl_DEV;
_mainDevBtn ctrlSetText "x\addons\a3_epoch_code\Data\UI\dev_mode_on.paa";
private ["_devBtnSetScale","_devBtnExport","_devBtnSetPos"];
_devBtnSetScale = rmx_var_crafting_ctrl_DEV select 1;
_devBtnExport = rmx_var_crafting_ctrl_DEV select 2;
_devBtnSetPos = rmx_var_crafting_ctrl_DEV select 3;
_3DCTRL ctrlEnable true;
rmx_fnc_craftingExport = {
private ["_ctrlPos","_curLB"];
_ctrlPos = ctrlPosition (rmx_var_crafting_ctrl_DEVMisc select 0);
_curLB = rmx_var_crafting_ctrl_main select 0;
//weird UI bug that outputs 1.49012e-008 if setting vector too fast
if (rmx_var_3dCtrlSpin_Vector < 0.1 && rmx_var_3dCtrlSpin_Vector > -0.1) then {rmx_var_3dCtrlSpin_Vector = 0;};
diag_log format [
"
<< Exporting settings for [%1] >>
previewPosition[] = {%2,%3,%4};
previewScale = %5;
previewVector = %6;
",
_curLB lbData (lbCurSel _curLB),
_ctrlPos select 0,
_ctrlPos select 1,
_ctrlPos select 2,
ctrlModelScale (rmx_var_crafting_ctrl_DEVMisc select 0),
rmx_var_3dCtrlSpin_Vector
];
true
};
rmx_fnc_crafting3DPosText = {
private ["_3DPos","_devX","_devZ","_devY"];
disableSerialization;
_devX = rmx_var_crafting_ctrl_DEV select 7;
_devZ = rmx_var_crafting_ctrl_DEV select 8;
_devY = rmx_var_crafting_ctrl_DEV select 9;
_3DPos = ctrlPosition (rmx_var_crafting_ctrl_DEVMisc select 0);
_devX ctrlSetText str (_3DPos select 0);
_devZ ctrlSetText str (_3DPos select 1);
_devY ctrlSetText str (_3DPos select 2);
true
};
rmx_fnc_crafting3DMove = {
private ["_devX","_devZ","_devY"];
disableSerialization;
_devX = rmx_var_crafting_ctrl_DEV select 7;
_devZ = rmx_var_crafting_ctrl_DEV select 8;
_devY = rmx_var_crafting_ctrl_DEV select 9;
(rmx_var_crafting_ctrl_DEVMisc select 0) ctrlSetPosition [(call compile (ctrlText _devX)),(call compile (ctrlText _devZ)),(call compile (ctrlText _devY))];
true
};
_3DCTRL ctrlSetEventHandler ["MouseButtonUp","call rmx_fnc_crafting3DPosText;"];
_devBtnSetScale buttonSetAction
"
(rmx_var_crafting_ctrl_DEVMisc select 0) ctrlSetModelScale ( call compile ctrlText (rmx_var_crafting_ctrl_DEV select 6));
";
_devBtnExport buttonSetAction "call rmx_fnc_craftingExport";
_devBtnSetPos buttonSetAction "call rmx_fnc_crafting3DMove;";
};
};

View File

@ -0,0 +1,53 @@
/*
Receives array of CONFIGS
Returns array of items pulled
*/
private
[
"_arrIn","_type0","_type1","_type2","_type3","_out","_cName","_arr","_cDisplayName","_cPicture","_cDescShort","_cModel","_cPriority",
"_cCTime","_cRecipeArr","_cNearbyArr","_cUsedInArr","_cPreviewArr","_cPreviewScale","_cPreviewVector","_cDescFull","_cType"
];
_arrIn = param [0,[0]];
if !(typeName (_arrIn select 0) isEqualTo "CONFIG") exitWith {[]};
_type0 = []; _type1 = []; _type2 = []; _type3 = []; _out = [];
{
_cName = configName _x;
//overrides
_arr = [_cName,["displayName","picture","descriptionShort","model"]] call epoch_itemData;
_cDisplayName = if (isText (_x >> "displayName")) then {getText (_x >> "displayName")} else {_arr select 0};
_cPicture = if (isText (_x >> "picture")) then {getText (_x >> "picture")} else {_arr select 1};
_cDescShort = if (isText (_x >> "descriptionShort")) then {getText (_x >> "descriptionShort")} else {_arr select 2};
_cModel = if (isText (_x >> "model")) then {getText (_x >> "model")} else {_arr select 3};
//Basic cfg data
_cPriority = getNumber (_x >> "priority");
_cCTime = getNumber (_x >> "craftTime");
_cRecipeArr = getArray (_x >> "recipe");
_cNearbyArr = getArray (_x >> "nearby");
_cUsedInArr = getArray (_x >> "usedIn");
_cPreviewArr = getArray (_x >> "previewPosition");
_cPreviewScale = getNumber (_x >> "previewScale");
_cPreviewVector = getNumber (_x >> "previewVector");
_cDescFull = getText (_x >> "descriptionFull");
_cType = getNumber (_x >> "type");
switch (_cPriority) do {
case 0: {_type0 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull]};
case 1: {_type1 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull]};
case 2: {_type2 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull]};
case 3: {_type3 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull]};
};
} forEach _this;
_out append _type0;
_out append _type1;
_out append _type2;
_out append _type3;
_out

View File

@ -0,0 +1,127 @@
if (rmx_var_craftingENABLED) exitWith {false};
disableSerialization;
private ["_in","_cfg","_3DCTRL","_recipeCTRL","_recipeConfigs"];
_in = param [0,""];
createDialog "rmx_craftingUI";
call EPOCH_crafting_ctrl_collector;
//Var defs
rmx_var_craftQTY = 0;
rmx_var_craftQTYOut = 0;
rmx_var_craftInProgress = false;
//Defines
_cfg = 'CfgCrafting' call EPOCH_returnConfig;
_cfg call EPOCH_crafting_colorScheme;
_3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0;
_recipeCTRL = rmx_var_crafting_ctrl_main select 0;
//First Launch
_recipeConfigs = "true" configClasses _cfg;
_recipeConfigs deleteRange [0,6]; //delete main templates as they are not real items
rmx_var_crafting_FullConfigData = _recipeConfigs call EPOCH_crafting_getConfig;
rmx_var_crafting_SearchConfigData = rmx_var_crafting_FullConfigData;
[_3DCTRL] call Epoch_3DctrlSpin;
_3DCTRL ctrlEnable false;
call EPOCH_crafting_LB_defaults; //Default state
//Basic EH setup
if (getNumber (_cfg >> "DeveloperMode") > 0) then {
private "_ctrlDevMain";
_ctrlDevMain = rmx_var_crafting_ctrl_DEVMisc select 1;
_ctrlDevMain ctrlEnable true;
_ctrlDevMain ctrlShow true;
};
rmx_var_crafting_progressClicked = false;
ctrlSetFocus _recipeCTRL;
//puts arguments into search field
if (typeName _in isEqualTo "STRING") then {
if (count _in > 0) then { //required, empty string crashes game for some reason
(rmx_var_crafting_ctrl_Interact select 4) ctrlSetText _in;
};
};
//Post Processing
rmx_var_crafting_PP_CC = ["colorCorrections",11] call epoch_postProcessCreate;
rmx_var_crafting_PP_DB = ["dynamicBlur",11] call epoch_postProcessCreate;
[rmx_var_crafting_PP_CC, 0, [1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0.296494,1]] call epoch_postprocessAdjust;
[rmx_var_crafting_PP_DB, 1, [1]] call epoch_postprocessAdjust;
//Custom textures
//Manages quantity slider
[] spawn {
private ["_pos","_txt"];
while {rmx_var_craftingLOOPS} do {
_pos = progressPosition (rmx_var_crafting_ctrl_Interact select 2);
rmx_var_craftQTYOut = round (_pos * rmx_var_craftQTY);
_txt = format ["[%1/%2]",rmx_var_craftQTYOut,rmx_var_craftQTY];
(rmx_var_crafting_ctrl_Interact select 3) ctrlSetText _txt;
};
};
//Search box
[] spawn {
disableSerialization;
private ["_searchCTRL","_searchTextTEMP"];
_searchCTRL = rmx_var_crafting_ctrl_Interact select 4;
_searchTextTEMP = "";
while {rmx_var_craftingLOOPS} do {
uiSleep 0.5; //speed of search, should be less or equal to unload delay
if !(_searchTextTEMP isEqualTo (ctrlText _searchCTRL)) then {
rmx_var_crafting_SearchConfigData = [];
{
_idx = toLower(_x select 1) find toLower (ctrlText _searchCTRL);
if !(_idx isEqualTo -1) then {
rmx_var_crafting_SearchConfigData pushBack _x;
};
} forEach rmx_var_crafting_FullConfigData;
_searchTextTEMP = ctrlText _searchCTRL;
call EPOCH_crafting_LB_defaults;
(rmx_var_crafting_ctrl_main select 0) lbSetCurSel 0;
};
};
};
//Craft button states
[] spawn {
private ["_btn","_btn_cancel","_btn_craft","_btn_close"];
disableSerialization;
_btn = rmx_var_crafting_ctrl_Interact select 0;
_btn ctrlEnable true;
_btn_cancel = rmx_var_crafting_colorScheme select 0;
_btn_craft = rmx_var_crafting_colorScheme select 1;
_btn_close = rmx_var_crafting_colorScheme select 2;
while {rmx_var_craftingLOOPS} do {
uiSleep 0.1;
if (rmx_var_craftInProgress) then {
_btn ctrlSetText _btn_cancel;
} else {
if (rmx_var_craftQTYOut > 0) then {
_btn ctrlSetText _btn_craft;
} else {
_btn ctrlSetText _btn_close;
};
}
};
};
true

View File

@ -0,0 +1,49 @@
if !(isNil "rmx_var_craftProgressInProgress") exitWith {false};
rmx_var_craftProgressInProgress = true;
private ["_txt","_time","_posY","_posX","_w","_h","_idc","_stColor","_out","_display","_ctrl","_ctrl2","_ctrl3","_tick"];
disableSerialization;
_txt = param [0,"No text"];
_time = param [1,1];
_posY = param [2,1.05];
_posX = param [3,0.25];
_w = 0.5;
_h = 0.05;
_idc = 10100;
_stColor = rmx_var_crafting_colorScheme select 22;
_out = true;
_layer = str _idc call BIS_fnc_rscLayer;
_layer cutRsc ["rmx_CraftingProgress","PLAIN",0,false];
_display = uiNamespace getVariable "rmx_var_CraftingProgressDisplay";
_ctrl = _display ctrlCreate ["RscProgress",_idc + 1];
_ctrl ctrlSetPosition [_posX,_posY,_w,_h];
_ctrl ctrlCommit 0;
_ctrl ctrlSetTextColor (rmx_var_crafting_colorScheme select 20);
_ctrl2 = _display ctrlCreate ["RscStructuredText",_idc + 2];
_ctrl2 ctrlSetPosition [_posX + _w / 2 - (count _txt / 2) / 100,_posY + 0.005,_w,_h];
_ctrl2 ctrlCommit 0;
_ctrl2 ctrlSetStructuredText parseText format ["<t shadow='1'><t color='%2'>%1</t>",_txt,_stColor];
_ctrl3 = _display ctrlCreate ["RscText",_idc + 3];
_ctrl3 ctrlSetPosition [_posX,_posY,_w,_h];
_ctrl3 ctrlCommit 0;
_ctrl3 ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 21);
_tick = diag_tickTime;
while {((diag_tickTime - _tick) < _time && rmx_var_craftingLOOPS) } do {
if !(rmx_var_craftInProgress) exitWith {_out = false;};
_ctrl progressSetPosition ((diag_tickTime - _tick)/_time);
uiSleep 0.01; //smoothness vs performance
};
_layer cutRsc ["Default","PLAIN"];
rmx_var_craftProgressInProgress = nil;
_out

View File

@ -0,0 +1,28 @@
rmx_var_craftingLOOPS = false;
rmx_var_3dCtrlSpin = false;
//post processing fade to defaults
[rmx_var_crafting_PP_CC, 1, [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]] call epoch_postprocessAdjust;
[rmx_var_crafting_PP_DB, 1, [0]] call epoch_postprocessAdjust;
[] spawn {
uiSleep 1; //delay required for loops to finish
rmx_var_crafting_PP_CC call epoch_postprocessDestroy;
rmx_var_crafting_PP_DB call epoch_postprocessDestroy;
rmx_var_crafting_PP_CC = nil;
rmx_var_crafting_PP_DB = nil;
rmx_var_crafting_ctrl_DEV = nil;
rmx_var_crafting_ctrl_Interact = nil;
rmx_var_crafting_ctrl_main = nil;
rmx_var_crafting_ctrl_colorScheme = nil;
rmx_var_crafting_ctrl_GROUP = nil;
rmx_var_crafting_progressClicked = nil;
rmx_var_crafting_SearchConfigData = nil;
rmx_var_craftQTY = nil;
rmx_var_craftQTYOut = nil;
rmx_var_craftInProgress = nil;
rmx_var_crafting_colorScheme = nil;
rmx_var_craftingENABLED = false;
};
true

View File

@ -0,0 +1,28 @@
/*
Adjusts PP created elsewhere (or by epoch_postprocessCreate)
Params: [Handle, speed integer, Effect array]
Usage: [_handle, 2, [1]] call epoch_postprocessAdjust; //apply dynamic blur with animation of 2 seconds
[_handle, _speed, _effect] call epoch_postprocessAdjust;
Default Engine values:
colorCorrections >> [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]
chromAberration >> [0,0,false]
filmGrain >> [0,0,1,0,0,false]
radialBlur >> [0,0,0,0]
wetdistortion >> [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
dynamicBlur >> [0]
colorInversion >> [0,0,0]
*/
_handle = param [0,666];
_animSpeed = param [1,666];
_effect = param [2,[]];
//needed because PPs have variable array sizes
if ((_handle isEqualTo 666) || (_animSpeed isEqualTo 666) || (_effect isEqualTo [])) exitWith {hint "Wrong PPAdjust input"; false};
_handle ppEffectEnable true;
_handle ppEffectAdjust _effect;
_handle ppEffectCommit _animSpeed;

View File

@ -0,0 +1,32 @@
/*
Make sure to use handle to be able to delete effect later
Params: [Name of PP, Priority]
Usage: _handle = ["dynamicBlur",10] call epoch_postProcessCreate;
_handle = "dynamicBlur" call epoch_postProcessCreate; //not recommended, but ok for tests
*/
private ["_effect","_prioIn","_priority","_hndl"];
_effect = param [0,""];
_prioIn = param [1,0];
if (_effect isEqualTo "") exitWith {hint "Wrong PPcreate input"; false};
if !(_effect in ["colorCorrections","chromAberration","filmGrain","radialBlur","wetdistortion","dynamicBlur","colorInversion"]) exitWith {hint format ["Wrong effect - %1",_effect]; false};
_priority = switch (_effect) do {
case "colorCorrections": {1501};
case "chromAberration": {201};
case "filmGrain": {2001};
case "radialBlur": {101};
case "wetdistortion": {301};
case "dynamicBlur": {401};
case "colorInversion": {2501};
};
_hndl = ppEffectCreate [_effect,(_priority + _prioIn)];
_hndl ppEffectEnable false;
_hndl

View File

@ -0,0 +1,13 @@
/*
Destroys single or multiple post process effects
Params: single handle or array of handles
Usage: _handle call epoch_postprocessDestroy; //single
[_handle] call epoch_postprocessDestroy; //array of handles
[_hndl_1,_hndl_2,_hndl_3,_hndl_4] call epoch_postprocessDestroy; //array of singles
*/
if (typeName _this != typeName []) then {_this = [_this]};
ppEffectDestroy _this;

View File

@ -1,4 +1,5 @@
//Variables
EPOCH_CraftingItem = "";
EPOCH_ESP_TARGETS = [];
EPOCH_ESPMAP_TARGETS = [];
EPOCH_ESPGROUPS = [];

View File

@ -0,0 +1,70 @@
//IMPORTANT - do not add semicolons here, script takes care of it
class cfgDynamicMenu
{
/** GLOBAL VARIABLES ONLY - removed automatically **/
class variableDefines //must be global, nil when menu closes
{
dyna_cursorTarget = "cursorTarget";
dyna_typeOfCursorTarget = "typeOf cursorTarget";
dyna_player = "vehicle player";
dyna_itemsPlayer = "items player";
};
/** BUTTON DEFINES **/
class dynaButtons
{
class example /** Single button **/
{
condition = "true"; //must be value
action = "hint 'example button'";
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
tooltip = "example button";
};
class example2: example /** Single button from inherited values above **/
{
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
action = "systemchat 'example button 2'";
};
/** ------------------------------ **/
// Category works like a folder, when clicked, it replaces current buttons
// with fresh batch from it's own subclasses
/** ------------------------------ **/
class category_example /** Category button, add subclasses to enable this mode**/
{
condition = "true"; //must be value
action = "hint 'Category button 1'"; //can be empty for categories
icon = "#(rgb,8,8,3)color(1,0,0,0.5)";
tooltip = "Category button 1";
class category_subclass_example /** Same config as the rest **/
{
condition = "true"; //must be value
action = "hint 'example category button 1'";
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
tooltip = "example button";
};
class category_subclass_example2: category_subclass_example /** Subclass inheritance **/
{
action = "hint 'example category button 2'";
};
};
class category_example2: category_example /** Category Inheritance, includes all buttons **/
{
action = "hint 'Category button 2'";
tooltip = "Category button 2";
class category_subclass_example2 /** REPLACE inherited button **/
{
condition = "true"; //must be value
action = "hint 'inherited category button replaced'";
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
tooltip = "replaced button";
};
};
};
};

View File

@ -0,0 +1,84 @@
//IMPORTANT - do not add semicolons here, script takes care of it
class cfgDynamicMenu
{
/** GLOBAL VARIABLES ONLY - removed automatically **/
class variableDefines //must be global, nil when menu closes
{
dyna_displayWhitelist[] = {};
dyna_cursorTarget = "cursorTarget";
dyna_typeOfCursorTarget = "typeOf cursorTarget";
dyna_player = "vehicle player";
dyna_itemsPlayer = "items player";
};
/** BUTTON DEFINES **/
class dynaButtons
{
/*
class close_Button_if_dialog_used_instead
{
condition = "true";
action = "findDisplay 66600 closeDisplay 1";
icon = "#(rgb,8,8,3)color(1,0,0,1)";
tooltip = "CLOSE";
};
*/
class player_craftMenu
{
condition = "true";
action = "call EPOCH_crafting_load;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa";
tooltip = "Crafting V2";
};
class player_inspect
{
condition = "true";
action = "hint 'Detective is on the case'";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
tooltip = "Examine";
};
class CAT_pad
{
condition = "true"; //must be value
action = ""; //can be empty for categories
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
tooltip = "Main cat";
class SUB_CAT_test1
{
condition = "true"; //must be value
action = ""; //can be empty for categories
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
tooltip = "Subcat1";
class SUB_CAT_test2
{
condition = "true"; //must be value
action = ""; //can be empty for categories
icon = "#(rgb,8,8,3)color(1,0,0,0.5)";
tooltip = "Subcat2";
class SUB_CAT_test3
{
condition = "true"; //must be value
action = ""; //can be empty for categories
icon = "#(rgb,8,8,3)color(0,1,1,0.5)";
tooltip = "Subcat3";
class SUB_CAT_test4
{
condition = "true"; //must be value
action = ""; //can be empty for categories
icon = "#(rgb,8,8,3)color(0,1,0,0.5)";
tooltip = "Subcat4";
};
};
};
};
};
};
};

View File

@ -1,341 +1,742 @@
/*
nearby[] =
{
{
"Fire", //Name of field, anything
"", //image folder path (ie "\x\addons\a3_epoch_code\Data\UI\crafting\"), empty for Epoch default
"fire", //image prefix, suffix will be added by code. 2 possible suffixes: [_true.paa, _false.paa]
{1,{"ALL"}}, //ARRAY of p3D {0,{"filename.p3d","filename.p3d"}} or ARRAY of logic classes {1,{"AIR","LAND","className"}}. Integer to switch array mode
3, //distance to check in meters
1, //count
1, //BOOL: object has to be on fire
0 //BOOL: object has to be alive (not destroyed)
};
};
//Can be multiple requirements like this, example requires both fire and water (unlimited, but requires mouse scroll if more than 8 elements):
nearby[] =
{
{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0},
{"Water source","","water",{0,{"barrelwater_f.p3d", "water_source_f.p3d", "pumpa.p3d", "misc_wellpump.p3d"}},3,1,0,0}
};
*/
class CfgCrafting
{
class Default
DeveloperMode = 0; //used for 3D preview position and scale, set to 0 for live server!
//You can customize basic theme of crafting UI here:
colorScheme[] =
{
usedIn[] = {};
recipe[] = {};
nearby[] = {};
"\x\addons\a3_epoch_code\Data\UI\crafting\cancel.paa",
"\x\addons\a3_epoch_code\Data\UI\crafting\craft.paa",
"\x\addons\a3_epoch_code\Data\UI\crafting\close.paa",
{"Recipes", {0,0,0,0.8}},
{"Ingredients", {0,0,0,0.8}},
{"Preview", {1,0.6,0.01,0.8}},
{"Resources", {0,0,0,0.8}},
{"Description", {0,0,0,0.8}},
{" -- Requires -- ", {0.99,0.53,0.03,1}},
{" -- Used in -- ", {0.99,0.53,0.03,1}},
{0,1,0,1}, //Recipe LB, item found
{0,1,0,1}, //Ingredients LB, Has items on player
{1,1,0,1}, //Ingredients LB, Has items nearby
{1,0,0,1}, //Ingredients LB, Missing items
{0.5,0.5,0.5,1},//Ingredients LB, Items used in...
{0,0,0,0.1}, //Background color
{0,0,0,1}, //Frame color
{0,0,0,0}, //description ST
{0,0,0,0}, //Recipe LB
{0,0,0,0}, //Ingredients LB
{1,1,1,1}, //progress bar
{0,0,0,0.3}, //progress background
"#FC170F", //progress text HTML color
{1,0.6,0.01,1} //QTY color
};
// items
class ItemCoolerE : Default
/** --------- Don't edit --------- **/
class Default //className, any object or item
{
// usedIn[] = { "ItemCooler0", "ItemCooler1", "ItemCooler2", "ItemCooler3", "ItemCooler4" };
craftTime = 1; //time it takes to craft
recipe[] = {}; //nested arrays, {{"item", 1}};
nearby[] = {}; //nearby requirements - fire, water source, object
usedIn[] = {}; //item is an ingredient
previewPosition[] = {0.8125,1,0.285}; //XzY
previewScale = 1;
previewVector = 0; //vector rotation multiplier
priority = 0; //Recipe list priority, items with 0 are on top followed by order in config file.
type = 0; //After crafting, item is added: [0 - to inventory], [1 - in weapon holder], [2 - as vehicle]
descriptionFull = ""; //Structured text, added on new line after descriptionShort
/** --------- Config Overrides --------- **/
//displayName = "";
//picture = "";
//descriptionShort = "";
//model = "\x\addons\a3_epoch_assets\models\logo.p3d";
};
class ItemCooler0 : Default
/** --------- Main templates --------- **/
class WeaponHolder: Default //Placed inside weaponholder in front of player (?)
{
priority = 0;
type = 1;
offset[] = {0,1,0}; //local space
craftTime = 10;
descriptionFull = "Demo: Can be used if player's inventory space is an issue";
};
class Vehicle: Default //Spawned in front of player (?)
{
priority = 0;
type = 2;
offset[] = {0,5,0}; //local space
craftTime = 10;
descriptionFull = "Demo: Should be used for vehicles only";
};
class Kit: Default //base building kits gets higher priority on the list
{
priority = 1;
descriptionFull = "Base building material";
craftTime = 4;
};
class Item: Default //Goes into inventory
{
priority = 2;
craftTime = 2;
};
class Part: Default //Looted part - an ingredient for other items, can't be crafted
{
priority = 3;
descriptionFull = "<t color='#FD7F30'>This item has no recipe, but is a part used for other recipes</t>";
};
/** --------- RECIPES BELOW --------- **/
// items
class ItemCoolerE : Part
{
usedIn[] = { "ItemCooler0", "ItemCooler1", "ItemCooler2", "ItemCooler3", "ItemCooler4" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class ItemCooler0 : Item
{
recipe[] = { "ItemCoolerE", { "SnakeMeat_EPOCH", 2 }, "sweetcorn_epoch" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class ItemCooler1 : Default
class ItemCooler1 : Item
{
recipe[] = { "ItemCoolerE", { "CookedRabbit_EPOCH", 2 }, "sweetcorn_epoch" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class ItemCooler2 : Default
class ItemCooler2 : Item
{
recipe[] = { "ItemCoolerE", "CookedChicken_EPOCH", "sweetcorn_epoch" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class ItemCooler3 : Default
class ItemCooler3 : Item
{
recipe[] = { "ItemCoolerE", "CookedGoat_EPOCH", "sweetcorn_epoch" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class ItemCooler4 : Default
class ItemCooler4 : Item
{
recipe[] = { "ItemCoolerE", "CookedSheep_EPOCH", "sweetcorn_epoch" };
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
};
class CircuitParts : Default
class sweetcorn_epoch : Part
{
usedIn[] = {"ItemCooler0","ItemCooler1","ItemCooler2","ItemCooler3","ItemCooler4"};
previewPosition[] = {0.799332,1,0.26};
previewScale = 2.7;
previewVector = 0;
};
class CircuitParts : Part
{
usedIn[] = { "EnergyPack", "EnergyPackLg", "KitPlotPole" };
previewPosition[] = {0.791044,1,0.256956};
previewScale = 2;
previewVector = 2.3;
};
class EnergyPack : Default
class EnergyPack : Item
{
usedIn[] = { "EnergyPackLg" };
nearby[] = { { "fire", { "ALL" }, 3, 1, "Fire", "fire" } };
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { { "CircuitParts", 1 }, { "clean_water_epoch", 1 } };
previewPosition[] = {0.8,1,0.29};
previewScale = 1.75;
previewVector = 2.8;
};
class EnergyPackLg : Default
class EnergyPackLg : Item
{
nearby[] = { { "fire", { "ALL" }, 3, 1, "Fire", "fire" } };
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { { "EnergyPack", 3 }, { "CircuitParts", 1 } };
previewPosition[] = {0.8,1,0.29};
previewScale = 1.75;
previewVector = 2.8;
};
class PartOre : Default
class PartOre : Part
{
usedIn[] = { "ItemScraps" };
previewPosition[] = {0.799961,1,0.27};
previewScale = 1.25;
};
class Pelt_EPOCH : Default
class Pelt_EPOCH : Part
{
usedIn[] = { "KitTiPi" };
previewPosition[] = {0.793741,1,0.274824};
previewScale = 0.7;
previewVector = 2.2;
};
class ItemRock : Default
class ItemRock : Part
{
usedIn[] = { "KitFirePlace" , "MeleeMaul", "CrudeHatchet" };
previewPosition[] = {0.796998,1,0.35};
previewScale = 1.3;
};
class ItemStick : Default
class ItemStick : Item
{
usedIn[] = { "WoodClub","MeleeMaul", "CrudeHatchet", "KitFirePlace" };
recipe[] = { { "WoodLog_EPOCH", 1 } };
previewPosition[] = {0.8,1,0.25};
previewScale = 0.4;
previewVector = 1;
};
class ItemKiloHemp : Default
class ItemKiloHemp : Part
{
usedIn[] = { "ItemRope" };
previewPosition[] = {0.796267,1,0.322762};
previewScale = 0.9;
previewVector = 1.4;
};
class ItemRope : Default
class ItemRope : Item
{
usedIn[] = { "WoodClub", "MeleeMaul", "CrudeHatchet" };
recipe[] = { { "ItemKiloHemp", 1 } };
previewPosition[] = {0.8,1,0.35};
previewScale = 4;
};
class MeleeMaul : Default
class MeleeMaul : Item
{
recipe[] = { { "ItemRock", 1 }, { "ItemStick", 2 }, { "ItemRope", 1 } };
previewPosition[] = {0.798975,1,0.300388};
previewScale = 0.3;
previewVector = -1.8;
};
class CrudeHatchet : Default
class CrudeHatchet : Item
{
recipe[] = { { "ItemRock", 1 }, { "ItemStick", 1 }, { "ItemRope", 1 } };
previewPosition[] = {0.786139,1,0.328525};
previewScale = 0.6;
};
class WoodClub : Default
class WoodClub : Item
{
recipe[] = { { "ItemStick", 2 } };
previewPosition[] = {0.799633,1,0.237804};
previewScale = 0.35;
previewVector = 2.4;
};
class WoodLog_EPOCH : Default
class WoodLog_EPOCH : Part
{
usedIn[] = { "PartPlankPack", "ItemStick" };
previewPosition[] = {0.800064,1,0.25};
previewScale = 0.3;
};
class MortarBucket : Default
class MortarBucket : Part
{
usedIn[] = {"KitFoundation","KitCinderWall"};
previewPosition[] = {0.799442,1,0.426761};
previewScale = 0.6;
previewVector = 0;
};
class ItemScraps : Default
class ItemScraps : Item
{
usedIn[] = { "ItemCorrugated" };
nearby[] = { { "fire", { "ALL" }, 3, 1, "Fire", "fire" } };
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { { "PartOre", 2 } };
previewPosition[] = {0.797144,1,0.309158};
previewScale = 1;
previewVector = 2.8;
};
class ItemCorrugated : Default
class ItemCorrugated : Item
{
usedIn[] = {"KitShelf","ItemCorrugatedLg"};
nearby[] = { { "fire", { "ALL" }, 3, 1, "Fire", "fire" } };
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { { "ItemScraps", 2 } };
previewPosition[] = {0.791088,1,0.300004};
previewScale = 0.2;
previewVector = 1;
};
class CinderBlocks : Default
class CinderBlocks : Part
{
usedIn[] = { "KitCinderWall" };
previewPosition[] = {0.801866,1,0.35};
previewScale = 0.2;
};
class ItemMixOil : Default
class ItemMixOil : Part
{
usedIn[] = { "CSGAS" };
previewPosition[] = {0.802419,1,0.433119};
previewScale = 1.5;
};
class jerrycan_epoch : Default
class jerrycan_epoch : Part
{
usedIn[] = { "CSGAS" };
previewPosition[] = {0.802443,1,0.254301};
previewScale = 0.6;
previewVector = 4.9;
};
class VehicleRepair : Default
class VehicleRepair : Part
{
usedIn[] = { "VehicleRepairLg" };
previewPosition[] = {0.787659,1,0.30098};
previewScale = 0.45;
previewVector = 1.5;
};
class VehicleRepairLg : Default
class VehicleRepairLg : Item
{
recipe[] = { "VehicleRepair", "ItemCorrugated" };
previewPosition[] = {0.798742,1,0.317871};
previewScale = 0.25;
previewVector = 0.7;
};
// radios
class EpochRadio0 : Default // Quartz
class EpochRadio0 : Part // Quartz
{
usedIn[] = { "EpochRadio1" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio1 : Default // Garnet
class EpochRadio1 : Item // Garnet
{
usedIn[] = { "EpochRadio2" };
recipe[] = { "EpochRadio0", "ItemGarnet" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio2 : Default // Citrine
class EpochRadio2 : Item // Citrine
{
usedIn[] = { "EpochRadio3" };
recipe[] = { "EpochRadio1", "ItemCitrine" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio3 : Default // Amethyst
class EpochRadio3 : Item // Amethyst
{
usedIn[] = { "EpochRadio4" };
recipe[] = { "EpochRadio2", "ItemAmethyst" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio4 : Default // Topaz
class EpochRadio4 : Item // Topaz
{
usedIn[] = { "EpochRadio5" };
recipe[] = { "EpochRadio3", "ItemTopaz" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio5 : Default // Sapphire
class EpochRadio5 : Item // Sapphire
{
usedIn[] = { "EpochRadio6" };
recipe[] = { "EpochRadio4", "ItemSapphire" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio6 : Default // Onyx
class EpochRadio6 : Item // Onyx
{
usedIn[] = { "EpochRadio7" };
recipe[] = { "EpochRadio5", "ItemOnyx" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio7 : Default // Emerald
class EpochRadio7 : Item // Emerald
{
usedIn[] = { "EpochRadio8" };
recipe[] = { "EpochRadio6", "ItemEmerald" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio8 : Default // Ruby
class EpochRadio8 : Item // Ruby
{
usedIn[] = { "EpochRadio9" };
recipe[] = { "EpochRadio7", "ItemRuby" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
class EpochRadio9 : Default // Jade
class EpochRadio9 : Item // Jade
{
recipe[] = { "EpochRadio8", "ItemJade" };
model = "\a3\ui_f\objects\Radio.p3d";
previewPosition[] = {0.800569,1,0.272473};
previewScale = 0.45;
previewVector = -3.9;
};
//Gems
class ItemGarnet : Part
{
usedIn[] = {"EpochRadio1"};
previewPosition[] = {0.801697,1,0.379502};
previewScale = 3;
};
class ItemCitrine : Part
{
usedIn[] = {"EpochRadio2"};
previewPosition[] = {0.796925,1,0.285847};
previewScale = 3.5;
previewVector = 2.7;
};
class ItemAmethyst : Part
{
usedIn[] = {"EpochRadio3"};
previewPosition[] = {0.798082,1,0.277137};
previewScale = 3;
previewVector = 2.9;
};
class ItemTopaz : Part
{
usedIn[] = {"EpochRadio4"};
previewPosition[] = {0.79555,1,0.393739};
previewScale = 3;
};
class ItemSapphire : Part
{
usedIn[] = {"EpochRadio5"};
previewPosition[] = {0.804014,1,0.283865};
previewScale = 3;
previewVector = 3.3;
};
class ItemOnyx : Part
{
usedIn[] = {"EpochRadio6"};
previewPosition[] = {0.799376,1,0.283337};
previewScale = 3;
previewVector = 3.1;
};
class ItemEmerald : Part
{
usedIn[] = {"EpochRadio7"};
previewPosition[] = {0.805568,1,0.293134};
previewScale = 3;
previewVector = 2.5;
};
class ItemRuby : Part
{
usedIn[] = {"EpochRadio8"};
previewPosition[] = {0.79555,1,0.393739};
previewScale = 3;
};
class ItemJade : Part
{
usedIn[] = {"EpochRadio9"};
previewPosition[] = {0.796903,1,0.369781};
previewScale = 3;
};
// raw meats
class SnakeCarcass_EPOCH : Default
class SnakeCarcass_EPOCH : Part
{
usedIn[] = { "SnakeMeat_EPOCH" };
previewPosition[] = {0.808621,1,0.238853};
previewScale = 0.55;
previewVector = 1.8;
};
class SnakeMeat_EPOCH : Default
class SnakeMeat_EPOCH : Item
{
usedIn[] = { "ItemCooler0" };
nearby[] = {{ "fire", {"ALL"}, 3, 1, "Fire","fire" }};
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "SnakeCarcass_EPOCH" };
previewPosition[] = {0.803189,1,0.408752};
previewScale = 6;
};
class RabbitCarcass_EPOCH : Default
class RabbitCarcass_EPOCH : Part
{
usedIn[] = { "CookedRabbit_EPOCH" };
previewPosition[] = {0.796141,1,0.340971};
previewScale = 1.5;
};
class CookedRabbit_EPOCH : Default
class CookedRabbit_EPOCH : Item
{
usedIn[] = { "ItemCooler1" };
nearby[] = {{ "fire", {"ALL"}, 3, 1, "Fire","fire" }};
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "RabbitCarcass_EPOCH" };
previewPosition[] = {0.796141,1,0.340971};
previewScale = 1.5;
};
class ChickenCarcass_EPOCH : Default
class ChickenCarcass_EPOCH : Part
{
usedIn[] = { "CookedChicken_EPOCH" };
previewPosition[] = {0.796141,1,0.340971};
previewScale = 0.9;
};
class CookedChicken_EPOCH : Default
class CookedChicken_EPOCH : Item
{
usedIn[] = { "ItemCooler2" };
nearby[] = {{ "fire", {"ALL"}, 3, 1, "Fire","fire" }};
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "ChickenCarcass_EPOCH" };
previewPosition[] = {0.796141,1,0.340971};
previewScale = 0.9;
};
class GoatCarcass_EPOCH : Default
class GoatCarcass_EPOCH : Part
{
usedIn[] = { "CookedGoat_EPOCH" };
previewPosition[] = {0.796141,1,0.27};
previewScale = 0.4;
previewVector = 2.1;
};
class CookedGoat_EPOCH : Default
class CookedGoat_EPOCH : Item
{
usedIn[] = { "ItemCooler3" };
nearby[] = {{ "fire", {"ALL"}, 3, 1, "Fire","fire" }};
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "GoatCarcass_EPOCH" };
previewPosition[] = {0.796141,1,0.27};
previewScale = 0.4;
previewVector = 2;
};
class SheepCarcass_EPOCH : Default
class SheepCarcass_EPOCH : Part
{
usedIn[] = { "CookedSheep_EPOCH" };
previewPosition[] = {0.796141,1,0.27};
previewScale = 0.4;
previewVector = 2.1;
};
class CookedSheep_EPOCH : Default
class CookedSheep_EPOCH : Item
{
usedIn[] = { "ItemCooler4" };
nearby[] = {{ "fire", {"ALL"}, 3, 1, "Fire","fire" }};
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "SheepCarcass_EPOCH" };
previewPosition[] = {0.796141,1,0.27};
previewScale = 0.4;
previewVector = 2.1;
};
class emptyjar_epoch : Default
class emptyjar_epoch : Part
{
usedIn[] = { "water_epoch" };
previewPosition[] = {0.807346,1,0.43035};
previewScale = 2.5;
};
class water_epoch : Default
class water_epoch : Item
{
usedIn[] = { "clean_water_epoch" };
nearby[] = {{"noclass", {"barrelwater_f.p3d", "water_source_f.p3d", "pumpa.p3d", "misc_wellpump.p3d"}, 3, 1, "Water Source","water"}};
nearby[] = {{"Water source","","water",{0,{"barrelwater_f.p3d", "water_source_f.p3d", "pumpa.p3d", "misc_wellpump.p3d"}},3,1,0,0}};
recipe[] = { "emptyjar_epoch" };
previewPosition[] = {0.807346,1,0.43035};
previewScale = 2.5;
};
class clean_water_epoch : Default
class clean_water_epoch : Item
{
usedIn[] = { "EnergyPack" };
nearby[] = { { "fire", { "ALL" }, 3, 1, "Fire", "fire" } };
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
recipe[] = { "water_epoch" };
previewPosition[] = {0.807346,1,0.43035};
previewScale = 2.5;
displayName = "Clean Water";
};
// recipes
class CSGAS : Default
class CSGAS : Kit
{
recipe[] = { "ItemMixOil", "jerrycan_epoch" };
model = "\x\addons\a3_epoch_assets_2\jerrycan.p3d";
previewPosition[] = {0.802443,1,0.254301};
previewScale = 0.6;
previewVector = 4.9;
};
class ItemCorrugatedLg : Default
class ItemCorrugatedLg : Kit
{
usedIn[] = { "VehicleRepairLg", "KitPlotPole" };
recipe[] = { { "ItemCorrugated", 3 } };
previewPosition[] = {0.797491,1,0.32899};
previewScale = 0.25;
previewVector = 0.5;
};
class PartPlankPack : Default
class PartPlankPack : Kit
{
usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi"};
recipe[] = {{"WoodLog_EPOCH",2}};
previewPosition[] = {0.797837,1,0.288258};
previewScale = 0.2;
previewVector = 1;
};
class KitFirePlace : Default
class KitFirePlace : Kit
{
recipe[] = {{"ItemRock",2},{"ItemStick",1}};
model = "\x\addons\a3_epoch_assets_2\fireplace.p3d";
previewPosition[] = {0.791523,1,0.244987};
previewScale = 0.2;
previewVector = 1.5;
};
class KitStudWall : Default
class KitStudWall : Kit
{
recipe[] = {{"PartPlankPack",4}};
model = "\x\addons\a3_epoch_assets\models\Wooden_Wall_SIM.p3d";
previewPosition[] = {0.797675,1,0.398882};
previewScale = 0.07;
previewVector = 0;
};
class KitWoodFloor : Default
class KitWoodFloor : Kit
{
usedIn[] = { "KitWoodTower" };
recipe[] = {{"PartPlankPack",4}};
model = "\x\addons\a3_epoch_assets\models\Wooden_Floor.p3d";
previewPosition[] = {0.800198,1,0.262418};
previewScale = 0.055;
previewVector = 3.6;
};
class KitWoodLadder : Default
class KitWoodLadder : Kit
{
recipe[] = { { "PartPlankPack", 4 } };
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Ladder\wood_ladder.p3d";
previewPosition[] = {0.798736,1,0.441696};
previewScale = 0.08;
previewVector = 0;
};
class KitWoodRamp : Default
class KitWoodRamp : Kit
{
recipe[] = { { "PartPlankPack", 6 } };
model = "\x\addons\a3_epoch_assets\models\Wood_Ramp.p3d";
previewPosition[] = {0.799137,1,0.350575};
previewScale = 0.05;
previewVector = 0;
};
class KitWoodStairs : Default
class KitWoodStairs : Kit
{
recipe[] = {{"PartPlankPack",4}};
model = "\x\addons\a3_epoch_assets\models\Wood_stairs.p3d";
previewPosition[] = {0.795037,1,0.377922};
previewScale = 0.054;
previewVector = 0;
};
class KitWoodTower : Default
class KitWoodTower : Kit
{
recipe[] = { {"KitWoodFloor", 1}, { "PartPlankPack", 4 } };
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Tower\Tower\Base_Tower_Frame.p3d";
previewPosition[] = {0.800653,1,0.378749};
previewScale = 0.05;
previewVector = 0;
};
class KitTiPi : Default
class KitTiPi : Kit
{
recipe[] = { { "Pelt_EPOCH", 4 }, { "PartPlankPack", 2 } };
model = "\x\addons\a3_epoch_assets\models\tp.p3d";
previewPosition[] = {0.801503,1,0.433758};
previewScale = 0.06;
previewVector = 0;
};
class KitShelf : Default
class KitShelf : Kit
{
recipe[] = {{"ItemCorrugated",3}};
model = "\x\addons\a3_epoch_assets\models\shelf.p3d";
previewPosition[] = {0.803749,1,0.448515};
previewScale = 0.17;
previewVector = 0;
};
class KitFoundation : Default
class KitFoundation : Kit
{
recipe[] = {{"MortarBucket",4}};
model = "\x\addons\a3_epoch_assets\models\Concrete_Col.p3d";
previewPosition[] = {0.796787,1,0.211457};
previewScale = 0.047;
previewVector = 0;
};
class KitWoodFoundation : Default
class KitWoodFoundation : Kit
{
recipe[] = {{"PartPlankPack",8}};
model = "\x\addons\a3_epoch_assets\models\Wood_Col.p3d";
previewPosition[] = {0.796787,1,0.211457};
previewScale = 0.047;
previewVector = 0;
};
class KitCinderWall : Default
class KitCinderWall : Kit
{
recipe[] = {{"CinderBlocks",2},{"MortarBucket",2}};
model = "\x\addons\a3_epoch_assets\models\cinder_half.p3d";
previewPosition[] = {0.797638,1,0.341915};
previewScale = 0.07;
previewVector = 0;
};
class KitPlotPole : Default
class KitPlotPole : Kit
{
recipe[] = {{"ItemCorrugatedLg",2}, {"CircuitParts",2} };
model = "\x\addons\a3_epoch_assets\models\jammer.p3d";
previewPosition[] = {0.801378,1,0.464834};
previewScale = 0.055;
previewVector = 0;
};
class ItemSolar : Default
class ItemSolar : Part
{
usedIn[] = { "KitSolarGen" };
previewPosition[] = {0.802374,1,0.26};
previewScale = 0.19;
previewVector = 3.3;
};
class ItemCables : Default
class ItemCables : Part
{
usedIn[] = { "KitSolarGen" };
previewPosition[] = {0.802374,1,0.26};
previewScale = 0.3;
previewVector = 2.8;
};
class ItemBattery : Default
class ItemBattery : Part
{
usedIn[] = { "KitSolarGen" };
previewPosition[] = {0.802374,1,0.276733};
previewScale = 0.4;
};
class KitSolarGen : Default
class KitSolarGen : Kit
{
// TODO recipe
recipe[] = { { "ItemSolar", 1 }, { "ItemCables", 1 }, { "ItemBattery", 1 }, { "ItemCorrugatedLg", 2 }, { "CircuitParts", 2 } };
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Solar_Generator_Complete\Solar_generator.p3d";
previewPosition[] = {0.804979,1,0.39189};
previewScale = 0.11;
previewVector = 0;
};
};

View File

@ -43,6 +43,9 @@ class CfgAddons
#include "\x\addons\a3_epoch_config\Configs\CfgBaseBuilding.hpp"
#include "\x\addons\a3_epoch_config\Configs\CfgBuildingLootPos.hpp"
//gitmerge fix
#include "\x\addons\a3_epoch_config\Configs\CfgDynamicMenu.hpp"
class DefaultEventhandlers;
class WeaponFireGun;
class WeaponCloudsGun;