private int getSpecialCardComboPenalitys(CardDB.Card card, Minion target, Playfield p, bool lethal, int choice, int manaCostCard) { CardDB.cardName name = card.name; if (lethal && card.type == CardDB.cardtype.MOB) { if (this.lethalHelpers.ContainsKey(name)) { return 0; } if (this.DamageTargetDatabase.ContainsKey(name) || this.DamageAllDatabase.ContainsKey(name) ) { return 0; } if (this.buffingMinionsDatabase.ContainsKey(name)) { if (name == CardDB.cardName.timberwolf || name == CardDB.cardName.houndmaster) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.PET) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.warsongcommander) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.charge>=1) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.southseacaptain) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.PIRATE) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.murlocwarleader || name == CardDB.cardName.grimscaleoracle || name == CardDB.cardName.coldlightseer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.MURLOC) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.warhorsetrainer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.name == CardDB.cardName.silverhandrecruit) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.malganis) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.handcard.card.race == TAG_RACE.DEMON) beasts++; } if (beasts == 0) return 500; } } else { if (name == CardDB.cardName.theblackknight) { int beasts = 0; foreach (Minion mm in p.enemyMinions) { if (mm.taunt) beasts++; } if (beasts == 0) return 500; } else { if ((this.HealTargetDatabase.ContainsKey(name) || this.HealHeroDatabase.ContainsKey(name) || this.HealAllDatabase.ContainsKey(name))) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.handcard.card.name == CardDB.cardName.lightwarden) beasts++; } if (beasts == 0) return 500; } else { //ignore that minion if it does not have charge, or we can give him charge ---> warsong was deleted ;_; if (!(name == CardDB.cardName.nightblade || card.Charge || this.silenceDatabase.ContainsKey(name) || ((TAG_RACE)card.race == TAG_RACE.PET && p.ownMinions.Find(x => x.name == CardDB.cardName.tundrarhino) != null) || p.owncards.Find(x => x.card.name == CardDB.cardName.charge) != null)) { return 500; } } } } } //lethal end######################################################## //bonus for early thread if (p.ownMaxMana == 1 ) { //if (card.name == CardDB.cardName.nerubianegg) return -10; if (card.name == CardDB.cardName.lepergnome) return -10; if (card.name == CardDB.cardName.faeriedragon) return -20; if (card.name == CardDB.cardName.shrinkmeister) return 0; if (card.Attack >= 3 && card.Health >= 2) return -20; if (card.name == CardDB.cardName.wildgrowth) return -150; } if (p.ownMaxMana == 2) { if (card.name == CardDB.cardName.nerubianegg) return -15; } /*if (card.name == CardDB.cardName.flamewaker && p.turnCounter == 0) { int number =0; foreach (Action a in p.playactions) { if (a.card!=null && a.card.card.type == CardDB.cardtype.SPELL) number++; } return number * 10; }*/ if (card.name == CardDB.cardName.unstableportal && p.owncards.Count <= 9) return -15; if (card.name == CardDB.cardName.daggermastery) { if (p.ownWeaponAttack >= 2 || p.ownWeaponDurability >= 2) return 5; } if (card.name == CardDB.cardName.upgrade) { if (p.ownWeaponDurability == 0) { return 16; } } if (card.name == CardDB.cardName.baronrivendare) { foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.deathlord || mnn.name == CardDB.cardName.zombiechow || mnn.name == CardDB.cardName.dancingswords) return 30; } } //rule for coin on early game if (p.ownMaxMana < 3 && card.name == CardDB.cardName.thecoin) { foreach (Handmanager.Handcard hc in p.owncards) { if (hc.manacost <= p.ownMaxMana && hc.card.type == CardDB.cardtype.MOB) return 5; } } if (name == CardDB.cardName.flare) { if (p.enemyHeroName != HeroEnum.hunter && p.enemyHeroName != HeroEnum.mage && p.enemyHeroName == HeroEnum.pala) return 0; //it is a hunter/mage or pala: if (p.enemySecretCount == 0) return 50; if (p.enemySecretCount >= 1 && p.playactions.Count == 0) return -10; } //some effects, which are bad :D int pen = 0; if (name == CardDB.cardName.houndmaster) { if (target == null) return 50; } if ((card.name == CardDB.cardName.biggamehunter) && (target == null || target.own)) { return 40; } if (name == CardDB.cardName.aldorpeacekeeper && target == null) { pen = 30; } if (name == CardDB.cardName.sylvanaswindrunner && p.enemyMinions.Count == 0) { return 50; } if (name == CardDB.cardName.cabalshadowpriest && target == null) { return 40; } if (name == CardDB.cardName.emergencycoolant && target != null && target.own)//dont freeze own minions { pen = 500; } if (name == CardDB.cardName.shatteredsuncleric && target == null) { pen = 10; } if (name == CardDB.cardName.argentprotector) { if (target == null) { pen = 20; } else { if (!target.own) { return 500; } if (target.divineshild) { pen = 15; } if (!target.Ready && !target.handcard.card.isSpecialMinion) { pen = 10; } if (!target.Ready && !target.handcard.card.isSpecialMinion && target.Angr <= 2 && target.Hp <= 2) { pen = 15; } } } if (name == CardDB.cardName.facelessmanipulator) { if (target == null) { return 50; } if (target.Angr >= 5 || target.handcard.card.cost >= 5 || (target.handcard.card.rarity == 5 || target.handcard.card.cost >= 3)) { return 0; } return 49; } if (name == CardDB.cardName.ancientofwar) { if (p.enemyMinions.Count > 0 && choice == 1) return 200; if (p.enemyMinions.Count == 0 && choice == 2) return 50; } if (name == CardDB.cardName.druidoftheflame) { if (p.enemyMinions.Count > 0 && choice == 2) return 40; if (p.enemyMinions.Count == 0 && choice == 1) return 40; } if (name == CardDB.cardName.gangup && target!=null) { if(target.handcard.card.isToken) return 20; if (target.handcard.card.isSpecialMinion) return -20; } if (name == CardDB.cardName.theblackknight) { if (target == null) { return 50; } foreach (Minion mnn in p.enemyMinions) { if (mnn.taunt && (target.Angr >= 3 || target.Hp >= 3)) return 0; } return 20; } //------------------------------------------------------------------------------------------------------ Minion m = target; if (card.name == CardDB.cardName.reincarnate) { if (m.own) { if (m.handcard.card.deathrattle || m.ancestralspirit >= 1 || m.souloftheforest >= 1 || m.enemyBlessingOfWisdom >= 1 || m.explorersHat >=1) return 0; if (m.handcard.card.Charge && ((m.numAttacksThisTurn == 1 && !m.windfury) || (m.numAttacksThisTurn == 2 && m.windfury))) return 0; if (m.wounded || m.Angr < m.handcard.card.Attack || (m.silenced && PenalityManager.instance.specialMinions.ContainsKey(m.name))) return 0; bool hasOnMinionDiesMinion = false; foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.scavenginghyena && m.handcard.card.race == TAG_RACE.PET) hasOnMinionDiesMinion = true; if (mnn.name == CardDB.cardName.flesheatingghoul || mnn.name == CardDB.cardName.cultmaster) hasOnMinionDiesMinion = true; } if (hasOnMinionDiesMinion) return 0; return 500; } else { if (m.name == CardDB.cardName.nerubianegg && m.Angr <= 4 && !m.taunt) return 500; if (m.taunt && !m.handcard.card.tank) return 0; if (m.enemyBlessingOfWisdom >= 1) return 0; if (m.Angr > m.handcard.card.Attack || m.Hp > m.handcard.card.Health) return 0; if (m.name == CardDB.cardName.abomination || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.unstableghoul || m.name == CardDB.cardName.dancingswords) return 0; return 500; } } if (name == CardDB.cardName.madbomber || name == CardDB.cardName.madderbomber) { //penalize for any own minions with health equal to potential attack amount //to lessen risk of losing your own minion int maxAtk = 3; if (name == CardDB.cardName.madderbomber) maxAtk = 6; if (maxAtk >= p.ownHero.Hp && maxAtk < p.enemyHero.Hp) return 500;//we could be killed, but not enemy >_< .. otherwise YOLO foreach (Minion mnn in p.ownMinions) { if (mnn.Hp <= maxAtk) { if (mnn.Ready) pen += 20; } } /* int numTargets = 2 + p.ownMinions.Count + p.enemyMinions.Count; int numOwnTargets = 1 + p.ownMinions.Count; int numEnemyTargets = numTargets-numOwnTargets; double dmgpertarget = ((double)maxAtk)/((double)numTargets); foreach (Minion mnn in p.ownMinions) { if (mnn.Hp <= dmgpertarget) { pen += 10; } } */ } if (name == CardDB.cardName.goblinblastmage) { bool mechOnField = false; foreach (Minion mnn in p.ownMinions) { if (mnn.handcard.card.race == TAG_RACE.MECHANICAL) { mechOnField = true; break; } } if (! mechOnField) { int manacost = card.getManaCost(p, manaCostCard); foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= (hc.getManaCost(p) + manacost)) return 500;//hc.card.race Should work? Nohero please confirm! if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= hc.getManaCost(p)) return 50; } } else { return 20; } } if (card.name == CardDB.cardName.knifejuggler && p.mobsplayedThisTurn > 1 || (p.ownHeroName == HeroEnum.shaman && p.ownAbilityReady == false)) { return 20; } if (card.name == CardDB.cardName.flametonguetotem && p.ownMinions.Count == 0) { return 100; } if (card.name == CardDB.cardName.stampedingkodo) { bool found = false; foreach (Minion mi in p.enemyMinions) { if (mi.Angr <= 2) found = true; } if (!found) return 20; } if (name == CardDB.cardName.windfury) { if (!m.own) return 500; if (m.own && !m.Ready) return 500; } if ((name == CardDB.cardName.wildgrowth || name == CardDB.cardName.nourish) && p.ownMaxMana == 9 && !(p.ownHeroName == HeroEnum.thief && p.cardsPlayedThisTurn == 0)) { return 500; } if (name == CardDB.cardName.ancestralspirit) { if (!target.own && !target.isHero) { if (m.name == CardDB.cardName.deathlord || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.dancingswords) return 0; return 500; } if (target.own && !target.isHero) { if (this.specialMinions.ContainsKey(m.name)) return -5; return 0; } } if (name == CardDB.cardName.sylvanaswindrunner) { if (p.enemyMinions.Count == 0) { return 10; } } if (name == CardDB.cardName.betrayal && !target.own && !target.isHero) { if (m.Angr == 0) return 30; if (p.enemyMinions.Count == 1) return 30; } if (name == CardDB.cardName.bite) { if ((p.ownHero.numAttacksThisTurn == 0 || (p.ownHero.windfury && p.ownHero.numAttacksThisTurn == 1)) && !p.ownHero.frozen) { } else { return 20; } } if (name == CardDB.cardName.deadlypoison) { return -p.ownWeaponDurability * 2; } if (name == CardDB.cardName.shadydealer) { bool haspirate = false; foreach (Minion mnn in p.ownMinions) { if (mnn.handcard.card.race == TAG_RACE.PIRATE) { haspirate = true; break; } } if (haspirate) return 0; else return 10; } if (name == CardDB.cardName.coldblood) { if (lethal) return 0; return 25; } if (name == CardDB.cardName.bloodmagethalnos) { return 10; } if (name == CardDB.cardName.frostbolt) { if (!target.own && !target.isHero) { if (m.handcard.card.cost <= 2) return 15; } return 8; } if (!lethal && choice == 1 && name == CardDB.cardName.druidoftheclaw) { return 20; } if (name == CardDB.cardName.poweroverwhelming) { if (target.own && !target.isHero && !m.Ready) { return 500; } } if (name == CardDB.cardName.frothingberserker) { if (p.cardsPlayedThisTurn >= 1) pen = 5; } if (name == CardDB.cardName.handofprotection) { if (m.Hp == 1) pen = 15; } if (lethal) { if (name == CardDB.cardName.corruption) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (mm.handcard.card.name == CardDB.cardName.questingadventurer || mm.handcard.card.name == CardDB.cardName.archmageantonidas || mm.handcard.card.name == CardDB.cardName.manaaddict || mm.handcard.card.name == CardDB.cardName.manawyrm || mm.handcard.card.name == CardDB.cardName.wildpyromancer)) beasts++; } if (beasts == 0) return 500; } } if (name == CardDB.cardName.divinespirit) { if (lethal) { if (!target.own && !target.isHero) { if (!m.taunt) { return 500; } else { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && (m.Hp >= 4 || (p.owncards.Find(x => x.card.name == CardDB.cardName.divinespirit) != null && m.Hp >= 2))) { return 0; } return 500; } } } else { if (!target.own && !target.isHero) { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && m.Hp >= 4) { return 0; } return 500; } } if (target.own && !target.isHero) { if (m.Hp >= 4) { return 0; } return 15; } } if (name == CardDB.cardName.knifejuggler) { if (p.mobsplayedThisTurn >= 1) { return 20; } } if ((name == CardDB.cardName.polymorph || name == CardDB.cardName.hex)) { if (target.own && !target.isHero) { return 500; } if (!target.own && !target.isHero) { if (target.allreadyAttacked) return 30; Minion frog = target; if (this.priorityTargets.ContainsKey(frog.name)) return 0; if (frog.Angr >= 4 && frog.Hp >= 4) return 0; return 30; } } if ((name == CardDB.cardName.defenderofargus || name == CardDB.cardName.sunfuryprotector) && p.ownMinions.Count == 1) { return 40; } if ((name == CardDB.cardName.defenderofargus || name == CardDB.cardName.sunfuryprotector) && p.ownMinions.Count == 0) { return 50; } if (name == CardDB.cardName.unleashthehounds) { if (p.enemyMinions.Count <= 1) { return 20; } } if (name == CardDB.cardName.equality) // aoe penality { int hpdestroyed = 0; foreach (Minion mini in p.enemyMinions) { hpdestroyed += (mini.Hp - 1); } if (p.enemyMinions.Count <= 2 || hpdestroyed <= 4) { return 20; } } if (name == CardDB.cardName.bloodsailraider && p.ownWeaponDurability == 0) { //if you have bloodsailraider and no weapon equiped, but own a weapon: foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.type == CardDB.cardtype.WEAPON) return 10; } } if (name == CardDB.cardName.innerfire) { if (m.name == CardDB.cardName.lightspawn) pen = 500; } if (name == CardDB.cardName.huntersmark) { if (target.own && !target.isHero) pen = 500; // dont use on own minions if (!target.own && !target.isHero && (target.Hp <= 4) && target.Angr <= 4) // only use on strong minions { pen = 20; } } if ((name == CardDB.cardName.aldorpeacekeeper || name == CardDB.cardName.humility)) { if (target != null) { if (target.own) pen = 500; // dont use on own minions if (!target.own && target.Angr <= 3) // only use on strong minions { pen = 30; } if (m.name == CardDB.cardName.lightspawn) pen = 500; } else { pen = 50; } } if (name == CardDB.cardName.defiasringleader && p.cardsPlayedThisTurn == 0) { pen = 10; } if (name == CardDB.cardName.bloodknight) { int shilds = 0; foreach (Minion min in p.ownMinions) { if (min.divineshild) { shilds++; } } foreach (Minion min in p.enemyMinions) { if (min.divineshild) { shilds++; } } if (shilds == 0) { pen = 10; } } if (name == CardDB.cardName.direwolfalpha) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (name == CardDB.cardName.abusivesergeant) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (p.turnCounter >= 1 && name == CardDB.cardName.reversingswitch && target.Angr == target.Hp) return 500; return pen; }
private int getSpecialCardComboPenalitys(CardDB.Card card, Minion target, Playfield p, bool lethal, int choice, int manaCostCard) { CardDB.cardName name = card.name; if (lethal && card.type == CardDB.cardtype.MOB) { if (this.lethalHelpers.ContainsKey(name)) { return 0; } if (this.DamageTargetDatabase.ContainsKey(name) || this.DamageAllDatabase.ContainsKey(name) ) { return 0; } if (this.buffingMinionsDatabase.ContainsKey(name)) { if (name == CardDB.cardName.timberwolf || name == CardDB.cardName.houndmaster) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.PET) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.warsongcommander) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.charge>=1) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.southseacaptain) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.PIRATE) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.murlocwarleader || name == CardDB.cardName.grimscaleoracle || name == CardDB.cardName.coldlightseer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.MURLOC) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.warhorsetrainer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.name == CardDB.cardName.silverhandrecruit) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.malganis) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.handcard.card.race == TAG_RACE.DEMON) beasts++; } if (beasts == 0) return 500; } } else { if (name == CardDB.cardName.theblackknight) { int beasts = 0; foreach (Minion mm in p.enemyMinions) { if (mm.taunt) beasts++; } if (beasts == 0) return 500; } else { if ((this.HealTargetDatabase.ContainsKey(name) || this.HealHeroDatabase.ContainsKey(name) || this.HealAllDatabase.ContainsKey(name))) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.handcard.card.name == CardDB.cardName.lightwarden) beasts++; } if (beasts == 0) return 500; } else { //ignore that minion if it does not have charge, or we can give him charge ---> warsong was deleted ;_; if (!(name == CardDB.cardName.nightblade || card.Charge || this.silenceDatabase.ContainsKey(name) || ((TAG_RACE)card.race == TAG_RACE.PET && p.ownMinions.Find(x => x.name == CardDB.cardName.tundrarhino) != null) || p.owncards.Find(x => x.card.name == CardDB.cardName.charge) != null)) { return 500; } } } } } //lethal end######################################################## //bonus for early thread if (p.ownMaxMana == 1 ) { //if (card.name == CardDB.cardName.nerubianegg) return -10; //if (card.name == CardDB.cardName.lepergnome) return -2; //if (card.name == CardDB.cardName.faeriedragon) return -2; //if (card.name == CardDB.cardName.shrinkmeister) return 0; //if (card.name == CardDB.cardName.biggamehunter) return 20; //if (card.Attack >= 3 && card.Health >= 2) return 0; } /*if (card.name == CardDB.cardName.flamewaker && p.turnCounter == 0) { int number =0; foreach (Action a in p.playactions) { if (a.card!=null && a.card.card.type == CardDB.cardtype.SPELL) number++; } return number * 10; }*/ if (card.name == CardDB.cardName.unstableportal && p.owncards.Count <= 9) return -15; if (card.name == CardDB.cardName.daggermastery) { if (p.ownWeaponAttack >= 2 || p.ownWeaponDurability >= 2) return 5; } if (card.name == CardDB.cardName.upgrade) { if (p.ownWeaponDurability == 0) { return 16; } } if (card.name == CardDB.cardName.baronrivendare) { foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.deathlord || mnn.name == CardDB.cardName.zombiechow || mnn.name == CardDB.cardName.dancingswords) return 30; } } //rule for coin on early game if (p.ownMaxMana < 3 && card.name == CardDB.cardName.thecoin) //1,2턴 { bool WGON = false; int has1manacard = 0; int has2manacard = 0; int has3manacard = 0; bool hasweapon = false; bool hasPalSecret =false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.wildgrowth || hcc.card.name == CardDB.cardName.darnassusaspirant ) WGON = true; if (hcc.manacost == 1 && hcc.card.type == CardDB.cardtype.MOB && hcc.card.name != CardDB.cardName.abusivesergeant) has1manacard++; if (hcc.card.Secret && hcc.getManaCost(p) == 1) hasPalSecret = true; if (hcc.manacost == 2 && hcc.card.type != CardDB.cardtype.HEROPWR && hcc.card.name != CardDB.cardName.ironbeakowl) has2manacard++; if (hcc.manacost == 3 && hcc.card.name != CardDB.cardName.biggamehunter) has3manacard++; //check 2 mana weapon situation if (hcc.manacost == 2 && (hcc.card.type == CardDB.cardtype.WEAPON) && p.enemyMinions.Count >=1) hasweapon = true; } bool hassecretkepper = false; foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.secretkeeper) hassecretkepper = true; } if (p.ownHeroName == HeroEnum.druid && WGON) return 0; if (has1manacard >= 2 && p.ownMaxMana == 1) return 0; if (has2manacard >= 2 && p.ownMaxMana == 1) return 0; if (has3manacard >= 2 && p.ownMaxMana == 2) return 0; if (has3manacard == 1 && has1manacard == 1 && has2manacard == 1 && p.ownMaxMana == 2) return 0; if (hasweapon) return 0; if (hasPalSecret && hassecretkepper) return 0; // if (!WGON || (has2manamob <= 1 && p.ownMaxMana == 1) || (has2manamob+has3manamob <= 1 && p.ownMaxMana == 2)) return 500; //몹없고, 무기있고 적몹있는경우 아니거나, 급속성장 없으면 페널티. return 25; } if (card.name == CardDB.cardName.innervate) { if (p.mana >= 9) return 100; } /* //rule for coin on early game if (p.ownMaxMana < 3 && card.name == CardDB.cardName.thecoin) { foreach (Handmanager.Handcard hc in p.owncards) { if (hc.manacost <= p.ownMaxMana && hc.card.type == CardDB.cardtype.MOB) return 10; } }*/ if (name == CardDB.cardName.flare) { if (p.enemyHeroName == HeroEnum.mage || p.enemyHeroName == HeroEnum.pala || p.enemyHeroName == HeroEnum.hunter) { if (p.enemySecretCount >= 1 && p.playactions.Count == 0) return -10; if (p.owncards.Count <=2) return 0; return 15; } return 0; } //some effects, which are bad :D int pen = 0; if (!lethal && name == CardDB.cardName.houndmaster) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (TAG_RACE)mm.handcard.card.race == TAG_RACE.PET) beasts++; } if (target != null && target.Ready && target.own && beasts >= 1) return -2; if (target == null) return 2; } if ((card.name == CardDB.cardName.biggamehunter) && (target == null || target.own)) { return 100-6*p.ownMaxMana; } if (name == CardDB.cardName.sylvanaswindrunner && p.enemyMinions.Count == 0) { return 50; } if (name == CardDB.cardName.cabalshadowpriest && target == null) { return 40; } if (name == CardDB.cardName.emergencycoolant && target != null && target.own)//dont freeze own minions { pen = 500; } if (name == CardDB.cardName.shatteredsuncleric && target == null) { pen = 10; } if (name == CardDB.cardName.argentprotector) { if (target == null) { pen = 20; } else { if (!target.own) { return 500; } if (target.divineshild) { pen = 15; } if (!target.Ready && !target.handcard.card.isSpecialMinion) { pen = 10; } if (!target.Ready && !target.handcard.card.isSpecialMinion && target.Angr <= 2 && target.Hp <= 2) { pen = 15; } } } if (name == CardDB.cardName.facelessmanipulator) { if (target == null) { return 50; } if (target.Angr >= 5 || target.handcard.card.cost >= 5 || (target.handcard.card.rarity == 5 || target.handcard.card.cost >= 3)) { return 0; } return 49; } if (name == CardDB.cardName.ancientofwar) { if (p.enemyMinions.Count > 0 && choice == 1) return 200; // if (p.enemyMinions.Count == 0 && choice == 2) return 50; } if (name == CardDB.cardName.druidoftheflame) { if (p.enemyMinions.Count > 0 && choice == 2) return 40; if (p.enemyMinions.Count == 0 && choice == 1) return 40; } if (name == CardDB.cardName.gangup && target!=null) { if(target.handcard.card.isToken) return 20; if (target.handcard.card.isSpecialMinion) return -20; } if (name == CardDB.cardName.theblackknight) { if (target == null) { return 50; } foreach (Minion mnn in p.enemyMinions) { if (mnn.taunt && (target.Angr >= 3 || target.Hp >= 3)) return 0; } return 20; } ////////////////// /////////////////// //////////////////// /////////////////// if (name == CardDB.cardName.ancientwatcher) { if (p.ownMaxMana <= 3) { foreach (Handmanager.Handcard hc in p.owncards) { if (name == CardDB.cardName.ironbeakowl || p.owncards.Count >= 8) { return 0; } } return 45; } } if (name == CardDB.cardName.drboom) { if (p.ownMinions.Count >= 5) { return 50; } } if (name == CardDB.cardName.kezanmystic) { if (p.enemySecretCount >= 1) return -80; if (p.enemyHeroName == HeroEnum.hunter || p.enemyHeroName == HeroEnum.mage || p.enemyHeroName == HeroEnum.pala) //enemy hero has secret? { return 55 - 2 * (p.ownMaxMana); } } if (name == CardDB.cardName.hellfire) { int PENALTY = 0; int ENEMYMINIONATTACK = 0; int ENEMYMINIONHPOVER4 = 0; foreach (Minion mnn in p.enemyMinions) { ENEMYMINIONATTACK += mnn.Angr; if (mnn.Hp >= 4) { ENEMYMINIONHPOVER4++; } } if (p.enemyMinions.Count <= 2 && p.enemyHero.Hp >= 4) { PENALTY += 30 * (3 - p.enemyMinions.Count); //penalty low count } return PENALTY; } if (name == CardDB.cardName.loatheb) { bool HEALON = false; foreach (Handmanager.Handcard hc in p.owncards) { if ((this.HealTargetDatabase.ContainsKey(name) || this.HealHeroDatabase.ContainsKey(name) || this.HealAllDatabase.ContainsKey(name))) { HEALON = true; } } bool TAUNTON = false; foreach (Minion mn in p.ownMinions) { if (mn.taunt) { TAUNTON = true; } } if (p.ownMinions.Count == 0) return 0; if (p.enemyMinions.Count == 0 && p.ownHero.Hp >= 14 && p.ownMinions.Count <= 2) { return 5; } if (!HEALON && p.ownHero.Hp <= 10 && !TAUNTON) { return -15; } } if (name == CardDB.cardName.moltengiant) { int PENALTY = 0; int MOLTEN = 20; int MOUNTAIN = 12; bool ANOTHER4COST = false; foreach (Handmanager.Handcard hc in p.owncards) { if (name == CardDB.cardName.moltengiant) { MOLTEN = hc.card.getManaCost(p, hc.manacost); if (hc.card.getManaCost(p, hc.manacost) == 0) { PENALTY = -50; } } if (name == CardDB.cardName.mountaingiant) { MOUNTAIN = hc.card.getManaCost(p, hc.manacost); } if (hc.card.getManaCost(p, hc.manacost) == 4) ANOTHER4COST = true; } if (MOLTEN == 4 && ANOTHER4COST) { PENALTY = 25; } if (MOLTEN >= MOUNTAIN) { PENALTY = 100; } return PENALTY; } if (name == CardDB.cardName.twilightdrake) { int DEMONCOUNT = 0; bool MOUNTAIN4COST = false; foreach (Handmanager.Handcard hc in p.owncards) { if (name == CardDB.cardName.voidcaller)//use voidcaller first (if we have another demon) { foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DEMON) { DEMONCOUNT++; } } } if (name == CardDB.cardName.mountaingiant && hc.card.cost <= 4) { MOUNTAIN4COST = true; } } if (DEMONCOUNT >= 2) return 40; if (MOUNTAIN4COST) return 40; //mountaingiant first } if (name == CardDB.cardName.voidcaller && p.ownMaxMana == 4) { int DEMONCOUNT = 0; bool COINON = false; foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DEMON) { DEMONCOUNT++; } if (hcc.card.name == CardDB.cardName.thecoin) { COINON = true; } } if (COINON && DEMONCOUNT < 2) return 25; } if (name == CardDB.cardName.lordjaraxxus) { if ((p.ownMinions.Count - p.enemyMinions.Count) > 0 || p.ownHero.Hp <= 8) { return 0; } return 150; } if (name == CardDB.cardName.acidicswampooze && (p.enemyHeroName == HeroEnum.warrior || p.enemyHeroName == HeroEnum.thief || p.enemyHeroName == HeroEnum.pala || p.enemyHeroName == HeroEnum.shaman || p.enemyHeroName == HeroEnum.hunter)) { if (p.enemyWeaponDurability >= 1) { return 0; } return 40 - 4 * (p.ownMaxMana); } if (name == CardDB.cardName.harrisonjones && (p.enemyHeroName == HeroEnum.warrior || p.enemyHeroName == HeroEnum.thief || p.enemyHeroName == HeroEnum.pala || p.enemyHeroName == HeroEnum.shaman || p.enemyHeroName == HeroEnum.hunter)) { if (p.enemyWeaponDurability >= 1) { return 0; } return 40 - 4 * (p.ownMaxMana); } //heroability if (name == CardDB.cardName.steadyshot) { bool puremob = false; bool hassecret = false; int heropowermana = p.ownHeroAblility.getManaCost(p); foreach (Handmanager.Handcard hcc in p.owncards) { if ((hcc.card.name == CardDB.cardName.explosivetrap && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.EX1_610)) || (hcc.card.name == CardDB.cardName.freezingtrap && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.EX1_611)) || (hcc.card.name == CardDB.cardName.snaketrap && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.EX1_554)) || (hcc.card.name == CardDB.cardName.snipe && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.EX1_609)) || (hcc.card.name == CardDB.cardName.misdirection && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.EX1_533)) || (hcc.card.name == CardDB.cardName.beartrap && !p.ownSecretsIDList.Contains(CardDB.cardIDEnum.AT_060))) hassecret = true; if (hcc.manacost <= p.mana && hcc.card.name != CardDB.cardName.ironbeakowl && (hcc.card.type == CardDB.cardtype.MOB || hcc.card.name == CardDB.cardName.animalcompanion)) puremob = true; // check available minion } if (p.enemyHero.Hp <= 2) return 0; if (p.manaTurnEnd >= 2 && heropowermana <=2) return 0; if (puremob) return 2; if (hassecret) return 2; return 0; } if (name == CardDB.cardName.lesserheal) { bool puremob = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.manacost <= p.mana && !this.BadEarlyturnMinionsDatabase.ContainsKey(hcc.card.name) && (hcc.card.type == CardDB.cardtype.MOB || hcc.card.name == CardDB.cardName.animalcompanion)) puremob = true; } bool haswounded = false; foreach (Minion mnn in p.ownMinions) { if (mnn.wounded) haswounded = true; } if (!haswounded && puremob) return 5; return 0; } // if (name == CardDB.cardName.eaglehornbow) { if (p.ownSecretsIDList.Count >= 1 && p.enemyMinions.Count >= 1) return 0; if (p.ownSecretsIDList.Count == 0 && p.enemyMinions.Count == 0) return 3; } if (name == CardDB.cardName.freezingtrap) { int hasmob = 0; int hasowl = 0; bool puremob = false; bool haseaglehorn = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.eaglehornbow) haseaglehorn = true; if (hcc.card.name == CardDB.cardName.ironbeakowl) hasowl++; if (hcc.manacost <= p.ownMaxMana && (hcc.card.type == CardDB.cardtype.MOB || hcc.card.name == CardDB.cardName.animalcompanion)) hasmob++; // check minion } if ((hasowl == 1 && hasmob - hasowl >= 0) || (hasowl == 2 && hasmob - hasowl + 1 >= 0)) puremob = true; bool enemyhasmob = false; foreach (Minion mn in p.enemyMinions) { if (mn.name == CardDB.cardName.antiquehealbot) return 150; //to avoid enemy use healot again enemyhasmob = true; } // if we have eaglehorn, can use this. if (!puremob && !enemyhasmob && haseaglehorn) return 0; //can use this secret if ((p.ownWeaponDurability >= 1 && p.ownWeaponName == CardDB.cardName.eaglehornbow) || p.ownHero.Hp <= 10 || (p.enemyMinions.Count <= 1 && p.ownMaxMana >= 5) || (!puremob && p.ownMaxMana >= 3)) return 0; return 5; } if (name == CardDB.cardName.snaketrap) // to avoid use this early turn { if (p.enemyWeaponName == CardDB.cardName.deathsbite && p.enemyWeaponDurability == 1) return 500; foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.knifejuggler) return -3; } if (p.ownMaxMana <= 2) return 15; return 0; } if (name == CardDB.cardName.beartrap) { //if (p.ownMaxMana <= 2) return 50; int puremob = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.getManaCost(p) <= p.ownMaxMana && (hcc.card.type == CardDB.cardtype.MOB || hcc.card.name == CardDB.cardName.animalcompanion) && hcc.card.name != CardDB.cardName.ironbeakowl) puremob++; // } if (puremob >= 1 && p.ownHero.Hp >=10) return 15; } if (name == CardDB.cardName.explosivetrap) // to avoid early turn { int hasmob = 0; int hasowl = 0; bool puremob = false; bool haseaglehorn = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.eaglehornbow) haseaglehorn = true; if (hcc.card.name == CardDB.cardName.ironbeakowl) hasowl++; if (hcc.manacost <= p.ownMaxMana && (hcc.card.type == CardDB.cardtype.MOB || hcc.card.name == CardDB.cardName.animalcompanion)) hasmob++; } if ((hasowl == 1 && hasmob - hasowl >= 0) || (hasowl == 2 && hasmob - hasowl + 1 >= 0)) puremob = true; int enemyhasmob = 0; foreach (Minion mn in p.enemyMinions) { if (mn.Hp <= 2 && !mn.divineshild) enemyhasmob++; } if ((p.ownWeaponDurability >= 1 && p.ownWeaponName == CardDB.cardName.eaglehornbow) || p.ownHero.Hp <= 10 || (!puremob && p.ownMaxMana >= 3)) return 0; if (p.turnCounter <= 2) return 5; if ((enemyhasmob <= 2 && p.enemyMinions.Count <= 2) || puremob || !haseaglehorn) return 10; return 0; } if (name == CardDB.cardName.keeperofthegrove) { if (p.enemyMinions.Count == 0) return 20; } if (name == CardDB.cardName.repentance) { bool canuse = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.repentance && p.manaTurnEnd >= hcc.getManaCost(p)) canuse = true; } if (canuse && p.ownMaxMana >= 3) return 0; return 10; } if (name == CardDB.cardName.noblesacrifice) { bool canuse = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.noblesacrifice && p.manaTurnEnd >= hcc.getManaCost(p)) canuse = true; } if (canuse) return -4; return 0; } if (name == CardDB.cardName.avenge) { bool canuse = false; foreach(Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.avenge && p.manaTurnEnd >= hcc.getManaCost(p)) canuse = true; } if (canuse) return -1; return 0; } if (name == CardDB.cardName.warhorsetrainer) { bool musteron = false; foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.name == CardDB.cardName.musterforbattle) musteron = true; } int silver =0; foreach (Minion mn in p.ownMinions) { if (mn.name == CardDB.cardName.silverhandrecruit) silver++; } //no use if we have no silverhand if (p.ownMaxMana <= 3 && (musteron || silver == 0)) return 5; } if (name == CardDB.cardName.quartermaster && p.ownHeroName == HeroEnum.pala) { int silver = 0; int silverReady = 0; foreach (Minion mn in p.ownMinions) { if (mn.name == CardDB.cardName.silverhandrecruit) { if (mn.Ready) silverReady++; silver++; } } if (silverReady >= 1 || silver >= 2) return 0; return 10; } ////////////////////dragon if (name == CardDB.cardName.twilightwhelp) { int DRAGONCOUNT = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DRAGON) { DRAGONCOUNT++; } } if (DRAGONCOUNT <= 1) return 5; } if (name == CardDB.cardName.twilightguardian) { int DRAGONCOUNT = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DRAGON) { DRAGONCOUNT++; } } if (DRAGONCOUNT <= 1) return 3; } if (name == CardDB.cardName.wyrmrestagent || name == CardDB.cardName.blackwingtechnician) { int DRAGONCOUNT = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DRAGON) { DRAGONCOUNT++; } } if (DRAGONCOUNT <= 0) return 5; } if (name == CardDB.cardName.confessorpaletress) { if (p.enemyMinions.Count == 0) return 0; if (p.ownMaxMana <= 8) return 25; } if (name == CardDB.cardName.blackwingcorruptor) { if (p.enemyMinions.Count == 0) return 15; } if (name == CardDB.cardName.rockbiterweapon) { if (p.enemyMinions.Count == 0) return 100; } if (name == CardDB.cardName.ramwrangler) { bool hasbeast = false; foreach (Minion mnn in p.ownMinions) { if ((TAG_RACE)mnn.handcard.card.race == TAG_RACE.PET) hasbeast = true; } if (!hasbeast) return 30; } if (name == CardDB.cardName.manatidetotem) { bool taunton = false; foreach (Minion mnn in p.ownMinions) { if (mnn.taunt) taunton = true; } int enemyDMG = 0; foreach (Minion mnn in p.enemyMinions) { enemyDMG += mnn.Angr; } bool candie = false; if ((p.enemyHeroName == HeroEnum.mage || p.enemyHeroName == HeroEnum.thief) && enemyDMG >= 2) candie = true; if (enemyDMG >= 3) candie = true; if (!taunton && candie) return 30; } if (name == CardDB.cardName.emperorthaurissan) { return 0 - p.owncards.Count; } //////////////secret paladin if (name == CardDB.cardName.competitivespirit) { if (p.ownMinions.Count >= 2) return 0; return 5; } //------------------------------------------------------------------------------------------------------ Minion m = target; if (card.name == CardDB.cardName.reincarnate) { if (m.own) { if (m.handcard.card.deathrattle || m.ancestralspirit >= 1 || m.souloftheforest >= 1 || m.enemyBlessingOfWisdom >= 1) return 0; if (m.handcard.card.Charge && ((m.numAttacksThisTurn == 1 && !m.windfury) || (m.numAttacksThisTurn == 2 && m.windfury))) return 0; if (m.wounded || m.Angr < m.handcard.card.Attack || (m.silenced && PenalityManager.instance.specialMinions.ContainsKey(m.name))) return 0; bool hasOnMinionDiesMinion = false; foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.scavenginghyena && m.handcard.card.race == TAG_RACE.PET) hasOnMinionDiesMinion = true; if (mnn.name == CardDB.cardName.flesheatingghoul || mnn.name == CardDB.cardName.cultmaster) hasOnMinionDiesMinion = true; } if (hasOnMinionDiesMinion) return 0; return 500; } else { if (m.name == CardDB.cardName.nerubianegg && m.Angr <= 4 && !m.taunt) return 500; if (m.taunt && !m.handcard.card.tank) return 0; if (m.enemyBlessingOfWisdom >= 1) return 0; if (m.Angr > m.handcard.card.Attack || m.Hp > m.handcard.card.Health) return 0; if (m.name == CardDB.cardName.abomination || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.unstableghoul || m.name == CardDB.cardName.dancingswords) return 0; return 500; } } if (name == CardDB.cardName.madbomber || name == CardDB.cardName.madderbomber) { //penalize for any own minions with health equal to potential attack amount //to lessen risk of losing your own minion int maxAtk = 3; if (name == CardDB.cardName.madderbomber) maxAtk = 6; if (maxAtk >= p.ownHero.Hp && maxAtk < p.enemyHero.Hp) return 500;//we could be killed, but not enemy >_< .. otherwise YOLO foreach (Minion mnn in p.ownMinions) { if (mnn.Hp <= maxAtk) { if (mnn.Ready) pen += 20; } } /* int numTargets = 2 + p.ownMinions.Count + p.enemyMinions.Count; int numOwnTargets = 1 + p.ownMinions.Count; int numEnemyTargets = numTargets-numOwnTargets; double dmgpertarget = ((double)maxAtk)/((double)numTargets); foreach (Minion mnn in p.ownMinions) { if (mnn.Hp <= dmgpertarget) { pen += 10; } } */ } if (name == CardDB.cardName.goblinblastmage) { bool mechOnField = false; foreach (Minion mnn in p.ownMinions) { if (mnn.handcard.card.race == TAG_RACE.MECHANICAL) { mechOnField = true; break; } } if (! mechOnField) { int manacost = card.getManaCost(p, manaCostCard); foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= (hc.getManaCost(p) + manacost)) return 500;//hc.card.race Should work? Nohero please confirm! if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= hc.getManaCost(p)) return 50; } } else { return 20; } } if (card.name == CardDB.cardName.knifejuggler) { int hasmob = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.manacost == 2 && (hcc.card.type == CardDB.cardtype.MOB && hcc.card.name != CardDB.cardName.ironbeakowl && hcc.card.name != CardDB.cardName.knifejuggler)) hasmob++; } /*if (Ai.Instance.botBase is BehaviorMidPaladin) { foreach (Minion mnn in p.ownMinions) { if (mnn.Angr >=2 && mnn.Hp == 1 && p.ownMaxMana <=2) return 20; } }*/ if (p.ownMaxMana <= 3 && hasmob >= 1) return 100; if (p.mobsplayedThisTurn >= 1 || ((p.ownHeroName == HeroEnum.pala || p.ownHeroName == HeroEnum.shaman) && p.ownAbilityReady == false)) return 5; } if (card.name == CardDB.cardName.flametonguetotem) { int readycount = 0; if(p.ownMinions.Count == 0) return 100; foreach(Minion mnn in p.ownMinions) { //only ready if (mnn.Ready && !mnn.exhausted) readycount++; } if (readycount == 0) return 15; if (readycount >= 1) return 0; } if (card.name == CardDB.cardName.stampedingkodo) { bool found = false; foreach (Minion mi in p.enemyMinions) { if (mi.Angr <= 2) found = true; } if (!found) return 5; } if (name == CardDB.cardName.windfury) { if (!m.own) return 500; if (m.own && !m.Ready) return 500; } if ((name == CardDB.cardName.wildgrowth || name == CardDB.cardName.nourish && choice != 2)) { if (p.ownMaxMana >= 7 && p.ownMaxMana <= 9 && !(p.ownHeroName == HeroEnum.thief && p.cardsPlayedThisTurn == 0)) return 500; if (name == CardDB.cardName.wildgrowth) { foreach(Handmanager.Handcard hcc in p.owncards) { if (hcc.card.name == CardDB.cardName.darnassusaspirant && hcc.getManaCost(p) <= 2) return 10; } } } if (name == CardDB.cardName.ancestralspirit) { if (!target.own && !target.isHero) { if (m.name == CardDB.cardName.deathlord || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.dancingswords) return 0; return 500; } if (target.own && !target.isHero) { if (this.specialMinions.ContainsKey(m.name)) return -5; return 0; } } if (name == CardDB.cardName.sylvanaswindrunner) { if (p.enemyMinions.Count == 0) { return 10; } } if (name == CardDB.cardName.betrayal && !target.own && !target.isHero) { if (m.Angr == 0) return 30; if (p.enemyMinions.Count == 1) return 30; } if (name == CardDB.cardName.bite) { if ((p.ownHero.numAttacksThisTurn == 0 || (p.ownHero.windfury && p.ownHero.numAttacksThisTurn == 1)) && !p.ownHero.frozen) { } else { return 20; } } if (name == CardDB.cardName.deadlypoison) { return -p.ownWeaponDurability * 2; } if (name == CardDB.cardName.shadydealer) { bool haspirate = false; foreach (Minion mnn in p.ownMinions) { if (mnn.handcard.card.race == TAG_RACE.PIRATE) { haspirate = true; break; } } if (haspirate) return 0; else return 10; } if (name == CardDB.cardName.coldblood) { if (lethal) return 0; return 25; } if (name == CardDB.cardName.bloodmagethalnos) { return 10; } if (name == CardDB.cardName.frostbolt) { if (!target.own && !target.isHero) { if (m.handcard.card.cost <= 2) return 15; } return 8; } if (!lethal && choice == 1 && name == CardDB.cardName.druidoftheclaw) { return 20; } if (name == CardDB.cardName.swipe) { int targets = 0; bool targetexist = false; foreach (Minion mnn in p.enemyMinions) { if (mnn.Hp <= 1 + p.spellpower || mnn.divineshild) targets++; if (mnn.Hp > 1 + p.spellpower && !mnn.divineshild) targetexist = true; } if (target.isHero && !target.own && targets >= 2 && !targetexist) return -10 * targets; return 0; } if (name == CardDB.cardName.poweroverwhelming) { if (target.own && !target.isHero && !m.Ready) { return 500; } } if (name == CardDB.cardName.frothingberserker) { if (p.cardsPlayedThisTurn >= 1) pen = 5; } if (name == CardDB.cardName.handofprotection) { if (m.Hp == 1) pen = 15; } if (lethal) { if (name == CardDB.cardName.corruption) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (mm.handcard.card.name == CardDB.cardName.questingadventurer || mm.handcard.card.name == CardDB.cardName.archmageantonidas || mm.handcard.card.name == CardDB.cardName.manaaddict || mm.handcard.card.name == CardDB.cardName.manawyrm || mm.handcard.card.name == CardDB.cardName.wildpyromancer)) beasts++; } if (beasts == 0) return 500; } } if (name == CardDB.cardName.divinespirit) { if (lethal) { if (!target.own && !target.isHero) { if (!m.taunt) { return 500; } else { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && (m.Hp >= 4 || (p.owncards.Find(x => x.card.name == CardDB.cardName.divinespirit) != null && m.Hp >= 2))) { return 0; } return 500; } } } else { if (!target.own && !target.isHero) { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && m.Hp >= 4) { return 0; } return 500; } } if (target.own && !target.isHero) { if (m.Hp >= 4) { return 0; } return 15; } } if ((name == CardDB.cardName.polymorph || name == CardDB.cardName.hex)) { if (target.own && !target.isHero) { return 500; } if (!target.own && !target.isHero) { if (target.allreadyAttacked) return 30; Minion frog = target; if (this.priorityTargets.ContainsKey(frog.name)) return 0; if (frog.Angr >= 4 && frog.Hp >= 4) return 0; return 30; } } ////////////// /////////////// if (name == CardDB.cardName.sunfuryprotector) { if (Ai.Instance.botBase is BehaviorHandlock) { if (p.ownHero.Hp <= 10) return 0; int NEEDTAUNTCOUNT = 0; foreach (Minion min in p.ownMinions) { if (!min.taunt && min.Hp >=4) { NEEDTAUNTCOUNT++; } } if (p.ownHero.Hp <= 14 && NEEDTAUNTCOUNT >= 2) return -5; if (NEEDTAUNTCOUNT >= 2) return 0; if (NEEDTAUNTCOUNT == 1 && p.ownHero.Hp <=16) return 10; return 500; } int TAUNTCOUNT = 0; foreach (Minion min in p.ownMinions) { if (min.taunt) { TAUNTCOUNT++; } } if (p.ownHero.Hp <= 14 && TAUNTCOUNT <= 1 && p.ownMinions.Count >= 1) { return 0; } if (p.ownHero.Hp <= 8) { return 0; } return 40 - 3 * (p.ownMaxMana); } if (name == CardDB.cardName.defenderofargus && p.ownMinions.Count <= 1) { if (p.ownHero.Hp <= 10) return 0; return (2 - p.ownMinions.Count) * 40; } ////////////// if (name == CardDB.cardName.shrinkmeister) //shrinkmeister { bool puremob = false; foreach (Handmanager.Handcard hcc in p.owncards) { if (hcc.manacost <= p.mana && !this.BadEarlyturnMinionsDatabase.ContainsKey(hcc.card.name) && hcc.card.type == CardDB.cardtype.MOB ) puremob = true; } if (p.enemyMinions.Count == 0 && (puremob && p.ownMaxMana <=5)) return 100; return 0; } ////////////// if (name == CardDB.cardName.unleashthehounds) { bool hasjuggler = false; bool haskillcommand = false; foreach (Minion mnn in p.ownMinions) { if (name == CardDB.cardName.knifejuggler) { hasjuggler = true; } } foreach (Handmanager.Handcard hcc in p.owncards) { if (name == CardDB.cardName.killcommand && p.mana >= 6) { haskillcommand = true; } } bool targeton = false; bool sonnim = false; foreach (Minion mnn in p.enemyMinions) { if (mnn.Hp >= 4) targeton = true; if (mnn.name == CardDB.cardName.grimpatron && mnn.Hp >= 2) sonnim = true; } if (sonnim) return 100 - 5 * (p.enemyMinions.Count); if (hasjuggler || (haskillcommand && targeton) || p.ownHero.Hp <= 10) return 0; if (p.enemyMinions.Count <= 3 || (!hasjuggler || !haskillcommand)) return 40 - 5 * (p.enemyMinions.Count); } if (name == CardDB.cardName.killcommand) { bool hasbeast = false; foreach (Minion mnn in p.ownMinions) { if ((TAG_RACE)mnn.handcard.card.race == TAG_RACE.PET) hasbeast = true; } if (hasbeast && p.enemyHero.Hp <= 12 && target.isHero) return 3; // if (hasbeast && target.Hp - p.spellpower == 5 && !target.isHero) return 3; if (target.Angr >= 5 && !target.isHero && !target.own) return 3; if (!hasbeast && (p.ownHero.Hp >= 10 || p.enemyHero.Hp + p.enemyHero.armor >= 13)) return 100; // if (!target.isHero && target.Hp -p.spellpower >= 6) return 300; // if (!target.isHero && target.Hp <= 2 && target.Angr <= 5) return 100; return 50; } if (name == CardDB.cardName.quickshot) { int PENALTY = 0; if (m.Angr <= 3) PENALTY += 5; if (m.Hp >= 4) PENALTY += 45; if (!p.ownHero.allreadyAttacked && p.ownHero.Hp >= 10 && p.ownWeaponDurability >= 1) PENALTY += 20; //if (!target.isHero) PENALTY += 3; if (target.isHero && p.enemyHero.Hp + p.enemyHero.armor <= 6) PENALTY = 0; if (p.ownHero.Hp <= 10) PENALTY -= 20; if (target.isHero && !target.own && target.Hp <= 8) PENALTY -= 45; if (p.owncards.Count == 1) PENALTY = -500; return PENALTY; } if (name == CardDB.cardName.mindcontroltech) { if (p.enemyMinions.Count <= 3) return 5; if (p.enemyMinions.Count >= 4) return -15; } if (name == CardDB.cardName.voljin) { foreach (Minion mnn in p.enemyMinions) { if (mnn.Hp >= 5) return 0; } return 50; } if (name == CardDB.cardName.cabalshadowpriest) { foreach (Minion mnn in p.enemyMinions) { if (mnn.Angr <= 2) return 0; } return 5; } if (name == CardDB.cardName.rendblackhand) { int DRAGONCOUNT = 0; foreach (Handmanager.Handcard hcc in p.owncards) { if ((TAG_RACE)hcc.card.race == TAG_RACE.DRAGON) { DRAGONCOUNT++; } } if (target == null && DRAGONCOUNT >= 0) { return 30; } if (DRAGONCOUNT == 0) return 0; } //////////// /////////////// if (name == CardDB.cardName.equality) // aoe penality { int hpdestroyed = 0; bool haspriority = false; foreach (Minion mini in p.enemyMinions) { hpdestroyed += (mini.Hp - 1); if (priorityTargets.ContainsKey(mini.name)) haspriority = true; } if (haspriority) return 5; if (p.enemyMinions.Count <= 2 || hpdestroyed <= 4) { return 20; } } if (name == CardDB.cardName.bloodsailraider && p.ownWeaponDurability == 0) { //if you have bloodsailraider and no weapon equiped, but own a weapon: foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.type == CardDB.cardtype.WEAPON) return 10; } } if (name == CardDB.cardName.innerfire) { if (m.name == CardDB.cardName.lightspawn) pen = 500; } if (name == CardDB.cardName.huntersmark) { if (target.own && !target.isHero) return 500; // dont use on own minions if (!target.own && !target.isHero && ((target.Hp <= 4 && target.Angr <= 4) || !target.taunt)) // only use on strong minions { pen = 50; if (target.Angr >= 5) pen = 10 - target.Angr; if (target.Hp >= 5) pen = 10 - target.Hp; } if (priorityTargets.ContainsKey(target.name) && target.Hp >=4 && !target.silenced && !target.own && !target.isHero) { pen = -1; } return pen; } if ((name == CardDB.cardName.aldorpeacekeeper || name == CardDB.cardName.humility)) { pen = 0; if (target != null) { if (target.own) pen = 500; // dont use on own minions if (!target.own && target.Angr <= 2) // only use on strong minions { pen = 20; } if (!target.own && target.Angr == 0) pen = 500; foreach(Minion mnn in p.ownMinions) { if (mnn.allreadyAttacked) pen +=5; } } else { pen = 15; } if (p.ownWeaponAttack >= 1 && !p.ownHero.Ready && !p.ownHero.frozen) pen += 15; return pen; } if (name == CardDB.cardName.defiasringleader && p.cardsPlayedThisTurn == 0) { pen = 10; } if (name == CardDB.cardName.bloodknight) { int shilds = 0; foreach (Minion min in p.ownMinions) { if (min.divineshild) { shilds++; } } foreach (Minion min in p.enemyMinions) { if (min.divineshild) { shilds++; } } if (shilds == 0) { pen = 5; } if (shilds >= 1) pen -= shilds; } if (name == CardDB.cardName.direwolfalpha) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (name == CardDB.cardName.abusivesergeant) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (p.turnCounter >= 1 && name == CardDB.cardName.reversingswitch && target.Angr == target.Hp) return 500; return pen; }
public void playCard(CardDB.Card c, int cardpos, int cardEntity, int target, int targetEntity, int choice, int placepos) { // lock at frostnova (click) / frostblitz (no click) this.mana = this.mana - c.getManaCost(this); if (c.Secret) { this.ownSecretsIDList.Add(c.CardID); this.playedmagierinderkirintor = false; } if (c.type == CardDB.cardtype.SPELL) this.playedPreparation = false; if (logging) help.logg("play crd" + c.name + " " + cardEntity + " " + c.getManaCost(this) + " trgt " + target); if (c.type == CardDB.cardtype.MOB) { Action b = this.placeAmobSomewhere(c, cardpos, target, choice,placepos); b.druidchoice = choice; b.owntarget = placepos; b.enemyEntitiy = targetEntity; b.cardEntitiy = cardEntity; this.playactions.Add(b); this.mobsplayedThisTurn++; if (c.name == "magierinderkirintor") this.playedmagierinderkirintor = true; } else { Action a = new Action(); a.cardplay = true; a.card = c; a.cardEntitiy = cardEntity; a.numEnemysBeforePlayed = this.enemyMinions.Count; a.owntarget = 0; if (target >= 0) { a.owntarget = -1; } a.enemytarget = target; a.enemyEntitiy = targetEntity; a.druidchoice = choice; if (target == -1) { //card with no target if (c.type == CardDB.cardtype.WEAPON) { equipWeapon(c); } playCardWithoutTarget(c, choice); } else //before : if(target >=0 && target < 20) { if (c.type == CardDB.cardtype.WEAPON) { equipWeapon(c); } playCardWithTarget(c, target, choice); } this.playactions.Add(a); if (c.type == CardDB.cardtype.SPELL) { this.triggerPlayedASpell(c); } } triggerACardGetPlayed(c); removeCard(cardpos);// remove card this.ueberladung += c.recallValue; this.cardsPlayedThisTurn++; }
private int getSpecialCardComboPenalitys(CardDB.Card card, Minion target, Playfield p, bool lethal, int choice) { CardDB.cardName name = card.name; if (lethal && card.type == CardDB.cardtype.MOB) { if (this.lethalHelpers.ContainsKey(name)) { return 0; } if (this.DamageTargetDatabase.ContainsKey(name) || this.DamageAllDatabase.ContainsKey(name) ) { return 0; } if (this.buffingMinionsDatabase.ContainsKey(name)) { if (name == CardDB.cardName.timberwolf || name == CardDB.cardName.houndmaster) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if ((TAG_RACE)mm.handcard.card.race == TAG_RACE.PET) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.southseacaptain) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if ((TAG_RACE)mm.handcard.card.race == TAG_RACE.PIRATE) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.murlocwarleader || name == CardDB.cardName.grimscaleoracle || name == CardDB.cardName.coldlightseer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if ((TAG_RACE)mm.handcard.card.race == TAG_RACE.MURLOC) beasts++; } if (beasts == 0) return 500; } if (name == CardDB.cardName.warhorsetrainer) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.name == CardDB.cardName.silverhandrecruit) beasts++; } if (beasts == 0) return 500; } } else { if (name == CardDB.cardName.theblackknight) { int beasts = 0; foreach (Minion mm in p.enemyMinions) { if (mm.taunt) beasts++; } if (beasts == 0) return 500; } else { if ((this.HealTargetDatabase.ContainsKey(name) || this.HealHeroDatabase.ContainsKey(name) || this.HealAllDatabase.ContainsKey(name))) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && mm.handcard.card.name == CardDB.cardName.lightwarden) beasts++; } if (beasts == 0) return 500; } else { if (!(name == CardDB.cardName.nightblade || card.Charge || this.silenceDatabase.ContainsKey(name) || ((TAG_RACE)card.race == TAG_RACE.PET && p.ownMinions.Find(x => x.name == CardDB.cardName.tundrarhino) != null) || (p.ownMinions.Find(x => x.name == CardDB.cardName.warsongcommander) != null && card.Attack <= 3) || p.owncards.Find(x => x.card.name == CardDB.cardName.charge) != null)) { return 500; } } } } } //lethal end######################################################## //Encourage shaman to play his ability, before playing damaging spell, for chance of getting +1 dmg from wind totem if (!lethal && p.ownAbilityReady == true && p.ownHeroName == HeroEnum.shaman) { if (this.DamageAllDatabase.ContainsKey(name) || this.DamageAllEnemysDatabase.ContainsKey(name) || this.DamageRandomDatabase.ContainsKey(name) || this.DamageTargetSpecialDatabase.ContainsKey(name) || this.DamageTargetDatabase.ContainsKey(name)) return 10; } if (p.ownMaxMana == 1 ) { if (card.name == CardDB.cardName.lepergnome) return -10; if (card.name == CardDB.cardName.faeriedragon) return -20; if (card.Attack >= 3 && card.Health >= 2) return -20; } if (card.name == CardDB.cardName.unstableportal && p.owncards.Count <= 9) return -15; if (card.name == CardDB.cardName.daggermastery) { if (p.ownWeaponAttack >= 2 || p.ownWeaponDurability >= 2) return 5; } if (card.name == CardDB.cardName.upgrade) { if (p.ownWeaponDurability == 0) { return 16; } } if (card.name == CardDB.cardName.baronrivendare) { foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.deathlord || mnn.name == CardDB.cardName.zombiechow || mnn.name == CardDB.cardName.dancingswords) return 30; } } //rule for coin on early game if (p.ownMaxMana < 3 && card.name == CardDB.cardName.thecoin) { foreach (Handmanager.Handcard hc in p.owncards) { if (hc.manacost <= p.ownMaxMana && hc.card.type == CardDB.cardtype.MOB) return 5; } } if (name == CardDB.cardName.flare && p.enemySecretCount >= 1 && p.playactions.Count == 0) { return -10; } //some effects, which are bad :D int pen = 0; //Play inspire cards first, and then use hero ability if possible if (card.hasInspire) { if (!p.ownAbilityReady) pen += 10; } if (name == CardDB.cardName.houndmaster) { if (target == null) return 50; } if ((card.name == CardDB.cardName.biggamehunter) && (target == null || target.own)) { return 40; } if (name == CardDB.cardName.aldorpeacekeeper && target == null) { pen = 30; } if (name == CardDB.cardName.emergencycoolant && target != null && target.own)//dont freeze own minions { pen = 500; } if (name == CardDB.cardName.shatteredsuncleric && target == null) { pen = 10; } if (name == CardDB.cardName.argentprotector) { if (target == null) { pen = 20; } else { if (!target.own) { return 500; } if (target.divineshild) { pen = 15; } if (!target.Ready && !target.handcard.card.isSpecialMinion) { pen = 10; } if (!target.Ready && !target.handcard.card.isSpecialMinion && target.Angr <= 2 && target.Hp <= 2) { pen = 15; } } } if (name == CardDB.cardName.facelessmanipulator) { if (target == null) { return 50; } if (target.Angr >= 5 || target.handcard.card.cost >= 5 || (target.handcard.card.rarity == 5 || target.handcard.card.cost >= 3)) { return 0; } return 49; } if (name == CardDB.cardName.ancientofwar) { if (p.enemyMinions.Count > 0 && choice == 1) return 200; if (p.enemyMinions.Count == 0 && choice == 2) return 50; } if (name == CardDB.cardName.druidoftheflame) { if (p.enemyMinions.Count > 0 && choice == 1) return 40; if (p.enemyMinions.Count == 0 && choice == 2) return 40; } if (name == CardDB.cardName.gangup && target!=null) { if(target.handcard.card.isToken) return 20; if (target.handcard.card.isSpecialMinion) return -20; } if (name == CardDB.cardName.theblackknight) { if (target == null) { return 50; } foreach (Minion mnn in p.enemyMinions) { if (mnn.taunt && (target.Angr >= 3 || target.Hp >= 3)) return 0; } return 20; } //------------------------------------------------------------------------------------------------------ Minion m = target; if (card.name == CardDB.cardName.reincarnate) { if (m.own) { if (m.handcard.card.deathrattle || m.ancestralspirit >= 1 || m.souloftheforest >= 1 || m.enemyBlessingOfWisdom >= 1) return 0; if (m.handcard.card.Charge && ((m.numAttacksThisTurn == 1 && !m.windfury) || (m.numAttacksThisTurn == 2 && m.windfury))) return 0; if (m.wounded || m.Angr < m.handcard.card.Attack || (m.silenced && PenalityManager.instance.specialMinions.ContainsKey(m.name))) return 0; bool hasOnMinionDiesMinion = false; foreach (Minion mnn in p.ownMinions) { if (mnn.name == CardDB.cardName.scavenginghyena && m.handcard.card.race == TAG_RACE.PET) hasOnMinionDiesMinion = true; if (mnn.name == CardDB.cardName.flesheatingghoul || mnn.name == CardDB.cardName.cultmaster) hasOnMinionDiesMinion = true; } if (hasOnMinionDiesMinion) return 0; return 500; } else { if (m.name == CardDB.cardName.nerubianegg && m.Angr <= 4 && !m.taunt) return 500; if (m.taunt && !m.handcard.card.tank) return 0; if (m.enemyBlessingOfWisdom >= 1) return 0; if (m.Angr > m.handcard.card.Attack || m.Hp > m.handcard.card.Health) return 0; if (m.name == CardDB.cardName.abomination || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.unstableghoul || m.name == CardDB.cardName.dancingswords) return 0; return 500; } } if (card.name == CardDB.cardName.knifejuggler && p.mobsplayedThisTurn > 1 || (p.ownHeroName == HeroEnum.shaman && p.ownAbilityReady == false)) { return 20; } if (card.name == CardDB.cardName.flametonguetotem && p.ownMinions.Count == 0) { return 100; } if (card.name == CardDB.cardName.stampedingkodo) { bool found = false; foreach (Minion mi in p.enemyMinions) { if (mi.Angr <= 2) found = true; } if (!found) return 20; } if (name == CardDB.cardName.windfury) { if (!m.own) return 500; if (m.own && !m.Ready) return 500; } if ((name == CardDB.cardName.wildgrowth || name == CardDB.cardName.nourish) && p.ownMaxMana == 9 && !(p.ownHeroName == HeroEnum.thief && p.cardsPlayedThisTurn == 0)) { return 500; } if (name == CardDB.cardName.ancestralspirit) { if (!target.own && !target.isHero) { if (m.name == CardDB.cardName.deathlord || m.name == CardDB.cardName.zombiechow || m.name == CardDB.cardName.dancingswords) return 0; return 500; } if (target.own && !target.isHero) { if (this.specialMinions.ContainsKey(m.name)) return -5; return 0; } } if (name == CardDB.cardName.sylvanaswindrunner) { if (p.enemyMinions.Count == 0) { return 10; } } if (name == CardDB.cardName.betrayal && !target.own && !target.isHero) { if (m.Angr == 0) return 30; if (p.enemyMinions.Count == 1) return 30; } if (name == CardDB.cardName.bite) { if ((p.ownHero.numAttacksThisTurn == 0 || (p.ownHero.windfury && p.ownHero.numAttacksThisTurn == 1)) && !p.ownHero.frozen) { } else { return 20; } } if (name == CardDB.cardName.deadlypoison) { return p.ownWeaponDurability * 2; } if (name == CardDB.cardName.coldblood) { if (lethal) return 0; return 25; } if (name == CardDB.cardName.bloodmagethalnos) { return 10; } if (name == CardDB.cardName.frostbolt) { if (!target.own && !target.isHero) { if (m.handcard.card.cost <= 2) return 15; } return 15; } if (!lethal && choice == 1 && name == CardDB.cardName.druidoftheclaw) { return 20; } if (name == CardDB.cardName.poweroverwhelming) { if (target.own && !target.isHero && !m.Ready) { return 500; } } if (name == CardDB.cardName.frothingberserker) { if (p.cardsPlayedThisTurn >= 1) pen = 5; } if (name == CardDB.cardName.handofprotection) { if (m.Hp == 1) pen = 15; } if (lethal) { if (name == CardDB.cardName.corruption) { int beasts = 0; foreach (Minion mm in p.ownMinions) { if (mm.Ready && (mm.handcard.card.name == CardDB.cardName.questingadventurer || mm.handcard.card.name == CardDB.cardName.archmageantonidas || mm.handcard.card.name == CardDB.cardName.manaaddict || mm.handcard.card.name == CardDB.cardName.manawyrm || mm.handcard.card.name == CardDB.cardName.wildpyromancer)) beasts++; } if (beasts == 0) return 500; } } if (name == CardDB.cardName.divinespirit) { if (lethal) { if (!target.own && !target.isHero) { if (!m.taunt) { return 500; } else { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && (m.Hp >= 4 || (p.owncards.Find(x => x.card.name == CardDB.cardName.divinespirit) != null && m.Hp >= 2))) { return 0; } return 500; } } } else { if (!target.own && !target.isHero) { // combo for killing with innerfire and biggamehunter if (p.owncards.Find(x => x.card.name == CardDB.cardName.biggamehunter) != null && p.owncards.Find(x => x.card.name == CardDB.cardName.innerfire) != null && m.Hp >= 4) { return 0; } return 500; } } if (target.own && !target.isHero) { if (m.Hp >= 4) { return 0; } return 15; } } if (name == CardDB.cardName.knifejuggler) { if (p.mobsplayedThisTurn >= 1) { return 20; } } if ((name == CardDB.cardName.polymorph || name == CardDB.cardName.hex)) { if (target.own && !target.isHero) { return 500; } if (!target.own && !target.isHero) { if (target.allreadyAttacked) return 30; Minion frog = target; if (this.priorityTargets.ContainsKey(frog.name)) return 0; if (frog.Angr >= 4 && frog.Hp >= 4) return 0; return 30; } } if ((name == CardDB.cardName.defenderofargus || name == CardDB.cardName.sunfuryprotector) && p.ownMinions.Count == 1) { return 40; } if ((name == CardDB.cardName.defenderofargus || name == CardDB.cardName.sunfuryprotector) && p.ownMinions.Count == 0) { return 50; } if (name == CardDB.cardName.unleashthehounds) { if (p.enemyMinions.Count <= 1) { return 20; } } if (name == CardDB.cardName.equality) // aoe penality { if (p.enemyMinions.Count <= 2 || (p.ownMinions.Count - p.enemyMinions.Count >= 1)) { return 20; } } if (name == CardDB.cardName.bloodsailraider && p.ownWeaponDurability == 0) { //if you have bloodsailraider and no weapon equiped, but own a weapon: foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.type == CardDB.cardtype.WEAPON) return 10; } } if (name == CardDB.cardName.innerfire) { if (m.name == CardDB.cardName.lightspawn) pen = 500; } if (name == CardDB.cardName.huntersmark) { if (target.own && !target.isHero) pen = 500; // dont use on own minions if (!target.own && !target.isHero && (target.Hp <= 4) && target.Angr <= 4) // only use on strong minions { pen = 20; } } if ((name == CardDB.cardName.aldorpeacekeeper || name == CardDB.cardName.humility)) { if (target != null) { if (target.own) pen = 500; // dont use on own minions if (!target.own && target.Angr <= 3) // only use on strong minions { pen = 30; } if (m.name == CardDB.cardName.lightspawn) pen = 500; } else { pen = 50; } } if (name == CardDB.cardName.defiasringleader && p.cardsPlayedThisTurn == 0) { pen = 10; } if (name == CardDB.cardName.bloodknight) { int shilds = 0; foreach (Minion min in p.ownMinions) { if (min.divineshild) { shilds++; } } foreach (Minion min in p.enemyMinions) { if (min.divineshild) { shilds++; } } if (shilds == 0) { pen = 10; } } if (name == CardDB.cardName.direwolfalpha) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (name == CardDB.cardName.abusivesergeant) { int ready = 0; foreach (Minion min in p.ownMinions) { if (min.Ready) { ready++; } } if (ready == 0) { pen = 5; } } if (name == CardDB.cardName.madbomber || name == CardDB.cardName.madderbomber) { //penalize for any own minions with health equal to potential attack amount //to lessen risk of losing your own minion int maxAtk = 3; if (name == CardDB.cardName.madderbomber) maxAtk = 5; foreach (Minion mnn in p.ownMinions) { if (mnn.Hp <= maxAtk) { if (mnn.Ready) pen += mnn.Angr * 20; } if (mnn.divineshild) pen += (100 / (p.ownMinions.Count + p.enemyMinions.Count + 2)); } } //Should resolve Davidmann's issue, in attempting to play a mech card, onto field first, if possible if (name == CardDB.cardName.goblinblastmage) //can add other cards that require mechs to be fielded first { bool mechOnField = false; int castCost = card.getManaCost(p, 4); foreach (Minion mnn in p.ownMinions) { if (m.handcard.card.race == TAG_RACE.MECHANICAL) mechOnField = true; if (mechOnField) break; } if (!mechOnField) { foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= (hc.getManaCost(p) + castCost)) return 500;//hc.card.race Should work? Nohero please confirm! else if (hc.card.race == TAG_RACE.MECHANICAL && p.mana >= hc.getManaCost(p)) return 50; } } else return 20; } if (name == CardDB.cardName.draeneitotemcarver) { bool totemOnField = false; if (p.ownHeroName == HeroEnum.shaman && p.ownAbilityReady == true) return 20; foreach (Minion mnn in p.ownMinions) { if (m.handcard.card.race == TAG_RACE.TOTEM) totemOnField = true; if (totemOnField) break; } if (!totemOnField) return 20; } if (returnHandDatabase.ContainsKey(name)) { if (name == CardDB.cardName.vanish) { //dont vanish if we have minons on board wich are ready bool haveready = false; foreach (Minion mins in p.ownMinions) { if (mins.Ready) haveready = true; } if (haveready) pen += 10; } if (target.own && !target.isHero) { Minion mnn = target; if (mnn.Ready) pen += 10; } } return pen; }