mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +03:00
see the below links for more info. uiSleep is based off of a more accurate method of tracking time, whereas sleep can fluctuate depending on application performance since it is based on framerate. https://community.bistudio.com/wiki/uiSleep https://community.bistudio.com/wiki/sleep_vs_uiSleep https://community.bistudio.com/wiki/sleep
119 lines
4.0 KiB
Plaintext
119 lines
4.0 KiB
Plaintext
private ["_unit","_move","_damage","_wound","_index","_cnt","_dir","_hpList","_hp","_strH","_dam","_vehicle","_tPos","_zPos","_cantSee","_inAngle","_rnd","_openVehicles","_chance","_attackanimations","_type","_targets"];
|
|
_unit = _this select 0;
|
|
_type = _this select 1;
|
|
_vehicle = (vehicle player);
|
|
|
|
_targets = _unit getVariable ["targets",[]];
|
|
|
|
if (!dayz_zedsAttackVehicles && !(_vehicle in _targets)) exitWith {
|
|
//diag_log ("not attacking vehicle" + str(_vehicle));
|
|
};
|
|
|
|
if ((speed _vehicle > 10)) exitWith {
|
|
//diag_log ("too fast abort attack" + str(_vehicle));
|
|
};
|
|
|
|
//Do the attack
|
|
if (r_player_unconscious && _vehicle == player && _type == "zombie") then {
|
|
_rnd = (round(random 4)) + 1;
|
|
_move = "ZombieFeed" + str(_rnd);
|
|
} else {
|
|
if (_type == "zombie") then {
|
|
_rnd = (round(random 9)) + 1;
|
|
_move = "ZombieStandingAttack" + str(_rnd);
|
|
} else {
|
|
_move = "Dog_Attack";
|
|
};
|
|
};
|
|
|
|
_tPos = visiblePositionASL _vehicle;
|
|
_zPos = visiblePositionASL _unit;
|
|
|
|
_dir = [_zpos,_tPos] call BIS_Fnc_dirTo;
|
|
_unit setDir _dir;
|
|
|
|
// _unit playMove _move;
|
|
|
|
if (local _unit) then {
|
|
_unit switchMove _move;
|
|
} else {
|
|
[objNull, _unit, rSwitchMove, _move] call RE;
|
|
};
|
|
|
|
//Wait
|
|
uiSleep 0.3;
|
|
|
|
if (_vehicle != player) then {
|
|
_hpList = _vehicle call vehicle_getHitpoints;
|
|
_hp = _hpList call BIS_fnc_selectRandom;
|
|
_wound = getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "HitPoints" >> _hp >> "name");
|
|
_damage = random 0.08;
|
|
_chance = round(random 12);
|
|
|
|
if ((_chance % 4) == 0) then {
|
|
_openVehicles = ["ATV_Base_EP1", "Motorcycle", "Bicycle"];
|
|
{
|
|
if (_vehicle isKindOf _x) exitWith {
|
|
player action ["eject", _vehicle];
|
|
};
|
|
} count _openVehicles;
|
|
};
|
|
|
|
//diag_log ("Hitpoints " +str(_wound) + "hit points " + str(_hpList));
|
|
|
|
if (_wound in DZE_vehicleZwounds) then {
|
|
|
|
_strH = "hit_" + (_wound);
|
|
_dam = _vehicle getVariable [_strH,0];
|
|
|
|
//diag_log ("Hitpoints " +str(_wound) +str(_total));
|
|
|
|
if (_dam >= 1) then {
|
|
if (r_player_blood < (r_player_bloodTotal * 0.8)) then {
|
|
_cnt = count (DAYZ_woundHit select 1);
|
|
_index = floor (random _cnt);
|
|
_index = (DAYZ_woundHit select 1) select _index;
|
|
_wound = (DAYZ_woundHit select 0) select _index;
|
|
} else {
|
|
_cnt = count (DAYZ_woundHit_ok select 1);
|
|
_index = floor (random _cnt);
|
|
_index = (DAYZ_woundHit_ok select 1) select _index;
|
|
_wound = (DAYZ_woundHit_ok select 0) select _index;
|
|
};
|
|
_damage = 0.1 + random (1.2);
|
|
//diag_log ("START DAM: Player Hit on " + _wound + " for " + str(_damage));
|
|
[player, _wound, _damage, _unit,"zombie"] call fnc_usec_damageHandler;
|
|
[_unit,"hit",2,false] call dayz_zombieSpeak;
|
|
};
|
|
};
|
|
} else {
|
|
//diag_log ("Animation state: " +(_currentAnim));
|
|
_attackanimations = ["zombiestandingattack1","zombiestandingattack2","zombiestandingattack3","zombiestandingattack4","zombiestandingattack5","zombiestandingattack6","zombiestandingattack7","zombiestandingattack8","zombiestandingattack9","zombiestandingattack10","zombiefeed1","zombiefeed2","zombiefeed3","zombiefeed4","zombiefeed5"];
|
|
if (((_unit distance player) <= dayz_areaAffect) && ((animationState _unit) in _attackanimations)) then {
|
|
//check LOS
|
|
_inAngle = [_zPos,(getdir _unit),50,_tPos] call fnc_inAngleSector;
|
|
if (_inAngle) then {
|
|
//LOS check
|
|
_cantSee = [_unit,_vehicle] call dayz_losCheck;
|
|
if (!_cantSee) then {
|
|
if (r_player_blood < (r_player_bloodTotal * 0.8)) then {
|
|
_cnt = count (DAYZ_woundHit select 1);
|
|
_index = floor (random _cnt);
|
|
_index = (DAYZ_woundHit select 1) select _index;
|
|
_wound = (DAYZ_woundHit select 0) select _index;
|
|
} else {
|
|
_cnt = count (DAYZ_woundHit_ok select 1);
|
|
_index = floor (random _cnt);
|
|
_index = (DAYZ_woundHit_ok select 1) select _index;
|
|
_wound = (DAYZ_woundHit_ok select 0) select _index;
|
|
};
|
|
_damage = 0.1 + random (1.2);
|
|
|
|
//diag_log ("START DAM: Player Hit on " + _wound + " for " + str(_damage));
|
|
[player, _wound, _damage, _unit,"zombie"] call fnc_usec_damageHandler;
|
|
[_unit,"hit",2,false] call dayz_zombieSpeak;
|
|
};
|
|
};
|
|
};
|
|
};
|