<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.kolmafia.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bale</id>
	<title>Kolmafia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kolmafia.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bale"/>
	<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Special:Contributions/Bale"/>
	<updated>2026-05-02T04:39:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7836</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7836"/>
		<updated>2017-05-24T01:14:33Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r18040&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
 r17921: Add ASH get_closet() and get_storage() commands:&lt;br /&gt;
 int [item] get_closet();&lt;br /&gt;
 int [item] get_storage();&lt;br /&gt;
&lt;br /&gt;
 r17936: Add ASH function: void mood_execute( int multiplicity )&lt;br /&gt;
 multiplicity determines the minimum number of casts (or items) a given trigger will use; if&lt;br /&gt;
 the mood trigger is &amp;quot;cast 1 SKILL&amp;quot;, multiplicty 3 will treat it as &amp;quot;cast 3 SKILL&amp;quot;.&lt;br /&gt;
 multiplicity = -1 is what KoLmafia uses internally for between battle checks.&lt;br /&gt;
 multiplicity = 0 is what the CLI command &amp;quot;mood execute&amp;quot; uses.&lt;br /&gt;
&lt;br /&gt;
 r17937-8: Add ASH function: string [int] available_choice_options( boolean spoilers )&lt;br /&gt;
 If the argument is &amp;quot;true&amp;quot;, the Relay Browser choice spoilers will be appended to KoL&#039;s choice choice text (in parentheses).&lt;br /&gt;
&lt;br /&gt;
 r17969/17970 adds the &amp;quot;spacegate&amp;quot; command.&lt;br /&gt;
 spacegate vaccine X&lt;br /&gt;
 (where X is 1, 2, or 3) will visit the Spacegate Vaccinator to get the appropriate vaccine.&lt;br /&gt;
&lt;br /&gt;
 r18000: Add ASH function: int my_session_meat() which tracks how much meat the character has gained&lt;br /&gt;
 or lost since login via character actions; mall sales and incoming kmail containing meat&lt;br /&gt;
 will increment my_meat(), but not this value.&lt;br /&gt;
&lt;br /&gt;
 r18040: When you define a map with value as a zero-length array, file_to_map can&lt;br /&gt;
 now populate it. The values will be variable-length array literals that&lt;br /&gt;
 consume all the data values from the line of your file. Thus: keyVALUE(VALUE)*&lt;br /&gt;
 &lt;br /&gt;
 You can now use foreach to iterate over an aggregate literal.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21742-Best-way-to-load-questslog-txt&amp;amp;p=143001&amp;amp;viewfull=1#post143001&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7835</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7835"/>
		<updated>2017-04-30T07:41:09Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ my_session_meat()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
 r17921: Add ASH get_closet() and get_storage() commands:&lt;br /&gt;
 int [item] get_closet();&lt;br /&gt;
 int [item] get_storage();&lt;br /&gt;
&lt;br /&gt;
 r17936: Add ASH function: void mood_execute( int multiplicity )&lt;br /&gt;
 multiplicity determines the minimum number of casts (or items) a given trigger will use; if&lt;br /&gt;
 the mood trigger is &amp;quot;cast 1 SKILL&amp;quot;, multiplicty 3 will treat it as &amp;quot;cast 3 SKILL&amp;quot;.&lt;br /&gt;
 multiplicity = -1 is what KoLmafia uses internally for between battle checks.&lt;br /&gt;
 multiplicity = 0 is what the CLI command &amp;quot;mood execute&amp;quot; uses.&lt;br /&gt;
&lt;br /&gt;
 r17937-8: Add ASH function: string [int] available_choice_options( boolean spoilers )&lt;br /&gt;
 If the argument is &amp;quot;true&amp;quot;, the Relay Browser choice spoilers will be appended to KoL&#039;s choice choice text (in parentheses).&lt;br /&gt;
&lt;br /&gt;
 r17969/17970 adds the &amp;quot;spacegate&amp;quot; command.&lt;br /&gt;
 spacegate vaccine X&lt;br /&gt;
 (where X is 1, 2, or 3) will visit the Spacegate Vaccinator to get the appropriate vaccine.&lt;br /&gt;
&lt;br /&gt;
 r18000: Add ASH function: int my_session_meat() which tracks how much meat the character has gained&lt;br /&gt;
 or lost since login via character actions; mall sales and incoming kmail containing meat&lt;br /&gt;
 will increment my_meat(), but not this value.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Reporting_a_Bug/Requesting_a_Feature&amp;diff=8501</id>
		<title>Reporting a Bug/Requesting a Feature</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Reporting_a_Bug/Requesting_a_Feature&amp;diff=8501"/>
		<updated>2017-04-15T20:46:32Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;Bug Report&#039;&#039;&#039; is submitted when KoLmafia is doing the wrong thing because of a coding error, design flaw or some other oversight on the part of a developer.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Feature Request&#039;&#039;&#039; is submitted when KoLmafia is functioning as designed but a user would like it to so something different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New Content&#039;&#039;&#039; is reported when something is added to or changed in KoL itself and KoLmafia could/should be changed to support that.&lt;br /&gt;
&lt;br /&gt;
A Bug Report, Feature Request or New Content notification can be made by starting a new thread at http://kolmafia.us/forumdisplay.php?24-Bug-Reports&lt;br /&gt;
&lt;br /&gt;
There are several prefixes appended to threads in that section.  Non-Moderators should only use Bug, Feature or New Content.  The Moderators will change the prefix to indicate status.&lt;br /&gt;
&lt;br /&gt;
*Bug - Confirmed indicates that someone other than the original reporter has been able to reproduce the bug.&lt;br /&gt;
&lt;br /&gt;
*Bug - Not a Bug indicates that the behavior described as a Bug is actually what KoLmafia is supposed to be doing.&lt;br /&gt;
&lt;br /&gt;
*Bug - Won&#039;t Fix indicates that bug exists but no changes will be made to fix it.&lt;br /&gt;
&lt;br /&gt;
*Bug - Fixed indicates that code to fix the bug has been written and checked in to SourceForge, thus making it part of the next build.&lt;br /&gt;
&lt;br /&gt;
*Bug - Cannot Reproduce indicates that no one besides the original reporter knows how to make the bug happen.&lt;br /&gt;
&lt;br /&gt;
*Bug - Waiting for Info indicates that a developer has asked questions about the report and is waiting for the reporter to answer.&lt;br /&gt;
&lt;br /&gt;
For both Feature and New Content&lt;br /&gt;
&lt;br /&gt;
*Implemented means that KoLmafia has been changed in response.&lt;br /&gt;
&lt;br /&gt;
*Rejected means that no code has been changed and none is likely to do so.&lt;br /&gt;
&lt;br /&gt;
*Features are often rejected if it is something that can easily be done or has already been done, in a script.&lt;br /&gt;
&lt;br /&gt;
The prefixes and the implied workflow are sometimes to developer&#039;s looking for tasks and developers planning releases.&lt;br /&gt;
&lt;br /&gt;
It is worth reading http://kolmafia.us/showthread.php?5934-Bug-Report-Procedures-(please-read-me) before submitting reports.&lt;br /&gt;
&lt;br /&gt;
This thread http://kolmafia.us/showthread.php?4326-Show-Estimated-Damage contains some discussion which led to the creation of this page.&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7834</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7834"/>
		<updated>2017-04-09T01:48:39Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */  &amp;quot;spacegate&amp;quot; command.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
 r17921: Add ASH get_closet() and get_storage() commands:&lt;br /&gt;
 int [item] get_closet();&lt;br /&gt;
 int [item] get_storage();&lt;br /&gt;
&lt;br /&gt;
 r17936: Add ASH function: void mood_execute( int multiplicity )&lt;br /&gt;
 multiplicity determines the minimum number of casts (or items) a given trigger will use; if&lt;br /&gt;
 the mood trigger is &amp;quot;cast 1 SKILL&amp;quot;, multiplicty 3 will treat it as &amp;quot;cast 3 SKILL&amp;quot;.&lt;br /&gt;
 multiplicity = -1 is what KoLmafia uses internally for between battle checks.&lt;br /&gt;
 multiplicity = 0 is what the CLI command &amp;quot;mood execute&amp;quot; uses.&lt;br /&gt;
&lt;br /&gt;
 r17937-8: Add ASH function: string [int] available_choice_options( boolean spoilers )&lt;br /&gt;
 If the argument is &amp;quot;true&amp;quot;, the Relay Browser choice spoilers will be appended to KoL&#039;s choice choice text (in parentheses).&lt;br /&gt;
&lt;br /&gt;
 r17969/17970 adds the &amp;quot;spacegate&amp;quot; command.&lt;br /&gt;
 spacegate vaccine X&lt;br /&gt;
 (where X is 1, 2, or 3) will visit the Spacegate Vaccinator to get the appropriate vaccine.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7833</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7833"/>
		<updated>2017-04-04T05:28:01Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ mood_execute() and available_choice_options()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
 r17921: Add ASH get_closet() and get_storage() commands:&lt;br /&gt;
 int [item] get_closet();&lt;br /&gt;
 int [item] get_storage();&lt;br /&gt;
&lt;br /&gt;
 r17936: Add ASH function: void mood_execute( int multiplicity )&lt;br /&gt;
 multiplicity determines the minimum number of casts (or items) a given trigger will use; if&lt;br /&gt;
 the mood trigger is &amp;quot;cast 1 SKILL&amp;quot;, multiplicty 3 will treat it as &amp;quot;cast 3 SKILL&amp;quot;.&lt;br /&gt;
 multiplicity = -1 is what KoLmafia uses internally for between battle checks.&lt;br /&gt;
 multiplicity = 0 is what the CLI command &amp;quot;mood execute&amp;quot; uses.&lt;br /&gt;
&lt;br /&gt;
 r17937-8: Add ASH function: string [int] available_choice_options( boolean spoilers )&lt;br /&gt;
 If the argument is &amp;quot;true&amp;quot;, the Relay Browser choice spoilers will be appended to KoL&#039;s choice choice text (in parentheses).&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7832</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7832"/>
		<updated>2017-04-02T16:55:47Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17921: Add ASH get_closet() and get_storage() commands:&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
 r17921: Add ASH get_closet() and get_storage() commands:&lt;br /&gt;
 int [item] get_closet();&lt;br /&gt;
 int [item] get_storage();&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7831</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7831"/>
		<updated>2017-03-23T23:36:58Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17911 &amp;amp; r17912&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
 r17911: Add ASH convenience functions: &lt;br /&gt;
 boolean starts_with( string value, string prefix );&lt;br /&gt;
 boolean ends_with( string value, string suffix );&lt;br /&gt;
&lt;br /&gt;
 r17912: Add ASH function to get the full unambiguous card name from the Deck of Every Card:&lt;br /&gt;
 string every_card_name( string name )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Miscellaneous_Functions&amp;diff=1196</id>
		<title>Miscellaneous Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Miscellaneous_Functions&amp;diff=1196"/>
		<updated>2017-03-22T23:33:40Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
