Version 15.2

Veracity

Developer
Staff member
The following is an abbreviated version of the Subversion commit message logs. Please keep in mind that these messages are intended for other developers and they take the files which were modified into context in order to limit the amount of verbage. In general, they are not intended for general audiences and should not be treated as "official" documentation -- they are informal and abbreviated, at best.

If you do not understand what something says, try looking at the full version of the revision by following the accompanying link for the revision. The only difference is that the files which were modified will be listed, and sometimes, you can guess what happened from file names (though not always). If you still have no idea what happened, that's okay -- it probably doesn't relate to what you're doing with KoLmafia. ^_~

Furthermore, not everything marked as "fixed" is guaranteed to be fixed, not all changes are guaranteed to have a change. This is due the fact that both time and turns are finite and only a limited number of things can be tested. Some changes go in untested, assuming they would work, when they actually don't due to erroneous assumptions; alpha testers occasionally will be able to give feedback, but it's not always possible.

For example, if you read the revision logs for what changed between 10.2 and 10.3, the plus sign choice adventure was meant to get a use link. Something as seemingly insignificant as KoL using two spaces instead of one space in the sentence "It's actually a book. Read it." would mean the change didn't actually work -- anyone can verify that, in fact, the change didn't work for this very reason. If you ever encounter something like that, a non-accusatory mention of it (non-accusatory meaning anything that neither implies "ZOMG FALSE ADVERTISING" nor "You guys said this was fixed, but...") somewhere will usually result in the problem getting addressed.

Finally, if you've got a bug to report, make sure you read up on how to post a detailed bug report. While the rules outlined apply specifically to bugs related to scripting, many of them are applicable to KoLmafia bug reports in general. Most importantly, I hate the words "annoying" and "frustrating". Never use them when describing a bug/feature. Ever. Thanks. The abridged revision logs follow.

Revision: 10584
depleted uranium seal figurine is not consumed when you use it.

Revision: 10585
Use HTTPS for login request.

Revision: 10586
Whitespace cleanup (code formatting, no functional changes).

Revision: 10587
When logging in via SSL, use port 443. Additionally, it wants/requires the
non-secure login, since SSL provides security.

Revision: 10588
Make switchover to HTTPS opt-in until we work out the problems with it on different operating systems / different configurations.

Revision: 10589
Add missing entry in defaults.txt

Revision: 10590
Secure login doesn't work with login via IP address.
Also set https proxy settings when updating proxy settings.

Revision: 10591
Use Sun-specific system properties for HTTP timeout rather than the HTTP timeout client. This could mean that the functionality no longer works on OSX, but since the servers are pretty robust now, it's not likely we'll be in a situation where the feature is used.
Since HTTPS doesn't allow us to connect via IP address, remove the connectViaAddress preference. Instead, ensure DNS cache is eternal via system properties (it's true in Java 1.4.2, not sure about other versions).
Remove https.proxy settings, since those look to be specific to applets.

Revision: 10592
Continue using secured password with challenge if not using HTTPS login.

Revision: 10593
When adding a link to where Clancy sends you, put it in the table in the
Results: section

Revision: 10594
New custom deed type: Simple. Simple deeds do not require the user to specify a preference, and will instead auto-increment an appropriate _simpleDeed preference on click.
acceptable forms:
Simple|displayText
Simple|displayText|Command
Simple|displayText|Command|maxUses

Revision: 10595
Update quests whenever we visit questlog.php, not just when we refresh session data.

Revision: 10596
I can't reproduce KoLmafia trying to remove Tetanus/Cunctatitis with Disco Power Nap when I don't have the skill available, so adding some additional debug messages to help isolate the issue.

Revision: 10597
If a mood says that you should cast a skill to remove an effect but you don't actually have that skill, skip it and try to find an alternative strategy.

Revision: 10598
Fix typo that made KoLmafia use the wrong value for proxy port.

Revision: 10599
proxySet has no effect as a system property, so remove it

Revision: 10600
Fix typo: remover -> action

Revision: 10601
Demoninja and Fallen Arch Fiend have demon skins.

Revision: 10602
Partial rollback of Revision 10591 to see if https.proxyHost and https.proxyPort are really just applet-only, since some people mention that an HTTPS connection through their proxy isn't working.
However, this could be due to the fact that there are probably a different set of ports that we need to use. But just in case it's an easy fix!

Revision: 10603
Tongue of the Otter, Tongue of the Walrus, Disco Nap, and Disco Power Nap all
remove one or more baleful status effects. When you successfully use one of
those skills, remove all the removed skills from your list of active effects.
(We will also notice that the effects are gone on a charpane update, but if you
cast the skill via a chat command, the charpane does not update, apparently).

Revision: 10604
Make the file revision replace code its own ant target.

Revision: 10605
Provide GUI for building Simple deeds.

Revision: 10606
Only manageprices contains current lowest prices, so re-enable access to managestore.

Revision: 10607
When the build/docs/dist folders themselves are symlinks, follow them to clean up files. Limit the includes filter to avoid deleting extra files.

Revision: 10608
Only buy the item if it's tradeable

Revision: 10609
Fix logic for handling trapper quest changes when completing multiple steps at the same time.

Revision: 10610
Don't waste time trying to equip a starfish in the Lair in Axecore

Revision: 10611
If we haven't unlocked the guild, there are no stills available.

Revision: 10612
Auto-create a balloon monkey if you access the link from the ascension page.

Revision: 10613
Don't even search for familiars if you are in Axecore

Revision: 10614
When decorating compact charpane, don't conclude there are no effects if there
are no intrinsics.

Revision: 10615
"Player Status" -> "Daily Deeds"

Revision: 10616
Fix compilation issues with Java 1.4.

Revision: 10617
Allow the user to input commands after a semicolon in the command portion of a custom Item deed.

Revision: 10618
Start of fix for inconsistent determination of whether an ASH function
properly returns a value. The changes so far should not break any existing
code, not even boolean functions which are still erroneously allowed to exit
without returning anything. Non-void functions are considered to properly
return if they end with a return statement (as before), an exit statement, or
an if/elseif/else statement in which all blocks properly return. Still to
do: abort(), and switch statements.

