My post didn't get posted. I take back calling this useless, tested again without spells in deck and won my first one. :-) where do I donate? Wanna support. Keep up the good work! :-)
I'm glad you got the bot working to your liking. I don't believe I will not support spells, until I get the minimax AI running. Since I prefer actually getting the AI framework up, instead of tweaking something which will be discarded.
Donations can be done at;
* https://www.paypal.com/cgi-bin/websc...=KSE988RQZ58PG
Hey thanks for the fast response skeen! One quick question that I've actually been wrestling with for the last 20 minutes. I can't seem to make the bot consistently load. I've got in running before, but repeating the same steps doesn't always seem to get it loaded when HS starts.
My process is:
open bot
open battlenet
(regen)
inject
launch game
sadface.jpg
repeat
with the first two in any order, and with trying regen as well. But 90% of the time the bot isn't loaded when HS starts up. Why is this?
Ok thanks, I was wondering what was causing this. Thought I might have just been missing a crucial step. Is there any temporary fix? Aka file to run, process to point it to, etc.
Btw, what is the primary language that the AI is written in? I'm a CS major with practically no time on my hands, but this seems like a worthy enough way to procrastinate.
And I have to ask about the possibility of making the bot use the "Greetings" emote after it ends its first turn. Just because it's a bot doesn't mean it can't be a polite one! (and possibly reduce bot suspicion?)
Sorry for the idea spam, but a quick generic idea to improve AI. I'm sure you are working on the idea of stat value gets built in when trading into taunts (eg, prefer to attack taunt unit T with unit A if attackA>healthT && healthA > attackT), and if no minions meet the criteria then attack with whatever can kill it so that it doesn't trade a ton of little guys into it.
priority:
can kill, survive
can kill, lowest total stats lost out of options (eg, trade a 5/1 into Tasdingo rather than a 5/3)
can damage, won't die -> Da<Ht, Ha>Dt
can damage, will die
And then throw in a general thing to value minions with flavortext more than those without it, unless otherwise specified. Eg, prefers to trade with a river croc rather than a raid leader.
Wow, i was just reading through your code eliminate tanks function and you already covered just about everything i said. Well never mind then, nice job. Btw, do you think the the open source will ever create a detection problem is blizzard finds out about the project? eg, use specific parts of the code to identify botters?
Edit: Although I would argue that the function is a more general "kill efficiently" function that happens to only be used for taunts as of now. Could definitely be extended to a kill threat function to kill off something like a magma rager/demolisher
Edit2: I tried for about an hour (including reinstalling HS) and I couldn't get the bot working again. :/
Last edited by Davaned; 03-23-2014 at 10:58 PM.
Can we please get better instructions on how to use this bot in the OP? I have tried downloading from your github, and even loaded your github link into my Github client, but there are no .exe files anywhere to be found.....What am I missing?
The newest update is awesome. However, the first turn if we go first and have no minions to drop with 1 mana, the bot just freezes and waits till the timer to almost go out to click end turn. (because the end turn button is grey and it says "enemy turn" until the time almost goes out to turn back to "end turn"). Also there's no toggle to -drop taunt minions or not- in the GUI. The bot still fails to attack if mouse cursor is not on screen (can be solved by using vmware). If the bot used a secret this turn (eg. explosion trap), next turn if we have the same secret on hand (eg. explosion trap) that was used, the bot will stuck trying to use the same secret again. (since you cannot have 2 same secrets at a time). Playful sprite disconnections still occur.
AI-wise, prolly work on hero power -> use weapon/recognise minions with charge (use it to attack during the drop-down turn, not just drop it down then skip a turn) since most of the bot decks are rush deck anyway, so charge is vital imo.
Last edited by tatchan1304; 03-24-2014 at 05:39 AM.
How to start the option that wil play taunts with priority ?
Hero Powers work, you just need to uncomment the lines in the AI code, although it's finicky as there's no way (yet) to tell if the hero power has been used on a turn as far as I know, so if you have 6 mana left over it may try to use the hero power more then once.
Charge minions should work, since the call for attack is after the call for drop minion in the AI. Although I'm unsure if you can prioritize them.
More brainstorming!
A box labeled AI Strategies with a few check buttons.
SmartDefense (prioritize dropping taunts when enemy has over x damage on the board),
Target Buffers (if a good trade exists that gets rid of an enemy buffing type minion aka raid leader, knife juggler, etc)
Target Threats (some overlap with utility like knife jugglers, includes things like demolisher or doomsayer but also tries to trade for enemies 5/3 minions if a good trade exists. Could also include ones that gain in strength like questing adventurer)
Target Utility (takes care of card draw type units, eg kills pagle, 1shot kills acolyte of pain if possible, kills pintsized
Any thoughts?
there are two github pages that are in the OP, one is the source and one is the release, i assume you are looking at the wrong one
https://github.com/HearthstoneBot/He...eBot/releases/
go here to find the releases
I've tested and wolfrider/tundra rhino -> after dropped -> skip turn instead of attacking so yea. About hero power, I think I'll dig into the AI code to see. Any hint on which file/which line?
Hearthstonebot -> LuaScripts -> AI.lua is where all the logic is.
Search "use_hero_power"
you'll see code like:
--[[
local use_hero_power = function()
local hero_power_card = GetCard(HeroPower)
local entity = ConvertCardToEntity(hero_power_card)
local cost = GetCost(entity)
local avaiable_crystals = GetCrystals(OurHero)
if (cost <= avaiable_crystals) then
__csharp_do_attack(hero_power_card)
__critical_pause = true
coroutine.yield()
__csharp_drop_card(hero_power_card, true)
__critical_pause = true
coroutine.yield()
end
end
--]]
take out the --[[ and --]]
and in the turn_start_function
put in "use_hero_power();" somewhere and you'll see it work