New Content - Implemented You, Robot - Spring Challenge Path

r20658 should address all the bugs I've seen in the thread but please post if you've got a bug that is still present
 
With r20662 and the latest update to Monster Manuel:
Code:
Manuel says that 'Lord Cyberraven' (2205) has unrecognized image 'roboss_spooky.gif'
Manuel says that 'Tobias J. Saibot' (2204) 'Never wins initiative', but KoLmafia says it is 0
 
With r20662 and the latest update to Monster Manuel:
Code:
Manuel says that 'Lord Cyberraven' (2205) has unrecognized image 'roboss_spooky.gif'
Manuel says that 'Tobias J. Saibot' (2204) 'Never wins initiative', but KoLmafia says it is 0
Update monster.txt:
image for Lord Cyberraven to roboss_spooky.gif
initiative for Tobias J Saibot to -10000
 

Attachments

r25757 mafia does not track adventures in you robot.
Code:
> ash my_adventures()

Returned: 0
no matter how many adv I have

Mafia also removed the Adv counter from the sidepanel on the mafia GUI.
I am guessing someone saw on the wiki that you start with / get 40 energy per day instead of adv and assumed that this means that you adventure with energy instead?
 
Last edited:
r25757 I am getting tons of unexpected errors in mafia.

activate the chronolith
Code:
Activating the Chronolith
You gain 10 Adventures
Preference    _chronolithActivations changed from 2 to 3
Unexpected error, debug log    printed.
Unexpected error, debug log printed.

collect energy
Code:
[2] Collecting energy
You gain 21 Energy
Preference _energyCollected    changed from 1 to 2
Unexpected error, debug log printed.
Unexpected    error, debug log printed.

refresh all
Code:
> refresh all

Unexpected error, debug    log printed.
Unexpected error, debug log printed.
Refreshing session    data...
Synchronizing moon data...
Retrieving character data...
Unexpected    error, debug log printed.
Updating inventory...
Examining Meat in    closet...
Updating closet...
Retrieving quest data...
Retrieving    familiar data...
Familiar data retrieved.
Unexpected error, debug    log printed.
Examining Meat and pulls in storage...
Updating    storage...
You are not currently a member of a clan.
Seeing what's    still unrestricted today...
Done checking allowed items.
Session    data refreshed.
Unexpected error, debug log printed.

pulling an item
Code:
[INFO] Trying to pull 1 of mafia thumb ring
Pulling     items from storage...
Unexpected error, debug log printed.

breakfast and starting some quests
Code:
Time for breakfast.
Created an empty     checkpoint.
Preference breakfastCompleted changed from false to true
Unexpected     error, debug log printed.
Unexpected error, debug log printed.
Unexpected     error, debug log printed.

Visiting the pretentious artist

Visiting     the pretentious artist
Preference questM02Artist changed from unstarted     to started
Unexpected error, debug log printed.
Unexpected error,     debug log printed.

Visiting the pretentious artist
Submitting     option 1 for choice 1059
Preference questM23Meatsmith changed from     unstarted to started
Unexpected error, debug log printed.
Unexpected     error, debug log printed.
Submitting option 1 for choice 1064
Preference     questM24Doc changed from unstarted to started
Unexpected error, debug     log printed.
Unexpected error, debug log printed.
Submitting option     1 for choice 1065
Preference questM25Armorer changed from unstarted to     started
Unexpected error, debug log printed.
Unexpected error, debug     log printed.
 

Attachments

Last edited:
Trying to manually adventure (via clicking it with the mouse in relay browser) in spooky forest fails with "the connection was reset" error
Code:
Preference nextAdventure changed from The Castle in the Clouds in the Sky    (Basement) to The Spooky Forest
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.

outskirts of cobb's knob too
Code:
Preference nextAdventure changed from The Degrassi Knoll Garage to The    Outskirts of Cobb's Knob
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.

degrassi knoll restroom too
Code:
Preference nextAdventure changed from The    Outskirts of Cobb's Knob to The Degrassi Knoll Restroom
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.
Unexpected    error, debug log printed.
Unexpected error, debug log printed.

note that despite the same name as the debug log above. it is completely separate. as I deleted each one after submitting it.
note I have tried this multiple times with the same effect
 

Attachments

