Files
DayZ-Epoch/SQF/dayz_code/actions/salvage.sqf
ebaydayz 3aad4b61e9 Move some addActions to config UserActions
Should improve client FPS while still allowing conditions and scripts to
be customized.

Some special vehicles like MV22, UH1Y, etc. have UserActions overwritten
in their configs, so please let me know if you find any others that do
not get the option to repair or salvage because UserActions is
overwritten in their config. I think I got them all.

Vanilla commits:

a8c4238c0c

350d73abe1
2016-11-20 19:47:21 -05:00

104 lines
3.6 KiB
Plaintext

private ["_array","_vehicle","_part","_hitpoint","_type","_isOK","_brokenPart","_started","_finished","_hasToolbox","_nameType","_namePart","_animState","_isMedic","_damage","_BreakableParts","_selection","_wpn","_classname","_ismelee"];
if (dayz_salvageInProgress) exitWith { localize "str_salvage_inprogress" call dayz_rollingMessages; };
dayz_salvageInProgress = true;
_array = _this select 3;
_vehicle = _array select 0;
_part = _array select 1;
_hitpoint = _array select 2;
_type = typeOf _vehicle;
_isOK = false;
_brokenPart = false;
_started = false;
_finished = false;
_hasToolbox = "ItemToolbox" in items player;
_nameType = getText(configFile >> "cfgVehicles" >> _type >> "displayName");
_namePart = getText(configFile >> "cfgMagazines" >> _part >> "displayName");
{_vehicle removeAction _x} count s_player_repairActions;
s_player_repairActions = [];
if (_hasToolbox) then {
player playActionNow "Medic";
[player,"repair",0,false] call dayz_zombieSpeak;
[player,50,true,(getPosATL player)] call player_alertZombies;
// Added Nutrition-Factor for work
["Working",0,[20,40,15,0]] call dayz_NutritionSystem;
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
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; };
uiSleep 0.1;
};
r_doLoop = false;
if (_finished) then {
//Remove melee magazines (BIS_fnc_invAdd fix)
false call dz_fn_meleeMagazines;
_damage = [_vehicle,_hitpoint] call object_getHit;
if (_damage < 1 && {_damage > 0}) then { //Tempfix for issue where certain hitpoints on some vehicles do not get damaged and allow infinite removal
_BreakableParts = ["HitGlass1","HitGlass2","HitGlass3","HitGlass4","HitGlass5","HitGlass6","HitLGlass","HitRGlass","HitEngine","HitFuel","HitHRotor"];
if (_hitpoint in _BreakableParts) then {
if ((random 1) < (_damage * 0.9)) then { //max 90% chance to break
_isOK = true;
_brokenPart = true;
} else {
_isOK = [player,_part] call BIS_fnc_invAdd;
_brokenPart = false;
};
} else {
_isOK = [player,_part] call BIS_fnc_invAdd;
_brokenPart = false;
};
if (_isOK) then {
_selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _hitpoint >> "name");
/*if ((_hitpoint == "HitEngine") or (_hitpoint == "HitFuel")) then {
[_vehicle, _selection, 0.89] call fnc_veh_handleDam;
} else {*/
[_vehicle, _selection, 1] call fnc_veh_handleDam;
//};
_vehicle call fnc_veh_ResetEH;
_vehicle setvelocity [0,0,1];
if(_brokenPart) then {
format[localize "str_salvage_destroyed",_namePart,_nameType] call dayz_rollingMessages;
} else {
format[localize "str_salvage_removed",_namePart,_nameType] call dayz_rollingMessages;
};
} else {
localize "str_player_24" call dayz_rollingMessages;
};
};
true call dz_fn_meleeMagazines;
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
localize "str_salvage_canceled" call dayz_rollingMessages;
};
} else {
format[localize "str_salvage_toolbox",_namePart] call dayz_rollingMessages;
};
dayz_myCursorTarget = objNull;
dayz_salvageInProgress = false;
//adding melee mags back if needed
_wpn = primaryWeapon player;
//diag_log format["Classname: %1, WPN: %2", _classname,_wpn];
_ismelee = (getNumber (configFile >> "CfgWeapons" >> _wpn >> "melee") == 1);
if (_ismelee) then {
call dayz_meleeMagazineCheck;
};