public Minion createNewMinion(Handmanager.Handcard hc, int zonepos, bool own) { Minion m = new Minion { handcard = new Handmanager.Handcard(hc), zonepos = zonepos, entitiyID = hc.entity, Angr = hc.card.Attack, Hp = hc.card.Health, maxHp = hc.card.Health, name = hc.card.name, playedThisTurn = true, numAttacksThisTurn = 0 }; m.own = own; m.isHero = false; m.entitiyID = hc.entity; m.playedThisTurn = true; m.numAttacksThisTurn = 0; 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); }
//Can't Attack. Inspire: Can attack as normal this turn. public override void onInspire(Playfield p, Minion m, bool own) { if (m.own == own) { m.cantAttack = false; m.updateReadyness(); } }
//Can't attack unless it's the only minion on the battlefield. public override void onMinionWasSummoned(Playfield p, Minion m, Minion summonedMinion) { if (!m.silenced) { m.cantAttack = (p.ownMinions.Count + p.enemyMinions.Count > 0) ? true : false; m.updateReadyness(); } }
//Taunt Can only attack if you have 5 or more Armor. public override void onMinionWasSummoned(Playfield p, Minion m, Minion summonedMinion) { if (!m.silenced) { m.cantAttack = (p.ownHero.armor < 5) ? true : false; m.updateReadyness(); } }
//Can't Attack. Inspire: Can attack as normal this turn. public override void onInspire(Playfield p, Minion m, bool own) { if (m.own == own) { m.gotInspire = true; m.updateReadyness(); } }
public override void onMinionDiedTrigger(Playfield p, Minion m, Minion diedMinion) { if (!m.silenced) { int minionsOnBoard = 0; foreach (Minion mnn in p.ownMinions) { if (mnn.HealthPoints > 0) { minionsOnBoard++; } } foreach (Minion mnn in p.enemyMinions) { if (mnn.HealthPoints > 0) { minionsOnBoard++; } } m.cantAttack = (minionsOnBoard > 0) ? true : false; m.updateReadyness(); } }
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); }
private void getMinions() { Dictionary<int, HREntity> allEntitys = HRGame.GetEntityMap(); ownMinions.Clear(); enemyMinions.Clear(); HRPlayer ownPlayer = HRPlayer.GetLocalPlayer(); HRPlayer enemyPlayer = HRPlayer.GetEnemyPlayer(); // ALL minions on Playfield: List<HRCard> list = HRCard.GetCards(ownPlayer, HRCardZone.PLAY); list.AddRange(HRCard.GetCards(enemyPlayer, HRCardZone.PLAY)); List<HREntity> enchantments = new List<HREntity>(); foreach (HRCard item in list) { HREntity entitiy = item.GetEntity(); int zp = entitiy.GetZonePosition(); if (entitiy.GetCardType() == HRCardType.MINION && zp >= 1) { //Helpfunctions.Instance.ErrorLog("zonepos " + zp); CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())); Minion m = new Minion(); m.name = c.name; m.handcard.card = c; m.Angr = entitiy.GetATK(); m.maxHp = entitiy.GetHealth(); m.Hp = m.maxHp - entitiy.GetDamage(); if (m.Hp <= 0) continue; m.wounded = false; if (m.maxHp > m.Hp) m.wounded = true; m.exhausted = entitiy.IsExhausted(); m.taunt = (entitiy.HasTaunt()) ? true : false; m.numAttacksThisTurn = entitiy.GetNumAttacksThisTurn(); int temp = entitiy.GetNumTurnsInPlay(); m.playedThisTurn = (temp == 0) ? true : false; m.windfury = (entitiy.HasWindfury()) ? true : false; m.frozen = (entitiy.IsFrozen()) ? true : false; m.divineshild = (entitiy.HasDivineShield()) ? true : false; m.stealth = (entitiy.IsStealthed()) ? true : false; m.poisonous = (entitiy.IsPoisonous()) ? true : false; m.immune = (entitiy.IsImmune()) ? true : false; m.silenced = (entitiy.GetTag(HRGameTag.SILENCED) >= 1) ? true : false; m.charge = 0; if (!m.silenced && m.name == CardDB.cardName.southseadeckhand && entitiy.GetTag(HRGameTag.CHARGE) == 1) m.charge = 1; if (!m.silenced && m.handcard.card.Charge) m.charge = 1; m.zonepos = zp; m.entitiyID = entitiy.GetEntityId(); //Helpfunctions.Instance.ErrorLog( m.name + " ready params ex: " + m.exhausted + " charge: " +m.charge + " attcksthisturn: " + m.numAttacksThisTurn + " playedthisturn " + m.playedThisTurn ); List<miniEnch> enchs = new List<miniEnch>(); foreach (HREntity ent in allEntitys.Values) { if (ent.GetTag(HRGameTag.ATTACHED) == m.entitiyID && ent.GetZone() == HRCardZone.PLAY) { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.GetCardId()); int creator = ent.GetTag(HRGameTag.CREATOR); int controler = ent.GetTag(HRGameTag.CONTROLLER); enchs.Add(new miniEnch(id, creator, controler)); } } m.loadEnchantments(enchs, entitiy.GetControllerId()); m.Ready = false; // if exhausted, he is NOT ready m.updateReadyness(); if (entitiy.GetControllerId() == this.ownPlayerController) // OWN minion { m.own = true; this.ownMinions.Add(m); } else { m.own = false; this.enemyMinions.Add(m); } } // minions added /* if (entitiy.GetCardType() == HRCardType.WEAPON) { //Helpfunctions.Instance.ErrorLog("found weapon!"); if (entitiy.GetControllerId() == this.ownPlayerController) // OWN weapon { this.ownHeroWeapon = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())).name.ToString(); this.heroWeaponAttack = entitiy.GetATK(); this.heroWeaponDurability = entitiy.GetDurability(); //this.heroImmuneToDamageWhileAttacking = false; } else { this.enemyHeroWeapon = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())).name.ToString(); this.enemyWeaponAttack = entitiy.GetATK(); this.enemyWeaponDurability = entitiy.GetDurability(); } } if (entitiy.GetCardType() == HRCardType.ENCHANTMENT) { enchantments.Add(entitiy); } */ } /*foreach (HRCard item in list) { foreach (HREntity e in item.GetEntity().GetEnchantments()) { enchantments.Add(e); } } // add enchantments to minions setEnchantments(enchantments);*/ }
public Minion createNewMinion(Handmanager.Handcard hc, int zonepos, bool own) { Minion m = new Minion { handcard = new Handmanager.Handcard(hc), zonepos = zonepos, entityID = hc.entity, Angr = hc.card.Attack, Hp = hc.card.Health, maxHp = hc.card.Health, name = hc.card.name, playedThisTurn = true, numAttacksThisTurn = 0 }; m.own = own; m.isHero = false; m.entityID = hc.entity; m.playedThisTurn = true; m.numAttacksThisTurn = 0; 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; }
//insprire: Can attack as normal this turn. public override void onInspire(Playfield p, Minion m) { m.canAttackNormal = true; m.updateReadyness(); }
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; }
public void minionGetControlled(Minion m, bool newOwner, bool canAttack) { List<Minion> newOwnerList = (newOwner) ? this.ownMinions : this.enemyMinions; List<Minion> oldOwnerList = (newOwner) ? this.enemyMinions : this.ownMinions; if (newOwnerList.Count >= 7) return; this.tempTrigger.ownMinionsChanged = true; this.tempTrigger.enemyMininsChanged = true; //end buffs/aura m.handcard.card.sim_card.onAuraEnds(this, m); this.minionGetOrEraseAllAreaBuffs(m, false); //remove minion from list oldOwnerList.Remove(m); //change site (and minion is played in this turn) m.playedThisTurn = true; m.own = !m.own; // add minion to new list + new buffs newOwnerList.Add(m); m.handcard.card.sim_card.onAuraStarts(this, m); this.minionGetOrEraseAllAreaBuffs(m, true); if (m.charge >= 1 || canAttack) // minion can attack if its shadowmadnessed (canAttack = true) or it has charge { this.minionGetCharge(m); } m.updateReadyness(); }
public void updateHrtprozisAtStart() { int controler = 2; player p = p2; player opponent = p1; if (this.currentplayer) { controler = 1; p = p1; opponent = p2; } Hrtprozis.Instance.setOwnPlayer(controler); Hrtprozis.Instance.updatePlayer(p.maxMana, p.curMana, p.cardsPlayedThisTurn, p.numMinionsPlayedThisTurn, p.numOptionPlayedThisTurn, p.overdrive, p.HEntity, opponent.HEntity, p.numberMinionsDiedThisturn, p.owncurrentRecall, opponent.owncurrentRecall, 0, 0); //new values a zero at start Hrtprozis.Instance.setPlayereffects(p.ownDragonConsort, opponent.ownDragonConsort, p.ownLoathebs, opponent.ownLoathebs, p.ownMillhouse, opponent.ownMillhouse, p.ownKirintor, p.ownPrep, 0, 0, 0); //new values a zero at start //TODO //Hrtprozis.Instance.updateSecretStuff(this.ownsecretlist, enemySecretAmount); bool herowindfury = false; if (p.ownHeroWeapon == "doomhammer") { herowindfury = true; } Minion ownHero = new Minion(); Minion enemyHero = new Minion(); ownHero.isHero = true; enemyHero.isHero = true; ownHero.own = true; enemyHero.own = false; ownHero.maxHp = p.ownheromaxhp; enemyHero.maxHp = opponent.ownheromaxhp; ownHero.entitiyID = p.HEntity; enemyHero.entitiyID = opponent.HEntity; ownHero.Angr = p.ownHeroAttack; ownHero.Hp = p.ownherohp; ownHero.armor = p.ownherodefence; ownHero.frozen = p.ownHeroFrozen; ownHero.immuneWhileAttacking = p.ownHeroimmunewhileattacking; ownHero.immune = p.heroImmune; ownHero.numAttacksThisTurn = p.ownheroattacksThisRound; ownHero.windfury = herowindfury; enemyHero.Angr = opponent.ownHeroWeaponAttack; enemyHero.Hp = opponent.ownherohp; enemyHero.frozen = opponent.ownHeroFrozen; enemyHero.armor = opponent.ownherodefence; enemyHero.immune = opponent.heroImmune; enemyHero.Ready = false; ownHero.updateReadyness(); Console.WriteLine("herodata:" + p.heroname + " " + ownHero.Hp + " " + ownHero.maxHp); Hrtprozis.Instance.updateOwnHero(p.ownHeroWeapon, p.ownHeroWeaponAttack, p.ownHeroWeaponDurability, p.heroname, p.heroAbility, p.heroAbilityReady, ownHero, 0); //at start heropower uses this game = 0 Hrtprozis.Instance.updateEnemyHero(opponent.ownHeroWeapon, opponent.ownHeroWeaponAttack, opponent.ownHeroWeaponDurability, opponent.heroname, opponent.maxMana, opponent.heroAbility, enemyHero, 0); //at start heropower uses this game = 0 Hrtprozis.Instance.updateMinions(p.ownminions, opponent.ownminions); Hrtprozis.Instance.updateFatigueStats(p.deck.Count, p.ownFatigue, opponent.deck.Count, opponent.ownFatigue); //TODO /* * 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);*/ }
//a hero attacks a minion public void attackWithWeapon(Minion hero, Minion target, int penality) { bool own = hero.own; this.attacked = true; this.evaluatePenality += penality; hero.numAttacksThisTurn++; //hero will end his readyness hero.updateReadyness(); //heal whether truesilverchampion equipped if (own) { if (this.ownWeaponName == CardDB.cardName.truesilverchampion) { int heal = this.getMinionHeal(2);//minionheal because it's ignoring spellpower this.minionGetDamageOrHeal(hero, -heal); doDmgTriggers(); } } else { if (this.enemyWeaponName == CardDB.cardName.truesilverchampion) { int heal = this.getEnemyMinionHeal(2); this.minionGetDamageOrHeal(hero, -heal); doDmgTriggers(); } } if (logging) Helpfunctions.Instance.logg("attck with weapon trgt: " + target.entitiyID); // hero attacks enemy---------------------------------------------------------------------------------- if (target.isHero)// trigger secret and change target if necessary { int newTarget = this.secretTrigger_CharIsAttacked(hero, target); if (newTarget >= 1) { //search new target! foreach (Minion m in this.ownMinions) { if (m.entitiyID == newTarget) { target = m; break; } } foreach (Minion m in this.enemyMinions) { if (m.entitiyID == newTarget) { target = m; break; } } if (this.ownHero.entitiyID == newTarget) target = this.ownHero; if (this.enemyHero.entitiyID == newTarget) target = this.enemyHero; } } this.minionAttacksMinion(hero, target); //----------------------------------------------------------------------------------------------------- //gorehowl is not killed if he attacks minions if (own) { if (ownWeaponName == CardDB.cardName.gorehowl && !target.isHero) { this.ownWeaponAttack--; hero.Angr--; } else { this.lowerWeaponDurability(1, true); } } else { if (enemyWeaponName == CardDB.cardName.gorehowl && !target.isHero) { this.enemyWeaponAttack--; hero.Angr--; } else { this.lowerWeaponDurability(1, false); } } }
private void getMinions() { // ALL minions on Playfield: List<HSCard> list = TritonHs.GetCards(CardZone.Battlefield, true); list.AddRange(TritonHs.GetCards(CardZone.Battlefield, false)); var enchantments = new List<HSCard>(); ownMinions.Clear(); enemyMinions.Clear(); List<HSCard> allcards = TritonHs.GetAllCards(); foreach (HSCard entiti in list) { int zp = entiti.GetTag(GAME_TAG.ZONE_POSITION); if (entiti.IsMinion && zp >= 1) { HSCard entitiy = entiti; foreach (HSCard ent in allcards) { if (ent.EntityId == entiti.EntityId) { entitiy = ent; break; } } //Helpfunctions.Instance.ErrorLog("zonepos " + zp); CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.Id)); Minion m = new Minion(); m.name = c.name; m.handcard.card = c; m.Angr = entitiy.GetTag(GAME_TAG.ATK); m.maxHp = entitiy.GetTag(GAME_TAG.HEALTH); m.Hp = entitiy.GetTag(GAME_TAG.HEALTH) - entitiy.GetTag(GAME_TAG.DAMAGE); if (m.Hp <= 0) continue; m.wounded = false; if (m.maxHp > m.Hp) m.wounded = true; m.exhausted = (entitiy.GetTag(GAME_TAG.EXHAUSTED) == 0) ? false : true; m.taunt = (entitiy.GetTag(GAME_TAG.TAUNT) == 0) ? false : true; m.numAttacksThisTurn = entitiy.GetTag(GAME_TAG.NUM_ATTACKS_THIS_TURN); int temp = entitiy.GetTag(GAME_TAG.NUM_TURNS_IN_PLAY); m.playedThisTurn = (temp == 0) ? true : false; m.windfury = (entitiy.GetTag(GAME_TAG.WINDFURY) == 0) ? false : true; m.frozen = (entitiy.GetTag(GAME_TAG.FROZEN) == 0) ? false : true; m.divineshild = (entitiy.GetTag(GAME_TAG.DIVINE_SHIELD) == 0) ? false : true; m.stealth = (entitiy.GetTag(GAME_TAG.STEALTH) == 0) ? false : true; m.poisonous = (entitiy.GetTag(GAME_TAG.POISONOUS) == 0) ? false : true; m.immune = (entitiy.GetTag(GAME_TAG.IMMUNE_WHILE_ATTACKING) == 0) ? false : true; m.silenced = (entitiy.GetTag(GAME_TAG.SILENCED) == 0) ? false : true; // Drew: fixed | is the tag removed when silenced, via Mass Dispel? m.cantBeTargetedBySpellsOrHeroPowers = (entitiy.GetTag(GAME_TAG.CANT_BE_TARGETED_BY_HERO_POWERS) == 0) ? false : true; m.charge = 0; m.spellpower = entitiy.GetTag(GAME_TAG.SPELLPOWER); if (!m.silenced && m.name == CardDB.cardName.southseadeckhand && entitiy.GetTag(GAME_TAG.CHARGE) == 1) m.charge = 1; if (!m.silenced && m.handcard.card.Charge) m.charge++; m.zonepos = zp; m.entitiyID = entitiy.EntityId; //Helpfunctions.Instance.ErrorLog( m.name + " ready params ex: " + m.exhausted + " charge: " +m.charge + " attcksthisturn: " + m.numAttacksThisTurn + " playedthisturn " + m.playedThisTurn ); List<miniEnch> enchs = new List<miniEnch>(); foreach (HSCard ent in allcards) { if (ent.GetTag(GAME_TAG.ATTACHED) == m.entitiyID && ent.GetTag(GAME_TAG.ZONE) == 1) //1==play { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.Id); int controler = ent.GetTag(GAME_TAG.CONTROLLER); int creator = ent.GetTag(GAME_TAG.CREATOR); enchs.Add(new miniEnch(id, creator, controler)); } } m.loadEnchantments(enchs, entitiy.GetTag(GAME_TAG.CONTROLLER)); m.Ready = false; // if exhausted, he is NOT ready m.updateReadyness(); if (entitiy.GetTag(GAME_TAG.CONTROLLER) == this.ownPlayerController) // OWN minion { m.own = true; this.ownMinions.Add(m); } else { m.own = false; this.enemyMinions.Add(m); } } } }
private void getMinions() { // ALL minions on Playfield: List <HSCard> list = TritonHs.GetCards(CardZone.Battlefield, true); list.AddRange(TritonHs.GetCards(CardZone.Battlefield, false)); var enchantments = new List <HSCard>(); ownMinions.Clear(); enemyMinions.Clear(); List <HSCard> allcards = TritonHs.GetAllCards(); foreach (HSCard entiti in list) { int zp = entiti.GetTag(GAME_TAG.ZONE_POSITION); if (entiti.IsMinion && zp >= 1) { HSCard entitiy = entiti; foreach (HSCard ent in allcards) { if (ent.EntityId == entiti.EntityId) { entitiy = ent; break; } } //Helpfunctions.Instance.ErrorLog("zonepos " + zp); CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.Id)); Minion m = new Minion(); m.name = c.name; m.handcard.card = c; m.Angr = entitiy.GetTag(GAME_TAG.ATK); m.maxHp = entitiy.GetTag(GAME_TAG.HEALTH); m.Hp = entitiy.GetTag(GAME_TAG.HEALTH) - entitiy.GetTag(GAME_TAG.DAMAGE); if (m.Hp <= 0) { continue; } m.wounded = false; if (m.maxHp > m.Hp) { m.wounded = true; } m.exhausted = (entitiy.GetTag(GAME_TAG.EXHAUSTED) == 0) ? false : true; m.taunt = (entitiy.GetTag(GAME_TAG.TAUNT) == 0) ? false : true; m.numAttacksThisTurn = entitiy.GetTag(GAME_TAG.NUM_ATTACKS_THIS_TURN); int temp = entitiy.GetTag(GAME_TAG.NUM_TURNS_IN_PLAY); m.playedThisTurn = (temp == 0) ? true : false; m.windfury = (entitiy.GetTag(GAME_TAG.WINDFURY) == 0) ? false : true; m.frozen = (entitiy.GetTag(GAME_TAG.FROZEN) == 0) ? false : true; m.divineshild = (entitiy.GetTag(GAME_TAG.DIVINE_SHIELD) == 0) ? false : true; m.stealth = (entitiy.GetTag(GAME_TAG.STEALTH) == 0) ? false : true; m.poisonous = (entitiy.GetTag(GAME_TAG.POISONOUS) == 0) ? false : true; m.immune = (entitiy.GetTag(GAME_TAG.IMMUNE_WHILE_ATTACKING) == 0) ? false : true; m.silenced = (entitiy.GetTag(GAME_TAG.SILENCED) == 0) ? false : true; // Drew: fixed | is the tag removed when silenced, via Mass Dispel? m.cantBeTargetedBySpellsOrHeroPowers = (entitiy.GetTag(GAME_TAG.CANT_BE_TARGETED_BY_HERO_POWERS) == 0) ? false : true; m.charge = 0; if (!m.silenced && m.name == CardDB.cardName.southseadeckhand && entitiy.GetTag(GAME_TAG.CHARGE) == 1) { m.charge = 1; } if (!m.silenced && m.handcard.card.Charge) { m.charge++; } m.zonepos = zp; m.entitiyID = entitiy.EntityId; //Helpfunctions.Instance.ErrorLog( m.name + " ready params ex: " + m.exhausted + " charge: " +m.charge + " attcksthisturn: " + m.numAttacksThisTurn + " playedthisturn " + m.playedThisTurn ); List <miniEnch> enchs = new List <miniEnch>(); foreach (HSCard ent in allcards) { if (ent.GetTag(GAME_TAG.ATTACHED) == m.entitiyID && ent.GetTag(GAME_TAG.ZONE) == 1) //1==play { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.Id); int controler = ent.GetTag(GAME_TAG.CONTROLLER); int creator = ent.GetTag(GAME_TAG.CREATOR); enchs.Add(new miniEnch(id, creator, controler)); } } m.loadEnchantments(enchs, entitiy.GetTag(GAME_TAG.CONTROLLER)); m.Ready = false; // if exhausted, he is NOT ready m.updateReadyness(); if (entitiy.GetTag(GAME_TAG.CONTROLLER) == this.ownPlayerController) // OWN minion { m.own = true; this.ownMinions.Add(m); } else { m.own = false; this.enemyMinions.Add(m); } } } }
private void getMinions() { List<HSCard> allEntitys = TritonHs.GetAllCards(); HSCard ownPlayer = TritonHs.CurrentPlayer; HSCard enemyPlayer = TritonHs.RemotePlayer; allEntitys.Add(ownPlayer); allEntitys.Add(enemyPlayer); //TEST.................... /* Helpfunctions.Instance.ErrorLog("# all"); foreach (var item in rangerbot.gameState.GameEntityList) { allEntitys.Add(item.EntityId, item); Helpfunctions.Instance.ErrorLog(item.CardId + " e " + item.EntityId + " a " + item.Attached + " controler " + item.ControllerId + " creator " + item.CreatorId + " zone " + item.Zone + " zp " + item.ZonePosition); List<Entity> ents = item.Attachments; foreach (var item1 in ents) { Helpfunctions.Instance.ErrorLog("#" + item1.CardId + " e " + item1.EntityId + " a " + item1.Attached + " controler " + item1.ControllerId + " creator " + item1.CreatorId + " zone " + item1.Zone); } }*/ ownMinions.Clear(); enemyMinions.Clear(); // ALL minions on Playfield: List<HSCard> list = new List<HSCard>(); foreach (var item in allEntitys) { if (item.GetZone() == Triton.Game.Mapping.TAG_ZONE.PLAY && item.IsMinion && item.ZonePosition >= 1) { list.Add(item); } } List<HSCard> enchantments = new List<HSCard>(); foreach (HSCard item in list) { HSCard entitiy = item; int zp = entitiy.ZonePosition; if (entitiy.IsMinion && zp >= 1) { //Helpfunctions.Instance.ErrorLog("zonepos " + zp); CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.Id)); Minion m = new Minion(); m.name = c.name; m.handcard.card = c; m.Angr = entitiy.GetTag(GAME_TAG.ATK); m.maxHp = entitiy.GetTag(GAME_TAG.HEALTH); m.Hp = m.maxHp - entitiy.GetTag(GAME_TAG.DAMAGE); if (m.Hp <= 0) continue; m.wounded = false; if (m.maxHp > m.Hp) m.wounded = true; m.exhausted = entitiy.IsExhausted; m.taunt = (entitiy.HasTaunt); m.numAttacksThisTurn = entitiy.GetTag(GAME_TAG.NUM_ATTACKS_THIS_TURN); int temp = entitiy.GetTag(GAME_TAG.NUM_TURNS_IN_PLAY); m.playedThisTurn = (temp == 0) ? true : false; m.windfury = (entitiy.HasWindfury); m.frozen = (entitiy.IsFrozen); m.divineshild = (entitiy.HasDivineShield); m.stealth = (entitiy.IsStealthed); m.poisonous = (entitiy.IsPoisonous); m.immune = (entitiy.IsImmune); m.silenced = entitiy.IsSilenced; m.spellpower = entitiy.GetTag(GAME_TAG.SPELLPOWER); m.charge = 0; if (!m.silenced && m.name == CardDB.cardName.southseadeckhand && entitiy.HasCharge) m.charge = 1; if (!m.silenced && m.handcard.card.Charge) m.charge = 1; if (m.charge == 0 && entitiy.HasCharge) m.charge = 1; m.zonepos = zp; m.entitiyID = entitiy.EntityId; if(m.name == CardDB.cardName.unknown) Helpfunctions.Instance.ErrorLog("unknown card error"); Helpfunctions.Instance.ErrorLog(m.entitiyID + " ." + entitiy.Id + ". " + m.name + " ready params ex: " + m.exhausted + " charge: " + m.charge + " attcksthisturn: " + m.numAttacksThisTurn + " playedthisturn " + m.playedThisTurn); //Helpfunctions.Instance.ErrorLog("spellpower check " + entitiy.SpellPowerAttack + " " + entitiy.SpellPowerHealing + " " + entitiy.SpellPower); List<miniEnch> enchs = new List<miniEnch>(); /*foreach (Entity ent in allEntitys.Values) { if (ent.Attached == m.entitiyID && ent.Zone == HSRangerLib.TAG_ZONE.PLAY) { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.CardId); int creator = ent.CreatorId; int controler = ent.ControllerId; enchs.Add(new miniEnch(id, creator, controler)); } }*/ foreach (HSCard ent in item.AttachedCards) { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.Id); int creator = ent.CreatorId; int controler = ent.ControllerId; enchs.Add(new miniEnch(id, creator, controler)); } m.loadEnchantments(enchs, entitiy.ControllerId); m.Ready = false; // if exhausted, he is NOT ready m.updateReadyness(); if (entitiy.ControllerId == this.ownPlayerController) // OWN minion { m.own = true; this.ownMinions.Add(m); } else { m.own = false; this.enemyMinions.Add(m); } } // minions added } }
public void minionLostCharge(Minion m) { m.charge--; m.updateReadyness(); }
public void minionGetCharge(Minion m) { m.charge++; m.updateReadyness(); }
public void minionGetWindfurry(Minion m) { if (m.windfury) return; m.windfury = true; m.updateReadyness(); }
public BoardTester(string data = "") { 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("####")) { 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 { } } 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]); } 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])); } 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"; 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]); } 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.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 = 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]); } 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.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.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); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrep); 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.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 == "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); 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.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 getMinions() { Dictionary <int, HREntity> allEntitys = HRGame.GetEntityMap(); ownMinions.Clear(); enemyMinions.Clear(); HRPlayer ownPlayer = HRPlayer.GetLocalPlayer(); HRPlayer enemyPlayer = HRPlayer.GetEnemyPlayer(); // ALL minions on Playfield: List <HRCard> list = HRCard.GetCards(ownPlayer, HRCardZone.PLAY); list.AddRange(HRCard.GetCards(enemyPlayer, HRCardZone.PLAY)); List <HREntity> enchantments = new List <HREntity>(); foreach (HRCard item in list) { HREntity entitiy = item.GetEntity(); int zp = entitiy.GetZonePosition(); if (entitiy.GetCardType() == HRCardType.MINION && zp >= 1) { //Helpfunctions.Instance.ErrorLog("zonepos " + zp); CardDB.Card c = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())); Minion m = new Minion(); m.name = c.name; m.handcard.card = c; m.Angr = entitiy.GetATK(); m.maxHp = entitiy.GetHealth(); m.Hp = m.maxHp - entitiy.GetDamage(); if (m.Hp <= 0) { continue; } m.wounded = false; if (m.maxHp > m.Hp) { m.wounded = true; } m.exhausted = entitiy.IsExhausted(); m.taunt = (entitiy.HasTaunt()) ? true : false; m.numAttacksThisTurn = entitiy.GetNumAttacksThisTurn(); int temp = entitiy.GetNumTurnsInPlay(); m.playedThisTurn = (temp == 0) ? true : false; m.windfury = (entitiy.HasWindfury()) ? true : false; m.frozen = (entitiy.IsFrozen()) ? true : false; m.divineshild = (entitiy.HasDivineShield()) ? true : false; m.stealth = (entitiy.IsStealthed()) ? true : false; m.poisonous = (entitiy.IsPoisonous()) ? true : false; m.immune = (entitiy.IsImmune()) ? true : false; m.silenced = (entitiy.GetTag(HRGameTag.SILENCED) >= 1) ? true : false; m.charge = 0; if (!m.silenced && m.name == CardDB.cardName.southseadeckhand && entitiy.GetTag(HRGameTag.CHARGE) == 1) { m.charge = 1; } if (!m.silenced && m.handcard.card.Charge) { m.charge = 1; } m.zonepos = zp; m.entitiyID = entitiy.GetEntityId(); //Helpfunctions.Instance.ErrorLog( m.name + " ready params ex: " + m.exhausted + " charge: " +m.charge + " attcksthisturn: " + m.numAttacksThisTurn + " playedthisturn " + m.playedThisTurn ); List <miniEnch> enchs = new List <miniEnch>(); foreach (HREntity ent in allEntitys.Values) { if (ent.GetTag(HRGameTag.ATTACHED) == m.entitiyID && ent.GetZone() == HRCardZone.PLAY) { CardDB.cardIDEnum id = CardDB.Instance.cardIdstringToEnum(ent.GetCardId()); int creator = ent.GetTag(HRGameTag.CREATOR); int controler = ent.GetTag(HRGameTag.CONTROLLER); enchs.Add(new miniEnch(id, creator, controler)); } } m.loadEnchantments(enchs, entitiy.GetControllerId()); m.Ready = false; // if exhausted, he is NOT ready m.updateReadyness(); if (entitiy.GetControllerId() == this.ownPlayerController) // OWN minion { m.own = true; this.ownMinions.Add(m); } else { m.own = false; this.enemyMinions.Add(m); } } // minions added /* * if (entitiy.GetCardType() == HRCardType.WEAPON) * { * //Helpfunctions.Instance.ErrorLog("found weapon!"); * if (entitiy.GetControllerId() == this.ownPlayerController) // OWN weapon * { * this.ownHeroWeapon = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())).name.ToString(); * this.heroWeaponAttack = entitiy.GetATK(); * this.heroWeaponDurability = entitiy.GetDurability(); * //this.heroImmuneToDamageWhileAttacking = false; * * * } * else * { * this.enemyHeroWeapon = CardDB.Instance.getCardDataFromID(CardDB.Instance.cardIdstringToEnum(entitiy.GetCardId())).name.ToString(); * this.enemyWeaponAttack = entitiy.GetATK(); * this.enemyWeaponDurability = entitiy.GetDurability(); * } * } * * if (entitiy.GetCardType() == HRCardType.ENCHANTMENT) * { * * enchantments.Add(entitiy); * } */ } /*foreach (HRCard item in list) * { * foreach (HREntity e in item.GetEntity().GetEnchantments()) * { * enchantments.Add(e); * } * } * * * // add enchantments to minions * setEnchantments(enchantments);*/ }
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; }