示例#1
0
    public bool GetDmg2Role(RoleBase role, out long dmgVal, out bool crit)
    {
        dmgVal = 0;
        crit   = false;
        if (role == m_RoleBase)
        {
            return(false);
        }
        if (m_EftType == DamageEftType.One && m_TarRole != null &&
            m_TarRole != role)
        {
            return(false);
        }

        if (this.IsRoleEffected(role))
        {
            return(false);
        }

        dmgVal = (long)((float)(m_DamageVal + m_Add_Dmg) * m_EftMultiple);

        switch (role.m_BaseType)
        {
        case RoleBaseType.Castle:
        {
            dmgVal += m_AddDmg_Castle;
        }
        break;

        case RoleBaseType.Land:
        {
            dmgVal += m_AddDmg_Land;
        }
        break;

        case RoleBaseType.Air:
        {
            dmgVal += m_AddDmg_Air;
        }
        break;

        case RoleBaseType.OnCastle:
        {
            dmgVal += m_AddDmg_OnCastle;
        }
        break;

        default:
            break;
        }

        float critPer = m_CritPercent + m_Add_Crit;
        float critDmg = m_CritDmg + m_Add_CritDmg;

        float randomCritVal = UnityEngine.Random.Range(0, 100f);

        crit = randomCritVal < critPer;
        if (crit)
        {
            dmgVal = (int)(critDmg * (float)dmgVal);
        }

        if (m_EftType == DamageEftType.One && m_TarRole != null &&
            m_TarRole == role)
        {
            Destroy(gameObject);
        }

        // regist
        this.RegistEffectedRole(role);

        // report to RoleBase
        if (m_RoleBase != null)
        {
            m_RoleBase.AffectedOther(m_DmgName, role);
        }


        return(true);
    }