private void ApplyDamage(ref WeaponHitInfo hit, DamagableObject target, float damageMult, bool useDamageMultSelfAsDamage, InputDamage inputDamage) { inputDamage.Mult(damageMult * Rand.NormalNumber(0.8f, 1.2f)); if (useDamageMultSelfAsDamage) { WeaponDamage dmg = new WeaponDamage(inputDamage.weaponBaseType, 0, 0, 0); dmg.SetBaseTypeDamage(damageMult); inputDamage.CopyValues(dmg); } if (cachedSkills) { cachedSkills.ModifyDamage(target, inputDamage); } int level = 1; byte workshop = (byte)Workshop.Arlen; byte race = (byte)Race.None; level = cachedCharacter.level; workshop = cachedCharacter.workshop; RaceableObject raceable = nebulaObject.Raceable(); if (raceable) { race = raceable.race; } var copy = inputDamage.CreateCopy(); if (false == ReflectDamage(target, ref hit, inputDamage)) { target.ReceiveDamage(inputDamage); StartDamageDron(target, inputDamage.CreateCopy(), workshop, level, race); } hit.SetRemainTargetHp(target.health); if (m_Achievments != null) { m_Achievments.OnMakeDamage(copy); } }