示例#1
0
    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);
    }
示例#2
0
    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);
    }
示例#3
0
    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);
    }