Пример #1
0
    internal static int AdjustAttackVal(ObjectBase caster, ObjectBase target, int iVal)
    {
        // 如果目标身上有易伤,增加伤害
        if (target != null)
        {
            BuffInst vulnerableBuff = target.GetBuffInstByType(BuffType.VULNERABLE);
            if (vulnerableBuff != null)
            {
                iVal = (iVal * (100 + vulnerableBuff.effectVal) / 100);
            }
        }

        // 攻击者身上有虚弱BUFF,减少伤害
        if (caster != null)
        {
            BuffInst weakBuff = caster.GetBuffInstByType(BuffType.WEAK);
            if (weakBuff != null)
            {
                iVal = (iVal * (100 - weakBuff.effectVal) / 100);
                if (iVal < 0)
                {
                    iVal = 0;
                }
            }
        }

        return(iVal);
    }
Пример #2
0
        internal void SetData(BuffInst buffInst)
        {
            BuffTemplate templet = BuffTemplateData.GetData(buffInst.tplId);

            if (templet == null)
            {
                return;
            }
            img.url = ResPath.GetUiImagePath(PackageName.BATTLE, templet.szImg);
            switch (templet.nType)
            {
            case BuffType.ADD_ARMOR_ROUND_END:
            case BuffType.MULTI_ARMOR:
                txtValue.text    = buffInst.effectVal.ToString();
                txtValue.visible = true;
                break;

            case BuffType.MAGIC_SWORD:      //幻剑
                txtValue.text    = buffInst.effectVal.ToString();
                txtValue.visible = true;
                break;

            default:
                txtValue.text    = buffInst.leftBout.ToString();
                txtValue.visible = buffInst.leftBout > 0;
                break;
            }
        }
Пример #3
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;
        BuffInst    decBuff     = battleModel.selfData.GetBuffInst((uint)effectTplt.iEffectValue);

        if (decBuff != null)
        {
            battleModel.DecBuffEffectVal(battleModel.selfData, decBuff, effectTplt.iEffectCount);
        }
    }
Пример #4
0
    internal static int AdjustArmorVal(ObjectBase obj, int iVal)
    {
        BuffInst frailBuff = obj.GetBuffInstByType(BuffType.FRAIL);

        if (frailBuff != null)
        {
            iVal = iVal * (100 - frailBuff.effectVal) / 100;
        }
        return(iVal);
    }
Пример #5
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;
        BuffInst    rmBuff      = battleModel.selfData.GetBuffInst((uint)effectTplt.iEffectValue);

        if (rmBuff != null)
        {
            battleModel.RemoveBuff(battleModel.selfData, rmBuff);
            battleModel.AddBuff(battleModel.selfData, battleModel.selfData, (uint)effectTplt.iEffectValue_2, rmBuff.effectVal);
        }
    }
Пример #6
0
 /// <summary>
 /// 移除自身buff
 /// </summary>
 /// <param name="buffInst"></param>
 internal void RemoveBuff(ObjectBase targetObject, BuffInst buffInst)
 {
     targetObject.lstBuffInst.Remove(buffInst);
     if (targetObject.objType == ObjectType.PLAYER)
     {
         SendEvent(BattleEvent.SELF_BUFF_REMOVE, buffInst);
     }
     else if (targetObject.objType == ObjectType.ENEMY)
     {
         SendEvent(BattleEvent.ENEMY_BUFF_REMOVE, buffInst);
     }
 }
Пример #7
0
    /// <summary>
    /// 获取BUFF提示
    /// </summary>
    /// <param name="buffInst"></param>
    /// <returns></returns>
    internal static TipStruct GetBuffTip(BuffInst buffInst)
    {
        BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);

        if (template == null)
        {
            return(null);
        }
        TipStruct tipStruct = new TipStruct()
        {
            name    = template.szName,
            desc    = template.szDesc,
            iconUrl = ResPath.GetUiImagePath(PackageName.BATTLE, template.szImg)
        };

        return(tipStruct);
    }
