Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

Mulligan phase - Internal error occurred
Jeetje
#1 Posted : Tuesday, April 17, 2018 7:20:16 AM(UTC)
Rank: Member

Groups: Registered
Posts: 10

Thanks: 3 times
Was thanked: 3 time(s) in 3 post(s)
Ever since April 15th 10:36 CET (or so I discovered today from the logs) I'm getting a "TransitStateMachineFromStartingHand - internal error occurred." during the mulligan phase, leading to the bot not performing the mulligan as specified in the particular CustomConfig folder.

At first I thought it was related to the inclusion of Baku in an Odd deck, but this happens with new decks as well as with decks that used to work fine previously (like SilverHand paladin that ran me to rank 5).

I updated from 10.6.0.0 to 10.6.1.0, but that didn't help either. Next I did a full download of HearthRanger using the Launcher, didn't help. I'm at a loss now.

The logs read mainly error messages like these:

11: 41: 48: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and0.
11: 41: 51: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and0.
11: 41: 53: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and0.
11: 47: 49: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and0.
11: 47: 51: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and0.
11: 53: 35: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and1.
11: 53: 38: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and1.
11: 53: 40: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and1.
12: 03: 38: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and1.
12: 03: 41: ERROR :: 7fcfb904-212d-41ec-8719-744f82228cb3 - Syntax error: missing operand after the operator and1.

Hope this helps, the bot really is a timesaver!
JoyAdmin
#2 Posted : Tuesday, April 17, 2018 10:48:05 PM(UTC)
Rank: Administration

Groups: Administrators
Posts: 4,845

Thanks: 805 times
Was thanked: 4538 time(s) in 1636 post(s)
There is syntax error in your Mulligan.json file.
1 user thanked JoyAdmin for this useful post.
Jeetje on 4/18/2018(UTC)
Jeetje
#3 Posted : Wednesday, April 18, 2018 7:37:42 AM(UTC)
Rank: Member

Groups: Registered
Posts: 10

Thanks: 3 times
Was thanked: 3 time(s) in 3 post(s)
Mmm, are you sure?

I've tried this with very old Mulligan files as well (nothing changed since 20 FEB 2018) and they also give the same internal logic error, whereas the oldest error logs are from April 15th

Can you give me a hint of what type of syntax error I need to be on the lookout for?

Edit: Found a number of old Mulligan files that still work correctly, debugging the faulty files now.

Edit2: Got the culprit, it is the following rule to hold a Blood Knight in a favorable position

Quote:
{
       "comment": "hold Blood Knight (EX1_590) with coin and Argent Squire (EX1_008), Righteous Protector (ICC_038), Wax Elemental (LOOT_117), Shielded Minibot (GVG_058), Purifier's Maul (LOOT_286)",
         "mulligan":"EX1_590",
         "condition": "my_hand(count()) == 4 and my_hand(count(),cardid=EX1_008|ICC_038|LOOT_117|GVG_058|LOOT_286t4) > 0",
         "value":"hold",
}


I believe this used to work until recently (April 15th); using either part of the condition (in bold) returns no error, but combining them gives the internal error occurred message. changing it into

Quote:
         "condition": "coin and my_hand(count(),cardid=EX1_008|ICC_038|LOOT_117|GVG_058|LOOT_286t4) > 0",


doesn't work either, so I've found a workaround by rephrasing the rule to

Quote:
         "mulligan":"EX1_590 + GAME_005",
         "condition": "my_hand(count(),cardid=EX1_008|ICC_038|LOOT_117|GVG_058|LOOT_286t4) > 0",


and that works!
JoyAdmin
#4 Posted : Wednesday, April 18, 2018 11:33:50 PM(UTC)
Rank: Administration

Groups: Administrators
Posts: 4,845

Thanks: 805 times
Was thanked: 4538 time(s) in 1636 post(s)
{
"comment": "hold Blood Knight (EX1_590) with coin and Argent Squire (EX1_008), Righteous Protector (ICC_038), Wax Elemental (LOOT_117), Shielded Minibot (GVG_058), Purifier's Maul (LOOT_286)",
"mulligan":"EX1_590",
"condition": "my_hand(count()) == 4 and my_hand(count(),cardid=EX1_008|ICC_038|LOOT_117|GVG_058|LOOT_286t4) > 0",
"value":"hold",
}

and is case sensitive, it should be:

AND

{
"comment": "hold Blood Knight (EX1_590) with coin and Argent Squire (EX1_008), Righteous Protector (ICC_038), Wax Elemental (LOOT_117), Shielded Minibot (GVG_058), Purifier's Maul (LOOT_286)",
"mulligan":"EX1_590",
"condition": "my_hand(count()) == 4 AND my_hand(count(),cardid=EX1_008|ICC_038|LOOT_117|GVG_058|LOOT_286t4) > 0",
"value":"hold",
}

we'll add lower case support in next update.


