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; } }