Version 15.1

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: 10271
Check for physical damage before elemental damage, so damage to you from your
familiar doesn't get interpreted as damage to the monster.
Tomb rat king

Revision: 10272
Properly detect how much Meat you spent when you make a mall purchase in the
Relay Browser

Revision: 10273
When you click the Search button on the Purchase Frame, KoLmafia does a mall
search. Leave focus on the "Item to Find" field when the search completes.

Revision: 10274
When we switch to the Purchases Frame, give focus to the search field
When we switch a tab in the Chat Frame, give focus to the text entry field

Revision: 10275
Topiary Golem is a supposedly now a plant
Remove unnecessary token.
Fix macrohelper, courtesy of hee**3, to collapse strings while parsing

Revision: 10276
On the Send Message Frame, there is a list of attached items. Add a key listener
to remove all selected items from that list when you press the "delete" key

Revision: 10277
Add a "-" button on the Send Message Frame to also remove attachments.
Include various little fixes discovered by Rinn with a code analysis tool

Revision: 10278
When purchasing from a mall store, amount of Meat you spent can have commas

Revision: 10279
Update distributed license to match copyright year in java files

Revision: 10280
Fix Chat Frame: if you don't have a toolbar, default is show profile on click
The Knob Goblin Alchemist drops the bounty item.
Port Aankhen's improved bounty hunter menu item to current codebase.

Revision: 10281
Refactor internals of FaxRequestFrame to be externally callable.
Add a "faxbot cmd" command which sends "cmd" to the first configure faxbot.
Change a default chat setting to make one fewer thing to configure in order to
use ActiveChat

Revision: 10282
Only parse equipment changes from EquipmentRequests if they succeed.

Revision: 10283
When you auto-adventure in the "Tavern Cellar", pick an appropriate square:
an unexplored one, preferably, otherwise the rat faucet.

Revision: 10284
When we parse a Player Profile, get the clan id from the page.
Stomping Boots and Organ Grinder did not force the Familiar Drops Daily Deed
to be shown, in the absense of other dropping familiars

Revision: 10285
Removed unused imports

Revision: 10286
Fix Hidden City to be auto-adventurable without needing to manually set a
preference: first select an unexplored square to explore. If none, select a
normal Encounter square.

Revision: 10287
When you defeat a Dirty Thieving Brigand, even if you didn't find it by
explicitly adventuring in The Themthar Hills, see if you have completed the
nun's quest and, if so, set the sidequest status appropriately

Revision: 10288
Hidden City now has two adventure locations:
- Hidden City (automatic) - first unexplored or protector spirit or encounter
- Hidden City (Encounter) - first encounter

Revision: 10289
If you have a crown of thrones but are not wearing it when you log in, log at
the item description to see which familiar is riding in it

Revision: 10290
Cancel table editing in the Store Manage Frame before manipulating the
Sold Item List

Revision: 10291
Simplify: OceanDestinationComboBox implements ActionListener

Revision: 10292
When attempting to pass the Sorceress's familiars, call the Familiar Training
Frame to buff the familiar to 20 lb., if possible, but do not actually train
the familiar if buffing fails.

Revision: 10293
Simplify Tavern quest solver

Revision: 10294
Fix formatting. Fix typo. Simplify tavern logging.
Redo Ocean Destination Select combo box, yet again.

