コード例 #1
0
ファイル: BattleManager.cs プロジェクト: tiance7/XianCard
    //检测能否触发卡牌效果
    internal bool CanTriggerCardEffect(uint effectId, int targetInstId)
    {
        CardEffectTemplate effectTemplate = CardEffectTemplateData.GetData(effectId);

        if (effectTemplate == null)
        {
            return(false);
        }

        switch (effectTemplate.iEffectTrigType)
        {
        case CardEffectTrigType.NONE:
            break;

        case CardEffectTrigType.GIVE_NOT_BLOCK_DAMAGE:
            if (_battleModel.effectStat.damageLife > 0)
            {
                return(true);
            }
            return(false);

        case CardEffectTrigType.SELF_HAS_BUFF_TYPE:
            return(_battleModel.selfData.HasBuff(effectTemplate.iTrigVal));

        default:
            Debug.LogError("unhandle card EffectTrigType:" + effectTemplate.iEffectTrigType);
            break;
        }

        return(true);
    }
コード例 #2
0
ファイル: BattleManager.cs プロジェクト: tiance7/XianCard
    //处理卡牌效果
    private void HandleCardEffect(CardInstance cardInstance, uint effectId, int targetInstId = 0)
    {
        CardEffectTemplate effectTemplate = CardEffectTemplateData.GetData(effectId);

        if (effectTemplate == null)
        {
            return;
        }

        CardEffectBase cardEffect = CardEffectFactory.GetCardEffect(effectTemplate.nType);

        if (cardEffect == null)
        {
            return;
        }

        if (cardEffect.CanTriggerCardEffect(effectTemplate))
        {
            cardEffect.DoEffect(this, cardInstance, effectTemplate, targetInstId);
        }

        if (effectTemplate.nLinkId != 0)
        {
            HandleCardEffect(cardInstance, effectTemplate.nLinkId, targetInstId);
        }
    }
コード例 #3
0
    public static void Init(XmlNode xml)
    {
        foreach (XmlElement element in xml.ChildNodes)
        {
            CardEffectTemplate template = new CardEffectTemplate();
            template.nId = element["nId"] != null?uint.Parse(element["nId"].InnerText) : 0;                                       //id

            template.iEffectTrigType = element["iEffectTrigType"] != null?uint.Parse(element["iEffectTrigType"].InnerText) : 0;   //效果触发类型 enum CardEffectTrigType

            template.iTrigVal = element["iTrigVal"] != null?uint.Parse(element["iTrigVal"].InnerText) : 0;                        //触发值

            template.nTarget = element["nTarget"] != null?uint.Parse(element["nTarget"].InnerText) : 0;                           //目标类型 enum CardEffectTargetType

            template.nType = element["nType"] != null?uint.Parse(element["nType"].InnerText) : 0;                                 //效果类型 enum CardEffectType

            template.iEffectValue = element["iEffectValue"] != null?int.Parse(element["iEffectValue"].InnerText) : 0;             //效果值

            template.iEffectCount = element["iEffectCount"] != null?int.Parse(element["iEffectCount"].InnerText) : 0;             //效果触发次数

            template.iCostEffectTimes = element["iCostEffectTimes"] != null?int.Parse(element["iCostEffectTimes"].InnerText) : 0; //费用效果倍数

            template.iEffectValue_2 = element["iEffectValue_2"] != null?int.Parse(element["iEffectValue_2"].InnerText) : 0;       //2级效果值

            template.nLinkId = element["nLinkId"] != null?uint.Parse(element["nLinkId"].InnerText) : 0;                           //关联效果ID

            Data.Add(template.nId, template);
        }
    }
コード例 #4
0
    public static CardEffectTemplate GetData(uint nId, object className = null)
    {
        if (!Data.ContainsKey(nId))
        {
            if (className != null)
            {
                UnityEngine.Debug.LogError(string.Format("CardEffectTemplate is null, Id = {0} @ {1}", "nId=" + nId, className));
            }
            return(null);
        }
        CardEffectTemplate template = Data[nId];

        return(template);
    }
コード例 #5
0
ファイル: BattleManager.cs プロジェクト: tiance7/XianCard
    public IEnumerator DamageEnemyCoroutine(int iDmgCount, int targetInstId, CardEffectTemplate effectTemplate)
    {
        int iEffectVal = effectTemplate.iEffectValue;

        if (effectTemplate.nType == CardEffectType.ARMOR_DAMAGE)
        {
            iEffectVal = _battleModel.selfData.armor; //当前护甲值
        }

        bool bIgnoreArmor = (effectTemplate.nType == CardEffectType.ONE_DAMAGE_IGNORE_ARMOR);

        for (int i = 0; i < iDmgCount; ++i)
        {
            DamageEnemy(targetInstId, iEffectVal, bIgnoreArmor);
            yield return(new WaitForSeconds(0.2f));
        }
    }