Пример #8
0
    /// <summary>
    /// 减少buff效果值
    /// </summary>
    /// <param name="buffInst"></param>
    internal void DecBuffEffectVal(ObjectBase targetObject, BuffInst buffInst, int iDec)
    {
        if (buffInst.effectVal == 0)
        {
            return;
        }

        if (buffInst.effectVal <= iDec)
        {
            RemoveBuff(targetObject, buffInst);
        }
        else
        {
            buffInst.effectVal -= iDec;
            if (targetObject.objType == ObjectType.PLAYER)
            {
                SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst);
            }
            else if (targetObject.objType == ObjectType.ENEMY)
            {
                SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst);
            }
        }
    }
Пример #9
0
    /// <summary>
    /// 减少buff剩余回合数
    /// </summary>
    /// <param name="buffInst"></param>
    internal void DecBuffLeftBout(ObjectBase targetObject, BuffInst buffInst, int iDec)
    {
        if (buffInst.leftBout == -1)
        {
            return;
        }

        if (buffInst.leftBout <= iDec)
        {
            RemoveBuff(targetObject, buffInst);
        }
        else
        {
            buffInst.leftBout -= iDec;
            if (targetObject.objType == ObjectType.PLAYER)
            {
                SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst);
            }
            else if (targetObject.objType == ObjectType.ENEMY)
            {
                SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst);
            }
        }
    }
Пример #10
0
    /// <summary>
    /// 目标对象获得buff
    /// </summary>
    /// <param name="buffId"></param>
    internal void AddBuff(ObjectBase casterObject, ObjectBase targetObject, uint buffId, int count = 1)
    {
        if (count == 0 || buffId == 0)
        {
            return;
        }

        if (null == targetObject)
        {
            return;
        }

        List <BuffInst> lstBuffInst = targetObject.lstBuffInst;

        BuffTemplate templet = BuffTemplateData.GetData(buffId);

        if (templet == null)
        {
            return;
        }

        foreach (var buffInst in lstBuffInst)
        {
            if (buffInst.tplId != buffId)
            {
                continue;
            }
            if (templet.iBout != -1)
            {
                // 无法抽卡只有1层
                if (templet.nType != BuffType.CAN_NOT_DRAW_CARD)
                {
                    buffInst.leftBout += templet.iBout * count;
                }
            }
            else
            {
                buffInst.effectVal += templet.iEffectA * count;
            }

            if (targetObject.objType == ObjectType.PLAYER)
            {
                SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst);
            }
            else if (targetObject.objType == ObjectType.ENEMY)
            {
                SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst);
            }
            return;
        }

        //加入新BUFF
        int iBout      = -1;
        int iEffectVal = templet.iEffectA;

        if (templet.iBout != -1)
        {
            // 无法抽卡只有1层
            iBout = 1;
            if (templet.nType != BuffType.CAN_NOT_DRAW_CARD)
            {
                iBout = templet.iBout * count;
            }
        }
        else
        {
            iEffectVal = templet.iEffectA * count;
        }
        BuffInst newBuffInst = new BuffInst(targetObject.instId)
        {
            tplId                 = buffId,
            leftBout              = iBout,
            effectVal             = iEffectVal,
            selfAddDebuffThisBout = (BuffInst.IsDebuff(templet.nType) && casterObject == targetObject)
        };

        lstBuffInst.Add(newBuffInst);
        if (targetObject.objType == ObjectType.PLAYER)
        {
            SendEvent(BattleEvent.SELF_BUFF_ADD, newBuffInst);
        }
        else if (targetObject.objType == ObjectType.ENEMY)
        {
            SendEvent(BattleEvent.ENEMY_BUFF_ADD, newBuffInst);
        }
    }
Пример #11
0
        private void OnEnemyBuffRemove(object obj)
        {
            BuffInst buffInst = obj as BuffInst;

            RefreshEnemyBuff(buffInst.ownerInstId);
        }