bodyarmourfunc.sqf
Code: Select all
private ["_unit","_damage","_ammo","_gethit","_damMults"];
// Stolen from Celery's Chernarus Apocalypse missions, modifications by Nullkigan
_unit=_this select 0;
_damage=_this select 2;
_ammo=_this select 4;
_damMults=[0.1,0.2,0.2,0.8,0.4];
//player sideChat format ["%1 isKindOf BulletCore = %2",_ammo,(_ammo isKindOf "BulletCore")];
if (!(_ammo isKindOf "BulletCore")) then {_damMults=[1.0,1.0,1.0,1.0,1.0];}; // Only modify damage if from a bullet; grenades and stuff still hurt!
if (isNil {_unit getVariable "gethit"}) then {_unit setVariable ["gethit",[0,0,0,0]]}; // fresh unit starts at full health
_gethit=_unit getVariable "gethit"; // load health of each part of body
switch (_this select 1) do { // depending on which part of body is damaged
case "":{ // overall structure
_damage=damage _unit+_damage*(_damMults select 0)
};
case "head_hit":{
_damage=(_gethit select 0)+(_damage-(_gethit select 0))*(_damMults select 1);_gethit set [0,_damage]
};
case "body":{
_damage=(_gethit select 1)+(_damage-(_gethit select 1))*(_damMults select 2);_gethit set [1,_damage]
};
case "hands":{ // cannot kill a unit on own, only affect aim
_damage=(_gethit select 2)+(_damage-(_gethit select 2))*(_damMults select 3);_gethit set [2,_damage]
};
case "legs":{ // cannot kill a unit on own, only affect movement
_damage=(_gethit select 3)+(_damage-(_gethit select 3))*(_damMults select 4);_gethit set [3,_damage]
};
};
_damage
Init.sqf example
Code: Select all
// ====================================================================================
// F2 - Norrin's Revive Respawn
// Credits: Please see the F2 online manual (http://www.ferstaberinde.com/f2/en/)
BodyArmourFunc = compile preprocessFileLineNumbers "bodyarmourfunc.sqf";
player addEventHandler ["HandleDamage",{call bodyarmourfunc;} ];
server execVM "revive_init.sqf";
// ====================================================================================