Bug - Fixed First combat action ignored when using adv1()/adventure() macros.

Ezandora

Member
r18016

This may be a KOL bug, but I'm documenting it here. I haven't reported it in-game.

The first combat action taken in a macro, passed into adv1() or adventure(), will be skipped.

Running this command will not olfact crates:
Code:
> ashq adv1($location[noob cave], 0, "skill 19; runaway; repeat;");

Visit to Mountain: Noob Cave in progress...

[335] Noob Cave
Encounter: crate
Strategy: helix fossil [default]
Round 0: Ezandora wins initiative!
Round 0: Ezandora casts TRANSCENDENT OLFACTION!
Round 1: Ezandora casts RETURN!

Requests complete.

> ash $effect[on the trail].have_effect()

Returned: 0
Note that mafia believes olfaction happened, but it did not. The game's response does include "<!-- macroaction: skill 19 -->" in the HTML, but no attempt to cast olfaction occurs.

This bug can also be triggered via other commands:
Code:
ashq adv1($location[noob cave], 0, "runaway; attack;");
ashq adventure(1, $location[noob cave], "skill 19; runaway; repeat;");

Seemingly, conditionals aren't affected. It's the first action, not first conditional, that the game skips:
Code:
> ashq adventure(1, $location[noob cave], "if monstername crate; skill 19; endif; runaway; repeat;");

Visit to Mountain: Noob Cave in progress...

[343] Noob Cave
Encounter: crate
Strategy: helix fossil [default]
Round 0: Ezandora wins initiative!
Round 0: Ezandora casts TRANSCENDENT OLFACTION!
Round 1: Ezandora casts RETURN!

Requests complete.

> ash $effect[on the trail].have_effect()

Returned: 0

If I manually load adventure.php then submit the macro to fight.php myself, the bug does not occur:
Code:
> ashq visit_url("adventure.php?snarfblat=240");

[339] Noob Cave
Encounter: crate
Round 0: Ezandora wins initiative!

> ashq visit_url("fight.php?action=macro&macrotext=" + url_encode("skill 19; runaway; repeat;"), true, true);

Round 1: Ezandora executes a macro!
Round 1: Ezandora casts TRANSCENDENT OLFACTION!
You acquire an effect: On the Trail (40)
Round 2: Ezandora casts RETURN!


I believe this is because adventure() loads URLs in a slightly different way, as part of the adventure.php redirect:
Code:
Requesting: https://www.kingdomofloathing.com/adventure.php?snarfblat=240
Retrieved: https://www.kingdomofloathing.com/adventure.php?snarfblat=240
Field: null = [HTTP/1.1 302 Moved Temporarily]
Field: Location = [fight.php?ireallymeanit=1494283352]

Requesting: https://www.kingdomofloathing.com/fight.php?ireallymeanit=1494283352&action=macro&macrotext=skill+19%3Brunaway%3Brepeat%3B

adventure.php redirects to "fight.php?ireallymeanit=1494283352". Mafia does not strictly follow that redirect - it also submits macro text along with it. The game then executes the macro, but with the first action skipped.
 

Veracity

Developer
Staff member
I'll look at this this weekend, unless somebody has time/interest to look at it before then.
 

Veracity

Developer
Staff member
Revision 18023 will follow the initial redirect with ireallymeanit before starting the fight automation.

A pity, since macrofying the original redirect saved a server hit.
 
Top