Revision: 10619
Use Boolean.valueOf() or static constants rather than instantiating new Boolean objects.

Revision: 10620
Add an IntegerCache. For now, we use -2 at the low end to handle a dummy effect id and 12,000 to capture the maximum skill id.

Revision: 10621
Add debug statistics for the integer cache in case people are curious to see just how many integers we avoid instantiating over time.

Revision: 10622
Suppress bounty hunter looted message if there's no action.

Revision: 10623
Only try to recover HP automatically if the zone has combats in it.

Revision: 10624
Allow buy scripts to decide if star chart, pixel and malus items are too expensive rather than auto-decide on that.

Revision: 10625
Source formatting for InventoryManager, add some constructors to request classes to make it easier to word wrap InventoryManager.

Revision: 10626
A zone that might have wandering monsters is not strictly non-combat only.

Revision: 10627
Always add a base HREF, since it matters more for the request URL that was used rather than for any links that may be sitting inside the HTML text.

Revision: 10628
The lastBase static variable never gets used, so remove it.
If the location seems to start with KoLmafia, do not output that into the base tag; use the server root instead.

Revision: 10629
Add beecore and mini-hipster as potential causes of wandering monsters.

Revision: 10630
Limited to seven hipster wandering monster combats.

Revision: 10631
Move IntegerCache to objectpool package and rename to IntegerPool. Use get() instead of valueOf() for consistency with the rest of the objectpool package.

Revision: 10632
Check if the player has funkslinging before trying to use two items in a special action. Thanks to lostcalpolydude @ kolmafia.us.

Revision: 10633
Dungeon Fist solver overrides "Manual Control" for the choice adventure.
Don't try to reequip your previous familiar in the Axecore Lair Entryway

Revision: 10634
Add a blank line after link to Boris from Council
When auto-choicing, don't let presence of base tag cofuse "done" check
useSecureLogin controls whether we use https to login, but don't need it after
we are logged in.

Revision: 10635
Clancy support:
- When we look at the charpane, extract Clancy's level and instrument
- ASH functions: int minstrel_level() and item minstrel_instrument()
- In Axecore, the sidepane shows Clancy's instrument and level in place of
familiar and weight.
- The sidepane provides a popup menu of available instruments and allows you to
change his instrument
- Add the Minstrel Level modifier.
- Add "C" as a modifier expression code for current minstrel level
- Add completely bogus modifiers for Clancy's instruments:
Clancy's sackbut: HP Regen Min: [C], HP Regen Max: [C*2], MP Regen Min: [C], MP
Regen Max: [C*2]
Clancy's crumhorn: Volleyball: [C]
Clancy's lute: Fairy: [C]So: Clancy with a loot is like a Fairy of weight equal to his level, and so on.
Eventually, the REAL mapping of Minstrel Level to effective familiar weight will
be spaded and we can correct those expressions.

Revision: 10636
Fix missing base tag in /KoLmafia/specialCommand responses. Remove base tag from general responses.

Revision: 10637
The Sorceress Lair Entryway requires Trusty to be equipped when using star key

Revision: 10638
Rather than have each individual base HREF be generated by each automator, just generate one when returning the response.

Revision: 10639
Rather than rely on base tags, change the href refresh location to include a leading forward slash, as it's more likely that the base tag isn't used for a Javascript href change in IE than it is the case that the base tag is missing at random.

Revision: 10640
Supposedly Clancy's crumhorn and lute are spaded: as a familiar of weight * 5

Revision: 10641
Add modifiers for Boris passives and songs

Revision: 10642
If we drop Avatar of Boris, attempt to detect and log it. Chances are, this
won't work, since I suspect you are redirected to the End of the Boris Road

Revision: 10643
Remove auto-login checkbox, so the only way to access it is via setting preferences via CLI. Remove server selection because there's really no other servers, but you can still set the server index via CLI.
Move the stealth login checkbox to the actual login window where it's more applicable.
Create two separate proxy settings for HTTP and HTTPS connections, in case it makes a difference. Also add auto-detection for existing system properties in case the OS passes that information along.
Continue using dev.kingdomofloathing.com for devster accounts.

Revision: 10644
fix display of custom text deed builder when inputting pipe characters.

Revision: 10645
More fixes for responses on /specialCommand URLs.

Revision: 10646
Add Song of Cockiness effect. Avatar of Boris skills are 11XXX.

Revision: 10647
Looks like last fixes for /specialCommand URLs didn't work quite right, let's try this again with something a little more complex.

Revision: 10648
Only show between battle script warning in relay browser if a user has not opted out of the feature

Revision: 10649
Disable SSL security to see if it helps with the proxy problem.

Revision: 10650
Add reminder to plant seeds to valhalla decorator. Thanks lostcalpolydude@kolmafia.us

Revision: 10651
refresh the campground after successfully using a seed packet. untested.

Revision: 10652
Check for Glorious Lunch before eating in Axecore

Revision: 10653
HTML can use either " or ' as string delimiters

Revision: 10654
If you attempt to adventure in the relay browser, use the same "don't recover HP for non-combat only zones" check that would be run for automated adventuring.

Revision: 10655
Instead of recursively calling retrieveItem, split dough creation into two steps.
When we have both flat dough and wads of dough, use one respective ingredient to make the other. Then when we only have one of the two, purchase wads of dough (and roll if necessary).

Revision: 10656
Fix handling of what happens when you close the currently active channel.

Revision: 10657
Fix proxy settings not persisting between logins, though this doesn't quite fix the HTTPS + proxy issue just yet.

Revision: 10658
Allow default bounty values for locations that are not adventure.php

Revision: 10659
charsheet.php does not have results in it
Do not parse effects from the charsheet, since it has no intrinsics
api.php now has the last missing things from the charpane: "feasted" status of
your current familiar, intrinsic effects, and Clancy status. Fetch all of those
from api.php and skip fetching charpane.php on login.

Revision: 10660
steel lasagna doesn't need milk or glorious lunch checks

Revision: 10661
When finding bounty location, lookup adventure by name, not URL

Revision: 10662
Add mountain man to monsters.txt

Revision: 10663
Use relucant matcher, not greedy, when munging links to have slashes

Revision: 10664
Make naive secure login opt-in, in case it causes problems in some environments.