Last edited:
feature request 1:
a lot of paths have a point counter that counts how many ascension points you got for that path. 1 per softcore 2 per hardcore (is usually the case. although some paths give 1 per ascension regardless of hardcore or softcore. but in this case it is 1 soft +2 hard). the cap for you robot is 37 points

something similar to these
jarlsbergPoints
noobPoints
plumberPoints
quantumPoints
sneakyPetePoints
sourcePoints
zombiePoints

feature request 2:
it would be great if there was a counter that checked how many times you collected scrap today.
while there is no effect on quantity or cost the way the other things in scrapheap do. There is a 1st collection of the day bonus (equal to ascension points * 3) that you would want to grab
 
Last edited:
So. turns out that
_chronolithActivations
does not track how many times you used chronolith today. instead it counts the "extra price".
that is price is 10 + _chronolithActivations

after 37 uses it went and jumped
Code:
Activating the Chronolith You gain 10 Adventures Preference _chronolithActivations changed from 37 to 86
and looking at it kol is saying it will cost 96 energy to use.

The name is somewhat misleading.
maybe split this into actual activation tracker and a price tracker?
 
Last edited:
There are tracking issues with
youRobotCPUUpgrades

these are the available CPU upgrades you can buy
Code:
//CPU Upgrades
1. [Leverage Coprocessing] = +15 Buffed Muscle. costs 30 energy.
2. [Dynamic Arcane Flux Modeling] = +15 Buffed Mysticality. costs 30 energy.
3. [Upgraded Fashion Sensor] = +15 Buffed Moxie. costs 30 energy.
4. [Financial Neural Net] = +20% Meat Drops. costs 30 energy.
5. [Spatial Compression Functions] = +30 Maximum HP. costs 40 energy.
6. [Self-Repair Routines] = Regenerate +10 HP per Adventure. costs 40 energy.
7. [Weather Control Algorithms] = +2 Resistance to all elements. costs 40 energy.
8. [Improved Optical Processing] = +20% Item Drops. costs 40 energy.
9. [Topology Grid] = Allows you to equip shirts. costs 50 energy.
10. [Overclocking] = Gain 1 Energy per fight. costs 50 energy.
11. [Biomass Processing Function] = Allows use of potions. costs 50 energy.
12. [Holographic Deflector Projection] = +30 Maximum HP. costs 50 energy.
the upgrade names match the url addition.
the url visited should be
Code:
string upgrade;
visit_url("choice.php?pwd&whichchoice=1445&part=cpus&show=cpus&option=2&p=" +upgrade);

string values for upgrade:
1. robot_muscle
2. robot_mysticality
3. robot_moxie
4. robot_meat
5. robot_hp1
6. robot_regen
7. robot_resist
8. robot_items
9. robot_shirt
10. robot_energy
11. robot_potions
12. robot_hp2

the tracking property
youRobotCPUUpgrades
tracks a list of the "upgrade" strings from above to let you know which upgrades you already purchased.
However upgrades 1 (robot_muscle), 5 (robot_hp1), and 12 (robot_hp2) are not tracked correctly. (I figured out why and will explain later in this post)
Code:
1. incorrectly lists it as "cpus" in youRobotCPUUpgrades instead of its actual name which is "robot_muscle"
url from debug log is:
https://www.kingdomofloathing.com/choice.php?pwd&whichchoice=1445&part=cpus&show=cpus&option=2&p=robot_muscle

5. does not get tracked at all. mafia is simply completely oblivious to this upgrades existence. it does not notice it when bought. and it cannot be added via refresh
https://www.kingdomofloathing.com/choice.php?pwd&whichchoice=1445&part=cpus&show=cpus&option=2&p=robot_hp2

12. does not get tracked at all. mafia is simply completely oblivious to this upgrades existence. it does not notice it when bought. and it cannot be added via refresh
https://www.kingdomofloathing.com/choice.php?pwd&whichchoice=1445&part=cpus&show=cpus&option=2&p=robot_hp2

I initially was testing them one by one by buying them with mafia debug logging on. But that is unnecessary and inefficient. the way to do it is
Code:
ash string page = visit_url("choice.php?whichchoice=1445&show=cpus"); print(page);
Anyways. by the time I came up with it I was only missing the urls of 3 of them. having gotten the rest manualy.

Anyways looking at that page text, the extra url fragment is found under value="upgrade"
replacing upgrade with the appropriate string