== Chat Functions ==&lt;br /&gt;
{{Flink|void|chat_clan|string}}&lt;br /&gt;
{{Flink|void|chat_clan|string|string|desc=Sends a message to clan chat.}}&lt;br /&gt;
{{Flink|void|chat_macro|string|desc=Submits a chat macro to KoL.}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string|desc=Sends a notification to the player&#039;s own chat.}}&lt;br /&gt;
{{Flink|void|chat_private|string|string|desc=Sends a private message to another player.}}&lt;br /&gt;
{{Flink|boolean|is_online|string|desc=Check to see if a player is online.}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan|desc=Returns a list of whom is in your clan and if they are in chat.}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster|desc=Check to see if a monster can be faxed.}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|desc=Attempts to receive a fax of a given monster.}}&lt;br /&gt;
&lt;br /&gt;
== Debugging Functions == &lt;br /&gt;
{{Flink|void|disable|string|desc=Disables the specified function.}}&lt;br /&gt;
{{Flink|void|enable|string|desc=Enables the specified function.}}&lt;br /&gt;
{{Flink|buffer|load_html|string|desc=Works like visit_url(), but for debugging.}}&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean|desc=Crafts the URL to visit.}}&lt;br /&gt;
&lt;br /&gt;
== Map Management Functions ==&lt;br /&gt;
&#039;&#039;Note: Information about maps (including creating, assigning, and removing keys, can be found at [[Data Structures#Maps|Map Data Structures]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|desc=Loads a map from a tab-delimited text file.}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|desc=Saves a map to a tab-delimited text file.}}&lt;br /&gt;
{{Flink|int|count|aggregate|desc=Returns the number of defined keys for the specified aggregate.}}&lt;br /&gt;
{{Flink|void|clear|aggregate|desc=Removes all keys from the specified aggregate.}}&lt;br /&gt;
&lt;br /&gt;
== Time Functions ==&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string|desc=Reformats dates.}}&lt;br /&gt;
{{Flink|int|gameday_to_int|desc=Returns the current KoL date as an integer.}}&lt;br /&gt;
{{Flink|string|gameday_to_string|desc=Returns the current KoL date as a string.}}&lt;br /&gt;
{{Flink|int|gametime_to_int|desc=Returns the current KoL time in ms as an integer.}}&lt;br /&gt;
{{Flink|string|now_to_string|string|desc=Returns current local time/date in SimpleDateFormat format.}}&lt;br /&gt;
{{Flink|string|time_to_string|desc=Returns the current local time in HH:mm:ss z format.}}&lt;br /&gt;
{{Flink|string|today_to_string|desc=Returns the current local day in ISO format.}}&lt;br /&gt;
&lt;br /&gt;
== SVN Functions ==&lt;br /&gt;
&#039;&#039;There is much additional information in the [[SVN Primer]]&#039;&#039;.&lt;br /&gt;
{{Flink|boolean|svn_exists|string|desc=Returns true if a valid working copy named projectname exists in the svn/ folder.}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string|desc=Returns true if projectname exists, is a valid working copy, and is currently at the same revision number as the repository.}}&lt;br /&gt;
{{Flink|record|svn_info|string|desc=Returns a record containing additional information about the given projectname: svnurl, last author, last revision, last change date.}}&lt;br /&gt;
&lt;br /&gt;
== User Interaction ==&lt;br /&gt;
{{Flink|void|print|string|{{opt|string}}|desc=Prints to CLI and status line of Adventuring window, optionally in a specified color.}}&lt;br /&gt;
{{Flink|void|print_html|string|desc=Prints to CLI, parsing any included html.}}&lt;br /&gt;
{{Flink|void|logprint|string|desc=Prints to the session log.}}&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int|desc=Sleeps for the specified number of seconds.}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|desc=Allows user input in Y/N format.}}&lt;br /&gt;
&lt;br /&gt;
== Property Functions ==&lt;br /&gt;
&lt;br /&gt;
{{Flink|boolean [string]|get_all_properties|string|boolean|desc=Returns a map of all user or global properties.}}&lt;br /&gt;
{{Flink|boolean|property_exists|string}}&lt;br /&gt;
{{Flink|boolean|property_exists|string|boolean|desc=Returns true if the named property exists.}}&lt;br /&gt;
{{Flink|boolean|property_has_default|string name|desc=Returns true if the named property in has a default value.}}&lt;br /&gt;
{{Flink|string|property_default_value|string name|desc=Returns the default value for a built-in property.}}&lt;br /&gt;
{{Flink|string|get_property|string}}&lt;br /&gt;
{{Flink|string|get_property|string|boolean|desc=Gets a global or user preference as appropriate.}}&lt;br /&gt;
{{Flink|void|set_property|string|string|desc=Sets a global or user preference as appropriate.}}&lt;br /&gt;
{{Flink|void|remove_property|string}}&lt;br /&gt;
{{Flink|void|remove_property|string|boolean|desc=Removes property or resets it to default.}}&lt;br /&gt;
{{Flink|boolean|rename_property|string|string|desc=Changes name of a property.}}&lt;br /&gt;
&lt;br /&gt;
== Other Functions ==&lt;br /&gt;
{{Flink|void|abort|{{opt|string}}|desc=Aborts the current script with an optional message.}}&lt;br /&gt;
{{Flink|boolean|cli_execute|string|desc=Executes the given command as if it were entered into the CLI.}}&lt;br /&gt;
{{Flink|void|batch_open|desc=Used to mark the beginning of a block of functions to operate in batch mode (see page for {{f|batch_close}} for details).}}&lt;br /&gt;
{{Flink|boolean|batch_close|desc=Used to mark the end of a block of functions to operate in batch mode (see page for details).}}&lt;br /&gt;
{{Flink|int|get_revision|desc=Returns the current KoLmafia revision number.}}&lt;br /&gt;
{{Flink|string|get_version|desc=Returns the most recent KoLmafia version.}}&lt;br /&gt;
{{Flink|string|get_player_id|string|desc=Returns the user id number of a given player.}}&lt;br /&gt;
{{Flink|string|to_json|aggregate|desc=Converts a simple aggregate into JSON.}}&lt;br /&gt;
&lt;br /&gt;
Additional functions that are considered not really to be ash functions are available in [[Miscellaneous ASH Features#Special Syntax Functions|Misc ASH Features]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4110</id>
		<title>Template:Flink</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4110"/>
		<updated>2017-03-22T23:33:08Z</updated>

		<summary type="html">&lt;p&gt;Bale: fix spacing issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;{{&lt;br /&gt;
#vardefine:par|no}}{{&lt;br /&gt;
#vardefine:par|{{&lt;br /&gt;
#if: {{{3|}}}|yes|no}}}}{{{1}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|yes|&amp;amp;nbsp;{{lnkstart}}{{{2}}}{{!}}{{{2}}}&amp;amp;#40;{{&lt;br /&gt;
#if: {{{3|}}}|&amp;amp;nbsp;{{{3}}}}}{{&lt;br /&gt;
#if: {{{4|}}}|,&amp;amp;nbsp;{{{4}}}}}{{&lt;br /&gt;
#if: {{{5|}}}|,&amp;amp;nbsp;{{{5}}}}}{{&lt;br /&gt;
#if: {{{6|}}}|,&amp;amp;nbsp;{{{6}}}}}{{&lt;br /&gt;
#if: {{{7|}}}|,&amp;amp;nbsp;{{{7}}}}}{{&lt;br /&gt;
#if: {{{8|}}}|,&amp;amp;nbsp;{{{8}}}}}{{&lt;br /&gt;
#if: {{{9|}}}|,&amp;amp;nbsp;{{{9}}}}}&amp;amp;nbsp;&amp;amp;#41;{{lnkend}}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|no|&amp;amp;nbsp;[[{{{2}}}|{{{2}}}()]]}}&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;{{&lt;br /&gt;
#if: {{{desc|}}}|&amp;lt;div style=&amp;quot;margin-left: 2em; display: block;&amp;quot;&amp;gt;{{{desc}}}&amp;lt;/div&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template styles a function call so that it can be displayed as a link in (pseudo) Category pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template requires &#039;&#039;at least&#039;&#039; two (unnamed) parameters to be passed; the first is the datatype returned by the function; the second is the name of the function (&#039;&#039;without&#039;&#039; parenthesis).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional unnamed parameters will be parsed as datatypes, in order, of the usable parameters. (Up to 8 can be supplied.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An optional named parameter &#039;&#039;desc&#039;&#039; can be used to include a brief description of the what the function does, which will automatically be included in its display.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Optional parameters can be displayed by wrapping them in the [[Template:Opt|Opt Template]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
[[Category:Basic Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4109</id>
		<title>Template:Flink</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4109"/>
		<updated>2017-03-22T23:32:42Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;{{&lt;br /&gt;
#vardefine:par|no}}{{&lt;br /&gt;
#vardefine:par|{{&lt;br /&gt;
#if: {{{3|}}}|yes|no}}}}{{{1}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|yes|,{{lnkstart}}{{{2}}}{{!}}{{{2}}}&amp;amp;#40;{{&lt;br /&gt;
#if: {{{3|}}}|&amp;amp;nbsp;{{{3}}}}}{{&lt;br /&gt;
#if: {{{4|}}}|,&amp;amp;nbsp;{{{4}}}}}{{&lt;br /&gt;
#if: {{{5|}}}|,&amp;amp;nbsp;{{{5}}}}}{{&lt;br /&gt;
#if: {{{6|}}}|,&amp;amp;nbsp;{{{6}}}}}{{&lt;br /&gt;
#if: {{{7|}}}|,&amp;amp;nbsp;{{{7}}}}}{{&lt;br /&gt;
#if: {{{8|}}}|,&amp;amp;nbsp;{{{8}}}}}{{&lt;br /&gt;
#if: {{{9|}}}|,&amp;amp;nbsp;{{{9}}}}}&amp;amp;nbsp;&amp;amp;#41;{{lnkend}}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|no|&amp;amp;nbsp;[[{{{2}}}|{{{2}}}()]]}}&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;{{&lt;br /&gt;
#if: {{{desc|}}}|&amp;lt;div style=&amp;quot;margin-left: 2em; display: block;&amp;quot;&amp;gt;{{{desc}}}&amp;lt;/div&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template styles a function call so that it can be displayed as a link in (pseudo) Category pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template requires &#039;&#039;at least&#039;&#039; two (unnamed) parameters to be passed; the first is the datatype returned by the function; the second is the name of the function (&#039;&#039;without&#039;&#039; parenthesis).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional unnamed parameters will be parsed as datatypes, in order, of the usable parameters. (Up to 8 can be supplied.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An optional named parameter &#039;&#039;desc&#039;&#039; can be used to include a brief description of the what the function does, which will automatically be included in its display.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Optional parameters can be displayed by wrapping them in the [[Template:Opt|Opt Template]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
[[Category:Basic Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4108</id>
		<title>Template:Flink</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4108"/>
		<updated>2017-03-22T23:31:41Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;{{&lt;br /&gt;
#vardefine:par|no}}{{&lt;br /&gt;
#vardefine:par|{{&lt;br /&gt;
#if: {{{3|}}}|yes|no}}}}{{{1}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|yes|{{lnkstart}}{{{2}}}{{!}}{{{2}}}&amp;amp;#40;{{&lt;br /&gt;
#if: {{{3|}}}|&amp;amp;nbsp;{{{3}}}}}{{&lt;br /&gt;
#if: {{{4|}}}|,&amp;amp;nbsp;{{{4}}}}}{{&lt;br /&gt;
#if: {{{5|}}}|,&amp;amp;nbsp;{{{5}}}}}{{&lt;br /&gt;
#if: {{{6|}}}|,&amp;amp;nbsp;{{{6}}}}}{{&lt;br /&gt;
#if: {{{7|}}}|,&amp;amp;nbsp;{{{7}}}}}{{&lt;br /&gt;
#if: {{{8|}}}|,&amp;amp;nbsp;{{{8}}}}}{{&lt;br /&gt;
#if: {{{9|}}}|,&amp;amp;nbsp;{{{9}}}}}&amp;amp;nbsp;&amp;amp;#41;{{lnkend}}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|no|&amp;amp;nbsp;,[[{{{2}}}|{{{2}}}()]]}}&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;{{&lt;br /&gt;
#if: {{{desc|}}}|&amp;lt;div style=&amp;quot;margin-left: 2em; display: block;&amp;quot;&amp;gt;{{{desc}}}&amp;lt;/div&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template styles a function call so that it can be displayed as a link in (pseudo) Category pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template requires &#039;&#039;at least&#039;&#039; two (unnamed) parameters to be passed; the first is the datatype returned by the function; the second is the name of the function (&#039;&#039;without&#039;&#039; parenthesis).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional unnamed parameters will be parsed as datatypes, in order, of the usable parameters. (Up to 8 can be supplied.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An optional named parameter &#039;&#039;desc&#039;&#039; can be used to include a brief description of the what the function does, which will automatically be included in its display.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Optional parameters can be displayed by wrapping them in the [[Template:Opt|Opt Template]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
[[Category:Basic Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4107</id>
		<title>Template:Flink</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Template:Flink&amp;diff=4107"/>
		<updated>2017-03-22T23:30:32Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;{{&lt;br /&gt;
#vardefine:par|no}}{{&lt;br /&gt;
#vardefine:par|{{&lt;br /&gt;
#if: {{{3|}}}|yes|no}}}}{{{1}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|yes|{{lnkstart}}{{{2}}}{{!}}{{{2}}}&amp;amp;#40;{{&lt;br /&gt;
#if: {{{3|}}}|&amp;amp;nbsp;{{{3}}}}}{{&lt;br /&gt;
#if: {{{4|}}}|,&amp;amp;nbsp;{{{4}}}}}{{&lt;br /&gt;
#if: {{{5|}}}|,&amp;amp;nbsp;{{{5}}}}}{{&lt;br /&gt;
#if: {{{6|}}}|,&amp;amp;nbsp;{{{6}}}}}{{&lt;br /&gt;
#if: {{{7|}}}|,&amp;amp;nbsp;{{{7}}}}}{{&lt;br /&gt;
#if: {{{8|}}}|,&amp;amp;nbsp;{{{8}}}}}{{&lt;br /&gt;
#if: {{{9|}}}|,&amp;amp;nbsp;{{{9}}}}}&amp;amp;nbsp;&amp;amp;#41;{{lnkend}}}}{{&lt;br /&gt;
#ifeq: {{#var:par}}|no|&amp;amp;nbsp;[[{{{2}}}|{{{2}}}()]]}}&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;{{&lt;br /&gt;
#if: {{{desc|}}}|,&amp;amp;nbsp;&amp;lt;div style=&amp;quot;margin-left: 2em; display: block;&amp;quot;&amp;gt;{{{desc}}}&amp;lt;/div&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template styles a function call so that it can be displayed as a link in (pseudo) Category pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This template requires &#039;&#039;at least&#039;&#039; two (unnamed) parameters to be passed; the first is the datatype returned by the function; the second is the name of the function (&#039;&#039;without&#039;&#039; parenthesis).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional unnamed parameters will be parsed as datatypes, in order, of the usable parameters. (Up to 8 can be supplied.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An optional named parameter &#039;&#039;desc&#039;&#039; can be used to include a brief description of the what the function does, which will automatically be included in its display.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Optional parameters can be displayed by wrapping them in the [[Template:Opt|Opt Template]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|int|some_function}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Flink|string|other_function|{{opt|float}}|desc=This is what this bad boy does; blah de freakin&#039; blah}}&lt;br /&gt;
[[Category:Basic Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7830</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7830"/>
		<updated>2017-03-22T22:09:07Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ 17909: Add ASH function: string numberology_prize( number )&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r17909: Add ASH function: string numberology_prize( number )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Adventuring&amp;diff=907</id>
		<title>Adventuring</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Adventuring&amp;diff=907"/>
		<updated>2017-03-13T07:50:28Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Flink|boolean| adventure|int|location|desc=Visits the desired location the the desired number of times.}}&lt;br /&gt;
{{Flink|boolean| adventure|int|location|string|desc=Visits the desired location a specified number of times, using a combat filter function defined elsewhere in your script.}}&lt;br /&gt;
{{Flink|boolean| adv1|location|int|string|desc=Adventure exactly once in the specified location (even if it uses no turns). Chained choice adventures &#039;&#039;&#039;are&#039;&#039;&#039; followed. Int overrides default settings, and string is a filter, same as in [[adventure|adventure()]]}}&lt;br /&gt;
{{Flink|buffer| visit_url}}&lt;br /&gt;
{{Flink|buffer| visit_url|string}}&lt;br /&gt;
{{Flink|buffer| visit_url|string|boolean}}&lt;br /&gt;
{{Flink|buffer| visit_url|string|boolean|boolean|desc=Visits the specified address and returns the page source.}}&lt;br /&gt;
{{Flink|void| remove_item_condition|int|item|desc=Removes adventuring conditions.}}&lt;br /&gt;
{{Flink|void| add_item_condition|int|item|desc=Specifies adventuring conditions. With these in place, [[adventure|adventure()]] will successfully complete once the conditions are met.}}&lt;br /&gt;
{{Flink|boolean| is_goal|item|desc=Checks if a given item is a goal.}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string|desc=Checks if there is currently a given type of goal.}}&lt;br /&gt;
{{Flink|string [int]|get_goals|desc=Lists all current goals.}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int|desc=Determine if a counter will expire in a specified&lt;br /&gt;
period of time.}}&lt;br /&gt;
{{Flink|void|council|desc=Visits the Council of Loathing.}}&lt;br /&gt;
{{Flink|item|guardians|desc=Climbs the Naughty Sorceress&#039; Tower and passes the challenges it can, returning the first item needed to pass a failed stage.}}&lt;br /&gt;
{{Flink|int|tavern|desc=Attempt to complete the tavern, and returns the number of squares visited}}&lt;br /&gt;
{{Flink|boolean|entryway}}&lt;br /&gt;
{{Flink|boolean|hedgemaze}}&lt;br /&gt;
{{Flink|boolean|chamber|desc=These three functions attempt to perform the associated tasks. The return value indicates the success.}}&lt;br /&gt;
{{Flink|location|my_location|desc=Returns the location where you last adventured.}}&lt;br /&gt;
{{Flink|void|set_location|location|desc=Changes the value returned by my_location().}}&lt;br /&gt;
{{Flink|void|refresh_status|desc=Refreshes the side-pane character info (health, effects, etc.).}}&lt;br /&gt;
{{Flink|buffer|run_combat|desc=Uses the current KoLmafia settings to run a combat (for use with [[visit_url|visit_url()]]).}}&lt;br /&gt;
{{Flink|buffer|run_choice|desc=Chooses an option in the current choice adventure.}}&lt;br /&gt;
{{Flink|buffer|run_turn|descwork as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int|desc=Tries to set your +ML device to a specified setting and reports on success.}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item|desc=Trades worthless items (adventuring in the sewer if needed) to the hermit for specified items.}}&lt;br /&gt;
&lt;br /&gt;
==About Monsters==&lt;br /&gt;
For all of the below functions that accept an optional monster parameter, the default value is your most recently-encountered monster (that means your current monster if you&#039;re in combat).&lt;br /&gt;
&lt;br /&gt;
{{flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}|desc=Returns the chance of successfully getting the jump against the monster or in the location.}}&lt;br /&gt;
{{Flink|monster|last_monster|desc=Returns last monster encountered.}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location|desc=Returns a map of potential monsters at a given location.}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}|desc=Returns a map of the expected frequency of each monster at the specified location.}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}|desc=Returns the starting/current attack value of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}|desc=Returns the starting/current defense value of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}|desc=Returns the starting/current HP of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}|desc=Returns the starting/current initiative of the specified monster.}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}|desc=Returns the phylum of the specified monster.}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}|desc=Returns the amount of damage you are expected to take each round from the specified monster.}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}|desc=Returns the elemental alignment of the specified monster.}}&lt;br /&gt;
{{Flink|monster|image_to_monster|string|desc=Looks up monster by image name.}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster|desc=Returns true if the specified monster is banished}}&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
{{Flink|int|get_auto_attack|desc=Returns your current auto-attack setting.}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int|desc=Sets your auto-attack setting.}}&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Retrieve_item&amp;diff=2788</id>
		<title>Retrieve item</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Retrieve_item&amp;diff=2788"/>
		<updated>2017-03-13T07:50:16Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|retrieve_item}}{{&lt;br /&gt;
#vardefine:return_type|boolean}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|qty}}|&lt;br /&gt;
parameter2={{Param|item|get}}|&lt;br /&gt;
p1desc={{Pspan|qty}} is the quantity to acquire|&lt;br /&gt;
p2desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=Uses KoLmafia&#039;s internal logic to gather the items in the least destructive manner. Returns true if items are acquired as specified and false if not.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=This is an example of a very simple aftercore logout script.|&lt;br /&gt;
code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item nightcap = $item[ Mon Tiki ];&lt;br /&gt;
while (my_inebriety() &amp;lt;= inebriety_limit())&lt;br /&gt;
{&lt;br /&gt;
   if ( !retrieve_item( 1 , nightcap ) )&lt;br /&gt;
      abort( &amp;quot;Could not make/buy a &amp;quot; + nightcap + &amp;quot; for a nightcap.&amp;quot; );&lt;br /&gt;
   else&lt;br /&gt;
      overdrink( 1 , nightcap );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|buy}}|&lt;br /&gt;
cli_equiv=The CLI command &amp;quot;acquire&amp;quot; works similarly.|&lt;br /&gt;
special=Unlike a few other ASH commands, retrieve_item() will still return false on attempts to acquire items that are not possible to get (such as a sparkly engagement ring).|&lt;br /&gt;
more_info=For information on order of operations, see [[Retrieval order]].|&lt;br /&gt;
special=This function and it&#039;s CLI equivalent &amp;quot;acquire&amp;quot; will not purchase items from the mall that can not be discarded. This is because many of those items are surprisingly expensive. Such items can be detected by checking to see if their {{f|autosell_price}} is 0. There are a few hard-coded exceptions to this rule: clovers, phials, divine favors, love songs and white rice can all be purchased with this command despite not being discardable.|&lt;br /&gt;
}}&lt;br /&gt;
{{RFI|Are there exceptions to the info listed under Special?}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Item Management]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Adventuring&amp;diff=906</id>
		<title>Adventuring</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Adventuring&amp;diff=906"/>
		<updated>2017-03-13T07:47:33Z</updated>

		<summary type="html">&lt;p&gt;Bale: r15235: run_choice() and run_turn()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Flink|boolean|adventure|int|location|desc=Visits the desired location the the desired number of times.}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|string|desc=Visits the desired location a specified number of times, using a combat filter function defined elsewhere in your script.}}&lt;br /&gt;
{{Flink|boolean|adv1|location|int|string|desc=Adventure exactly once in the specified location (even if it uses no turns). Chained choice adventures &#039;&#039;&#039;are&#039;&#039;&#039; followed. Int overrides default settings, and string is a filter, same as in [[adventure|adventure()]]}}&lt;br /&gt;
{{Flink|buffer|visit_url}}&lt;br /&gt;
{{Flink|buffer|visit_url|string}}&lt;br /&gt;
{{Flink|buffer|visit_url|string|boolean}}&lt;br /&gt;
{{Flink|buffer|visit_url|string|boolean|boolean|desc=Visits the specified address and returns the page source.}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item|desc=Removes adventuring conditions.}}&lt;br /&gt;
{{Flink|void|add_item_condition|int|item|desc=Specifies adventuring conditions. With these in place, [[adventure|adventure()]] will successfully complete once the conditions are met.}}&lt;br /&gt;
{{Flink|boolean|is_goal|item|desc=Checks if a given item is a goal.}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string|desc=Checks if there is currently a given type of goal.}}&lt;br /&gt;
{{Flink|string [int]|get_goals|desc=Lists all current goals.}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int|desc=Determine if a counter will expire in a specified&lt;br /&gt;
period of time.}}&lt;br /&gt;
{{Flink|void|council|desc=Visits the Council of Loathing.}}&lt;br /&gt;
{{Flink|item|guardians|desc=Climbs the Naughty Sorceress&#039; Tower and passes the challenges it can, returning the first item needed to pass a failed stage.}}&lt;br /&gt;
{{Flink|int|tavern|desc=Attempt to complete the tavern, and returns the number of squares visited}}&lt;br /&gt;
{{Flink|boolean|entryway}}&lt;br /&gt;
{{Flink|boolean|hedgemaze}}&lt;br /&gt;
{{Flink|boolean|chamber|desc=These three functions attempt to perform the associated tasks. The return value indicates the success.}}&lt;br /&gt;
{{Flink|location|my_location|desc=Returns the location where you last adventured.}}&lt;br /&gt;
{{Flink|void|set_location|location|desc=Changes the value returned by my_location().}}&lt;br /&gt;
{{Flink|void|refresh_status|desc=Refreshes the side-pane character info (health, effects, etc.).}}&lt;br /&gt;
{{Flink|buffer|run_combat|desc=Uses the current KoLmafia settings to run a combat (for use with [[visit_url|visit_url()]]).}}&lt;br /&gt;
{{Flink|buffer|run_choice|desc=Chooses an option in the current choice adventure.}}&lt;br /&gt;
{{Flink|buffer|run_turn|descwork as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item|desc=Uses KoLmafia internal logic to gather items.}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int|desc=Tries to set your +ML device to a specified setting and reports on success.}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item|desc=Trades worthless items (adventuring in the sewer if needed) to the hermit for specified items.}}&lt;br /&gt;
&lt;br /&gt;
==About Monsters==&lt;br /&gt;
For all of the below functions that accept an optional monster parameter, the default value is your most recently-encountered monster (that means your current monster if you&#039;re in combat).&lt;br /&gt;
&lt;br /&gt;
{{flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}|desc=Returns the chance of successfully getting the jump against the monster or in the location.}}&lt;br /&gt;
{{Flink|monster|last_monster|desc=Returns last monster encountered.}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location|desc=Returns a map of potential monsters at a given location.}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}|desc=Returns a map of the expected frequency of each monster at the specified location.}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}|desc=Returns the starting/current attack value of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}|desc=Returns the starting/current defense value of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}|desc=Returns the starting/current HP of the specified monster.}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}|desc=Returns the starting/current initiative of the specified monster.}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}|desc=Returns the phylum of the specified monster.}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}|desc=Returns the amount of damage you are expected to take each round from the specified monster.}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}|desc=Returns the elemental alignment of the specified monster.}}&lt;br /&gt;
{{Flink|monster|image_to_monster|string|desc=Looks up monster by image name.}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster|desc=Returns true if the specified monster is banished}}&lt;br /&gt;
&lt;br /&gt;
==Misc.==&lt;br /&gt;
{{Flink|int|get_auto_attack|desc=Returns your current auto-attack setting.}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int|desc=Sets your auto-attack setting.}}&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Miscellaneous_Functions&amp;diff=1194</id>
		<title>Miscellaneous Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Miscellaneous_Functions&amp;diff=1194"/>
		<updated>2017-03-12T21:22:30Z</updated>

		<summary type="html">&lt;p&gt;Bale: r17892 add a whole lot of property functions!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
