New Content - Implemented New path "Actually Ed the Undying"

Yendor

Member
Code:
--------------------
7962	Eye of Ed	456612257	biggem.gif	none	q	0
# Eye of Ed
--------------------
--------------------
7963	ancient amulet	441617955	aamulet.gif	none	q	0
# ancient amulet
--------------------
--------------------
7964	Staff of Fats	620113505	poolcue.gif	weapon	q	0
Staff of Fats	100	Mys: 35	2-handed staff
Staff of Fats	Pool Skill: +5
--------------------

At the start of the level 11 quest, the Staff of Ed is removed from your inventory and replaced with these items.

This replaces the usual diary:
Code:
--------------------
7960	copy of a jerk adventurer's father's diary	745358149	book2.gif	usable	q	0
# copy of a jerk adventurer's father's diary
--------------------

"Could not parse: You gain no hit points" comes up when not gaining HP from sources that would usually give it.
 
Last edited:

Bale

Minion
WTF? Ed is not a class, or is it?

Code:
[COLOR="#808000"]> ash my_class()[/COLOR]

Returned: Ed
primestat => Mysticality

[COLOR="#808000"]> ash $class[Ed][/COLOR]

[COLOR="#FF0000"]Bad class value: "Ed" ()[/COLOR]
Returned: void
 

Veracity

Developer
Staff member
Everything in concoctions.txt is done only by name, so mafia thinks it's crafting the new staff (see 15424 for a band-aid fix to remove generating a debug log). Maybe itemIds can be used there, and we can stop printing warnings when scripts use ints instead of strings for items/etc, and that would be enough? There's probably more to handle than that though.
Concoctions is easy-ish, since it's all items. Look at this:

Code:
gnatloaf	COOK	[2528]	ancient spice
Seems like you could use that same syntax on the LHS of the concoction, too:

Code:
[2325]	COMBINE	headpiece of the Staff of Ed	Staff of Fats
[2325]	COMBINE	Eye of Ed	Staff of Ed, almost
However, later in this thread, there's a comment that at the beginning of Ed's Level 11 quest, the new staff is broken into the same components? And does those combine back in to the new staff? or what?

Other aspects of this duplicate name issue:

items with the same name as other items
items with the same name as effects of skills
familiars?

All of the above have unique item ids, at least, so for modifiers, we could have (some) modifiers listed as item(xxx), effect(xxx), skill(xxx), and familiar(xxx) and when we are looking up modifiers of a particular type, look first for that format and then for just the name.

The big issue is that we have all sorts of places that depend on being able to translate a name in to an item id or effect id. Since AdventureResults have both a name and an id, once properly constructed, they uniquely identify which object they refer to, but when KoL says "You gain an effect: A Little Bit Evil" we cannot determine which one by parsing only the name; we need the descid from the image. Similarly for items - "You acquire an item: xxx" will have a "rel string" associated with it (provided by KoL to make its right-click menu work on acquired items) which has the item #.

I am sure we have at least one Bug Report/Feature Request that discusses this problem. Dealing with it correctly and reliably seems like a fairly complicated project, although we can fix certain aspects of it by putting item numbers in the LHS of concoctions and allowing them in the "create" command, looking up CreateItemRequests via item number, and so on.

This may be the hardest thing to support (without kludges) in this path.
 

heeheehee

Developer
Staff member
The components are new items with the same names, don't combine back, and your task in L11 is to rehide them.

edit: We also have the issue of effects with the same name as other effects -- Chocolate Reign is one thing that comes to mind.
 
Last edited:

heeheehee

Developer
Staff member
One last thing: here's the HTML of the Body Shop, after all parts have been purchased:
Code:
<html><head>
<script language=Javascript>
<!--
if (parent.frames.length == 0) location.href="game.php";
//-->
</script>
<script language=Javascript src="//images.kingdomofloathing.com/scripts/jquery-1.5.1.js"></script>
<script language=Javascript src="//images.kingdomofloathing.com/scripts/keybinds.min.2.js"></script>
<script language=Javascript src="//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="http://images.kingdomofloathing.com/scripts/pop_query.20130705.js"></script>
<script type="text/javascript" src="http://images.kingdomofloathing.com/scripts/ircm.20120523.js"></script>
<script type="text/javascript">
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=a93bee06b11f43f322b6f5fe2670aeb7" 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 + 'inventory.php?action=closetpush&ajax=1&whichitem=IID&qty=NUM&pwd=a93bee06b11f43f322b6f5fe2670aeb7" id="pircm_'+i.id+'"><b>Closet:</b> '+dd+one+']</a>';
if (ss) { contents += da + i.n + db;}
contents += '</div>';
}
one = 'one'; ss=some;
if (i.q==0 && i.g==0 && i.t==1) { shown++; 
contents += dc + 'managestore.php?action=additem&qty1=NUM&item1=IID&price1=&limit1=&ajax=1&pwd=a93bee06b11f43f322b6f5fe2670aeb7" id="pircm_'+i.id+'"><b>Stock in Mall:</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=a93bee06b11f43f322b6f5fe2670aeb7" 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.q==0 && i.t==1) { shown++; 
contents += dc + 'clan_stash.php?action=addgoodies&ajax=1&item1=IID&qty1=NUM&pwd=a93bee06b11f43f322b6f5fe2670aeb7" id="pircm_'+i.id+'"><b>Contribute to Clan:</b> '+dd+one+']</a>';
if (ss) { contents += da + i.n + db;}
contents += '</div>';
}
one = 'one'; ss=some;
if (i.q==0 && i.p==0 && i.u=="q" && i.d==1 && i.t==1) { shown++; 
contents += dc + 'craft.php?action=pulverize&ajax=1&smashitem=IID&qty=NUM&pwd=a93bee06b11f43f322b6f5fe2670aeb7" id="pircm_'+i.id+'"><b>Pulverize:</b> '+dd+one+']</a>';
if (ss) { contents += da + i.n + db;}
contents += '</div>';
}
one = 'one'; ss=some;
if (i.u && i.u != ".") { 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=a93bee06b11f43f322b6f5fe2670aeb7" 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>';
}

	return [contents, shown];
}
var 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 $('#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;
			}