Looking at mafia code, the names seem to be generated rather than stored. and they are generated by splitting the data on that page.
this provides future proofing in case the urls change someday. but that seems unlikely and it results with some issues.
value= is not ONLY used for the url component in the end. there is a single instance of value="cpus" which happens right before value="robot_muscle". which is why the string splitter used is incorrectly assigning an upgrade name of "cpus" instead of "robot_muscle" to the first CPU upgrade. (the upgrade gives +15 buffed muscle).

as for upgrades 5 and 12. they are robot_hp1 and robot_hp2 which are the only url names that contain a number. I believe that mafia was set to ignore instances of value= which contain a number. as most of them are junk.

I believe that instead of dynamically parsing that page for the url fragments. it should be stored as data in mafia. alternatively count how often it appears and only use those.

here is a dump of the ash command listed early in this post for CPUs page. you can search it for value= yourself to see the instances where it occurs and how the current text splitter messes it up
Code:
> <html><head><script language=Javascript><!--if (parent.frames.length == 0) location.href="game.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 = '&nbsp;<a href="#" rel="?" class="small dojaxy">[some]</a>&nbsp;<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=cd07e6e581a9ac166b043e17034630ee" 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=cd07e6e581a9ac166b043e17034630ee" 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) { shown++; contents += dc + 'managecollection.php?action=put&ajax=1&whichitem1=IID&howmany1=NUM&pwd=cd07e6e581a9ac166b043e17034630ee" 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=cd07e6e581a9ac166b043e17034630ee" 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=cd07e6e581a9ac166b043e17034630ee" 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=cd07e6e581a9ac166b043e17034630ee" 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=cd07e6e581a9ac166b043e17034630ee" 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><table  width=95%  cellspacing=0 cellpadding=0><tr><td style="color: white;" align=center bgcolor=blue><b>Reassembly Station</b></td></tr><tr><td style="padding: 5px; border: 1px solid blue;"><center><table><tr><td><table width=100% ><tr><td width=350 valign=top><table cellpadding=10><tr><td colspan="3" valign=top align="center"><a href="/choice.php?whichchoice=1445&show=cpus">CPU Upgrades</a><br><br><a href="/choice.php?whichchoice=1445&show=top">Top<br>Attachment</a></td></tr><tr><td><br><a href="/choice.php?whichchoice=1445&show=left">Left<br>Arm</a></td><td><div style="position: relative; height: 150px; width: 150px"><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/robot/left4.png" height="150" width="150" style="position: absolute; top: 0; left: 0" /><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/robot/right3.png" height="150" width="150" style="position: absolute; top: 0; left: 0" /><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/robot/top3.png" height="150" width="150" style="position: absolute; top: 0; left: 0" /><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/robot/bottom3.png" height="150" width="150" style="position: absolute; top: 0; left: 0" /><img src="https://s3.amazonaws.com/images.kingdomofloathing.com/otherimages/robot/body4.png" height="150" width="150" style="position: absolute; top: 0; left: 0" /></div></td><td><br><a href="/choice.php?whichchoice=1445&show=right">Right<br>Arm</a></td></tr><tr><td colspan="3" align="center"><br><a href="/choice.php?whichchoice=1445&show=bottom">Propulsion<br>System</a></td></tr></table></td><td width=450><form method="post" action="/choice.php"><input type="hidden" name="pwd" value="cd07e6e581a9ac166b043e17034630ee"><input type="hidden" name="whichchoice" value="1445"><input type="hidden" name="part" value="cpus"><input type="hidden" name="show" value="cpus"><input type="hidden" name="option" value="2"><button name="p" value="robot_muscle" disabled class="disabled button" style="opacity: 0.5"><b>Leverage Coprocessing</b> (already installed)<br /><b style="color: blue">+15 Muscle</b><br />(30 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_mysticality" disabled class="disabled button" style="opacity: 0.5"><b>Dynamic Arcane Flux Modeling</b> (already installed)<br /><b style="color: blue">+15 Mysticality</b><br />(30 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_moxie" disabled class="disabled button" style="opacity: 0.5"><b>Upgraded Fashion Sensor</b> (already installed)<br /><b style="color: blue">+15 Moxie</b><br />(30 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_meat" disabled class="disabled button" style="opacity: 0.5"><b>Finance Neural Net</b> (already installed)<br /><b style="color: blue">+20% Meat Drops</b><br />(30 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_hp1" disabled class="disabled button" style="opacity: 0.5"><b>Spatial Compression Functions</b> (already installed)<br /><b style="color: blue">+30 Maximum HP</b><br />(40 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_regen" disabled class="disabled button" style="opacity: 0.5"><b>Self-Repair Routines</b> (already installed)<br /><b style="color: blue">Regenerate +10 HP per Adventure</b><br />(40 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_resist" disabled class="disabled button" style="opacity: 0.5"><b>Weather Control Algorithms</b> (already installed)<br /><b style="color: blue">+2 Resistance to all elements</b><br />(40 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_items" disabled class="disabled button" style="opacity: 0.5"><b>Improved Optical Processing</b> (already installed)<br /><b style="color: blue">+20% Item Drops</b><br />(40 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_shirt" disabled class="disabled button" style="opacity: 0.5"><b>Topology Grid</b> (already installed)<br /><b style="color: blue">Allows you to equip shirts</b><br />(50 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_energy" disabled class="disabled button" style="opacity: 0.5"><b>Overclocking</b> (already installed)<br /><b style="color: blue">Gain 1 Energy per fight</b><br />(50 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_potions" disabled class="disabled button" style="opacity: 0.5"><b>Biomass Processing Function</b> (already installed)<br /><b style="color: blue">Allows use of potions</b><br />(50 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br><button name="p" value="robot_hp2" disabled class="disabled button" style="opacity: 0.5"><b>Holographic Deflector Projection</b> (already installed)<br /><b style="color: blue">+30 Maximum HP</b><br />(50 Energy)</button><br><img src=http://images.kingdomofloathing.com/otherimages/spacer.gif width=10 height=10><br></form></td></tr></table><p><p><center><a href="/campground.php">Back to the Scrapheap</a></center></td></tr></table></center></td></tr><tr><td height=4></td></tr></table><!--faaaaaaart--></body></html>

