Hello, Right now I see that there are a lot of things going on with improving the bot, but at the moment there are very few things being done about card logic. There are a ton of threads about misplays which some are easy to fix and others are more complicated. Unfortunately I am not a coder myself and can not fix these things, but I would like to try to put together a compilation of broken card logics and try to reward the community for fixing them. My proposal is to list here cards that are broken. If you fix one I will include your donation link next to the name and then hopefully as people use them they will take a minute to tip you for your work. It is all on a 100% voluntary basis, but I have seen a lot of very generous people on the Buddy forums and I feel that this could definitely be the extra incentive needed. I will also need your help in finding out which cards are broken. If you need a card fixed and would like it added to this list, please submit the following information: Card name: Description of Misplay: Description of Correct Play: Thank you!
Active Bounties Card Name: CardID: Description of Misplay: Description of Correct Play: Card Name: Enhance-o Mechano CardID: GVG_107 Description of Misplay: Plays this card before other cards on this turn, they do not get the buffs. Description of Correct Play: Summon all other cards first, Do not play with very few cards on board. Card Name: Mechwarper CardID: GVG_006 Description of Misplay: Summons other mech before using mechwarper Description of Correct Play: Always summon mechwarper before playing other mechs. Also, T1 should coin mechwarper -> clockwork gnome for example Card Name: Goblin Auto-Barber CardID: GVG_023 Description of Misplay: His buff gives +1 to the equipped weapon. And the bot is playing him without having a weapon. (Is a rogue card) Description of Correct Play: Only play if haves a weapon. Card Name: Deadly Poison CardID: CS2_074 Description of Misplay: Uses when the durability of the weapon is just one. Description of Correct Play: This should use when the durability of weapon is only +2
Completed Bounties Updated Card Logic Card Name: Location: Coder: Donation Link: Updated Logic: [HIDE] Code: [/HIDE] -------- Card Name: Goblin Blastmage Location: Hearthbuddy\Routines\DefaultRoutine\Silverfish\cards\Sim_GVG_004.cs Coder: Dcrew Donation Link: Updated Logic: [HIDE] Code: using System; using System.Collections.Generic; using System.Text; namespace HREngine.Bots { class Sim_GVG_004 : SimTemplate //Goblin Blastmage (Updated card logic by Dcrew) { public override void getBattlecryEffect(Playfield p, Minion own, Minion target, int choice) { bool myTurn = own.own, hasMech = false; List<Minion> minions = (myTurn ? p.ownMinions : p.enemyMinions); foreach (Minion m in minions) if ((TAG_RACE)m.handcard.card.race == TAG_RACE.MECHANICAL) { hasMech = true; break; } if (!hasMech) return; minions = (myTurn ? p.enemyMinions : p.ownMinions); int times = (myTurn ? p.getSpellDamageDamage(4) : p.getEnemySpellDamageDamage(4)); if ((myTurn && (p.enemyHero.Hp <= times)) || (!myTurn && (p.ownHero.Hp <= times))) { if (myTurn) p.minionGetDamageOrHeal(p.enemyHero, (p.enemyHero.Hp - 1)); else p.minionGetDamageOrHeal(p.ownHero, (p.ownHero.Hp - 1)); } else for (int i = 0; i < times; i++) if (minions.Count >= 1) { Minion enemy = minions[0]; byte minHP = byte.MaxValue; foreach (Minion m in minions) if ((m.name == CardDB.cardName.nerubianegg) && (enemy.Hp >= 2)) continue; else if ((m.Hp >= 2) && (minHP > m.Hp)) { enemy = m; minHP = (byte)m.Hp; } if (minHP < byte.MaxValue) p.minionGetDamageOrHeal(enemy, 1); else p.minionGetDamageOrHeal((myTurn ? p.enemyHero : p.ownHero), 1); } else p.minionGetDamageOrHeal((myTurn ? p.enemyHero : p.ownHero), 1); } } } [/HIDE] -------- Card Name: Tinkertown Technician Location: Hearthbuddy\Routines\DefaultRoutine\Silverfish\cards\Sim_GVG_102.cs Coder: Dcrew Donation Link: Updated Logic: [HIDE] Code: using System; using System.Collections.Generic; using System.Text; namespace HREngine.Bots { class Sim_GVG_102 : SimTemplate //Tinkertown Technician (Updated card logic by Dcrew) { public override void getBattlecryEffect(Playfield p, Minion own, Minion target, int choice) { bool myTurn = own.own, hasMech = false; List<Minion> minions = (myTurn ? p.ownMinions : p.enemyMinions); foreach (Minion m in minions) if ((TAG_RACE)m.handcard.card.race == TAG_RACE.MECHANICAL) { hasMech = true; break; } if (hasMech) { p.minionGetBuffed(own, 1, 1); p.drawACard(CardDB.cardName.armorplating, myTurn, true); } } } } [/HIDE]
Other Code Updates Description: Coder: Donation: Location: Old Code: [HIDE] Code: [/HIDE] New Code: [HIDE] Code: [/HIDE] Description: General Code Optimization Coder: Dcrew Donation: Location: Hearthbuddy\Routines\DefaultRoutine\Silverfish\ai\CardDB.cs Old Code: [HIDE] Code: public cardIDEnum cardIdstringToEnum(string s) { if (s == "CS1h_001") return CardDB.cardIDEnum.CS1h_001; if (s == "CS1_042") return CardDB.cardIDEnum.CS1_042; //... if (s == "PlaceholderCard") return CardDB.cardIDEnum.PlaceholderCard; return CardDB.cardIDEnum.None; } [/HIDE] New Code: [HIDE] Code: public cardIDEnum cardIdstringToEnum(string s) { cardIDEnum type; if (Enum.TryParse<cardIDEnum>(s, out type)) return type; else return cardIDEnum.None; } [/HIDE] Description: General Code Optimization Coder: Dcrew Donation: Location: Hearthbuddy\Routines\DefaultRoutine\Silverfish\ai\CardDB.cs Old Code: [HIDE] Code: public cardName cardNamestringToEnum(string s) { cardName name; if (Enum.TryParse<cardName>(s, out name)) return name; if (s == "unknown") return CardDB.cardName.unknown; if (s == "lesserheal") return CardDB.cardName.lesserheal; //... if (s == "placeholdercard") return CardDB.cardName.placeholdercard; return CardDB.cardName.unknown; } [/HIDE] New Code: [HIDE] Code: public cardName cardNamestringToEnum(string s) { cardName name; if (Enum.TryParse<cardName>(s, out name)) return name; else return CardDB.cardName.unknown; } [/HIDE]
Card name: Goblin Auto-Barber Description of Misplay: His buff gives +1 to the equipped weapon. And the bot is playing him without having a weapon. (Is a rogue card) Description of Correct Play: Only play if haves a weapon. Card name: Deadly Poison Description of Misplay: Uses when the durability of the weapon is just one(1). Description of Correct Play: This should use when the durability of weapon is only +2.
Card name: Loatheb Description of Misplay: Bot did skip the turn without attacking a rogue that had nothing to be afraid of. Description of Correct Play: Attack face ?
Added, ty! This has been happening to a few people from the last update, I do not believe it is a card issue or card specific.