1 user thanked JoyAdmin for this useful post.
Jeetje on 4/21/2018(UTC)
Jeetje
#5 Posted : Saturday, April 21, 2018 5:10:34 AM(UTC)
Rank: Member

Groups: Registered
Posts: 10

Thanks: 3 times
Was thanked: 3 time(s) in 3 post(s)
Thanks for the feedback, I'll keep that in mind!

One suggestion though: is it possible to describe the Vision AI scripting language and especially the effect on the engine in a bit more detail? E.g. I'm currently using dynamic values based on board state, like for Hydrologist:

Quote:
"OnDiscoverCardBonus":
{
"values":
[
{
"comment":"choose Getaway Kodo with Taunt minions on board if opponent can outdamage the Taunt minions",
"condition": "my_discover(count(),cardid=CFM_800) > 0 AND my_minions(count(),taunt=true) > 0",
"value":"(opp_minions(max(attack)) - my_minions(min(health),taunt=true)) * (opp_minions(sum(attack)) - my_minions(sum(health),taunt=true))",
},
{
"comment":"choose Getaway Kodo without Taunt minions on board if one or more key creatures will get killed",
"condition": "my_discover(count(),cardid=CFM_800) > 0 AND my_minions(count(),taunt=true) == 0 AND my_minions(count()) > 0",
"value":"(opp_minions(min(attack)) - my_minions(min(health))) * 2",
},
{
"comment":"choose Getaway Kodo without any minions on board based on number of minions with battlecry in hand for a repeated cast",
"condition": "my_discover(count(),cardid=CFM_800) > 0 AND my_hand(count(),minion=true,battlecry=true) > 0",
"value":"(opp_minions(min(attack)) - my_hand(min(health),minion=true,battlecry=true)) * 2",
},
{
"comment":"choose Noble Sacrifice with Taunt minions on board if opponent cannot outdamage the Taunt minions",
"condition": "my_discover(count(),cardid=EX1_130) > 0 AND my_minions(count(),taunt=true) > 0",
"value":"(opp_minions(max(attack)) - my_minions(min(health),taunt=true) + 2) * (my_minions(sum(health),taunt=true) - opp_minions(sum(attack)))",
},
{
"comment":"choose Noble Sacrifice without Taunt minions on board if all creatures can get killed",
"condition": "my_discover(count(),cardid=EX1_130) > 0 AND my_minions(count(),taunt=true) == 0 AND my_minions(count()) > 0",
"value":"(opp_minions(sum(attack)) - my_minions(sum(health)) + 2) * 2",
},
{
"comment":"choose Noble Sacrifice without any minions on board based on number of minions without battlecry in hand",
"condition": "my_discover(count(),cardid=EX1_130) > 0 AND my_hand(count(),minion=true,battlecry=false) > 0",
"value":"(opp_minions(sum(attack)) - my_hand(min(health),minion=true,battlecry=false)) * 2",
},
{
"comment":"choose Repentance rarely against classes without big creatures ",
"condition": "my_discover(count(),cardid=EX1_379) > 0 AND opp_hero(count(),hero_class=mage | paladin | rogue) > 0 ",
"value":"opp_hero(turn())",
},
{
"comment":"choose Repentance against classes with big creatures ",
"condition": "my_discover(count(),cardid=EX1_379) > 0 AND opp_hero(count(),hero_class=druid | hunter | shaman | warlock | warrior | priest) > 0 ",
"value":"opp_hero(turn()) * 2",
},
{
"comment":"choose Eye for an Eye rarely against classes that do not have burst capacity ",
"condition": "my_discover(count(),cardid=EX1_132) > 0 AND opp_hero(count(),hero_class=paladin | rogue | shaman | priest) > 0 ",
"value":"opp_minions(max(attack)) + (opp_hero(turn()) - 2)",
},
{
"comment":"choose Eye for an Eye against classes that have burst capacity ",
"condition": "my_discover(count(),cardid=EX1_132) > 0 AND opp_hero(count(),hero_class=mage | druid | hunter | warlock | warrior) > 0 ",
"value":"opp_minions(max(attack)) + (opp_hero(turn()) - 2) ^ 2",
},
{
"comment":"choose Redemption against classes with boards that cannot kill my minion(s) in the same turn ",
"condition": "my_discover(count(),cardid=EX1_136) > 0 AND opp_heropower(count(),hero_class=paladin | hunter | warlock | priest) > 0 ",
"value":"my_minions(sum(health),taunt=true) - opp_minions(max(attack)) - (my_minions(count()) - opp_minions(count())) ",
},
{
"comment":"choose Redemption very rarely against classes that can easily kill the minion in the same turn ",
"condition": "my_discover(count(),cardid=EX1_136) > 0 AND opp_heropower(count(),hero_class=mage | rogue | druid | shaman | warrior) > 0 ",
"value":"1",
}



but I have no clue whether that is actually supported.
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Powered by YAF | YAF © 2003-2011, Yet Another Forum.NET
This page was generated in 0.090 seconds.