/** 生效伤害 */ public virtual int takeDamage(int damageType, int damageValue, AttributeDataLogic targetAttribute, Unit target) { switch (damageType) { case SkillDamageType.PhysicsDamage: case SkillDamageType.MagicDamage: { int shieldType = damageType == SkillDamageType.PhysicsDamage ? AttributeType.PhysicsShield : AttributeType.MagicShield; int shield = targetAttribute.getAttribute(shieldType); if (shield > 0) { if (shield >= damageValue) { targetAttribute.subOneAttribute(shieldType, damageValue); target.fight.getBuffLogic().onShieldDamage(shieldType, damageValue); damageValue = 0; } else { targetAttribute.subOneAttribute(shieldType, shield); target.fight.getBuffLogic().onShieldDamage(shieldType, shield); damageValue -= shield; } } if (damageValue <= 0) { return(0); } return(takeRealDamage(damageValue, targetAttribute)); } case SkillDamageType.HolyDamage: { return(takeRealDamage(damageValue, targetAttribute)); } } return(0); }
/** 计算对单个单位的伤害(范围伤害值) */ public int toCalculateDamage(AttackData data, int damageType, int[] damages, int attackValue, bool isCrit, AttributeDataLogic attackerAttribute, AttributeDataLogic targetAttribute, Unit attacker, Unit target) { int damageValue; switch (damageType) { case SkillDamageType.PhysicsDamage: case SkillDamageType.MagicDamage: case SkillDamageType.HolyDamage: { damageValue = calculateDamage(damages, attackValue, isCrit, attackerAttribute, targetAttribute, attacker, target, data); } break; case SkillDamageType.HpAdd: { damageValue = attackValue; if (!target.fight.getStatusLogic().cantBeHeal()) { int healV = targetAttribute.getAddRatioResult(AttributeType.HealAddPercent, damageValue); targetAttribute.addOneAttribute(AttributeType.Hp, healV); } } break; case SkillDamageType.MpAdd: { damageValue = attackValue; targetAttribute.addOneAttribute(AttributeType.Mp, damageValue); } break; case SkillDamageType.MpSub: { damageValue = attackValue; targetAttribute.subOneAttribute(AttributeType.Mp, damageValue); } break; default: { damageValue = calculateDamage(damages, attackValue, isCrit, attackerAttribute, targetAttribute, attacker, target, data); } break; } return(damageValue); }
protected int takeRealDamage(int damageValue, AttributeDataLogic targetAttribute) { if (damageValue <= 0) { return(0); } int hp = targetAttribute.getAttribute(AttributeType.Hp); int re = damageValue > hp ? hp : damageValue; targetAttribute.subOneAttribute(AttributeType.Hp, damageValue); return(re); }