Revision: 10295
There are now 2 virtual Hidden City locations.
(Wasn't sure if we wanted to keep the protectors in the "Encounter" version)

Revision: 10296
plastic vampire fangs are nosmash

Revision: 10297
stompin boot pastes can be used in quantity.

Revision: 10298
When KoL returns a blank page to a request to adventure in a location, that
would be a KoL bug (normally it gives an informative message). Treat it as if
KoL HAD returned an error message and stop automation.

Revision: 10299
When we visit the Hidden City map, fix any obvious inconsistencies in our
saved hiddenCityLayout property

Revision: 10300
Reset mushroom plot progress when you ascend

Revision: 10301
Move time-intensive preference saving out of action callback in the
OceanDestinationComboBox

Revision: 10302
Remove legacy code to save a property if our ocean destination is "manual" to
fix things for "people with old settings files". This was installed in revision
8247 with the comment that "this is the only place we SET a setting when loading
settings into GUI controls". There is a reason that no place else does that...

Revision: 10303
Removed several unused fields.

Revision: 10304
Give the ContactListFrame an initial size so it doesn't come up tiny

Revision: 10305
When the RecoveryManager is running between battle actions - restoring HP,
restoring MP, executing moods, burning mana, running the between battle script -
it disables adventuring in the Relay Browser. When all between battle actions
are complete, it re-enables such adventuring. Changing equipment before such
actions and restoration of equipment of equipment afterwards is part of such
actions. Unfortunately, restoring equipment occurs AFTER automatic adventuring
is reenabled. Fix that.

Revision: 10306
What the heck. say that recovery is no longer active at the very end of
RecoveryManager.runBetweenBattleChecks().

Revision: 10307
Wait for recovery/mood management to complete before allowing Relay Browser to
execute an equipment change

Revision: 10308
The "wormride" link no longer tries to equip the worm-riding hooks, whether or
not the character is in Fistcore

Revision: 10309
A few tweaks to charpane decoration to ensure that refresh link is at bottom
and that there is a table in which to insert counters even if there are no
active effects or intrinsics

Revision: 10310
Fix Tattle

Revision: 10311
Correctly predict the amount of HP/MP when predicting from modifiers and in the Basement decorator.

Revision: 10312
The lower bound for your maximum HP/MP is always your unbuffed muscle/mysticality.

Revision: 10313
Add support for the Container slot.
Don't need to specify exact size for new Contact List frame.

Revision: 10314
Update ChatManager's checkAltar to chatLiterate. Once returned true, remember that to avoid extra server hits.

Revision: 10315
Add AltarOfLiteracyRequest to track visits to the Altar.
Tell ChatManager whether the Ghost of the English Language considers the player
to be sufficiently literate.

Revision: 10316
Hook the Chat Manager into the Quest Log, which will tell you outright if you
are literate.

Revision: 10317
Punt early in Fax Request process if you are not allowed to use chat

Revision: 10318
synchronize initialization of Trendiness database

Revision: 10319
Proof of concept: the Gear Change Frame now includes or doesn't include a
dropdown for Containers under the control of showContainerDropdown setting.
You can change this dynamically and it will update the frame appropriately.
This is temporary. Eventually, it will include or exclude the dropdown
depending on whether you have any containers eqipped or in inventory

Revision: 10320
Don't add folio links to need-a-transponder pages.

Revision: 10321
When extending the duration of an elemental form, do not use soft green thing
to uneffect the same elemental form. Only uneffect a different elemental form.

Revision: 10322
Apply (a modified version of) Aankhen's patch to extend the hatter command.
hatter <hat> acquires the Tea Party buff associated with that hat, using a DRINK ME! potion if appropriate.

Revision: 10323
add experimental Hatter daily deed.

Revision: 10324
When we log in, we can get redirected to fight.php or choice.php. When that
happens, we abort refreshing the character until after the fight or choice is
resolved in the Relay Browser. However, after the aborted character refresh,
KoLmafia proceeds to build the various frames that the user wants, either as
frames or as stabdalone frames. Some of those frames need to make requests
to construct controls - such as the Skill Casting frame, which wants to read
your account contacts in order to make the dropdown of victims - which will,
themselves, get redirected if they are attempted while in a fight or a choice.
Create a mechanism for a request to get posted after initialization is complete.
Make ContactListRequest use this mechanism, so that the Skill Casting frame's
victim list will get updated after we finish logging in, even if the frame was
constructed durin a redirected login.
There is plenty more to come, along these lines...

Revision: 10325
update Hatter deed whenever we obtain/lose a hat from "acquire" "closet" or when the inventory is refreshed.

Revision: 10326
Avoid validating the Gear Change Frame until you are completely logged in,
since some of the info will not be available until the Char Sheet and the
Trendy Schedule are read, and those can't be done if you log in during a
fight, for example.
Don't bother trying to figure out your gender when you are in the afterlife.
Allow only one instance of TrendyRequest to run at once

Revision: 10327
Mark a few items as multiuse.
If you can't buff your familiar to 20 lb., enter ERROR sysyae

Revision: 10328
Make standard OS X Quit and Preferences menu items run in threads, rather than
the swing frame.

Revision: 10329
When you ascend, you automatically leave your familiar behind. Therefore, remove
dropdown of familiars on Gash page, since it is pointless to select one.
KoLCharacter.reset clears currentFamiliar, effectiveFamiliar, currentEnthroned

Revision: 10330
When you log in and are in the afterlife, we did not get the password hash from
api.h. Get it from lchat.php and do not short circuit main interface creation.
When you are in Valhalla, you cannot load the Museum Frame

Revision: 10331
Certain frames - Coinmasters, Gear Changer, Daily Deeds, at least - depend on
information available only after you have logged in and refreshed your session.
If you log in and are redirected to a fight or choice, we short circuit the
session refresh until after the fight or choice is complete. After the short-
circuited login, if you happen to have one of the above mentioned frames set to
load as a tab or independant frame, they will get constructed - still missing
essential information. Create a new mechanism:
RequestThread.executeMethodAfterInitialization( object, methodName )
which will execute a method (normal or static) after you are logged and your
session is refreshed. Make the above mentioned frames use this mechanism.
Add a "guild" link to your pants when you steal them from yourself to fulfil
the guild challenge.
Do not let the LogoutRequest force KoLmafia into an ABORT state. Not only does
that prevent a script from executing further - hopefully, a login command - but
it suppresses several of the messages in the Logout Manager, including the one
which tells you that the Logout process is complete.
Undo a change I made to AdventureRequest in 9418 whch apparently broke adv1.

Revision: 10332
Mark the fortune cookie as secondarily usable. When you "use" a fortune cookie,
do not increment fullness. When you find a fortune cookie, give two use
links: [eat] and [smash]

Revision: 10333
Unmark fortune cookie as secondarily usable, for now...

Revision: 10334
When you ascend, we reset your character state. Remember and restore your
chat state, since you can still chat in Valhalla, but we can't visit the
Altar of Literacy to see if you are allowed to chat.

Revision: 10335
Add slyz's automatic registration of unknownn adventure zones which you visit

Revision: 10336
Recovery (moods, HP/MP, between battle scripts) is not possible in Valhalla

Revision: 10337
Slight refactoring of class structure of tables on Store Manager

Revision: 10338
Don't assume that items made by multi-using are always cheaper than the ingredients.

Revision: 10339
force a refresh of daily deeds after ascending.

Revision: 10340
bump dailyDeedsVersion to push Hatter deed to everyone.
Deprecate "Tea Party" deed

Revision: 10341
tweak visibility of Hatter deed - display if we have a VIP key, have a drink me! potion, or have down the rabbit hole active.
don't display if we're trendy, since mirrors are just so gauche

Revision: 10342
By default, exclude the Smile of Mr. A from automatic extension via mana burning
(like other limited daily casting buffs)

Revision: 10343
Add two new options to the tavern quest completion: find the baron, and
explore the rest of the cellar. There are now three menu options to control
the tavern - faucet, baron, and explore - and a "baron" CLI command to find
the baron. "tavern" finds the faucet, as before.

Revision: 10344
Add tavern( string goal ) ASH function. goal can be "faucet", "baron", or
"explore" (to explore all remaining unexplored squares).

Revision: 10345
(Untested) Add ASH tavern( "fight" ) to explore cellar until the Baron's mansion
is found and then go in to fight him.

Revision: 10346
When looking at Tavern Cellar layout, distinguish between the Baron and his
empty mansion.
When visit Tavern Cellar in Relay Browser, update tavernLayout to be
consistent, just as with Hidden City
When you defeat Baron von Ratsworth, mark the tavernLayout to indicate that
his mansion is empty.

Revision: 10347
Since BasementRequest.basementlevel now automatically updates when you pass a
basement test, fix check for "have we advanced a basement level?" when
automating

Revision: 10348
Do not give Intrinsic Effects a removal link in the charpane.
Do not attempt to uneffect an Intrinsic Effect
Add "E" modifier to the Expression langaue to denote active nonintrinsic effects
Fix modifiers for Ultracolor shirt

Revision: 10349
Add "Add selected to mall" to context menu of session tally

Revision: 10350
In the Relay Browser, add a "base" tag to the header of every page.
Remove kludge to strip out extraneous "/KoLmafia" from URLs that the browser
inserted after executing a specialCommand since, with the "bae" tag, it won't
do that any more.

Revision: 10351
Some foolish shop owners tell KoL to disallow purchases from the search results,
and KoL obligingly forgets to include "buy" and "buy some" links for that store.
Correct that lapse of memory by crafting and installing functional links.

Revision: 10352
Unknown adventure registration broke the Hidden City. Fix it.
When you get Dr. Awkward's book, read it.

Revision: 10353
When you wormride, you lose your hooks, whether or not they were equipped,
whether or not you are in Fistcore

Revision: 10354
Set base relative to page location, so as not to break # URLs

Revision: 10355
Salsa de las Epocas is a fancy cooking recipe, it doesn't require advanced saucecrafting.

Revision: 10356
When a choice chain completes, the stationary button used to say "again". The
recent base tag fix made it saty at "auto", which, if pressed, dumped you back
to the main map. Fix this.

Revision: 10357
Fix "save as mood" link in charpane

Revision: 10358
when we call retrieveItem and choose to make instead of buy, make sure that the cost of components purchased to produce the final product is less than the user's autoBuyPriceLimit.

Revision: 10359
punt on awkward book

Revision: 10360
Look for tiny house before forest tears

Revision: 10361
Only stick in a "base" tag if we have our own /KoLmafia command on the page

Revision: 10362
Fax Request Frame won't even try to get a fax if you are Trendy.
pool table and fax machine requests recognize KoL's non-Trendy response if
you try to use them.
Any Clan Lounge request should use TrendyRequest.isTrendy( "Clan Item" ) to
check and abort non-trendy items if you are in a Trendy run. This commit does
not do that. Boo.

Revision: 10363
Don't try to calculate price to create if we can't make any.

Revision: 10364
Rearrange filters on UseItemEnqueuePanel to make better use of available space.

Revision: 10365
Add "turn-free" and "no summon" filters to UseItemEnqueuePanel.
Initial implementation of turn-free filter is admittedly a bit naive. TODO: inigo's support, rework ListCellRenderer to properly show free-creatable quantity when filter is active.

Revision: 10366
Using the HTML cleaner on fight pages is no longer experimental. Therefore,
the "option" to clean and log it is really just the option to log the tree.
Correct the description on the Options Frame
The various "use" CLI commands throw an exception if given no arguments. Fix.
When you find a pasta guardian item, give a "summon" use link.
When we are unable to find a standard fight tree in the fight.php HTML, call
the default result processing method, rather than depending on the fight parser
(which won't be called) to do it.

Revision: 10367
Poke creepy voodoo doll as part of breakfast. Evil eye drop rate is 20%.

Revision: 10368
After you learn a skill in your guild, refresh concoctions so that mixing
methods that depend on it are available.

Revision: 10369
Display turns used to craft on UseItemEnqueuePanel and CreateItemPanel.
The number of adventures shown is the turns needed to craft the NEXT one. If the second one costs more adventures than the first one, add a "+" to indicate that future concoctions will be more expensive.

Revision: 10370
Instead of displaying a + if the (sometimes hypothetical) second creation costs more adventures than the first, simply display a + if ANY future creation takes more adventures than the first.

Revision: 10371
Add base tages to the specialResponseText of all specialCommands.
Reorder filter checkboxes on Item Manager

Revision: 10372
The Raging Bull is a humanoid. For some reason.

Revision: 10373
Initial support for the can of Rain-Doh.

Revision: 10374
Limited skill casting counters worked for skills whose daily limit was a single
digit and failed for any others. Fix the pattern

Revision: 10375
Parse stat gains from defeating both sides in the island war

Revision: 10376
Show drops in daily deeds even if we don't own the familiar that dropped said item.

Revision: 10377
Danger! Danger!
Move the logic to call ResponseParser.externalUpdate out of RelayRequest's
processsResults method into GenericRequest's processResults method. This
will make it unnecessary for visit_url (and various other places that use
GenericRequest) to manually call externalUpdate after the request has completed.
More importantly, it means that the externalUpdate will happen BEFORE the
request finishes processing - which can include making a CharPaneRequest. Now,
the CharPaneRequest will happen after all the location-specific processing
happens.
This is a simple change with wide-ranging ramifications. Keep your eyes peeled
for breakage.

Revision: 10378
ClanLoungeRequest needs to process its results in processResults(), not run()

Revision: 10379
Fix double consumption parsing for UseItemRequests that redirect to inventory

Revision: 10380
Recognize when a monster has been successfully copied when using a Rain-doh black box in combat, and when you can't make any more copies for the day.

Revision: 10381
I broke RequestFrame by removing one too many lines. Restore the line.

Revision: 10382
No special processing is needed when learning a skill from a steel consumable

Revision: 10383
Assuming that the steel spleen item acts like every other usable spleen item, it
will not redirect. Therefore, we do need special code to detect that it gave
you a skill.

Revision: 10384
Overhaul internal handling of Inigo's.
Previously, we set all fancy creations to 100% free if we had at least 5 turns of Inigo's remaining. Now, we actually track free crafting turns. This allows us to queue/unqueue free crafting turns and display them in UseItemDequeuePanel, and generally handle scenarios where we are limited by adventures more gracefully.
When we refresh concoctions, we now find the maximum creatable using only free crafting. This allows us to properly update UseItemEnqueuePanel when filtering, among other things. This is a nontrivial number of calculations added to each refresh, but hopefully it should not noticeably impact performance.

Revision: 10385
bucket of wine is "good" booze.
In the "count item" transfer pattern, the "count" has to be at the beginning
of the input

Revision: 10386
You don't use your blackbird when you follow the black forest map

Revision: 10387
When you show a component which is a TAB, request focus on it if it is the
already selected tab

Revision: 10388
Eat and drink in UseItemRequest using ajax.
Restore explicit skill learning for liver of steel and stomach of steel

Revision: 10389
Add plural for borrowed time.
Fernswarthy's basement has no clover adventure
Add a boss warning for Baron von Ratsworth
Wait for recovery to complete before doing boss checks

Revision: 10390
Change utility function that prompts for a number to be able to distinguish
between the user typing a 0 and pressing the Cancel button.
In the Item Manager, when prompting for the number of various items to do
(whatever) to, only cancel getting quantities if the user hits the Cancel
button; a 0 quantity simply makes that item not be processed.

Revision: 10391
Provide ability for a ThreadedListener to retain focus after its execute()
method runs. Enable that for the Transfer buttons on the Item Manage Panel

Revision: 10392
Prompt when crafting something that will take adventures.
After we're told to craft something with adventures, don't nag again in that session. This can be overridden by setting alwaysPromptAboutCrafting=>true.

Revision: 10393
When you use an item which leads to a fight, we set the last adventure to null.
Tell KoLCharacter about this, so it can update modifiers appropriately.

Revision: 10394
Do not double-consume d10s: using one generates a fight, but, unlike other
items that generate monsters, it does not redirect to fight.php. It calls
fight.php via a Javascript call.
Note that KoL itself has a bug with d10s: it will list an incorrect number
of d10s in the combat item dropdown of that fight, which KoLmafia will
dutifully pick up and use to adjust (incorrectly) its idea of how many d10s
you have left in inventory.

Revision: 10395
Just as we already do with HP restores, MP restores, HP/MP restores, and
multi-usable items now use inv_use.php with ajax=1 if you are only using a
single item. (All of those will use multiuse.php if using more than one at once)
Do not believe the combat item dropdown's report of how many d10s you have ini
nventory

Revision: 10396
Normalize how betwwen battle checks are executed in the Relay Browser to agree
with how they are executed for automated advanturing: they are done BEFORE you
start an adventure, not afterwards, when the charpane indicates you've used a
turn.
Add "relayRunsBeforeBattleScript" to control whether manual adventuring will
execute your "betweenBattleScript" (which is actually a "beforeBattleScript",
either automated or manual)

Revision: 10397
Just as in automated adventuring, if recovery is not possible - you are in the
middle of a battle, say - do not do between battle actions, even if the user
clicked on what would be an adventure request.

Revision: 10398
Determine whether you can summon a Pasta Guardian this round based on whether
KoL gives you a button to do that (just as we do with Pickpocketing), rather
than remembering whether we've already summoned this battle.

Revision: 10399
set lastAdventure before doing pre-battle checks in Relay Browser

Revision: 10400
The rainDohMonster is not the same as the spookyPuttyMonster

Revision: 10401
Don't prompt about crafting taking adventures if we're just going to buy from the mall.
Allow user to suppress crafting prompts with suppressCraftingPrompt=true. This setting supersedes alwaysPromptAboutCrafting.

Revision: 10402
Remove support for the Simulator of Loathing, since it has not been touched in
at least five years

Revision: 10403
Various fixes to possible issues found using FindBugs (http://findbugs.sourceforge.net). None of these changes effect existing functionality, they are optimizations and may prevent possible exceptions in edge cases.
AdventureResult.java, chat/ChatParser.java, DwarfFactoryRequest.java:
Replace string concatenation in loops with a StringBuffer as the complier cannot optimize adding to a string when the concatenation occurs in a loop. While the gains in these particular loops may be tiny this is a good practice to follow.
persistence/HolidayDatabase.java:
Remove gameHoliday == null check in loop conditional, this check is unnecessary as the code returns both before the loop if gameHoliday is null and inside the loop if gameHoliday is not null.
request/FightRequest.java:
In the slim chance src returns null here, accessing image would cause a NullReferenceException. The only way I could foresee this occurring is if there were lag problems and the page doesn't load fully.
request/UneffectRequest.java
If effect is null, a NullReferenceException would occur when calling Kolmafia.updateDisplay. This was most likely supposed to use this.Effect, which should return the same effect name. This case is seems possible but extremely rare as calling 'uneffect' typically seems to return much earlier in the code path.
swingui/CakeArenaFrame.java:
Prevent a possible NullReferenceException in the event skill would be passed into the OpponentListener constructor when it is null.
textui/command/ShopCommand.java:
Move the call to getItemId() after the is null check so a NullReferenceException doesn't occur.
textui/Parser.java:
In this case result is guaranteed to be null, so pass in null instead of result to make the passed in value more apparent.

Revision: 10404
Collapse alwaysPromptAboutCrafting and suppressCraftingPrompt into one preference.
promptAboutCrafting=1 (default): prompt when we are going to spend an adventure crafting, until we're told it's okay. Identical behavior to milk and ode prompts.
promptAboutCrafting=2: always prompt.
promptAboutCrafting=0: never prompt.

Revision: 10405
Add a new item drop type 'f' (fixed drop rate). This is used for items where the drop chance can not be modified. Since this is only used for slime vials in The Convention Hall Lobby, at the moment this type also implies conditional and no pickpocket.
Also updated the drop rate for the Vendor and Booth Slime from 0 to 66.

Revision: 10406
Add fixed drop rates for hobopolis non-outfit pieces
Reorder hobopolis boss drops to be in a consistent order (song, consumable, outfit, other equipment)
Add Mother Slime drops

Revision: 10407
When we gain/lose turns of Inigo's, update adventure ranges, since we can properly calculate those now.

Revision: 10408
Include lost's "decorate the cyrpt with the Evilometer" patch

Revision: 10409
Look at correct preference to check Niche evilness

Revision: 10410
Refactor UseItemRequest: pull out things that go to inv_booze.php or inv_eat.php
into DrinkItemRequest and EatItemRequest, respectively.
Now that everything to do with fullness is localized, we could increment it onlywhen we detect that food has been eaten successfully. I didn't do that.

Revision: 10411
When we are about to use an item in the Relay Browser that could cause an
adventure to take place - generate a monster, or what have you - run between
battle checks, just as we did if you used that item in the Item Manager.
When we are about to use such an item - either in the Relay Browser or via
a UseItemRequest (Item Manager, :use" command or function), set the
lastAdventure setting (returned by my_location() ) to "None", to help
betweenBattleScripts.

Revision: 10412
Add $skill proxy records: .dailylimit and .timescast

Revision: 10413
Include current hat equipped on hatrack in "hatter" command if hatrack is the current familiar.

Revision: 10414
do the same for the Hatter daily deed.

Revision: 10415
Setting lastAdventure before adventuring in the Relay Browser broke updating
the GUI's Adventure location to correspond with the Relay Browser's location.
Fix it.

Revision: 10416
Track daily bricko eye summons in _brickoEyeSummons
Don't take an NPE when we register the casting of an unknown skill

Revision: 10417
Add Rinn to authors.txt

Revision: 10418
Update "Unlock Guild" script to do new guild challenge

Revision: 10419
Update 'trigger' command to match help text that says that type is optional.
Add 'list' option to 'mood' and 'trigger' command to list content of mood. Also list the content of the mood when 'autofill' is used. Otherwise, only print the trigger that was updated.

Revision: 10420
Stricter HTML in the Area Combat Data

Revision: 10421
Allow script input in headless mode.
Use an auto-filter text field whenever prompting for a selection list, rather than just the straight list.

Revision: 10422
Fix compile error.

Revision: 10423
Ensure that updating safety string is synchronized.

Revision: 10424
Don't force a charpane refresh after changing equipment unless KoL itself says
one is necessary

Revision: 10425
Check for concoction (not creator) != null before dereferencing concoction

Revision: 10426
Certain choice adventures (such as the one that starts the chain to fight
Felonia) have special decision handling when automated; you don't REALLY want
to fight Felonia until you have the inexplicably glowing rock and a spooky
glove equipped. We offer you the choice of "show in browser" (like just about
every other choice), but we don't actually honor that option. Fix that: if you
select "show in browser" for a choice that we normally have special decision
handling on, show it in the browser and let the user make the decisions.

Revision: 10427
When you turn in the White Citadel satchel to Paco, mark the White Citadel as
available.

Revision: 10428
Fix special HP restoration for Hidden Temple: only use pungent unguent if all
previous restoration methods failed.

Revision: 10429
Mark the White Citadel as available when you have the Summer Holiday non-combat
with a hang glider in inventory. Detect all three possible messages in the
Quest Log that indicate you've gotten this far.

Revision: 10430
Save error messages for a few catastrophic buffing failures that otherwise would
go unnoticed.

Revision: 10431
Add preliminary architecture for improving quest tracking.
QuestDatabase.java is a repository of utility functions for dealing with quests.

Revision: 10432
Retain old input dialog (combo box vs. AutoFilterTextField) if there are only
a few elements in the list of choices.

Revision: 10433
Disallow using (wasting) potion of the field gar if you are already Gar-ish.
Otherwise, limit usage to a single potion.

Revision: 10434
Fix black pudding fights

Revision: 10435
Organize imports

Revision: 10436
Add copyright notice to any files that happen to be missing it.
(Found through: grep -L -R Copyright src/net/sourceforge/kolmafia)

Revision: 10437
If between battle actions fail when requeting an adventure in the Relay Browser,
give a warning and punt on the adventure

Revision: 10438
More quest log refactoring: pull out all logic for detecting quest progress from QuestLogRequest and use QuestDatabase.findQuestProgress instead.

Revision: 10439
Fix NPE executing a ThreadedListener not via an event, as in Pulverize Panel
Fix spelling of irresistibility
Allow up to 12 items in a combo box in InputUtilitie; this handles MCD

Revision: 10440
Refactoring:
We have code to modify KOL's HTML in order to add decorations: use links,
stationary buttons, whatever.
We also have code to modify KoL's HTML in order to remove or correct things
that Java's HTML renderer can't handle and which thus fon't work in a
Request Frame (like the mini-browser).
Both sets of code are in RequestEditorKit. Since the second set is useful ONLY
in the RequestFrame, move it to that package.

Revision: 10441
Rationalize and organize HTML decoration in RequestEditorKit

Revision: 10442
When you use a tomb ratchet, offer a "use another tomb ratchet" link, if you
have any more in inventory, and show the current pyramid position, just as we
do when you turn the wooden wheel.

Revision: 10443
When you find the Black Market map, give it a use link if you either have the
parts needed to assemble the familiar, or if you already have the familiar

Revision: 10444
If there is area combat data, then use that to decide if there are combats, which also impacts whether or not recovery scripts and moods are run during auto-adventuring.
This should fix the issue where areas like the Hidden City (Automatic), which do not use a standard adventure request but do have combat data, are treated as non-combat zones.

Revision: 10445
Use same criterion for which between battle checks to run in the Relay Browser
as we do for automated adventures: health only, if a non-combat location,
otherwise script, mood, health, mans

Revision: 10446
Do not give scary HP/MP restorables a "use" link in Beecore
When between battle actions fail in the Relay Browser, give an image you can
click on to proceed anyway.

Revision: 10447
Tie in the functions used to set NPC store availability to the new QuestDatabase
Add quest status preferences to defaults.txt
Add a whole lot of quest log text to QuestDatabase.java

Revision: 10448
For spinner fields (like the one that shows up in the adventuring interface), use KoLmafia's internal parsing rather than Java's default parsing.

Revision: 10449
Split usage of spleen items into SpleenItemRequest

Revision: 10450
Manipulate fullness after we detect that we've successfully eaten food, not
when we submit the request

Revision: 10451
When reading a file from a URL into a local file, don't retain a 0-length file.
Get the correct path to the avatar from charsheet.php

Revision: 10452
Fix multi-using spleen items

Revision: 10453
drunki-bears grant inebriety, but are limited only by fullness

Revision: 10454
Refactor: move B check, level check, pathed ascension check back into
UseItemRequest rather than duplicating code in Drink, Eat, and Spleen classes

Revision: 10455
Since the avatar's path as fetched from the char sheet now includes the
hostname, don't prepend it when downloading the image

Revision: 10456
Download avatar image when we set the avatar from the charsheet, not every time
we want to look at it.
Split various Buff Up and Flush button listeners on the Item Manager into their
own classes.

Revision: 10457
Reset quest statuses on ascension.

Revision: 10458
Don't bother including "which" field on inv_use requests. Include "ajax" even
for multiuse requests. Fix recognizing booze consumption in Relay Browser.

Revision: 10459
Don't create a race condition (possibly leading to a NPE) when initializing Hatter deed.

Revision: 10460
Refactore familiar binging buttons in Item Manager. Check for binge requests
before limiting maximum usage based on fullness or inebriety.

Revision: 10461
Instead of the Revision 10459 kludge, just make sure that removeAllItems does not fire the attached ActionListener.

Revision: 10462
Add council text parsing to quest tracking.
Add a few event hooks for lower-level quests.

Revision: 10463
Add a "destend" button to the Food panel of the Item Manager to use a
distention pill. When you have a distention pill active, increase available
fullness limit by 1.

Revision: 10464
Do not log simple visits to the Tavern Cellar as adventures.
Log visits to Bart Ender.
The Tavern Quest script uses KoLAdventures, rather than raw AdventureRequests,
so that recovery happens as needed before battles.

Revision: 10465
Add remaining council text to QuestDatabase.java.
When parsing council text, only set status if it is further along in the quest (i.e. started > unstarted, but < step1).

Revision: 10466
Fix item drop for enthroned crow and blackbird
Drum machine uses no turns if equipped or in inventory

Revision: 10467
Put relayRequest and serverReplyBuffer into the ASH Interpreter class, so that
multiple relay scripts, each with their own Interpreter, can run without
interfering with each other. Globals variables have their place, but this was
not one of them...

Revision: 10468
Add "goldenMrAccessories" property to track the number of Golden Mr. Accessories
you own. At login, we count the ones you have in inventory, closet, storage, and
equipped. If you visit your display, we include those you have there. If you
buy any from Mr. Store, we include those.
Add "_smilesOfMrA" property to track - and control - casting The Smile of Mr A
based on how many Golden Mr. Accessories you have available.

Revision: 10469
Sigh. Five casts per Golden Mr. Accessory.

Revision: 10470
Move quest strings from QuestDatabase.java into data files

Revision: 10471
Don't adjust fullness when you are redirected to a fight with a Black Pudding
since fullness is no longer modified at the time the request is submitted.
If running a counterScript uses one or more adventures, run between battle
checks again after it returns to make sure you are set up for the adventure
which was interrupted by the script.

Revision: 10472
Add triggers for completing quests where we do something other than talking to the council: bat, cyrpt. Reading your father's diary starts the various sub-parts of the macguffin quest.

Revision: 10473
Fix two lines in questslog.txt where the comma separator wasn't replaced by a tab

Revision: 10474
Use an HTML entity in a quest text string.
Add a missing newline to separate two quests

Revision: 10475
Grey out "feed hobo" and "feed ghost" buttons on the Item Manager unless you
have the respective familiars in your Terrarium. Note that you still have to
have the familiars actually equipped in order to use the buttons. Perhaps we
could swap them in, binge them, and swap them back out, if they were not
currently equipped. This commit does not do that.

Revision: 10476
Grey out correct button in Item Manager if creation queue is disabled

Revision: 10477
Simplify visit_url(). Item redirections do not store lastLocationName, since
that can make a subsequent non-adventure log as if it is an item usage

Revision: 10478
When submitting a KoLmafia command from the Relay Browser, wait for recovery to
complete

Revision: 10479
Don't abort after checking counters if !KoLmafiaPermitsContinue. abort only if
KoLmafia.refusesContinue.

Revision: 10480
Rain-doh combat items are reusable.

Revision: 10481
When you identify dusty bottles, display them as "dusty bottle of great Port"
pr "dusty bottle of spooky Pinot Noir", for example.
In the Wine Cellar, the helpers will refer to "dusty Port" or "spooky Pinot
Noir".

Revision: 10482
Be a little more robust with Request Threads

Revision: 10483
Make the "semirare window begin" counter a hard stop, rather than informational.
This will give you the chance to eat a fortune cookie, if you forgot to do so.
If you choose to not eat a fortune cookie, you can simply go adventure somewhere
likely and stumble on a semirare. If you neither eat a fortune cookie nor find
a semirare by chance, KoLmafia will not set the semirare window for you again
and you will no longer be nagged.

Revision: 10484
In order to create Grimacite items, you need a Grimacite hammer equipped

Revision: 10485
When we are about to jump into the astral gash, we do pre-ascension actions,
including calling a user-supplied preAscensionScript. If this script explicitly
aborts, don't jump. Let the user fix the problem and try again.

Revision: 10486
Eliminate all explicit setting of display state to ENABLE_STATE except via the
enableDisplay method.
Familiar Trainer disables three more buttons while it is training.
When EquipmentManager wants to equip the previous item but there was none,
that is not worthy of stopping automation; do not enter PENDING state.
When CampgroundRequest cannot parse housing, that is an ERROR

Revision: 10487
Beef up the "greygui" command: you can give it an optional arg - greygui force
This will not only write stack traces to the debug log for every open request
sequence, but it will close them all. This should cause the GUI to be reenabled.
Use this as a last resort.

Revision: 10488
Add tracking for a number of intermediate quest steps.

Revision: 10489
Interrupt the threads on flush to prevent them from causing weird conditions later when they complete.

Revision: 10490
Drawn onward and Mr. Alarm affect (effect? whatever) the palindome quest, not the worship quest.

Revision: 10491
Since the function called by "greygui force" now clears all sequences and
enables the display, the graygui command need not open its own sequence.

Revision: 10492
Mr. Alarm really has nothing to do with the worship quest. I promise.

Revision: 10493
Don't store an empty composite into a map when you fetch a non-present element.

Revision: 10494
Turns out that interrupt() doesn't do what I'd hope it would do, so don't bother calling out.
However, there is a better way to print out what's actually going on inside of KoLmafia at the time the 'graygui' command is executed by printing the output of jstack (which is only available in Java 1.5 or higher). Let's go ahead and do that for now, as it will give us better insight into what's going wrong.

Revision: 10495
Add tracking for the 37 (estimated) different steps of pyramid quest.

Revision: 10496
Correctly label wines in cellar corners
This line, and those below, will be ignored--
M src/net/sourceforge/kolmafia/webui/CellarDecorator.java

Revision: 10497
If a JDK cannot be detected, print an error message. Update the help message for 'graygui' to indicate that a JDK is needed.
In the event that you run KoLmafia with a JRE, still attempt to detect a JDK in the Java installation path and use that for the jps/jstack binaries in 'graygui'.

Revision: 10498
Allow jstack and graygui to bypass the command queue.
Turn the key listener for up/down/enter in the gCLI into a threaded listener so that jstack/graygui don't lock up the UI when they bypass the command queue.

Revision: 10499
Initial support for Avatar of Boris challenge path
When you drop a challenge path, set path to none
If you drop Beecore, look through your telescope
If you drop Axecore, look at your terrarium and bookshelf

Revision: 10500
Set sorceress quest progress when we visit lair.php (or lair[1-6].php).

Revision: 10501
Axecore (safe) inebriety limit is 4, not 5

Revision: 10502
Legendary Appetitie increases stomach capacity by 5
Laugh it Off is a noncambat skill
Song of Glorious Lunch acts like Milk
On Item Manager, "use milk" button becomes "glorious lunch" if you know it.

Revision: 10503
Fix "exec" button on the gCLI

Revision: 10504
Artist, Azazel, Pirate quest tracking.

Revision: 10505
Clancy's lute. Demand Sandwich can only be cast 3 times per day. (Actually, you
can cast it more times, and it consumes MP, but it only yields 3 sandwiches per
day.)

Revision: 10506
A couple of Maximizer tweaks:
* Don't allow chefstaves to displace ordinary 1-handed weapons in the
shortlist if you're fundamentally incapable of wielding them. There is still
a possible problem if you're a Sauceror without Rigatoni, but handling of the
special sauce glove seems to be broken anyway, so I'll deal with that later.
* Consider containers, now that we treat them as a normal slot. This will
add no significant time for the majority of users, who are unlikely to have
any except perhaps a useless bugged baio. There might be a 2X or worse
slowdown for people who actually have multiple containers; cry me a river.

Revision: 10507
Azazel quest starts when you click on pandamonium.php.

Revision: 10508
Add appropriate molybdenum tools as goals to the appropriate junkyard zones

Revision: 10509
Flatten loops to make sorceress lair guardian fight code order easier to read.

Revision: 10510
When facing the tower familiars, just use modifier maximizer straight if we're below 20 pounds. It doesn't matter if we overshoot 20 pounds by a lot.

Revision: 10511
Bart Ender beers are not available until you start the tavern quest.

Revision: 10512
Use 'quit' instead of 'quitThreaded'.

Revision: 10513
Add 'reset' as synonym for 'cls' command.

Revision: 10514
Add 'which' as a synonym for 'help'.

Revision: 10515
Fix null pointer exception when you're connecting behind a hotel proxy.

Revision: 10516
Turn off clover protection when calling retrieveItem.

Revision: 10517
For preferences window, instead of using tabs, use a CardLayoutSelectorPanel.

Revision: 10518
Put logout logic in a shutdown hook to allow it to run in a separate thread from the event dispatch thread.

Revision: 10519
Add corned-beef Reuben

Revision: 10520
Remove status label from options panels.

Revision: 10521
For now, add a scroll pane for the individual options sections while I sort out how to rearrange preferences into useful sections.

Revision: 10522
Fix potential strangeness that may occur if you attempt to access a quit options while other quit options are running.

Revision: 10523
Eliminate static variables from RuntimeLibrary and LibraryFunction

Revision: 10524
Make the black market map by itself the default condition for the Black Forest
Remove spooky sapling + spooky temple map (no fertilizer) as a condition for
the Spooky Forest

Revision: 10525
CharPaneRequest doesn't need to be a RelayRequest in order to be able to have
relay overrides.

Revision: 10526
There is no button on the Account Options page to drop the Avatar of Boris path.
Therefore, we can no longer reliably deduce our path from that page. Since we
reliably get the path from api.php when we log in, don't bother trying to set
your path when you simply visit the Account page.

Revision: 10527
Don't try to set preferences when you are refreshing the Custom Combat Panel
FROM preferences.
Before you open the Relay Browser, force continue.

Revision: 10528
Always dispose windows on logout so that their positions are remembered even if you exit rather than logout.
When shutting down, do not attempt to update panels with messages to avoid weird states in event dispatch thread on shutdown.

Revision: 10529
Get "familiar below effect" setting from Interface Options.
Refactor CharPaneDecorator. Simplify adding restoration links

Revision: 10530
More refactoring of CharPane decorator to make effects easier to handle

Revision: 10531
Maximizer tweaks:
* +/-melee now actually requires a weapon of the indicated type, rather than
merely disallowing a weapon of the other type (an inadvertent change which
crept in with the sudden popularity of unarmed combat). If you really want
the previous behavior, give a weight of +/-0.5.
* 15% of your weapon's power (including dual-wielded and Hand weapons) is now
added to your Weapon Damage modifier, approximating the extra damage you get
based on the power. This gives the Maximizer a reason to prefer
higher-powered weapons.
* All of the oddities related to wielding a chefstaff as a Sauceror without
Rigatoni should now be fixed, which mainly involved realizing that the
special sauce glove is an accessory, not an offhand. In particular, the
glove will be equipped first if it's needed.
* Maximizer keywords can now be enclosed in double quotes, allowing them to
contain numbers and commas. Note that the weight isn't quoted. For example:
+"equip 17-alarm saucepan"

Revision: 10532
As an Avatar of Boris, you need a reassembled blackbird in your inventory, but
you don't need to (can't) grow it or equip it.

Revision: 10533
Fix incorrect suggestion of dual-wielding without DFSS from Revision 10531.

Revision: 10534
Don't get fooled by null items in a selection list

Revision: 10535
Only prevent a request from running after checking counters if the counter
script explicitly said to stop or if between battle actions failed after
a counterscript consumed turns. Do not prevent a request if KoLmafia was
previously in an abort state.

Revision: 10536
Various fixes to charpane decorator in compact mode

Revision: 10537
Robustify string matching when parsing quest log text and council text.
Robustify is a word.

Revision: 10538
Fix where table gets placed in charpane if you have counters but no effects:
above intriniscs, if any, above familiar if you have "familiar below effects",
other wise at end. Tested with compact and normal charpane, Axecore and not.
When we have a Horrible relay failure, actual print the exception that triggered
it

Revision: 10539
In Axecore, no weapon needed for star key or energy bolt. No familiars needed
for Sorceress's pets. When free the king, increment borisPoints property
appropriately.

Revision: 10540
Don't even try to unlock the guild in Axecore.

Revision: 10541
When a relay script calls another ASH script via cli_execute, arrange for the
resulting ASH script to have access to the same relay request and output buffer

Revision: 10542
No wand warning in Axecore. Thwaitgold stag beetle statuette

Revision: 10543
Do not call dispose() when the session is ending, since that results in an event queue lock.

Revision: 10544
If you use the 'quit' option, then when all the windows disappear, another logout request will be attempted. Prevent this second logout request from doing anything.

Revision: 10545
Only check for the need to logout if the session is not ending.

Revision: 10546
Put Interpreter into the CLI AbstractCommand handler, rather than the
KoLmafiaCLI object

Revision: 10547
Fix autosell price for glass of warm water.
Fix level requirement for shot of blackberry schnapps
Add status effects for Boris songs (missing Song of Combat)

Revision: 10548
Defaults for Minstrel choices.
When you gain a level, in Axecore, offer a link to visit Boris. Otherwise, if
you are level 15 or lower, offer a link to visit your guild. In all cases, if
you are lvel 13 or lower, offer a link to visit the council.

Revision: 10549
In Axecore, give a link to "Bask in the Glory of Boris" on the council page

Revision: 10550
Default mood manager gain_effect command to 'uneffect'. That way, by default, it will dynamically change based on the available skills and items.
If auto-remove malignant effects is active, allow KoLmafia to use skills and antidotes (or even anything defined in a mood) to remove status effects acquired while passing through the gates of the sorceress lair.

Revision: 10551
When exiting, just hide the windows instead of disposing them as that will still have KoLmafia remember window positions without doing any UI cleanup that could cause deadlocks.

Revision: 10552
Semirare counter begin window is only a hard stop in hardcore.

Revision: 10553
Correction! Semirare counter begin window is only a hard stop in hardcore and if you haven't already freed the king.

Revision: 10554
Correction again! Semirare counter begin window is only a hard stop if you haven't already freed the king.

Revision: 10555
You won't have already freed the king immediately after ascending, so always make the first counter a hard stop.
Afterwards, if you are able to buy semirares from the mall, make the begin window counter a soft stop.

Revision: 10556
Reduce code duplication in the code for the different options windows.
Reorder a few options in preferences window to see if regrouping them helps make them easier to find.

Revision: 10557
It seems there's also some sort of strange deadlock when hiding windows in the middle of a shutdown hook.
Therefore, hide windows first, then create the shutdown hook.

Revision: 10558
Several item names with extra spaces in them have been fixed. Yea!

Revision: 10559
Don't bother doing anything in a shutdown hook. Instead, spawn a new thread before the call to exit, and wait for that thread to complete before calling exit.

Revision: 10560
Since we aren't running in a shutdown hook, allow the login window to load so that messages can be printed during shutdown. However, if accessing via option-Q on OSX, we can't update the display so notify the user of this.

Revision: 10561
Prevent user interface loading commands when KoLmafia is shutting down.

Revision: 10562
Re-add window re-display logic that shouldn't have been removed in Revision 10560.

Revision: 10563
Add a null pointer check in case the response text is not available.

Revision: 10564
When decorating pages in the Relay Browser, do "changes which affect a single
page" before "changes which affect lots of pages", to make sure that the
stationary buttons can pick the apparopriate "again" link, rather than one
inserted by a level gain, say.

Revision: 10565
When you select a new class at the End of the Boris Road, reload various
pages to regain all the powers of your new class

Revision: 10566
Don't offer an "equip" link for weapons or offhands found in Fistcore or Axecore

Revision: 10567
Dr. Galaktik offers a standard "You spent" message

Revision: 10568
Consumption data for Demanded sandwiches.

Revision: 10569
Add descid for Song of Battle

Revision: 10570
In Axecore, mark all weapons/offhands other than Trusty as unequippable

Revision: 10571
Gourmand, Song of the Glorious Lunch, and milk of magnesium all stack.

Revision: 10572
Don't try to get a hatter buff if you don't have access to Down The Rabbit Hole.

Revision: 10573
Shadow Avatar of Boris is Your Shadow

Revision: 10574
Detect new login redirect from KoL and execute secure login, as before.

Revision: 10575
Smashing a fortune cookie doesn't increment fullness. Again.

Revision: 10576
Fix typo in fullness.txt. Improve spacing of multiple navigation links upon
level gain.

Revision: 10577
In Axecore, chioce option 3 automatically opens the goatlet

Revision: 10578
Disallow access to store management URLs from ASH scripts.

Revision: 10579
Various things to make the Preferences frame narrower:
- vertical scrollbars on panels only as needed
- narrower panels
- less mandatory space between frame lists

Revision: 10580
When Clancy gets your attention and says he wants to go somewhere, add a
navigation link to the result page to that location. Untested.

Revision: 10581
Fix type in setting: jackassePlumber -> jackassPlumber

Revision: 10582
Update mallprices.txt

Revision: 10583
Bump version to 15.1
 
Top