public bool updateEverything(Behavior botbase, bool runExtern = false, bool passiveWait = false) { this.updateBehaveString(botbase); ownPlayerController = TritonHs.OurHero.ControllerId; // create hero + minion data getHerostuff(); //small fix for not knowing when to mulligan: if (ownMaxMana == 1 && currentMana == 1 && numMinionsPlayedThisTurn == 0 && cardsPlayedThisTurn == 0) { setnewLoggFile(); getHerostuff(); } getMinions(); getHandcards(); getDecks(); // send ai the data: Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); Hrtprozis.Instance.setOwnPlayer(ownPlayerController); Handmanager.Instance.setOwnPlayer(ownPlayerController); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + this.ownHero.numAttacksThisTurn; foreach (Minion m in this.ownMinions) { if (m.Hp >= 1) this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.ownMaxMana, this.currentMana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.ueberladung, ownHero.entitiyID, enemyHero.entitiyID, this.numberMinionsDiedThisTurn, this.ownCurrentOverload, this.enemyOverload, this.heroPowerUsesThisTurn, this.lockandload); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrepa, this.ownsabo, this.enemysabo, this.ownFenciCoaches); Hrtprozis.Instance.updateSecretStuff(this.ownSecretList, this.enemySecretCount); Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.heroWeaponAttack, this.heroWeaponDurability, this.heroname, this.heroAbility, this.ownAbilityisReady, this.ownHero, this.ownHeroPowerUsesThisGame); Hrtprozis.Instance.updateEnemyHero(this.enemyHeroWeapon, this.enemyWeaponAttack, this.enemyWeaponDurability, this.enemyHeroname, this.enemyMaxMana, this.enemyAbility, this.enemyHero, this.enemyHeroPowerUsesThisGame); Hrtprozis.Instance.updateMinions(this.ownMinions, this.enemyMinions); Handmanager.Instance.setHandcards(this.handCards, this.anzcards, this.enemyAnzCards); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownHeroFatigue, this.enemyDecksize, this.enemyHeroFatigue); Probabilitymaker.Instance.getEnemySecretGuesses(this.enemySecretList, Hrtprozis.Instance.heroNametoEnum(this.enemyHeroname)); //learnmode :D Playfield p = new Playfield(); if (lastpf != null) { if (lastpf.isEqualf(p)) { return false; } //board changed we update secrets! //if(Ai.Instance.nextMoveGuess!=null) Probabilitymaker.Instance.updateSecretList(Ai.Instance.nextMoveGuess.enemySecretList); Probabilitymaker.Instance.updateSecretList(p, lastpf); lastpf = p; } else { lastpf = p; } p = new Playfield(); //secrets have updated :D // calculate stuff Helpfunctions.Instance.ErrorLog("calculating stuff... " + DateTime.Now.ToString("HH:mm:ss.ffff")); if (runExtern) { Helpfunctions.Instance.logg("recalc-check###########"); if (p.isEqual(Ai.Instance.nextMoveGuess, true)) { printstuff(p, false); Ai.Instance.doNextCalcedMove(); } else { printstuff(p, true); readActionFile(passiveWait); } } else { // Drew: This prevents the freeze during AI updates, but no API functions may be called // during this time! using (TritonHs.Memory.ReleaseFrame(true)) { printstuff(p, false); //Helpfunctions.Instance.logg("middle calculations: " + DateTime.Now.ToString("HH:mm:ss.ffff")); Ai.Instance.dosomethingclever(botbase); } } Helpfunctions.Instance.ErrorLog("calculating ended! " + DateTime.Now.ToString("HH:mm:ss.ffff")); return true; }
public bool updateEverything(Behavior botbase, bool runExtern = false, bool passiveWait = false) { this.updateBehaveString(botbase); HRPlayer ownPlayer = HRPlayer.GetLocalPlayer(); HRPlayer enemyPlayer = HRPlayer.GetEnemyPlayer(); ownPlayerController = ownPlayer.GetHero().GetControllerId();//ownPlayer.GetHero().GetControllerId() // create hero + minion data getHerostuff(); getMinions(); getHandcards(); getDecks(); // send ai the data: Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); Hrtprozis.Instance.setOwnPlayer(ownPlayerController); Handmanager.Instance.setOwnPlayer(ownPlayerController); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + this.ownHero.numAttacksThisTurn; foreach (Minion m in this.ownMinions) { if (m.Hp >= 1) this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.ownMaxMana, this.currentMana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.ueberladung, ownPlayer.GetHero().GetEntityId(), enemyPlayer.GetHero().GetEntityId(), this.numberMinionsDiedThisTurn, this.ownCurrentOverload, this.enemyOverload); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrepa); Hrtprozis.Instance.updateSecretStuff(this.ownSecretList, this.enemySecretCount); Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.heroWeaponAttack, this.heroWeaponDurability, this.heroname, this.heroAbility, this.ownAbilityisReady, this.ownHero); Hrtprozis.Instance.updateEnemyHero(this.enemyHeroWeapon, this.enemyWeaponAttack, this.enemyWeaponDurability, this.enemyHeroname, this.enemyMaxMana, this.enemyAbility, this.enemyHero); Hrtprozis.Instance.updateMinions(this.ownMinions, this.enemyMinions); Handmanager.Instance.setHandcards(this.handCards, this.anzcards, this.enemyAnzCards); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownHeroFatigue, this.enemyDecksize, this.enemyHeroFatigue); Probabilitymaker.Instance.getEnemySecretGuesses(this.enemySecretList, Hrtprozis.Instance.heroNametoEnum(this.enemyHeroname)); //learnmode :D Playfield p = new Playfield(); if (lastpf != null) { if (lastpf.isEqualf(p)) { return false; } //board changed we update secrets! //if(Ai.Instance.nextMoveGuess!=null) Probabilitymaker.Instance.updateSecretList(Ai.Instance.nextMoveGuess.enemySecretList); Probabilitymaker.Instance.updateSecretList(p, lastpf); lastpf = p; } else { lastpf = p; } p = new Playfield();//secrets have updated :D // calculate stuff Helpfunctions.Instance.ErrorLog("calculating stuff... " + DateTime.Now.ToString("HH:mm:ss.ffff")); if (runExtern) { Helpfunctions.Instance.logg("recalc-check###########"); //p.printBoard(); //Ai.Instance.nextMoveGuess.printBoard(); if (p.isEqual(Ai.Instance.nextMoveGuess, true)) { printstuff(false); Ai.Instance.doNextCalcedMove(); } else { printstuff(true); readActionFile(passiveWait); } } else { printstuff(false); Ai.Instance.dosomethingclever(botbase); } Helpfunctions.Instance.ErrorLog("calculating ended! " + DateTime.Now.ToString("HH:mm:ss.ffff")); return true; }
public bool updateEverything(Behavior botbase, bool quequeActions, bool runExtern = false, bool passiveWait = false, bool nodruidchoice=true) { quequeActions = false; Helpfunctions.Instance.ErrorLog("updateEverything"); this.updateBehaveString(botbase); ownPlayerController = TritonHs.OurHero.ControllerId; // create hero + minion data getHerostuff(); //small fix for not knowing when to mulligan: if (ownMaxMana == 1 && currentMana == 1 && numMinionsPlayedThisTurn == 0 && cardsPlayedThisTurn == 0) { setnewLoggFile(); getHerostuff(); } getMinions(); getHandcards(nodruidchoice); getDecks(); correctSpellpower(); // send ai the data: Hrtprozis.Instance.clearAll(); Handmanager.Instance.clearAll(); Hrtprozis.Instance.setOwnPlayer(ownPlayerController); Handmanager.Instance.setOwnPlayer(ownPlayerController); this.numOptionPlayedThisTurn = 0; this.numOptionPlayedThisTurn += this.cardsPlayedThisTurn + this.ownHero.numAttacksThisTurn; foreach (Minion m in this.ownMinions) { if (m.Hp >= 1) this.numOptionPlayedThisTurn += m.numAttacksThisTurn; } Hrtprozis.Instance.updatePlayer(this.ownMaxMana, this.currentMana, this.cardsPlayedThisTurn, this.numMinionsPlayedThisTurn, this.numOptionPlayedThisTurn, this.ueberladung, ownHero.entitiyID, enemyHero.entitiyID, this.numberMinionsDiedThisTurn, this.ownCurrentOverload, this.enemyOverload, this.heroPowerUsesThisTurn,this.lockandload); Hrtprozis.Instance.setPlayereffects(this.ownDragonConsort, this.enemyDragonConsort, this.ownLoathebs, this.enemyLoathebs, this.ownMillhouse, this.enemyMillhouse, this.ownKirintor, this.ownPrepa, this.ownsabo, this.enemysabo, this.ownFenciCoaches, this.enemyCursedCardsInHand); Hrtprozis.Instance.updateSecretStuff(this.ownSecretList, this.enemySecretCount); Hrtprozis.Instance.updateOwnHero(this.ownHeroWeapon, this.heroWeaponAttack, this.heroWeaponDurability, this.heroname, this.heroAbility, this.ownAbilityisReady, this.ownHero, this.ownHeroPowerUsesThisGame); Hrtprozis.Instance.updateEnemyHero(this.enemyHeroWeapon, this.enemyWeaponAttack, this.enemyWeaponDurability, this.enemyHeroname, this.enemyMaxMana, this.enemyAbility, this.enemyHero, this.enemyHeroPowerUsesThisGame); Hrtprozis.Instance.updateMinions(this.ownMinions, this.enemyMinions); Handmanager.Instance.setHandcards(this.handCards, this.anzcards, this.enemyAnzCards, this.choiceCards); Hrtprozis.Instance.updateFatigueStats(this.ownDecksize, this.ownHeroFatigue, this.enemyDecksize, this.enemyHeroFatigue); Probabilitymaker.Instance.getEnemySecretGuesses(this.enemySecretList, Hrtprozis.Instance.heroNametoEnum(this.enemyHeroname)); //learnmode :D Playfield p = new Playfield(); if (lastpf != null) { if (lastpf.isEqualf(p)) { return false; } //board changed we update secrets! //if(Ai.Instance.nextMoveGuess!=null) Probabilitymaker.Instance.updateSecretList(Ai.Instance.nextMoveGuess.enemySecretList); Probabilitymaker.Instance.updateSecretList(p, lastpf); } lastpf = p; p = new Playfield();//secrets have updated :D // calculate stuff /*foreach (Handmanager.Handcard hc in p.owncards) { Helpfunctions.Instance.ErrorLog("hc playfield" + hc.manacost + " " + hc.getManaCost(p)); }*/ /*if (quequeActions) { // Detect errors in HearthRanger execution of our last set of actions and try to fix it so we don't // have to re-calculate the entire turn. Bot currentBot = (Bot)rangerbot; if (currentBot.numActionsSent > currentBot.numExecsReceived && !p.isEqualf(Ai.Instance.nextMoveGuess)) { Helpfunctions.Instance.ErrorLog("HR action queue did not complete!"); Helpfunctions.Instance.logg("board state out-of-sync due to action queue!"); if (Ai.Instance.restoreBestMoves(p, currentBot.queuedMoveGuesses)) { Helpfunctions.Instance.logg("rolled back state to replay queued actions."); Helpfunctions.Instance.ErrorLog("#queue-rollback#"); } } }*/ Helpfunctions.Instance.ErrorLog("calculating stuff... " + DateTime.Now.ToString("HH:mm:ss.ffff")); if (runExtern) { Helpfunctions.Instance.logg("recalc-check###########"); //p.printBoard(); //Ai.Instance.nextMoveGuess.printBoard(); if (p.isEqual(Ai.Instance.nextMoveGuess, true)) { printstuff(p, false); Ai.Instance.doNextCalcedMove(); } else { printstuff(p, true); readActionFile(passiveWait); } } else { using (TritonHs.Memory.ReleaseFrame(true)) { printstuff(p, false); Ai.Instance.dosomethingclever(botbase); } } Helpfunctions.Instance.ErrorLog("calculating ended! " + DateTime.Now.ToString("HH:mm:ss.ffff")); return true; }