edit: I can confirm that I can not just add stuff to the tracker. it will auto correct it to the wrong value again. as per
Code:
Preference youRobotCPUUpgrades changed from
robot_muscle,robot_mysticality,robot_moxie,robot_meat,robot_regen,robot_resist,robot_items,robot_shirt,robot_energy,robot_potions,robot_hp1,robot_hp2
to
cpus,robot_mysticality,robot_moxie,robot_meat,robot_regen,robot_resist,robot_items,robot_shirt,robot_energy,robot_potions
 
Last edited:
at the end of the frat-hippy war
Code:
[1565] Frat House
Preference lastEncounter changed from War Hippy Elder    Shaman to The Artificial Wisniewski
Encounter: The Artificial Wisniewski
1. that was wartime hippy camp. not frat house.
2. mafia failed to update quest progress when he died
3. mafia failed to update quest progress when I turned it in to the council.
I had to use "refresh all" to update it.
 
I've addressed these issues in pull request 109. No need for so much detail in bug reports in the future. Instructions to reproduce are great but if there's going to be a thread with a bunch of bugs keeping it terse is often much better. Any supporting data can just be attached as a file
 
defeating groarbot does not change questL08Trapper from step4 to step5

also
Code:
> refresh quests

Retrieving quest data...
Preference questL09Topping changed from unstarted to started
Preference questL07Cyrptic changed from unstarted to started
Requests complete.
these two quests do not correctly recognize they are stated when you visit the council. leaving them both as unstarted until i refreshed
 
Last edited:
Chronolith activations tracking seems to be bugged now. I have
Code:
> get _chronolithActivations

12
which means cost of 22. however the actual cost is 45 indicating 35 activations.
the issue is with this bit of mafia code
Code:
      int cost = StringUtilities.parseInt(m.group(1));

      if (cost > 158) {
        cost /= 10;
      } else if (cost > 37) {
        cost /= 2;
      }

      cost -= 10;

      Preferences.setInteger("_chronolithActivations", cost);
in the file ScrapheapRequest.java

It should be
Code:
     if (cost > 148) {
        cost /= 10;
      } else if (cost > 47) {
        cost /= 2;
      }
this is because it works as per
Energy cost for the Chronolith increases by 1 after each use for each of the first 37 uses (10, 11, 12, 13, etc). After 37 uses, the energy cost is doubled (45, 46, 47, 96, 98, 100), and after 74 uses, the energy cost is multiplied by 10 (144, 146, 148, 750, 760, 770).
edit: I fixed it myself
 
