Feenx sama 6 Posted July 30, 2019 Can anyone help me figure out how to modify this code to include (1) no camera shake when being shot and (2) apply this to a specific unit only (two to be exact) via it's variable name or class name. params[ "_unit" ]; // Damage reduction from https://forums.bistudio.com/forums/topic/198136-reducing-player-damage/ // Exit if we are a player and not local // Otherwise add EH for AI every where just in case their locality // changes due to moving into a players group // the EH will only fire where the AI is local if ( isPlayer _unit && { !local _unit } ) exitWith {}; if ( isPlayer _unit ) then { _unit removeAllEventHandlers 'HandleDamage'; }; // Only damage from last applied handleDamage EH is taken into consideration by the engine // Apply a new EH so as we can override the damage applied _unit addEventHandler [ "HandleDamage", { params ["_unit", "_hitSelection", "_damage","_source","_projectile","_hitPartIndex", "_instigator", "_hitPoint"]; // Damage multipliers. The damage of each projectile will be multiplied by this number. private _damageMultiplierHead = 0.3; private _damageMultiplierBody = 0.25; private _damageMultiplierLimbs = 0.15; private _damageMultiplierOverall = 0.25; // Damage limits. Each projectile will be limited to a max of this much damage. private _limitHead = 1.0; private _limitBody = 0.25; private _limitLimbs = 0.1; private _limitOverall = 0.25; private _oldDamage = 0; if (_hitSelection isEqualTo "") then {_oldDamage = damage _unit} else {_oldDamage = _unit getHit _hitSelection}; private _newDamage = _damage - _oldDamage max 0; private _incomingDamage = _newDamage; private _playerHealth = damage _unit; // Infantry selections // Keep in mind that if revive is enabled then incapacitation may occur at around 0.7 damage. // "": The overall damage that determines the damage value of the unit. Unit dies at damage equal to or above 1 // "face_hub": Unit dies at damage equal to or above 1 // "neck": Unit dies at damage equal to or above 1 // "head": Unit dies at damage equal to or above 1 // "pelvis": Unit dies at damage equal to or above 1 // "spine1": Unit dies at damage equal to or above 1 // "spine2": Unit dies at damage equal to or above 1 // "spine3": Unit dies at damage equal to or above 1 // "body": Unit dies at damage equal to or above 1 // "arms": Unit doesn't die with damage to this part // "hands": Unit doesn't die with damage to this part // "legs": Unit doesn't die with damage to this part // Do any other damage calculations here // _damage is the previous damage plus any new damage and will be applied // as the total damage the unit has for this selection once this EH returns // Only modify damage if it is a known projectile (leave falling damage etc alone) if (_newDamage > 0 && !(_projectile isEqualTo "")) then { // Reduce damage by damage multiplier private _damageMultiplier = _damageMultiplierBody; private _upperLimit = _limitBody; switch (_hitSelection) do { case "face_hub"; case "head": { _damageMultiplier = _damageMultiplierHead; _upperLimit = _limitHead; }; case "arms"; case "hands"; case "legs": { _damageMultiplier = _damageMultiplierLimbs; _upperLimit = _limitLimbs; }; case "": { _damageMultiplier = _damageMultiplierOverall; _upperLimit = _limitOverall; }; default { _damageMultiplier = _damageMultiplierBody; _upperLimit = _limitBody; }; }; _newDamage = _newDamage * _damageMultiplier; // Place an upper limit on projectile damage done at once if (_newDamage > _upperLimit) then { _newDamage = _upperLimit; }; _damage = _oldDamage + _newDamage; }; // For players ignore damage if they are incapacitated and pass damage to bis revive handler if ( isPlayer _unit ) then { if ( lifeState _unit == "INCAPACITATED" ) then { //if we are incapacitated take no additional damage _damage = _oldDamage; } else { _this set[ 2, _damage ]; //Call BI REVIVE HandleDamage EH passing new _damage value _damage = _this call bis_fnc_reviveEhHandleDamage; }; }; systemChat format[ "pHealth: %1 selection: %2 oldTotal: %3 newTotal: %4 incomingDmg: %6 appliedDmg: %6", _playerHealth, _hitSelection, _oldDamage, _damage, _incomingDamage, _newDamage]; _damage }]; systemChat format[ "Damage reduction applied to %1", _unit ]; Thanks, Feenx Share this post Link to post Share on other sites
Feenx sama 6 Posted July 31, 2019 (edited) On 7/30/2019 at 10:08 AM, Feenx sama said: (1) no camera shake when being shot and I've figure out this one after some experimenting with setCamShakeParams to the code. However, I'm still stick on number 2. If I happen to figure it out I'll edit this post but any help is still welcomed. I've figured out the second half. Turns out it was as simple as defining a variable. Edited July 31, 2019 by Feenx sama Completed Share this post Link to post Share on other sites