$(top.mainpane.document).find("#effdiv").remove(); if(!window.dontscroll || (window.dontscroll && dontscroll==0)) { window.scroll(0,0);}
			var $eff = $(top.mainpane.document).find('#effdiv');
			if ($eff.length == 0) {
				var d = top.mainpane.document.createElement('DIV');
				d.id = 'effdiv';
				var b = top.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)) {
				top.mainpane.document.location = top.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="//images.kingdomofloathing.com/styles.20150113.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><table  width=95%  cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Underworld Body Shop</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><table border=0><tr><td><img src=http://images.kingdomofloathing.com/adventureimages/jackaldemon.gif><br /> <br /></td><td><p>Lookin' to class up that corporeal body of yours, effendi? I've got just what you need.</p></td></tr></table><p><center>You have <b>38 Ka Coins</b>.<div style="position: relative" id="skt"><table><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/stomach.gif></td><td class="skp"><b>Replacement Stomach</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>30</b>  </td><td><input name='skillid' value='28' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/liver.gif></td><td class="skp"><b>Replacement Liver</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>30</b>  </td><td><input name='skillid' value='29' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Extra Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>5</b>  </td><td><input name='skillid' value='30' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Another Extra Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='31' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Yet Another Extra Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>15</b>  </td><td><input name='skillid' value='32' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Still Another Extra Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='33' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Just One More Extra Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>25</b>  </td><td><input name='skillid' value='34' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/woim.gif></td><td class="skp"><b>Okay Seriously, This is the Last Spleen</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>30</b>  </td><td><input name='skillid' value='35' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/edlegs.gif></td><td class="skp"><b>Upgraded Legs</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='36' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/edarms.gif></td><td class="skp"><b>Upgraded Arms</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='37' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/clspine.gif></td><td class="skp"><b>Upgraded Spine</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='38' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/hskin.gif></td><td class="skp"><b>Tougher Skin</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='39' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/chitinpod.gif></td><td class="skp"><b>Armor Plating</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='40' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/spikebone.gif></td><td class="skp"><b>Bone Spikes</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='41' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/spine.gif></td><td class="skp"><b>Arm Blade</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='42' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/chocscarab.gif></td><td class="skp"><b>Healing Scarabs</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='43' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/henna.gif></td><td class="skp"><b>Elemental Wards</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>10</b>  </td><td><input name='skillid' value='44' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/henna.gif></td><td class="skp"><b>More Elemental Wards</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='45' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/henna.gif></td><td class="skp"><b>Even More Elemental Wards</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>30</b>  </td><td><input name='skillid' value='46' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr><tr><td class=skp><img src=http://images.kingdomofloathing.com/itemimages/edlegs.gif></td><td class="skp"><b>More Legs</b></td><td><img src="http://images.kingdomofloathing.com/itemimages/kacoin.gif" width="30" height="30" onclick="javascript:descitem(826932303)" alt="Ka coin" title="Ka coin"></td><td><b>20</b>  </td><td><input name='skillid' value='48' type='hidden' /><input type='button' class='button disabled' disabled value='Already Purchased' /></td></tr></table></div>
<p>
<form method="post" action="choice.php">
   <input name="pwd" value="a93bee06b11f43f322b6f5fe2670aeb7" type="hidden" />
   <input name="option" value="2" type="hidden" />
   <input name="whichchoice" value="1052" type="hidden" />
   <input type="submit" class="button" value="Back to the Underworld" />
</form>
</center>
<script>
jQuery(function ($) {
  var last;
  $('.skp').click(function () {
     last = this;
     var id = $(this).parents('tr:first').find('input[name="skillid"]').val();
     id = parseInt(id) + 17000;
     var url = '/desc_skill.php?skillz=1&whichskill='+id;
     poop(url,"skill", 350, 300);
  });
  $('.skp').css('cursor','pointer');
});
</script>
</body></html>
 

lostcalpolydude

Developer
Staff member
WTF? Ed is not a class, or is it?

Code:
[COLOR="#808000"]> ash my_class()[/COLOR]

Returned: Ed
primestat => Mysticality

[COLOR="#808000"]> ash $class[Ed][/COLOR]

[COLOR="#FF0000"]Bad class value: "Ed" ()[/COLOR]
Returned: void

15433
 

Veracity

Developer
Staff member
The compact sidepane should have your current servant and should let you switch among your currently revived ones. I guess that will require knowing which ones you've called back.
I'm working on this, using EdServantData, like FamiliarData or PastaThrallData.
 

Veracity

Developer
Staff member
Revision 15436 adds your current servant to the compact sidepane and lets you switch among the ones you have called via a popup menu. It lists the Level of the servant, but we don't yet increment experience/level when you win a fight. I'll work on that tomorrow.
 

Bale

Minion
Are you working on the ash functions:
  • int servant_weight( servant)
  • boolean have_servant( servant )
  • servant my_servant( )
  • boolean use_servant( servant)

'Cause I've got use for some of those as well as the proxy field servant.name :)
 

