public static bool CalcDamage(Character attacker, Character defender, ActSkill skill, EDamageType type, float percent, int fixValue, bool ignoreDefense) { XDamage dmg = new XDamage(); dmg.AttackerName = attacker.Name; dmg.DefenderName = defender.Name; dmg.Skill = skill == null ? string.Empty : skill.Name; dmg.Type = (int)type; switch (type) { case EDamageType.TYPE_PHYSICS: dmg.Value = (int)(percent * attacker.CurrAttr.AP + fixValue); break; case EDamageType.TYPE_DARK: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.BAP) + fixValue); break; case EDamageType.TYPE_ICE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.IAP) + fixValue); break; case EDamageType.TYPE_LIGHT: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.LAP) + fixValue); break; case EDamageType.TYPE_FIRE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.FAP) + fixValue); break; } dmg.Value = (int)(UnityEngine.Random.Range(0.80f, 0.95f) * dmg.Value); CalcDamage(attacker, defender, dmg, ignoreDefense); return(true); }
public static bool CalcDot(Character attacker, Character defender, ActBuff buff, EDamageType type, float percent, int fixValue, bool ignoreDefense) { XDamage dmg = new XDamage(); dmg.AttackerName = attacker.Name; dmg.DefenderName = defender.Name; dmg.Skill = buff.Name; dmg.Type = (int)type; switch (type) { case EDamageType.TYPE_PHYSICS: dmg.Value = (int)(percent * attacker.CurrAttr.AP + fixValue); break; case EDamageType.TYPE_DARK: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.BAP) + fixValue); break; case EDamageType.TYPE_ICE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.IAP) + fixValue); break; case EDamageType.TYPE_LIGHT: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.LAP) + fixValue); break; case EDamageType.TYPE_FIRE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.FAP) + fixValue); break; } CalcDamage(attacker, defender, dmg, ignoreDefense); return(true); }
public static bool CalcDamage(Character attacker, Character defender, XDamage dmg, bool ignoreDefense) { if (defender.IsDivive) { return(false); } int hurtValue = dmg.Value; Vector3 defenderPos = defender.Pos; defender.BeDamage(hurtValue); if (attacker.IsMain && defender != attacker) { GTTimerManager.Instance.DelListener(defender.Avatar.SetHitShaderOff); defender.Avatar.SetHitShaderOn(); GTTimerManager.Instance.AddListener(0.2f, defender.Avatar.SetHitShaderOff); } if (hurtValue > 0) { bool crit = UnityEngine.Random.Range(0, 3) == 1; if (defender.IsMain) { if (crit) { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_ENEMY_CRIT); } else { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_ENEMY_HURT); } } else { if (attacker.IsMain) { if (crit) { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_AVATAR_CRIT); } else { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_AVATAR_HURT); } } if (attacker.Type == EActorType.PARTNER && attacker.Host == GTWorld.Main) { if (crit) { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_PARTNER_CRIT); } else { GTWorld.Instance.Fly.Show(hurtValue.ToString(), defenderPos, EFlyWordType.TYPE_PARTNER_HURT); } } } } UpdateHP(defender); return(true); }