public void minionGetDamageOrHeal(Minion m, int dmgOrHeal, bool dontDmgLoss = false) { m.getDamageOrHeal(dmgOrHeal, this, false, dontDmgLoss); }
//minion attacks a minion //dontcount = betrayal effect! public void minionAttacksMinion(Minion attacker, Minion defender, bool dontcount = false) { if (attacker.isHero) { if (defender.isHero) { defender.getDamageOrHeal(attacker.Angr, this, true, false); } else { int enem_attack = defender.Angr; defender.getDamageOrHeal(attacker.Angr, this, true, false); if (!this.playerFirst.ownHero.immuneWhileAttacking) { int oldhp = attacker.Hp; attacker.getDamageOrHeal(enem_attack, this, true, false); if (!defender.silenced && oldhp > attacker.Hp) { if (defender.handcard.card.name == CardDB.cardName.waterelemental || defender.handcard.card.name == CardDB.cardName.snowchugger) { attacker.frozen = true; } this.triggerAMinionDealedDmg(defender, oldhp - attacker.Hp); } } } doDmgTriggers(); return; } if (!dontcount) { attacker.numAttacksThisTurn++; attacker.stealth = false; if ((attacker.windfury && attacker.numAttacksThisTurn == 2) || !attacker.windfury) { attacker.Ready = false; } } if (logging) Helpfunctions.Instance.logg(".attck with" + attacker.name + " A " + attacker.Angr + " H " + attacker.Hp); int attackerAngr = attacker.Angr; int defAngr = defender.Angr; //trigger attack --------------------------- this.triggerAMinionIsGoingToAttack(attacker); //------------------------------------------ if (defender.isHero)//target is enemy hero { int oldhp = defender.Hp; defender.getDamageOrHeal(attacker.Angr, this, true, false); if (!attacker.silenced && oldhp > defender.Hp) // attacker did dmg { if (attacker.handcard.card.name == CardDB.cardName.waterelemental || attacker.handcard.card.name == CardDB.cardName.snowchugger) defender.frozen = true; this.triggerAMinionDealedDmg(attacker, oldhp - defender.Hp); } doDmgTriggers(); return; } //defender gets dmg int oldHP = defender.Hp; defender.getDamageOrHeal(attackerAngr, this, true, false); if (!attacker.silenced && oldHP > defender.Hp && (attacker.handcard.card.name == CardDB.cardName.waterelemental || attacker.handcard.card.name == CardDB.cardName.snowchugger)) defender.frozen = true; bool defenderGotDmg = oldHP > defender.Hp; bool attackerGotDmg = false; //attacker gets dmg if (!dontcount)//betrayal effect :D { oldHP = attacker.Hp; attacker.getDamageOrHeal(defAngr, this, true, false); if (!defender.silenced && oldHP > attacker.Hp) { if (defender.handcard.card.name == CardDB.cardName.waterelemental || defender.handcard.card.name == CardDB.cardName.snowchugger) attacker.frozen = true; this.triggerAMinionDealedDmg(defender, oldHP - attacker.Hp); } attackerGotDmg = oldHP > attacker.Hp; } //trigger poisonous effect of attacker + defender (even if they died due to attacking/defending) if (defenderGotDmg && !attacker.silenced && attacker.handcard.card.poisionous && !defender.isHero) { minionGetDestroyed(defender); } if (attackerGotDmg && !defender.silenced && defender.handcard.card.poisionous && !attacker.isHero) { minionGetDestroyed(attacker); } if (!dontcount) //foe reaper reaps! { if (attacker.name == CardDB.cardName.foereaper4000 && !attacker.silenced) { List<Minion> temp = (attacker.own) ? this.playerSecond.ownMinions : this.playerFirst.ownMinions; foreach (Minion mnn in temp.ToList()) { if (mnn.zonepos + 1 == defender.zonepos || mnn.zonepos - 1 == defender.zonepos) { this.minionAttacksMinion(attacker, mnn, true); } } } } this.doDmgTriggers(); }