== Chat Functions ==&lt;br /&gt;
{{Flink|void|chat_clan|string}}&lt;br /&gt;
{{Flink|void|chat_clan|string|string|desc=Sends a message to clan chat.}}&lt;br /&gt;
{{Flink|void|chat_macro|string|desc=Submits a chat macro to KoL.}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string|desc=Sends a notification to the player&#039;s own chat.}}&lt;br /&gt;
{{Flink|void|chat_private|string|string|desc=Sends a private message to another player.}}&lt;br /&gt;
{{Flink|boolean|is_online|string|desc=Check to see if a player is online.}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan|desc=Returns a list of whom is in your clan and if they are in chat.}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster|desc=Check to see if a monster can be faxed.}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|desc=Attempts to receive a fax of a given monster.}}&lt;br /&gt;
&lt;br /&gt;
== Debugging Functions == &lt;br /&gt;
{{Flink|void|disable|string|desc=Disables the specified function.}}&lt;br /&gt;
{{Flink|void|enable|string|desc=Enables the specified function.}}&lt;br /&gt;
{{Flink|buffer|load_html|string|desc=Works like visit_url(), but for debugging.}}&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean|desc=Crafts the URL to visit.}}&lt;br /&gt;
&lt;br /&gt;
== Map Management Functions ==&lt;br /&gt;
&#039;&#039;Note: Information about maps (including creating, assigning, and removing keys, can be found at [[Data Structures#Maps|Map Data Structures]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|desc=Loads a map from a tab-delimited text file.}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|desc=Saves a map to a tab-delimited text file.}}&lt;br /&gt;
{{Flink|int|count|aggregate|desc=Returns the number of defined keys for the specified aggregate.}}&lt;br /&gt;
{{Flink|void|clear|aggregate|desc=Removes all keys from the specified aggregate.}}&lt;br /&gt;
&lt;br /&gt;
== Time Functions ==&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string|desc=Reformats dates.}}&lt;br /&gt;
{{Flink|int|gameday_to_int|desc=Returns the current KoL date as an integer.}}&lt;br /&gt;
{{Flink|string|gameday_to_string|desc=Returns the current KoL date as a string.}}&lt;br /&gt;
{{Flink|int|gametime_to_int|desc=Returns the current KoL time in ms as an integer.}}&lt;br /&gt;
{{Flink|string|now_to_string|string|desc=Returns current local time/date in SimpleDateFormat format.}}&lt;br /&gt;
{{Flink|string|time_to_string|desc=Returns the current local time in HH:mm:ss z format.}}&lt;br /&gt;
{{Flink|string|today_to_string|desc=Returns the current local day in ISO format.}}&lt;br /&gt;
&lt;br /&gt;
== SVN Functions ==&lt;br /&gt;
&#039;&#039;There is much additional information in the [[SVN Primer]]&#039;&#039;.&lt;br /&gt;
{{Flink|boolean|svn_exists|string|desc=Returns true if a valid working copy named projectname exists in the svn/ folder.}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string|desc=Returns true if projectname exists, is a valid working copy, and is currently at the same revision number as the repository.}}&lt;br /&gt;
{{Flink|record|svn_info|string|desc=Returns a record containing additional information about the given projectname: svnurl, last author, last revision, last change date.}}&lt;br /&gt;
&lt;br /&gt;
== User Interaction ==&lt;br /&gt;
{{Flink|void|print|string|{{opt|string}}|desc=Prints to CLI and status line of Adventuring window, optionally in a specified color.}}&lt;br /&gt;
{{Flink|void|print_html|string|desc=Prints to CLI, parsing any included html.}}&lt;br /&gt;
{{Flink|void|logprint|string|desc=Prints to the session log.}}&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int|desc=Sleeps for the specified number of seconds.}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|desc=Allows user input in Y/N format.}}&lt;br /&gt;
&lt;br /&gt;
== Property Functions ==&lt;br /&gt;
&lt;br /&gt;
{{Flink|boolean [string]| get_all_properties|string|boolean|desc=Returns a map of all user or global properties.}}&lt;br /&gt;
{{Flink|boolean| property_exists|string}}&lt;br /&gt;
{{Flink|boolean| property_exists|string|boolean|desc=Returns true if the named property exists.}}&lt;br /&gt;
{{Flink|boolean| property_has_default|string name|desc=Returns true if the named property in has a default value.}}&lt;br /&gt;
{{Flink|string| property_default_value|string name|desc=Returns the default value for a built-in property.}}&lt;br /&gt;
{{Flink|string| get_property|string}}&lt;br /&gt;
{{Flink|string| get_property|string|boolean|desc=Gets a global or user preference as appropriate.}}&lt;br /&gt;
{{Flink|void| set_property|string|string|desc=Sets a global or user preference as appropriate.}}&lt;br /&gt;
{{Flink|string| remove_property|string}}&lt;br /&gt;
{{Flink|string| remove_property|string|boolean|desc=Removes property or resets it to default.}}&lt;br /&gt;
{{Flink|boolean| rename_property|string|string|desc=Changes name of a property.}}&lt;br /&gt;
&lt;br /&gt;
== Other Functions ==&lt;br /&gt;
{{Flink|void|abort|{{opt|string}}|desc=Aborts the current script with an optional message.}}&lt;br /&gt;
{{Flink|boolean|cli_execute|string|desc=Executes the given command as if it were entered into the CLI.}}&lt;br /&gt;
{{Flink|void|batch_open|desc=Used to mark the beginning of a block of functions to operate in batch mode (see page for {{f|batch_close}} for details).}}&lt;br /&gt;
{{Flink|boolean|batch_close|desc=Used to mark the end of a block of functions to operate in batch mode (see page for details).}}&lt;br /&gt;
{{Flink|int|get_revision|desc=Returns the current KoLmafia revision number.}}&lt;br /&gt;
{{Flink|string|get_version|desc=Returns the most recent KoLmafia version.}}&lt;br /&gt;
{{Flink|string|get_player_id|string|desc=Returns the user id number of a given player.}}&lt;br /&gt;
{{Flink|string|to_json|aggregate|desc=Converts a simple aggregate into JSON.}}&lt;br /&gt;
&lt;br /&gt;
Additional functions that are considered not really to be ash functions are available in [[Miscellaneous ASH Features#Special Syntax Functions|Misc ASH Features]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7829</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7829"/>
		<updated>2017-03-12T20:57:14Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17892: Add a bunch of ASH support for doing interesting things with properties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
 r17892: Add a bunch of ASH support for doing interesting things with properties:&lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141625&amp;amp;viewfull=1#post141625 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21570-Properties&amp;amp;p=141629&amp;amp;viewfull=1#post141629&lt;br /&gt;
 &lt;br /&gt;
 boolean [string] get_all_properties( string filter, boolean global )&lt;br /&gt;
 boolean property_exists( string name )&lt;br /&gt;
 boolean property_exists( string name, boolean global )&lt;br /&gt;
 boolean property_has_default( string name )&lt;br /&gt;
 string property_default_value( string name )&lt;br /&gt;
 string get_property( string name, boolean global )&lt;br /&gt;
 string remove_property( string name )&lt;br /&gt;
 string remove_property( string name, boolean global )&lt;br /&gt;
 boolean rename_property( string old_name, string new_name )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7828</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7828"/>
		<updated>2017-02-22T21:19:49Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17845: Add my_absorbs() ash function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
 r17845: Add my_absorbs() ash function&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7827</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7827"/>
		<updated>2017-02-16T05:21:53Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17819: int slash_count( item it )&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 r17819: Add ASH function to interface to KoL&#039;s /count chat command:&lt;br /&gt;
 int slash_count( item it )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7826</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7826"/>
		<updated>2017-02-16T04:36:16Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
 r17817: Added CLI command &amp;quot;absorb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7825</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7825"/>
		<updated>2017-01-17T23:39:08Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17673: Add &amp;quot;shop reprice&amp;quot; command &amp;amp; r17677: edpiece?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17673: Add &amp;quot;shop reprice&amp;quot; command and reprice_shop() ash function&lt;br /&gt;
&lt;br /&gt;
 r17677: edpiece? command tells you the effects of the various decorations, as well as telling you which one is currently equipped.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7824</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7824"/>
		<updated>2017-01-13T09:38:53Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
 &lt;br /&gt;
 r17658: http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=140128#post140128&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Item_Management&amp;diff=4242</id>
		<title>Item Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Item_Management&amp;diff=4242"/>
		<updated>2017-01-08T22:12:35Z</updated>

		<summary type="html">&lt;p&gt;Bale: All Sweet Synthesis skills as of r17644&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Informational==&lt;br /&gt;
{{Flink|int|my_meat|desc=Returns the amount of meat you have on hand.}}&lt;br /&gt;
{{Flink|int|my_closet_meat|desc=Returns the amount of meat you have in your Colossal Closet.}}&lt;br /&gt;
{{Flink|int|my_storage_meat|desc=Returns the amount of meat you have in Hagnk&#039;s Ancestral Mini-Storage.}}&lt;br /&gt;
{{Flink|int|pulls_remaining|desc=Returns the number of pulls you can make from storage, or 0 if not applicable.}}&lt;br /&gt;
{{Flink|boolean|have_chef|desc=Returns true if you have a chef-boxen at your campground.}}&lt;br /&gt;
{{Flink|boolean|have_bartender|desc=Returns true if you have a bartender-boxen at your campground.}}&lt;br /&gt;
{{Flink|int [item]|get_campground|desc=Returns a map of your campground items.}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge|desc=Returns a map of your Clan VIP Lounge items.}}&lt;br /&gt;
{{Flink|item|get_dwelling|desc=Returns the item corresponding with your dwelling.}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot|desc=Returns true if and only if you&#039;ve purchased a mushroom plot this run.}}&lt;br /&gt;
{{Flink|int|stills_available|desc=Returns the number of Nash Crosby&#039;s Still uses left for the day (0 if not accessible).}}&lt;br /&gt;
{{Flink|string|item_type|item|desc=Returns the type of item specified.}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int [item]|get_shop|desc=Returns entire contents of shop and quantity of each item}}&lt;br /&gt;
{{Flink|int|stash_amount|item|}}&lt;br /&gt;
{{Flink|int|storage_amount|item|desc=These 7 functions return the total number available of a given item in the respective section of your inventory.}}&lt;br /&gt;
{{Flink|int|available_amount|item|desc=Returns the total number available of a given item in all inventory sections accessible to your character based on current restrictions.}}&lt;br /&gt;
{{Flink|int|creatable_amount|item|desc=Returns the amount of the item that you are capable of creating given your current inventory and skills.}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item|desc=Returns a map where each key is one of the required ingredients, with the integer value the number required. If you don&#039;t have the skills needed to make the item, it will return an empty map.}}&lt;br /&gt;
{{Flink|string|craft_type|item|desc=Returns a string identifying how an item is crafted and any other requirements for creating it.}}&lt;br /&gt;
{{Flink|int [item]|get_inventory|desc=Returns a map where each key is an item in your inventory, with the integer value its quantity.}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string|desc=Returns associated items in a zap or fold group (see page for details).}}&lt;br /&gt;
[[File:Item category.png|frame|You can categorize items in KoL using [[is tradeable|is_tradeable()]], [[is giftable|is_giftable()]], and [[is displayable|is_displayable()]].]]&lt;br /&gt;
{{Flink|boolean|is_tradeable|item|desc=Returns whether the item can be placed in the mall.}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item|desc=Returns whether the item can be traded in a gift package.}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item|desc=Returns whether the item can be put in a display case (true for all but quest items).}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item|desc=Returns whether the item can be discarded or autosold.}}&lt;br /&gt;
{{Flink|boolean|have_shop|desc=Returns whether you have a mall store.}}&lt;br /&gt;
{{Flink|boolean|have_display|desc=Returns whether you have a display case.}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item|desc=Returns whether the item can be bought from an NPC store.}}&lt;br /&gt;
{{Flink|void|refresh_stash|desc=Takes a new look at the contents of your clan stash, as that section of inventory cannot be internally tracked due to access by others.}}&lt;br /&gt;
{{Flink|void|refresh_shop|desc=Takes a new look at the contents of your mall store, as that section of inventory cannot be internally tracked due to access by others.}}&lt;br /&gt;
{{Flink|int|shop_price|item|desc=Returns the current price for the given item if it is present in your mall store.}}&lt;br /&gt;
{{Flink|int|mall_price|item|desc=Returns the current (lowest) mall price of the given item.}}&lt;br /&gt;
{{Flink|int|npc_price|item|desc=Returns the current price of the given item if it can currently be bought from an NPC store.}}&lt;br /&gt;
{{Flink|int|historical_price|item|desc=Returns the most recently checked price for an item. This will never hit the server, unlike mall_price().}}&lt;br /&gt;
{{Flink|float|historical_age|item|desc=Returns the age of the most recently checked price for an item in days. This allows you to decide if you want to use historical_price() or mall_price().}}&lt;br /&gt;
{{Flink|int|autosell_price|item|desc=Returns the autosell price of the item (0 for items that cannot be autosold).}}&lt;br /&gt;
{{Flink|int|get_power|item|desc=Returns the power of the item (0 for items that don&#039;t have a power).}}&lt;br /&gt;
{{Flink|string|to_plural|item|desc=Returns the plural of an item as a string.}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}|desc=Returns a certain monster&#039;s base meat drop.}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}|desc=Returns an array of a certain monster&#039;s base item drops, keying item to drop rate. Has certain limitations detailed on individual page.}}&lt;br /&gt;
{{Flink|record [int]|item_drops_array|{{opt|monster}}|desc=Returns an array of records holding information regarding a certain monster&#039;s base item drops.}}&lt;br /&gt;
&lt;br /&gt;
==Moving Items Around==&lt;br /&gt;
{{Flink|boolean|empty_closet|desc=Remove every item from the closet in a single server hit.}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item|desc=Attempts to take or put the specified item in the appropriate section of your inventory, and returns its success.&amp;lt;br /&amp;gt;If the item parameter is omitted from put_closet() or take_closet(), meat is transferred instead of an item.}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item|desc=Adds or removes items in your store and returns success.}}&lt;br /&gt;
&lt;br /&gt;
==Acquiring &amp;amp; Using Items==&lt;br /&gt;
{{Flink|boolean|autosell|int|item|desc=Attempts to autosell the given items and reports success.}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|int|buy|int|item|int|desc=Tries to purchase the specified items.}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int|desc=Tries to purchase the specified items using meat in Hangks.}}&lt;br /&gt;
{{Flink|boolean|create|int|item|desc=Attempts to create the specified items, following your KoLmafia settings regarding purchases to gather ingredients &amp;amp; require boxen.}}&lt;br /&gt;
{{Flink|boolean|drink|int|item|desc=Attempts to drink items as specified and reports success.}}&lt;br /&gt;
{{Flink|boolean|eat|int|item|desc=Attempts to eat items as specified and reports success.}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item|desc=Attempts to eat items as specified.}}&lt;br /&gt;
{{Flink|boolean|chew|int|item|desc=Attempts to chew spleen items as specified and reports success.}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item|desc=Trades worthless items (buying and using chewing gum if needed) to the hermit for specified items (see page for details).}}&lt;br /&gt;
{{Flink|boolean|use|int|item|desc=Attempts to use items as specified and reports success.}}&lt;br /&gt;
{{Flink|boolean|overdrink|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item|desc=Uses KoLmafia internal logic to gather items (see page for details).}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item|desc=Raw crafting that obeys KoLmafia settings (see page for details).}}&lt;br /&gt;
{{Flink|string|last_item_message|desc=Returns message that KoL reports in the event of error.}}&lt;br /&gt;
&lt;br /&gt;
==Coinmaster Control==&lt;br /&gt;
Some items can be bought from or sold to various &amp;quot;coinmasters&amp;quot; which are like shops that deal in a currency other than meat. These coinmasters include the Dimemaster and Quartermaster during the Island War, the Hermit, the Mr. Store and many others. Some relevant information can be found in [[proxy records]] for the item and coinmaster data types. The rest is controlled by the following functions.&lt;br /&gt;
&lt;br /&gt;
===Inquiries===&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|string|desc=Converts a string to a valid coinmaster.}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item|desc=Is a given item acquirable from a coinmster.}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item|desc=Is a specific item acquirable from the named coinmster.}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item|desc=What is the coinmaster&#039;s purchase price for an item.}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item|desc=Is a specific item sellable to the named coinmster.}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item|desc=What is the coinmaster&#039;s selling price for an item.}}&lt;br /&gt;
&lt;br /&gt;
===Coinmaster transactions===&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster|desc=Is a given coinmaster currently accessible.}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster|desc=The reason a given coinmaster is currently inaccessible.}}&lt;br /&gt;
{{Flink|boolean|visit|coinmaster|desc=Refreshes information at a coinmaster.}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|int|item|desc=Buys an item from a coinmaster.}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item|desc=Sells an item to a coinmaster.}}&lt;br /&gt;
&lt;br /&gt;
===Sweet Synthesis===&lt;br /&gt;
{{Flink|item [int]|candy_for_tier|int|{{opt|int}}|desc=Returns all the candy to create a given tier of effect.}}&lt;br /&gt;
{{Flink|item [int]|sweet_synthesis_pairing|effect|item|{{opt|int}}|desc=Find a second candy to synthesize.}}&lt;br /&gt;
{{Flink|item [int]|sweet_synthesis_pair|effect|{{opt|int}}|desc=Picks a pair of candies to synthesize for an effect.}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item|desc=Show result of synthesis.}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|item|item|desc=Synthesize specified candies.}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}|desc=Picks a pair of candies and synthesizes them for the effect.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7823</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7823"/>
		<updated>2017-01-08T21:56:23Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 For the desired effect, pick a suitable pair of candies.&lt;br /&gt;
 If you are in-run, it will use only &amp;quot;available&amp;quot; candy and will prefer candies that you have more of.&lt;br /&gt;
 If you are post-run, it will consider all candies and will choose the pair with the lowest total mall price.&lt;br /&gt;
 If you want to force &amp;quot;available&amp;quot; candies post-run, use flags = 1.&lt;br /&gt;
 &lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
 &lt;br /&gt;
 The same, but it will actually perform Sweet Synthesis to get the effect.&lt;br /&gt;
 &lt;br /&gt;
 http://kolmafia.us/showthread.php?21144-Rethinking-Candy&amp;amp;p=139996&amp;amp;viewfull=1#post139996&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7822</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7822"/>
		<updated>2017-01-08T20:43:44Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17644: To automatically select pairs of candy, add some ASH functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
 r17644: To automatically select pairs of candy, add some ASH functions:&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect )&lt;br /&gt;
 item [int] sweet_synthesis_pair( effect, flags )&lt;br /&gt;
 boolean sweet_synthesis( effect )&lt;br /&gt;
 boolean sweet_synthesis( effect, flags )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7821</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7821"/>
		<updated>2017-01-08T20:38:21Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17645 synthesize(?) EFFECT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
 r17645: Add CLI commands: &lt;br /&gt;
 synthesize EFFECT&lt;br /&gt;
 synthesize? EFFECT&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7820</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7820"/>
		<updated>2017-01-08T06:22:25Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17637: Add &amp;quot;synthesize&amp;quot; command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
 r17637: Add &amp;quot;synthesize&amp;quot; command: synthesize CANDY1, CANDY2 - combines candies to get an effect&lt;br /&gt;
 synthesize? CANDY1, CANDY2 - tells you about the candies and the effect&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7819</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7819"/>
		<updated>2017-01-06T22:16:40Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r16790: int [int] reverse_numberology()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16790: Add ASH function int [int] reverse_numberology([int adv_delta, int spleen_delta]).&lt;br /&gt;
 The return value is a map from result IDs to input seeds that generate said results.&lt;br /&gt;
 adv_delta and spleen_delta, which both default to 0, allow one to obtain forecasts on upcoming options.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19664-ASH-command(s)-for-Numberology&amp;amp;p=133467&amp;amp;viewfull=1#post133467&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7818</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7818"/>
		<updated>2017-01-05T02:42:21Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17629: overload candy_for_tier() and sweet_synthesis_pairing()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
 r17629: Add candy_for_tier() and sweet_synthesis_pairing() ASH functions that have a &amp;quot;flags&amp;quot; argument, &lt;br /&gt;
 in which you can specify filtering. 0 = no filtering, 1 = available, 2 = allowed, 3 = available and allowed.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7817</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7817"/>
		<updated>2017-01-02T02:50:10Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17612 &amp;amp; r17613: Sweet Synthesis stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
 r17612: ASH has a function to return all the candy in a given tier:&lt;br /&gt;
 item [int] &#039;&#039;&#039;candy_for_tier&#039;&#039;&#039;( int tier )&lt;br /&gt;
 The &amp;quot;&#039;&#039;&#039;checkcandy&#039;&#039;&#039;&amp;quot; command will list all unspaded candy or will tell you the candy type of each of its arguments.&lt;br /&gt;
