public AttackInfo(Ability ability, Unit tUnit, bool useAOE = true) { tgtUnit = tUnit; damageMin = ability.GetDamageMin(); damageMax = ability.GetDamageMax(); aoeRange = useAOE ? ability.GetAOERange() : 0; critChance = ability.GetCrit(); critMultiplier = tUnit.GetImmunedToCrit() ? 0 : ability.GetCritMultiplier(); //~ useEffect=ability.UseEffectOnHit(); //~ if(useEffect) effect=ability.GetEffectOnHit().Clone(); if (Random.value < ability.GetEffectOnHitChance()) { effect = ability.GetEffectOnHit(); } critical = Random.value < critChance; damage = Mathf.Round(Random.Range(damageMin, damageMax)) * (critical ? critMultiplier : 1); damage *= DamageTable.GetModifier(tgtUnit.GetArmorType(), ability.GetDamageType()); damage *= (1 - tUnit.GetDmgReduction()); if (Random.value < ability.GetHit() - tgtUnit.GetDodge()) { hit = true; } }
public AttackInfo(Unit sUnit, Unit tUnit, bool useAOE = true) { srcUnit = sUnit; tgtUnit = tUnit; damageMin = srcUnit.GetDamageMin(); damageMax = srcUnit.GetDamageMax(); aoeRange = useAOE ? srcUnit.GetAOERange() : 0; critChance = srcUnit.GetCritChance(); critMultiplier = tUnit.GetImmunedToCrit() ? 0 : srcUnit.GetCritMultiplier(); //~ useEffect=srcUnit.UseEffectOnHit(); //~ if(useEffect) effect=srcUnit.GetEffectOnHit().Clone(); if (Random.value < srcUnit.GetEffectOnHitChance()) { effect = srcUnit.GetEffectOnHit(); } critical = Random.value < critChance; damage = Mathf.Round(Random.Range(damageMin, damageMax)) * (critical ? critMultiplier : 1); //Debug.Log(damageMin+" "+damageMax+" "+damage); damage *= DamageTable.GetModifier(tgtUnit.GetArmorType(), srcUnit.GetDamageType()); damage *= (1 - tUnit.GetDmgReduction()); if (Random.value < srcUnit.GetHit() - tgtUnit.GetDodge()) { hit = true; } }