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);
    }
Exemple #2
0
 public void     Execute()
 {
     if (mCurrentSkill != null)
     {
         mCurrentSkill.Loop();
     }
     if (mCurrentSkill != null && mCurrentSkill.Status == EActStatus.SUCCESS)
     {
         mCurrentSkill.Clear();
         mCurrentSkill = null;
     }
     Dictionary <int, ActBuff> .Enumerator em = mBuffs.GetEnumerator();
     while (em.MoveNext())
     {
         ActBuff buff = em.Current.Value;
         buff.Loop();
         if (buff.Status == EActStatus.SUCCESS)
         {
             mDeleteBuffs.Add(buff.ID);
         }
     }
     em.Dispose();
     for (int i = 0; i < mDeleteBuffs.Count; i++)
     {
         mBuffs.Remove(mDeleteBuffs[i]);
     }
     mDeleteBuffs.Clear();
 }
Exemple #3
0
    public bool AddBuff(int id, Character carryer, Character caster)
    {
        ActBuff newBuff = ActBuffSystem.Create(id, carryer, caster);

        if (newBuff == null)
        {
            return(false);
        }
        else
        {
            if (newBuff.Check())
            {
                ActBuff curBuff = null;
                mBuffs.TryGetValue(id, out curBuff);
                if (curBuff == null)
                {
                    mBuffs[newBuff.ID] = newBuff;
                }
                else
                {
                    switch (curBuff.OverlayType)
                    {
                    case EBuffOverlayType.UnChange:
                        break;

                    case EBuffOverlayType.Overlay:
                        if (curBuff.MaxOverlayNum > 0 && curBuff.CurOverlayNum < curBuff.MaxOverlayNum)
                        {
                            curBuff.Overlay();
                        }
                        break;

                    case EBuffOverlayType.Refresh:
                    {
                        curBuff.Refresh();
                    }
                    break;

                    case EBuffOverlayType.OverlayAndRefresh:
                        if (curBuff.MaxOverlayNum > 0 && curBuff.CurOverlayNum < curBuff.MaxOverlayNum)
                        {
                            curBuff.Overlay();
                        }
                        curBuff.Refresh();
                        break;

                    default:
                        break;
                    }
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
    }
Exemple #4
0
    private void OnRefreshBuffItems()
    {
        Dictionary <int, ActBuff> buffs = CharacterManager.Main.Skill.GetBuffs();

        Dictionary <int, ActBuff> .Enumerator em = buffs.GetEnumerator();
        int index = 0;

        while (em.MoveNext())
        {
            if (index > mBuffItems.Count - 1)
            {
                break;
            }
            ActBuff  current = em.Current.Value;
            ItemBuff tab     = mBuffItems[index];
            tab.item.SetActive(true);
            tab.icon.spriteName = current.Icon;
            switch (current.OverlayType)
            {
            case EBuffOverlayType.Overlay:
            case EBuffOverlayType.OverlayAndRefresh:
                tab.ovelayNum.text = (current.MaxOverlayNum > 0 && current.CurOverlayNum > 1) ?
                                     current.CurOverlayNum.ToString() : string.Empty;
                break;

            case EBuffOverlayType.Refresh:
            case EBuffOverlayType.UnChange:
                tab.ovelayNum.text = string.Empty;
                break;
            }
            if (current.Duration > 0)
            {
                tab.mask.fillAmount = current.LeftTime / current.Duration;
            }
            else
            {
                tab.mask.fillAmount = 0;
            }
            index++;
        }
        em.Dispose();
        for (int i = index; i < mBuffItems.Count; i++)
        {
            ItemBuff tab = mBuffItems[index];
            tab.item.SetActive(false);
        }
    }
Exemple #5
0
    public void DelBuffByType(EBuffType type, int delBuffNum = 0)
    {
        int            num  = 0;
        List <ActBuff> list = new List <ActBuff>(mBuffs.Values);

        for (int i = 0; i < list.Count; i++)
        {
            ActBuff current = list[i];
            if (current.Type == type)
            {
                num++;
                current.Stop();
            }
            if (delBuffNum > 0 && num >= delBuffNum)
            {
                break;
            }
        }
    }