Last edited:
I did one Hardcore run of this a year ago. It took me seven days. It didn't like it much, and then I took a hiatus from KoL, so I never continued.

I'm (sort of) back and I need 5 more runs to complete my factoids, so I just did another Hardcore run. This time, it took 3 days and I liked it better. Probably because it was out of standard and I have a potted power tree this time. Still, a lot of things didn't work Quite Right and I have a PR out for review which fixes some of them.

1) Potions. I had forgotten that you need a CPU upgrade to use them. In fact, I forgot about CPU upgrades until day 2. I was very confused that I could not use my AAA batteries. The Item Manager simply failed to use them when I told it to, with no comment - except, from the gCLI, "usage limited to 0 by daily limit". Huh? If I use a potion in the Relay Browser, it fails - and KoL tells me why - but KoLmafia decrements the inventory count

- I changed the failure reason to "lack of a CPU upgrade".
- I changed the "Usable" sections - Food/Booze/Spleen - to grey out the "consume" button for Robocore. Dito for Potions - until you get the CPU upgrade
- Usage when not allowed, via Relay Browser or URL manipulation, prints an error in the gCLI and does not screw up inventory

2) Avatars - the Daily Deeds frame (internally, the CharSheetFrame) shows your Avatar. For You, Robot, it is composed of 5 transparent images which are overlaid, but we only support a single image. Therefore, we were seeing only your Left Arm image. Good news! Now we will show all 5, overlaid, just as is done on the CharPane. If you have the Daily Deeds frame open and then change your configuration in the Relay Browser, the Avatar immediately updates. Pretty sweet, if I say so myself.

Outstanding issues that I have noted, which I hope to address in my final four runs, over the next 12 days or so:

1) The Consumable sections of the Item Manager make it clear whether or not you can use a potion. Not so with the inventory sections; if I see a potion there and try to use it without the CPU upgrade, if I recall, it simply doesn't try, with no indication why not. Well, the "usable amount" is zero. Why not tell me what the issue is? That's probably a general issue in that frame.

2) If I recall, the maximizer will show potions, even if you can't use them yet.

3) If you have the Gear Changer open when you change configuration, it doesn't immediately enable/disable a slot. If you close and reopen it, it will detect it. That sounds like it's be an issue if you have the Gear Changer as a tab.

4) Configuration can add or remove combat skills (all of which are in the 7000 section of skills - "conditional" skills). But we do not add/remove them from the list of available combat skills. EquipmentManager has addConditionalSkills and removeConditionalSkills for equipment. We need to do the equivalent.

(We probably should have a YouRobotManager, rather than having everything in ScrapHeapRequest.)

5) Speaking of which, I'm not happy with how we expose KoL internals to the scripts.