Revision: 10665
If you are already in the middle of an uneffect request, do not do another lookup on the action as if it returns back to uneffecting, it means to use a soft green echo eyedrop antidote.

Revision: 10666
Also handle the case where a script tries to call uneffect again.
This might happen should auto purchasing be turned off and a script has an if () catching the error state and buying the soft green echo eyedrop antidote directly.

Revision: 10667
Allow modifier maximizer to believe that there are direct sources for anything that is defined in any mood.
This improves existing functionality that only looks at the current mood, as it allows you to define a mood you'll never actually run that only contains informational triggers that are hints for maximizer.

Revision: 10668
Booze that gives no adventures does not start giving adventures when you have
Ode to Booze active. By analogy, we expect foods with no adventures do not
improve when any of the +adventure food effects are active.

Revision: 10669
Vinegar is a booze, but gives 0 inebriety. Allow 0 inebriety booze to show up
on the Booze panel of the Item Manager. Ditto for 0 fullness food and 0 spleen
hit spleen items. Not that there are any of the latter two, as far as I know.

Revision: 10670
quests can be refreshed with the refresh command.

Revision: 10671
Aided and Abetted gives +level DR, not +15.

Revision: 10672
Use api.php rather than charpane.php to refresh status for the following:
- The ASH "refresh_status" function
- The CLI "refresh status" and "refresh effects" commands
- The "Refresh Status" button on the green sidepane
- When Chat Manager thinks that somebody has given you a buff
- When you use a skill and we encounter lag and cannot tell if MP was consumed
- When you use a skill and KoL says you don't have enough MP

Revision: 10673
Incoming buffs via the Chat Manager really should be charpane refreshes

Revision: 10674
Don't look for familiars in Axecore, even if searching by familiar ID.
When calculating adventure gains of consumables, look at average gain rather
than width of the range to decide if there is a range

Revision: 10675
Ferocity is less ferocious.

Revision: 10676
Workaround for potential bug in Java 1.7.0_04 early access.

Revision: 10677
It's not that the regular expression can't be greedy, but rather we needed to call appendReplacement() with $0 instead of just buffer.append().
Handle action appearing in the middle of a URL.

Revision: 10678
Since KoLmafia does not support handling of keep-alive connections turn off system keep alive and set connection to close.

Revision: 10679
No divide by zero when calculating adventures/full for foods with fullness 0.
Ditto for drinks

Revision: 10680
Look at familiar weight in charpane only after we have accounted for equipment
Don't look for familiar in charpane if we are in Axecore

Revision: 10681
At the End of the Boris Road, clear skills before loading the charsheet, since
you no longer know any Boris skills.
When you liberate the king after Boris, defer running the kingLiberatedScript
until after we have chosen a new character class at the End of the Boris Road

Revision: 10682
ash have_familiar( $familiar[ none ] ) now returns true

Revision: 10683
Fix fullness for yellow matter custard

Revision: 10684
Allow conversion from integers back to $class, $stat, $element and $phylum.

Revision: 10685
a couple more places to get familiar by int, rather than string

Revision: 10686
Attempt to detect failure to read skill books in Axecore

Revision: 10687
Song of Cockiness is 15 MP

Revision: 10688
Limit/detect inability to grow familiars in Axecore.

Revision: 10689
Change order of processing item usage so we don't remove familiar larva from
inventory and then have to put them back if growing failed.

Revision: 10690
Remove unused 'description' field in LibraryFunction.

Revision: 10691
Introduce a new type STRICT_STRING for internal library functions that is equivalent to a String except auto-coercion will not occur.
Leverage the new STRICT_STRING to limit the acceptable values for to_int, to_boolean and to_float to only those types that have appropriate values as well as real strings.
Remove TYPE_ANY, as it is no longer needed (making to_string() accept strings serves the same purpose).

Revision: 10692
Use devproxy.kingdomofloathing.com instead of dev.kingdomofloathing.com.
If someone's defaultLoginServer is invalid, use www.kingdomofloathing.com, not devproxy.kingdomofloathing.com

Revision: 10693
to_float returns float, not boolean

Revision: 10694
Update class integer values so that they reflect KoL class numbers.

Revision: 10695
When decorating the Spookyraven Wine Cellar, do something sensible if you
haven't used the spectacles yet.

Revision: 10696
Add Pokemann band-aids as HP restore items

