Bug - Fixed infinite loop encounter in skeleton store

taltamir

Member
using mafia automation in the skeleton store will cause infinite loop after you have already killed the skeleton store owner.
choice adventure is set to "fight former owner of the skeleton store, with office key"

Code:
[1200] The Skeleton Store
Encounter: Temporarily Out of Skeletons
Encounter:     Temporarily Out of Skeletons
Encounter: Temporarily Out of Skeletons
Encounter:     Temporarily Out of Skeletons
Encounter: Temporarily Out of Skeletons
it keeps repeating this

aborting the above and manually clicking the option mafia is trying to use gives
Code:
You've already dealt with the manager.
debug log snippet
Code:
<html><head><script language=Javascript><!--if (parent.frames.length == 0) location.href="game.php";top.charpane.location.href="charpane.php";//--></script><script language=Javascript src="https://s3.amazonaws.com/images.kingdomofloathing.com/scripts/jquery-1.5.1.js"></script><script language=Javascript src="https://s3.amazonaws.com/images.kingdomofloathing.com/scripts/keybinds.min.2.js"></script><script language=Javascript src="https://s3.amazonaws.com/images.kingdomofloathing.com/scripts/window.20111231.js"></script><script language="javascript">function chatFocus(){if(top.chatpane.document.chatform.graf) top.chatpane.document.chatform.graf.focus();}if (typeof defaultBind != 'undefined') { defaultBind(47, 2, chatFocus); defaultBind(190, 2, chatFocus);defaultBind(191, 2, chatFocus); defaultBind(47, 8, chatFocus);defaultBind(190, 8, chatFocus); defaultBind(191, 8, chatFocus); }</script><script>function switchFocus(){if (top.chatpane.document.chatform.graf.focus)top.chatpane.document.chatform.graf.focus();return false;}function repeat(){var linx = document.getElementsByTagName("A");for (var i = 0; i < linx.length; i++){if (typeof timersfunc != 'undefined') {if (!timersfunc()) {return;}timersfunc = null;}var link = linx[i];if (link.innerHTML.match(/Adventure Again/) || link.innerHTML.match(/Do it again/))location.href = link.href;}}defaultBind(47, CTRL, switchFocus);defaultBind(191, CTRL, switchFocus);defaultBind(47, META, switchFocus);defaultBind(191, META, switchFocus);defaultBind(192, NONE, repeat);defaultBind(220, NONE, repeat);</script><script language="javascript">function updateParseItem(iid, field, info) {var tbl = $('#ic'+iid);var data = parseItem(tbl);if (!data) return;data[field] = info;var out = [];for (i in data) {if (!data.hasOwnProperty(i)) continue;out.push(i+'='+data[i]);}tbl.attr('rel', out.join('&'));}function parseItem(tbl) {tbl = $(tbl);var rel = tbl.attr('rel');var data = {};if (!rel) return data;var parts = rel.split('&');for (i in parts) {if (!parts.hasOwnProperty(i)) continue;var kv = parts[i].split('=');tbl.data(kv[0], kv[1]);data[kv[0]] = kv[1];}return data;}</script><script type="text/javascript" src="https://s3.amazonaws.com/images.kingdomofloathing.com/scripts/pop_query.20130705.js"></script><script type="text/javascript" src="https://s3.amazonaws.com/images.kingdomofloathing.com/scripts/ircm.20161111.js"></script><script type="text/javascript">var tp = top;function pop_ircm_contents(i, some) {var contents = '',shown = 0,da = ' <a href="#" rel="?" class="small dojaxy">[some]</a> <a href="#" rel="',db = '" class="small dojaxy">[all]</a>',dc = '<div style="width:100%; padding-bottom: 3px;" rel="',dd = '<a href="#" rel="1" class="small dojaxy">[';one = 'one'; ss=some;if (i.d==1 && i.s>0) { shown++;contents += dc + 'sellstuff.php?action=sell&ajax=1&type=quant&whichitem%5B%5D=IID&howmany=NUM&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>Auto-Sell ('+i.s+' meat):</b> '+dd+one+']</a>';if (ss) { contents += da + i.n + db;}contents += '</div>';}one = 'one'; ss=some;if (i.q==0) { shown++;contents += dc + 'managecollection.php?action=put&ajax=1&whichitem1=IID&howmany1=NUM&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>Add to Display Case:</b> '+dd+one+']</a>';if (ss) { contents += da + i.n + db;}contents += '</div>';}one = 'one'; ss=some;if (i.u && i.u != "." && !i.ac) { shown++;contents += dc + 'inv_'+(i.u=="a"?"redir":(lab=(i.u=="u"?"use":(i.u=="e"?"eat":(i.u=="b"?"booze":(i.u=="s"?"spleen":"equip"))))))+'.php?ajax=1&whichitem=IID&itemquantity=NUM&quantity=NUM'+(i.u=="q"?"&action=equip":"")+'&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>'+ucfirst(unescape(i.ou ? i.ou.replace(/\+/g," ") : (lab=="booze"?"drink":lab)))+':</b> '+dd+one+']</a>';if (ss && i.u != 'q' && !(i.u=='u' && i.m==0)) { contents += da + i.n + db;}contents += '</div>';}one = 'one'; ss=some;if (i.u && i.u != "." && i.ac) { shown++;contents += dc + 'inv_equip.php?slot=1&ajax=1&whichitem=IID&action=equip&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>Equip (slot 1):</b> '+dd+one+']</a>';if (ss && i.u != 'q' && !(i.u=='u' && i.m==0)) { contents += da + i.n + db;}contents += '</div>';}one = 'one'; ss=some;if (i.u && i.u != "." && i.ac) { shown++;contents += dc + 'inv_equip.php?slot=2&ajax=1&whichitem=IID&action=equip&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>Equip (slot 2):</b> '+dd+one+']</a>';if (ss && i.u != 'q' && !(i.u=='u' && i.m==0)) { contents += da + i.n + db;}contents += '</div>';}one = 'one'; ss=some;if (i.u && i.u != "." && i.ac) { shown++;contents += dc + 'inv_equip.php?slot=3&ajax=1&whichitem=IID&action=equip&pwd=c9f11fd972c32f87db1e5ec7f18bb843" id="pircm_'+i.id+'"><b>Equip (slot 3):</b> '+dd+one+']</a>';if (ss && i.u != 'q' && !(i.u=='u' && i.m==0)) { contents += da + i.n + db;}contents += '</div>';}return [contents, shown];}tp=topvar todo = [];function nextAction() {var next_todo = todo.shift();if (next_todo) {eval(next_todo);}}function dojax(dourl, afterFunc, hoverCaller, failureFunc, method, params) {$.ajax({type: method || 'GET', url: dourl, cache: false,data: params || null,global: false,success: function (out) {nextAction();if (out.match(/no\|/)) {var parts = out.split(/\|/);if (failureFunc) failureFunc(parts[1]);else if (window.dojaxFailure) window.dojaxFailure(parts[1]);else if (tp.chatpane.handleMessage) tp.chatpane.handleMessage({type: 'event', msg: 'Oops!  Sorry, Dave, you appear to be ' + parts[1]});else  $('#ChatWindow').append('<font color="green">Oops!  Sorry, Dave, you appear to be ' + parts[1] + '.</font><br />' + "\n");return;}if (hoverCaller)  {float_results(hoverCaller, out);if (afterFunc) { afterFunc(out); }return;}$(tp.mainpane.document).find("#effdiv").remove(); if(!window.dontscroll || (window.dontscroll && dontscroll==0)) { window.scroll(0,0);}var $eff = $(tp.mainpane.document).find('#effdiv');if ($eff.length == 0) {var d = tp.mainpane.document.createElement('DIV');d.id = 'effdiv';var b = tp.mainpane.document.body;if ($('#content_').length > 0) {b = $('#content_ div:first')[0];}b.insertBefore(d, b.firstChild);$eff = $(d);}$eff.find('a[name="effdivtop"]').remove().end().prepend('<a name="effdivtop"></a><center>' + out + '</center>').css('display','block');if (!window.dontscroll || (window.dontscroll && dontscroll==0)) {tp.mainpane.document.location = tp.mainpane.document.location + "#effdivtop";}if (afterFunc) { afterFunc(out); }}});}</script><script>var currentkey = 49;$(document).ready(function () {$('form').each(function () {var form = this;defaultBind(currentkey++, NONE, function () { form.submit(); });return currentkey < 58;});});</script>	<link rel="stylesheet" type="text/css" href="https://s3.amazonaws.com/images.kingdomofloathing.com/styles.20151006.css"><style type='text/css'>.faded {zoom: 1;filter: alpha(opacity=35);opacity: 0.35;-khtml-opacity: 0.35;-moz-opacity: 0.35;}</style></head><body><Center><div id="results"><!--faaaaaaart--><table  width=95%  cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Results:</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><span class='guts'>You've already dealt with the manager.</span></td></tr></table></center></td></tr><tr><td height=4></td></tr></table></div><centeR><table  width=95%  cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Temporarily Out of Skeletons</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><center><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/adventureimages/skeletonstore.gif" width=100 height=100></center><p>You find a rare moment's peace in the skeleton store, and pause to catch your breath.  As you're catching your breath, several things catch your eye.<p>There's a cash register (made of bones) on the counter, a treasure chest (made of bones) on a nearby shelf, and a pile of bones (made of cheese<super>*</super>) on the floor.<p>You could also check out the manager's office, now that you've got the key to it.<p><super>*</super>Not really.  The pile of bones is obviously made of bones.<center><form style='margin: 0px 0px 0px 0px;' name=choiceform1 action=choice.php method=post><input type=hidden name=pwd value='c9f11fd972c32f87db1e5ec7f18bb843'><input type=hidden name=whichchoice value=1060><input type=hidden name=option value=1><input  class=button type=submit value="Check out the cash register"></form><p><form style='margin: 0px 0px 0px 0px;' name=choiceform2 action=choice.php method=post><input type=hidden name=pwd value='c9f11fd972c32f87db1e5ec7f18bb843'><input type=hidden name=whichchoice value=1060><input type=hidden name=option value=2><input  class=button type=submit value="Open the chest"></form><p><form style='margin: 0px 0px 0px 0px;' name=choiceform3 action=choice.php method=post><input type=hidden name=pwd value='c9f11fd972c32f87db1e5ec7f18bb843'><input type=hidden name=whichchoice value=1060><input type=hidden name=option value=3><input  class=button type=submit value="Break the bones"></form><p><form style='margin: 0px 0px 0px 0px;' name=choiceform4 action=choice.php method=post><input type=hidden name=pwd value='c9f11fd972c32f87db1e5ec7f18bb843'><input type=hidden name=whichchoice value=1060><input type=hidden name=option value=4><input  class=button type=submit value="Head into the manager's office"></form><p></center></td></tr></table></center></td></tr><tr><td height=4></td></tr></table></center><!--faaaaaaart--><script>top.charpane.location.href="charpane.php";</script></body></html>
 