コード例 #6
0
    public virtual bool CanTriggerCardEffect(CardEffectTemplate effectTplt)
    {
        if (effectTplt == null)
        {
            return(false);
        }

        BattleModel battleModel = BattleModel.Inst;

        switch (effectTplt.iEffectTrigType)
        {
        case CardEffectTrigType.NONE:
            break;

        case CardEffectTrigType.GIVE_NOT_BLOCK_DAMAGE:
            if (battleModel.effectStat.damageLife > 0)
            {
                return(true);
            }
            return(false);

        case CardEffectTrigType.SELF_HAS_BUFF_TYPE:
            return(battleModel.selfData.HasBuff(effectTplt.iTrigVal));

        case CardEffectTrigType.PRE_EFFECT_DRAW_CARD_TYPE_ATTACK:
            List <CardInstance> lstDrawCard = battleModel.effectStat.lstDrawCard;
            if (lstDrawCard.Count > 0 && lstDrawCard[lstDrawCard.Count - 1].cardType == CardType.ATTACK)
            {
                return(true);
            }
            return(false);

        case CardEffectTrigType.PRE_EFFECT_KILL_ENEMY:
            if (battleModel.effectStat.killEnemy)
            {
                return(true);
            }
            return(false);

        default:
            Debug.LogError("unhandle card EffectTrigType:" + effectTplt.iEffectTrigType);
            break;
        }

        return(true);
    }
コード例 #7
0
ファイル: BattleManager.cs プロジェクト: tiance7/XianCard
    public IEnumerator DamageAllEnemyCoroutine(int iDmgCount, CardEffectTemplate effectTemplate)
    {
        int iEffectVal = effectTemplate.iEffectValue;

        if (effectTemplate.nType == CardEffectType.ARMOR_DAMAGE)
        {
            iEffectVal = _battleModel.selfData.armor; //当前护甲值
        }

        bool bIgnoreArmor = (effectTemplate.nType == CardEffectType.ONE_DAMAGE_IGNORE_ARMOR);

        for (int i = 0; i < iDmgCount; ++i)
        {
            foreach (KeyValuePair <int, EnemyInstance> pair in _battleModel.GetEnemys())
            {
                DamageEnemy(pair.Value.instId, iEffectVal, bIgnoreArmor);
            }
            yield return(new WaitForSeconds(0.2f));
        }
    }
コード例 #8
0
 public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
 {
     battlemgr.SelfDrawCard(effectTplt.iEffectValue, false);
 }
コード例 #9
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        List <BuffInst> lstBuffInst = new List <BuffInst>(battleModel.selfData.lstBuffInst);

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }

            if (template.nType > BuffType.DEBUFF_BEGIN && template.nType < BuffType.DEBUFF_END)
            {
                battleModel.RemoveBuff(battleModel.selfData, buffInst);
            }
        }
    }
コード例 #10
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        int iEffectDamage = (int)battleModel.effectStat.damageLife + (int)battleModel.effectStat.damageArmor;

        if (iEffectDamage > 0)
        {
            battleModel.AddSelfHp(iEffectDamage);
        }
    }
コード例 #11
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        battleModel.UpdateArmor(battleModel.selfData, 0);
    }
コード例 #12
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        battleModel.ReduceSelfHp(effectTplt.iEffectValue);
    }
コード例 #13
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);
        }
    }
コード例 #14
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);
        }
    }
コード例 #15
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        battleModel.ReduceCost(-effectTplt.iEffectValue);
        battleModel.effectStat.getCostCount += (uint)effectTplt.iEffectValue;
        battleModel.roundStat.getCostCount  += (uint)effectTplt.iEffectValue;
        battleModel.battleStat.getCostCount += (uint)effectTplt.iEffectValue;
    }
コード例 #16
0
 public virtual void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
 {
     return;
 }
コード例 #17
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        int         iCount      = BattleTool.GetCardEffectCount(effectTplt);
        BattleModel battleModel = BattleModel.Inst;

        if (effectTplt.nTarget == CardEffectTargetType.ONE_ENEMY)
        {
            battleModel.AddBuff(battleModel.selfData, battleModel.GetEnemy(targetInstId), (uint)effectTplt.iEffectValue, iCount);
        }
        else if (effectTplt.nTarget == CardEffectTargetType.ALL_ENEMY)
        {
            foreach (KeyValuePair <int, EnemyInstance> pair in battleModel.GetEnemys())
            {
                battleModel.AddBuff(battleModel.selfData, pair.Value, (uint)effectTplt.iEffectValue, iCount);
            }
        }
        else if (effectTplt.nTarget == CardEffectTargetType.SELF)
        {
            battleModel.AddBuff(battleModel.selfData, battleModel.selfData, (uint)effectTplt.iEffectValue, iCount);
        }
        return;
    }
コード例 #18
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;
        // 如果有脆弱,减少增加的护甲值
        int iAddArmor = effectTplt.iEffectValue;

        iAddArmor = BattleTool.AdjustArmorVal(battleModel.selfData, iAddArmor);

        battleModel.AddArmor(battleModel.selfData, iAddArmor);
        return;
    }
コード例 #19
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        if (effectTplt.nTarget == CardEffectTargetType.ONE_ENEMY)
        {
            int iDmgCount = BattleTool.GetCardEffectCount(effectTplt);
            Core.Inst.StartCoroutine(battlemgr.DamageEnemyCoroutine(iDmgCount, targetInstId, effectTplt));
        }
        else if (effectTplt.nTarget == CardEffectTargetType.ALL_ENEMY)
        {
            int iDmgCount = BattleTool.GetCardEffectCount(effectTplt);
            Core.Inst.StartCoroutine(battlemgr.DamageAllEnemyCoroutine(iDmgCount, effectTplt));
        }
        return;
    }
コード例 #20
0
 public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
 {
     battlemgr.SelfDrawCardUntilNotAttack();
 }
コード例 #21
0
ファイル: BattleTool.cs プロジェクト: tiance7/XianCard
 internal static int GetCardEffectCount(CardEffectTemplate effectTpl)
 {
     return(effectTpl.iCostEffectTimes * (int)BattleModel.Inst.effectStat.consumeCost + effectTpl.iEffectCount);
 }