Yes, there are 4 "slots" on the robot - Top, Bottom, Left, Right. (There is also "Body" types 1-6, but that's just your character class - Seal Clubber, etc.) There are CPU enhancements, most of which act like Passive skills, although one grants Torso Awareness and another, essentially, grants Potion Awareness.

But does the user really want to know that there are 8 Left, Right, and Top options and 7 Bottom options and for each "slot", you have to know the Magic Number?

Would the user rather have "Solar Panel" or "RobotTop 3"?

Here is the "You, Robot" section of modifiers.txt.
These are essentially the passive effects.

Code:
RobotTop        3       Energy: +1
RobotTop        5       Meat Drop: +50
RobotRight      1       Maximum HP: +30
RobotRight      2       Damage Reduction: +10, Damage Absorption: +50
RobotRight      3       Scrap: +1
RobotRight      7       Monster Level: +30
RobotBottom     1       Maximum HP: +10
RobotBottom     3       Initiative: +30
RobotBottom     5       Item Drop: +30
RobotBottom     6       Maximum HP: +50, Damage Reduction: +10
RobotBottom     7       Scrap: +1
RobotLeft       2       Cold Resistance: +3, Hot Resistance: +3, Sleaze Resistance: +3, Spooky Resistance: +3, Stench Resistance: +3
RobotLeft       3       Item Drop: +30
RobotLeft       7       Combat Rate: -15
RobotCPU        robot_muscle    Muscle: +15
RobotCPU        robot_mysticality       Mysticality: +15
RobotCPU        robot_moxie     Moxie: +15
RobotCPU        robot_meat      Meat Drop: +20
RobotCPU        robot_hp1       Maximum HP: +30
RobotCPU        robot_regen     HP Regen Min: +10, HP Regen Max: +10
RobotCPU        robot_resist    Cold Resistance: +2, Hot Resistance: +2, Sleaze Resistance: +2, Spooky Resistance: +2, Stench Resistance: +2
RobotCPU        robot_items     Item Drop: +20
RobotCPU        robot_energy    Energy: +1
RobotCPU        robot_hp2       Maximum HP: +30

Perhaps it would be more useful to have, say,

Code:
Robot    Solar Panel    Energy: +1
Robot    Metal Detector    Item Drop: +30
Robot    Improved Optical Processing    Item Drop: +20

In other words, just as we don't have ItemHat, ItemLeft, etc., we have Item.

Elsewhere, we have code like this

if (KoLCharacter.inRobocore() && Preferences.getInteger("youRobotTop") != 2) {
newModifiers.add(Modifiers.getModifiers("RobotTop", Preferences.getString("youRobotTop")));
return Preferences.getString("youRobotCPUUpgrades").contains("robot_potions");

We look at preferences - exposed to the user - for magic numbers and KoL internal keywords.

A lot of this would just be refactoring into YouRobotManager.

The question for scripters (you) is this:

Do any of you actually look at the properties:

Code:
user    youRobotBottom    0
user    youRobotLeft    0
user    youRobotRight    0
user    youRobotTop    0
user    youRobotCPUUpgrades

and expect the "slots" to be integers? and the CPU upgrades to be "KoL keywords"? Would it be undue pain if I changed those to be the actual names of the configured slots/CPU enhancements?

----
Other (possibly) pending bugs from above:

ckb: using the spinal-fluid-covered emotion chip does not set the $skill[Emotionally Chipped] as learned/permed/available
taltimir: defeating groarbot does not change questL08Trapper from step4 to step5
taltimir: there is a maximizer issue where it thinks muscle provides hp in you, robot. it does not.
 
Do any of you actually look at the properties:

Code:
user    youRobotBottom    0
user    youRobotLeft    0
user    youRobotRight    0
user    youRobotTop    0
user    youRobotCPUUpgrades

and expect the "slots" to be integers? and the CPU upgrades to be "KoL keywords"? Would it be undue pain if I changed those to be the actual names of the configured slots/CPU enhancements?

My scripts currently use those properties as they were originally set up. I believe autoscend also does.
It would be relatively easy for me to update my scripts if you wanted to change the Mafia properties values. I have a few specific functions for checking and swapping robot parts - updating those would be easy enough if I know the mapping between the old values and your new values.
 
@gausie there is a maximizer issue where it thinks muscle provides hp in you, robot. it does not.
I've completed 2 (of 5) You, Robot runs and have been fixing bugs as I see them.

I'm also fixing bugs that were reported earlier on this thread. For example, ckb's "using the spinal-fluid-covered emotion chip does not give you Emotionally Chipped" (although it is on the CharSheet, so gets registered if you visit it - or log in again.)

Regarding this bug: maximizer doesn't understand what affects your HP in this path - I have located the spot of code where BUFFED_HP is calculated - Modifiers.predict - and, sure enough, there is no support for this path. There is for Dark Gyfft (Vampires have special handling of HP).

They start with "HP base" based on Muscle. Well, no.

Wiki says this:
  • Your initial stats are 30, 20, and 10, distributed according to the character class you chose when ascending.
  • Robots have 20-60 max HP (dependent on class). Only +Max HP bonuses will give extra maximum HP; neither base nor buffed muscle bonuses have any effect.
What is your initial stat distribution (dependent by class)?
Normally, you get 3, 2, 1 (where is the table for that?), so I expect for this path, it is 10 times that.
You start at Level 6 (at least 29), so that would make sense.
What is the initial HP distribution? 20-60 looks like it COULD be two times initial Muscle, say.
In any case, I need that info in order to calculate base HP, by character class, for this path.

Edit: I think this it:

Code:
SC: Muscle, Moxie, Mysticality
TT: Muscle, Mysticality, Moxie
PA: Mysticality, Muscle, Moxie
SA: Mysticality, Moxie, Muscle
DB: Moxie, Muscle, Mysticality
AT: Moxie, Mysticality, Muscle

Edit: Newly Ascended Accordion Thief Robot has:

Mus: 10
Mys: 20
Mox: 30
HP: 50 = 30 + 20 from Vole

Poo.
 
Last edited:
Back
Top