This commit is contained in:
[VB]AWOL
2013-09-02 12:16:05 -05:00
parent 44bab797b6
commit 44eebbd432
45 changed files with 927 additions and 842 deletions

View File

@@ -1,119 +0,0 @@
private ["_location","_isOk","_dir","_classname","_item","_cancel","_location3","_location4","_location1","_location2","_counter","_hasbuilditem","_dis","_sfx","_object","_onLadder","_isWater","_text","_offset_x","_offset_y","_offset_z","_offset_z_attach","_tmpbuilt","_built_location"];
if(TradeInprogress) exitWith { cutText ["Building already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
_location = player modeltoworld [0,1,0];
_location set [2,0];
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_isWater = (surfaceIsWater _location) or dayz_isSwimming;
if(_isWater) exitWith {cutText [localize "str_player_26", "PLAIN DOWN"];};
if(_onLadder) exitWith {cutText [localize "str_player_21", "PLAIN DOWN"];};
if (vehicle player != player) exitWith {cutText ["You may not build while in a vehicle", "PLAIN DOWN"]};
_item = _this;
_classname = getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create");
_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_hasbuilditem = _this in magazines player;
if (!_hasbuilditem) exitWith {cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]};
_dir = getDir player;
_offset_x = 0;
_offset_y = 1.5;
_offset_z = 0;
_offset_z_attach = 0.5;
// Start Preview loop
_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
_tmpbuilt setdir _dir;
_tmpbuilt attachTo [player,[_offset_x,_offset_y,_offset_z_attach]];
_cancel = false;
_counter = 0;
_isOk = true;
while {_isOk} do {
if(_counter == 0) then {
cutText ["Planning construction stand still 5 seconds to build.", "PLAIN DOWN"];
sleep 5;
_location1 = getPosATL player;
sleep 5;
_location2 = getPosATL player;
if(_location1 distance _location2 < 0.1) exitWith {
cutText ["Started construction move within 5 seconds to cancel.", "PLAIN DOWN"];
_location3 = getPosATL player;
sleep 5;
_location4 = getPosATL player;
if(_location3 distance _location4 > 0.1) exitWith {
_isOk = false;
_cancel = true;
};
_isOk = false;
};
};
if(_counter >= 1) exitWith {
_isOk = false;
_cancel = true;
};
_counter = _counter + 1;
};
detach _tmpbuilt;
// Get location of detached tmp built
_built_location = (getPosATL _tmpbuilt);
// force to ground
_built_location set [2,0];
if(!_cancel) then {
_hasbuilditem = _this in magazines player;
if (!_hasbuilditem) exitWith {cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]};
_dir = getDir player;
player removeMagazine _item;
//disableSerialization;
//call dayz_forceSave;
player playActionNow "Medic";
sleep 1;
_dis=20;
_sfx = "repair";
[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
[player,_dis,true,(getPosATL player)] spawn player_alertZombies;
sleep 5;
player allowDamage false;
_object = createVehicle [_classname, _built_location, [], 0, "CAN_COLLIDE"];
_object setDir _dir;
player reveal _object;
cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];
//["dayzPublishObj",[dayz_characterID,_object,[_dir,_location],_classname]] call callRpcProcedure;
dayzPublishObj = [dayz_characterID,_object,[_dir,_location],_classname];
publicVariableServer "dayzPublishObj";
sleep 2;
player allowDamage true;
} else {
cutText [format["Canceled construction of %1.",_text], "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -174,7 +174,7 @@ if (_hasrequireditem) then {
_object attachTo [player];
};
cutText ["Planning construction numpad 8 = up, numpad 2 = down, and numpad 5 to start building.", "PLAIN DOWN"];
cutText ["Planning construction: PgUp = raise, PgDn = lower, Q or E = flip 180, and Space-Bar to start building.", "PLAIN DOWN"];
sleep 1;
@@ -289,6 +289,9 @@ if (_hasrequireditem) then {
if (r_interrupt or (player getVariable["combattimeout", 0] >= time)) then {
r_doLoop = false;
};
if (DZE_cancelBuilding) exitWith {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;

View File

@@ -5,7 +5,7 @@
*/
private ["_isOk","_i","_objName","_objInfo","_lenInfo","_started","_finished","_animState","_isMedic","_proceed","_counter","_itemOut","_countOut","_tree","_distance2d","_distance3d","_trees","_findNearestTree"];
if(TradeInprogress) exitWith { cutText ["Harvest wood already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nHarvest wood already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// allowed trees list move this later
@@ -90,7 +90,7 @@ if (count(_findNearestTree) >= 1) then {
_counter = _counter + 1;
};
cutText [format["Chopping down tree, walk away at anytime to cancel. (%1/%2)", _counter, _countOut], "PLAIN DOWN"];
cutText [format["\n\nChopping down tree, walk away at anytime to cancel. (%1/%2)", _counter, _countOut], "PLAIN DOWN"];
if(_counter == _countOut) exitWith {
_isOk = false;
@@ -115,7 +115,7 @@ if (count(_findNearestTree) >= 1) then {
};
//diag_log format["DEBUG TREE DAMAGE: %1", _tree];
cutText [format["%1 piles of wood has been successfully added in front of you.", _countOut], "PLAIN DOWN"];
cutText [format["\n\n%1 piles of wood has been successfully added in front of you.", _countOut], "PLAIN DOWN"];
} else {
r_interrupt = false;
@@ -123,7 +123,7 @@ if (count(_findNearestTree) >= 1) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled Harvesting Wood.", "PLAIN DOWN"];
cutText ["\n\nCanceled Harvesting Wood.", "PLAIN DOWN"];
};
} else {

View File

@@ -1,6 +1,6 @@
private ["_item","_config","_onLadder","_create","_started","_finished","_animState","_isMedic","_qty","_box","_num_removed","_text","_haskey","_hastoolweapon","_isNear","_hasTinBar"];
if(TradeInprogress) exitWith { cutText ["Copy key already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCopy key already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
_item = _this;
@@ -14,16 +14,16 @@ _haskey = _this in weapons player;
if (!_haskey) exitWith {TradeInprogress = false; cutText [format[(localize "str_player_30"),_text] , "PLAIN DOWN"]};
_hastoolweapon = "ItemKeyKit" in weapons player;
if (!_hastoolweapon) exitWith {TradeInprogress = false; cutText ["Need Keymakers kit to make a copy of a key." , "PLAIN DOWN"]};
if (!_hastoolweapon) exitWith {TradeInprogress = false; cutText ["\n\nNeed Keymakers kit to make a copy of a key." , "PLAIN DOWN"]};
_isNear = {inflamed _x} count (position player nearObjects 2);
if(_isNear == 0) exitWith {TradeInprogress = false; cutText ["Key crafting needs a fire within 2 meters." , "PLAIN DOWN"]};
_isNear = {inflamed _x} count (position player nearObjects 3);
if(_isNear == 0) exitWith {TradeInprogress = false; cutText ["\n\nKey crafting needs a fire within 3 meters." , "PLAIN DOWN"]};
call gear_ui_init;
// require one tin bar per key
_hasTinBar = "ItemTinBar" in magazines player;
if(!_hasTinBar) exitWith {TradeInprogress = false; cutText ["Key crafting requires a 1oz Tin Bar." , "PLAIN DOWN"]};
if(!_hasTinBar) exitWith {TradeInprogress = false; cutText ["\n\nKey crafting requires a 1oz Tin Bar." , "PLAIN DOWN"]};
player playActionNow "Medic";
@@ -63,9 +63,9 @@ if(_finished) then {
_qty = 1;
_box = unitBackpack player;
_box addWeaponCargoGlobal [_create,_qty];
cutText ["Copied key has been added to your backpack." , "PLAIN DOWN"];
cutText ["\n\nCopied key has been added to your backpack." , "PLAIN DOWN"];
} else {
cutText ["Canceled Key Crafting." , "PLAIN DOWN"];
cutText ["\n\nCanceled Key Crafting." , "PLAIN DOWN"];
};
} else {
r_interrupt = false;
@@ -73,6 +73,6 @@ if(_finished) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled Key Crafting." , "PLAIN DOWN"];
cutText ["\n\nCanceled Key Crafting." , "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -3,9 +3,9 @@
Usage: spawn player_goFishing;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item"];
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item","_craft_doLoop"];
if(TradeInprogress) exitWith { cutText ["Crafting already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// temp array of removed parts
@@ -40,7 +40,7 @@ if("workshop" in _needNear) then {
};
if(_abort) exitWith {
cutText [format["Crafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
cutText [format["\n\nCrafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -55,151 +55,159 @@ if (_canDo) then {
_selectedRecipeTools = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "requiretools");
_consumeweapons = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "consumeweapons");
_missing = "";
_missingTools = false;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
_craft_doLoop = true;
if(!_missingTools) then {
while {_craft_doLoop} do {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
_missing = "";
_missingTools = false;
{
_itemIn = _x select 0;
_countIn = _x select 1;
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
if(!_missingTools) then {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
{
_itemIn = _x select 0;
_countIn = _x select 1;
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
} forEach _selectedRecipeInput;
} forEach _selectedRecipeInput;
// If all parts proceed
if (_proceed) then {
// If all parts proceed
if (_proceed) then {
cutText ["Crafting started", "PLAIN DOWN"];
cutText ["\n\nCrafting started", "PLAIN DOWN"];
player playActionNow "Medic";
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
r_interrupt = false;
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
r_doLoop = false;
if (_finished) then {
if (_finished) then {
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// Add crafted item
cutText [format["Crafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
// Add crafted item
cutText [format["\n\nCrafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
} forEach _selectedRecipeOutput;
} forEach _selectedRecipeOutput;
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["\n\nMissing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
};
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["Missing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["\n\nCanceled crafting.", "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled crafting.", "PLAIN DOWN"];
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["\n\nMissing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["\n\nMissing Tool: %1",_textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["Missing Tool: %1",_textMissing], "PLAIN DOWN"];
};
} else {
cutText ["Crafting needs a fire within 2 meters.", "PLAIN DOWN"];
cutText ["\n\nCrafting needs a fire within 3 meters.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -3,9 +3,9 @@
Usage: spawn player_goFishing;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item"];
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item","_craft_doLoop"];
if(TradeInprogress) exitWith { cutText ["Crafting already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// temp array of removed parts
@@ -14,7 +14,7 @@ _abort = false;
_distance = 3;
_reason = "";
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_canDo = (!r_drag_sqf and !r_player_unconscious and !_onLadder);
_item = _this;
@@ -40,7 +40,7 @@ if("workshop" in _needNear) then {
};
if(_abort) exitWith {
cutText [format["Crafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
cutText [format["\n\nCrafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -55,151 +55,159 @@ if (_canDo) then {
_selectedRecipeTools = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "requiretools");
_consumeweapons = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "consumeweapons");
_missing = "";
_missingTools = false;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
_craft_doLoop = true;
if(!_missingTools) then {
while {_craft_doLoop} do {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
_missing = "";
_missingTools = false;
{
_itemIn = _x select 0;
_countIn = _x select 1;
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
if(!_missingTools) then {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
{
_itemIn = _x select 0;
_countIn = _x select 1;
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
} forEach _selectedRecipeInput;
} forEach _selectedRecipeInput;
// If all parts proceed
if (_proceed) then {
// If all parts proceed
if (_proceed) then {
cutText ["Crafting started", "PLAIN DOWN"];
cutText ["\n\nCrafting started", "PLAIN DOWN"];
player playActionNow "Medic";
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
r_interrupt = false;
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
r_doLoop = false;
if (_finished) then {
if (_finished) then {
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// Add crafted item
cutText [format["Crafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
// Add crafted item
cutText [format["\n\nCrafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
} forEach _selectedRecipeOutput;
} forEach _selectedRecipeOutput;
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["\n\nMissing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
};
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["Missing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["\n\nCanceled crafting.", "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled crafting.", "PLAIN DOWN"];
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["\n\nMissing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["\n\nMissing Tool: %1",_textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["Missing Tool: %1",_textMissing], "PLAIN DOWN"];
};
} else {
cutText ["Crafting needs a fire within 2 meters.", "PLAIN DOWN"];
cutText ["\n\nCrafting needs a fire within 3 meters.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -3,9 +3,9 @@
Usage: spawn player_goFishing;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item"];
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item","_craft_doLoop"];
if(TradeInprogress) exitWith { cutText ["Crafting already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// temp array of removed parts
@@ -14,7 +14,7 @@ _abort = false;
_distance = 3;
_reason = "";
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_canDo = (!r_drag_sqf and !r_player_unconscious and !_onLadder);
_item = _this;
@@ -40,7 +40,7 @@ if("workshop" in _needNear) then {
};
if(_abort) exitWith {
cutText [format["Crafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
cutText [format["\n\nCrafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -55,151 +55,159 @@ if (_canDo) then {
_selectedRecipeTools = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "requiretools");
_consumeweapons = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "consumeweapons");
_missing = "";
_missingTools = false;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
_craft_doLoop = true;
if(!_missingTools) then {
while {_craft_doLoop} do {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
_missing = "";
_missingTools = false;
{
_itemIn = _x select 0;
_countIn = _x select 1;
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
if(!_missingTools) then {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
{
_itemIn = _x select 0;
_countIn = _x select 1;
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
} forEach _selectedRecipeInput;
} forEach _selectedRecipeInput;
// If all parts proceed
if (_proceed) then {
// If all parts proceed
if (_proceed) then {
cutText ["Crafting started", "PLAIN DOWN"];
cutText ["\n\nCrafting started", "PLAIN DOWN"];
player playActionNow "Medic";
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
r_interrupt = false;
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
r_doLoop = false;
if (_finished) then {
if (_finished) then {
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// Add crafted item
cutText [format["Crafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
// Add crafted item
cutText [format["\n\nCrafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
} forEach _selectedRecipeOutput;
} forEach _selectedRecipeOutput;
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["\n\nMissing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
};
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["Missing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["\n\nCanceled crafting.", "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled crafting.", "PLAIN DOWN"];
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["\n\nMissing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["\n\nMissing Tool: %1",_textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["Missing Tool: %1",_textMissing], "PLAIN DOWN"];
};
} else {
cutText ["Crafting needs a fire within 2 meters.", "PLAIN DOWN"];
cutText ["\n\nCrafting needs a fire within 3 meters.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -3,9 +3,9 @@
Usage: spawn player_goFishing;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item"];
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item","_craft_doLoop"];
if(TradeInprogress) exitWith { cutText ["Crafting already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// temp array of removed parts
@@ -14,7 +14,7 @@ _abort = false;
_distance = 3;
_reason = "";
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_canDo = (!r_drag_sqf and !r_player_unconscious and !_onLadder);
_item = _this;
@@ -40,7 +40,7 @@ if("workshop" in _needNear) then {
};
if(_abort) exitWith {
cutText [format["Crafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
cutText [format["\n\nCrafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -55,151 +55,159 @@ if (_canDo) then {
_selectedRecipeTools = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "requiretools");
_consumeweapons = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "consumeweapons");
_missing = "";
_missingTools = false;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
_craft_doLoop = true;
if(!_missingTools) then {
while {_craft_doLoop} do {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
_missing = "";
_missingTools = false;
{
_itemIn = _x select 0;
_countIn = _x select 1;
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
if(!_missingTools) then {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
{
_itemIn = _x select 0;
_countIn = _x select 1;
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
} forEach _selectedRecipeInput;
} forEach _selectedRecipeInput;
// If all parts proceed
if (_proceed) then {
// If all parts proceed
if (_proceed) then {
cutText ["Crafting started", "PLAIN DOWN"];
cutText ["\n\nCrafting started", "PLAIN DOWN"];
player playActionNow "Medic";
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
r_interrupt = false;
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
r_doLoop = false;
if (_finished) then {
if (_finished) then {
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// Add crafted item
cutText [format["Crafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
// Add crafted item
cutText [format["\n\nCrafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
} forEach _selectedRecipeOutput;
} forEach _selectedRecipeOutput;
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["\n\nMissing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
};
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["Missing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["\n\nCanceled crafting.", "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled crafting.", "PLAIN DOWN"];
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["\n\nMissing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["\n\nMissing Tool: %1",_textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["Missing Tool: %1",_textMissing], "PLAIN DOWN"];
};
} else {
cutText ["Crafting needs a fire within 2 meters.", "PLAIN DOWN"];
cutText ["\n\nCrafting needs a fire within 3 meters.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -3,9 +3,9 @@
Usage: spawn player_goFishing;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item"];
private ["_onLadder","_canDo","_selectedRecipeOutput","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_itemOut","_countOut","_started","_finished","_animState","_isMedic","_removed","_tobe_removed_total","_textCreate","_textMissing","_selectedRecipeInput","_num_removed","_removed_total","_temp_removed_array","_abort","_reason","_isNear","_missingTools","_hastoolweapon","_selectedRecipeTools","_distance","_crafting","_needNear","_consumeweapons","_item","_craft_doLoop"];
if(TradeInprogress) exitWith { cutText ["Crafting already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nCrafting already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// temp array of removed parts
@@ -14,7 +14,7 @@ _abort = false;
_distance = 3;
_reason = "";
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_canDo = (!r_drag_sqf and !r_player_unconscious and !_onLadder);
_item = _this;
@@ -40,7 +40,7 @@ if("workshop" in _needNear) then {
};
if(_abort) exitWith {
cutText [format["Crafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
cutText [format["\n\nCrafting needs a %1 within %2 meters",_reason,_distance], "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -55,151 +55,159 @@ if (_canDo) then {
_selectedRecipeTools = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "requiretools");
_consumeweapons = getArray (configFile >> "cfgMagazines" >> _item >> "ItemActions" >> _crafting >> "consumeweapons");
_missing = "";
_missingTools = false;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
_craft_doLoop = true;
if(!_missingTools) then {
while {_craft_doLoop} do {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
_missing = "";
_missingTools = false;
{
_itemIn = _x select 0;
_countIn = _x select 1;
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _craft_doLoop = false; _missingTools = true; _missing = _x; };
} forEach _selectedRecipeTools;
if(!_missingTools) then {
//diag_log format["Selected Recipe Input: %1", _selectedRecipeInput];
//diag_log format["Selected Recipe Output: %1", _selectedRecipeOutput];
// Dry run to see if all parts are available.
_proceed = true;
{
_itemIn = _x select 0;
_countIn = _x select 1;
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
//diag_log format["Recipe Check: %1 %2", _itemIn,_countIn];
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// not neccessary
//if (!(_itemIn in magazines player)) exitWith { _missing = _itemIn; _missingQty = _countIn; _proceed = false; };
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
// match against class and parentClass
_qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player;
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; };
} forEach _selectedRecipeInput;
} forEach _selectedRecipeInput;
// If all parts proceed
if (_proceed) then {
// If all parts proceed
if (_proceed) then {
cutText ["Crafting started", "PLAIN DOWN"];
cutText ["\n\nCrafting started", "PLAIN DOWN"];
player playActionNow "Medic";
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
r_interrupt = false;
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
r_doLoop = false;
if (_finished) then {
if (_finished) then {
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
_removed_total = 0; // count total of removed items
_tobe_removed_total = 0; // count total of all to be removed items
// Take items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
_removed = 0;
_itemIn = _x select 0;
_countIn = _x select 1;
// diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn];
_tobe_removed_total = _tobe_removed_total + _countIn;
{
if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then {
_num_removed = ([player,_x] call BIS_fnc_invRemove);
_removed = _removed + _num_removed;
_removed_total = _removed_total + _num_removed;
if(_num_removed >= 1) then {
_temp_removed_array set [count _temp_removed_array,_x];
};
};
} forEach magazines player;
} forEach _selectedRecipeInput;
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
//diag_log format["removed: %1 of: %2", _removed, _tobe_removed_total];
// Only proceed if all parts were removed successfully
if(_removed_total == _tobe_removed_total) then {
// Put items
{
// consumeweapons
{
player removeWeapon _x;
} forEach _consumeweapons;
_itemOut = _x select 0;
_countOut = _x select 1;
//diag_log format["Recipe Output: %1 %2", _itemOut,_countOut];
for "_x" from 1 to _countOut do {
player addMagazine _itemOut;
};
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// get display name
_textCreate = getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName");
// Add crafted item
cutText [format["Crafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
// Add crafted item
cutText [format["\n\nCrafted Item: %1 x %2",_textCreate,_countOut], "PLAIN DOWN"];
} forEach _selectedRecipeOutput;
} forEach _selectedRecipeOutput;
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["\n\nMissing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
};
} else {
// Refund parts since we failed
{player addMagazine _x;} forEach _temp_removed_array;
cutText [format["Missing Parts after first check Item: %1 / %2",_removed_total,_tobe_removed_total], "PLAIN DOWN"];
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["\n\nCanceled crafting.", "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled crafting.", "PLAIN DOWN"];
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["\n\nMissing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["\n\nMissing Tool: %1",_textMissing], "PLAIN DOWN"];
_craft_doLoop = false;
};
} else {
_textMissing = getText(configFile >> "CfgWeapons" >> _missing >> "displayName");
cutText [format["Missing Tool: %1",_textMissing], "PLAIN DOWN"];
};
} else {
cutText ["Crafting needs a fire within 2 meters.", "PLAIN DOWN"];
cutText ["\n\nCrafting needs a fire within 3 meters.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -6,7 +6,7 @@ call gear_ui_init;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
if (_onLadder) exitWith {cutText [(localize "str_player_21") , "PLAIN DOWN"]};
if (vehicle player != player) exitWith {cutText ["You may not drink while in a vehicle", "PLAIN DOWN"]};
if (vehicle player != player) exitWith {cutText ["\n\nYou may not drink while in a vehicle", "PLAIN DOWN"]};
//Force players to wait 3 mins to drink again
//if (dayz_lastDrink < 180) exitWith {cutText ["You may not drink, your not thirsty", "PLAIN DOWN"]};

View File

@@ -4,7 +4,7 @@ call gear_ui_init;
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
if (_onLadder) exitWith {cutText [(localize "str_player_21") , "PLAIN DOWN"]};
if (vehicle player != player) exitWith {cutText ["You may not eat while in a vehicle", "PLAIN DOWN"]};
if (vehicle player != player) exitWith {cutText ["\n\nYou may not eat while in a vehicle", "PLAIN DOWN"]};
//Force players to wait 3 mins to eat again
//if (dayz_lastMeal < 180) exitWith {cutText ["You may not eat, you're already full", "PLAIN DOWN"]};

View File

@@ -5,17 +5,17 @@
*/
private ["_itemOut","_position","_isOk","_counter","_rnd","_item","_itemtodrop","_vehicle","_inVehicle"];
if(TradeInprogress) exitWith { cutText ["Fishing already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nFishing already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
call gear_ui_init;
// find position 5m in front of player
_position = player modeltoworld [0,5,0];
if(!(surfaceIsWater _position)) exitWith {TradeInprogress = false; cutText ["Must be near a shore or on a boat to fish." , "PLAIN DOWN"]; };
if(!(surfaceIsWater _position)) exitWith {TradeInprogress = false; cutText ["\n\nMust be near a shore or on a boat to fish." , "PLAIN DOWN"]; };
if(dayz_isSwimming) exitWith {TradeInprogress = false; cutText [localize "str_player_26", "PLAIN DOWN"]; };
if(player getVariable["combattimeout", 0] >= time) exitWith {TradeInprogress = false; cutText ["Canceled Fishing.", "PLAIN DOWN"];};
if(player getVariable["combattimeout", 0] >= time) exitWith {TradeInprogress = false; cutText ["\n\nCanceled Fishing.", "PLAIN DOWN"];};
_isOk = true;
_counter = 0;
@@ -31,7 +31,7 @@ while {_isOk} do {
if (r_interrupt or (player getVariable["combattimeout", 0] >= time)) then {
_isOk = false;
cutText ["Canceled Fishing.", "PLAIN DOWN"];
cutText ["\n\nCanceled Fishing.", "PLAIN DOWN"];
} else {
sleep 2;
@@ -60,15 +60,15 @@ while {_isOk} do {
player addMagazine _itemOut;
};
cutText ["You caught a fish.", "PLAIN DOWN"];
cutText ["\n\nYou caught a fish.", "PLAIN DOWN"];
_isOk = false;
} else {
cutText ["Nibble... Nibble...", "PLAIN DOWN"];
cutText ["\n\nNibble... Nibble...", "PLAIN DOWN"];
_counter = _counter + 1;
if(_counter == 5) then {
_isOk = false;
sleep 2;
cutText ["You didn't catch anything.", "PLAIN DOWN"];
cutText ["\n\nYou didn't catch anything.", "PLAIN DOWN"];
};
};
};

View File

@@ -5,7 +5,7 @@
*/
private ["_isOk","_i","_objName","_objInfo","_lenInfo","_started","_finished","_animState","_isMedic","_proceed","_counter","_itemOut","_countOut","_tree","_distance2d","_distance3d","_trees","_findNearestTree"];
if(TradeInprogress) exitWith { cutText ["Harvest already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nHarvest already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
// allowed trees list move this later
@@ -103,7 +103,7 @@ if (count(_findNearestTree) >= 1) then {
};
//diag_log format["DEBUG TREE DAMAGE: %1", _tree];
cutText [format["%1 of %2 has been successfully added to your inventory.", _countOut,_itemOut], "PLAIN DOWN"];
cutText [format["\n\n%1 of %2 has been successfully added to your inventory.", _countOut,_itemOut], "PLAIN DOWN"];
} else {
r_interrupt = false;
@@ -111,12 +111,12 @@ if (count(_findNearestTree) >= 1) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText ["Canceled Harvesting.", "PLAIN DOWN"];
cutText ["\n\nCanceled Harvesting.", "PLAIN DOWN"];
};
} else {
cutText [localize "str_player_23", "PLAIN DOWN"];
cutText ["\n\nYou must be close to a plant to harvest.", "PLAIN DOWN"];
};
TradeInprogress = false;

View File

@@ -1,18 +1,18 @@
private ["_dir","_classname","_box","_location","_item","_config","_create_raw","_create","_qty","_type","_hasCrate","_hasTool"];
if(TradeInprogress) exitWith { cutText ["Open Crate already in progress." , "PLAIN DOWN"]; };
if(TradeInprogress) exitWith { cutText ["\n\nOpen Crate already in progress." , "PLAIN DOWN"]; };
TradeInprogress = true;
_hasTool = "ItemCrowbar" in items player;
if(!_hasTool) exitWith {
cutText ["You need a crowbar to open this.", "PLAIN DOWN"];
cutText ["\n\nYou need a crowbar to open this.", "PLAIN DOWN"];
TradeInprogress = false;
};
_item = _this;
_hasCrate = _item in magazines player;
if (!_hasCrate) then {
cutText ["Missing supply crate.", "PLAIN DOWN"];
cutText ["\n\nMissing supply crate.", "PLAIN DOWN"];
TradeInprogress = false;
};
@@ -51,6 +51,6 @@ if(_type == "backpack") then {
player reveal _box;
cutText ["Opened supply crate.", "PLAIN DOWN"];
cutText ["\n\nOpened supply crate.", "PLAIN DOWN"];
TradeInprogress = false;

View File

@@ -4,7 +4,7 @@ Added Female skin changes - DayZ Epoch - vbawol
*/
private ["_item","_onLadder","_hasclothesitem","_config","_text","_myModel","_itemNew","_currentSex","_newSex","_model"];
if(TradeInprogress) exitWith { cutText ["Changing clothes already in progress." , "PLAIN DOWN"] };
if(TradeInprogress) exitWith { cutText ["\n\nChanging clothes already in progress." , "PLAIN DOWN"] };
TradeInprogress = true;
_item = _this;
@@ -19,7 +19,7 @@ _text = getText (_config >> _item >> "displayName");
if (!_hasclothesitem) exitWith {TradeInprogress = false; cutText [format[(localize "str_player_31"),_text,"wear"] , "PLAIN DOWN"]};
if (vehicle player != player) exitWith {TradeInprogress = false; cutText ["You may not change clothes while in a vehicle", "PLAIN DOWN"]};
if (vehicle player != player) exitWith {TradeInprogress = false; cutText ["\n\nYou may not change clothes while in a vehicle", "PLAIN DOWN"]};
_myModel = (typeOf player);
_itemNew = "Skin_" + _myModel;
@@ -46,7 +46,7 @@ if ( (isClass(_config >> _itemNew)) ) then {
};
} else {
cutText ["You cannot wear a skin of the opposite sex.", "PLAIN DOWN"];
cutText ["\n\nYou cannot wear a skin of the opposite sex.", "PLAIN DOWN"];
};
};
};