&lt;br /&gt;
 r17613: More Sweet Synthesis stuff: ASH functions:&lt;br /&gt;
 boolean &#039;&#039;&#039;sweet_synthesis&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 effect &#039;&#039;&#039;sweet_synthesis_result&#039;&#039;&#039;( item candy1, item candy2 )&lt;br /&gt;
 item [int] &#039;&#039;&#039;sweet_synthesis_pairings&#039;&#039;&#039;( effect result, item candy1 )&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=SVN_Primer&amp;diff=8408</id>
		<title>SVN Primer</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=SVN_Primer&amp;diff=8408"/>
		<updated>2016-12-19T21:40:05Z</updated>

		<summary type="html">&lt;p&gt;Bale: re-order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Subversion (svn) is a centralized version control system. A repository (repo) exists online — this repo contains a scripting project. KoLmafia can download scripts from an online SVN repo and automatically install them for the user. It can even automatically update scripts to the latest version without any effort from the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Non-Technical FAQ ==&lt;br /&gt;
&#039;&#039;&#039;Q. What is this &amp;quot;SVN&amp;quot; thinggy?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. It&#039;s a better way for users to install scripts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. What do I have to know about SVN to use this feature?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Absolutely nothing! There&#039;s a Script Manger under the Scripts menu. You can select scripts you want to install, right-click and select &amp;quot;install script.&amp;quot; Then the magic happens. It&#039;s really simple.&lt;br /&gt;
:[[File:Script_Manager_Abridged.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. At the top of the page you said &amp;quot;automatically update scripts.&amp;quot; None of my scripts have updated themselves so how does that work?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. There&#039;s a preference you have to set to enable it which is off by default. Go to Preferences -&amp;gt; SVN -&amp;gt; Check &amp;quot;Update installed SVN projects on login.&amp;quot; That will cause all your SVN installed scripts to be updated once a day.&lt;br /&gt;
:[[File:Preferences_SVN.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Why is SVN good for KoLmafia scripts?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. There are a whole bunch of reasons. I&#039;ll enumerate:&lt;br /&gt;
# It makes finding the script you want easy. Just read down the list checking the description for each.&lt;br /&gt;
# It makes script installation easier. The user doesn&#039;t have to ensure that the script is downloaded into the correct directory or fret about putting multiple files into multiple directories.&lt;br /&gt;
# It makes script updating easier. All scripts can be updated automatically at first run of the day, or the user can type &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt; to manually update all scripts.&lt;br /&gt;
# It is easier for the scripter to publish his scripts and keep them up to date.&lt;br /&gt;
# When you recommend a script in chat, you can tell them its name in the Script Manager without their having to go download something from the KoLmafia forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Why was this added to mafia?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. We understand that a lot of people don&#039;t use scripts, even scripts that will help them a lot. This is because they find it troublesome to find and install scripts. The intention is to make it easy to install scripts. Even a script like Character Info Toolbox which contains more than 30 files is easy to install now. Just install it from Mafia&#039;s Script Manager and every single file will be placed in the correct directory. If you don&#039;t like it, you can use the Script Manager to delete it and all those files are removed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Wait! Does this mean I don&#039;t have to find the correct thread on the KoLmafia forum and login there to install a script?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Yup. It&#039;s incomprehensible to most of us, but we&#039;ve noticed that people hate reading our forum. Now you won&#039;t have to do that.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. This sounds like black magic!&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Please state your problem in the form of a question.&amp;lt;br /&amp;gt;&lt;br /&gt;
Q. How does that work?&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Black magic. Not really, but it is very impressive and you don&#039;t really need to know the mechanics. Just trust that it works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Revision Merging ==&lt;br /&gt;
There is another even more impressive ability of the KoLmafia&#039;s svn update: Revision Merging! This is only helpful to people who know how to modify someone&#039;s script, but you only need to understand a few lines of any script to make this worth reading. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;real&#039;&#039; awesome here is aimed at people who sometimes like to make small modifications to their scripts. People like you with a little bit of scripting ability. I suspect you&#039;ve sometimes made a tiny tweak to a script to make it more perfect for your specific needs. Then the original author updates his script and you&#039;re stuck trying to decide if it is worth your trouble to copy all your modifications to the new version of his script. If not, you might just refuse to update it. With SVN if you know what you are doing, you can update your cake and eat it too! When svn updates your script it will automatically keep your modifications, producing a blend of your modifications and the author&#039;s update. Now I&#039;ll tell you how to do this.&lt;br /&gt;
&lt;br /&gt;
# Acquire the most recent version using &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt;&lt;br /&gt;
# Open the script&#039;s working copy in the project&#039;s /svn directory, and make your edits. Always make sure the project in /svn has your changes&lt;br /&gt;
# Use the command &amp;lt;code&amp;gt; svn sync &amp;lt;/code&amp;gt; to push your modifications in the working copy to the local copy in the /scripts or /relay directory&lt;br /&gt;
# If you ever want to modify your changes or add to them, just repeat steps 2 and 3.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Now you can update from svn as usual. You can use &amp;lt;code&amp;gt; svn update bale-ocd &amp;lt;/code&amp;gt; to update just that script, or &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt; to update all your scripts or just check the box in SVN preferences to make it happen automatically once a day. Whenever the script is updated SVN will magically merge your changes into the working copy in the /svn folder and then push those changes into the local copy. This is magic! This will happen every single time you use svn to update the script without requiring your intervention. The CLI will display a &amp;quot;G&amp;quot; for merGing the script instead of a &amp;quot;U&amp;quot; for Updating it when this happens.&lt;br /&gt;
&lt;br /&gt;
=== Revision Conflicts ===&lt;br /&gt;
If an update to a script changes it so severely that it cannot be merGed with your modifications, it will show &amp;quot;C&amp;quot; for Conflict and produce several files in the working copy to help you solve the problem: &lt;br /&gt;
* myfile - will have some inline markup at the location of the conflict ( look for &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; and &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; markup) showing you both what your text was and what the repo&#039;s text was.&lt;br /&gt;
* myfile.mine - Your version before the update.&lt;br /&gt;
* myfile.rOld - The pristine repo versions from before the update.&lt;br /&gt;
* myfile.rNew - The pristine repo versions from after the update.&lt;br /&gt;
&lt;br /&gt;
With all of these files, you can pretty easily figure out where the problem line(s) are, and how to fix them. Sometimes you&#039;ll just want to use rNew and discard your local changes, sometimes you&#039;ll want to do something else. Copy/pasting between the different files is straightforward. You will need to delete the extra files when you&#039;re done resolving the conflict, and make sure that the remaining file has the same name as the original file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Information for Scripters ==&lt;br /&gt;
The SVN repo contains your project. It not only contains the files for your project, but every previous version of those files that&#039;s ever existed. Think of old versions like hitting ctrl-z on a Word document — you can revert changes all the way back to the start, or anywhere in between.&lt;br /&gt;
&lt;br /&gt;
It is more than just a place to save files though. There is something called a Working Copy, which is a local version of a remote repository, plus any local changes you may have made. The process of creating this Working Copy is referred to as &amp;quot;checking out&amp;quot; the repo, or &amp;quot;checkout.&amp;quot; You have probably also heard the term &amp;quot;commit&amp;quot; which is simply taking some/all local changes in a working copy and syncing them with the repo. Then other users sync their working copies with the repo, and voila!&lt;br /&gt;
&lt;br /&gt;
=== How to Set Up a Repo ===&lt;br /&gt;
A working copy contains a hidden folder, .svn, that contains all of the metadata needed to know how your local version differs from the repository&#039;s version. This is created for you when you checkout the project. You don&#039;t really need to know any of these details, really, for the most part using svn does not require knowing how it works under the hood. What you may be interested in is how to create your own repo. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll go over the easiest method under Windows - using TortoiseSVN. Under *nix you should probably just be using the command line &amp;quot;svn&amp;quot; client, though I imagine there are a million different graphical alternatives. There are alternatives in windows as well, I just prefer TortoiseSVN for its file system integration.&lt;br /&gt;
&lt;br /&gt;
First, get a [https://sourceforge.net/ sourceforge] account. Make a new project there. Download [http://tortoisesvn.net/downloads.html TortoiseSVN] and install it. Make a new folder somewhere on your computer. Right-click, and choose SVN Checkout... from the context menu. You will want to give it the address that you see on your new sourceforge project code page - for now just grab the http:// address, it&#039;s easier. Ignore the commands in front of the address and after it, those are for command-line svn tools.&lt;br /&gt;
&lt;br /&gt;
The rest of the default options are okay. Click OK and you should get a new working copy of your repo! Cool. Open it up and let&#039;s add some stuff. Add a new directory called scripts/, and within scripts/ put a new text file. Now navigate back up to the root of your working copy, right click on the folder, and choose SVN commit... Tick all the files/folders (tick the &amp;quot;show unversioned files&amp;quot; box if it&#039;s not ticked), give it a quick commit comment up top. You should have to enter your sourceforge user information, save it if you want. If you&#039;ve done everything correctly, your new project should have been committed.&lt;br /&gt;
&lt;br /&gt;
Optional: to really play around with this, checkout a second working copy somewhere in another folder on your computer. Try committing changes from one working copy to the repo, then doing right-click SVN Update on the other working copy. Notice how TortoiseSVN helpfully changes the little file/folder icons for you when you make modifications to things. Hopefully you&#039;re starting to see how this whole thing works.&lt;br /&gt;
&lt;br /&gt;
=== What it Can Do ===&lt;br /&gt;
Svn is a very mature tool by now, so there&#039;s an absolute ton of stuff that I won&#039;t cover. You may for example notice that mafia itself has a &amp;quot;Latest SVN Changes&amp;quot; forum, which has .diffs of all the changes to files within mafia. There&#039;s also creating patches, merging repos, yada yada... Won&#039;t talk about it.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more interested in talking about how mafia svn integration works. Doing &amp;lt;code&amp;gt; svn checkout &amp;lt;repo&amp;gt; &amp;lt;/code&amp;gt; creates a working copy of the repo in your svn/ folder. Then, mafia &amp;quot;pushes&amp;quot; the contents of that working copy to the appropriate subfolders. For example, if a repo has a scripts/dostuff.ash file, that file gets copied to your scripts/ folder.&lt;br /&gt;
&lt;br /&gt;
svn update goes through all your working copies and performs an update. There are other operations that can happen here. With a checkout, you can only be adding (&amp;quot;A&amp;quot;) new files to a working copy. With an update you can update (&amp;quot;U&amp;quot;), merge (&amp;quot;G&amp;quot;), delete (&amp;quot;D&amp;quot;) or also add (&amp;quot;A&amp;quot;) files. Here, we warn the user whenever a file is added, due to security concerns. Note that &amp;quot;U&amp;quot;pdating &#039;&#039;&#039;only happens if the &amp;quot;pushed&amp;quot; local file still exists in the user&#039;s directory&#039;&#039;&#039;. I am bolding this because I&#039;m sure it will confuse some people. This feature is a safeguard against svn re-installing scripts over and over that the user just wants to have deleted.&lt;br /&gt;
&lt;br /&gt;
If you installed TortoiseSVN above and browse to the svn/ folder, you may notice something: the working copies checked out with svn checkout are fully-featured working copies, just like you checked out using TortoiseSVN. This means that you can make changes directly to this folder and commit them to the repo using TortoiseSVN - if you have repo commit permissions, of course.&lt;br /&gt;
&lt;br /&gt;
=== Specifications ===&lt;br /&gt;
At the base level of the SVN link there are only several legal folders which may contain scripts:&lt;br /&gt;
* ccs/&lt;br /&gt;
* data/&lt;br /&gt;
* images/&lt;br /&gt;
* planting/&lt;br /&gt;
* relay/&lt;br /&gt;
* scripts/&lt;br /&gt;
Additionally there is only one legal file:&lt;br /&gt;
* dependencies.txt&lt;br /&gt;
If there are any other folders or files at the base level of the SVN repository, it will fail to be checked out by KoLmafia. This is a security feature. Within the stated folders you can nest any additional folders and files you desire.&lt;br /&gt;
&lt;br /&gt;
When the SVN repo is committed, the scripts in the folders will be pushed to local copies in corresponding folders in the KoLmafia directory. If there is a file of the same name in any of those folder, or a sub-folder of those folders, then the file will be copied to that location. This allows the user to move the files to new locations or sub-folders and still know that KoLmafia will keep it up to date.&lt;br /&gt;
&lt;br /&gt;
The file &amp;lt;code&amp;gt;&#039;&#039;&#039;dependencies.txt&#039;&#039;&#039;&amp;lt;/code&amp;gt; contains a list of other SVN repositories that this script will automatically install. This is done so that the script can install other scripts it depends on. If there is a &amp;lt;code&amp;gt;&#039;&#039;&#039;dependencies.txt&#039;&#039;&#039;&amp;lt;/code&amp;gt; file at the root directory of the repo, it will not be pushed along with the files in the various folders. It only exists to serve this purpose. Each line in the file provides a url to another SVN project. Here is an example of what a dependencies.txt file may look like:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; https://svn.code.sf.net/p/zlib/code&lt;br /&gt;
 https://svn.code.sf.net/p/smartstasis/code&lt;br /&gt;
 https://svn.code.sf.net/p/therazekolmafia/canadv/code/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Command SVN ==&lt;br /&gt;
KoLmafia has both ASH and CLI commands to interact with SVN repos.&lt;br /&gt;
=== CLI Commands ===&lt;br /&gt;
SVN Repositories can be checked out, updated or deleted from the CLI with the following commands:&lt;br /&gt;
* &amp;lt;code&amp;gt;svn checkout &amp;lt;svnurl&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This checks out an svn repository and adds the files from the working copy to the appropriate locations. &amp;lt;svnurl&amp;gt; must be a &amp;lt;nowiki&amp;gt;svn://, http://, or https://&amp;lt;/nowiki&amp;gt; link to a valid svn repo.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn list&amp;lt;/code&amp;gt;&lt;br /&gt;
: This lists installed projects.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;SVNURL&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This updates your installed projects and pushes any changes to the appropriate locations. If the parameter is blank it will update everything.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn delete &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This deletes an installed project and the corresponding files that it pushed. &amp;lt;projectname&amp;gt; fuzzy matches the script names from svn list.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn increment &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn decrement &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: These two commands move an installed svn project up/down one revision, respectively.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn inc &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn dec &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The same as the previous two commands. Because typing stuff is hard.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn sync&amp;lt;/code&amp;gt;&lt;br /&gt;
: This looks through your working copies for modifications, then checks if that file differs from the local copy. If it differs, the working copy file is copied over the local copy one. Note that this is very different from &amp;quot;svn update&amp;quot; and does not contact the repository server at all.&lt;br /&gt;
&lt;br /&gt;
=== ASH Commands ===&lt;br /&gt;
There are a few additional functions that ASH possesses to check up on an SVN repo.&lt;br /&gt;
* {{Flink|boolean|svn_exists|string|desc=Returns true if a valid working copy named projectname exists in the /svn folder.}}&lt;br /&gt;
* {{Flink|boolean|svn_at_head|string|desc=Returns true if projectname exists, is a valid working copy, and is currently at the same revision number as the repository.}}&lt;br /&gt;
* {{Flink|record|svn_info|string|desc=Returns a record containing additional information about the given projectname: svnurl, last author, last revision, last change date.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:New User Help]][[Category:Scripting]][[Category:Tech Support]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=SVN_Primer&amp;diff=8407</id>
		<title>SVN Primer</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=SVN_Primer&amp;diff=8407"/>
		<updated>2016-12-19T21:35:55Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Revision Merging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Subversion (svn) is a centralized version control system. A repository (repo) exists online — this repo contains a scripting project. KoLmafia can download scripts from an online SVN repo and automatically install them for the user. It can even automatically update scripts to the latest version without any effort from the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Non-Technical FAQ ==&lt;br /&gt;
&#039;&#039;&#039;Q. What is this &amp;quot;SVN&amp;quot; thinggy?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. It&#039;s a better way for users to install scripts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. What do I have to know about SVN to use this feature?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Absolutely nothing! There&#039;s a Script Manger under the Scripts menu. You can select scripts you want to install, right-click and select &amp;quot;install script.&amp;quot; Then the magic happens. It&#039;s really simple.&lt;br /&gt;
:[[File:Script_Manager_Abridged.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. At the top of the page you said &amp;quot;automatically update scripts.&amp;quot; None of my scripts have updated themselves so how does that work?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. There&#039;s a preference you have to set to enable it which is off by default. Go to Preferences -&amp;gt; SVN -&amp;gt; Check &amp;quot;Update installed SVN projects on login.&amp;quot; That will cause all your SVN installed scripts to be updated once a day.&lt;br /&gt;
:[[File:Preferences_SVN.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Why is SVN good for KoLmafia scripts?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. There are a whole bunch of reasons. I&#039;ll enumerate:&lt;br /&gt;
# It makes finding the script you want easy. Just read down the list checking the description for each.&lt;br /&gt;
# It makes script installation easier. The user doesn&#039;t have to ensure that the script is downloaded into the correct directory or fret about putting multiple files into multiple directories.&lt;br /&gt;
# It makes script updating easier. All scripts can be updated automatically at first run of the day, or the user can type &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt; to manually update all scripts.&lt;br /&gt;
# It is easier for the scripter to publish his scripts and keep them up to date.&lt;br /&gt;
# When you recommend a script in chat, you can tell them its name in the Script Manager without their having to go download something from the KoLmafia forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Why was this added to mafia?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. We understand that a lot of people don&#039;t use scripts, even scripts that will help them a lot. This is because they find it troublesome to find and install scripts. The intention is to make it easy to install scripts. Even a script like Character Info Toolbox which contains more than 30 files is easy to install now. Just install it from Mafia&#039;s Script Manager and every single file will be placed in the correct directory. If you don&#039;t like it, you can use the Script Manager to delete it and all those files are removed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. Wait! Does this mean I don&#039;t have to find the correct thread on the KoLmafia forum and login there to install a script?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Yup. It&#039;s incomprehensible to most of us, but we&#039;ve noticed that people hate reading our forum. Now you won&#039;t have to do that.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q. This sounds like black magic!&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Please state your problem in the form of a question.&amp;lt;br /&amp;gt;&lt;br /&gt;
Q. How does that work?&amp;lt;br /&amp;gt;&lt;br /&gt;
A. Black magic. Not really, but it is very impressive and you don&#039;t really need to know the mechanics. Just trust that it works.&lt;br /&gt;
&lt;br /&gt;
== Information for Scripters ==&lt;br /&gt;
The SVN repo contains your project. It not only contains the files for your project, but every previous version of those files that&#039;s ever existed. Think of old versions like hitting ctrl-z on a Word document — you can revert changes all the way back to the start, or anywhere in between.&lt;br /&gt;
&lt;br /&gt;
It is more than just a place to save files though. There is something called a Working Copy, which is a local version of a remote repository, plus any local changes you may have made. The process of creating this Working Copy is referred to as &amp;quot;checking out&amp;quot; the repo, or &amp;quot;checkout.&amp;quot; You have probably also heard the term &amp;quot;commit&amp;quot; which is simply taking some/all local changes in a working copy and syncing them with the repo. Then other users sync their working copies with the repo, and voila!&lt;br /&gt;
&lt;br /&gt;
=== How to Set Up a Repo ===&lt;br /&gt;
A working copy contains a hidden folder, .svn, that contains all of the metadata needed to know how your local version differs from the repository&#039;s version. This is created for you when you checkout the project. You don&#039;t really need to know any of these details, really, for the most part using svn does not require knowing how it works under the hood. What you may be interested in is how to create your own repo. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll go over the easiest method under Windows - using TortoiseSVN. Under *nix you should probably just be using the command line &amp;quot;svn&amp;quot; client, though I imagine there are a million different graphical alternatives. There are alternatives in windows as well, I just prefer TortoiseSVN for its file system integration.&lt;br /&gt;
&lt;br /&gt;
First, get a [https://sourceforge.net/ sourceforge] account. Make a new project there. Download [http://tortoisesvn.net/downloads.html TortoiseSVN] and install it. Make a new folder somewhere on your computer. Right-click, and choose SVN Checkout... from the context menu. You will want to give it the address that you see on your new sourceforge project code page - for now just grab the http:// address, it&#039;s easier. Ignore the commands in front of the address and after it, those are for command-line svn tools.&lt;br /&gt;
&lt;br /&gt;
The rest of the default options are okay. Click OK and you should get a new working copy of your repo! Cool. Open it up and let&#039;s add some stuff. Add a new directory called scripts/, and within scripts/ put a new text file. Now navigate back up to the root of your working copy, right click on the folder, and choose SVN commit... Tick all the files/folders (tick the &amp;quot;show unversioned files&amp;quot; box if it&#039;s not ticked), give it a quick commit comment up top. You should have to enter your sourceforge user information, save it if you want. If you&#039;ve done everything correctly, your new project should have been committed.&lt;br /&gt;
&lt;br /&gt;
Optional: to really play around with this, checkout a second working copy somewhere in another folder on your computer. Try committing changes from one working copy to the repo, then doing right-click SVN Update on the other working copy. Notice how TortoiseSVN helpfully changes the little file/folder icons for you when you make modifications to things. Hopefully you&#039;re starting to see how this whole thing works.&lt;br /&gt;
&lt;br /&gt;
=== What it Can Do ===&lt;br /&gt;
Svn is a very mature tool by now, so there&#039;s an absolute ton of stuff that I won&#039;t cover. You may for example notice that mafia itself has a &amp;quot;Latest SVN Changes&amp;quot; forum, which has .diffs of all the changes to files within mafia. There&#039;s also creating patches, merging repos, yada yada... Won&#039;t talk about it.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more interested in talking about how mafia svn integration works. Doing &amp;lt;code&amp;gt; svn checkout &amp;lt;repo&amp;gt; &amp;lt;/code&amp;gt; creates a working copy of the repo in your svn/ folder. Then, mafia &amp;quot;pushes&amp;quot; the contents of that working copy to the appropriate subfolders. For example, if a repo has a scripts/dostuff.ash file, that file gets copied to your scripts/ folder.&lt;br /&gt;
&lt;br /&gt;
svn update goes through all your working copies and performs an update. There are other operations that can happen here. With a checkout, you can only be adding (&amp;quot;A&amp;quot;) new files to a working copy. With an update you can update (&amp;quot;U&amp;quot;), merge (&amp;quot;G&amp;quot;), delete (&amp;quot;D&amp;quot;) or also add (&amp;quot;A&amp;quot;) files. Here, we warn the user whenever a file is added, due to security concerns. Note that &amp;quot;U&amp;quot;pdating &#039;&#039;&#039;only happens if the &amp;quot;pushed&amp;quot; local file still exists in the user&#039;s directory&#039;&#039;&#039;. I am bolding this because I&#039;m sure it will confuse some people. This feature is a safeguard against svn re-installing scripts over and over that the user just wants to have deleted.&lt;br /&gt;
&lt;br /&gt;
If you installed TortoiseSVN above and browse to the svn/ folder, you may notice something: the working copies checked out with svn checkout are fully-featured working copies, just like you checked out using TortoiseSVN. This means that you can make changes directly to this folder and commit them to the repo using TortoiseSVN - if you have repo commit permissions, of course.&lt;br /&gt;
&lt;br /&gt;
=== Specifications ===&lt;br /&gt;
At the base level of the SVN link there are only several legal folders which may contain scripts:&lt;br /&gt;
* ccs/&lt;br /&gt;
* data/&lt;br /&gt;
* images/&lt;br /&gt;
* planting/&lt;br /&gt;
* relay/&lt;br /&gt;
* scripts/&lt;br /&gt;
Additionally there is only one legal file:&lt;br /&gt;
* dependencies.txt&lt;br /&gt;
If there are any other folders or files at the base level of the SVN repository, it will fail to be checked out by KoLmafia. This is a security feature. Within the stated folders you can nest any additional folders and files you desire.&lt;br /&gt;
&lt;br /&gt;
When the SVN repo is committed, the scripts in the folders will be pushed to local copies in corresponding folders in the KoLmafia directory. If there is a file of the same name in any of those folder, or a sub-folder of those folders, then the file will be copied to that location. This allows the user to move the files to new locations or sub-folders and still know that KoLmafia will keep it up to date.&lt;br /&gt;
&lt;br /&gt;
The file &amp;lt;code&amp;gt;&#039;&#039;&#039;dependencies.txt&#039;&#039;&#039;&amp;lt;/code&amp;gt; contains a list of other SVN repositories that this script will automatically install. This is done so that the script can install other scripts it depends on. If there is a &amp;lt;code&amp;gt;&#039;&#039;&#039;dependencies.txt&#039;&#039;&#039;&amp;lt;/code&amp;gt; file at the root directory of the repo, it will not be pushed along with the files in the various folders. It only exists to serve this purpose. Each line in the file provides a url to another SVN project. Here is an example of what a dependencies.txt file may look like:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; https://svn.code.sf.net/p/zlib/code&lt;br /&gt;
 https://svn.code.sf.net/p/smartstasis/code&lt;br /&gt;
 https://svn.code.sf.net/p/therazekolmafia/canadv/code/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Command SVN ==&lt;br /&gt;
KoLmafia has both ASH and CLI commands to interact with SVN repos.&lt;br /&gt;
=== CLI Commands ===&lt;br /&gt;
SVN Repositories can be checked out, updated or deleted from the CLI with the following commands:&lt;br /&gt;
* &amp;lt;code&amp;gt;svn checkout &amp;lt;svnurl&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This checks out an svn repository and adds the files from the working copy to the appropriate locations. &amp;lt;svnurl&amp;gt; must be a &amp;lt;nowiki&amp;gt;svn://, http://, or https://&amp;lt;/nowiki&amp;gt; link to a valid svn repo.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn list&amp;lt;/code&amp;gt;&lt;br /&gt;
: This lists installed projects.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn update &amp;lt;SVNURL&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This updates your installed projects and pushes any changes to the appropriate locations. If the parameter is blank it will update everything.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn delete &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This deletes an installed project and the corresponding files that it pushed. &amp;lt;projectname&amp;gt; fuzzy matches the script names from svn list.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn increment &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn decrement &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: These two commands move an installed svn project up/down one revision, respectively.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn inc &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;svn dec &amp;lt;projectname&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The same as the previous two commands. Because typing stuff is hard.&lt;br /&gt;
* &amp;lt;code&amp;gt;svn sync&amp;lt;/code&amp;gt;&lt;br /&gt;
: This looks through your working copies for modifications, then checks if that file differs from the local copy. If it differs, the working copy file is copied over the local copy one. Note that this is very different from &amp;quot;svn update&amp;quot; and does not contact the repository server at all.&lt;br /&gt;
&lt;br /&gt;
=== ASH Commands ===&lt;br /&gt;
There are a few additional functions that ASH possesses to check up on an SVN repo.&lt;br /&gt;
* {{Flink|boolean|svn_exists|string|desc=Returns true if a valid working copy named projectname exists in the /svn folder.}}&lt;br /&gt;
* {{Flink|boolean|svn_at_head|string|desc=Returns true if projectname exists, is a valid working copy, and is currently at the same revision number as the repository.}}&lt;br /&gt;
* {{Flink|record|svn_info|string|desc=Returns a record containing additional information about the given projectname: svnurl, last author, last revision, last change date.}}&lt;br /&gt;
&lt;br /&gt;
== Revision Merging ==&lt;br /&gt;
There is another even more impressive ability of the KoLmafia&#039;s svn update: Revision Merging! This is only helpful to people who know how to modify someone&#039;s script so if you cannot understand a single line of any script you might as well skip this part. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;real&#039;&#039; awesome here is aimed at people who sometimes like to make small modifications to their scripts. People like you with a little bit of scripting ability. I suspect you&#039;ve sometimes made a tiny tweak to a script to make it more perfect for your specific needs. Then the original author updates his script and you&#039;re stuck trying to decide if it is worth your trouble to copy all your modifications to the new version of his script. If not, you might just refuse to update it. With SVN if you know what you are doing, you can update your cake and eat it too! When svn updates your script it will automatically keep your modifications, producing a blend of your modifications and the author&#039;s update. Now I&#039;ll tell you how to do this.&lt;br /&gt;
&lt;br /&gt;
# Acquire the most recent version using &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt;&lt;br /&gt;
# Open the script&#039;s working copy in the project&#039;s /svn directory, and make your edits. Always make sure the project in /svn has your changes&lt;br /&gt;
# Use the command &amp;lt;code&amp;gt; svn sync &amp;lt;/code&amp;gt; to push your modifications in the working copy to the local copy in the /scripts or /relay directory&lt;br /&gt;
# If you ever want to modify your changes or add to them, just repeat steps 2 and 3.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Now you can update from svn as usual. You can use &amp;lt;code&amp;gt; svn update bale-ocd &amp;lt;/code&amp;gt; to update just that script, or &amp;lt;code&amp;gt; svn update &amp;lt;/code&amp;gt; to update all your scripts or just check the box in SVN preferences to make it happen automatically once a day. Whenever the script is updated SVN will magically merge your changes into the working copy in the /svn folder and then push those changes into the local copy. This is magic! This will happen every single time you use svn to update the script without requiring your intervention. The CLI will display a &amp;quot;G&amp;quot; for merGing the script instead of a &amp;quot;U&amp;quot; for Updating it when this happens.&lt;br /&gt;
&lt;br /&gt;
=== Revision Conflicts ===&lt;br /&gt;
If an update to a script changes it so severely that it cannot be merGed with your modifications, it will show &amp;quot;C&amp;quot; for Conflict and produce several files in the working copy to help you solve the problem: &lt;br /&gt;
* myfile - will have some inline markup at the location of the conflict ( look for &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; and &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; markup) showing you both what your text was and what the repo&#039;s text was.&lt;br /&gt;
* myfile.mine - Your version before the update.&lt;br /&gt;
* myfile.rOld - The pristine repo versions from before the update.&lt;br /&gt;
* myfile.rNew - The pristine repo versions from after the update.&lt;br /&gt;
&lt;br /&gt;
With all of these files, you can pretty easily figure out where the problem line(s) are, and how to fix them. Sometimes you&#039;ll just want to use rNew and discard your local changes, sometimes you&#039;ll want to do something else. Copy/pasting between the different files is straightforward. You will need to delete the extra files when you&#039;re done resolving the conflict, and make sure that the remaining file has the same name as the original file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:New User Help]][[Category:Scripting]][[Category:Tech Support]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7816</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7816"/>
		<updated>2016-12-13T01:26:42Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17520&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
 &lt;br /&gt;
 r17520 does the same for effects:&lt;br /&gt;
 &amp;gt; test effectids Got Milk&lt;br /&gt;
 Got Milk has 1 effectid: 211&lt;br /&gt;
 &amp;gt; test effectids A Little Bit Evil&lt;br /&gt;
 A Little Bit Evil has 6 effectids: 597, 598, 599, 600, 601, 602&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7815</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7815"/>
		<updated>2016-12-12T00:05:55Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17507&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
  r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
 &lt;br /&gt;
 r17507: Experimental: ItemDatabase keeps a set of all item ids for each item name.&lt;br /&gt;
 &amp;gt; test itemids seal tooth&lt;br /&gt;
 seal tooth has 1 itemid: 2&lt;br /&gt;
 &amp;gt; test itemids Staff of Ed&lt;br /&gt;
 Staff of Ed has 2 itemids: 2325, 7961&lt;br /&gt;
 &amp;gt; test itemids ancient amulet&lt;br /&gt;
 ancient amulet has 2 itemids: 2180, 7963&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Set_auto_attack&amp;diff=7416</id>
		<title>Set auto attack</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Set_auto_attack&amp;diff=7416"/>
		<updated>2016-12-08T20:44:50Z</updated>

		<summary type="html">&lt;p&gt;Bale: r17491 adds version with a string parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|set_auto_attack}}{{&lt;br /&gt;
#vardefine:return_type|void}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|setting}}|&lt;br /&gt;
p1desc={{Pspan|setting}} is the KoL attack code:  0 for disabled, 1 for attack with weapon, a [http://kol.coldfront.net/thekolwiki/index.php/Skills_by_number skillID] number, or a macroID number preceeded by 99.|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function2={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|string|setting}}|&lt;br /&gt;
p1desc={{Pspan|setting}} is the attack expressed as a string: &amp;quot;attack&amp;quot;, &amp;quot;steal&amp;quot;, &amp;quot;pickpocket&amp;quot;, &amp;quot;pick pockey&amp;quot; or the name of a skill.|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=Sets your auto-attack to the {{Pspan|setting}}. |&lt;br /&gt;
&lt;br /&gt;
needscode=yes|&lt;br /&gt;
see_also={{SeeAlso|get_auto_attack}}|&lt;br /&gt;
cli_equiv=The CLI command &amp;quot;autoattack&amp;quot; functions similarly.|&lt;br /&gt;
}}&lt;br /&gt;
{{RFI|Does the CLI command allow macro setting?}}&lt;br /&gt;
[[Category:Adventuring]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7814</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7814"/>
		<updated>2016-12-07T06:27:20Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17477: can_still_steal()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
 r17477: Add boolean &#039;&#039;&#039;can_still_steal()&#039;&#039;&#039; function to ASH, which calls the same function &lt;br /&gt;
 that Stationary Buttons use do decide whether to enable or disable the &amp;quot;steal&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Get_ccs_action&amp;diff=4497</id>
		<title>Get ccs action</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Get_ccs_action&amp;diff=4497"/>
		<updated>2016-12-06T10:00:38Z</updated>

		<summary type="html">&lt;p&gt;Bale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|get_ccs_action}}{{&lt;br /&gt;
#vardefine:return_type|string}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|round}}|&lt;br /&gt;
p1desc={{pspan|round}} is the current round of combat|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=This function will read a line from the active [[Custom Combat Script|CCS]] for a given round and return that round&#039;s command as a string. This will only return a value from the section of the [[Custom Combat Script|CCS]] for the monster that is currently being fought. Note that this command is only useful in consult scripts or combat filters. See {{f|adventure}} for more details.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=This incredibly basic combat filter will simply do exactly what the CCS instructs.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string run_combat(int round, monster opp, string text) {&lt;br /&gt;
   return get_ccs_action(round);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=This is a function designed for use in a combat consult script that has parameters contained in a note field of the CCS. (A note is just a comment that contains information.)|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string get_parameter() {&lt;br /&gt;
   for i from 0 upto 30 {&lt;br /&gt;
      ccs_line =  get_ccs_action(i).to_lower_case();&lt;br /&gt;
      if(ccs_line.substring(0, 5) == &amp;quot;note &amp;quot;)&lt;br /&gt;
         return get_ccs_action(i).to_lower_case();&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adventure|adv1|run_combat}}|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:In-combat Consulting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7813</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7813"/>
		<updated>2016-12-05T19:56:43Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17446 test crop, r17454 increment and decrement, r17460 java style for loop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
 &lt;br /&gt;
 r17446: Soup up &amp;quot;test crop&amp;quot; command to allow specifying current crop and test crop.&lt;br /&gt;
 Fix crop &amp;quot;is better than&amp;quot; test to only include count when comparing identical crop type&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
 r17454: Experimental ASH feature: allow X++, X--, ++X, and --X with their normal meanings: post-increment, post-decrement, pre-increment, and pre-decrement.&lt;br /&gt;
&lt;br /&gt;
 r17460: Add Java-style &amp;quot;for&amp;quot; loop:&lt;br /&gt;
 for (INIT [, INIT]* ; CONDITION ; ITERATE [, ITERATE]* ) BODY&lt;br /&gt;
 You can have 0 or more INIT statements, which can be of the form&lt;br /&gt;
 X = EXP (where X is declared already) or&lt;br /&gt;
 TYPE X = EXP (whre X of type TYPE will be declared for use in the BODY scope).&lt;br /&gt;
 &lt;br /&gt;
 You can have 0 or more ITERATE statements, which can be of the form&lt;br /&gt;
 X++ or X--&lt;br /&gt;
 ++X or -- X&lt;br /&gt;
 X OPER EXP (where OPER can be =, +=, -=, etc.&lt;br /&gt;
 &lt;br /&gt;
 BODY can be a single statement ending with a ; or a block enclosed in {}, with no ; at the end, just like and other loop.&lt;br /&gt;
 &lt;br /&gt;
 break, continue, return, or exit are allowed within BODY, just like any loop.&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7812</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7812"/>
		<updated>2016-12-05T03:32:08Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
 &lt;br /&gt;
 r17471: get_clan_rumpus() now returns int [string] map of furniture names.&lt;br /&gt;
 http://kolmafia.us/showthread.php?21006-Improve-return-value-of-get_clan_rumpus()&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Storage_amount&amp;diff=4259</id>
		<title>Storage amount</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Storage_amount&amp;diff=4259"/>
		<updated>2016-12-04T01:11:09Z</updated>

		<summary type="html">&lt;p&gt;Bale: Changed in r17441&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|storage_amount}}{{&lt;br /&gt;
#vardefine:return_type|int}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|item|it}}|&lt;br /&gt;
p1desc={{Pspan|it}} is the item to check|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=Returns the amount of the given item that are in storage at Hagnk&#039;s.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=The following code will check a pull list loaded from a text file.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int day = 2;&lt;br /&gt;
int [int, item] static_pulls; //Items that are always included in a pull list.&lt;br /&gt;
file_to_map( &amp;quot;static_pulls.txt&amp;quot; , static_pulls );&lt;br /&gt;
&lt;br /&gt;
//Validate your pull list before you begin the day&lt;br /&gt;
foreach it, req_num in static_pulls[ day ]&lt;br /&gt;
{&lt;br /&gt;
   if ( storage_amount( it ) &amp;lt; req_num )&lt;br /&gt;
      print( &amp;quot;Uh-oh! You don&#039;t have enough of &amp;quot; + it + &amp;quot; to pull.&amp;quot; , &amp;quot;red&amp;quot; );&lt;br /&gt;
   else&lt;br /&gt;
      print( &amp;quot;You have enough &amp;quot; + it );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|moreinfo=Note that [[take_storage]]() returns a boolean value indicating whether an attempt at pulling was successful.&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|closet_amount|display_amount|equipped_amount|item_amount|shop_amount|stash_amount}}|&lt;br /&gt;
more_info=Information on handling free pulls is at [[Tips, Tricks and Workarounds#Free Pulls|Tips, Tricks and Workarounds]].|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Item Management]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Adv1&amp;diff=4483</id>
		<title>Adv1</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Adv1&amp;diff=4483"/>
		<updated>2016-12-03T21:13:59Z</updated>

		<summary type="html">&lt;p&gt;Bale: see also run_combat()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|adv1}}{{&lt;br /&gt;
#vardefine:return_type|boolean}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|location|place}}|&lt;br /&gt;
parameter2={{Param|int|turnsUsed}}|&lt;br /&gt;
parameter3={{Param|string|filterFunc}}|&lt;br /&gt;
p1desc={{Pspan|place}} is the adventuring location.|&lt;br /&gt;
p2desc={{Pspan|turnsUsed}} overrides the normal number of adventures that are expected to be consumed at this location, or -1 can be passed to use the default. Specifically, 0 will prevent any counters from triggering - of course, if an adventure actually is consumed, any counters that you kept from triggering will be lost.|&lt;br /&gt;
p3desc={{Pspan|filterFunc}} is a macro or the name of a combat filter function defined elsewhere in your script, with the same behavior as in the 3-paramater version of [[adventure]](). An empty string can be passed to use your battle action or CCS as normal.}}|&lt;br /&gt;
&lt;br /&gt;
function_description=This will adventure exactly once in the specified {{pspan|place}} (even if it took no turns), although it will follow chained choice adventures for as long as you have preset options.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If {{Pspan|filter}} contains a semicolon it will use {{Pspan|filter}} as a macro.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This function does not have to make use of its return value, but if you wish to do so, it will return true if all adventures were used, and false if it is unable to do so for any reason (not enough adventures, location unavailable, etc.).|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=Adventures 1 time at the Slime Tube. If an adventure takes no turns, possibly because the Gall Bladder was already squeezed, that adventure will still count. Counters will trigger as normal.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
adv1($location[slime tube], -1, &amp;quot;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adventure|run_combat}}|&lt;br /&gt;
cli_equiv=None - &amp;quot;adv&amp;quot; will always try adventuring again if an adventure took no turns.|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Adventuring]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Adventure&amp;diff=3983</id>
		<title>Adventure</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Adventure&amp;diff=3983"/>
		<updated>2016-12-03T21:13:36Z</updated>

		<summary type="html">&lt;p&gt;Bale: see also run_combat()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|adventure}}{{&lt;br /&gt;
#vardefine:return_type|boolean}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|adventures}}|&lt;br /&gt;
parameter2={{Param|location|place}}|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function2={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|adventures}}|&lt;br /&gt;
parameter2={{Param|location|place}}|&lt;br /&gt;
parameter3={{Param|string|filter}}|&lt;br /&gt;
p1desc={{Pspan|int}} is the number of adventures to spend.|&lt;br /&gt;
p2desc={{Pspan|place}} is the adventuring location.|&lt;br /&gt;
p3desc={{Pspan|filter}} is a combat action filter. If {{Pspan|filter}} contains a semicolon it is interpreted as a macro, otherwise this is the name of a top-level function which modifies the current CCS. A combat filter function takes the parameters of a consult script, but returns lines like a CCS, not like a consult script. Essentially, this allows the scripter to put a CCS or macro into a script.|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=This function runs the specified number of {{pspan|adventures}} at the given {{pspan|place}}, keeping up your current mood &amp;amp; obeying restore settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If {{Pspan|filter}} contains a semicolon it will use {{Pspan|filter}} as a macro.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If {{Pspan|filter}} is omitted or assigned an empty string, this function will use your current CCS / battle action.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This function returns true if the specified number of adventures were used, and false if not.  Possible reasons for returning false include being out of adventures, a location being unavailable, conditions being statisfied &#039;&#039;before&#039;&#039; {{Pspan|adventures}} were used up and all [[auto-stops]], including encountering a demon name or hobo glyph.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Note that {{Pspan|adventures}} is the number of adventures to spend in the specified location {{pspan|place}}. Any &amp;quot;free&amp;quot; turns (choiceadventures that don&#039;t consume an adventure, usually) or adventures spend in other locations (by a counterScript or a betweenBattleScript for example) will not count towards this total.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;As with auto-adventuring from the Adventure tab, adventure() checks against goals set via [[add_item_condition|add_item_condition()]] or via other methods of specifying goals in KoLmafia, and will auto-stop if all goals were satisfied.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=Adventure 5 times at the Giant&#039;s Castle:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
adventure(5 , $location[giant&#039;s castle]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
title=Example of a Combat Filter|&lt;br /&gt;
description=This uses the combat filter to automatically olfact Goth Giants while adventuring.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
string olfact_goth(int round, monster opp, string text) {&lt;br /&gt;
   if(opp != $monster[Goth Giant])&lt;br /&gt;
      return get_ccs_action(round);&lt;br /&gt;
   if(round == 1 &amp;amp;&amp;amp; have_effect($effect[On the Trail]) &amp;lt; 1)&lt;br /&gt;
      return &amp;quot;skill transcendent olfaction&amp;quot;;&lt;br /&gt;
   return get_ccs_action(round - 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(5 , $location[giant castle], &amp;quot;olfact_goth&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=Uses a combat filter to ensure that all sewer monsters are being cleeshed while you try to make your way to Hobopolis.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string combat_cleesh(int round, monster opp, string text) {&lt;br /&gt;
   if (opp == $monster[frog] || opp == $monster[newt] &lt;br /&gt;
    || opp == $monster[salamander]) {&lt;br /&gt;
      return &amp;quot;attack&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   return &amp;quot;skill CLEESH&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(1, $location[a maze of sewer tunnels], &amp;quot;combat_cleesh&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=This makes use of the combat filter to ensure that salve is being used.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Adds salve to beginning of combat if it doesn&#039;t already exist in the CCS. &lt;br /&gt;
// Otherwise it simply returns the current CCS.&lt;br /&gt;
string insert_salve(int round, monster opp, string text) {&lt;br /&gt;
   boolean salve = false;&lt;br /&gt;
   for i from 1 to 30&lt;br /&gt;
      if(get_ccs_action(round) == &amp;quot;skill saucy salve&amp;quot;)&lt;br /&gt;
         salve = true;&lt;br /&gt;
   if(salve)&lt;br /&gt;
      return get_ccs_action(round);&lt;br /&gt;
   else {&lt;br /&gt;
      if(round == 1)&lt;br /&gt;
         return &amp;quot;skill saucy salve&amp;quot;;&lt;br /&gt;
      if(round &amp;gt; 1)&lt;br /&gt;
         round = round - 1;              // compensate for insertion&lt;br /&gt;
      return get_ccs_action(round);      // for the rest of the combat, executes your existing ccs&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(5 , $location[giant castle], &amp;quot;insert_salve&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adv1|run_combat}}|&lt;br /&gt;
cli_equiv=The CLI command &amp;quot;adv&amp;quot; works similarly.|&lt;br /&gt;
special=This function will return false if KoLmafia conditions are met before completing the specified number of turns.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Also, if the filter function is not top-level code, it will not be found, since it&#039;s being called outside of ASH. As a result, it will return &amp;quot;void&amp;quot;, which may result in the use of $item[ovoid leather thing].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Adventuring]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Run_combat&amp;diff=5367</id>
		<title>Run combat</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Run_combat&amp;diff=5367"/>
		<updated>2016-12-03T21:13:03Z</updated>

		<summary type="html">&lt;p&gt;Bale: two parameter version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|run_combat}}{{&lt;br /&gt;
#vardefine:return_type|buffer}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function2={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|string|filter}}|&lt;br /&gt;
p1desc={{Pspan|filter}} is a macro or the name of a combat filter function defined elsewhere in your script, with the same behavior as in the 3-paramater version of adventure(). An empty string can be passed to use your battle action or CCS as normal. Essentially, this allows the scripter to put a CCS or macro into a script.|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function_description=Proceeds to run a combat using your current KoLmafia settings. This function returns the HTML from the final round of combat (not just what is displayed, but all markup).  Most commonly used to finish up combats started via [[visit_url|visit_url()]].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another handy use for this function is to finish up combats that were started in the relay browser, or were interrupted (causing mafia to pop up the minibrowser).  Typing &amp;quot;ashq run_combat()&amp;quot; into the CLI will finish up the combat for you using your current CCS/battle action.  Note that &amp;quot;ashq&amp;quot; is necessary rather than &amp;quot;ash&amp;quot; to avoid spewing the entire combat results page into the CLI.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=This is a personalized version of adv1() that is capable of returning information about which adventure is encountered so that you can look for a specific choice adventure. If a combat is encountered instead of a choice adventure, run_combat() is used.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int run_adv(location place) {&lt;br /&gt;
   string page_text = to_url(place).visit_url();&lt;br /&gt;
   string choiceAdventure = &amp;quot;-1&amp;quot;;&lt;br /&gt;
   matcher m_choice = create_matcher(&amp;quot;whichchoice value=(\\d+)&amp;quot;, page_text);&lt;br /&gt;
   while(page_text.contains_text(&amp;quot;choice.php&amp;quot;)) {&lt;br /&gt;
      m_choice.reset(page_text);&lt;br /&gt;
      m_choice.find();&lt;br /&gt;
      choiceAdventure = m_choice.group(1);&lt;br /&gt;
      string choice_num = get_property(&amp;quot;choiceAdventure&amp;quot;+ choiceAdventure);&lt;br /&gt;
      &lt;br /&gt;
      if(choice_num == &amp;quot;0&amp;quot;) abort(&amp;quot;Manual Control for &amp;quot;+ choiceAdventure);&lt;br /&gt;
      if(choice_num == &amp;quot;&amp;quot;) abort(&amp;quot;Unsupported Choice Adventure!&amp;quot;);&lt;br /&gt;
      &lt;br /&gt;
      page_text = visit_url(&amp;quot;choice.php?pwd&amp;amp;whichchoice=&amp;quot;+ choiceAdventure +&amp;quot;&amp;amp;option=&amp;quot;+ choice_num);&lt;br /&gt;
   }&lt;br /&gt;
   if(page_text.contains_text(&amp;quot;Combat&amp;quot;))&lt;br /&gt;
      run_combat();&lt;br /&gt;
   return choiceAdventure.to_int();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adventure|adv1|visit_url}}|&lt;br /&gt;
&lt;br /&gt;
special=Will return the text of the last combat encounter when called independently of a fight page.|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Adventuring]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Adventure&amp;diff=3982</id>
		<title>Adventure</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Adventure&amp;diff=3982"/>
		<updated>2016-11-29T22:43:31Z</updated>

		<summary type="html">&lt;p&gt;Bale: r17447&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|adventure}}{{&lt;br /&gt;
#vardefine:return_type|boolean}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|adventures}}|&lt;br /&gt;
parameter2={{Param|location|place}}|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function2={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|adventures}}|&lt;br /&gt;
parameter2={{Param|location|place}}|&lt;br /&gt;
parameter3={{Param|string|filter}}|&lt;br /&gt;
p1desc={{Pspan|int}} is the number of adventures to spend.|&lt;br /&gt;
p2desc={{Pspan|place}} is the adventuring location.|&lt;br /&gt;
p3desc={{Pspan|filter}} is a combat action filter. If {{Pspan|filter}} contains a semicolon it is interpreted as a macro, otherwise this is the name of a top-level function which modifies the current CCS. A combat filter function takes the parameters of a consult script, but returns lines like a CCS, not like a consult script. Essentially, this allows the scripter to put a CCS or macro into a script.|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=This function runs the specified number of {{pspan|adventures}} at the given {{pspan|place}}, keeping up your current mood &amp;amp; obeying restore settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If {{Pspan|filter}} contains a semicolon it will use {{Pspan|filter}} as a macro.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If {{Pspan|filter}} is omitted or assigned an empty string, this function will use your current CCS / battle action.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This function returns true if the specified number of adventures were used, and false if not.  Possible reasons for returning false include being out of adventures, a location being unavailable, conditions being statisfied &#039;&#039;before&#039;&#039; {{Pspan|adventures}} were used up and all [[auto-stops]], including encountering a demon name or hobo glyph.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Note that {{Pspan|adventures}} is the number of adventures to spend in the specified location {{pspan|place}}. Any &amp;quot;free&amp;quot; turns (choiceadventures that don&#039;t consume an adventure, usually) or adventures spend in other locations (by a counterScript or a betweenBattleScript for example) will not count towards this total.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;As with auto-adventuring from the Adventure tab, adventure() checks against goals set via [[add_item_condition|add_item_condition()]] or via other methods of specifying goals in KoLmafia, and will auto-stop if all goals were satisfied.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=Adventure 5 times at the Giant&#039;s Castle:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
adventure(5 , $location[giant&#039;s castle]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
title=Example of a Combat Filter|&lt;br /&gt;
description=This uses the combat filter to automatically olfact Goth Giants while adventuring.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
string olfact_goth(int round, monster opp, string text) {&lt;br /&gt;
   if(opp != $monster[Goth Giant])&lt;br /&gt;
      return get_ccs_action(round);&lt;br /&gt;
   if(round == 1 &amp;amp;&amp;amp; have_effect($effect[On the Trail]) &amp;lt; 1)&lt;br /&gt;
      return &amp;quot;skill transcendent olfaction&amp;quot;;&lt;br /&gt;
   return get_ccs_action(round - 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(5 , $location[giant castle], &amp;quot;olfact_goth&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=Uses a combat filter to ensure that all sewer monsters are being cleeshed while you try to make your way to Hobopolis.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string combat_cleesh(int round, monster opp, string text) {&lt;br /&gt;
   if (opp == $monster[frog] || opp == $monster[newt] &lt;br /&gt;
    || opp == $monster[salamander]) {&lt;br /&gt;
      return &amp;quot;attack&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   return &amp;quot;skill CLEESH&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(1, $location[a maze of sewer tunnels], &amp;quot;combat_cleesh&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=This makes use of the combat filter to ensure that salve is being used.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Adds salve to beginning of combat if it doesn&#039;t already exist in the CCS. &lt;br /&gt;
// Otherwise it simply returns the current CCS.&lt;br /&gt;
string insert_salve(int round, monster opp, string text) {&lt;br /&gt;
   boolean salve = false;&lt;br /&gt;
   for i from 1 to 30&lt;br /&gt;
      if(get_ccs_action(round) == &amp;quot;skill saucy salve&amp;quot;)&lt;br /&gt;
         salve = true;&lt;br /&gt;
   if(salve)&lt;br /&gt;
      return get_ccs_action(round);&lt;br /&gt;
   else {&lt;br /&gt;
      if(round == 1)&lt;br /&gt;
         return &amp;quot;skill saucy salve&amp;quot;;&lt;br /&gt;
      if(round &amp;gt; 1)&lt;br /&gt;
         round = round - 1;              // compensate for insertion&lt;br /&gt;
      return get_ccs_action(round);      // for the rest of the combat, executes your existing ccs&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adventure(5 , $location[giant castle], &amp;quot;insert_salve&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adv1}}|&lt;br /&gt;
cli_equiv=The CLI command &amp;quot;adv&amp;quot; works similarly.|&lt;br /&gt;
special=This function will return false if KoLmafia conditions are met before completing the specified number of turns.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Also, if the filter function is not top-level code, it will not be found, since it&#039;s being called outside of ASH. As a result, it will return &amp;quot;void&amp;quot;, which may result in the use of $item[ovoid leather thing].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Adventuring]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Get_ccs_action&amp;diff=4496</id>
		<title>Get ccs action</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Get_ccs_action&amp;diff=4496"/>
		<updated>2016-11-29T22:41:48Z</updated>

		<summary type="html">&lt;p&gt;Bale: r17447&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|get_ccs_action}}{{&lt;br /&gt;
#vardefine:return_type|string}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|round}}|&lt;br /&gt;
p1desc={{pspan|round}} is the current round of combat|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=This function will read a line from the active [[Custom Combat Script|CCS]] for a given round and return that round&#039;s command as a string. This will only return a value from the section of the [[Custom Combat Script|CCS]] for the monster that is currently being fought. Note that this command is only useful in consult scripts or combat filters. See {{f|adventure}} for more details.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=This incredibly basic combat filter will simply do exactly what the CCS instructs.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string run_combat(int round, monster opp, string text) {&lt;br /&gt;
   return get_ccs_action(round);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=This is a function designed for use in a combat consult script that has parameters contained in a note field of the CCS. (A note is just a comment that contains information.)|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string get_parameter() {&lt;br /&gt;
   for i from 0 upto 30 {&lt;br /&gt;
      ccs_line =  get_ccs_action(i).to_lower_case();&lt;br /&gt;
      if(ccs_line.substring(0, 5) == &amp;quot;note &amp;quot;)&lt;br /&gt;
         return get_ccs_action(i).to_lower_case();&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|adventure|adv1}}|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:In-combat Consulting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Custom_Combat_Script&amp;diff=4442</id>
		<title>Custom Combat Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Custom_Combat_Script&amp;diff=4442"/>
		<updated>2016-11-29T22:39:27Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Consult Scripts */ small clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
== Basic CCS ==&lt;br /&gt;
A Custom Combat Script (CCS) is a way of instructing mafia how to handle combat, round by round. For example, a simple CCS would be to tell mafia to pickpocket on round 1, then cast entangling noodles on round 2 and finally on rounds 3+ to use shieldbutt. If it is unable to carry out one of those steps, then that step will be skipped. For instance, if the character failed to get initiative, then pickpocket will be skipped and the character will go straight to entangling noodles. That CCS would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ default ]&amp;lt;br /&amp;gt;&lt;br /&gt;
try to steal an item&amp;lt;br /&amp;gt;&lt;br /&gt;
skill entangling noodles&amp;lt;br /&amp;gt;&lt;br /&gt;
skill shieldbutt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wanted to treat different monsters differently, that can be accommodated also. For instance, the following CCS will attempt to cast Transcendent Olfaction upon Black Knights while treating all other monsters differently. If the character currently has &amp;quot;On the Trail&amp;quot; then that line will be skipped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ Black Knight ]&amp;lt;br /&amp;gt;&lt;br /&gt;
try to steal an item&amp;lt;br /&amp;gt;&lt;br /&gt;
skill transcendent olfaction&amp;lt;br /&amp;gt;&lt;br /&gt;
skill entangling noodles&amp;lt;br /&amp;gt;&lt;br /&gt;
skill shieldbutt&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ default ]&amp;lt;br /&amp;gt;&lt;br /&gt;
try to steal an item&amp;lt;br /&amp;gt;&lt;br /&gt;
skill entangling noodles&amp;lt;br /&amp;gt;&lt;br /&gt;
skill shieldbutt&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that when you use a CCS, your CLI will report &amp;quot;character executes a macro!&amp;quot; because the CCS is converted into a macro to save on page loads&lt;br /&gt;
&lt;br /&gt;
=== Available Commands ===&lt;br /&gt;
* attack&lt;br /&gt;
* skill&lt;br /&gt;
* item, use&lt;br /&gt;
* try to steal an item, pickpocket&lt;br /&gt;
* summon pastamancer ghost&lt;br /&gt;
* jiggle chefstaff&lt;br /&gt;
* combo {followed by one of the following}&lt;br /&gt;
** Disco Concentration, Disco Nirvana, Disco Inferno, Disco Bleeding, Disco Blindness&lt;br /&gt;
** Rave Knockout, Rave Bleeding, Rave Concentration, Rave Steal, Rave Nirvana, Rave Stats&lt;br /&gt;
** [http://kolmafia.us/showthread.php?5709-Add-rave-combo-learning-to-quot-special-action-quot&amp;amp;p=42107&amp;amp;viewfull=1#post42107 random rave]&lt;br /&gt;
* abort&lt;br /&gt;
* abort after&lt;br /&gt;
* section [section name]&lt;br /&gt;
* special&lt;br /&gt;
* delevel&lt;br /&gt;
* skip&lt;br /&gt;
* note&lt;br /&gt;
* twiddle&lt;br /&gt;
&lt;br /&gt;
=== Using ASH Constants in CCS ===&lt;br /&gt;
Certain ASH constants can be used in CCS as section headers. &lt;br /&gt;
* &#039;&#039;&#039;$phylum[ ]&#039;&#039;&#039; refers to the 22 {{kolwiki|Monster Types|Monster Phylumn}}.&lt;br /&gt;
* &#039;&#039;&#039;$element[ ]&#039;&#039;&#039; refers to either the attack or the defense element. As long as one matches, this check will be satisfied.&lt;br /&gt;
* &#039;&#039;&#039;$item[ ]&#039;&#039;&#039; refers to an item that the monster drops. If there are multiple monsters that drop the item (such as SGEEA) it will match any of those monsters.&lt;br /&gt;
&lt;br /&gt;
You may specify more than one of these, but unless everything matches, it won&#039;t match. So if you specify an impossible combination, that CCS section will not run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ $element[ spooky ] $item[ hobo nickel ] ]&amp;lt;br /&amp;gt;&lt;br /&gt;
skill entangling noodles&amp;lt;br /&amp;gt;&lt;br /&gt;
skill weapon of the pastalord&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ bathroom $element[ spooky ] ]&amp;lt;br /&amp;gt;&lt;br /&gt;
attack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[ $phylum[ beast ] ]&amp;lt;br /&amp;gt;&lt;br /&gt;
skill stomp&amp;lt;br /&amp;gt;&lt;br /&gt;
attack&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Macros in CCS ==&lt;br /&gt;
Macros may be used in a Custom Combat Script in addition to the basic commands. Any line in quotes  and any macro command used in a CCS will be made into part of the macro which KoLmafia is passing to KoL. You can find an primer on all KoL&#039;s macros at {{kolwiki|Combat Macros}}.&lt;br /&gt;
&lt;br /&gt;
Also there is a section in the CCS called &amp;quot;global prefix&amp;quot; which will be part of every combat macro KoLmafia generates, regardless of the monster encountered. &lt;br /&gt;
&lt;br /&gt;
=== Example of CCS Macro ===&lt;br /&gt;
Here&#039;s an example of a CCS that generates a macro which will cause KoL to wait for a hobo monkey to steal meat from your enemy before launching attacks.&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ default ]&amp;lt;br /&amp;gt;&lt;br /&gt;
sub monkey_stasis&amp;lt;br /&amp;gt;&lt;br /&gt;
:while !match &amp;quot;climbs up and sits on your shoulder&amp;quot; &amp;amp;&amp;amp; !pastround 20 &amp;amp;&amp;amp; !hppercentbelow 20&lt;br /&gt;
::call stasis_item&lt;br /&gt;
:endwhile&lt;br /&gt;
endsub&amp;lt;br /&amp;gt;&lt;br /&gt;
call monkey_stasis&amp;lt;br /&amp;gt;&lt;br /&gt;
attack&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[ global prefix ]&amp;lt;br /&amp;gt;&lt;br /&gt;
scrollwhendone&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;abort missed 5&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;abort pastround 27&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
sub stasis_item&amp;lt;br /&amp;gt;&lt;br /&gt;
:if hascombatitem facsimile dictionary&lt;br /&gt;
::item facsimile dictionary&lt;br /&gt;
::goto _endstasisitem&lt;br /&gt;
:endif&lt;br /&gt;
:if hascombatitem seal tooth&lt;br /&gt;
::item seal tooth&lt;br /&gt;
::goto _endstasisitem&lt;br /&gt;
:endif&lt;br /&gt;
:if hascombatitem spices&lt;br /&gt;
::item spices&lt;br /&gt;
::goto _endstasisitem&lt;br /&gt;
:endif&lt;br /&gt;
:if hascombatitem spectre scepter&lt;br /&gt;
::item spectre scepter&lt;br /&gt;
::goto _endstasisitem&lt;br /&gt;
:endif&lt;br /&gt;
:if hascombatitem dictionary&lt;br /&gt;
::item dictionary&lt;br /&gt;
::goto _endstasisitem&lt;br /&gt;
:endif&lt;br /&gt;
:&amp;quot;abort &amp;quot;No infinite use items detected!&amp;quot; &amp;quot;&lt;br /&gt;
:mark _endstasisitem&lt;br /&gt;
endsub&amp;lt;br /&amp;gt;&lt;br /&gt;
sub stasis&amp;lt;br /&amp;gt;&lt;br /&gt;
:while !pastround 20 &amp;amp;&amp;amp; !hppercentbelow 20 &amp;amp;&amp;amp; mppercentbelow 99&lt;br /&gt;
::call stasis_item&lt;br /&gt;
:endwhile&lt;br /&gt;
endsub&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Concerns for macros in CCS ===&lt;br /&gt;
*A macro&#039;s abort command needs to be encased in quotes because abort is also a legal CCS command. That&#039;s why all aborts in the previous example were quoted. &lt;br /&gt;
&lt;br /&gt;
*If a comment is the last line in a CCS, that will be used as your finishing attack even though it does nothing. Never conclude a CCS with a macro comment or it will abort to the mini-browser with a warning from KoL that you executed 37 commands in a row without taking an action.&lt;br /&gt;
&lt;br /&gt;
== Consult Scripts ==&lt;br /&gt;
While a CCS may seem reasonably flexible, sometimes you will want to do something too complicated to express in that format. For instance if you want your character to take different actions based on your characters current stats or current monster level, a consult script can automatically figure it out. There are few limits to what a consult script can enable. The downside to using a consult script is that KoLmafia will not be able to generate a combat macro to pass to KoL. As a result multi-round combat will take somewhat longer.&lt;br /&gt;
&lt;br /&gt;
A consult script is called by using the &amp;quot;consult&amp;quot; command in your CCS, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ default ]&amp;lt;br /&amp;gt;&lt;br /&gt;
consult myscript.ash&amp;lt;br /&amp;gt;&lt;br /&gt;
attack&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main() function in the ASH script being consulted must accept three parameters:&lt;br /&gt;
&lt;br /&gt;
 void main(int round, monster mob, string page_text)&lt;br /&gt;
&lt;br /&gt;
These values will be supplied by mafia when the consult script is called.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Consult Script ===&lt;br /&gt;
This example will attempt to maximize use of a Sauceror&#039;s spells as a Sauceror by making use of sauce splash effects when they can be used.&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 1em; border: dashed 1px green; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Save this as SauceSplash.ash&lt;br /&gt;
boolean sauceSplash() {&lt;br /&gt;
   if(!my_class() == $class[Sauceror])&lt;br /&gt;
         return false;&lt;br /&gt;
   int normal = numeric_modifier(&amp;quot;spell damage&amp;quot;);&lt;br /&gt;
   if(normal &amp;gt;= 25)&lt;br /&gt;
      return true;&lt;br /&gt;
   int cold = numeric_modifier(&amp;quot;cold spell damage&amp;quot;);&lt;br /&gt;
   int hot = numeric_modifier(&amp;quot;hot spell damage&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   #deal with monsters weak to cold&lt;br /&gt;
   if(((((monster_element() == $element[stench]) || (monster_element() == $element[sleaze]))&lt;br /&gt;
     &amp;amp;&amp;amp; have_skill($skill[Immaculate Seasoning]))&lt;br /&gt;
     || have_equipped($item[Gazpacho&#039;s Glacial Grimoire]))&lt;br /&gt;
     &amp;amp;&amp;amp; cold + normal &amp;gt;= 25)&lt;br /&gt;
        return true;&lt;br /&gt;
   #deal with monsters weak to hot&lt;br /&gt;
   else if((((((monster_element() == $element[cold]) || (monster_element() == $element[spooky]))&lt;br /&gt;
     &amp;amp;&amp;amp; have_skill($skill[Immaculate Seasoning]))&lt;br /&gt;
     || have_equipped($item[Codex of Capsaicin Conjuration])&lt;br /&gt;
     || have_equipped($item[Ol&#039; Scratch&#039;s manacles])&lt;br /&gt;
     || have_equipped($item[Ol&#039; Scratch&#039;s ash can]))&lt;br /&gt;
     &amp;amp;&amp;amp; hot + normal &amp;gt;= 25)&lt;br /&gt;
   #deal with monsters weak to neither (hot/non-aligned)&lt;br /&gt;
   else if(have_skill($skill[Immaculate Seasoning])&lt;br /&gt;
      &amp;amp;&amp;amp; cold != hot &amp;amp;&amp;amp; max(cold, hot) + normal &amp;gt;= 25)&lt;br /&gt;
         return true;&lt;br /&gt;
   else return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(int initround, monster foe, string page) {&lt;br /&gt;
   if(have_effect($effect[Burning Soul]) || have_effect($effect[Soul Freeze]) || !sauceSplash())&lt;br /&gt;
      use_skill($skill[Saucegeyser]);&lt;br /&gt;
   else&lt;br /&gt;
      use_skill($skill[Wave of Sauce]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This consult script can then be integrated into a CCS like this:&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
[ default ]&amp;lt;br /&amp;gt;&lt;br /&gt;
consult SauceSplash.ash&amp;lt;br /&amp;gt;&lt;br /&gt;
attack&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parts of a Combat Consultation Script ===&lt;br /&gt;
As you can see in the above example, a consultation script is called with three parameters.&lt;br /&gt;
*The first parameter is the round of combat that the script is called. Sometimes it is important to keep track of the round. This is particularly important to keep from losing the fight by going over 30 rounds.&lt;br /&gt;
*The second parameter is the monster that you are fighting. This is important because it enables you to take different actions for different monsters.&lt;br /&gt;
*The third parameter is the text of the page. This is important because it enables you to examine every detail of the fight as it is taking place. It can be analyzed for potential actions, damage that you deal to a monster and all other events.&lt;br /&gt;
&lt;br /&gt;
All possible actions you can take in a round of combat are listed under [[In-combat Consulting]].&lt;br /&gt;
&lt;br /&gt;
=== Resolution of a Combat Consultation Script ===&lt;br /&gt;
The consult script can automate as many, or as few rounds of combat as desired to achieve its goal. When it finishes executing, if the monster is not yet dead, then the CCS will continue combat from the current round. Note that the current round is not always the next line in a script. For instance, if the consult script is called at round 1 and executes three actions, then it will return to the CCS at round 4. This is why most CCSs containing consult script prefer to have only a line after the consult script, usually a simple method of killing a monster.&lt;br /&gt;
&lt;br /&gt;
=== Macros in Consult Scripts ===&lt;br /&gt;
It is possible for a consult script to submit a macro. As a simple example, if your consult script wants to submit a macro that simply attacks the monster until the combat ends...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 1em; border: dashed 1px green; padding: 1em; margin:0px 20px;&amp;quot;&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
string macro = &amp;quot;attack; repeat&amp;quot;&lt;br /&gt;
visit_url(&amp;quot;fight.php?action=macro&amp;amp;macrotext=&amp;quot; + url_encode(macro) ,true,true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Between macro commands you need to insert either /n or a semi-colon as in the above example. Your submitted macro can be as complicated as you wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7811</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7811"/>
		<updated>2016-10-22T20:14:03Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17296: Add &amp;quot;test cookies&amp;quot; command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
 &lt;br /&gt;
 r17296: Add &amp;quot;test cookies&amp;quot; command to see values of the &amp;quot;special&amp;quot; cookies we track.&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7810</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7810"/>
		<updated>2016-10-18T16:50:43Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */ r17290: Add traceprint()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
 r17290: Add traceprint( string) ASH function&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7809</id>
		<title>Help:To Do List</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Help:To_Do_List&amp;diff=7809"/>
		<updated>2016-10-15T18:20:47Z</updated>

		<summary type="html">&lt;p&gt;Bale: /* Missing Stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;To Do&amp;quot; List ==&lt;br /&gt;
&lt;br /&gt;
This is a list of stuff that is missing from the wiki or else needs major work. Please help!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need tips for editing the wiki, find that here: [[Help:Editing]].&lt;br /&gt;
&lt;br /&gt;
*CLI Commands are usually only added to the [[CLI Reference]]. Only very complicated commands require their own page.&lt;br /&gt;
&lt;br /&gt;
*ASH commands need to be listed on their category page as well as on the [[Ash Functions]] list. &lt;br /&gt;
**It is not necessary to always create a code sample, although it is preferred.&lt;br /&gt;
**If you don&#039;t add a code sample, please remember to add &#039;&#039;&#039;needscode=yes|&#039;&#039;&#039; to the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Missing Stuff ==&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;test CLI commands:&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 r14764: add &amp;quot;test xpath&amp;quot; to, well, test xpath expressions&lt;br /&gt;
 r14767: Expose an xpath function that relay scripts can use after they&#039;ve invoked visit_url().&lt;br /&gt;
 http://kolmafia.us/showthread.php?16722-the-DOM-regex-scalability-and-other-jargony-words&lt;br /&gt;
 http://kolmafia.us/showthread.php?16764-xpath-primer&lt;br /&gt;
 &lt;br /&gt;
 r14967: Add &amp;quot;test mchat&amp;quot; command which can be used after &amp;quot;test load JSONFILE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 This is how test newitem is used!&lt;br /&gt;
 http://kolmafia.us/showthread.php?17365-When-detecting-new-items-detect-new-outfits-too&amp;amp;p=119368&amp;amp;viewfull=1#post119368&lt;br /&gt;
 r15741, Now &amp;quot;test newitem descId&amp;quot; no longer requires itemId.&lt;br /&gt;
 &lt;br /&gt;
 r15176: Add &amp;quot;test adventure URL&amp;quot; CLI command to see how we translate the given URL&lt;br /&gt;
 &lt;br /&gt;
 r15239: Add &amp;quot;test dump_disabled_skills&amp;quot; to the gCLI to aid upcoming debugging&lt;br /&gt;
 &lt;br /&gt;
 r15606: Add &amp;quot;test encounter URL&amp;quot; command.&lt;br /&gt;
 &lt;br /&gt;
 r15874: Add &amp;quot;test leet NAME&amp;quot; command to check if KoL monster names get translated successfully from their 1337 versions.&lt;br /&gt;
 &lt;br /&gt;
 r15883: &amp;quot;test load HTMLFILE&amp;quot; followed by &amp;quot;test aagain&amp;quot; will print the Adventure Again URL from that page.&lt;br /&gt;
 &lt;br /&gt;
 r16275: &amp;quot;test visit-choice&amp;quot; now prints the various choice options available on the loaded HTML text.&lt;br /&gt;
 &lt;br /&gt;
 r16309: Add &amp;quot;test manuel&amp;quot; command which will process a loaded HTML file as if it were the response to a visit to Monster Manuel.&lt;br /&gt;
 http://kolmafia.us/showthread.php?19094-shrine-to-the-Barrel-god-(Sept-2015-IotM)&amp;amp;p=128256&amp;amp;viewfull=1#post128256&lt;br /&gt;
 &lt;br /&gt;
 r15928: Add &amp;quot;test monster&amp;quot; command to parse the monster out of the saved HTML and save&lt;br /&gt;
 it where ASH&#039;s last_monster() function will fetch it.&lt;br /&gt;
 &lt;br /&gt;
 r16496: Add &amp;quot;test spleen X&amp;quot; to set your current spleen use to X (as far as KoLmafia knows; obviously it does not actually change KoL&#039;s value).&lt;br /&gt;
 &lt;br /&gt;
 r16508: Add &amp;quot;test numberology adventureDelta spleenDelta&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 r16519: Add &amp;quot;test stats X&amp;quot; to set all three stat values to X substats (if X &amp;gt; 0).&lt;br /&gt;
&lt;br /&gt;
 r15148: Track Xiblaxian holo-wrist-puter drops in &#039;&#039;&#039;_holoWristDrops&#039;&#039;&#039;, and progress toward the next drop in &#039;&#039;&#039;_holoWristProgress&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15177: Track which keys have been used on the Sorceress Tower door in a setting: &#039;&#039;&#039;nsTowerDoorKeysUsed&#039;&#039;&#039;&lt;br /&gt;
 It is a comma separated list.&lt;br /&gt;
&lt;br /&gt;
 r15235: Add buffer &#039;&#039;&#039;run_choice( int )&#039;&#039;&#039; command. When in a choice adventure, use this to submit the selected option.&lt;br /&gt;
 With -1 as imput, it will automate the rest of the choice using existing settings.&lt;br /&gt;
 &lt;br /&gt;
 Also add &#039;&#039;&#039;run_turn()&#039;&#039;&#039;, which will work as run_combat() or run_choice( -1 ) depending on whether you are in combat or in a choice.&lt;br /&gt;
&lt;br /&gt;
 r15238: Provide &#039;&#039;&#039;limit_mode()&#039;&#039;&#039; function that returns (currently) null or spelunky.&lt;br /&gt;
&lt;br /&gt;
 r15354: Move &amp;quot;equip all familiars&amp;quot; function from the FamiliarTrainingFrame to a new&lt;br /&gt;
 module: FamiliarManager. Let ASH use it via boolean &#039;&#039;&#039;equip_all_familiars()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15440: Add &amp;quot;&#039;&#039;&#039;servants&#039;&#039;&#039;&amp;quot; command to list Ed&#039;s servants, &amp;quot;&#039;&#039;&#039;servant&#039;&#039;&#039;&amp;quot; to list status of your current servant, &lt;br /&gt;
 and &amp;quot;&#039;&#039;&#039;servant TYPE&#039;&#039;&#039;&amp;quot; to switch to the servant of the specified type.&lt;br /&gt;
&lt;br /&gt;
 r15441 adds the $servant data type to ASH and the following functions to manipulate them:&lt;br /&gt;
 &lt;br /&gt;
 int &#039;&#039;&#039;to_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 servant to_servant( int )&lt;br /&gt;
 servant to_servant( string )&lt;br /&gt;
 servant &#039;&#039;&#039;my_servant&#039;&#039;&#039;()&lt;br /&gt;
 boolean &#039;&#039;&#039;have_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 boolean &#039;&#039;&#039;use_servant&#039;&#039;&#039;( servant )&lt;br /&gt;
 &lt;br /&gt;
 Additionally, it has the following proxy fields:&lt;br /&gt;
 int id&lt;br /&gt;
 string name&lt;br /&gt;
 int level&lt;br /&gt;
 int experience&lt;br /&gt;
 string image,&lt;br /&gt;
 string level1_ability&lt;br /&gt;
 string level7_ability&lt;br /&gt;
 string level14_ability&lt;br /&gt;
 string level21_ability&lt;br /&gt;
&lt;br /&gt;
 r15466: Add &#039;&#039;&#039;chew&#039;&#039;&#039;(INT,ITEM) to ASH for cnsuming spleen toxins&lt;br /&gt;
&lt;br /&gt;
 equip [2268] will equip an item by number.&lt;br /&gt;
&lt;br /&gt;
 r15475: Add &#039;&#039;&#039;prefref&#039;&#039;&#039; as a built-in gCLI command&lt;br /&gt;
&lt;br /&gt;
 r15590: &#039;&#039;&#039;Add run_combat( string filter )&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 r15676: Make built-in Sorceress Tower scripts available to scripts.&lt;br /&gt;
&lt;br /&gt;
 CLI: &#039;&#039;&#039;maze&#039;&#039;&#039; [arg]&lt;br /&gt;
 CLI: &#039;&#039;&#039;door&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;hedge_maze( string )&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;tower_door()&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 The string argument for the maze can be one of:&lt;br /&gt;
 traps - 4 turns, all traps&lt;br /&gt;
 gopher or duck - 7 turns gopher and duck&lt;br /&gt;
 chihuahua or kiwi - 7 turns chihuahua and kiwi&lt;br /&gt;
 nugglets - 10 turns, all nugglets&lt;br /&gt;
&lt;br /&gt;
 r15791: The &amp;quot;pvp&amp;quot; command with no arguments will list available stances and their&lt;br /&gt;
 associated option number. You now can now specify a stance by either name or&lt;br /&gt;
 number. The &amp;quot;pvp&amp;quot; command now requires you to choose a stance, since it can&lt;br /&gt;
 no longer choose a reaosnable default based on your stats.&lt;br /&gt;
&lt;br /&gt;
 r15796: Add ASH function: &#039;&#039;&#039;int [string] current_pvp_stances()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 r15840: Provide  ASH &#039;&#039;&#039;string leetify( string )&#039;&#039;&#039; function to garble strings.&lt;br /&gt;
&lt;br /&gt;
 r15847: Add &amp;quot;Random Monster Attributes&amp;quot; modifier as provided by dice items and the&lt;br /&gt;
 Curse of Randomness status effect. Add random_attributes proxy field to ASH&lt;br /&gt;
 $monster type. Munge random attributes from monster names is the Random Monster&lt;br /&gt;
 Attribute modifier is &amp;gt; 0, not only if current path is One Crazy Random Summer.&lt;br /&gt;
&lt;br /&gt;
 r15922: Add Familiar Script. This script will run after changing familiars, before &lt;br /&gt;
 automatically changing familiar equipment. The script should have a boolean main() function. &lt;br /&gt;
 Returning true will cause normal familiar equipiment switching to be skipped,&lt;br /&gt;
 while false will lead to it running after the script returns.&lt;br /&gt;
&lt;br /&gt;
 r15937: Add mayosoak command&lt;br /&gt;
&lt;br /&gt;
 r15959: Add knowledge of familiar drop counters to FamiliarData, &lt;br /&gt;
 New ASH proxy fields for $familiar data type:&lt;br /&gt;
 drop_name = short name of the thing that drops&lt;br /&gt;
 drop_item = if it is a single item, the $item. Otherwise, $item[none]&lt;br /&gt;
 drops_today = how many things this familiar has dropped so far today&lt;br /&gt;
 drops_limit = the maximum number of available drops from this familiar today&lt;br /&gt;
&lt;br /&gt;
 CLI: wumpus status - Display status of last wumpus cave.&lt;br /&gt;
 r16014: Add &amp;quot;wumpus replay FILE&amp;quot; command to process the session log of a wumpus exploration and make deductions, etc.&lt;br /&gt;
 r16015: Add &amp;quot;wumpus reset&amp;quot; CLI command to clear in-memory Wumpus cave state&lt;br /&gt;
&lt;br /&gt;
 r16044:The &amp;quot;cheat&amp;quot; command is a synonym for the &amp;quot;play&amp;quot; command. options:&lt;br /&gt;
 play random - play a random card (1 draw)&lt;br /&gt;
 cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum&lt;br /&gt;
 cheat stat STAT - cheat (5 draws) 500 substats of specified stat&lt;br /&gt;
 cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name&lt;br /&gt;
   or by effect: muscle, mysticality, moxie, item drop (or items), initiative&lt;br /&gt;
 cheat CARD - cheat (5 draws) the specified card name.&lt;br /&gt;
 PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.&lt;br /&gt;
&lt;br /&gt;
 r16047: Track Armorer quest (Madness Bakery) as questM25Armorer.&lt;br /&gt;
&lt;br /&gt;
 r16060: Make fixed list of modifier maximizer strings configurable&lt;br /&gt;
 set maximizerList. Default value is:&lt;br /&gt;
 mainstat | mus | mys | mox | familiar weight | HP | MP | ML | DA | DR | +combat -tie | -combat -tie | initiative | exp | meat drop | item drop | 2.0 meat, 1.0 item | item, sea | weapon dmg | ranged dmg | elemental dmg | spell dmg | adv | pvp fights | hot res | cold res | spooky res | stench res | sleaze res | all res | mp regen | ML, 0.001 slime res | 4 clownosity, -tie | 7 raveosity, -tie | surgeonosity | +four songs&lt;br /&gt;
&lt;br /&gt;
 r16163: For all monsters where our name differs from Manuel&#039;s, add a new attribute: Manuel: &amp;quot;MANUEL NAME&amp;quot;&lt;br /&gt;
 Add .manuelName proxy field for ASH $monster data type&lt;br /&gt;
 &lt;br /&gt;
 Add &amp;quot;&#039;&#039;&#039;checkmanuel&#039;&#039;&#039;&amp;quot; command which will look up all of you&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;int monster_factoids_available( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns number of factoids currently retained in memory. Note that this&lt;br /&gt;
 can be more than the currently logged in character knows, since we don&#039;t&lt;br /&gt;
 flush the factoids from a previous login if you know all three factoids.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;string monster_manuel_text( monster )&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 returns the full HTML of the monster manuel entry for the given&lt;br /&gt;
 monster. As above, this could have been retained from the previous&lt;br /&gt;
 character; otherwise, it will fetch and cache the text.&lt;br /&gt;
&lt;br /&gt;
 r16166: Add ASH function: &#039;&#039;&#039;boolean [monster] all_monsters_with_id()&#039;&#039;&#039; &lt;br /&gt;
 &lt;br /&gt;
 returns a map of all monsters that have a non-zero monster ID. It builds this&lt;br /&gt;
 afresh every time you call it, since new monsters can be (temporarily) added&lt;br /&gt;
&lt;br /&gt;
 r16169: Add MonsterManuelManager.flushCache()and expose it to ASH via flush_&#039;&#039;&#039;monster_manuel_cache()&#039;&#039;&#039; function.&lt;br /&gt;
 Add a second parameter to MonsterManuelManager.getFactoidsAvailable: boolean&lt;br /&gt;
 cachedOnly says &amp;quot;don&#039;t look on the page if the monster is not in the cache,&lt;br /&gt;
 because we have already looked at the page and the monster wasn&#039;t there.&amp;quot;&lt;br /&gt;
 Expose this to ASH by changing &#039;&#039;&#039;monster_factoids_available()&#039;&#039;&#039; parameters: monster, boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r16171: Add ASH function: &#039;&#039;&#039;boolean[monster] get_location_monsters(location)&#039;&#039;&#039; &lt;br /&gt;
 This has the same info as get_monsters, but returns a (perhaps) more useful aggregate value&lt;br /&gt;
&lt;br /&gt;
 r16200: &#039;&#039;&#039;Mayominder&#039;&#039;&#039; CLi command. Sets (buying if needed) Mayo Minder to a particular Mayo.&lt;br /&gt;
 Can specify Mayo name or use a description (adv, stat, food, drunk or bmc).&lt;br /&gt;
&lt;br /&gt;
 r16218: Add ASH function &#039;&#039;&#039;get_stash()&#039;&#039;&#039; to retrieve cached view of clan stash&lt;br /&gt;
&lt;br /&gt;
 r16391: Add ASH &#039;&#039;&#039;skill_modifier&#039;&#039;&#039;(object, modifiername) (currently only useful for &amp;quot;Skill&amp;quot;)&lt;br /&gt;
 to interpret the specified modifier of an item as a skill object.&lt;br /&gt;
&lt;br /&gt;
 r16396, r16398 &amp;amp; r16399 : &#039;&#039;&#039;Numberology&#039;&#039;&#039; command:&lt;br /&gt;
 numberology - lists all the currently possible seeds and what they give you&lt;br /&gt;
 numberology? N - N is the desired (numeric) result you want. Tell you if it is currently available.&lt;br /&gt;
 numberology N - Attempts to get the desired result.&lt;br /&gt;
 For both of these, if it is not currently available, tells you in how many turns it will be available.&lt;br /&gt;
&lt;br /&gt;
 16481: Add $vykea type to ASH&lt;br /&gt;
 vykea my_vykea_companion( )&lt;br /&gt;
 int to_int( vykea )&lt;br /&gt;
 vykea to_vykea( strict_string )&lt;br /&gt;
&lt;br /&gt;
 r16800: Add multi-line string support to ASH. In order to specify a multi-line string, &lt;br /&gt;
 you must explicitly escape the end-of-line by placing a backslash (\) at the end of the line.&lt;br /&gt;
 &lt;br /&gt;
 Note that as a consequence of how the parser is written, it will trim all&lt;br /&gt;
 leading and trailing whitespace for each of these lines via Java&#039;s&lt;br /&gt;
 String.trim() method. Previously, this was irrelevant in the context of ASH&lt;br /&gt;
 strings, but now that ASH strings can span multiple lines, it is worth&lt;br /&gt;
 mentioning. If you want to have whitespace at the beginning of the line,&lt;br /&gt;
 just escape the first character of the line.&lt;br /&gt;
&lt;br /&gt;
 r16866: Add aggregate literals to ASH.&lt;br /&gt;
 http://kolmafia.us/showthread.php?20103-16866-Add-aggregate-literals-to-ASH-The-main-use-of-these-is-likely-for-initializa&lt;br /&gt;
 http://kolmafia.us/showthread.php?10685-Map-literals-in-ASH-(potential-feature)&amp;amp;p=134150#post134150&lt;br /&gt;
&lt;br /&gt;
 r16886: Add &#039;&#039;&#039;witchess&#039;&#039;&#039; command to get Puzzle Champ. This only works if you have solved all puzzles.&lt;br /&gt;
&lt;br /&gt;
 r16978: Eudora CLI command now returns current correspondent with no argument.&lt;br /&gt;
 Add ash string eudora() command which returns current correspondent.&lt;br /&gt;
 Add ash boolean eudora(string) command which takes &amp;quot;penpal&amp;quot;, &amp;quot;game&amp;quot; or &amp;quot;xi&amp;quot; and attempts to set that correspondent.&lt;br /&gt;
&lt;br /&gt;
 r17023: Add terminal gCLI command&lt;br /&gt;
&lt;br /&gt;
 r17136: Track furniture in the Clan Rumpus Room, accessible with &#039;&#039;&#039;get_clan_rumpus()&#039;&#039;&#039;. Extra Adventures and PvP Fights from furniture are tracked.&lt;br /&gt;
 If your clan has a ball pit, the last entry in get_clan_rumpus() will indicate how many balls are in it.&lt;br /&gt;
&lt;br /&gt;
 r17151: Add ASH and CLI support for stocking mall stores from Hagnk&#039;s.&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, item it)&#039;&#039;&#039;&lt;br /&gt;
 boolean &#039;&#039;&#039;put_shop_using_storage(int price, int limit, int qty, item it)&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 and extends the CLI commands mallsell and shop.&lt;br /&gt;
 put_shop() works by batching requests for &amp;quot;shop put&amp;quot;. Similarly, buy_using_storage() puts together requests via &amp;quot;buy using storage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 r17283: Add &amp;quot;timespinner&amp;quot; command courtesy of lost. &lt;br /&gt;
 Add &amp;quot;timespinner&amp;quot; command courtesy of lost.&lt;br /&gt;
 timespinner list food -&amp;gt; list available foods&lt;br /&gt;
 timespinner eat FOOD -&amp;gt; Spin and Munch on the specified food&lt;br /&gt;
 &lt;br /&gt;
 r17284: Allow pranking with timespinner&lt;br /&gt;
 &lt;br /&gt;
 r17286: Add &amp;quot;timespinner list monsters [filter]&amp;quot;. This will show all monsters that should be available in the Time-Spinner, optionally filtered (case-insensitive).&lt;br /&gt;
&lt;br /&gt;
== Needs Major Work ==&lt;br /&gt;
&lt;br /&gt;
[[Proxy Records]] is only slightly better than a placeholder.&lt;br /&gt;
&lt;br /&gt;
 In r10047, the adventure tab interface was altered. Fix SinginSally&#039;s guide on pages...&lt;br /&gt;
 &lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Attack_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Custom_Combat_Script&lt;br /&gt;
 http://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Goal-Oriented_Adventuring&lt;br /&gt;
&lt;br /&gt;
 Information on moods calling other moods: http://kolmafia.us/showthread.php?8852-Composable-Moods&amp;amp;p=66468&amp;amp;viewfull=1#post66468&lt;br /&gt;
&lt;br /&gt;
== Needs Code Samples ==&lt;br /&gt;
&lt;br /&gt;
There is a list of all pages that require code samples: [[:Category:Needs_Code_Sample|Category:Needs Code Sample]]&lt;br /&gt;
&lt;br /&gt;
Information on how to create a code sample: [[Template:CodeSample]]&lt;br /&gt;
[[Category:Contributing]]&lt;/div&gt;</summary>
		<author><name>Bale</name></author>
	</entry>
</feed>