public Minion(Minion m) { this.id = m.id; this.Posix = m.Posix; this.Posiy = m.Posiy; this.Hp = m.Hp; this.maxHp = m.maxHp; this.Angr = m.Angr; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.name = m.name; this.handcard = m.handcard; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.zonepos = m.zonepos; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.numAttacksThisTurn = m.numAttacksThisTurn; this.playedThisTurn = m.playedThisTurn; this.charge = m.charge; this.poisonous = m.poisonous; this.silenced = m.silenced; this.entitiyID = m.entitiyID; this.enchantments= new List<Enchantment>(m.enchantments); this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; }
public Action(actionEnum type, Handmanager.Handcard hc, Minion ownCardEntity, int place, Minion target, int pen, int choice) { this.actionType = type; this.card = hc; this.own = ownCardEntity; this.place = place; this.target = target; this.penalty = pen; this.druidchoice = choice; }
private void getHandcards() { handCards.Clear(); this.anzcards = 0; this.enemyAnzCards = 0; List<HRCard> list = HRCard.GetCards(HRPlayer.GetLocalPlayer(), HRCardZone.HAND); foreach (HRCard item in list) { HREntity entitiy = item.GetEntity(); if (entitiy.GetControllerId() == this.ownPlayerController && entitiy.GetZonePosition() >= 1) // own handcard { CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())); //c.cost = entitiy.GetCost(); //c.entityID = entitiy.GetEntityId(); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = entitiy.GetZonePosition(); hc.entity = entitiy.GetEntityId(); hc.manacost = entitiy.GetCost(); handCards.Add(hc); this.anzcards++; } } Dictionary<int, HREntity> allEntitys = HRGame.GetEntityMap(); foreach (HREntity ent in allEntitys.Values) { if (ent.GetControllerId() != this.ownPlayerController && ent.GetZonePosition() >= 1 && ent.GetZone() == HRCardZone.HAND) // enemy handcard { this.enemyAnzCards++; } } }
public Playfield(Playfield p) { this.nextEntity = p.nextEntity; this.isOwnTurn = p.isOwnTurn; this.turnCounter = p.turnCounter; this.attacked = p.attacked; this.sEnemTurn = p.sEnemTurn; this.ownController = p.ownController; this.ownHeroEntity = p.ownHeroEntity; this.enemyHeroEntity = p.enemyHeroEntity; this.evaluatePenality = p.evaluatePenality; this.ownSecretsIDList.AddRange(p.ownSecretsIDList); this.enemySecretCount = p.enemySecretCount; this.mana = p.mana; this.ownMaxMana = p.ownMaxMana; this.enemyMaxMana = p.enemyMaxMana; addMinionsReal(p.ownMinions, ownMinions); addMinionsReal(p.enemyMinions, enemyMinions); this.ownHero = new Minion(p.ownHero); this.enemyHero = new Minion(p.enemyHero); addCardsReal(p.owncards); this.ownHeroName = p.ownHeroName; this.enemyHeroName = p.enemyHeroName; this.playactions.AddRange(p.playactions); this.complete = false; this.attackFaceHP = p.attackFaceHP; this.owncarddraw = p.owncarddraw; this.enemyWeaponAttack = p.enemyWeaponAttack; this.enemyWeaponDurability = p.enemyWeaponDurability; this.enemyWeaponName = p.enemyWeaponName; this.enemycarddraw = p.enemycarddraw; this.enemyAnzCards = p.enemyAnzCards; this.ownWeaponDurability = p.ownWeaponDurability; this.ownWeaponAttack = p.ownWeaponAttack; this.ownWeaponName = p.ownWeaponName; this.lostDamage = p.lostDamage; this.lostWeaponDamage = p.lostWeaponDamage; this.lostHeal = p.lostHeal; this.ownAbilityReady = p.ownAbilityReady; this.enemyAbilityReady = p.enemyAbilityReady; this.ownHeroAblility = new Handmanager.Handcard(p.ownHeroAblility); this.enemyHeroAblility = new Handmanager.Handcard(p.enemyHeroAblility); this.spellpower = 0; this.mobsplayedThisTurn = p.mobsplayedThisTurn; this.startedWithMobsPlayedThisTurn = p.startedWithMobsPlayedThisTurn; this.optionsPlayedThisTurn = p.optionsPlayedThisTurn; this.cardsPlayedThisTurn = p.cardsPlayedThisTurn; this.ueberladung = p.ueberladung; this.ownDeckSize = p.ownDeckSize; this.enemyDeckSize = p.enemyDeckSize; this.ownHeroFatigue = p.ownHeroFatigue; this.enemyHeroFatigue = p.enemyHeroFatigue; //need the following for manacost-calculation this.ownHeroHpStarted = p.ownHeroHpStarted; this.ownWeaponAttackStarted = p.ownWeaponAttackStarted; this.ownCardsCountStarted = p.ownCardsCountStarted; this.ownMobsCountStarted = p.ownMobsCountStarted; this.startedWithWinzigebeschwoererin = p.startedWithWinzigebeschwoererin; this.playedmagierinderkirintor = p.playedmagierinderkirintor; this.startedWithWinzigebeschwoererin = p.startedWithWinzigebeschwoererin; this.startedWithManagespenst = p.startedWithManagespenst; this.startedWithsoeldnerDerVenture = p.startedWithsoeldnerDerVenture; this.startedWithbeschwoerungsportal = p.startedWithbeschwoerungsportal; this.startedWithnerubarweblord = p.startedWithnerubarweblord; this.nerubarweblord = p.nerubarweblord; this.winzigebeschwoererin = p.winzigebeschwoererin; this.managespenst = p.managespenst; this.soeldnerDerVenture = p.soeldnerDerVenture; this.loatheb = p.loatheb; this.spellpower = p.spellpower; this.enemyspellpower = p.enemyspellpower; this.hasorcanplayKelThuzad = p.hasorcanplayKelThuzad; if (p.hasorcanplayKelThuzad) this.diedMinions = new List<GraveYardItem>(p.diedMinions); //####buffs############################# this.anzOwnRaidleader = p.anzOwnRaidleader; this.anzEnemyRaidleader = p.anzEnemyRaidleader; this.anzOwnStormwindChamps = p.anzOwnStormwindChamps; this.anzEnemyStormwindChamps = p.anzEnemyStormwindChamps; this.anzOwnTundrarhino = p.anzOwnTundrarhino; this.anzEnemyTundrarhino = p.anzEnemyTundrarhino; this.anzOwnTimberWolfs = p.anzOwnTimberWolfs; this.anzEnemyTimberWolfs = p.anzEnemyTimberWolfs; this.anzMurlocWarleader = p.anzMurlocWarleader; this.anzGrimscaleOracle = p.anzGrimscaleOracle; this.anzOwnAuchenaiSoulpriest = p.anzOwnAuchenaiSoulpriest; this.anzEnemyAuchenaiSoulpriest = p.anzEnemyAuchenaiSoulpriest; this.anzOwnsorcerersapprentice = p.anzOwnsorcerersapprentice; this.anzOwnsorcerersapprenticeStarted = p.anzOwnsorcerersapprenticeStarted; this.anzEnemysorcerersapprentice = p.anzEnemysorcerersapprentice; this.anzEnemysorcerersapprenticeStarted = p.anzEnemysorcerersapprenticeStarted; this.anzOwnSouthseacaptain = p.anzOwnSouthseacaptain; this.anzEnemySouthseacaptain = p.anzEnemySouthseacaptain; this.feugenDead = p.feugenDead; this.stalaggDead = p.stalaggDead; this.weHavePlayedMillhouseManastorm = p.weHavePlayedMillhouseManastorm; this.doublepriest = p.doublepriest; this.enemydoublepriest = p.enemydoublepriest; this.ownBaronRivendare = p.ownBaronRivendare; this.enemyBaronRivendare = p.enemyBaronRivendare; //######################################### }
public void setMinionTominion(Minion m) { this.id = m.id; this.Posix = m.Posix; this.Posiy = m.Posiy; this.Hp = m.Hp; this.maxHp = m.maxHp; this.Angr = m.Angr; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.name = m.name; this.handcard = m.handcard; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.zonepos = m.zonepos; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.numAttacksThisTurn = m.numAttacksThisTurn; this.playedThisTurn = m.playedThisTurn; this.charge = m.charge; this.poisonous = m.poisonous; this.silenced = m.silenced; this.entitiyID = m.entitiyID; this.enchantments.Clear(); this.enchantments.AddRange(m.enchantments); }
public BoardTester(string data = "") { this.boardToSimulate = -1; string og = ""; string eg = ""; string omd = ""; string emd = ""; int ets = 20; int ents = 20; int ntssw = 10; int ntssd = 6; int ntssm = 50; int alpha = 50; bool dosecrets = false; Settings.Instance.simulatePlacement = false; Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); string[] lines = new string[0] { }; if (data == "") { this.datareaded = false; try { string path = Settings.Instance.path; lines = System.IO.File.ReadAllLines(path + "test.txt"); this.datareaded = true; } catch { this.datareaded = false; Helpfunctions.Instance.logg("cant find test.txt"); Helpfunctions.Instance.ErrorLog("cant find test.txt"); return; } } else { this.datareaded = true; lines = data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } CardDB.Card heroability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); CardDB.Card enemyability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); bool abilityReady = false; int readstate = 0; int counter = 0; Minion tempminion = new Minion(); int j = 0; foreach (string sss in lines) { string s = sss + " "; Helpfunctions.Instance.logg(s); if (s.StartsWith("ailoop")) { break; } if (s.StartsWith("####")) { if (s.EndsWith("test ")) { this.boardToSimulate = 1; } continue; } if (string.IsNullOrWhiteSpace(s)) { continue; } if (s.StartsWith("activeChoice: ")) { string choices = s.Replace("activeChoice: ", ""); foreach (string choi in choices.Split(' ')) { if (choi == "" || choi == " ") continue; //Console.WriteLine("choice "+choi); choiceCards.Add(CardDB.Instance.cardIdstringToEnum(choi)); } continue; } if (s.StartsWith("ownhero:")) { readstate = 1; counter = 1; continue; } if (s.StartsWith("enemyhero:")) { readstate = 2; counter = 1; continue; } if (s.StartsWith("OwnMinions:")) { readstate = 3; counter = 1; continue; } if (s.StartsWith("EnemyMinions:")) { readstate = 4; counter = 1; continue; } if (s.StartsWith("Own Handcards:")) { readstate = 5; counter = 1; continue; } if (s.StartsWith("player:")) { readstate = 42; counter = 1; continue; } if (s.StartsWith("start calculations, current time: ")) { Ai.Instance.currentCalculatedBoard = s.Split(' ')[4].Split(' ')[0]; this.evalFunction = s.Split(' ')[6].Split(' ')[0]; this.maxwide = Convert.ToInt32(s.Split(' ')[7].Split(' ')[0]); //following params are optional this.twoturnsim = 256; if (s.Contains("twoturnsim ")) this.twoturnsim = Convert.ToInt32(s.Split(new string[] { "twoturnsim " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); if (s.Contains(" face ")) { string facehp = s.Split(new string[] { "face " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]; ComboBreaker.Instance.attackFaceHP = Convert.ToInt32(facehp); Settings.Instance.enfacehp = ComboBreaker.Instance.attackFaceHP; } this.playarround = false; if (s.Contains("playaround ")) { string probs = s.Split(new string[] { "playaround " }, StringSplitOptions.RemoveEmptyEntries)[1]; this.playarround = true; this.pprob1 = Convert.ToInt32(probs.Split(' ')[0]); this.pprob2 = Convert.ToInt32(probs.Split(' ')[1]); } if (s.Contains(" ets ")) { string eturnsim = s.Split(new string[] { " ets " }, StringSplitOptions.RemoveEmptyEntries)[1]; ets = Convert.ToInt32(eturnsim.Split(' ')[0]); } if (s.Contains(" ets2 ")) { string eturnsim2 = s.Split(new string[] { " ets2 " }, StringSplitOptions.RemoveEmptyEntries)[1]; int ets2 = Convert.ToInt32(eturnsim2.Split(' ')[0]); Settings.Instance.enemyTurnMaxWideSecondTime = ets2; } if (s.Contains(" ents ")) { this.simEnemy2Turn = true; string eturnsim = s.Split(new string[] { " ents " }, StringSplitOptions.RemoveEmptyEntries)[1]; ents = Convert.ToInt32(eturnsim.Split(' ')[0]); } if (s.Contains(" ntss ")) { string probs = s.Split(new string[] { " ntss " }, StringSplitOptions.RemoveEmptyEntries)[1]; ntssd = Convert.ToInt32(probs.Split(' ')[0]); ntssw = Convert.ToInt32(probs.Split(' ')[1]); ntssm = Convert.ToInt32(probs.Split(' ')[2]); } if (s.Contains(" secret")) dosecrets = true; if (s.Contains(" weight ")) { string alphaval = s.Split(new string[] { " weight " }, StringSplitOptions.RemoveEmptyEntries)[1]; alpha = Convert.ToInt32(alphaval.Split(' ')[0]); } if (s.Contains(" plcmnt")) { Settings.Instance.simulatePlacement = true; } continue; } if (s.StartsWith("enemy secretsCount:")) { this.enemySecretAmount = Convert.ToInt32(s.Split(' ')[2]); this.enemySecrets.Clear(); if (this.enemySecretAmount >= 1 && s.Contains(";")) { string secretstuff = s.Split(';')[1]; foreach (string sec in secretstuff.Split(',')) { if (sec == "" || sec == String.Empty || sec == " ") continue; this.enemySecrets.Add(new SecretItem(sec)); } } continue; } if (s.StartsWith("mana ")) { string ss = s.Replace("mana ", ""); mana = Convert.ToInt32(ss.Split('/')[0]); maxmana = Convert.ToInt32(ss.Split('/')[1]); } if (s.StartsWith("emana ")) { string ss = s.Replace("emana ", ""); enemmaxman = Convert.ToInt32(ss); } if (s.StartsWith("Enemy cards: ")) { enemyNumberHand = Convert.ToInt32(s.Split(' ')[2]); continue; } if (s.StartsWith("GraveYard:")) { if (s.Contains("fgn")) this.feugendead = true; if (s.Contains("stlgg")) this.stalaggdead = true; continue; } if (s.StartsWith("osecrets: ")) { string secs = s.Replace("osecrets: ", ""); foreach (string sec in secs.Split(' ')) { if (sec == "" || sec == string.Empty) continue; this.ownsecretlist.Add(sec); } continue; } if (s.StartsWith("cthunbonus: ")) { String[] ss = s.Split(' '); anzOgOwnCThunAngrBonus = Convert.ToInt32(ss[1]); anzOgOwnCThunHpBonus = Convert.ToInt32(ss[2]); anzOgOwnCThunTaunt = Convert.ToInt32(ss[3]); } if (s.StartsWith("ownDiedMinions: ")) { omd = s; continue; } if (s.StartsWith("enemyDiedMinions: ")) { emd = s; continue; } if (s.StartsWith("probs: ")) { int i = 0; foreach (string p in s.Split(' ')) { if (p.StartsWith("probs:") || p == "" || p == null) continue; int num = Convert.ToInt32(p); CardDB.cardIDEnum c = CardDB.cardIDEnum.None; if (i == 0) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_032; } if (this.enemyheroname == "warrior") { c = CardDB.cardIDEnum.EX1_400; } if (this.enemyheroname == "hunter") { c = CardDB.cardIDEnum.EX1_538; } if (this.enemyheroname == "priest") { c = CardDB.cardIDEnum.CS1_112; } if (this.enemyheroname == "shaman") { c = CardDB.cardIDEnum.EX1_259; } if (this.enemyheroname == "pala") { c = CardDB.cardIDEnum.CS2_093; } if (this.enemyheroname == "druid") { c = CardDB.cardIDEnum.CS2_012; } } if (i == 1) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_028; } } if (num == 1) { enemycards.Add(c); } if (num == 0) { enemycards.Add(c); enemycards.Add(c); } i++; } Probabilitymaker.Instance.setEnemyCards(enemycards); continue; } if (s.StartsWith("og:")) { og = s; continue; } if (s.StartsWith("eg:")) { eg = s; continue; } if (readstate == 42 && counter == 1) // player { this.overdrive = Convert.ToInt32(s.Split(' ')[2]); this.numMinionsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[0]); this.cardsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[1]); this.ownPlayer = Convert.ToInt32(s.Split(' ')[3]); this.numberMinionsDiedThisturn = 0; this.owncurrentRecall = 0; this.enemyRecall = 0; try { //for old log files a try and catch :D this.numberMinionsDiedThisturn = Convert.ToInt32(s.Split(' ')[4]); this.owncurrentRecall = Convert.ToInt32(s.Split(' ')[5]); this.enemyRecall = Convert.ToInt32(s.Split(' ')[6]); } catch { } try { //for old log files a try and catch :D this.heropowerUsesThisTurn = Convert.ToInt32(s.Split(' ')[7]); this.locknload = Convert.ToInt32(s.Split(' ')[8]); } catch { } } if (readstate == 42 && counter == 2) // player enchantmens { this.ownDragonConsort = Convert.ToInt32(s.Split(' ')[0]); this.enemyDragonConsort = Convert.ToInt32(s.Split(' ')[1]); this.ownLoathebs = Convert.ToInt32(s.Split(' ')[2]); this.enemyLoathebs = Convert.ToInt32(s.Split(' ')[3]); this.ownMillhouse = Convert.ToInt32(s.Split(' ')[4]); this.enemyMillhouse = Convert.ToInt32(s.Split(' ')[5]); this.ownKirintor = Convert.ToInt32(s.Split(' ')[6]); this.ownPrep = Convert.ToInt32(s.Split(' ')[7]); try { this.ownSab = Convert.ToInt32(s.Split(' ')[8]); this.enemySab = Convert.ToInt32(s.Split(' ')[9]); this.ownFenci = Convert.ToInt32(s.Split(' ')[10]); } catch { } try { this.enemyCursedCards = Convert.ToInt32(s.Split(' ')[11]); } catch { } } if (readstate == 1 && counter == 1) // class + hp + defence + immunewhile attacking + immune { ownheroname = s.Split(' ')[0]; ownherohp = Convert.ToInt32(s.Split(' ')[1]); ownheromaxhp = Convert.ToInt32(s.Split(' ')[2]); ownherodefence = Convert.ToInt32(s.Split(' ')[3]); this.ownHeroimmunewhileattacking = (s.Split(' ')[4] == "True") ? true : false; this.heroImmune = (s.Split(' ')[5] == "True") ? true : false; ownHEntity = Convert.ToInt32(s.Split(' ')[6]); ownheroready = (s.Split(' ')[7] == "True") ? true : false; ownheroattacksThisRound = Convert.ToInt32(s.Split(' ')[8]); ownHeroFrozen = (s.Split(' ')[9] == "True") ? true : false; ownHeroAttack = Convert.ToInt32(s.Split(' ')[10]); ownHeroTempAttack = Convert.ToInt32(s.Split(' ')[11]); } if (readstate == 1 && counter == 2) // own hero weapon { ownHeroWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.ownHeroWeaponDurability = Convert.ToInt32(s.Split(' ')[2]); if (ownHeroWeaponAttack == 0) { ownHeroWeapon = ""; //:D } else { ownHeroWeapon = s.Split(' ')[3]; } } if (readstate == 1 && counter == 3) // ability + abilityready { abilityReady = (s.Split(' ')[1] == "True"); heroability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); try { //for old log files a try and catch :D this.ownHeropowerUsesThisGame = Convert.ToInt32(s.Split(' ')[3]); } catch { } } if (readstate == 1 && counter >= 5) // secrets { if (!(s.StartsWith("enemyhero:") || s.StartsWith("cthunbonus:"))) { ownsecretlist.Add(s.Replace(" ", "")); } } if (readstate == 2 && counter == 1) // class + hp + defence + frozen + immune { enemyheroname = s.Split(' ')[0]; enemyherohp = Convert.ToInt32(s.Split(' ')[1]); enemyheromaxhp = Convert.ToInt32(s.Split(' ')[2]); enemyherodefence = Convert.ToInt32(s.Split(' ')[3]); enemyFrozen = (s.Split(' ')[4] == "True") ? true : false; enemyHeroImmune = (s.Split(' ')[5] == "True") ? true : false; enemyHEntity = Convert.ToInt32(s.Split(' ')[6]); } if (readstate == 2 && counter == 2) // wepon + stuff { this.enemyWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.enemyWeaponDur = Convert.ToInt32(s.Split(' ')[2]); if (enemyWeaponDur == 0) { this.enemyWeapon = ""; } else { this.enemyWeapon = s.Split(' ')[3]; } } if (readstate == 2 && counter == 3) // ability { enemyability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); try { //for old log files a try and catch :D this.enemyHeropowerUsesThisGame = Convert.ToInt32(s.Split(' ')[3]); } catch { } } if (readstate == 2 && counter == 4) // fatigue { this.ownDecksize = Convert.ToInt32(s.Split(' ')[1]); this.enemyDecksize = Convert.ToInt32(s.Split(' ')[3]); this.ownFatigue = Convert.ToInt32(s.Split(' ')[2]); this.enemyFatigue = Convert.ToInt32(s.Split(' ')[4]); } if (readstate == 3) // minion + enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True"; int natt = 0; if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); // optional params (bools) bool ex = s.Contains(" ex"); bool taunt = s.Contains(" tnt"); bool frzn = s.Contains(" frz"); bool silenced = s.Contains(" silenced"); bool divshield = s.Contains(" divshield"); bool ptt = s.Contains(" ptt"); bool wndfry = s.Contains(" wndfr"); bool stl = s.Contains(" stlth"); bool pois = s.Contains(" poi"); bool immn = s.Contains(" imm"); bool cncdl = s.Contains(" cncdl"); bool destroyOnOwnTurnStart = s.Contains(" dstrOwnTrnStrt"); bool destroyOnOwnTurnEnd = s.Contains(" dstrOwnTrnnd"); bool destroyOnEnemyTurnStart = s.Contains(" dstrEnmTrnStrt"); bool destroyOnEnemyTurnEnd = s.Contains(" dstrEnmTrnnd"); bool shadowmadnessed = s.Contains(" shdwmdnssd"); bool cntlower = s.Contains(" cantLowerHpBelowOne"); bool cnttrgt = s.Contains(" canttarget"); //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownPwordGlory = 0;//adjadmg if (s.Contains(" ownPWG(")) ownPwordGlory = Convert.ToInt32(s.Split(new string[] { " ownPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyPwordGlory = 0;//adjadmg if (s.Contains(" enemyPWG(")) enemyPwordGlory = Convert.ToInt32(s.Split(new string[] { " enemyPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int explorersHat = 0; if (s.Contains(" explht(")) explorersHat = Convert.ToInt32(s.Split(new string[] { " explht(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int infest = 0;//adjadmg if (s.Contains(" infest(")) infest = Convert.ToInt32(s.Split(new string[] { " infest(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, true); tempminion.own = true; tempminion.entityID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.cantBeTargetedBySpellsOrHeroPowers = cnttrgt; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.ownPowerWordGlory = ownPwordGlory; tempminion.enemyPowerWordGlory = enemyPwordGlory; tempminion.souloftheforest = souloftheforest; tempminion.explorershat = explorersHat; tempminion.infest = infest; tempminion.canAttackNormal = false; if (ready == true) tempminion.canAttackNormal = true; if (maxhp > hp) tempminion.wounded = true; tempminion.updateReadyness(); this.ownminions.Add(tempminion); } } if (readstate == 4) // minion or enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; //if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); // optional params (bools) bool ex = s.Contains(" ex"); bool taunt = s.Contains(" tnt"); bool frzn = s.Contains(" frz"); bool silenced = s.Contains(" silenced"); bool divshield = s.Contains(" divshield"); bool ptt = s.Contains(" ptt"); bool wndfry = s.Contains(" wndfr"); bool stl = s.Contains(" stlth"); bool pois = s.Contains(" poi"); bool immn = s.Contains(" imm"); bool cncdl = s.Contains(" cncdl"); bool destroyOnOwnTurnStart = s.Contains(" dstrOwnTrnStrt"); bool destroyOnOwnTurnEnd = s.Contains(" dstrOwnTrnnd"); bool destroyOnEnemyTurnStart = s.Contains(" dstrEnmTrnStrt"); bool destroyOnEnemyTurnEnd = s.Contains(" dstrEnmTrnnd"); bool shadowmadnessed = s.Contains(" shdwmdnssd"); bool cntlower = s.Contains(" cantLowerHpBelowOne"); bool cnttrgt = s.Contains(" canttarget"); //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownPwordGlory = 0;//adjadmg if (s.Contains(" ownPWG(")) ownPwordGlory = Convert.ToInt32(s.Split(new string[] { " ownPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyPwordGlory = 0;//adjadmg if (s.Contains(" enemyPWG(")) enemyPwordGlory = Convert.ToInt32(s.Split(new string[] { " enemyPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int explorersHat = 0; if (s.Contains(" explht(")) explorersHat = Convert.ToInt32(s.Split(new string[] { " explht(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int infest = 0;//adjadmg if (s.Contains(" infest(")) infest = Convert.ToInt32(s.Split(new string[] { " infest(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, false); tempminion.own = false; tempminion.entityID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.cantBeTargetedBySpellsOrHeroPowers = cnttrgt; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.ownPowerWordGlory = ownPwordGlory; tempminion.enemyPowerWordGlory = enemyPwordGlory; tempminion.souloftheforest = souloftheforest; tempminion.explorershat = explorersHat; tempminion.infest = infest; if (maxhp > hp) tempminion.wounded = true; tempminion.updateReadyness(); this.enemyminions.Add(tempminion); } } if (readstate == 5) // minion or enchantment { Handmanager.Handcard card = new Handmanager.Handcard(); string minionname = s.Split(' ')[2]; string minionid = s.Split(' ')[6]; int pos = Convert.ToInt32(s.Split(' ')[1]); int mana = Convert.ToInt32(s.Split(' ')[3]); card.card = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid)); card.entity = Convert.ToInt32(s.Split(' ')[5]); card.addattack = 0; if (s.Split(' ').Length >= 8 && s.Split(' ')[7] != "") { card.addattack = Convert.ToInt32(s.Split(' ')[7]); } card.addHp = 0; try { card.addHp = Convert.ToInt32(s.Split(' ')[8]); } catch { } card.manacost = mana; card.position = pos; handcards.Add(card); } counter++; j++; } Helpfunctions.Instance.logg("rdy"); Hrtprozis.Instance.setOwnPlayer(ownPlayer); Handmanager.Instance.setOwnPlayer(ownPlayer); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + ownheroattacksThisRound; foreach (Minion m in this.ownminions) { this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.maxmana, this.mana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.overdrive, ownHEntity, enemyHEntity, this.numberMinionsDiedThisturn, this.owncurrentRecall, this.enemyRecall, this.heropowerUsesThisTurn, this.locknload); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrep, this.ownSab, this.enemySab, this.ownFenci, this.enemyCursedCards); Hrtprozis.Instance.updateCThunInfo(this.anzOgOwnCThunAngrBonus, this.anzOgOwnCThunHpBonus, this.anzOgOwnCThunTaunt); Hrtprozis.Instance.updateSecretStuff(this.ownsecretlist, enemySecretAmount); bool herowindfury = false; if (this.ownHeroWeapon == "doomhammer") herowindfury = true; //create heros: this.ownHero = new Minion(); this.enemyHero = new Minion(); this.ownHero.isHero = true; this.enemyHero.isHero = true; this.ownHero.own = true; this.enemyHero.own = false; this.ownHero.maxHp = this.ownheromaxhp; this.enemyHero.maxHp = this.enemyheromaxhp; this.ownHero.entityID = ownHEntity; this.enemyHero.entityID = enemyHEntity; this.ownHero.Angr = ownHeroAttack; this.ownHero.tempAttack = ownHeroTempAttack;//fix this.ownHero.Hp = ownherohp; this.ownHero.armor = ownherodefence; this.ownHero.frozen = ownHeroFrozen; this.ownHero.immuneWhileAttacking = ownHeroimmunewhileattacking; this.ownHero.immune = heroImmune; this.ownHero.numAttacksThisTurn = ownheroattacksThisRound; this.ownHero.windfury = herowindfury; this.enemyHero.Angr = enemyWeaponAttack; this.enemyHero.Hp = enemyherohp; this.enemyHero.frozen = enemyFrozen; this.enemyHero.armor = enemyherodefence; this.enemyHero.immune = enemyHeroImmune; this.enemyHero.Ready = false; this.ownHero.updateReadyness(); //set Simulation stuff Ai.Instance.botBase = new BehaviorControl(); if (this.evalFunction == "rush") Ai.Instance.botBase = new BehaviorRush(); if (this.evalFunction == "face") Ai.Instance.botBase = new BehaviorFace(); if (this.evalFunction == "mana") Ai.Instance.botBase = new BehaviorMana(); Ai.Instance.setMaxWide(this.maxwide); Ai.Instance.setTwoTurnSimulation(false, this.twoturnsim); Settings.Instance.simEnemySecondTurn = this.simEnemy2Turn; //Ai.Instance.nextTurnSimulator.updateParams(); Settings.Instance.playarround = this.playarround; Settings.Instance.playaroundprob = this.pprob1; Settings.Instance.playaroundprob2 = this.pprob2; Ai.Instance.setPlayAround(); //save data Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.ownHeroWeaponAttack, this.ownHeroWeaponDurability, this.ownheroname, heroability, abilityReady, this.ownHero, this.ownHeropowerUsesThisGame); Hrtprozis.Instance.updateEnemyHero(this.enemyWeapon, this.enemyWeaponAttack, this.enemyWeaponDur, this.enemyheroname, enemmaxman, enemyability, this.enemyHero, this.enemyHeropowerUsesThisGame); Hrtprozis.Instance.updateMinions(this.ownminions, this.enemyminions); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownFatigue, this.enemyDecksize, this.enemyFatigue); Handmanager.Instance.setHandcards(this.handcards, this.handcards.Count, enemyNumberHand, this.choiceCards); Probabilitymaker.Instance.setEnemySecretData(enemySecrets); Probabilitymaker.Instance.setTurnGraveYard(this.turnGraveYard); Probabilitymaker.Instance.stalaggDead = this.stalaggdead; Probabilitymaker.Instance.feugenDead = this.feugendead; if (og != "") Probabilitymaker.Instance.readGraveyards(og, eg); if (omd != "") Probabilitymaker.Instance.readTurnGraveYard(omd, emd); //Ai.Instance.enemyTurnSim.maxwide = ets; //Ai.Instance.enemySecondTurnSim.maxwide = ents; Settings.Instance.enemyTurnMaxWide = ets; Settings.Instance.enemySecondTurnMaxWide = ents; Settings.Instance.nextTurnDeep = ntssd; Settings.Instance.nextTurnMaxWide = ntssw; Settings.Instance.nextTurnTotalBoards = ntssm; //Ai.Instance.nextTurnSimulator.updateParams(ntssd, ntssw, ntssm); Settings.Instance.useSecretsPlayArround = dosecrets; Settings.Instance.setWeights(alpha); }
public Minion() { this.handcard = new Handmanager.Handcard(); }
public Minion(HRSim.Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.isHero = m.isHero; this.own = m.own; this.name = (CardDB.cardName)Enum.Parse(typeof(CardDB.cardName), m.name.ToString()); this.cardClass = (TAG_CLASS)Enum.Parse(typeof(TAG_CLASS), m.cardClass.ToString()); this.handcard = new Handmanager.Handcard(m.handcard);//new? this.entitiyID = m.entitiyID; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.playedThisTurn = m.playedThisTurn; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; //--------------------------------------- this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.concedal = m.concedal; this.souloftheforest = m.souloftheforest; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.charge = m.charge; this.poisonous = m.poisonous; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; // Drew: fixed this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; }
public Minion(Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.isHero = m.isHero; this.own = m.own; this.name = m.name; this.handcard = m.handcard;//new? this.entitiyID = m.entitiyID; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.playedThisTurn = m.playedThisTurn; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; //--------------------------------------- this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.concedal = m.concedal; this.souloftheforest = m.souloftheforest; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.charge = m.charge; this.poisonous = m.poisonous; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; }
public override void inhand(Playfield p, Handmanager.Handcard hc, bool wasOwnCard, Handmanager.Handcard triggerhc) { int n = p.ueberladung; int i = 0; if (p.ueberladung - n < 0) { i += p.ueberladung; } else { i += (p.ueberladung - n); } if (i >= 4) { p.drawACard(CardDB.cardName.sapphirespellstone, wasOwnCard, true); p.removeCard(triggerhc); } }
public void setMinionTominion(Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.gotDmgRaw = m.gotDmgRaw; this.isHero = m.isHero; this.own = m.own; this.canAttackNormal = m.canAttackNormal; this.name = m.name; this.handcard = m.handcard;//new? //this.entitiyID = m.entitiyID; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.playedThisTurn = m.playedThisTurn; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; //--------------------------------------- this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; this.concedal = m.concedal; this.souloftheforest = m.souloftheforest; this.explorersHat = m.explorersHat; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.ownPowerWordGlory = m.ownPowerWordGlory; this.enemyPowerWordGlory = m.enemyPowerWordGlory; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.charge = m.charge; this.poisonous = m.poisonous; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; if (m.deathrattles != null) { this.deathrattles = new List <int>(); foreach (int dr in m.deathrattles) { this.deathrattles.Add(dr); } } }
public Minion() { enchantments = new List <Enchantment>(); this.handcard = new Handmanager.Handcard(); }
public bool isCardCreated(Handmanager.Handcard handcard) { return(false); }
public override void onCardIsGoingToBePlayed(Playfield p, Handmanager.Handcard hc, bool wasOwnCard, Handmanager.Handcard triggerhc) { triggerhc.manacost = 8 - p.ownMinions.Count; }
private bool doAllChoices(CardDB.Card card, Playfield p, Handmanager.Handcard hc) { bool havedonesomething = false; for (int i = 1; i < 3; i++) { CardDB.Card c = card; if (card.name == "sternenregen") { if (i == 1) { c = CardDB.Instance.getCardDataFromID("NEW1_007b"); } if (i == 2) { c = CardDB.Instance.getCardDataFromID("NEW1_007a"); } } if (card.name == "urtumderlehren") { if (i == 1) { c = CardDB.Instance.getCardDataFromID("NEW1_008a"); } if (i == 2) { c = CardDB.Instance.getCardDataFromID("NEW1_008b"); } } if (c.canplayCard(p)) { havedonesomething = true; List <targett> trgts = c.getTargetsForCard(p); if (trgts.Count == 0) { Playfield pf = new Playfield(p); pf.playCard(card, hc.position - 1, hc.entity, -1, -1, i); this.posmoves.Add(pf); } else { foreach (targett trgt in trgts) { Playfield pf = new Playfield(p); pf.playCard(card, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i); this.posmoves.Add(pf); } } } } return(havedonesomething); }
public Action(Action a) { this.actionType = a.actionType; this.card = a.card; this.place = a.place; this.own = a.own; this.target = a.target; this.druidchoice = a.druidchoice; this.penalty = a.penalty; this.tracking = a.tracking; }
public void setMinionTominion(Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.gotDmgRaw = m.gotDmgRaw; this.GotDmgValue = m.GotDmgValue; this.gotInspire = m.gotInspire; this.isHero = m.isHero; this.own = m.own; this.canAttackNormal = m.canAttackNormal; this.name = m.name; this.cardClass = m.cardClass; this.synergy = m.synergy; this.handcard = m.handcard;//new? this.deathrattle2 = m.deathrattle2; //this.entitiyID = m.entitiyID; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.playedThisTurn = m.playedThisTurn; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; //--------------------------------------- this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.concedal = m.concedal; this.souloftheforest = m.souloftheforest; this.explorershat = m.explorershat; this.infest = m.infest; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.ownPowerWordGlory = m.ownPowerWordGlory; this.enemyPowerWordGlory = m.enemyPowerWordGlory; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.charge = m.charge; this.poisonous = m.poisonous; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; if (m.deathrattles != null) { this.deathrattles = new List<int>(); foreach (int dr in m.deathrattles) { this.deathrattles.Add(dr); } } }
public Action(string s, Playfield p) { if (s.StartsWith("play ")) { this.actionType = actionEnum.playcard; int cardEnt = Convert.ToInt32(s.Split(new string[] { "id " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int targetEnt = -1; if (s.Contains("target ")) { targetEnt = Convert.ToInt32(s.Split(new string[] { "target " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } int place = 0; if (s.Contains("pos ")) { place = Convert.ToInt32(s.Split(new string[] { "pos " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } int choice = 0; if (s.Contains("choice ")) { choice = Convert.ToInt32(s.Split(new string[] { "choice " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } this.own = null; this.card = new Handmanager.Handcard { entity = cardEnt }; if (targetEnt >= 0) { Minion m = new Minion { entityID = targetEnt }; this.target = m; } else { this.target = null; } this.place = place; this.druidchoice = choice; } if (s.StartsWith("attack ")) { this.actionType = actionEnum.attackWithMinion; int ownEnt = Convert.ToInt32(s.Split(' ')[1].Split(' ')[0]); int targetEnt = Convert.ToInt32(s.Split(' ')[3].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entityID = targetEnt }; this.target = m; Minion o = new Minion { entityID = ownEnt }; this.own = o; } if (s.StartsWith("heroattack ")) { this.actionType = actionEnum.attackWithHero; int targetEnt = Convert.ToInt32(s.Split(' ')[1].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entityID = targetEnt }; this.target = m; this.own = p.ownHero; } if (s.StartsWith("useability on target ")) { this.actionType = actionEnum.useHeroPower; int targetEnt = Convert.ToInt32(s.Split(' ')[3].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entityID = targetEnt }; this.target = m; this.own = null; } if (s == "useability") { this.actionType = actionEnum.useHeroPower; this.place = 0; this.druidchoice = 0; this.card = null; this.own = null; this.target = null; } if (s.Contains(" discover ")) { string dc = s.Split(new string[] { " discover " }, StringSplitOptions.RemoveEmptyEntries)[1]; this.tracking = Convert.ToInt32(dc); } }
public BoardTester(string data = "") { Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); string[] lines = new string[0] { }; if (data == "") { try { string path = Settings.Instance.path; lines = System.IO.File.ReadAllLines(path + "test.txt"); } catch { Helpfunctions.Instance.logg("cant find test.txt"); Helpfunctions.Instance.ErrorLog("cant find test.txt"); return; } } else { lines = data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } CardDB.Card heroability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); CardDB.Card enemyability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); bool abilityReady = false; int readstate = 0; int counter = 0; Minion tempminion = new Minion(); int j = 0; foreach (string sss in lines) { string s = sss + " "; Helpfunctions.Instance.logg(s); if (s.StartsWith("ailoop")) { break; } if (s.StartsWith("####")) { continue; } if (s.StartsWith("start calculations, current time: ")) { Ai.Instance.currentCalculatedBoard = s.Split(' ')[4].Split(' ')[0]; this.evalFunction = s.Split(' ')[6].Split(' ')[0]; this.maxwide = Convert.ToInt32(s.Split(' ')[7].Split(' ')[0]); //following params are optional this.twoturnsim = 256; if (s.Contains("twoturnsim ")) this.twoturnsim = Convert.ToInt32(s.Split(new string[] { "twoturnsim " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); this.playarround = false; if (s.Contains("playaround ")) { string probs = s.Split(new string[] { "playaround " }, StringSplitOptions.RemoveEmptyEntries)[1]; this.playarround = true; this.pprob1 = Convert.ToInt32(probs.Split(' ')[0]); this.pprob2 = Convert.ToInt32(probs.Split(' ')[1]); } if (s.Contains("simEnemy2Turn")) this.simEnemy2Turn = true; continue; } if (s.StartsWith("enemy secretsCount:")) { this.enemySecrets = Convert.ToInt32(s.Split(' ')[2]); continue; } if (s.StartsWith("mana ")) { string ss = s.Replace("mana ", ""); mana = Convert.ToInt32(ss.Split('/')[0]); maxmana = Convert.ToInt32(ss.Split('/')[1]); } if (s.StartsWith("emana ")) { string ss = s.Replace("emana ", ""); enemmaxman = Convert.ToInt32(ss); } if (s.StartsWith("Enemy cards: ")) { enemyNumberHand = Convert.ToInt32(s.Split(' ')[2]); continue; } if (s.StartsWith("GraveYard:")) { if (s.Contains("fgn")) this.feugendead = true; if (s.Contains("stlgg")) this.stalaggdead = true; continue; } if (s.StartsWith("osecrets: ")) { string secs = s.Replace("osecrets: ", ""); foreach (string sec in secs.Split(' ')) { if (sec == "" || sec == string.Empty) continue; this.ownsecretlist.Add(sec); } continue; } if (s.StartsWith("ownDiedMinions: ")) { string mins = s.Split(' ')[1]; foreach (string str in s.Split(';')) { if (str == string.Empty || str == "") { int ent = Convert.ToInt32(str.Split(',')[1]); CardDB.cardIDEnum crdid = CardDB.Instance.cardIdstringToEnum(str.Split(',')[0]); GraveYardItem gyi = new GraveYardItem(crdid, ent, true); this.turnGraveYard.Add(gyi); } } continue; } if (s.StartsWith("enemyDiedMinions: ")) { string mins = s.Split(' ')[1]; foreach (string str in s.Split(';')) { if (str == string.Empty || str == "") { int ent = Convert.ToInt32(str.Split(',')[1]); CardDB.cardIDEnum crdid = CardDB.Instance.cardIdstringToEnum(str.Split(',')[0]); GraveYardItem gyi = new GraveYardItem(crdid, ent, false); this.turnGraveYard.Add(gyi); } } continue; } if (s.StartsWith("probs: ")) { int i = 0; foreach (string p in s.Split(' ')) { if (p.StartsWith("probs:") || p == "" || p == null) continue; int num = Convert.ToInt32(p); CardDB.cardIDEnum c = CardDB.cardIDEnum.None; if (i == 0) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_032; } if (this.enemyheroname == "warrior") { c = CardDB.cardIDEnum.EX1_400; } if (this.enemyheroname == "hunter") { c = CardDB.cardIDEnum.EX1_538; } if (this.enemyheroname == "priest") { c = CardDB.cardIDEnum.CS1_112; } if (this.enemyheroname == "shaman") { c = CardDB.cardIDEnum.EX1_259; } if (this.enemyheroname == "pala") { c = CardDB.cardIDEnum.CS2_093; } if (this.enemyheroname == "druid") { c = CardDB.cardIDEnum.CS2_012; } } if (i == 1) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_028; } } if (num == 1) { enemycards.Add(c); } if (num == 0) { enemycards.Add(c); enemycards.Add(c); } i++; } Probabilitymaker.Instance.setEnemyCards(enemycards); continue; } if (readstate == 42 && counter == 1) // player { this.overdrive = Convert.ToInt32(s.Split(' ')[2]); this.numMinionsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[0]); this.cardsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[1]); this.ownPlayer = Convert.ToInt32(s.Split(' ')[3]); } if (readstate == 1 && counter == 1) // class + hp + defence + immunewhile attacking + immune { ownheroname = s.Split(' ')[0]; ownherohp = Convert.ToInt32(s.Split(' ')[1]); ownheromaxhp = Convert.ToInt32(s.Split(' ')[2]); ownherodefence = Convert.ToInt32(s.Split(' ')[3]); this.ownHeroimmunewhileattacking = (s.Split(' ')[4] == "True") ? true : false; this.heroImmune = (s.Split(' ')[5] == "True") ? true : false; ownHEntity = Convert.ToInt32(s.Split(' ')[6]); ownheroready = (s.Split(' ')[7] == "True") ? true : false; ownheroattacksThisRound = Convert.ToInt32(s.Split(' ')[8]); ownHeroFrozen = (s.Split(' ')[9] == "True") ? true : false; ownHeroAttack = Convert.ToInt32(s.Split(' ')[10]); ownHeroTempAttack = Convert.ToInt32(s.Split(' ')[11]); } if (readstate == 1 && counter == 2) // own hero weapon { ownHeroWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.ownHeroWeaponDurability = Convert.ToInt32(s.Split(' ')[2]); if (ownHeroWeaponAttack == 0) { ownHeroWeapon = ""; //:D } else { ownHeroWeapon = s.Split(' ')[3]; } } if (readstate == 1 && counter == 3) // ability + abilityready { abilityReady = (s.Split(' ')[1] == "True") ? true : false; heroability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); } if (readstate == 1 && counter >= 5) // secrets { if (!s.StartsWith("enemyhero:")) { ownsecretlist.Add(s.Replace(" ", "")); } } if (readstate == 2 && counter == 1) // class + hp + defence + frozen + immune { enemyheroname = s.Split(' ')[0]; enemyherohp = Convert.ToInt32(s.Split(' ')[1]); enemyheromaxhp = Convert.ToInt32(s.Split(' ')[2]); enemyherodefence = Convert.ToInt32(s.Split(' ')[3]); enemyFrozen = (s.Split(' ')[4] == "True") ? true : false; enemyHeroImmune = (s.Split(' ')[5] == "True") ? true : false; enemyHEntity = Convert.ToInt32(s.Split(' ')[6]); } if (readstate == 2 && counter == 2) // wepon + stuff { this.enemyWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.enemyWeaponDur = Convert.ToInt32(s.Split(' ')[2]); if (enemyWeaponDur == 0) { this.enemyWeapon = ""; } else { this.enemyWeapon = s.Split(' ')[3]; } } if (readstate == 2 && counter == 3) // ability { enemyability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); } if (readstate == 2 && counter == 4) // fatigue { this.ownDecksize = Convert.ToInt32(s.Split(' ')[1]); this.enemyDecksize = Convert.ToInt32(s.Split(' ')[3]); this.ownFatigue = Convert.ToInt32(s.Split(' ')[2]); this.enemyFatigue = Convert.ToInt32(s.Split(' ')[4]); } if (readstate == 3) // minion + enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); //optional params (bools) bool ex = false;//exhausted if (s.Contains(" ex")) ex = true; bool taunt = false; if (s.Contains(" tnt")) taunt = true; bool frzn = false; if (s.Contains(" frz")) frzn = true; bool silenced = false; if (s.Contains(" silenced")) silenced = true; bool divshield = false; if (s.Contains(" divshield")) divshield = true; bool ptt = false;//played this turn if (s.Contains(" ptt")) ptt = true; bool wndfry = false;//windfurry if (s.Contains(" wndfr")) wndfry = true; bool stl = false;//stealth if (s.Contains(" stlth")) stl = true; bool pois = false;//poision if (s.Contains(" poi")) pois = true; bool immn = false;//immune if (s.Contains(" imm")) immn = true; bool cncdl = false;//concedal buffed if (s.Contains(" cncdl")) cncdl = true; bool destroyOnOwnTurnStart = false;//destroyOnOwnTurnStart if (s.Contains(" dstrOwnTrnStrt")) destroyOnOwnTurnStart = true; bool destroyOnOwnTurnEnd = false;//destroyOnOwnTurnEnd if (s.Contains(" dstrOwnTrnnd")) destroyOnOwnTurnEnd = true; bool destroyOnEnemyTurnStart = false;//destroyOnEnemyTurnStart if (s.Contains(" dstrEnmTrnStrt")) destroyOnEnemyTurnStart = true; bool destroyOnEnemyTurnEnd = false;//destroyOnEnemyTurnEnd if (s.Contains(" dstrEnmTrnnd")) destroyOnEnemyTurnEnd = true; bool shadowmadnessed = false;//shadowmadnessed if (s.Contains(" shdwmdnssd")) shadowmadnessed = true; bool cntlower = false;//shadowmadnessed if (s.Contains(" cantLowerHpBelowOne")) cntlower = true; //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, true); tempminion.own = true; tempminion.entitiyID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.souloftheforest = souloftheforest; if (maxhp > hp) tempminion.wounded = true; tempminion.updateReadyness(); this.ownminions.Add(tempminion); } } if (readstate == 4) // minion or enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; //if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); //optional params (bools) bool ex = false;//exhausted if (s.Contains(" ex")) ex = true; bool taunt = false; if (s.Contains(" tnt")) taunt = true; bool frzn = false; if (s.Contains(" frz")) frzn = true; bool silenced = false; if (s.Contains(" silenced")) silenced = true; bool divshield = false; if (s.Contains(" divshield")) divshield = true; bool ptt = false;//played this turn if (s.Contains(" ptt")) ptt = true; bool wndfry = false;//windfurry if (s.Contains(" wndfr")) wndfry = true; bool stl = false;//stealth if (s.Contains(" stlth")) stl = true; bool pois = false;//poision if (s.Contains(" poi")) pois = true; bool immn = false;//immune if (s.Contains(" imm")) immn = true; bool cncdl = false;//concedal buffed if (s.Contains(" cncdl")) cncdl = true; bool destroyOnOwnTurnStart = false;//destroyOnOwnTurnStart if (s.Contains(" dstrOwnTrnStrt")) destroyOnOwnTurnStart = true; bool destroyOnOwnTurnEnd = false;//destroyOnOwnTurnEnd if (s.Contains(" dstrOwnTrnnd")) destroyOnOwnTurnEnd = true; bool destroyOnEnemyTurnStart = false;//destroyOnEnemyTurnStart if (s.Contains(" dstrEnmTrnStrt")) destroyOnEnemyTurnStart = true; bool destroyOnEnemyTurnEnd = false;//destroyOnEnemyTurnEnd if (s.Contains(" dstrEnmTrnnd")) destroyOnEnemyTurnEnd = true; bool shadowmadnessed = false;//shadowmadnessed if (s.Contains(" shdwmdnssd")) shadowmadnessed = true; bool cntlower = false;//shadowmadnessed if (s.Contains(" cantLowerHpBelowOne")) cntlower = true; //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, false); tempminion.own = false; tempminion.entitiyID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.souloftheforest = souloftheforest; if (maxhp > hp) tempminion.wounded = true; tempminion.updateReadyness(); this.enemyminions.Add(tempminion); } } if (readstate == 5) // minion or enchantment { Handmanager.Handcard card = new Handmanager.Handcard(); string minionname = s.Split(' ')[2]; string minionid = s.Split(' ')[6]; int pos = Convert.ToInt32(s.Split(' ')[1]); int mana = Convert.ToInt32(s.Split(' ')[3]); card.card = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid)); card.entity = Convert.ToInt32(s.Split(' ')[5]); card.manacost = mana; card.position = pos; handcards.Add(card); } if (s.StartsWith("ownhero:")) { readstate = 1; counter = 0; } if (s.StartsWith("enemyhero:")) { readstate = 2; counter = 0; } if (s.StartsWith("OwnMinions:")) { readstate = 3; counter = 0; } if (s.StartsWith("EnemyMinions:")) { readstate = 4; counter = 0; } if (s.StartsWith("Own Handcards:")) { readstate = 5; counter = 0; } if (s.StartsWith("player:")) { readstate = 42; counter = 0; } counter++; j++; } Helpfunctions.Instance.logg("rdy"); Hrtprozis.Instance.setOwnPlayer(ownPlayer); Handmanager.Instance.setOwnPlayer(ownPlayer); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + ownheroattacksThisRound; foreach (Minion m in this.ownminions) { this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.maxmana, this.mana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.overdrive, 100, 200); Hrtprozis.Instance.updateSecretStuff(this.ownsecretlist, enemySecrets); bool herowindfury = false; //create heros: this.ownHero = new Minion(); this.enemyHero = new Minion(); this.ownHero.isHero = true; this.enemyHero.isHero = true; this.ownHero.own = true; this.enemyHero.own = false; this.ownHero.maxHp = this.ownheromaxhp; this.enemyHero.maxHp = this.enemyheromaxhp; this.ownHero.entitiyID = ownHEntity; this.enemyHero.entitiyID = enemyHEntity; this.ownHero.Angr = ownHeroAttack; this.ownHero.Hp = ownherohp; this.ownHero.armor = ownherodefence; this.ownHero.frozen = ownHeroFrozen; this.ownHero.immuneWhileAttacking = ownHeroimmunewhileattacking; this.ownHero.immune = heroImmune; this.ownHero.numAttacksThisTurn = ownheroattacksThisRound; this.ownHero.windfury = herowindfury; this.enemyHero.Angr = enemyWeaponAttack; this.enemyHero.Hp = enemyherohp; this.enemyHero.frozen = enemyFrozen; this.enemyHero.armor = enemyherodefence; this.enemyHero.immune = enemyHeroImmune; this.enemyHero.Ready = false; this.ownHero.updateReadyness(); //set Simulation stuff Ai.Instance.botBase = new BehaviorControl(); if (this.evalFunction == "rush") Ai.Instance.botBase = new BehaviorRush(); Ai.Instance.setMaxWide(this.maxwide); Ai.Instance.setTwoTurnSimulation(false, this.twoturnsim); Ai.Instance.nextTurnSimulator.setEnemyTurnsim(this.simEnemy2Turn); //Ai.Instance.nextTurnSimulator.updateParams(); Ai.Instance.setPlayAround(this.playarround, this.pprob1, this.pprob2); //save data Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.ownHeroWeaponAttack, this.ownHeroWeaponDurability, this.ownheroname, heroability, abilityReady, this.ownHero); Hrtprozis.Instance.updateEnemyHero(this.enemyWeapon, this.enemyWeaponAttack, this.enemyWeaponDur, this.enemyheroname, enemmaxman, enemyability, this.enemyHero); Hrtprozis.Instance.updateMinions(this.ownminions, this.enemyminions); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownFatigue, this.enemyDecksize, this.enemyFatigue); Handmanager.Instance.setHandcards(this.handcards, this.handcards.Count, enemyNumberHand); Probabilitymaker.Instance.setTurnGraveYard(this.turnGraveYard); Probabilitymaker.Instance.stalaggDead = this.stalaggdead; Probabilitymaker.Instance.feugenDead = this.feugendead; }
private void doallmoves(bool test, Bot botBase, bool isLethalCheck) { bool havedonesomething = true; List <Playfield> temp = new List <Playfield>(); int deep = 0; while (havedonesomething) { help.logg("ailoop"); GC.Collect(); temp.Clear(); temp.AddRange(this.posmoves); havedonesomething = false; Playfield bestold = null; int bestoldval = -20000000; foreach (Playfield p in temp) { if (p.complete) { continue; } //take a card and play it List <string> playedcards = new List <string>(); foreach (Handmanager.Handcard hc in p.owncards) { CardDB.Card c = hc.card; //help.logg("try play crd" + c.name + " " + c.getManaCost(p) + " " + c.canplayCard(p)); if (playedcards.Contains(c.name)) { continue; // dont play the same card in one loop } playedcards.Add(c.name); if (c.choice) { if (doAllChoices(p, hc, isLethalCheck)) { havedonesomething = true; } } else { int bestplace = p.getBestPlace(c); if (hc.canplayCard(p)) { havedonesomething = true; List <targett> trgts = c.getTargetsForCard(p); if (isLethalCheck && (penman.DamageTargetDatabase.ContainsKey(c.name) || penman.DamageTargetSpecialDatabase.ContainsKey(c.name)))// only target enemy hero during Lethal check! { targett trg = trgts.Find(x => x.target == 200); if (trg != null) { trgts.Clear(); trgts.Add(trg); } else { // no enemy hero -> enemy have taunts ->kill the taunts from left to right if (trgts.Count >= 1) { trg = trgts[0]; trgts.Clear(); trgts.Add(trg); } } } int cardplayPenality = 0; if (trgts.Count == 0) { if (usePenalityManager) { cardplayPenality = penman.getPlayCardPenality(c, -1, p, 0, isLethalCheck); if (cardplayPenality <= 499) { Playfield pf = new Playfield(p); havedonesomething = true; pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, 0, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); havedonesomething = true; pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, 0, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { if (isLethalCheck)// only target enemy hero during Lethal check! { targett trg = trgts.Find(x => x.target == 200); if (trg != null) { trgts.Clear(); trgts.Add(trg); } } foreach (targett trgt in trgts) { if (usePenalityManager) { cardplayPenality = penman.getPlayCardPenality(c, trgt.target, p, 0, isLethalCheck); if (cardplayPenality <= 499) { Playfield pf = new Playfield(p); havedonesomething = true; pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, 0, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); havedonesomething = true; pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, 0, bestplace, cardplayPenality); this.posmoves.Add(pf); } } } } } } //attack with a minion List <Minion> playedMinions = new List <Minion>(8); foreach (Minion m in p.ownMinions) { if (m.Ready && m.Angr >= 1 && !m.frozen) { //BEGIN:cut (double/similar) attacking minions out##################################### // DONT LET SIMMILAR MINIONS ATTACK IN ONE TURN (example 3 unlesh the hounds-hounds doesnt need to simulated hole) List <Minion> tempoo = new List <Minion>(playedMinions); bool dontattacked = true; bool isSpecial = penman.specialMinions.ContainsKey(m.name); foreach (Minion mnn in tempoo) { // special minions are allowed to attack in silended and unsilenced state! //help.logg(mnn.silenced + " " + m.silenced + " " + mnn.name + " " + m.name + " " + penman.specialMinions.ContainsKey(m.name)); bool otherisSpecial = penman.specialMinions.ContainsKey(mnn.name); if ((!isSpecial || (isSpecial && m.silenced)) && (!otherisSpecial || (otherisSpecial && mnn.silenced))) // both are not special, if they are the same, dont add { if (mnn.Angr == m.Angr && mnn.Hp == m.Hp && mnn.divineshild == m.divineshild && mnn.taunt == m.taunt && mnn.poisonous == m.poisonous) { dontattacked = false; } continue; } if (isSpecial == otherisSpecial && !m.silenced && !mnn.silenced) // same are special { if (m.name != mnn.name) // different name -> take it { continue; } // same name -> test whether they are equal if (mnn.Angr == m.Angr && mnn.Hp == m.Hp && mnn.divineshild == m.divineshild && mnn.taunt == m.taunt && mnn.poisonous == m.poisonous) { dontattacked = false; } continue; } } if (dontattacked) { playedMinions.Add(m); } else { //help.logg(m.name + " doesnt need to attack!"); continue; } //END: cut (double/similar) attacking minions out##################################### //help.logg(m.name + " is going to attack!"); List <targett> trgts = p.getAttackTargets(); if (isLethalCheck)// only target enemy hero during Lethal check! { targett trg = trgts.Find(x => x.target == 200); if (trg != null) { trgts.Clear(); trgts.Add(trg); } else { // no enemy hero -> enemy have taunts ->kill the taunts from left to right if (trgts.Count >= 1) { trg = trgts[0]; trgts.Clear(); trgts.Add(trg); } } } else { if (this.useCutingTargets) { trgts = this.cutAttackTargets(trgts, p); } } foreach (targett trgt in trgts) { int attackPenality = 0; if (usePenalityManager) { attackPenality = penman.getAttackWithMininonPenality(m, p, trgt.target, isLethalCheck); if (attackPenality <= 499) { Playfield pf = new Playfield(p); havedonesomething = true; pf.attackWithMinion(m, trgt.target, trgt.targetEntity, attackPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); havedonesomething = true; pf.attackWithMinion(m, trgt.target, trgt.targetEntity, attackPenality); this.posmoves.Add(pf); } } if (trgts.Count == 1 && trgts[0].target == 200)//only enemy hero is available als attack { break; } } } // attack with hero if (p.ownHeroReady) { List <targett> trgts = p.getAttackTargets(); havedonesomething = true; if (isLethalCheck)// only target enemy hero during Lethal check! { targett trg = trgts.Find(x => x.target == 200); if (trg != null) { trgts.Clear(); trgts.Add(trg); } else { // no enemy hero -> enemy have taunts ->kill the taunts from left to right if (trgts.Count >= 1) { trg = trgts[0]; trgts.Clear(); trgts.Add(trg); } } } else { if (this.useCutingTargets) { trgts = this.cutAttackTargets(trgts, p); } } foreach (targett trgt in trgts) { Playfield pf = new Playfield(p); int heroAttackPen = 0; if (usePenalityManager) { heroAttackPen = penman.getAttackWithHeroPenality(trgt.target, p); } pf.attackWithWeapon(trgt.target, trgt.targetEntity, heroAttackPen); this.posmoves.Add(pf); } } // use ability /// TODO check if ready after manaup if (p.ownAbilityReady && p.mana >= 2 && p.ownHeroAblility.canplayCard(p, 2)) { int abilityPenality = 0; havedonesomething = true; // if we have mage or priest, we have to target something#################################################### if (this.hp.heroname == "mage" || this.hp.heroname == "priest") { List <targett> trgts = p.ownHeroAblility.getTargetsForCard(p); if (isLethalCheck && (this.hp.heroname == "mage" || (this.hp.heroname == "priest" && p.ownHeroAblility.name != "lesserheal")))// only target enemy hero during Lethal check! { targett trg = trgts.Find(x => x.target == 200); if (trg != null) { trgts.Clear(); trgts.Add(trg); } else { // no enemy hero -> enemy have taunts ->kill the taunts from left to right if (trgts.Count >= 1) { trg = trgts[0]; trgts.Clear(); trgts.Add(trg); } } } foreach (targett trgt in trgts) { if (usePenalityManager) { abilityPenality = penman.getPlayCardPenality(p.ownHeroAblility, trgt.target, p, 0, isLethalCheck); if (abilityPenality <= 499) { Playfield pf = new Playfield(p); havedonesomething = true; pf.activateAbility(p.ownHeroAblility, trgt.target, trgt.targetEntity, abilityPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); havedonesomething = true; pf.activateAbility(p.ownHeroAblility, trgt.target, trgt.targetEntity, abilityPenality); this.posmoves.Add(pf); } } } else { // the other classes dont have to target#################################################### Playfield pf = new Playfield(p); if (usePenalityManager) { abilityPenality = penman.getPlayCardPenality(p.ownHeroAblility, -1, pf, 0, isLethalCheck); if (abilityPenality <= 499) { havedonesomething = true; pf.activateAbility(p.ownHeroAblility, -1, -1, abilityPenality); this.posmoves.Add(pf); } } else { havedonesomething = true; pf.activateAbility(p.ownHeroAblility, -1, -1, abilityPenality); this.posmoves.Add(pf); } } } p.endTurn(); //sort stupid stuff ouf if (botBase.getPlayfieldValue(p) > bestoldval) { bestoldval = botBase.getPlayfieldValue(p); bestold = p; } if (!test) { posmoves.Remove(p); } } if (!test && bestoldval >= -10000 && bestold != null) { this.posmoves.Add(bestold); } help.loggonoff(true); int donec = 0; foreach (Playfield p in posmoves) { if (p.complete) { donec++; } } help.logg("deep " + deep + " len " + this.posmoves.Count + " dones " + donec); if (!test) { cuttingposibilities(botBase); } help.logg("cut to len " + this.posmoves.Count); help.loggonoff(false); deep++; if (deep >= this.maxdeep) { break; //remove this? } } int bestval = int.MinValue; int bestanzactions = 1000; Playfield bestplay = temp[0]; foreach (Playfield p in temp) { int val = botBase.getPlayfieldValue(p); if (bestval <= val) { if (bestval == val && bestanzactions < p.playactions.Count) { continue; } bestplay = p; bestval = val; bestanzactions = p.playactions.Count; } } help.loggonoff(true); help.logg("-------------------------------------"); help.logg("bestPlayvalue " + bestval); bestplay.printActions(); this.bestmove = bestplay.getNextAction(); this.bestmoveValue = bestval; this.bestboard = new Playfield(bestplay); /*if (bestmove != null && bestmove.cardplay && bestmove.handcard.card.type == CardDB.cardtype.MOB) * { * Playfield pf = new Playfield(); * help.logg("bestplaces:"); * pf.getBestPlacePrint(bestmove.card); * }*/ if (bestmove != null) // save the guessed move, so we doesnt need to recalc! { this.nextMoveGuess = new Playfield(); if (bestmove.cardplay) { //pf.playCard(c, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, 0, bestplace, cardplayPenality); Handmanager.Handcard hc = this.nextMoveGuess.owncards.Find(x => x.entity == bestmove.cardEntitiy); if (bestmove.owntarget >= 0 && bestmove.enemytarget >= 0 && bestmove.enemytarget <= 9 && bestmove.owntarget < bestmove.enemytarget) { this.nextMoveGuess.playCard(bestmove.handcard, hc.position - 1, hc.entity, bestmove.enemytarget - 1, bestmove.enemyEntitiy, bestmove.druidchoice, bestmove.owntarget, 0); } else { this.nextMoveGuess.playCard(bestmove.handcard, hc.position - 1, hc.entity, bestmove.enemytarget, bestmove.enemyEntitiy, bestmove.druidchoice, bestmove.owntarget, 0); } //this.nextMoveGuess.playCard(bestmove.card, hc.position - 1, hc.entity, bestmove.enemytarget, bestmove.enemyEntitiy, bestmove.druidchoice, bestmove.owntarget, 0); } if (bestmove.minionplay) { //.attackWithMinion(m, trgt.target, trgt.targetEntity, attackPenality); Minion m = this.nextMoveGuess.ownMinions.Find(x => x.entitiyID == bestmove.ownEntitiy); this.nextMoveGuess.attackWithMinion(m, bestmove.enemytarget, bestmove.enemyEntitiy, 0); } if (bestmove.heroattack) { this.nextMoveGuess.attackWithWeapon(bestmove.enemytarget, bestmove.enemyEntitiy, 0); } if (bestmove.useability) { //.activateAbility(p.ownHeroAblility, trgt.target, trgt.targetEntity, abilityPenality); this.nextMoveGuess.activateAbility(this.nextMoveGuess.ownHeroAblility, bestmove.enemytarget, bestmove.enemyEntitiy, 0); } this.bestboard.playactions.RemoveAt(0); } else { nextMoveGuess.mana = -1; } }
public BoardTester() { string[] lines = new string[0] { }; try { string path = Settings.Instance.path; lines = System.IO.File.ReadAllLines(path + "test.txt"); } catch { Helpfunctions.Instance.logg("cant find test.txt"); return; } CardDB.Card heroability = CardDB.Instance.getCardDataFromID("CS2_034"); CardDB.Card enemyability = CardDB.Instance.getCardDataFromID("CS2_034"); bool abilityReady = false; int readstate = 0; int counter = 0; Minion tempminion = new Minion(); int j = 0; foreach (string sss in lines) { string s = sss + " "; Helpfunctions.Instance.logg(s); if (s.StartsWith("ailoop")) { break; } if (s.StartsWith("####")) { continue; } if (s.StartsWith("start calculations")) { continue; } if (s.StartsWith("enemy secretsCount:")) { this.enemySecrets = Convert.ToInt32(s.Split(' ')[2]); continue; } if (s.StartsWith("mana ")) { string ss = s.Replace("mana ", ""); mana = Convert.ToInt32(ss.Split('/')[0]); maxmana = Convert.ToInt32(ss.Split('/')[1]); } if (readstate == 42 && counter == 1) // player { this.overdrive = Convert.ToInt32(s.Split(' ')[2]); this.numMinionsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[0]); this.cardsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[1]); this.ownPlayer = Convert.ToInt32(s.Split(' ')[3]); } if (readstate == 1 && counter == 1) // class + hp + defence + immunewhile attacking + immune { ownheroname = s.Split(' ')[0]; ownherohp = Convert.ToInt32(s.Split(' ')[1]); ownherodefence = Convert.ToInt32(s.Split(' ')[2]); this.ownHeroimmunewhileattacking = (s.Split(' ')[3] == "True") ? true : false; this.heroImmune = (s.Split(' ')[4] == "True") ? true : false; } if (readstate == 1 && counter == 2) // ready, num attacks this turn, frozen { string readystate = s.Split(' ')[1]; this.ownheroready = (readystate == "True") ? true : false; this.ownheroattacksThisRound = Convert.ToInt32(s.Split(' ')[3]); this.ownHeroFrozen = (s.Split(' ')[5]=="True")? true:false; ownHeroAttack = Convert.ToInt32(s.Split(' ')[7]); ownHeroWeaponAttack = Convert.ToInt32(s.Split(' ')[8]); this.ownHeroWeaponDurability = Convert.ToInt32(s.Split(' ')[9]); if (ownHeroWeaponAttack == 0) { ownHeroWeapon = ""; //:D } else { ownHeroWeapon = s.Split(' ')[10]; } } if (readstate == 1 && counter == 3) // ability + abilityready { abilityReady = (s.Split(' ')[1] == "True") ? true : false; heroability = CardDB.Instance.getCardDataFromID(s.Split(' ')[2]); } if (readstate == 1 && counter >= 5) // secrets { if (!s.StartsWith("enemyhero:")) { ownsecretlist.Add(s.Replace(" ", "")); } } if (readstate == 2 && counter == 1) // class + hp + defence + frozen + immune { enemyheroname = s.Split(' ')[0]; enemyherohp = Convert.ToInt32(s.Split(' ')[1]); enemyherodefence = Convert.ToInt32(s.Split(' ')[2]); enemyFrozen = (s.Split(' ')[3] == "True") ? true : false; enemyHeroImmune = (s.Split(' ')[4] == "True") ? true : false; } if (readstate == 2 && counter == 2) // wepon + stuff { this.enemyWeaponAttack = Convert.ToInt32(s.Split(' ')[0]); this.enemyWeaponDur = Convert.ToInt32(s.Split(' ')[1]); if (enemyWeaponDur == 0) { this.enemyWeapon = ""; } else { this.enemyWeapon = s.Split(' ')[2] ; } } if (readstate == 2 && counter == 3) // ability { enemyability = CardDB.Instance.getCardDataFromID(s.Split(' ')[2]); } if (readstate == 2 && counter == 4) // fatigue { this.ownDecksize = Convert.ToInt32(s.Split(' ')[1]); this.enemyDecksize = Convert.ToInt32(s.Split(' ')[3]); this.ownFatigue = Convert.ToInt32(s.Split(' ')[2]); this.enemyFatigue = Convert.ToInt32(s.Split(' ')[4]); } if (readstate == 3) // minion or enchantment { if (s.Contains(" id:")) { if (counter >= 2) this.ownminions.Add(tempminion); string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool taunt = s.Split(new string[] { " tnt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool frzn = false; if (s.Contains(" frz:")) frzn = s.Split(new string[] { " frz:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool silenced = false; if (s.Contains(" silenced:")) silenced = s.Split(new string[] { " silenced:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool divshield = false; if (s.Contains(" divshield:")) divshield = s.Split(new string[] { " divshield:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool ptt = false;//played this turn if (s.Contains(" ptt:")) ptt = s.Split(new string[] { " ptt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool wndfry = false;//windfurry if (s.Contains(" wndfr:")) wndfry = s.Split(new string[] { " wndfr:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool pois = false;//poision if (s.Contains(" poi:")) pois = s.Split(new string[] { " poi:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool stl = false;//stealth if (s.Contains(" stl:")) stl = s.Split(new string[] { " stl:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool immn = false;//immune if (s.Contains(" imm:")) immn = s.Split(new string[] { " imm:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool chrg = false;//charge if (s.Contains(" chrg:")) chrg = s.Split(new string[] { " chrg:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool ex = false;//exhausted if (s.Contains(" ex:")) ex = s.Split(new string[] { " ex:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int id = Convert.ToInt32(s.Split(new string[] { " id:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(minionid)), id); tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.taunt = taunt; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.numAttacksThisTurn = natt; tempminion.entitiyID = ent; tempminion.handcard.entity = ent; tempminion.silenced = silenced; tempminion.exhausted = ex; tempminion.poisonous = pois; tempminion.stealth = stl; tempminion.immune = immn; tempminion.charge = chrg; tempminion.frozen = frzn; if (maxhp > hp) tempminion.wounded = true; } else { try { Enchantment e = CardDB.getEnchantmentFromCardID(s.Split(' ')[0]); e.controllerOfCreator = Convert.ToInt32(s.Split(' ')[2]); e.creator = Convert.ToInt32(s.Split(' ')[1]); tempminion.enchantments.Add(e); } catch { } } } if (readstate == 4) // minion or enchantment { if (s.Contains(" id:")) { if (counter >= 2) this.enemyminions.Add(tempminion); string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool taunt = s.Split(new string[] { " tnt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool frzn = false; if (s.Contains(" frz:")) frzn = s.Split(new string[] { " frz:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool silenced = false; if (s.Contains(" silenced:")) silenced = s.Split(new string[] { " silenced:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool divshield = false; if (s.Contains(" divshield:")) divshield = s.Split(new string[] { " divshield:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool ptt = false;//played this turn if (s.Contains(" ptt:")) ptt = s.Split(new string[] { " ptt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool wndfry = false;//windfurry if (s.Contains(" wndfr:")) wndfry = s.Split(new string[] { " wndfr:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool pois = false;//poision if (s.Contains(" poi:")) pois = s.Split(new string[] { " poi:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool stl = false;//stealth if (s.Contains(" stl:")) stl = s.Split(new string[] { " stl:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool immn = false;//immune if (s.Contains(" imm:")) immn = s.Split(new string[] { " imm:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool chrg = false;//charge if (s.Contains(" chrg:")) chrg = s.Split(new string[] { " chrg:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; bool ex = false;//exhausted if (s.Contains(" ex:")) ex = s.Split(new string[] { " ex:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int id = Convert.ToInt32(s.Split(new string[] { " id:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(minionid)), id); tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.taunt = taunt; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.numAttacksThisTurn = natt; tempminion.entitiyID = ent; tempminion.silenced = silenced; tempminion.exhausted = ex; tempminion.poisonous = pois; tempminion.stealth = stl; tempminion.immune = immn; tempminion.charge = chrg; tempminion.frozen = frzn; if (maxhp > hp) tempminion.wounded = true; } else { try { Enchantment e = CardDB.getEnchantmentFromCardID(s.Split(' ')[0]); e.controllerOfCreator = Convert.ToInt32(s.Split(' ')[2]); e.creator = Convert.ToInt32(s.Split(' ')[1]); tempminion.enchantments.Add(e); } catch { } } } if (readstate == 5) // minion or enchantment { Handmanager.Handcard card = new Handmanager.Handcard(); string minionname = s.Split(' ')[2]; string minionid = s.Split(' ')[6]; int pos = Convert.ToInt32(s.Split(' ')[1]); int mana = Convert.ToInt32(s.Split(' ')[3]); card.card = CardDB.Instance.getCardDataFromID(minionid); card.entity = Convert.ToInt32(s.Split(' ')[5]); card.manacost = mana; card.position = pos; handcards.Add(card); } if (s.StartsWith("ownhero:")) { readstate = 1; counter = 0; } if (s.StartsWith("enemyhero:")) { readstate = 2; counter = 0; } if (s.StartsWith("OwnMinions:")) { readstate = 3; counter = 0; } if (s.StartsWith("EnemyMinions:")) { if (counter >= 2) this.ownminions.Add(tempminion); readstate = 4; counter = 0; } if (s.StartsWith("Own Handcards:")) { if (counter >= 2) this.enemyminions.Add(tempminion); readstate = 5; counter = 0; } if (s.StartsWith("player:")) { readstate = 42; counter = 0; } counter++; j++; } Helpfunctions.Instance.logg("rdy"); Hrtprozis.Instance.setOwnPlayer(ownPlayer); Handmanager.Instance.setOwnPlayer(ownPlayer); Hrtprozis.Instance.updatePlayer(this.maxmana, this.mana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn,this.overdrive, 100, 200); Hrtprozis.Instance.updateSecretStuff(this.ownsecretlist, enemySecrets); int numattttHero = 0; bool herowindfury = false; Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.ownHeroWeaponAttack, this.ownHeroWeaponDurability, ownHeroimmunewhileattacking, this.ownHeroAttack, this.ownherohp, this.ownherodefence, this.ownheroname, this.ownheroready, this.ownHeroFrozen, heroability, abilityReady, numattttHero, herowindfury, this.heroImmune); Hrtprozis.Instance.updateEnemyHero(this.enemyWeapon, this.enemyWeaponAttack, this.enemyWeaponDur, this.enemyWeaponAttack, this.enemyherohp, this.enemyherodefence, this.enemyheroname, this.enemyFrozen, enemyability, enemyHeroImmune); Hrtprozis.Instance.updateMinions(this.ownminions, this.enemyminions); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownFatigue, this.enemyDecksize, this.enemyFatigue); Handmanager.Instance.setHandcards(this.handcards, this.handcards.Count, 5); }
private bool doAllChoices(Playfield p, Handmanager.Handcard hc, bool lethalcheck) { bool havedonesomething = false; for (int i = 1; i < 3; i++) { CardDB.Card c = hc.card; if (c.name == "starfall") { if (i == 1) { c = CardDB.Instance.getCardDataFromID("NEW1_007b"); } if (i == 2) { c = CardDB.Instance.getCardDataFromID("NEW1_007a"); } } if (c.name == "ancientoflore") { if (i == 1) { c = CardDB.Instance.getCardDataFromID("NEW1_008a"); } if (i == 2) { c = CardDB.Instance.getCardDataFromID("NEW1_008b"); } } if (hc.canplayCard(p)) { havedonesomething = true; int bestplace = p.getBestPlace(c); List <targett> trgts = c.getTargetsForCard(p); int cardplayPenality = 0; if (trgts.Count == 0) { if (usePenalityManager) { cardplayPenality = penman.getPlayCardPenality(c, -1, p, i, lethalcheck); if (cardplayPenality <= 499) { Playfield pf = new Playfield(p); pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { foreach (targett trgt in trgts) { if (usePenalityManager) { cardplayPenality = penman.getPlayCardPenality(c, -1, p, i, lethalcheck); if (cardplayPenality <= 499) { Playfield pf = new Playfield(p); pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); this.posmoves.Add(pf); } } else { Playfield pf = new Playfield(p); pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); this.posmoves.Add(pf); } } } } } return(havedonesomething); }
private void minionReturnToHand(Minion m, bool own, int manachange) { if (own) { removeMinionFromListNoDeath(m, this.ownMinions, true); CardDB.Card c = m.handcard.card; Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = this.owncards.Count + 1; hc.entity = m.entitiyID; hc.manacost = c.calculateManaCost(this) + manachange ; this.owncards.Add(hc); } else { removeMinionFromListNoDeath(m, this.enemyMinions, false); } }
public void simmulateWholeTurn() { help.logg("simulate best board"); //this.bestboard.printActions(); Playfield tempbestboard = new Playfield(); if (bestmove != null) // save the guessed move, so we doesnt need to recalc! { bestmove.print(); if (bestmove.cardplay) { help.logg("card"); //pf.playCard(c, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, 0, bestplace, cardplayPenality); Handmanager.Handcard hc = tempbestboard.owncards.Find(x => x.entity == bestmove.cardEntitiy); if (bestmove.owntarget >= 0 && bestmove.enemytarget >= 0 && bestmove.enemytarget <= 9 && bestmove.owntarget < bestmove.enemytarget) { tempbestboard.playCard(bestmove.handcard, hc.position - 1, hc.entity, bestmove.enemytarget - 1, bestmove.enemyEntitiy, bestmove.druidchoice, bestmove.owntarget, 0); } else { tempbestboard.playCard(bestmove.handcard, hc.position - 1, hc.entity, bestmove.enemytarget, bestmove.enemyEntitiy, bestmove.druidchoice, bestmove.owntarget, 0); } } if (bestmove.minionplay) { help.logg("min"); //.attackWithMinion(m, trgt.target, trgt.targetEntity, attackPenality); Minion mm = tempbestboard.ownMinions.Find(x => x.entitiyID == bestmove.ownEntitiy); help.logg("min"); tempbestboard.attackWithMinion(mm, bestmove.enemytarget, bestmove.enemyEntitiy, 0); help.logg("min"); } if (bestmove.heroattack) { help.logg("hero"); tempbestboard.attackWithWeapon(bestmove.enemytarget, bestmove.enemyEntitiy, 0); } if (bestmove.useability) { help.logg("abi"); //.activateAbility(p.ownHeroAblility, trgt.target, trgt.targetEntity, abilityPenality); tempbestboard.activateAbility(this.nextMoveGuess.ownHeroAblility, bestmove.enemytarget, bestmove.enemyEntitiy, 0); } } else { tempbestboard.mana = -1; } help.logg("-------------"); help.logg("OwnMinions:"); foreach (Minion m in tempbestboard.ownMinions) { help.logg(m.name + " id " + m.id + " zp " + m.zonepos + " " + " e:" + m.entitiyID + " " + " A:" + m.Angr + " H:" + m.Hp + " mH:" + m.maxHp + " rdy:" + m.Ready + " tnt:" + m.taunt + " frz:" + m.frozen + " silenced:" + m.silenced + " divshield:" + m.divineshild + " ptt:" + m.playedThisTurn + " wndfr:" + m.windfury + " natt:" + m.numAttacksThisTurn + " sil:" + m.silenced + " stl:" + m.stealth + " poi:" + m.poisonous + " imm:" + m.immune + " ex:" + m.exhausted + " chrg:" + m.charge); foreach (Enchantment e in m.enchantments) { help.logg(e.CARDID + " " + e.creator + " " + e.controllerOfCreator); } } help.logg("EnemyMinions:"); foreach (Minion m in tempbestboard.enemyMinions) { help.logg(m.name + " id " + m.id + " zp " + m.zonepos + " " + " e:" + m.entitiyID + " " + " A:" + m.Angr + " H:" + m.Hp + " mH:" + m.maxHp + " rdy:" + m.Ready + " tnt:" + m.taunt + " frz:" + m.frozen + " silenced:" + m.silenced + " divshield:" + m.divineshild + " wndfr:" + m.windfury + " sil:" + m.silenced + " stl:" + m.stealth + " poi:" + m.poisonous + " imm:" + m.immune + " ex:" + m.exhausted); foreach (Enchantment e in m.enchantments) { help.logg(e.CARDID + " " + e.creator + " " + e.controllerOfCreator); } } foreach (Action bestmovee in bestboard.playactions) { help.logg("stepp"); if (bestmovee != null) // save the guessed move, so we doesnt need to recalc! { bestmovee.print(); if (bestmovee.cardplay) { help.logg("card"); //pf.playCard(c, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, 0, bestplace, cardplayPenality); Handmanager.Handcard hc = tempbestboard.owncards.Find(x => x.entity == bestmovee.cardEntitiy); if (bestmovee.owntarget >= 0 && bestmovee.enemytarget >= 0 && bestmovee.enemytarget <= 9 && bestmovee.owntarget < bestmovee.enemytarget) { tempbestboard.playCard(bestmovee.handcard, hc.position - 1, hc.entity, bestmovee.enemytarget - 1, bestmovee.enemyEntitiy, bestmovee.druidchoice, bestmovee.owntarget, 0); } else { tempbestboard.playCard(bestmovee.handcard, hc.position - 1, hc.entity, bestmovee.enemytarget, bestmovee.enemyEntitiy, bestmovee.druidchoice, bestmovee.owntarget, 0); } } if (bestmovee.minionplay) { help.logg("min"); //.attackWithMinion(m, trgt.target, trgt.targetEntity, attackPenality); Minion mm = tempbestboard.ownMinions.Find(x => x.entitiyID == bestmovee.ownEntitiy); help.logg("min"); tempbestboard.attackWithMinion(mm, bestmovee.enemytarget, bestmovee.enemyEntitiy, 0); help.logg("min"); } if (bestmovee.heroattack) { help.logg("hero"); tempbestboard.attackWithWeapon(bestmovee.enemytarget, bestmovee.enemyEntitiy, 0); } if (bestmovee.useability) { help.logg("abi"); //.activateAbility(p.ownHeroAblility, trgt.target, trgt.targetEntity, abilityPenality); tempbestboard.activateAbility(this.nextMoveGuess.ownHeroAblility, bestmovee.enemytarget, bestmovee.enemyEntitiy, 0); } } else { tempbestboard.mana = -1; } help.logg("-------------"); help.logg("OwnMinions:"); foreach (Minion m in tempbestboard.ownMinions) { help.logg(m.name + " id " + m.id + " zp " + m.zonepos + " " + " e:" + m.entitiyID + " " + " A:" + m.Angr + " H:" + m.Hp + " mH:" + m.maxHp + " rdy:" + m.Ready + " tnt:" + m.taunt + " frz:" + m.frozen + " silenced:" + m.silenced + " divshield:" + m.divineshild + " ptt:" + m.playedThisTurn + " wndfr:" + m.windfury + " natt:" + m.numAttacksThisTurn + " sil:" + m.silenced + " stl:" + m.stealth + " poi:" + m.poisonous + " imm:" + m.immune + " ex:" + m.exhausted + " chrg:" + m.charge); foreach (Enchantment e in m.enchantments) { help.logg(e.CARDID + " " + e.creator + " " + e.controllerOfCreator); } } help.logg("EnemyMinions:"); foreach (Minion m in tempbestboard.enemyMinions) { help.logg(m.name + " id " + m.id + " zp " + m.zonepos + " " + " e:" + m.entitiyID + " " + " A:" + m.Angr + " H:" + m.Hp + " mH:" + m.maxHp + " rdy:" + m.Ready + " tnt:" + m.taunt + " frz:" + m.frozen + " silenced:" + m.silenced + " divshield:" + m.divineshild + " wndfr:" + m.windfury + " sil:" + m.silenced + " stl:" + m.stealth + " poi:" + m.poisonous + " imm:" + m.immune + " ex:" + m.exhausted); foreach (Enchantment e in m.enchantments) { help.logg(e.CARDID + " " + e.creator + " " + e.controllerOfCreator); } } } }
// Whenever you summon a Battlecry minion while this is in your hand, gain +1/+1. //handled public override void onCardIsGoingToBePlayed(Playfield p, Handmanager.Handcard hc, bool wasOwnCard, Handmanager.Handcard triggerhc) { if (hc.card.battlecry && hc.card.type == CardDB.cardtype.MOB) { hc.addattack++; hc.addHp++; } }
public void updateSecretList(Playfield p, Playfield old) { if (p.enemySecretCount == 0) { return; } bool usedspell = false; int lastEffectedIsMinion = 0; //2 = minion, 1 = hero bool playedMob = false; bool enemyMinionDied = false; bool attackedWithMob = false; bool attackedWithHero = false; int attackTargetIsMinion = 0; bool enemyHeroGotDmg = false; Handmanager.Handcard hcard = null; if (p.cardsPlayedThisTurn > old.cardsPlayedThisTurn) { for (int i = 0; i < old.owncards.Count - 1; i++) { if (p.owncards.Count - 1 >= i) { if (old.owncards[i].entity != p.owncards[i].entity) { hcard = old.owncards[i]; break; } } else { hcard = old.owncards[i]; break; } } if (hcard != null && hcard.card.type == CardDB.cardtype.SPELL) { if (hcard.card.type == CardDB.cardtype.SPELL) { usedspell = true; } int entityOfLastAffected = Silverfish.getCardTarget(hcard.entity); if (entityOfLastAffected >= 1) { lastEffectedIsMinion = 2; } if (entityOfLastAffected == p.enemyHero.entitiyID) { lastEffectedIsMinion = 1; } } if (hcard != null && hcard.card.type == CardDB.cardtype.MOB) { int entityOfLastAffected = Silverfish.getLastAffected(hcard.entity); if (entityOfLastAffected >= 1) { lastEffectedIsMinion = 2; } if (entityOfLastAffected == p.enemyHero.entitiyID && (p.enemyHero.Hp < old.enemyHero.Hp || p.enemyHero.immune)) { lastEffectedIsMinion = 1; } entityOfLastAffected = Silverfish.getCardTarget(hcard.entity); if (entityOfLastAffected >= 1) { lastEffectedIsMinion = 2; if (entityOfLastAffected == p.enemyHero.entitiyID) { lastEffectedIsMinion = 1; } } } } if (p.mobsplayedThisTurn > old.mobsplayedThisTurn) { playedMob = true; } if (p.diedMinions != null && old.diedMinions != null) { int pcount = 0; int ocount = 0; foreach (GraveYardItem gyi in p.diedMinions) { if (!gyi.own) { pcount++; } } foreach (GraveYardItem gyi in old.diedMinions) { if (!gyi.own) { ocount++; } } if (pcount > ocount) { enemyMinionDied = true; } } //attacked with mob? int newAttackers = 0; int oldAttackers = 0; foreach (Minion m in p.ownMinions) { newAttackers += m.numAttacksThisTurn; } foreach (Minion m in old.ownMinions) { oldAttackers += m.numAttacksThisTurn; } if (newAttackers > oldAttackers) { attackedWithMob = true; } if (p.ownHero.numAttacksThisTurn > old.ownHero.numAttacksThisTurn) { attackedWithHero = true; } if (p.enemyHero.Hp < old.enemyHero.Hp) { enemyHeroGotDmg = true; } if (attackedWithHero || attackedWithMob) { //check hero first, so we can exclude deathrattles! if (p.enemyHero.Hp < old.enemyHero.Hp) { attackTargetIsMinion = 1; } int newDefenders = 0; int oldDefenders = 0; foreach (Minion m in p.ownMinions) { newDefenders += m.Hp; } foreach (Minion m in old.ownMinions) { oldDefenders += m.Hp; } if (newDefenders < oldDefenders) { attackTargetIsMinion = 2; } } foreach (SecretItem si in this.enemySecrets) { if (attackedWithHero || attackedWithMob) { si.usedTrigger_CharIsAttacked(attackTargetIsMinion == 1, attackedWithHero); } if (enemyHeroGotDmg) { si.usedTrigger_HeroGotDmg(); } if (enemyMinionDied) { si.usedTrigger_MinionDied(); } if (playedMob) { si.usedTrigger_MinionIsPlayed(); } if (usedspell) { si.usedTrigger_SpellIsPlayed(lastEffectedIsMinion == 2); } } }
private void addCardsReal(List<Handmanager.Handcard> source) { foreach (Handmanager.Handcard m in source) { Handmanager.Handcard mc = new Handmanager.Handcard(); mc.card = new CardDB.Card(m.card); mc.position = m.position; mc.entity = m.entity; this.owncards.Add(mc); } }
public List <Action> doAllChoices(Playfield p, Handmanager.Handcard hcc, bool lethalcheck, bool usePenalityManager, int tracing = 0) { int tracking = tracing; List <Action> returnlist = new List <Action>(); Handmanager.Handcard hc = hcc; if (hc.card.type == CardDB.cardtype.MOB && p.ownMinions.Count >= 7) { return(returnlist); } int max = 3; if (hc.card.cardIDenum == CardDB.cardIDEnum.AT_132_SHAMAN) { max = 5; } if (hc.isChoiceTemp) { max = Handmanager.Instance.getNumberChoices() + 1; } for (int j = 1; j < max; j++) { int i = j; CardDB.Card c = hc.card; int basemana = hc.manacost; if (c.cardIDenum == CardDB.cardIDEnum.AT_132_SHAMAN) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_132_SHAMANa); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_132_SHAMANb); } if (i == 3) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_132_SHAMANc); } if (i == 4) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_132_SHAMANd); } } if (c.name == CardDB.cardName.darkwispers) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.GVG_041a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.GVG_041b); } } if (c.name == CardDB.cardName.keeperofthegrove) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166b); } } if (c.name == CardDB.cardName.starfall) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_007b); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_007a); } } if (c.name == CardDB.cardName.ancientoflore) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_008a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_008b); } } if (c.name == CardDB.cardName.powerofthewild) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_160b); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_160a); } } if (c.name == CardDB.cardName.ancientofwar) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_178b); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_178a); } } if (c.name == CardDB.cardName.druidoftheclaw) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_165t1); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_165t2); } } if (c.name == CardDB.cardName.druidoftheflame) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.BRM_010t); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.BRM_010t2); } } //cenarius dont need if (c.name == CardDB.cardName.keeperofthegrove)//keeper of the grove { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166b); } } if (c.name == CardDB.cardName.markofnature) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_155a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_155b); } } if (c.name == CardDB.cardName.nourish) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_164a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_164b); } } if (c.name == CardDB.cardName.wrath) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_154a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_154b); } } if (c.name == CardDB.cardName.livingroots) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_037a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_037b); } } if (c.name == CardDB.cardName.druidofthesaber) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_042a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.AT_042b); } } if (hcc.isChoiceTemp) { i = 0;//its not a druid-choice tracking = j; hc = Handmanager.Instance.getCardChoice(tracking - 1); c = hc.card; //the tracking/discover card is a druid-choice-card himself :D if (c.choice) { //Helpfunctions.Instance.ErrorLog("choice tracking " + c.name); Handmanager.Handcard hccc = Handmanager.Instance.getCardChoice(tracking - 1); returnlist.AddRange(doAllChoices(p, hccc, lethalcheck, usePenalityManager, tracking)); continue; } basemana = c.cost; } if (c.canplayCard(p, basemana)) { int bestplace = p.getBestPlace(c, lethalcheck); List <Minion> trgts = c.getTargetsForCard(p); int cardplayPenality = 0; if (trgts.Count == 0) { if (usePenalityManager) { cardplayPenality = pen.getPlayCardPenality(hc, null, p, i, lethalcheck); if (cardplayPenality <= 499) { //help.logg(hc.card.name + " is played"); //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); // i is the choice Action a = new Action(actionEnum.playcard, hc, null, bestplace, null, cardplayPenality, i, tracking); //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, 0, bestplace, cardplayPenality); returnlist.Add(a); } } else { //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, null, cardplayPenality, i, tracking); returnlist.Add(a); } } else { foreach (Minion trgt in trgts) { if (usePenalityManager) { cardplayPenality = pen.getPlayCardPenality(hc, trgt, p, i, lethalcheck); if (cardplayPenality <= 499) { //help.logg(hc.card.name + " is played"); //pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, trgt, cardplayPenality, i, tracking); //i is the choice returnlist.Add(a); } } else { //pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, trgt, cardplayPenality, i, tracking); //i is the choice returnlist.Add(a); } } } } } return(returnlist); }
private void getHandcards() { handCards.Clear(); anzcards = 0; enemyAnzCards = 0; List<HSCard> list = TritonHs.GetCards(CardZone.Hand); List<HSCard> list2 = TritonHs.GetCards(CardZone.Graveyard); //List<HRCard> list = HRCard.GetCards(HRPlayer.GetLocalPlayer(), HRCardZone.HAND); foreach (HSCard entitiy in list) { if (entitiy.ZonePosition >= 1) // own handcard { CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.Id)); //c.cost = entitiy.GetCost(); //c.entityID = entitiy.GetEntityId(); var hc = new Handmanager.Handcard(); hc.card = c; hc.position = entitiy.ZonePosition; hc.entity = entitiy.EntityId; hc.manacost = entitiy.Cost; hc.addattack = 0; int attackchange = entitiy.GetTag(GAME_TAG.ATK) - c.Attack; int hpchange = entitiy.GetTag(GAME_TAG.HEALTH) - c.Health; hc.addattack = attackchange; hc.addHp = hpchange; handCards.Add(hc); anzcards++; } } List<HSCard> allcards = TritonHs.GetAllCards(); enemyAnzCards = 0; foreach (HSCard hs in allcards) { if (hs.GetTag(GAME_TAG.ZONE) == 3 && hs.ControllerId != ownPlayerController && hs.GetTag(GAME_TAG.ZONE_POSITION) >= 1) enemyAnzCards++; } // dont know if you can count the enemys-handcars in this way :D }
public BoardTester(string data = "") { this.boardToSimulate = -1; string og = ""; string eg = ""; string omd = ""; string emd = ""; int ets = 20; int ents = 20; int ntssw = 10; int ntssd = 6; int ntssm = 50; int alpha = 50; bool dosecrets = false; Settings.Instance.simulatePlacement = false; Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); string[] lines = new string[0] { }; if (data == "") { this.datareaded = false; try { string path = Settings.Instance.path; lines = System.IO.File.ReadAllLines(path + "test.txt"); this.datareaded = true; } catch { this.datareaded = false; Helpfunctions.Instance.logg("cant find test.txt"); Helpfunctions.Instance.ErrorLog("cant find test.txt"); return; } } else { this.datareaded = true; lines = data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } CardDB.Card heroability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); CardDB.Card enemyability = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.CS2_034); bool abilityReady = false; int readstate = 0; int counter = 0; Minion tempminion = new Minion(); int j = 0; foreach (string sss in lines) { string s = sss + " "; Helpfunctions.Instance.logg(s); if (s.StartsWith("ailoop")) { break; } if (s.StartsWith("####")) { if (s.EndsWith("test ")) { this.boardToSimulate = 1; } continue; } if (s.StartsWith("ownhero:")) { readstate = 1; counter = 1; continue; } if (s.StartsWith("enemyhero:")) { readstate = 2; counter = 1; continue; } if (s.StartsWith("OwnMinions:")) { readstate = 3; counter = 1; continue; } if (s.StartsWith("EnemyMinions:")) { readstate = 4; counter = 1; continue; } if (s.StartsWith("Own Handcards:")) { readstate = 5; counter = 1; continue; } if (s.StartsWith("player:")) { readstate = 42; counter = 1; continue; } if (s.StartsWith("start calculations, current time: ")) { Ai.Instance.currentCalculatedBoard = s.Split(' ')[4].Split(' ')[0]; this.evalFunction = s.Split(' ')[6].Split(' ')[0]; this.maxwide = Convert.ToInt32(s.Split(' ')[7].Split(' ')[0]); //following params are optional this.twoturnsim = 256; if (s.Contains("twoturnsim ")) { this.twoturnsim = Convert.ToInt32(s.Split(new string[] { "twoturnsim " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } if (s.Contains(" face ")) { string facehp = s.Split(new string[] { "face " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]; ComboBreaker.Instance.attackFaceHP = Convert.ToInt32(facehp); } this.playarround = false; if (s.Contains("playaround ")) { string probs = s.Split(new string[] { "playaround " }, StringSplitOptions.RemoveEmptyEntries)[1]; this.playarround = true; this.pprob1 = Convert.ToInt32(probs.Split(' ')[0]); this.pprob2 = Convert.ToInt32(probs.Split(' ')[1]); } if (s.Contains(" ets ")) { string eturnsim = s.Split(new string[] { " ets " }, StringSplitOptions.RemoveEmptyEntries)[1]; ets = Convert.ToInt32(eturnsim.Split(' ')[0]); } if (s.Contains(" ets2 ")) { string eturnsim2 = s.Split(new string[] { " ets2 " }, StringSplitOptions.RemoveEmptyEntries)[1]; int ets2 = Convert.ToInt32(eturnsim2.Split(' ')[0]); Settings.Instance.enemyTurnMaxWideSecondTime = ets2; } if (s.Contains(" ents ")) { this.simEnemy2Turn = true; string eturnsim = s.Split(new string[] { " ents " }, StringSplitOptions.RemoveEmptyEntries)[1]; ents = Convert.ToInt32(eturnsim.Split(' ')[0]); } if (s.Contains(" ntss ")) { string probs = s.Split(new string[] { " ntss " }, StringSplitOptions.RemoveEmptyEntries)[1]; ntssd = Convert.ToInt32(probs.Split(' ')[0]); ntssw = Convert.ToInt32(probs.Split(' ')[1]); ntssm = Convert.ToInt32(probs.Split(' ')[2]); } if (s.Contains(" secret")) { dosecrets = true; } if (s.Contains(" weight ")) { string alphaval = s.Split(new string[] { " weight " }, StringSplitOptions.RemoveEmptyEntries)[1]; alpha = Convert.ToInt32(alphaval.Split(' ')[0]); } if (s.Contains(" plcmnt")) { Settings.Instance.simulatePlacement = true; } continue; } if (s.StartsWith("enemy secretsCount:")) { this.enemySecretAmount = Convert.ToInt32(s.Split(' ')[2]); this.enemySecrets.Clear(); if (this.enemySecretAmount >= 1 && s.Contains(";")) { string secretstuff = s.Split(';')[1]; foreach (string sec in secretstuff.Split(',')) { if (sec == "" || sec == String.Empty || sec == " ") { continue; } this.enemySecrets.Add(new SecretItem(sec)); } } continue; } if (s.StartsWith("mana ")) { string ss = s.Replace("mana ", ""); mana = Convert.ToInt32(ss.Split('/')[0]); maxmana = Convert.ToInt32(ss.Split('/')[1]); } if (s.StartsWith("emana ")) { string ss = s.Replace("emana ", ""); enemmaxman = Convert.ToInt32(ss); } if (s.StartsWith("Enemy cards: ")) { enemyNumberHand = Convert.ToInt32(s.Split(' ')[2]); continue; } if (s.StartsWith("GraveYard:")) { if (s.Contains("fgn")) { this.feugendead = true; } if (s.Contains("stlgg")) { this.stalaggdead = true; } continue; } if (s.StartsWith("osecrets: ")) { string secs = s.Replace("osecrets: ", ""); foreach (string sec in secs.Split(' ')) { if (sec == "" || sec == string.Empty) { continue; } this.ownsecretlist.Add(sec); } continue; } if (s.StartsWith("ownDiedMinions: ")) { omd = s; continue; } if (s.StartsWith("enemyDiedMinions: ")) { emd = s; continue; } if (s.StartsWith("probs: ")) { int i = 0; foreach (string p in s.Split(' ')) { if (p.StartsWith("probs:") || p == "" || p == null) { continue; } int num = Convert.ToInt32(p); CardDB.cardIDEnum c = CardDB.cardIDEnum.None; if (i == 0) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_032; } if (this.enemyheroname == "warrior") { c = CardDB.cardIDEnum.EX1_400; } if (this.enemyheroname == "hunter") { c = CardDB.cardIDEnum.EX1_538; } if (this.enemyheroname == "priest") { c = CardDB.cardIDEnum.CS1_112; } if (this.enemyheroname == "shaman") { c = CardDB.cardIDEnum.EX1_259; } if (this.enemyheroname == "pala") { c = CardDB.cardIDEnum.CS2_093; } if (this.enemyheroname == "druid") { c = CardDB.cardIDEnum.CS2_012; } } if (i == 1) { if (this.enemyheroname == "mage") { c = CardDB.cardIDEnum.CS2_028; } } if (num == 1) { enemycards.Add(c); } if (num == 0) { enemycards.Add(c); enemycards.Add(c); } i++; } Probabilitymaker.Instance.setEnemyCards(enemycards); continue; } if (s.StartsWith("og:")) { og = s; continue; } if (s.StartsWith("eg:")) { eg = s; continue; } if (readstate == 42 && counter == 1) // player { this.overdrive = Convert.ToInt32(s.Split(' ')[2]); this.numMinionsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[0]); this.cardsPlayedThisTurn = Convert.ToInt32(s.Split(' ')[1]); this.ownPlayer = Convert.ToInt32(s.Split(' ')[3]); this.numberMinionsDiedThisturn = 0; this.owncurrentRecall = 0; this.enemyRecall = 0; try { //for old log files a try and catch :D this.numberMinionsDiedThisturn = Convert.ToInt32(s.Split(' ')[4]); this.owncurrentRecall = Convert.ToInt32(s.Split(' ')[5]); this.enemyRecall = Convert.ToInt32(s.Split(' ')[6]); } catch { } try { //for old log files a try and catch :D this.heropowerUsesThisTurn = Convert.ToInt32(s.Split(' ')[7]); this.locknload = Convert.ToInt32(s.Split(' ')[8]); } catch { } } if (readstate == 42 && counter == 2) // player enchantmens { this.ownDragonConsort = Convert.ToInt32(s.Split(' ')[0]); this.enemyDragonConsort = Convert.ToInt32(s.Split(' ')[1]); this.ownLoathebs = Convert.ToInt32(s.Split(' ')[2]); this.enemyLoathebs = Convert.ToInt32(s.Split(' ')[3]); this.ownMillhouse = Convert.ToInt32(s.Split(' ')[4]); this.enemyMillhouse = Convert.ToInt32(s.Split(' ')[5]); this.ownKirintor = Convert.ToInt32(s.Split(' ')[6]); this.ownPrep = Convert.ToInt32(s.Split(' ')[7]); try { this.ownSab = Convert.ToInt32(s.Split(' ')[8]); this.enemySab = Convert.ToInt32(s.Split(' ')[9]); this.ownFenci = Convert.ToInt32(s.Split(' ')[10]); } catch { } } if (readstate == 1 && counter == 1) // class + hp + defence + immunewhile attacking + immune { ownheroname = s.Split(' ')[0]; ownherohp = Convert.ToInt32(s.Split(' ')[1]); ownheromaxhp = Convert.ToInt32(s.Split(' ')[2]); ownherodefence = Convert.ToInt32(s.Split(' ')[3]); this.ownHeroimmunewhileattacking = (s.Split(' ')[4] == "True") ? true : false; this.heroImmune = (s.Split(' ')[5] == "True") ? true : false; ownHEntity = Convert.ToInt32(s.Split(' ')[6]); ownheroready = (s.Split(' ')[7] == "True") ? true : false; ownheroattacksThisRound = Convert.ToInt32(s.Split(' ')[8]); ownHeroFrozen = (s.Split(' ')[9] == "True") ? true : false; ownHeroAttack = Convert.ToInt32(s.Split(' ')[10]); ownHeroTempAttack = Convert.ToInt32(s.Split(' ')[11]); } if (readstate == 1 && counter == 2) // own hero weapon { ownHeroWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.ownHeroWeaponDurability = Convert.ToInt32(s.Split(' ')[2]); if (ownHeroWeaponAttack == 0) { ownHeroWeapon = ""; //:D } else { ownHeroWeapon = s.Split(' ')[3]; } } if (readstate == 1 && counter == 3) // ability + abilityready { abilityReady = (s.Split(' ')[1] == "True"); heroability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); try { //for old log files a try and catch :D this.ownHeropowerUsesThisGame = Convert.ToInt32(s.Split(' ')[3]); } catch { } } if (readstate == 1 && counter >= 5) // secrets { if (!s.StartsWith("enemyhero:")) { ownsecretlist.Add(s.Replace(" ", "")); } } if (readstate == 2 && counter == 1) // class + hp + defence + frozen + immune { enemyheroname = s.Split(' ')[0]; enemyherohp = Convert.ToInt32(s.Split(' ')[1]); enemyheromaxhp = Convert.ToInt32(s.Split(' ')[2]); enemyherodefence = Convert.ToInt32(s.Split(' ')[3]); enemyFrozen = (s.Split(' ')[4] == "True") ? true : false; enemyHeroImmune = (s.Split(' ')[5] == "True") ? true : false; enemyHEntity = Convert.ToInt32(s.Split(' ')[6]); } if (readstate == 2 && counter == 2) // wepon + stuff { this.enemyWeaponAttack = Convert.ToInt32(s.Split(' ')[1]); this.enemyWeaponDur = Convert.ToInt32(s.Split(' ')[2]); if (enemyWeaponDur == 0) { this.enemyWeapon = ""; } else { this.enemyWeapon = s.Split(' ')[3]; } } if (readstate == 2 && counter == 3) // ability { enemyability = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(s.Split(' ')[2])); try { //for old log files a try and catch :D this.enemyHeropowerUsesThisGame = Convert.ToInt32(s.Split(' ')[3]); } catch { } } if (readstate == 2 && counter == 4) // fatigue { this.ownDecksize = Convert.ToInt32(s.Split(' ')[1]); this.enemyDecksize = Convert.ToInt32(s.Split(' ')[3]); this.ownFatigue = Convert.ToInt32(s.Split(' ')[2]); this.enemyFatigue = Convert.ToInt32(s.Split(' ')[4]); } if (readstate == 3) // minion + enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) { ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True"; int natt = 0; if (s.Contains(" natt:")) { natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } // optional params (bools) bool ex = s.Contains(" ex"); bool taunt = s.Contains(" tnt"); bool frzn = s.Contains(" frz"); bool silenced = s.Contains(" silenced"); bool divshield = s.Contains(" divshield"); bool ptt = s.Contains(" ptt"); bool wndfry = s.Contains(" wndfr"); bool stl = s.Contains(" stlth"); bool pois = s.Contains(" poi"); bool immn = s.Contains(" imm"); bool cncdl = s.Contains(" cncdl"); bool destroyOnOwnTurnStart = s.Contains(" dstrOwnTrnStrt"); bool destroyOnOwnTurnEnd = s.Contains(" dstrOwnTrnnd"); bool destroyOnEnemyTurnStart = s.Contains(" dstrEnmTrnStrt"); bool destroyOnEnemyTurnEnd = s.Contains(" dstrEnmTrnnd"); bool shadowmadnessed = s.Contains(" shdwmdnssd"); bool cntlower = s.Contains(" cantLowerHpBelowOne"); bool cnttrgt = s.Contains(" canttarget"); //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) { chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) { adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) { tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) { spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) { ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) { ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) { enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) { souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ownPwordGlory = 0;//adjadmg if (s.Contains(" ownPWG(")) { ownPwordGlory = Convert.ToInt32(s.Split(new string[] { " ownPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int enemyPwordGlory = 0;//adjadmg if (s.Contains(" enemyPWG(")) { enemyPwordGlory = Convert.ToInt32(s.Split(new string[] { " enemyPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, true); tempminion.own = true; tempminion.entitiyID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.cantBeTargetedBySpellsOrHeroPowers = cnttrgt; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.ownPowerWordGlory = ownPwordGlory; tempminion.enemyPowerWordGlory = enemyPwordGlory; tempminion.souloftheforest = souloftheforest; tempminion.canAttackNormal = false; if (ready == true) { tempminion.canAttackNormal = true; } if (maxhp > hp) { tempminion.wounded = true; } tempminion.updateReadyness(); this.ownminions.Add(tempminion); } } if (readstate == 4) // minion or enchantment { if (s.Contains(" zp:")) { string minionname = s.Split(' ')[0]; string minionid = s.Split(' ')[1]; int zp = Convert.ToInt32(s.Split(new string[] { " zp:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int ent = 1000 + j; if (s.Contains(" e:")) { ent = Convert.ToInt32(s.Split(new string[] { " e:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); } int attack = Convert.ToInt32(s.Split(new string[] { " A:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int hp = Convert.ToInt32(s.Split(new string[] { " H:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int maxhp = Convert.ToInt32(s.Split(new string[] { " mH:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); bool ready = s.Split(new string[] { " rdy:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0] == "True" ? true : false; int natt = 0; //if (s.Contains(" natt:")) natt = Convert.ToInt32(s.Split(new string[] { " natt:" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); // optional params (bools) bool ex = s.Contains(" ex"); bool taunt = s.Contains(" tnt"); bool frzn = s.Contains(" frz"); bool silenced = s.Contains(" silenced"); bool divshield = s.Contains(" divshield"); bool ptt = s.Contains(" ptt"); bool wndfry = s.Contains(" wndfr"); bool stl = s.Contains(" stlth"); bool pois = s.Contains(" poi"); bool immn = s.Contains(" imm"); bool cncdl = s.Contains(" cncdl"); bool destroyOnOwnTurnStart = s.Contains(" dstrOwnTrnStrt"); bool destroyOnOwnTurnEnd = s.Contains(" dstrOwnTrnnd"); bool destroyOnEnemyTurnStart = s.Contains(" dstrEnmTrnStrt"); bool destroyOnEnemyTurnEnd = s.Contains(" dstrEnmTrnnd"); bool shadowmadnessed = s.Contains(" shdwmdnssd"); bool cntlower = s.Contains(" cantLowerHpBelowOne"); bool cnttrgt = s.Contains(" canttarget"); //optional params (ints) int chrg = 0;//charge if (s.Contains(" chrg(")) { chrg = Convert.ToInt32(s.Split(new string[] { " chrg(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int adjadmg = 0;//adjadmg if (s.Contains(" adjaattk(")) { adjadmg = Convert.ToInt32(s.Split(new string[] { " adjaattk(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int tmpdmg = 0;//adjadmg if (s.Contains(" tmpattck(")) { tmpdmg = Convert.ToInt32(s.Split(new string[] { " tmpattck(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int spllpwr = 0;//adjadmg if (s.Contains(" spllpwr(")) { spllpwr = Convert.ToInt32(s.Split(new string[] { " spllpwr(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ancestralspirit = 0;//adjadmg if (s.Contains(" ancstrl(")) { ancestralspirit = Convert.ToInt32(s.Split(new string[] { " ancstrl(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ownBlessingOfWisdom = 0;//adjadmg if (s.Contains(" ownBlssng(")) { ownBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " ownBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int enemyBlessingOfWisdom = 0;//adjadmg if (s.Contains(" enemyBlssng(")) { enemyBlessingOfWisdom = Convert.ToInt32(s.Split(new string[] { " enemyBlssng(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int souloftheforest = 0;//adjadmg if (s.Contains(" souloffrst(")) { souloftheforest = Convert.ToInt32(s.Split(new string[] { " souloffrst(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int ownPwordGlory = 0;//adjadmg if (s.Contains(" ownPWG(")) { ownPwordGlory = Convert.ToInt32(s.Split(new string[] { " ownPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } int enemyPwordGlory = 0;//adjadmg if (s.Contains(" enemyPWG(")) { enemyPwordGlory = Convert.ToInt32(s.Split(new string[] { " enemyPWG(" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(')')[0]); } tempminion = createNewMinion(new Handmanager.Handcard(CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid))), zp, false); tempminion.own = false; tempminion.entitiyID = ent; tempminion.handcard.entity = ent; tempminion.Angr = attack; tempminion.Hp = hp; tempminion.maxHp = maxhp; tempminion.Ready = ready; tempminion.numAttacksThisTurn = natt; tempminion.exhausted = ex; tempminion.taunt = taunt; tempminion.frozen = frzn; tempminion.silenced = silenced; tempminion.divineshild = divshield; tempminion.playedThisTurn = ptt; tempminion.windfury = wndfry; tempminion.stealth = stl; tempminion.poisonous = pois; tempminion.immune = immn; tempminion.concedal = cncdl; tempminion.destroyOnOwnTurnStart = destroyOnOwnTurnStart; tempminion.destroyOnOwnTurnEnd = destroyOnOwnTurnEnd; tempminion.destroyOnEnemyTurnStart = destroyOnEnemyTurnStart; tempminion.destroyOnEnemyTurnEnd = destroyOnEnemyTurnEnd; tempminion.shadowmadnessed = shadowmadnessed; tempminion.cantLowerHPbelowONE = cntlower; tempminion.cantBeTargetedBySpellsOrHeroPowers = cnttrgt; tempminion.charge = chrg; tempminion.AdjacentAngr = adjadmg; tempminion.tempAttack = tmpdmg; tempminion.spellpower = spllpwr; tempminion.ancestralspirit = ancestralspirit; tempminion.ownBlessingOfWisdom = ownBlessingOfWisdom; tempminion.enemyBlessingOfWisdom = enemyBlessingOfWisdom; tempminion.ownPowerWordGlory = ownPwordGlory; tempminion.enemyPowerWordGlory = enemyPwordGlory; tempminion.souloftheforest = souloftheforest; if (maxhp > hp) { tempminion.wounded = true; } tempminion.updateReadyness(); this.enemyminions.Add(tempminion); } } if (readstate == 5) // minion or enchantment { Handmanager.Handcard card = new Handmanager.Handcard(); string minionname = s.Split(' ')[2]; string minionid = s.Split(' ')[6]; int pos = Convert.ToInt32(s.Split(' ')[1]); int mana = Convert.ToInt32(s.Split(' ')[3]); card.card = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(minionid)); card.entity = Convert.ToInt32(s.Split(' ')[5]); card.addattack = 0; if (s.Split(' ').Length >= 8 && s.Split(' ')[7] != "") { card.addattack = Convert.ToInt32(s.Split(' ')[7]); } card.addHp = 0; try { card.addHp = Convert.ToInt32(s.Split(' ')[8]); } catch { } card.manacost = mana; card.position = pos; handcards.Add(card); } counter++; j++; } Helpfunctions.Instance.logg("rdy"); Hrtprozis.Instance.setOwnPlayer(ownPlayer); Handmanager.Instance.setOwnPlayer(ownPlayer); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + ownheroattacksThisRound; foreach (Minion m in this.ownminions) { this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.maxmana, this.mana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.overdrive, ownHEntity, enemyHEntity, this.numberMinionsDiedThisturn, this.owncurrentRecall, this.enemyRecall, this.heropowerUsesThisTurn, this.locknload); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrep, this.ownSab, this.enemySab, this.ownFenci); Hrtprozis.Instance.updateSecretStuff(this.ownsecretlist, enemySecretAmount); bool herowindfury = false; if (this.ownHeroWeapon == "doomhammer") { herowindfury = true; } //create heros: this.ownHero = new Minion(); this.enemyHero = new Minion(); this.ownHero.isHero = true; this.enemyHero.isHero = true; this.ownHero.own = true; this.enemyHero.own = false; this.ownHero.maxHp = this.ownheromaxhp; this.enemyHero.maxHp = this.enemyheromaxhp; this.ownHero.entitiyID = ownHEntity; this.enemyHero.entitiyID = enemyHEntity; this.ownHero.Angr = ownHeroAttack; this.ownHero.tempAttack = ownHeroTempAttack;//fix this.ownHero.Hp = ownherohp; this.ownHero.armor = ownherodefence; this.ownHero.frozen = ownHeroFrozen; this.ownHero.immuneWhileAttacking = ownHeroimmunewhileattacking; this.ownHero.immune = heroImmune; this.ownHero.numAttacksThisTurn = ownheroattacksThisRound; this.ownHero.windfury = herowindfury; this.enemyHero.Angr = enemyWeaponAttack; this.enemyHero.Hp = enemyherohp; this.enemyHero.frozen = enemyFrozen; this.enemyHero.armor = enemyherodefence; this.enemyHero.immune = enemyHeroImmune; this.enemyHero.Ready = false; this.ownHero.updateReadyness(); //set Simulation stuff Ai.Instance.botBase = new BehaviorControl(); if (this.evalFunction == "rush") { Ai.Instance.botBase = new BehaviorRush(); } if (this.evalFunction == "face") { Ai.Instance.botBase = new BehaviorFace(); } if (this.evalFunction == "mana") { Ai.Instance.botBase = new BehaviorMana(); } Ai.Instance.setMaxWide(this.maxwide); Ai.Instance.setTwoTurnSimulation(false, this.twoturnsim); Settings.Instance.simEnemySecondTurn = this.simEnemy2Turn; //Ai.Instance.nextTurnSimulator.updateParams(); Settings.Instance.playarround = this.playarround; Settings.Instance.playaroundprob = this.pprob1; Settings.Instance.playaroundprob2 = this.pprob2; Ai.Instance.setPlayAround(); //save data Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.ownHeroWeaponAttack, this.ownHeroWeaponDurability, this.ownheroname, heroability, abilityReady, this.ownHero, this.ownHeropowerUsesThisGame); Hrtprozis.Instance.updateEnemyHero(this.enemyWeapon, this.enemyWeaponAttack, this.enemyWeaponDur, this.enemyheroname, enemmaxman, enemyability, this.enemyHero, this.enemyHeropowerUsesThisGame); Hrtprozis.Instance.updateMinions(this.ownminions, this.enemyminions); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownFatigue, this.enemyDecksize, this.enemyFatigue); Handmanager.Instance.setHandcards(this.handcards, this.handcards.Count, enemyNumberHand); Probabilitymaker.Instance.setEnemySecretData(enemySecrets); Probabilitymaker.Instance.setTurnGraveYard(this.turnGraveYard); Probabilitymaker.Instance.stalaggDead = this.stalaggdead; Probabilitymaker.Instance.feugenDead = this.feugendead; if (og != "") { Probabilitymaker.Instance.readGraveyards(og, eg); } if (omd != "") { Probabilitymaker.Instance.readTurnGraveYard(omd, emd); } //Ai.Instance.enemyTurnSim.maxwide = ets; //Ai.Instance.enemySecondTurnSim.maxwide = ents; Settings.Instance.enemyTurnMaxWide = ets; Settings.Instance.enemySecondTurnMaxWide = ents; Settings.Instance.nextTurnDeep = ntssd; Settings.Instance.nextTurnMaxWide = ntssw; Settings.Instance.nextTurnTotalBoards = ntssm; //Ai.Instance.nextTurnSimulator.updateParams(ntssd, ntssw, ntssm); Settings.Instance.useSecretsPlayArround = dosecrets; Settings.Instance.setWeights(alpha); }
private void drawACard(string ss) { string s = ss; if (s == "") s = "unknown"; if (s == "enemycard") s = "unknown"; // NO PENALITY FOR DRAWING TO MUCH CARDS if (this.owncards.Count >= 10) return; // cant hold more than 10 cards if (s == "unknown") { CardDB.Card plchldr = new CardDB.Card(); plchldr.name = "unknown"; Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = plchldr; hc.position = this.owncards.Count + 1; hc.manacost = 1000; this.owncards.Add(hc); } else { CardDB.Card c = CardDB.Instance.getCardData(s); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = this.owncards.Count + 1; hc.manacost = c.calculateManaCost(this); this.owncards.Add(hc); } }
public Action(string s, Playfield p) { if (s.StartsWith("play ")) { this.actionType = actionEnum.playcard; int cardEnt = Convert.ToInt32(s.Split(new string[] { "id " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int targetEnt = -1; if (s.Contains("target ")) targetEnt = Convert.ToInt32(s.Split(new string[] { "target " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int place = 0; if (s.Contains("pos ")) place = Convert.ToInt32(s.Split(new string[] { "pos " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); int choice = 0; if (s.Contains("choice ")) choice = Convert.ToInt32(s.Split(new string[] { "choice " }, StringSplitOptions.RemoveEmptyEntries)[1].Split(' ')[0]); this.own = null; this.card = new Handmanager.Handcard { entity = cardEnt }; if (targetEnt >= 0) { Minion m = new Minion { entitiyID = targetEnt }; this.target = m; } else { this.target = null; } this.place = place; this.druidchoice = choice; } if (s.StartsWith("attack ")) { this.actionType = actionEnum.attackWithMinion; int ownEnt = Convert.ToInt32(s.Split(' ')[1].Split(' ')[0]); int targetEnt = Convert.ToInt32(s.Split(' ')[3].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entitiyID = targetEnt }; this.target = m; Minion o = new Minion(); o.entitiyID = ownEnt; this.own = o; } if (s.StartsWith("heroattack ")) { this.actionType = actionEnum.attackWithHero; int targetEnt = Convert.ToInt32(s.Split(' ')[1].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entitiyID = targetEnt }; this.target = m; this.own = p.ownHero; } if (s.StartsWith("useability on target ")) { this.actionType = actionEnum.useHeroPower; int targetEnt = Convert.ToInt32(s.Split(' ')[3].Split(' ')[0]); this.place = 0; this.druidchoice = 0; this.card = null; Minion m = new Minion { entitiyID = targetEnt }; this.target = m; this.own = null; } if (s == "useability") { this.actionType = actionEnum.useHeroPower; this.place = 0; this.druidchoice = 0; this.card = null; this.own = null; this.target = null; } if (s.Contains(" discover ")) { string dc = s.Split(new string[] { " discover " }, StringSplitOptions.RemoveEmptyEntries)[1]; this.tracking = Convert.ToInt32(dc); } }
public void setMinionToMinion(Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.GotDmgValue = m.GotDmgValue; this.anzGotHealed = m.anzGotHealed; this.gotInspire = m.gotInspire; this.isHero = m.isHero; this.own = m.own; this.name = m.name; this.cardClass = m.cardClass; this.synergy = m.synergy; this.handcard = m.handcard; this.deathrattle2 = m.deathrattle2; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.desperatestand = m.desperatestand; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.changeOwnerOnTurnStart = m.changeOwnerOnTurnStart; this.conceal = m.conceal; this.souloftheforest = m.souloftheforest; this.stegodon = m.stegodon; this.livingspores = m.livingspores; this.explorershat = m.explorershat; this.returnToHand = m.returnToHand; this.infest = m.infest; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.ownPowerWordGlory = m.ownPowerWordGlory; this.enemyPowerWordGlory = m.enemyPowerWordGlory; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.untouchable = m.untouchable; this.exhausted = m.exhausted; this.Spellburst = m.Spellburst; this.charge = m.charge; this.rush = m.rush; this.hChoice = m.hChoice; if ((m.charge > 0 || m.rush > 0) && !m.frozen && !m.silenced) { this.Ready = true; } else { this.Ready = false; } if (m.rush > 0 && m.playedThisTurn) { this.cantAttackHeroes = true; } this.poisonous = m.poisonous; this.lifesteal = m.lifesteal; this.dormant = m.dormant; this.outcast = m.outcast; this.reborn = m.reborn; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; this.cantAttackHeroes = m.cantAttackHeroes; this.cantAttack = m.cantAttack; }
public List <Action> doAllChoices(Playfield p, Handmanager.Handcard hc, bool lethalcheck, bool usePenalityManager) { List <Action> returnlist = new List <Action>(); if (hc.card.type == CardDB.cardtype.MOB && p.ownMinions.Count >= 7) { return(returnlist); } for (int i = 1; i < 3; i++) { CardDB.Card c = hc.card; if (c.name == CardDB.cardName.keeperofthegrove) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166b); } } if (c.name == CardDB.cardName.starfall) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_007b); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_007a); } } if (c.name == CardDB.cardName.ancientoflore) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_008a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.NEW1_008b); } } if (c.name == CardDB.cardName.powerofthewild) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_160b); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_160a); } } if (c.name == CardDB.cardName.ancientofwar) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_178a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_178b); } } if (c.name == CardDB.cardName.druidoftheclaw) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_165t1); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_165t2); } } if (c.name == CardDB.cardName.druidoftheflame) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.BRM_010t); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.BRM_010t2); } } //cenarius dont need if (c.name == CardDB.cardName.keeperofthegrove)//keeper of the grove { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_166b); } } if (c.name == CardDB.cardName.markofnature) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_155a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_155b); } } if (c.name == CardDB.cardName.nourish) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_164a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_164b); } } if (c.name == CardDB.cardName.wrath) { if (i == 1) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_154a); } if (i == 2) { c = CardDB.Instance.getCardDataFromID(CardDB.cardIDEnum.EX1_154b); } } if (c.canplayCard(p, hc.manacost)) { int bestplace = p.getBestPlace(c, lethalcheck); List <Minion> trgts = c.getTargetsForCard(p); int cardplayPenality = 0; if (trgts.Count == 0) { if (usePenalityManager) { cardplayPenality = pen.getPlayCardPenality(hc.card, null, p, i, lethalcheck); if (cardplayPenality <= 499) { //help.logg(hc.card.name + " is played"); //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); // i is the choice Action a = new Action(actionEnum.playcard, hc, null, bestplace, null, cardplayPenality, i); //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, 0, bestplace, cardplayPenality); returnlist.Add(a); } } else { //pf.playCard(hc, hc.position - 1, hc.entity, -1, -1, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, null, cardplayPenality, i); returnlist.Add(a); } } else { foreach (Minion trgt in trgts) { if (usePenalityManager) { cardplayPenality = pen.getPlayCardPenality(hc.card, trgt, p, i, lethalcheck); if (cardplayPenality <= 499) { //help.logg(hc.card.name + " is played"); //pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, trgt, cardplayPenality, i); //i is the choice returnlist.Add(a); } } else { //pf.playCard(hc, hc.position - 1, hc.entity, trgt.target, trgt.targetEntity, i, bestplace, cardplayPenality); Action a = new Action(actionEnum.playcard, hc, null, bestplace, trgt, cardplayPenality, i); //i is the choice returnlist.Add(a); } } } } } return(returnlist); }
public override float getPlayPenalty(Playfield p, Handmanager.Handcard hc, Minion target, int choice, bool isLethal) { return(0); }
private void getHandcards() { handCards.Clear(); this.anzcards = 0; this.enemyAnzCards = 0; List<HRCard> list = HRCard.GetCards(HRPlayer.GetLocalPlayer(), HRCardZone.HAND); list.AddRange(HRCard.GetCards(HRPlayer.GetEnemyPlayer(), HRCardZone.HAND)); foreach (HRCard item in list) { HREntity entitiy = item.GetEntity(); if (entitiy.GetControllerId() == this.ownPlayerController && entitiy.GetZonePosition() >= 1) // own handcard { CardDB.Card c = CardDB.Instance.getCardDataFromID(entitiy.GetCardId()); //c.cost = entitiy.GetCost(); //c.entityID = entitiy.GetEntityId(); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = entitiy.GetZonePosition(); hc.entity = entitiy.GetEntityId(); hc.manacost = entitiy.GetCost(); handCards.Add(hc); this.anzcards++; } if (entitiy.GetControllerId() != this.ownPlayerController && entitiy.GetZonePosition() >= 1) // enemy handcard { this.enemyAnzCards++; } } }
public Playfield() { this.nextEntity = 1000; //this.simulateEnemyTurn = Ai.Instance.simulateEnemyTurn; this.ownController = Hrtprozis.Instance.getOwnController(); this.ownHeroEntity = Hrtprozis.Instance.ownHeroEntity; this.enemyHeroEntity = Hrtprozis.Instance.enemyHeroEntitiy; this.mana = Hrtprozis.Instance.currentMana; this.ownMaxMana = Hrtprozis.Instance.ownMaxMana; this.enemyMaxMana = Hrtprozis.Instance.enemyMaxMana; this.evaluatePenality = 0; this.ownSecretsIDList.AddRange(Hrtprozis.Instance.ownSecretList); this.enemySecretCount = Hrtprozis.Instance.enemySecretCount; this.attackFaceHP = Hrtprozis.Instance.attackFaceHp; this.complete = false; addMinionsReal(Hrtprozis.Instance.ownMinions, ownMinions); addMinionsReal(Hrtprozis.Instance.enemyMinions, enemyMinions); this.ownHero = new Minion(Hrtprozis.Instance.ownHero); this.enemyHero = new Minion(Hrtprozis.Instance.enemyHero); addCardsReal(Handmanager.Instance.handCards); this.ownHeroName = Hrtprozis.Instance.heroname; this.enemyHeroName = Hrtprozis.Instance.enemyHeroname; /* this.enemyHeroHp = Hrtprozis.Instance.enemyHp; this.ownHeroHp = Hrtprozis.Instance.heroHp; this.ownHeroReady = Hrtprozis.Instance.ownheroisread; this.ownHeroWindfury = Hrtprozis.Instance.ownHeroWindfury; this.ownHeroNumAttackThisTurn = Hrtprozis.Instance.ownHeroNumAttacksThisTurn; this.ownHeroFrozen = Hrtprozis.Instance.herofrozen; this.enemyHeroFrozen = Hrtprozis.Instance.enemyfrozen; this.ownheroAngr = Hrtprozis.Instance.heroAtk; this.heroImmuneWhileAttacking = Hrtprozis.Instance.heroImmuneToDamageWhileAttacking; this.ownHeroDefence = Hrtprozis.Instance.heroDefence; this.enemyHeroDefence = Hrtprozis.Instance.enemyDefence; */ //####buffs############################# this.anzOwnRaidleader = 0; this.anzEnemyRaidleader = 0; this.anzOwnStormwindChamps = 0; this.anzEnemyStormwindChamps = 0; this.anzOwnTundrarhino = 0; this.anzEnemyTundrarhino = 0; this.anzOwnTimberWolfs = 0; this.anzEnemyTimberWolfs = 0; this.anzMurlocWarleader = 0; this.anzGrimscaleOracle = 0; this.anzOwnAuchenaiSoulpriest = 0; this.anzEnemyAuchenaiSoulpriest = 0; this.anzOwnsorcerersapprentice = 0; this.anzOwnsorcerersapprenticeStarted = 0; this.anzEnemysorcerersapprentice = 0; this.anzEnemysorcerersapprenticeStarted = 0; this.anzOwnSouthseacaptain = 0; this.anzEnemySouthseacaptain = 0; this.feugenDead = Probabilitymaker.Instance.feugenDead; this.stalaggDead = Probabilitymaker.Instance.stalaggDead; this.weHavePlayedMillhouseManastorm = false; this.doublepriest = 0; this.enemydoublepriest = 0; this.ownBaronRivendare = 0; this.enemyBaronRivendare = 0; //######################################### this.ownWeaponDurability = Hrtprozis.Instance.heroWeaponDurability; this.ownWeaponAttack = Hrtprozis.Instance.heroWeaponAttack; this.ownWeaponName = Hrtprozis.Instance.ownHeroWeapon; this.owncarddraw = 0; this.enemyWeaponAttack = Hrtprozis.Instance.enemyWeaponAttack;//dont know jet this.enemyWeaponName = Hrtprozis.Instance.enemyHeroWeapon; this.enemyWeaponDurability = Hrtprozis.Instance.enemyWeaponDurability; this.enemycarddraw = 0; this.enemyAnzCards = Handmanager.Instance.enemyAnzCards; this.ownAbilityReady = Hrtprozis.Instance.ownAbilityisReady; this.ownHeroAblility = new Handmanager.Handcard(Hrtprozis.Instance.heroAbility); this.enemyHeroAblility = new Handmanager.Handcard(Hrtprozis.Instance.enemyAbility); this.enemyAbilityReady = false; this.mobsplayedThisTurn = Hrtprozis.Instance.numMinionsPlayedThisTurn; this.startedWithMobsPlayedThisTurn = Hrtprozis.Instance.numMinionsPlayedThisTurn;// only change mobsplayedthisturm this.cardsPlayedThisTurn = Hrtprozis.Instance.cardsPlayedThisTurn; //todo: this.optionsPlayedThisTurn = 0; this.ueberladung = Hrtprozis.Instance.ueberladung; this.ownHeroFatigue = Hrtprozis.Instance.ownHeroFatigue; this.enemyHeroFatigue = Hrtprozis.Instance.enemyHeroFatigue; this.ownDeckSize = Hrtprozis.Instance.ownDeckSize; this.enemyDeckSize = Hrtprozis.Instance.enemyDeckSize; //need the following for manacost-calculation this.ownHeroHpStarted = this.ownHero.Hp; this.enemyHeroHpStarted = this.enemyHero.Hp; this.ownWeaponAttackStarted = this.ownWeaponAttack; this.ownCardsCountStarted = this.owncards.Count; this.ownMobsCountStarted = this.ownMinions.Count + this.enemyMinions.Count; this.playedmagierinderkirintor = false; this.playedPreparation = false; this.winzigebeschwoererin = 0; this.managespenst = 0; this.soeldnerDerVenture = 0; this.beschwoerungsportal = 0; this.nerubarweblord = 0; this.startedWithnerubarweblord = 0; this.startedWithbeschwoerungsportal = 0; this.startedWithManagespenst = 0; this.startedWithWinzigebeschwoererin = 0; this.startedWithsoeldnerDerVenture = 0; this.ownBaronRivendare = 0; this.enemyBaronRivendare = 0; hasorcanplayKelThuzad = false; this.loatheb = false; this.spellpower = 0; this.enemyspellpower = 0; foreach (Minion m in this.ownMinions) { if (m.playedThisTurn && m.name == CardDB.cardName.loatheb) this.loatheb = true; spellpower = spellpower + m.spellpower; spellpower += m.handcard.card.spellpowervalue; if (m.silenced) continue; if (m.name == CardDB.cardName.prophetvelen) this.doublepriest++; if (m.name == CardDB.cardName.pintsizedsummoner) { this.winzigebeschwoererin++; this.startedWithWinzigebeschwoererin++; } if (m.name == CardDB.cardName.manawraith) { this.managespenst++; this.startedWithManagespenst++; } if (m.name == CardDB.cardName.nerubarweblord) { this.nerubarweblord++; this.startedWithnerubarweblord++; } if (m.name == CardDB.cardName.venturecomercenary) { this.soeldnerDerVenture++; this.startedWithsoeldnerDerVenture++; } if (m.name == CardDB.cardName.summoningportal) { this.beschwoerungsportal++; this.startedWithbeschwoerungsportal++; } if (m.handcard.card.name == CardDB.cardName.baronrivendare) { this.ownBaronRivendare++; } if (m.handcard.card.name == CardDB.cardName.kelthuzad) { this.hasorcanplayKelThuzad = true; } if (m.name == CardDB.cardName.raidleader) this.anzOwnRaidleader++; if (m.name == CardDB.cardName.stormwindchampion) this.anzOwnStormwindChamps++; if (m.name == CardDB.cardName.tundrarhino) this.anzOwnTundrarhino++; if (m.name == CardDB.cardName.timberwolf) this.anzOwnTimberWolfs++; if (m.name == CardDB.cardName.murlocwarleader) this.anzMurlocWarleader++; if (m.name == CardDB.cardName.grimscaleoracle) this.anzGrimscaleOracle++; if (m.name == CardDB.cardName.auchenaisoulpriest) this.anzOwnAuchenaiSoulpriest++; if (m.name == CardDB.cardName.sorcerersapprentice) { this.anzOwnsorcerersapprentice++; this.anzOwnsorcerersapprenticeStarted++; } if (m.name == CardDB.cardName.southseacaptain) this.anzOwnSouthseacaptain++; } foreach (Handmanager.Handcard hc in this.owncards) { if (hc.card.name == CardDB.cardName.kelthuzad) { this.hasorcanplayKelThuzad = true; } } foreach (Minion m in this.enemyMinions) { this.enemyspellpower = this.enemyspellpower + m.spellpower; enemyspellpower += m.handcard.card.spellpowervalue; if (m.silenced) continue; if (m.name == CardDB.cardName.prophetvelen) this.enemydoublepriest++; if (m.name == CardDB.cardName.manawraith) { this.managespenst++; this.startedWithManagespenst++; } if (m.name == CardDB.cardName.nerubarweblord) { this.nerubarweblord++; this.startedWithnerubarweblord++; } if (m.handcard.card.name == CardDB.cardName.baronrivendare) { this.enemyBaronRivendare++; } if (m.handcard.card.name == CardDB.cardName.kelthuzad) { this.hasorcanplayKelThuzad = true; } if (m.name == CardDB.cardName.raidleader) this.anzEnemyRaidleader++; if (m.name == CardDB.cardName.stormwindchampion) this.anzEnemyStormwindChamps++; if (m.name == CardDB.cardName.tundrarhino) this.anzEnemyTundrarhino++; if (m.name == CardDB.cardName.timberwolf) this.anzEnemyTimberWolfs++; if (m.name == CardDB.cardName.murlocwarleader) this.anzMurlocWarleader++; if (m.name == CardDB.cardName.grimscaleoracle) this.anzGrimscaleOracle++; if (m.name == CardDB.cardName.auchenaisoulpriest) this.anzEnemyAuchenaiSoulpriest++; if (m.name == CardDB.cardName.sorcerersapprentice) { this.anzEnemysorcerersapprentice++; this.anzEnemysorcerersapprenticeStarted++; } if (m.name == CardDB.cardName.southseacaptain) this.anzEnemySouthseacaptain++; } if (this.hasorcanplayKelThuzad) this.diedMinions = new List<GraveYardItem>(Probabilitymaker.Instance.turngraveyard); }
public Minion createNewMinion(Handmanager.Handcard hc, int zonepos, bool own) { Minion m = new Minion(); Handmanager.Handcard handc = new Handmanager.Handcard(hc); m.handcard = handc; m.own = own; m.isHero = false; m.entitiyID = hc.entity; m.Angr = hc.card.Attack; m.Hp = hc.card.Health; m.maxHp = hc.card.Health; m.name = hc.card.name; m.playedThisTurn = true; m.numAttacksThisTurn = 0; m.zonepos = zonepos; m.windfury = hc.card.windfury; m.taunt = hc.card.tank; m.charge = (hc.card.Charge) ? 1 : 0; m.divineshild = hc.card.Shield; m.poisonous = hc.card.poisionous; m.stealth = hc.card.Stealth; m.updateReadyness(); if (m.name == CardDB.cardName.lightspawn) { m.Angr = m.Hp; } return m; }
public Minion createNewMinion(Handmanager.Handcard hc, int zonepos, bool own) { Minion m = new Minion(); Handmanager.Handcard handc = new Handmanager.Handcard(hc); //Handmanager.Handcard handc = hc; // new Handcard(hc)? m.handcard = handc; m.own = own; m.isHero = false; m.entitiyID = hc.entity; m.Angr = hc.card.Attack; m.Hp = hc.card.Health; m.maxHp = hc.card.Health; m.name = hc.card.name; m.playedThisTurn = true; m.numAttacksThisTurn = 0; m.zonepos = zonepos; m.windfury = hc.card.windfury; m.taunt = hc.card.tank; m.charge = (hc.card.Charge) ? 1 : 0; m.divineshild = hc.card.Shield; m.poisonous = hc.card.poisionous; m.stealth = hc.card.Stealth; m.updateReadyness(); if (m.name == CardDB.cardName.lightspawn) { m.Angr = m.Hp; } //trigger on summon effect! this.triggerAMinionIsSummoned(m); //activate onAura effect m.handcard.card.sim_card.onAuraStarts(this, m); //buffs minion this.minionGetOrEraseAllAreaBuffs(m, true); return m; }
public Minion(Minion m) { //dont silence---------------------------- this.anzGotDmg = m.anzGotDmg; this.gotDmgRaw = m.gotDmgRaw; this.isHero = m.isHero; this.own = m.own; this.canAttackNormal = m.canAttackNormal; this.name = m.name; this.handcard = m.handcard;//new? this.entitiyID = m.entitiyID; this.zonepos = m.zonepos; this.allreadyAttacked = m.allreadyAttacked; this.playedThisTurn = m.playedThisTurn; this.numAttacksThisTurn = m.numAttacksThisTurn; this.immuneWhileAttacking = m.immuneWhileAttacking; this.cantBeTargetedBySpellsOrHeroPowers = m.cantBeTargetedBySpellsOrHeroPowers; //--------------------------------------- this.shadowmadnessed = m.shadowmadnessed; this.ancestralspirit = m.ancestralspirit; this.destroyOnOwnTurnStart = m.destroyOnOwnTurnStart; // depends on own! this.destroyOnEnemyTurnStart = m.destroyOnEnemyTurnStart; // depends on own! this.destroyOnOwnTurnEnd = m.destroyOnOwnTurnEnd; // depends on own! this.destroyOnEnemyTurnEnd = m.destroyOnEnemyTurnEnd; // depends on own! this.concedal = m.concedal; this.souloftheforest = m.souloftheforest; this.ownBlessingOfWisdom = m.ownBlessingOfWisdom; this.enemyBlessingOfWisdom = m.enemyBlessingOfWisdom; this.ownPowerWordGlory = m.ownPowerWordGlory; this.enemyPowerWordGlory = m.enemyPowerWordGlory; this.spellpower = m.spellpower; this.Hp = m.Hp; this.maxHp = m.maxHp; this.armor = m.armor; this.Angr = m.Angr; this.AdjacentAngr = m.AdjacentAngr; this.tempAttack = m.tempAttack; this.Ready = m.Ready; this.taunt = m.taunt; this.wounded = m.wounded; this.divineshild = m.divineshild; this.windfury = m.windfury; this.frozen = m.frozen; this.stealth = m.stealth; this.immune = m.immune; this.exhausted = m.exhausted; this.charge = m.charge; this.poisonous = m.poisonous; this.cantLowerHPbelowONE = m.cantLowerHPbelowONE; this.silenced = m.silenced; }
//todo 4th param public void callKid(CardDB.Card c, int zonepos, bool own, bool spawnKid = false) { //spawnKid = true if its a minion spawned with another one (battlecry) if (own) { if (!spawnKid && this.ownMinions.Count >= 7) return; if (spawnKid && this.ownMinions.Count >= 6) { this.evaluatePenality += 20; return; } } else { if (!spawnKid && this.enemyMinions.Count >= 7) return; if (spawnKid && this.enemyMinions.Count >= 6) { this.evaluatePenality -= 20; return; } } int mobplace = zonepos + 1;//todo check this? //create minion (+triggers) Handmanager.Handcard hc = new Handmanager.Handcard(c); hc.entity = this.nextEntity; this.nextEntity++; Minion m = createNewMinion(hc, mobplace, own); //put it on battle field (+triggers) addMinionToBattlefield(m); }
private void getHandcards() { handCards.Clear(); this.anzcards = 0; this.enemyAnzCards = 0; List<HRCard> list = HRCard.GetCards(HRPlayer.GetLocalPlayer(), HRCardZone.HAND); foreach (HRCard item in list) { HREntity entitiy = item.GetEntity(); if (entitiy.GetControllerId() == this.ownPlayerController && entitiy.GetZonePosition() >= 1) // own handcard { CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())); //c.cost = entitiy.GetCost(); //c.entityID = entitiy.GetEntityId(); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = entitiy.GetZonePosition(); hc.entity = entitiy.GetEntityId(); hc.manacost = entitiy.GetCost(); hc.addattack = 0; if (c.name == CardDB.cardName.bolvarfordragon) { hc.addattack = entitiy.GetATK() - 1; // -1 because it starts with 1, we count only the additional attackvalue } handCards.Add(hc); this.anzcards++; } //maybe check if it has BRM_028e on it? } Dictionary<int, HREntity> allEntitys = HRGame.GetEntityMap(); foreach (HREntity ent in allEntitys.Values) { if (ent.GetControllerId() != this.ownPlayerController && ent.GetZonePosition() >= 1 && ent.GetZone() == HRCardZone.HAND) // enemy handcard { this.enemyAnzCards++; } } }
public void drawACard(CardDB.cardName ss, bool own, bool nopen = false) { CardDB.cardName s = ss; // cant hold more than 10 cards if (own) { if (s == CardDB.cardName.unknown && !nopen) // draw a card from deck :D { if (ownDeckSize == 0) { this.ownHeroFatigue++; this.ownHero.getDamageOrHeal(this.ownHeroFatigue, this, false, true); } else { this.ownDeckSize--; if (this.owncards.Count >= 10) { this.evaluatePenality += 5; return; } this.owncarddraw++; } } else { if (this.owncards.Count >= 10) { this.evaluatePenality += 5; return; } this.owncarddraw++; } } else { if (s == CardDB.cardName.unknown && !nopen) // draw a card from deck :D { if (enemyDeckSize == 0) { this.enemyHeroFatigue++; this.enemyHero.getDamageOrHeal(this.enemyHeroFatigue, this, false, true); } else { this.enemyDeckSize--; if (this.enemyAnzCards >= 10) { this.evaluatePenality -= 50; return; } this.enemycarddraw++; this.enemyAnzCards++; } } else { if (this.enemyAnzCards >= 10) { this.evaluatePenality -= 50; return; } this.enemycarddraw++; this.enemyAnzCards++; } return; } if (s == CardDB.cardName.unknown) { CardDB.Card plchldr = new CardDB.Card(); plchldr.name = CardDB.cardName.unknown; Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = plchldr; hc.position = this.owncards.Count + 1; hc.manacost = 1000; this.owncards.Add(hc); } else { CardDB.Card c = CardDB.Instance.getCardData(s); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = this.owncards.Count + 1; hc.manacost = c.calculateManaCost(this); this.owncards.Add(hc); } }
private void drawACard(string ss, bool own) { string s = ss; if (s == "") s = "unknown"; if (s == "enemycard") s = "unknown"; // NO PENALITY FOR DRAWING TO MUCH CARDS // cant hold more than 10 cards if (own) { if (s == "unknown") // draw a card from deck :D { if (ownDeckSize == 0) { this.ownHeroFatigue++; this.attackOrHealHero(this.ownHeroFatigue, true); } else { this.ownDeckSize--; if (this.owncards.Count >= 10) { this.evaluatePenality += 5; return; } this.owncarddraw++; } } else { if (this.owncards.Count >= 10) { this.evaluatePenality += 5; return; } this.owncarddraw++; } } else { if (s == "unknown") // draw a card from deck :D { if (enemyDeckSize == 0) { this.enemyHeroFatigue++; this.attackOrHealHero(this.enemyHeroFatigue, false); } else { this.enemyDeckSize--; if (this.enemyAnzCards + this.enemycarddraw >= 10) { this.evaluatePenality += 5; return; } this.enemycarddraw++; } } else { if (this.enemyAnzCards + this.enemycarddraw >= 10) { this.evaluatePenality += 5; return; } this.enemycarddraw++; } return; } if (s == "unknown") { CardDB.Card plchldr = new CardDB.Card(); plchldr.name = "unknown"; Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = plchldr; hc.position = this.owncards.Count + 1; hc.manacost = 1000; this.owncards.Add(hc); } else { CardDB.Card c = CardDB.Instance.getCardData(s); Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = this.owncards.Count + 1; hc.manacost = c.calculateManaCost(this); this.owncards.Add(hc); } }
public void minionReturnToHand(Minion m, bool own, int manachange) { List<Minion> temp = (own) ? this.ownMinions : this.enemyMinions; m.handcard.card.sim_card.onAuraEnds(this, m); temp.Remove(m); if (own) { CardDB.Card c = m.handcard.card; Handmanager.Handcard hc = new Handmanager.Handcard(); hc.card = c; hc.position = this.owncards.Count + 1; hc.entity = m.entitiyID; hc.manacost = c.calculateManaCost(this) + manachange; if (this.owncards.Count < 10) { this.owncards.Add(hc); } else { this.drawACard(CardDB.cardName.unknown, true); } this.tempTrigger.ownMinionsChanged = true; } else { this.drawACard(CardDB.cardName.unknown, false); this.tempTrigger.enemyMininsChanged = true; } }
private void minionTransform(Minion m, CardDB.Card c, bool own) { Handmanager.Handcard hc = new Handmanager.Handcard(c); hc.entity = m.entitiyID; Minion tranform = createNewMinion(hc, m.id, own); Minion temp = new Minion(); temp.setMinionTominion(m); m.setMinionTominion(tranform); m.entitiyID = -2; this.endEffectsDueToDeath(temp, own); adjacentBuffUpdate(own); if (logging) Helpfunctions.Instance.logg("minion got sheep" + m.name + " " + m.Angr); }
public void minionTransform(Minion m, CardDB.Card c) { m.handcard.card.sim_card.onAuraEnds(this, m);//end aura of the minion Handmanager.Handcard hc = new Handmanager.Handcard(c); hc.entity = m.entitiyID; int ancestral = m.ancestralspirit; if (m.handcard.card.name == CardDB.cardName.cairnebloodhoof || m.handcard.card.name == CardDB.cardName.harvestgolem || ancestral >= 1) { this.evaluatePenality -= Ai.Instance.botBase.getEnemyMinionValue(m, this) - 1; } //necessary??? /*Minion tranform = createNewMinion(hc, m.zonepos, m.own); Minion temp = new Minion(); temp.setMinionTominion(m); m.setMinionTominion(tranform);*/ m.setMinionTominion(createNewMinion(hc, m.zonepos, m.own)); m.handcard.card.sim_card.onAuraStarts(this, m); this.minionGetOrEraseAllAreaBuffs(m, true); if (m.own) { this.tempTrigger.ownMinionsChanged = true; } else { this.tempTrigger.enemyMininsChanged = true; } if (logging) Helpfunctions.Instance.logg("minion got sheep" + m.name + " " + m.Angr); }
public Minion() { enchantments = new List<Enchantment>(); this.handcard = new Handmanager.Handcard(); }
// Put a random minion from each player's hand into the battlefield. public override void onCardPlay(Playfield p, bool ownplay, Minion target, int choice) { if (p.isServer) { List <Handmanager.Handcard> temp = new List <Handmanager.Handcard>(); List <Handmanager.Handcard> cards = p.owncards; foreach (Handmanager.Handcard hc in cards) { if ((TAG_RACE)hc.card.race == TAG_RACE.DEMON) { temp.Add(hc); } } if (temp.Count >= 1) { int rand = p.getRandomNumber_SERVER(0, temp.Count - 1); p.callKid(cards[rand].card, p.ownMinions.Count, true); p.removeCard_SERVER(cards[rand], true); } temp.Clear(); cards = p.EnemyCards; foreach (Handmanager.Handcard hc in cards) { if ((TAG_RACE)hc.card.race == TAG_RACE.DEMON) { temp.Add(hc); } } if (temp.Count >= 1) { int rand = p.getRandomNumber_SERVER(0, temp.Count - 1); p.callKid(cards[rand].card, p.ownMinions.Count, false); p.removeCard_SERVER(cards[rand], false); } return; } Handmanager.Handcard c = null; int sum = 10000; foreach (Handmanager.Handcard hc in p.owncards) { if (hc.card.type == CardDB.cardtype.MOB) { int s = hc.card.Health + hc.card.Attack + ((hc.card.tank) ? 1 : 0) + ((hc.card.Shield) ? 1 : 0); if (s < sum) { c = hc; sum = s; } } } if (sum < 9999) { p.callKid(c.card, p.ownMinions.Count, true); p.removeCard(c); p.triggerCardsChanged(true); } if (p.enemyAnzCards >= 2) { p.callKid(c.card, p.enemyMinions.Count, false); p.enemyAnzCards--; p.triggerCardsChanged(false); } }