//检测能否触发卡牌效果 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); }
//处理卡牌效果 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); } }
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); } }
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); }
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)); } }
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); }
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)); } }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { battlemgr.SelfDrawCard(effectTplt.iEffectValue, false); }
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); } } }
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); } }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { BattleModel battleModel = BattleModel.Inst; battleModel.UpdateArmor(battleModel.selfData, 0); }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { BattleModel battleModel = BattleModel.Inst; battleModel.ReduceSelfHp(effectTplt.iEffectValue); }
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); } }
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); } }
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; }
public virtual void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { return; }
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; }
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; }
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; }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { battlemgr.SelfDrawCardUntilNotAttack(); }
internal static int GetCardEffectCount(CardEffectTemplate effectTpl) { return(effectTpl.iCostEffectTimes * (int)BattleModel.Inst.effectStat.consumeCost + effectTpl.iEffectCount); }