Revision: 10697
And again (why didn't it take my second file?)

Revision: 10698
Suppress actual login password from debug log

Revision: 10699
When a gremlin in the junkward whips out the correct tool, autoselect the
molybdenum magnet in the combat item dropdown.

Revision: 10700
Also allow buffers to auto-coerce into strict strings

Revision: 10701
Re-allow booleans to be switched to floats via to_float()

Revision: 10702
Remove ability to convert back and forth between int <-> phylum and int <-> element

Revision: 10703
Experimental: store item data name in AdventureResult, not item name

Revision: 10704
Add $class[].mainstat proxy record value

Revision: 10705
Actually, use primestat to be consistent with my_primestat() name.

Revision: 10706
Modify WHO_PATTERN to accept hex code color and avoid missing out on those friends eavesdropping a channel.
Sorry this took me quite so long.

Revision: 10707
When we see the gremlin wield the correct tool, only select the magnet in the
combat item list if it is not already selected - which should only be possible
if you are funkslinging, in which case you want to keep both selected items.

Revision: 10708
Distinguish SocketTimeoutException from IOException. In the latter case, attempt
to get the responseCode and log it and return a blank page to the caller.

Revision: 10709
Rename method used to get class.primestat so it works.
If typeii.php returns a blank page (as it does currently), give up trying to
see what is trendy, rather than repeatedly trying again and failing.
Add Overconfident and Foe-Splattered status effects

Revision: 10710
Process results for a TrendyRequest even on a connection failure.

Revision: 10711
No more item-granted intrinsic effects

Revision: 10712
Pokemann band-aids are single usable

Revision: 10713
Centralize a lot of URL encoding/decoding

Revision: 10714
Turning a peppermint sprout into a peppermint twist is an SUSE, not an MUSE

Revision: 10715
Add Small Medium, crystal decanter, and Happy Medium

Revision: 10716
Add Siphon Spirit skill. Add all the Happy Medium drinks. Note that none of them
have any Mus/Mys/Mox gains listed yet, pending spading. Note also that the
status effects they produce are not yetin.

Revision: 10717
Add support for automating Vamp Out (Interview With You)

Revision: 10718
Don't assume that roninLeft == 0 means you can interact. Hardcore trumps it.

Revision: 10719
New, stricter check for canInteract checks for Ronin only after various other
condtions that trump it have all been checked

Revision: 10720
On the green sidepane, display the current familiar image, as seen in api.php
or charpane.php, rather than the default image for the current familiar.

Revision: 10721
Actually return the decision made by autoVampOut
Don't show choice spoilers for Interview With You since they're completely unhelpful
Clean up the action logging after making an Interview With You decision

Revision: 10722
Look for the molybdenum magnet as selected both with and without a picurl

Revision: 10723
Add status effects from Happy Medium drinks

Revision: 10724
debug.gif does not come out of the itemimages directory

Revision: 10725
Whenever we change familiar, immediately set the image to that familiar's
default image. A subsequent charpane update might change it.
Register all 4 Happy Medium images so that we can map from image to familiar
successfully, no matter which aura she has.
Always save the familiar image complete with ".gif" rather than adding that
suffix every time we fetch it.

Revision: 10726
Detach familiar image from charpane responseText.
The Gear Changer includes items worn by a hatrack, scarecrow, or disembodied
hand in the hats, pants, and weapons lists, respectively, except when the
particular familiar is your active familiar. If you select an item worn by a
familiar, it will steal the item from the familiar.

Revision: 10727
Add the remaining cases where a function can be considered to properly return
without an explicit "return" at the top level: "switch" with a default case
and no breaks, "try" where either the main code block or "finally" clause
can't fall through, and infinite loops (while(true), repeat...until(false))
with no breaks. Note that it turned out not to be appropriate to consider
abort() to be a proper return: I'd forgotten about the possibility of doing
"disable abort" from the CLI.
The determination of whether a non-void function has a missing return value
should be entirely correct now, however it just gives a warning for boolean
functions at the moment, to give people a chance to fix invalid scripts that
were working only because of the previous broken determination.
The infrastructure for detecting proper returns also allows detecting
unreachable code, which generates a warning (not an error, I believe Java is
too draconian in this respect). Unreachable returns are allowed without a
warning for now, since they were previously required to get functions to
compile if they didn't return from the top level.

Revision: 10728
Add _mediumSiphons preference.
New $familiar proxy record: .charges. The only familiar that uses this right now is the Happy Medium, but the stomping boots and grinder can eventually utilize it.
When we look at the charpane, set .charges when we see the happy medium's image. Unfortunately, api.php is bugged at the moment and always returns the un-charged image name. I put the code in to do the updating, but left it commented out.

Revision: 10729
Fix NPE in CoinmasterRequest

Revision: 10730
Now that hats and pants have their own lists in the Gear Changer, we need to
update those lists when you change your hat or pants

Revision: 10731
Log it if we get an IOException while posting data

Revision: 10732
add charpane decoration for Happy Medium

Revision: 10733
Add stack trace for IOExceptions and timeouts where applicable.

Revision: 10734
Add Uncle P's Antiques to npc store database, so we can buy Clancy's crumhorn

Revision: 10735
Strangely enough, Drac & Tan, Black & Starry, and PB&BP all have an actual
ampersand in their names, rather than an HTML character entity.

Revision: 10736
Hide the Stills daily deed until the guild store is actually unlocked.

Revision: 10737
connectViaAddress works when we use a naive secure socket layer

Revision: 10738
When multiple item names match the same item id, don't count that as an item match failure.

Revision: 10739
check kingLiberated before checking Hardcore or Bad Moon

Revision: 10740
When an ASH script causes a stack overflow, print the line and file

Revision: 10741
When calculating how much ML you flyer, use the monster's base attack, not its
modified (via deleveling) attack.

Revision: 10742
reportedly KoL has fixed the bug with the api familiarpic field, so uncomment the lines for updating happy medium charges. Untested.

Revision: 10743
Update FamiliarDatabase when we set the current familiar image. Untested

Revision: 10744
allowSocketTimeout defaults to false. Change its description on the login panel to be more descriptive.

Revision: 10745
Mark carious combat items as such

Revision: 10746
Do not do post-login actions (script, breakfast) if you log in to a fight or
choice. Defer those actions until said fight or choice is resolved.

Revision: 10747
Do not force monster attack & defense to zero for unspaded monsters; allow
them to go negative if deleveling is applied. Only apply a minimum of 1 for
spaded monsters stats.

Revision: 10748
Improvements to Wine Cellar tracking:
- New setting wineCellarProgress goes from 0 to 3 and is # of wines you have
successfully poured into the pedestal.
- When you pour a wine into the pedestal, detect whether it was successful or
not and if so, which glyph you have activated. As a result, wineCellarProgress
can end up as 0, 1, 2, or 3
- when visiting the pedestal, either to look or to pour wines, we set goals for
only the wines corresponding to glyphs you have not yet activated that you do
not have in inventory
- when visiting the pedestal, do not mark the wines "1st", "2nd", and "3rd" in
the dropdown. Mark the next required wine with "***".

Revision: 10749
Add remainder of special handling to level 12 questlog parsing.

Revision: 10750
When looking to highlight the next dusty bottle needed at the pedestal in the
Wince Cellar, look for the item's KoL name, not the identified name.

Revision: 10751
Allow ChatManager to initialize without checking the Altar of Literacy if you
are stuck in a fight or choice when you log in.

Revision: 10752
In most versions of the JRE, the get() method of HashMap has an infinite loop race condition. Therefore, if we expect multiple threads to execute, we need to use thread synchronization.
In order to limit any potential deadlocks that might happen in doing the synchronization, we make the synchronization blocks small.

Revision: 10753
Add has_goals method to ASH runtime library which uses the same check that KoLmafia does to see if goals are present.
Add goal_string method to ASH runtime library which displays exactly what gets updated in the 'goals' line in the adventuring interface as automated adventuring happens.

Revision: 10754
morto moreto is EPIC. stats for mountain man. combat rate for song of battle

Revision: 10755
To avoid the split_string that is likely to happen in every script that uses it, replace has_goals and goal_string with get_goals which returns a string[int] containing all the conditions that KoLmafia will try to satisfy.

Revision: 10756
Remove debug output which prints out the complete list of conditions each time you add a new condition.
Add goal_exists() where you can pass in a goal type (choiceadv, autostop, meat, health, mana, item) and KoLmafia will tell you if there are any goals that match.

Revision: 10757
Pseudo items are their own condition type.

Revision: 10758
If you have a Good Singing Voice, your Songs last twice as long.
When auto-filling a mood in Axecore, pick only one Song

Revision: 10759
Add Boris Songs to list of "usable" skills.

Revision: 10760
Make table cells a little wider in the wine cellar. Whatever.

Revision: 10761
When you are adventuring in the Relay Browser, we have 10 different conditions
for which we will pop up a warning screen and ask you to confirm before
proceeding: counter expiration, clovers, MCD for bosses, 100% familiar,
recovery failed, sorceress item, wossname, war tokens, infernal seal, and
Demonstar. Obviously, not all of those can occur at a single location, but
certainly more than one can. Use a different field in the URL to indicate that
you are confirming each of those, so that multiple warnings can fire.

Revision: 10762
Song of Glorious Lunch status effect has been renamed to match the skill name

Revision: 10763
Don't look for results when arrange items/shelves of museum display

Revision: 10764
When a script uses visit_url(), the request is submitted in a GenericRequest
and will automatically follow redirects. If it redirects to choice.php, give
the ChoiceManager a change to initialize in preparation for tracking it.
When ASH needs to reload a script because it has been modified, only remove
that scripts's interpreter from the cache; retian other cached interpreters.

Revision: 10765
Add a "final" scope type to ASH which allows data/commands to be executed only
once per session.

Revision: 10766
Check this.executed, not this.parent.executed

Revision: 10767
Tie hatter buffs into the maximizer.
hatter command can take an integer, and will try to get the associated buff for a hat of that length.

Revision: 10768
Don't try to get hatter buffs if we can't equip the hat. Thanks Xyzzyn@kolmafia.us

Revision: 10769
In a "final" scope, put the variables into the parent scope.

Revision: 10770
Command, Item, and Skill custom deeds can take a 6th argument to add a tooltip to the button. Thanks IronTetsubo@kolmafia.us

Revision: 10771
Do not save/restore bindings of final variables declared in a user-defined fn

Revision: 10772
A final declaration can either take a block, surrounded by {}, or a single
command or declaration.

Revision: 10773
Disallow using Field Gar potion on Mondays

Revision: 10774
ASH: "final" -> "static

Revision: 10775
Improve logic for demon summon availability in maximizer.

Revision: 10776
More Final -> Static

Revision: 10777
Reorganize code for removal of malignant status effects to make it easier to follow to see if the runtime optimization of JRE understands it better also, since apparently it got it wrong.

Revision: 10778
Move Haunted Sorority House and Elf Alley out of Clan Basement

Revision: 10779
Set adventure location before updating wine cellar goals

Revision: 10780
Do that same thing, but slightly more efficiently

Revision: 10781
Require that an item actually removes an effect before trying to use it to do so

Revision: 10782
Remove ASH to_stat( int) and to_int( stat ).
Require to_item( string ) to have a STRICT_STRING.
Ditto for to_class, to_stat, to_skill, to_effect, to_location, to_familiar,
to_moneter, to_slot, to_element, to_coinmaster, and to_phylum.

Revision: 10783
Non-plastic red oyster eggs are single-usable hp restoratives
Non-plastic blue oyster eggs are single-usable mp restoratives

Revision: 10784
Only update goals when you gain an item, not when you lose an item.

Revision: 10785
Allow the eatsilent and overdrink commands to use the appropriate cafes -
Hell's Kitchen, the Micromicrobrewery, and the Restaurant.

Revision: 10786
Add afterAdventureScript, which is executed after each automated adventure
before checking if goals have been satisfied.

Revision: 10787
Add Wu Tang the Betrayer and The Avatar of Sneaky Pete

Revision: 10788
Add Ronald and Grimace Safety Shelter maps to choice options.

Revision: 10789
Improve session/CLI logging for Vamping Out

Revision: 10790
Fix Wu Tang's HP

Revision: 10791
Don't run afterAdventureScript before adventuring

Revision: 10792
Support for Clan Jukebox:
- _jukebox is true or false depending on whether you've visited the jukebox
- Add jukebox command
jukebox [#|mod|effect] - listen to a song
# - 1, 2, 3, 4
mod - meat, stats, item, initiative
effect - Material Witness, No Worries, Techno Bliss, Metal Speed
Add appropriate command to statuseffects.txt so these effects are available to
the modifier maximizer

Revision: 10793
Proof of concept for "pages" refactoring to improve relay browser / internal request synchronization.

Revision: 10794
Don't generate an error message when converting a bogus string to an effect.
Simply return $effect[ none ]

Revision: 10795
Refactor: convert some static methods into CoinMasterRequest into object methods
of CoinmasterData
CreateItemRequest.getInstance now returns null for Concoctions made via an
inaccessible Coin Master

Revision: 10796
Hidden Temple stuff

Revision: 10797
More Hidden Temple stuff

Revision: 10798
Make the star key before the star hat

Revision: 10799
At the gash, suggest creation of a key lime rather than creation of a key lime pie.

Revision: 10800
Run afterAdventureScript after the charpane refreshes in the Relay Browser and
indicate that an adventure was used, if relayRunsAfterAdventureScript is true

Revision: 10801
Only run the afterAdventureScript if we think it is possible to run it. I.e.
we are not in a fight, say.

Revision: 10802
fix untinker questlog text

Revision: 10803
It is jukebox "item", not "items". (As in "item drop")

Revision: 10804
Only add a script to the MRU list and rebuild the Script menu if you have the
Script MRU list enabled

Revision: 10805
Since we are not using HttpTimeout* anymore remove now empty directory and reference in unlicensed file.

Revision: 10806
Map skill <-> effect : Pep Talk <-> Overconfident
Register Pep Talk as a skill that can remove Overconfident
Note that Overconfident is the only Intrinsic effect that is removable
Add proxy field to skills: $skill[ xxx ].song is true if its a Boris song
$skill[ xxx ].permable is false for Boris skills
$skill[ xxx ].traincost is 0 for Boris skills

Revision: 10807
Only trigger afterAdventureScript in the relay browser when the charpane says
adventures have been used.

Revision: 10808
Add missing frat/hippy war council text

Revision: 10809
Run the afterAdventureScript in the relay browser if three conditions hold:
- We submitted an adventure URL or a fight or a choice
- We are no longer in a fight or a choice
- relayRunsAfterAdventureScript is true.

Revision: 10810
Put the link to adventure in Clancy's desired location in the "Adventure Again"
section of the Results: page

Revision: 10811
disable NS lair quest tracking while we figure out the HTML.

Revision: 10812
Execute afterAdventureScript at end of certain relay browser initiated actions:
"script" button on fights, "go to goal" for louvre, chessboard, dvorak

Revision: 10813
Stone Temple Pirates can't be insulted.

Revision: 10814
Add a default builder to .project

Revision: 10815
Allow certain ASH constants to be used in custom combat settings.
$phylum[] refers to the monster categorization, see the built-in ASH constants documentation for more information.
$element[] refers to either the attack or the defense element. As long as one matches, this check will be satisfied. This may limit its usefulness, but we can evaluate it later.
$item[] refers to an item that the monster drops. If there are multiple monsters that drop the item, or if you just can't remember which one it is, and your combat strategy happens to depend on it...
In order to match, everything that you specify must match. So if you specify an impossible combination, that CCS section will not run.

Revision: 10816
Fix clan snapshots for when someone has restarted a run.

Revision: 10817
Don't flake out when parsing single command scopes whose command is simply ";"

Revision: 10818
CreateItemRequest.getInstance now returns null for coinmasters that are not accessible, rather than for coinmaster you can't afford to buy from.

Revision: 10819
In the Login frame, update the "Breakfast" checkbox based on the getBreakfast setting of the currently selected character.

Revision: 10820
Don't decorate the sorceress familiars in Axecore, thanks to IronTetsubo @ kolmafia.us

Revision: 10821
Add a "Solve!" button to the hedge maze puzzle

Revision: 10822
Add a way to obtain the Trivia Master effect in statuseffects.txt.

Revision: 10823
plural of bilge wine is bottles of bilge wine. Make Clancy adventures autostops

Revision: 10824
Only match against defense element when specifying $element[] in custom combat settings.

Revision: 10825
Allow people to try to login to devproxy.kingdomofloathing.com.
Fix places where we still pointed to dev.kingdomofloathing.com.

Revision: 10826
Remember if you're literate rather than check the server every time.

Revision: 10827
Add a space to questL10Garbage council text

Revision: 10828
Make the bottom of the chat frame's scrollbar "sticky" - when the scroll bar is at the bottom, the window will scroll along with incoming chat, as before. When you scroll up, the scroll bar becomes un-sticky, and will no longer force the display to the bottom.
Somewhat experimental. The "dead-zone" amount can be tweaked up or down, pending feedback.
The same treatment can be applied to the gCLI eventually.

Revision: 10829
When fetching bytes for responseText, debug log before and after. If we get
an IOException print a stack trace.
Centralize the function which gets the "no familiar icon" to make it easy to
change, should we wish to do so.

Revision: 10830
When printing an ASH error message to the gCLI, escape characters into HTML
character entities, if necessary.
c

Revision: 10831
Extend the "sticky scrollbar" treatment to the gCLI. Extract the listener as now it is needed in two different panels.
I set the dead zone for gCLI stickiness at a fairly generous 200px - four times that of the same setting in chat.

Revision: 10832
fix a race condition in the sticky scrollbar implementation.

Revision: 10833
increase the dead zone for deciding to autoscroll chat

Revision: 10834
make that dead zone tweak a little less drastic.

Revision: 10835
Autostops only "stop" if you are "auto"mating.

Revision: 10836
Update some item powers, thanks to AlbinoRhino @ kolmafia.us
Missing monster stats for Cyrpt monsters, thanks to Darzil @ kolmafia.us

Revision: 10837
Add some Hidden Temple choice adventures, item drop rates and tweak the glowing fungus' adventure yield. Thanks to IronTetsubo @ kolmafia.us.

Revision: 10838
When you get the Stone-Faced effect, provide a link to adventure in the Hidden Temple. Mark Baa'baa'bu'ran as a semi-rare monster in combats.txt

Revision: 10839
The cap on certain scaling monsters' stats can now be raised by +ML. Thanks to Darzil @ kolmafia.us

Revision: 10840
Don't put a "solve" button on the page which tells yout hat you have no more
hedge puzzles.
If the Topiary Golem steals your last puzzle just as you retrieve the hedge
key, don't proceed

Revision: 10841
Fix hedge puzzle solver: correctly detect exit when in same column as entrance

Revision: 10842
Make the "test hedgepuzzle" command work even if you have not loaded HTML:
it will look at your current puzzle, display it, and display the solution.

Revision: 10843
When you go up a level, put "council" link in front of "guild" or "boris" link
When you successfully use a consumption helper, remove it from inventory.

Revision: 10844
Since simultaneously having putty and raindoh gives you an extra copy per day, we need to individually track their usage. Do that.
Thanks nworbetan and lostcalpolydude

Revision: 10845
If we try to look at a hedge puzzle and KoL says we have none, resynch inventory

Revision: 10846
add Clancy quest: questF05Clancy

Revision: 10847
lastManorUnlock is, surprisingly, the last manor unlock.

Revision: 10848
Implement unsticky scroll panes using a non-static variable, since calling dispose() before resulted in all known references clearing and a potential null pointer exception.
Use a linked list instead of a hash map of boolean values for sticky scroll panes to avoid checking a map all the time.
Probably over-defensive, but retain the pattern of using weak references and wrap sticky panes with a weak reference in case of a Swing memory leak that might happen if dispose() is not properly called.

Revision: 10849
Fix Java 1.4 compilation errors.

Revision: 10850
Use single-use spleen items one at a time.
Soup up how we highlight the correct wine to pour into the goblet

Revision: 10851

Revision: 10852
Remember the name of the next wine to get, whether or not you have it in
inventory

Revision: 10853
Crimbo tree now resets to 7 days on ascension, so just get presents during breakfast when available.
remove crimbo tree deed from defaults.txt

Revision: 10854
When exploring the Tavern Cellar, add "Explore Next Unexplored Square" to go to
the next square, according to our built-in search order

Revision: 10855
Fix regression bug involving race condition of KoLmafia updating the list of sticky panes while it iterates over them.
Remove code for weak references, since it over-complicates the logic that's needed to handle the race condition with minimal benefit.

Revision: 10856
Even if one of the panes is non-sticky, continue truncating as it's possible that a user can close a window while the editor rendering the chat/gCLI is set to non-sticky, creating a situation where content never gets truncated.

Revision: 10857
The Raging Bull drops two boxing gloves.

Revision: 10858
Update some monster stats and drops, thanks to demon llama @ kolmafia.us.

Revision: 10859
After certain actions (bridging the chasm, planting the beanstalk or finishing the Friar quest), only enter a PENDING_STATE during automated adventuring. Thanks to lostcalpolydude @ kolmafia.us.

Revision: 10860
The Maximizer shouldn't consider the jukebox and trivial advocation cards when you can't interact.

Revision: 10861
Fix the fix added in Revision 10860.

Revision: 10862
Do not show the "unequip shirt" line in the Maximizer if a character doesn't have Torso.

Revision: 10863
Add staph of homophones

Revision: 10864
Set the OSX dock icon manually (for hourly builds)
Enable full screen for all windows in OS X Lion

Revision: 10865
Doc Galaktik's discount is now considered to be in effect (thus affecting
restoration decisions, and ASH galaktik_cures_discounted()) if you have all 9
of his quest items in inventory.

Revision: 10866
Boris's Helm

Revision: 10867
Data entry monkey update:
Add Boris's Helm (askew). Both forms of Boris's Helm give +5 familiar weight. You can now fold or use one to acquire the other.
Update drop rates for Sleazy Back Alley and Outskirts of the Knob monsters, thanks to lostcalpolydude @ kolmafia.us
Add Four-shadowed mime.
Add Spectral Pickle Factory monsters' phylums.

Revision: 10868
Update Spectral Pickle Factory drop rates.

Revision: 10869
Add stats for the Four-shadowed mime.

Revision: 10870
Since TPTB have steadfastly refused to turn the entire game into a MS Paint
Adventures homage, it falls to us to do so. First steps:
* Remove ASH scripting, replace it with ~ATH.
* Rename "CCS" feature as "STRIFE SPECIBUS".
I'm still working on a series of FETCH MODI, each of which prevents you from
specifying desired inventory items in a different, hilarious way.
(Oh, and I fixed a few effect extender commands that incorrectly included
commas.)

Revision: 10871
Make sure the operating system is actually Mac OS X before initializing the com.apple.eawt.Application object

Revision: 10872
Display command line help with '--HELP' or '/?'
Display the version number and build date with '--VERSION'

Revision: 10873
Four-shadowed mime is a wandering holiday monster.

Revision: 10874
Correctly swap Boris's Helm and Boris's Helm (askew) when twisting, either from inventory or when it is equipped as a hat or familiar item

Revision: 10875
Add a bunch of missing phylum data (thanks Log)

Revision: 10876
Use GMT-7 when checking which day of the week it is.

Revision: 10877
Clean up the Boris's Helm twisting special handling
If a Boris's Helm is equipped, fold should twist it instead of removing it and using it. Additionally even if there is a second Helm in inventory, the equipped one should get twisted since that's most likely what the user wants to do.

Revision: 10878
Fix monster data for Wonderful Winifred Wongle

Revision: 10879
Add a boolean "boss" field to $monster[]

Revision: 10880
When visiting questlog.php, parse the responseText even if there isn't any "which=" field in the URL.

Revision: 10881
Track the "Repair the Elves' Shield Generator" quest.
Check if the quest has been completed when deciding if the Lunar Lunch-o-Mat is accessible.

Revision: 10882
An Avatar of Boris doesn't gain 15 max fullness during Feast of Boris.

Revision: 10883
More monster phylums, thanks to GValko @ kolmafia.us

Revision: 10884
The "Java Is Not ASH" fix: do not try to compare strings with "!=". The Lunar Lunch-o-Mat isAccessible() should now behave.

Revision: 10885
Fix string comparisons using == or != instead of .equals
Remove a dead local in MoneyMakingGameManager
Found using FindBugs

Revision: 10886
Truncate step1 of the bugbear questlog text as the variable mushroom request messes up string matching.

Revision: 10887
Fix some typos with phylum data (thanks Theraze).
Also make all the penguins of phylum penguin, because seriously.

Revision: 10888
re-implement the NS quest tracking with hopefully improved HTML. Thanks Bale.
Still missing some of the later steps (heavy door, shadow, etc).

Revision: 10889
gowassail, not Gowassail

Revision: 10890
Remove Trivia Master from the maximizer in-run, take 3.

Revision: 10891
pyramid3a => pyramid3b

Revision: 10892
questM03Bugbear live tracking

Revision: 10893
When copying a Modifiers object, copy its name as well. This should fix a
problem involving modtrace and a Disembodied Hand, that was changed from a
cosmetic glitch to a NPE due to Revision 10885.

Revision: 10894
Advance the Bugbear Quest to step 3 when you defeat Felonia.

Revision: 10895
shiny stones are multi-usable

Revision: 10896
don't increment pyramid position when using a tomb ratchet before having set the wheel. Thanks lostcalpolydude@kolmafia.us

Revision: 10897
super speed is a percentage modifier

Revision: 10898
Equipping Plastic Vampire Fangs gives the "Feed" skill.

Revision: 10899
Remove preference for disabling relay overrides

Revision: 10900
questM01Untinker live tracking

Revision: 10901
questM04Galaktic live tracking, too, while I'm at it.

Revision: 10902
We do not need to decorate the gash with the option to trade in barrels of
gunpowder for the big boom since we do that automatically anyway.

Revision: 10903
Check if the spooky bicycle chain was obtained from a combat before setting questM03Bugbear to step3.

Revision: 10904
squash a couple of bugs in ChoiceManager pertaining to setting pyramid and worship quests.

Revision: 10905
Add ring of teleportitis as a possible source of Teleportitis for the Lair gates.

Revision: 10906
Add support for the new choice in the Out in the Garden choice adventure.

Revision: 10907
Adventure Yet Again in These Ruins

Revision: 10908
hippy bongo drop rate

Revision: 10909
if the cyrpt quest is started, but we don't know evil levels for whatever reason, use the evilometer so that we do.

Revision: 10910
don't prompt about turning in rat whiskers on ascension if the artist quest isn't finished.

Revision: 10911
refresh RestsDaily on freeing the king.

Revision: 10912
Add the happymediumglow predicate the the KoL macro syntax checker.

Revision: 10913
In the Store Manager frame, try to prevent expensive items from being mispriced: if the lowest mall price of an item is 1 million meat or more, and if the user reprices the item at 15% or less of that price, ask for confirmation before applying the price changes.

Revision: 10914
Arse Shoot is not permable. So, if you are the single player in the Kingdom
who owns the crossbow that grants you that skill, when you go to gash, KoLmafia
will not list the skill on the list of "skills you have not yet permed."
Whoop-de-do.

Revision: 10915
Fix some effect and item images.

Revision: 10916
Add more spoilers for the Hidden Temple choice adventures.
The Nostril of the Serpent is removed from inventory when visiting the temple buttons. Track whether the buttons are confusing are not in the lastTempleButtonsUnlock preference
Track the once per day choices in the _templeAdventures and _templeHiddenPower preferences.

Revision: 10917
You only gain 3 adventures in the Hidden Temple once per ascension. Track this in the lastTempleAdventures preference, instead of using the daily _templeAdventures preference.

Revision: 10918
When you dropping from Hardcore to Softcore, immediately set whether you can interact instead of waiting for the next charpane refresh.
Thanks to lostcalpolydude @ kolmafia.us

Revision: 10919

Revision: 10920
Protector Spectre attack and Ed defense added

Revision: 10921
Decode the URL before the ? to simplify other checks

Revision: 10922
Add get_player_id method to ASH

Revision: 10923
Add lostcalpolydude to authors.txt

Revision: 10924
Make "Yes, You're a Rock Starr" adventure properly show whether you will get a combat or stats based on your drunkenness.
Remove no-longer-used relayAllowsOverrides setting from defaults.
Update stat gains for pumpkin beer.

Revision: 10925
Add plural for S.L.E.I.G.H.B.E.L.L.S.

Revision: 10926
When asking for the "Effect" string modifier, do not return the "Familiar Effect" string modifier.
When asking for the "Familiar Effect" string modifier, return the "Familiar Effect" string modifier.

Revision: 10927
Remove typo from modifiers.txt.

Revision: 10928
Properly track what item you have in your garden when you harvest it or switch seed packets.
Remove check for failed seed packet use thanks to KoL removing the daily limit.

Revision: 10929
Bucket of wine is decent. Tomb rat king is unaffected by monster level modifiers.

Revision: 10930
Add the effect() function to the modifier expression language to access the number of turns of an effect.

Revision: 10931
Fix the effect() modifier function to not return 1 when the character doesn't have any turns remaining of an effect.

Revision: 10932
consumption data (guesses) for siphoned spirits

Revision: 10933
improve consumption data for drunken astrophysicist, based on personal spading

Revision: 10934
Update hot tub uses when visiting the VIP lounge

Revision: 10935
Do not try to parse a player ID from null.

Revision: 10936
The Nostril of the Serpent is item n°5645, not 5545.

Revision: 10937
Add minstrel_quest() boolean function, which returns true when Clancy has a new quest for you.

Revision: 10938
Live tracking of the end of the Orc Chasm Quest.

Revision: 10939
Track monsters currently banished via Banishing Shout in the banishingShoutMonsters preference.
When the player visits Banishing Shout's skill description, parse and save the list of currently banished monsters.
Add a "Banished Monsters" daily deed.

Revision: 10940
Combat Rate modifiers give diminishing returns after + or - 25%.
Track Underwater Combat Rate modifiers separately from regular Combat Rate modifiers.

Revision: 10941
Players don't have colons.

Revision: 10942
Remove debugging code. Sorry about that.

Revision: 10943
Don't look for "Rank" in charsheet.php and showplayer.php. Look for "Fame" instead. Thanks to natnit @ kolmafia.us.

Revision: 10944
Correctly recognize elemental damage modifiers in descriptions.
Add first Olympic-Sized Swimming Pool items.

Revision: 10945
Update bonus PvP fights from gear

Revision: 10946
Add support for the clan Olympic Swimming Pool.
Add the "swim" CLI command.
Add the "Swimming Pool" daily deed.

Revision: 10947
Add missing file.

Revision: 10948
Add watered-down Red Minotaur to spleenhit.txt.

Revision: 10949
The Market Demon is now the General Store. Sweet rims have been moved to the General Store.

Revision: 10950
The hermit does not take permits when you buy items, but a hermit permit is required to buy anything

Revision: 10951
pairs of Knob nuts is the plural

Revision: 10952
Update The Hidden Temple id

Revision: 10953
Add new PVP items and NPC store

Revision: 10954
The Swagger Shop is a Coinmaster whose currency is swagger.
Transactions untested.

Revision: 10955
Many no-longer-available items now have an autsell price of 0

Revision: 10956
Reset the banishingShoutMonsters preference once per ascension, not every day.

Revision: 10957
Fix NPE registering requests for peevpee.php

Revision: 10958
hairshirt is moon-dependent

Revision: 10959
Update available clovers when the hermit script is used.

Revision: 10960
Recognize "make as many as possible" when buying from Phineas

Revision: 10961
Ignore pvp fight logs when parsing for item gain

Revision: 10962
Herring Daquiri -> Herring Daiquiri
If you already have the aerated diving helmet equipped, you can visit Big Brother

Revision: 10963
kneecapping stick has an autosell price again

Revision: 10964
Update mall prices

Revision: 10965
Bump version to 15.2
 
Top