unponderable

New member
Hello, I had a suggestion/feature request for Ed path. When you get beaten up in combat, can you add a short, second [link] that tells Mafia to parse through the defeat/heal text and automatically jump back into combat again? It would be very much appreciated when I am manually farming for Ka coins.
 

Bale

Minion
Hello, I had a suggestion/feature request for Ed path. When you get beaten up in combat, can you add a short, second [link] that tells Mafia to parse through the defeat/heal text and automatically jump back into combat again? It would be very much appreciated when I am manually farming for Ka coins.

An option to skip through the underworld and return to combat would be a wonderfully convenient feature.

That would require KoLmafia to keep track of number of times you've died in that particular combat so that it would know if the resurrection requires the expenditure of Ka. That number should also be made accessible to the scripter so that automation scripts could decide on resurrection.
 

Ezandora

Member
That would require KoLmafia to keep track of number of times you've died in that particular combat so that it would know if the resurrection requires the expenditure of Ka. That number should also be made accessible to the scripter so that automation scripts could decide on resurrection.

Related: api.php reports "limitmode":"edunder" when you're in the underworld. Though only after you click through the Like a Bat Into Hell non-combat.
 

Veracity

Developer
Staff member
Are you working on the ash functions:
  • int servant_weight( servant)
  • boolean have_servant( servant )
  • servant my_servant( )
  • boolean use_servant( servant)

'Cause I've got use for some of those as well as the proxy field servant.name :)
I based the EdServantData on the PastaThrallData - including strings for the L1, L7, L14, and L21 powers and the image name and such - so it would be easy enough to have a $servant data type. I wouldn't do servant_weight; aside from the fact that it is called "level", with new data types, I think I want proxy fields rather than accessor functions. So, servant.level.
 

lostcalpolydude

Developer
Staff member
Hello, I had a suggestion/feature request for Ed path. When you get beaten up in combat, can you add a short, second [link] that tells Mafia to parse through the defeat/heal text and automatically jump back into combat again? It would be very much appreciated when I am manually farming for Ka coins.

Hopefully KoL will add that.
 

Bale

Minion
I based the EdServantData on the PastaThrallData - including strings for the L1, L7, L14, and L21 powers and the image name and such - so it would be easy enough to have a $servant data type. I wouldn't do servant_weight; aside from the fact that it is called "level", with new data types, I think I want proxy fields rather than accessor functions. So, servant.level.

That would make me very happy!
 

Veracity

Developer
Staff member
Revision 15440 adds some CLI commands:

servants - lists all possible Ed servants, with the 4 level-dependant abilities, and for those you have called into service, name, level, and XP
servant - list the status of your current servant
servant TYPE - switches to the servant of the specified type

For now, you have to use the official TYPE name - capitalization and all. I expect I'll allow fuzzy matching, lower case, and what have you, when I add the $servant data type to ASH.
 

Veracity

Developer
Staff member
Revision 15441 adds the $servant data type to ASH and the following functions to manipulate them:

int to_int( servant )
servant to_servant( int )
servant to_servant( string )
servant my_servant()
boolean have_servant( servant )
boolean use_servant( servant )

Additionally, it has the following proxy fields:

int id
string name
int level
int experience
string image,
string level1_ability
string level7_ability
string level14_ability
string level21_ability

And, as I predicted, the "servant TYPE" CLI command now does fuzzy matching on TYPE and can distinguish between "unrecognizable type" and "you don't have one of those."
 
Last edited:
Top