diff --git a/SQF/dayz_code/compile/player_upgradeVehicle.sqf b/SQF/dayz_code/compile/player_upgradeVehicle.sqf index ceb8bdb7e..2890e7565 100644 --- a/SQF/dayz_code/compile/player_upgradeVehicle.sqf +++ b/SQF/dayz_code/compile/player_upgradeVehicle.sqf @@ -5,165 +5,175 @@ if (dayz_actionInProgress) exitWith {localize "STR_EPOCH_PLAYER_52" call dayz_rollingMessages;}; dayz_actionInProgress = true; -private ["_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_removed","_tobe_removed_total","_textMissing","_num_removed","_removed_total","_objectID","_objectUID","_location","_dir","_objectCharacterID","_classname","_newclassname","_upgrade","_vehicle","_findNearestVehicles","_findNearestVehicle","_IsNearVehicle","_finished","_temp_removed_array_mag","_temp_removed_array_wep","_notNearestPlayer","_requirementsWeapon","_requirementsMagazine"]; +private ["_text","_requirementsTools","_upgradeName","_displayname","_vehicle","_proceed","_itemIn","_countIn","_missing","_missingQty","_qty","_removed","_tobe_removed_total","_textMissing","_num_removed","_removed_total","_objectID","_objectUID","_location","_dir","_objectCharacterID","_classname","_newclassname","_upgrade","_vehicle","_finished","_temp_removed_array_mag","_temp_removed_array_wep","_notNearestPlayer","_requirementsWeapon","_requirementsMagazine"]; -// This is used to find correct upgrade based what upgrades was called allows multiple upgrades per vehicle. _upgrade = _this; +_vehicle = cursorTarget; + +if (isNull _vehicle || !(_vehicle isKindOf "AllVehicles") || !(alive _vehicle)) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; if (vehicle player != player) exitWith {dayz_actionInProgress = false; localize "STR_EPOCH_ACTIONS_18" call dayz_rollingMessages;}; -// look for nearest empty vehicle -_findNearestVehicles = player nearEntities [["LandVehicle"],10]; -_findNearestVehicle = []; -{ - if (alive _x && {(count (crew _x)) == 0}) exitWith { - _findNearestVehicle set [(count _findNearestVehicle),_x]; - }; -} count _findNearestVehicles; +_classname = typeOf _vehicle; +_displayname = getText (configFile >> "CfgVehicles" >> _classname >> "displayname"); -_IsNearVehicle = count (_findNearestVehicle); -if (_IsNearVehicle >= 1) then { +if (_classname in DZE_DisableVehicleUpgrade) exitWith {dayz_actionInProgress = false; format [localize "STR_EPOCH_VEHUP_NOT_ALLOWED",_displayname] call dayz_rollingMessages;}; - _vehicle = _findNearestVehicle select 0; +if ((player distance _vehicle) > 6) exitWith {dayz_actionInProgress = false; format [localize "STR_EPOCH_VEHUP_DISTANCE_TOO_FAR",_displayname] call dayz_rollingMessages;}; +if (count (crew _vehicle) == 0) then { _notNearestPlayer = _vehicle call dze_isnearest_player; - if (!isNull _vehicle && {local _vehicle} && {!_notNearestPlayer}) then { - - _classname = typeOf _vehicle; - + if (local _vehicle && !_notNearestPlayer) then { // lookup vehicle and find if any upgrades are available + _upgradeName = getText (configFile >> "CfgMagazines" >> _upgrade >> "displayname"); _upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "Upgrades" >> _upgrade); if (!isNil "_upgrade" && {(count _upgrade) > 0}) then { - + closeDialog 0; _newclassname = _upgrade select 0; - _requirementsWeapon = _upgrade select 1; - _requirementsMagazine = _upgrade select 2; + _requirementsTools = _upgrade select 1; - _missingQty = 0; - _missing = ""; + if (["",_requirementsTools,"none"] call dze_requiredItemsCheck) then { + _requirementsWeapon = _upgrade select 2; + _requirementsMagazine = _upgrade select 3; - _proceed = true; - { - _itemIn = _x select 0; - _countIn = _x select 1; - _qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player; - if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; }; - } count _requirementsMagazine; - { - _itemIn = _x select 0; - _countIn = _x select 1; - _qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgWeapons" >> _x)) == _itemIn) } count weapons player; - if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; }; - } count _requirementsWeapon; - - if (_proceed) then { - [player,20,true,(getPosATL player)] spawn player_alertZombies; - _finished = ["Medic",1] call fn_loopAction; - if (!_finished) exitWith {}; - - _temp_removed_array_mag = []; - _temp_removed_array_wep = []; - _removed_total = 0; - _tobe_removed_total = 0; + _missingQty = 0; + _missing = ""; + _proceed = true; { - _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_mag set [count _temp_removed_array_mag,_x]; - }; - }; - } count magazines player; - } forEach _requirementsMagazine; + _qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player; + if (_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; }; + } count _requirementsMagazine; { - _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; + _itemIn = _x; + _countIn = 1; + _qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgWeapons" >> _x)) == _itemIn) } count weapons player; + if (_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; }; + } count _requirementsWeapon; + + if (_proceed) then { + [player,20,true,(getPosATL player)] spawn player_alertZombies; + _finished = ["Medic",1] call fn_loopAction; + if (!_finished) exitWith {}; + if (count (crew _vehicle) > 0) exitWith {format [localize "STR_CL_LOG_FAIL_PLAYER",_displayname] call dayz_rollingMessages;}; + + _temp_removed_array_mag = []; + _temp_removed_array_wep = []; + _removed_total = 0; + _tobe_removed_total = 0; { - if( (_removed < _countIn) && {(_x == _itemIn) || {configName(inheritsFrom(configFile >> "cfgWeapons" >> _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_wep set [count _temp_removed_array_wep,_x]; + _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_mag set [count _temp_removed_array_mag,_x]; + }; }; - }; - } count weapons player; - } forEach _requirementsWeapon; + } count magazines player; + } forEach _requirementsMagazine; - // all parts removed proceed - if (_tobe_removed_total == _removed_total) then { + { + _removed = 0; + _itemIn = _x; + _countIn = 1; + //diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn]; + _tobe_removed_total = _tobe_removed_total + _countIn; - _objectID = _vehicle getVariable ["ObjectID","0"]; - _objectUID = _vehicle getVariable ["ObjectUID","0"]; + { + if ((_removed < _countIn) && {(_x == _itemIn) || {configName(inheritsFrom(configFile >> "cfgWeapons" >> _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_wep set [count _temp_removed_array_wep,_x]; + }; + }; + } count weapons player; + } forEach _requirementsWeapon; - if(_objectID == "0" && {_objectUID == "0"}) then { - localize "str_epoch_player_50" call dayz_rollingMessages; - } - else { - // Get position - _location = getposATL _vehicle; + // all parts removed proceed + if (_tobe_removed_total == _removed_total) then { - // Get direction - _dir = getDir _vehicle; + _objectID = _vehicle getVariable ["ObjectID","0"]; + _objectUID = _vehicle getVariable ["ObjectUID","0"]; - // Current charID - _objectCharacterID = _vehicle getVariable ["CharacterID","0"]; - localize "STR_EPOCH_VEHUP_IN_PROGRESS" call dayz_rollingMessages; - [_newclassname,objNull] call fn_waitForObject; - dze_waiting = nil; - PVDZE_veh_Upgrade = [_vehicle,[_dir,_location],_newclassname,true,_objectCharacterID,player,dayz_authKey]; - publicVariableServer "PVDZE_veh_Upgrade"; - - //Wait for hive to finish spawning vehicle. Prevents dupe via player queuing multiple upgrades. - waitUntil {!isNil "dze_waiting"}; - - if (dze_waiting == "fail") then { - {player addMagazine _x;} count _temp_removed_array_mag; - {player addWeapon _x;} count _temp_removed_array_wep; - format[localize "str_crafting_failed",_newclassname] call dayz_rollingMessages; + if (_objectID == "0" && {_objectUID == "0"}) then { + localize "str_epoch_player_50" call dayz_rollingMessages; } else { - localize "STR_EPOCH_VEHUP_SUCCESS" call dayz_rollingMessages; - ["Working",0,[3,2,4,0]] call dayz_NutritionSystem; + // Get position + _location = getposATL _vehicle; + + // Get direction + _dir = getDir _vehicle; + + // Current charID + _objectCharacterID = _vehicle getVariable ["CharacterID","0"]; + localize "STR_EPOCH_VEHUP_IN_PROGRESS" call dayz_rollingMessages; + [_newclassname,objNull] call fn_waitForObject; + dze_waiting = nil; + PVDZE_veh_Upgrade = [_vehicle,[_dir,_location],_newclassname,true,_objectCharacterID,player,dayz_authKey]; + publicVariableServer "PVDZE_veh_Upgrade"; + + //Wait for hive to finish spawning vehicle. Prevents dupe via player queuing multiple upgrades. + waitUntil {!isNil "dze_waiting"}; + + if (dze_waiting == "fail") then { + {player addMagazine _x;} count _temp_removed_array_mag; + {player addWeapon _x;} count _temp_removed_array_wep; + format[localize "str_crafting_failed",_newclassname] call dayz_rollingMessages; + } else { + localize "STR_EPOCH_VEHUP_SUCCESS" call dayz_rollingMessages; + ["Working",0,[3,2,4,0]] call dayz_NutritionSystem; + }; }; + } else { + {player addMagazine _x;} count _temp_removed_array_mag; + {player addWeapon _x;} count _temp_removed_array_wep; + format[localize "str_epoch_player_145",_removed_total,_tobe_removed_total] call dayz_rollingMessages; + }; + } else { + _textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName"); + format[localize "STR_EPOCH_ACTIONS_6",_missingQty, _textMissing] call dayz_rollingMessages; + + systemchat localize "STR_CRAFTING_NEEDED_ITEMS"; + + if (count _requirementsMagazine > 0) then { + { + _text = getText(configFile >> "CfgMagazines" >> (_x select 0) >> "displayName"); + systemchat format ["%2x %1",_text,(_x select 1)]; + } count _requirementsMagazine; + }; + if (count _requirementsWeapon > 0) then { + { + _text = getText(configFile >> "CfgWeapons" >> _x >> "displayName"); + systemchat format ["1x %1",_text]; + + } count _requirementsWeapon; }; - } - else { - {player addMagazine _x;} count _temp_removed_array_mag; - {player addWeapon _x;} count _temp_removed_array_wep; - format[localize "str_epoch_player_145",_removed_total,_tobe_removed_total] call dayz_rollingMessages; }; - } - else { - _textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName"); - format[localize "STR_EPOCH_ACTIONS_6",_missingQty, _textMissing] call dayz_rollingMessages; }; - } - else { - localize "str_epoch_player_82" call dayz_rollingMessages; + } else { + format [localize "STR_EPOCH_VEHUP_NO_UPGRADE_FOR_VEHICLE",_upgradeName,_displayname] call dayz_rollingMessages; }; - } - else { + } else { localize "str_epoch_player_245" call dayz_rollingMessages; }; -} -else { - localize "STR_EPOCH_PLAYER_27" call dayz_rollingMessages; +} else { + format [localize "STR_CL_LOG_FAIL_PLAYER",_displayname] call dayz_rollingMessages; }; dayz_actionInProgress = false; diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 115ab596f..129d54722 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -53,6 +53,7 @@ if (!isDedicated) then { dayz_bleedingeffect = 2; //1 = blood on the ground (negatively impacts FPS), 2 = partical effect, 3 = both dayz_temperature_override = true; // Set to true to disable all temperature changes. dayz_nutritionValuesSystem = false; //true, Enables nutrition system, false, disables nutrition system. + DZE_DisableVehicleUpgrade = []; // List of vehicles that cannot be upgraded with manuals E.g.: ["ArmoredSUV_PMC_DZE","LandRover_CZ_EP1_DZE"] // Build restrictions DZE_NoBuildNear = []; //Array of object class names that are blacklisted to build near. i.e ["Land_Mil_ControlTower","Land_SS_hangar"] etc. diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 104e34450..52c3bfa62 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -13607,8 +13607,8 @@ 100п. ПК лента - 10Rnd. SVD mag. - 10п. СВД маг. + 10Rnd. SVD/SVU mag. + 10п. СВД/СВУ маг. @@ -15105,6 +15105,17 @@ Typ: Leuchtgeschoss <br/>Schuss: 1 <br/>Verwendet in: GP-25 Granatwerfer Typ: světlice <br/>Nábojů: 1 <br/>Pro: granátomet GP-25 + + Caliber: 7.62x54mm<br/>Rounds: 10<br/>Used in: SVD, SVU + Calibre: 7.62x54mm<br/>Munitions : 10<br/>Utilisé avec: SVD, SVU + Calibre: 7.62x54mm<br/>Cartuchos: 10<br/>Usado en: SVD, SVU + Calibro: 7.62x54mm<br/>Munizioni: 10<br/>Usato in: SVD, SVU + Kaliber: 7.62x54mm<br/>Naboje: 10<br/>Uzywany w: SVD, SVU + Патрон: 7.62x54mm <br/>Количество: 10<br/>Исп. в: SVD, SVU + Kaliber: 7.62x54mm<br/>Patronen: 10<br/>Verwendet in: SVD, SVU + Kalibr: 7.62x54mm<br/>Nábojů: 10<br/>Pro: SVD, SVU + Kaliber: 7.62x54mm<br/> Töltények: 10<br/> Hozzá tartozó fegyver: SVD, SVU + @@ -15221,7 +15232,7 @@ Kaliber: 7.62x54mm<br/>Patronen: 200<br/>Verwendet in: PKT Kalibr: 7.62x54mm<br/>Nábojů: 200<br/>Pro: PKT Kaliber: 7.62x54mm<br/> Töltények: 200<br/> Hozzá tartozó fegyver: PKT - + 29Rnd. AGS-30 29п. AGS-30 @@ -25926,6 +25937,18 @@ Cooking tripod Schwenkgrill + + You are too far away to upgrade %1! + Du bist zu weit entfernt, um %1 abzugraden! + + + There is no %1 upgrade for %2 available! + Es ist kein %1 Upgrade für %2 verfügbar! + + + The vehicle upgrade for %1 got disabled on this server! + Das Fahrzeug-Upgrade für %1 wurde auf diesem Server deaktiviert! +