taltamir

Member
Note, the above occurs after killing him, then NOT going to finish the quest by reporting to the meatsmith, then encountering the skeleton store noncombat a second time.

If you go to the meatsmith to report killing the skeleton store owner, then the option to fight the owner will not show up again in the NC.
 

Darzil

Developer
What is the value of "questM23Meatsmith" when this happens?

Perhaps issue is that it isn't setting to step 1 when you get the check, as it looks like the code to protect if step 1 or finished is present:

Code:
		case 1060:
			// Temporarily Out of Skeletons
			if ( decision.equals( "4" ) && QuestDatabase.isQuestLaterThan( Quest.ARMORER, QuestDatabase.STARTED ) )
			{
				// Can only fight owner til defeated
				return "0";
			}
			return decision;
 

taltamir

Member
r18994 - untested
tested, it works. thank you

From gCLI (I also have a full debug log... but since it works I imagine it is unneeded)
Code:
[276] The Skeleton Store
Encounter: Temporarily Out of Skeletons
Encounter:     the former owner of the Skeleton Store
Round 0: taltamir wins     initiative!
Round 1: taltamir executes a macro!
Round 1: taltamir     casts MICROMETEORITE!
Round 2: the former owner of the Skeleton Store     drops 2 attack power.
Round 2: the former owner of the Skeleton Store     drops 2 defense.
Round 2: taltamir casts SAUCESTORM!
Round 3: the     former owner of the Skeleton Store takes 151 damage.
Round 3: the     former owner of the Skeleton Store takes 302 damage.
Round 3: taltamir     wins the fight!
between those 2 snippets there were 4 regular combat encounters
Code:
Request 7 of 8 (Town: The Skeleton Store) in progress...

[280] The     Skeleton Store
Encounter: Temporarily Out of Skeletons
[COLOR=red]Manual     control requested for choice #1060[/COLOR]
[B]choice 1[/B]: Check out     the cash register (gain office key, then ~35 meat)
[B]choice 2[/B]:     Open the chest (gain ring of telling skeletons what to do, then 300 meat,     with skeleton key)
[B]choice 3[/B]: Break the bones (gain muscle stats)
[B]choice     4[/B]: Head into the manager's office (fight former owner of the Skeleton     Store, with office key)
[URL="https://kolmafia.us/main.php"]Click     here to continue in the relay browser.[/URL]

well, it works if I win the fight. No idea what happens if I lose the fight the first time I encounter the skeleton store owner. Does it check for killing him or encountering him? either way, it won't get stuck in an infinite loop anymore.
 
Last edited:
Top