Version 13.6

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: 7541
Improved support for the He-Boulder:
* The combat messages indicating the current eye color are hilighted in that
color, for better visibility.
* When a major ray is used, an informational counter is added with a duration
of 101 or 150 turns, depending on whether the quadroculars are equipped.
* These counters are cleared on your first login of the day.
NOT tested.
Fixed recognition of the black sword combat message that has a "#" in front
of the damage amount.

Revision: 7542
Fix recognition of the He-Boulder's "red eye" combat message so that it
doesn't trigger on a dropped glowing red eye.

Revision: 7543
Revamp how adventures get logged in the gCLI and session log. Used to be, they
got logged just before a URL was submitted: we'd figure out where you were
trying to go, do some area specific preparation (like resetting autoattack),
and go. Later, when the response came back, we'd look at the response and
figure out what the Encounter was.
The problem with that is that KoL has many ways of either denying an adventure
outright or sending you to a different area entirely. So, in the new scheme, we
examine the URL, as before, and decide if it looks like it will be an adventure.
We do some area specific preparation and save what we deduced and go. Later,
when the response comes back, we look at the saved data, the response text, and
the (possibly redirected) URL to decide what really happened. If we really
adventured, we log the location in the gCLI and session log, as before, and go
on to figure out the encounter.
This fixes a lot of things:
- If you were outright denied an adventure because you are out of turns, can't
get to an area, are too drunk to go in the Daily Dungeon or Pyramid Lower
Chambers, etc., nothing is logged.
- If you were redirected from an adventure area because you changed your outfit
and (like mining, or the pirate cove, or the Dwarf Factory COmplex), nothing is
logged.
- If you are redirected to an entirely different area and finish the encounter
without input (trying to adventure in Hippy Camp, but have the outfit, so are
redirected to Hippy Camp in Disguise, for example. Or being redirected to the
Drunken Stupor.), we figure out where you ended up by looking at the Adventure
Again link on the result page.
- If you try to adventure with 0 HP, we no longer get fooled by the response
and list "your campsite" as the encounter because it happened to be bold.
Unfortunately, if KoL redirects you into a choice adventure or a fight (and you
didn't autoattack and win immediately), there is nothing we can do to figure
out where you really ended up. Therefore, this will not notably improve logging
of Teleportitis adventuring. Perhaps I can get some help from KoL itself...

Revision: 7544
Added CLI command "spade prices <URL>" to submit your mallprices.txt file
to a server for redistribution. The file is sent via HTTP POST as if it were
an HTML file upload field named "upload".

Revision: 7545
Changed variable name to make lint happy.

Revision: 7546
Recognize monsters encountered via item usage again.

Revision: 7547
Added new Halloween items & effects.
Updated drop rates in the Cemetary (Post-Cyrpt).

Revision: 7548
Added new CCS action: "abort after", which will cleanly stop the current
automated adventuring request after the current combat ends. This needs to
be at the very top of the relevant CCS section - if combat ends before this
action is reached, the abort won't take place.
Added new ASH function: monster last_monster(), which returns the most
recently encountered monster ($monster[none] if no combats have occurred yet
in this session). This would be useful to tell if adventure() returned due
to a monster with "abort after" in its CCS section, or some other reason.

Revision: 7549
Added new CCS "section <name>" action, which continues execution from the
start of the indicated section. This should be the very last action in the
section in which it appears.

Revision: 7550
Accepted patch to add filtering by autosell value to Item Manager lists,
courtesy of Nevs. The syntax is, for example: "$ > 100" to only show items
with an autosell over 100 meat. All relational operators are allowed, and
all currency symbols are allowed (in case the dollar sign isn't easily
typable on your keyboard layout).
The Basement helper now uses cached historical prices when showing item
values; Mall searches will be performed only for prices that are a week out
of date.

Revision: 7551
Ensure that mood buffs are cast on the player, not the most recent target of
that buff.
Matching of the section name in the new CCS "section" command is now
case-insensitive, as intended.
Added two new ASH functions:
void batch_open()
boolean batch_close()
After a batch_open(), certain functions that generate a server hit on each
call are queued up, rather than executed immediately. batch_close() will
then execute all of them at once, hopefully with fewer server hits. The
functions that benefit from being batched include autosell(), mallsell(), and
the various put_X(), take_X() functions that move items to or from the
closet, storage, display, or stash. Most of the KoL interfaces for these are
capable of transferring up to 11 items at once, but that couldn't previously
be expressed in ASH. More details:
* Caution is required when using more than one batchable function in a single
batch, since they won't be executed in the same order you wrote them. What
happens in this case is that all instances of the first encountered function
are executed, then all instances of the second encountered function, and so
on. This should produce the expected results in cases such as a loop that
pulls an item from storage, and then puts it in your closet. Inside of a
batch, all the pulls get processed at once, and then all the closet puts.
* put_X() and take_X() with the same source (the closet, for example) cannot
be used in the same batch.
* Batches are accumulated on a per-script-invocation basis. Having an open
batch does not affect execution of any other script that's running at the
same time. Any commands batched by a script that was aborted are discarded -
they won't mysteriously be executed by the next script that calls
batch_close()!
* Any failure of batched commands can be captured and tested via the return
value of batch_close(), just as you'd normally check the return value of the
individual functions being batched. However, there's no way to tell just how
much progress had been made before the failure, so it's unlikely that a
script could meaningfully continue after that point.

Revision: 7552
Some Naughty Sorceress Lair fixes:
* Finger cymbals are not a suitable percussion instrument, and the world's
smallest violin is not a suitable stringed instrument, for passing the Stone
Mariachis.
* Retrieve the star hat and star key before considering which star weapon to
use - in case your available number of stars & lines constrains which of the
three you can make.

Revision: 7553
Add outfit checkpointing to the CLI "create" command, in case it needs to buy
an ingredient from a NPC store that requires a specific outfit.

Revision: 7554
aInitial suport for new Nemesis quest

Revision: 7555
Fix item description id for the torn paper strip.
Add "nemesis strips" command which looks at all the paper strips you have and
reports on the left edge, text, and right edge. Do what you will with that
information...

Revision: 7556
Add rockfish to monsters.txt.
Add "nemesis password" command which looks at all the paper strips and figures
out the password needed to pass door #4.
When you visit door #4 in the relay browser, pre-fill the text field with the
password, if you've collected all the strips and it can be determined

Revision: 7557
Fix recipe for 3vi1 pRevision 0n m4nic0tti

Revision: 7558
Fix IDs of evil noodles, nauseating reagent - they were swapped.
There are actually six class-specific versions of the "A Little Bit Evil"
effect - what a mess! For now, disambiguate them by appending the player's
class to the name, matching how they are listed on the Wiki. The descID for
the Seal Clubber version hasn't been posted yet, so that one won't work yet.

Revision: 7559
Add Turtle Tamer Nemesis monsters & drops

Revision: 7560
Added 4-d camera and shaking 4-d camera, and added usage tracking and Daily
Deed for them.
The "putty" CLI command, and the corresponding Special Action, will use a
camera if you don't have a Spooky Putty sheet, or have reached its daily
usage limit.
Added Voluminous Radio Pants, and the missing descID for A Little Bit Evil
(Seal Clubber).

Revision: 7561
Refactor Wumpus Manager: rather than simply remembering the three exits of the
current room, keep track of all exits of all visited rooms. This gives us the
total map of the cave, as explored so far, which will allow better deductions.
The actual deduction logic is unchanged, however, so no observable changes are
expected.
If we cannot recognize a room name or find an exit from a room in the Wumpus
cave, display a error message, rather than silently ignoring the problem.

Revision: 7562
Add support in WumpusManager for Wumpinator
- For each room, track how many other rooms report each potential hazard
- Add "wumpus status" command which displays that data
- Calculate Wumpinator code
- Add "wumpus code" command which displays the code
- Add menu option to call Wumpinator with current code
- Whenever you are given a choice in the Wumpus Cave, add a link to "View in
Wumpinator", which invokes the Wumpinator with the current code.
KoLmafia's deductions remain the same as ever - and are easily seen to be
inferior to the Wumpinator. I still am unable to reproduce an INCORRECT
deduction, but the WUmpinator deduces things we can't deduce, yet.
I also have the code to actually link to the Wumpinator's generated graphic,
giventhe code, but I am missing one additional input parameter to make it
actually work. Soon, I hope...

Revision: 7563
Add desc ID for seal eyeball

Revision: 7564
Improve Wumpus cave logic: whenever we hear the Wumpus from two different rooms
mark that it is in the room.
Use the Wumpinator flags to determine whether we shuld make deductions about a
room.

Revision: 7565
When invoking WUmpinator, pass in current room. Don't give link to Wumpinator
unless at a room which has multiple exits. I.e., one in which viewing the
current map would be useful.

Revision: 7566
Make deductions about the chamber we just left when we discover what's in the
next chamber

Revision: 7567
Replace "View in Wumpinator" link with the actual in-line graphic produced by
the Wumpinator. Thanks to Gemelli for permission!
You can still go to the standalone Wumpinator via the menu option

Revision: 7568
If we fail to generate a lyout for the Wumpinator graphic generator, try again
with all other visited rooms. If we fail with all of them, throw up our hands
and give a link to the Wumpinator itself.
When we figure out something about a room, give all of its neighbors a chance
to deduce things based on the new information.

Revision: 7569
Avoid infinite recursion when trying to make a charrrm bracelet item, when
you have no Jolly Roger charrrm bracelets to disassemble.

Revision: 7570
Disallow cached Mall searches (such as via mall_price()) for nontradeable
items. Such a search might actually return results (for example, 'digital
key' finds the key lime & pie), which can confuse later buy vs. create
decisions. Any such prices that are already in the system will be filtered
out when loading historical prices.

Revision: 7571
Some random additions and updates to data files.

Revision: 7572
Added ASH function:
float[monster] appearance_rates(location)
The returned map will contain the expected apperance rate for the known
monsters in the specified location, normally in the range 0..100. The rate
will be zero for bosses and other one-time-only monsters, negative for
ultra-rare monsters.
The map will also contain an entry for $monster[none], giving the expected
rate of noncombat encounters. This will be negative for locations where this
isn't known, in which case the monster encounter rates will be calculated as
if though the location was 100% combats.
The results take combat rate modifiers into account. Queue effects,
Olfaction, and monster banishers are not considered now, but may be in the
future. Special mechanics (such as monsters that are unlocked by some
action) aren't considered, and may never be due to difficulty in expressing
their conditions in the data files.

Revision: 7573
A couple of Modifier Maximizer fixes:
* The CLI command will now work properly even if the Maximizer GUI had never
been created. Previously, it would ignore anything that wasn't an exact
match for one of the samples in the popup, and maximize mainstat instead.
* Excluding the off-hand slot from consideration now properly implies that
only 1-handed weapons should be considered.

Revision: 7574
Initial support for the Crys-Rock & related items. This includes a new
numeric modifier: Spell Critical Percent.
I have chosen NOT to flag the control crystal as usable from mafia, as this
appears to be a completely irreversible decision.

Revision: 7575
Add the various paper strips to list of autosellable quest items that you
probably want to sell before jumping into the gash.

Revision: 7576
Increase size of chat buffer to allow large tables to be displayed in gCLI

Revision: 7577
Rather than make ALL LimitedSizeChatBuffers bigger, make the maximum size be
configurable and only increase the size of the gCLI command buffer.

Revision: 7578
The control crystal is now a free pull

Revision: 7579
Add void set_length( buffer, int ) function to ASH, to truncate the contents of
the buffer to the specified length.
Increase size of buffer for gCLI again.

Revision: 7580
Fix bug in ASH function invocation: evaluate all values being passed as function
arguments before binding the values to the parameters.
Eliminate some redundant code in ASH functin calling: we don't need to coerce
things to strings or ints or floats before setting a variable reference, since
the method that sets the reference does the identical coercion itself.

Revision: 7581
ASH performance enhancement: the functions that take a regex pattern
(create_matcher(), group_string(), and split_string() with 2 args) now cache
the compiled Pattern object in the raw content field of the pattern string.
If called again with the same string, the Pattern can be reused rather than
being recompiled. This should speed up use of these functions inside a loop,
or in a frequently-called function, as long as the pattern is a constant.
All three functions now properly report a pattern syntax error rather than
crashing, not just create_matcher().

Revision: 7582
Daily Deed items can now be dynamically shown or not based on player state.
Many deeds will now automatically hide themselves when clearly inapplicable:
wrong class, wrong ascension type, level too low, lack of a needed item
(that's not something that can reasonably be auto-acquired), lack of a skill,
etc.
In support of this change, it's now possible to register a listener for
inventory count changes of any particular item, which is likely to be useful
elsewhere.
Deeds with multiple buttons should now be a bit more compact and look better
on Mac OS X 10.5+.

Revision: 7583
When write a data override file for status effects, correctly save the default
action field for existing effects.

Revision: 7584
Fixed problem with ASH to_string() when applied to a buffer. Normally, this
function just returns its parameter, which works fine with immutable values.
However, in the case of a buffer, this means that the supposed string value
you get actually reflects the current buffer contents when it is used, rather
than the contents at the time to_string() was called. One consequence is
that using a single buffer variable to create multiple keys in a map would
actually create a single key, with a name that keeps changing.
to_string(buffer) now captures the current value as an actual string.

Revision: 7585
Eliminate one memory allocation per function call in an ASH script

Revision: 7586
The ASH string operators (+, ==, != ) can now be applied to buffers

Revision: 7587
floaty stone sphere has autosell price of 0, not 9

Revision: 7588
When calculating creatable amounts, handle ingredients with nonstandard
acquisition methods (Hermit items, TRevision 4pz0r furs) a bit better. The code to
handle them was sometimes triggering on other items, causing their available
quantity to be exaggerated.
Fixed problem that was causing mini-browser buttons to be unclickable if they
contained any HTML entities, such as "Attack with your Coily™". There
was some strange code in RequestEditorKit that was determining the
RequestFrame that contains a form submit button by enumerating all Frames,
looking for one that contained the button name (which failed in this case
because the entity was mangled) - rather than simply asking the button view
for its parent. The problem with mangled entities remains, something is
eating the final semicolon from them (except for nbsp, apparently), but I
haven't been able to determine what it is.
Fixed another class of broken JickHTML so that the Haunted Wine Cellar
appears properly in the mini-browser.
The Wine Cellar decorator now indicates the correct order of dusty bottles as
1st/2nd/3rd, rather than 1/2/3 which could easily be misunderstood as being
inventory counts.

Revision: 7589
Put gCLI buffer back to previous size.

Revision: 7590
Don't call postChoice on a chat request. This doesn't guarantee that the
request is actually related to the choice adventure currently being
processed, but certainly makes it a lot more likely.
StoreManager.getMallPrice() is now a synchronized method, to avoid some ugly
behavior that would occur if multiple threads performed the same sequence of
price lookups (as could happen if a user kept reloading the Fernswarthy's
Basement page while it was trying to build the list of boosts).
Cached Mall prices are now updated on purchase attempts even if they are
unsuccessful, so that you can determine the new price after someone has
bought out all the cheap items.

Revision: 7591
Avoid crash when equipping an unknown item from the relay browser.

Revision: 7592
Another fix for crashes with unknown items in inventory.

Revision: 7593
The Modifier Maximizer now always considers equipment that increases familiar
weight, even if it does not directly benefit you.
The usage limit for amino acids is 3, not 1.

Revision: 7594
Preliminary shupport for the new sugar tome. All items should be recognized
and equippable. Summoning probably doesn't work - I had to guess at the
preaction= value. Creation of items from sheets, breakage in combat, and use
of the sugar shield for familiar training are NOT handled yet.
ALSO, ADDED THE REMAINING DATA FOR THE PRIMITIVE RADIO DUDS.

Revision: 7595
Sugar sheet items are now creatable from mafia.

Revision: 7596
Recognize error message when attempt to adventure on battlefield without uniform

Revision: 7597
Breakage of sugar equipment in combat is now recognized.
When any equipment breaks (also including antique gear and cheap studded
belts), the action to take can now be specified in the Item section of Choice
Advs. It can abort combat (as previously done), revert to the last equipment
in that slot, re-equip another of the item if you have it in inventory, or
attempt to acquire a replacement item.
Handling of Rampaging Adding Machines has been revamped. Scroll creation is
now deferred until after special actions have been performed, assuming that
you have "special action" within the first 10 lines of your CCS. This means
that preparatory actions such as Entangling Noodles can be used, and that
auto-olfact and auto-putty are now fully usable with the RAM.
The specification of what to do after all scrolls listed in your goals have
been created has been moved from Preferences to Choice Advs, and now has two
more options: in addition to making 668 or 31337 scrolls if possible, you can
choose to make no extra scrolls, or to simply abort the combat (useful for
Black Cat runs).

Revision: 7598
In an effort to address hangs in the MMG support, synchronize the access to
the various lists of bets and events.

Revision: 7599
More of the same

Revision: 7600
When you use Harold's Bell, start a counter. Untested.

Revision: 7601
Recognize the +ML given by Heartbreaker's Hotel in Bad Moon.

Revision: 7602
Various monster item drop data updates, primarily in the Hippy Camp.
Sugar shards are now an option for HP and MP restoration.
The +meat and +item effects from summoning a hobo underling and asking him to
tell you a joke, or dance for you, are now included in the modifiers for the
rest of the combat.

Revision: 7603
ASH saves and restores parameter bindings around calls to user defined funcs. It
does this so that recursion works. For some reason, it explicitely did not
restore aggregate parameters. That is incorrect. Fix it.

Revision: 7604
Up Harold's Bell counter

Revision: 7605
Broken equipment handling should now apply to familiar equipment, too.

Revision: 7606
Simplify the function called by mmg_wait_event.

Revision: 7607
Halve the monster's HP when a shrinking powder is used in combat.
Added the melon baller drop to the Very Mad Scientist.

Revision: 7608
Use comma format to print bet amounts when logging MMG bets

Revision: 7609
Some relay browser enhancements, from a patch by bumcheekcity:
* Confirmation before adventuring in the post-quest Tavern.
* Confirmation before visiting the Lemon Party Slots without a clover.
* NS familiar spoilers.
* Wand spoiler now lists the pieces you need to build it.
* Hermit now has links to buy a permit or visit the sewer, as appropriate.

Revision: 7610
Allow elven limbos gingerbread (and any future items with HTML in the name)
to be recognized in your display case.

Revision: 7611
Disallow shieldbutt and derivatives unless you are wearing a shield.
Add paper strip drops to Pastamancer Nemesis guard monsters
Add Spaghetti Elemental

Revision: 7612
Don't let resetting autoattack interfere with detection of failure to adventure

Revision: 7613
A pair of spaces was erronously changed to a tab in a pirate insult.

Revision: 7614
Fix problem with form submit buttons being unclickable when the mini-browser
is open as a tab rather than a standalone window.

Revision: 7615
When a skill use produces a "summon limit exceeded" error, increment its
counter by one anyway so that mafia's count will eventually get back in sync
with KoL's count.

Revision: 7616
KoLmafia forces certain dev team members to log into the dev server. Since the
code currently on that server breaks KoLmafia's inventory handling, they want
the option to NOT use the dev server through KoLmafia. Make it so.

Revision: 7617
Experimental feature: add "createdeb" target to buildfile: "ant createdeb"
will create a .deb file for Linux users.

Revision: 7618
Evil cocktail plurals

Revision: 7619
Don't tally an Encounter when try to adventure in Hobopolis Town Square after
Hodgeman has been defeated.

Revision: 7620
Experimental: on Island Battlefield, alert when a new hero is possible.
Disable storemanager pauser.

Revision: 7621
Use linked list and iterator.remove() to reduce potential for memory leaks
Set multiByte property on the HTML document once per display pane rather than once every append

Revision: 7622
When you stomp your agua de vida bottle, it's not an encounter.
Add cotton wad and Cotton Mouthed.

Revision: 7623
Detect O.A.F. actions that force you to attack rather than using a skill or item

Revision: 7624
Add yield shield

Revision: 7625
Don't set interpreter state to RETURN until after the return value has been
evaluated.
Attempt to fix new exception in ChatBuffer

Revision: 7626
Add combat percentage and monster drops for Road to the White Citadel

Revision: 7627
Returns from void functions need to set STATE_RETURN.

Revision: 7628
Add Gang of Hobo Muggers. wiki has no defense information.

Revision: 7629
Don't tally attempts to adventure in the empty duck farm.

Revision: 7630
Refactor chat handling to use event dispatcher as a processing queue rather than maintaining our own
Set text on JEditorPane rather than use ChatBuffer objects when doing constant reset of HTML
Update ChatBuffer objects to always be auto-truncating for minor performance improvement

Revision: 7631
Preserve the ireallymeanit form field provided with the redirect to a combat,
when combat is being automated. Without that, at least some people were
getting a "twiddle your thumbs" message instead of gaining initiative, making
pickpocketing impossible.

Revision: 7632
Added ASH "script" directive, which supplies a name that will be used in
kmail sent via the "notify" directive in place of the script's filename.
This allows script authors to receive notification in a canonical format even
if the user has renamed the file. "script" must appear before "notify".

Revision: 7633
When KoL has timed you out, clicking in the Relay Browser now times you back in
and resubmits the request.
When you search bets in the MMG with a minimum and maximum calue, save those
values in mmgSearchMinimum and mmgSearchMaximum. Thenceforth, whenever you visit
bet.php, prefill the search mimimum and maximum from the save values.
If you have ever gotten sick of seeing 5 bets from Cir Senam at 100,000,000 or
15 bets from random people at 1,000, this is for you.

Revision: 7634
Detect when various Hobopolis bosses have been defeated and eschew tallying
encounters in their empty realms.

Revision: 7635
Better handling of recipes with interchangeable ingredients:
* Added titanium/goatskin umbrellas to the list, so that the gatorskin
umbrella can be made from either one.
* Interchangeability of the two cola brands was incompletely implemented, and
didn't actually work.
* Handle interchangeability by modifying the recipe to use the better choice,
rather than making both ingredients have the same available amount. The Item
Manager will no longer appear to claim that the ingredient you have less of
can be created from the other one.
* If both ingredients in an interchangeable pair have the same quantity
(typically, both zero), choose the one with the lowest cached Mall price.

Revision: 7636
Revert to pre-Revision 7621 behavior of clearing the "multiByte" property on HTML
documents after every append; that's actually necessary to avoid slow-downs
after displaying any non-ASCII text.

Revision: 7637
If you take a bet in the MMG using meat from storage, properly manipulate your
meat in storage, not inventory. Heh, heh. She said "manipulate your meat."
If you are in the relay browser and get redirected to maint.php, follow the
redirect so that it shows in the browser.

Revision: 7638
Recognize when you lose an agua de vida bottle and remove it from inventory.
Refactor recognition of failures to adventure: rather than having one chain
of hardocded if statements testing strings in KoLAdventure and another one
testing (mostly) the same strings in AdventureRequest, maintain a single array
of strings, with associated error message and severity, accessed from both.
The Friar's Ceremony Location without all the ritual items generates a failure
to adventure. Ditto for adventureing in The Sea when your familar can't breathe
underwater.

Revision: 7639
Your counterScript is now called for expiring informational counters, with
two differences from normal (aborting) counters:
* If the counter would expire in the middle of a request that takes multiple
turns, it is deferred until afterwards (and will therefore be delivered with
a negative number of turns remaining).
* The return value of the counterScript is ignored, an informational counter
never causes an abort.
If multiple aborting counters expire at the same time, the relay browser
warning now shows all of them, so you can tell just how badly you've screwed
up.

Revision: 7640
Add adventure failure for Typical Tavern with insufficient Meat on hand.
Fix a couple of erroneous or duplicated item drops.

Revision: 7641
User-added counters can now be specified as informational in some or all
locations, and can specify a URL to visit when the counter image in the
charpane is clicked. They are now exactly as powerful as built-in counters.
These features are enabled by the following space-delimited elements, placed
after the counter label, but before the image filename (if used):
"loc=N", where N is the snarfblat number of an adventure location. makes the
counter informational when adventuring at that location. This element can be
used multiple times, for example the Wormwood counter is informational at all
three Wormwood locations.
"loc=*" makes the counter informational regardless of location; it will never
cause an abort.
If exactly one loc=N element is present, then clicking on the counter image
in the charpane will visit the corresponding location URL. To override that,
or specify a URL in other cases, an element containing ".php" anywhere within
it can be used.
Note that any informational counters that you have active when upgrading to
this revision will abort on expiration, and then work properly thereafter.
It is possible that this change will break scripts that directly examine the
relayCounters preference to determine when counters are going to expire,
rather than using get_counters() or letting a counterScript handle it.

Revision: 7642
Efficiency improvement for mana burning: it will generally cast each skill at
most once per burn, no matter how much MP is being burned. Basically, it
simulates casting each eligible skill, one at a time, with the goal of
balancing all the effect durations; when complete, it makes a single skill
use request for the entire number of simulated casts.

Revision: 7643
An attempt to reduce some memory wastage in StringUtilities:
* Any string that is going to be used as a key in one of the encode/decode
caches is explicitly copied first - so that if it's a substring of something
longer (perhaps an entire page load), it doesn't force the entire original
string to remain in memory.
* Strings that are over 100 characters are not cached at all, on the grounds
that they're probably a bogus value rather than something that will ever be
looked up in the cache again.

Revision: 7644
More memory usage improvements:
* RegisteredEncounter and SpecialOutfit objects now store a copy of their
name, since the original is normally a substring of a potentially large page
load.
* The checkboxes for individual offerings in the buffbot request window no
longer have their text in HTML format; that gives no benefit in this case
(but is required for buff packs, to add line breaks), and adds at least 8K in
memory overhead per component.

Revision: 7645
Do not need to throw an exception to get a stack trace from it

Revision: 7646
Allow moods to contain skills that are not available to the player

Revision: 7647
Allow moods to contain invalid commands (and print error messages as they are executed) rather than throwing a cryptic null pointer exceptions

Revision: 7648
Added an "autosort" button to the Trophy Arranger, which will reorder the
trophies (in both the visible and hidden lists, separately) so that visually
similar trophies, like the Level 30 ones, are grouped together. The first
trophy in each list remains in that position, the rest get shuffled.

Revision: 7649
Use chat style font in location details

Revision: 7650
Added hors d'oeuvre tray item drop data to Floating Platter of Hors D'Oeuvres

Revision: 7651
Add Power ratings for a bunch of shields

Revision: 7652
Fix potential infinite loop when handling expired counters during relay
browser adventuring.

Revision: 7653
Detect whether a combat usage of an anti-anti-antidote actually consumed the
item by looking at the response text, rather than checking for an active
effect with "poison" in its name (which fails for Toad in the Hole).

Revision: 7654
In Preferences, allow items in the Startup In Window and Startup In Tabs
lists to be dragged back to the complete list to remove them. Too many
people were failing to realize that they could use the delete key here.
In GenericRequest, don't reuse the existing URL object if the new URL string
simply starts with the previous string - it has to be an exact match.

Revision: 7655
When you finish the quest in Seaside Magalopolis, add a secret from the future
to your inventory.
If you did it in the Relay Browser, add a "you acquire a secret from the future"
section to the adventure text, including a [use] link.
Add a few more shield powers which have appeared on the Wiki.
Add Attack, Defense, HP, item drops for a bunch of monsters from the Primordial
Soup, Jungles of Ancient Loathing, and Seaside Magalopolis.
Add plurals for some Battlefield booty.
When you try to start the Relay Browser for the first time after KoL has timed
you out, timein the session and load all frames.

Revision: 7656
Recognize when an opera mask is used up when casting an AT buff, and replace
it with the previously-equipped hat.

Revision: 7657
Move CLI commands to their own package (rather than putting them all in KoLmafiaCLI)

Revision: 7658
Fix inverted logic that prevented adventures from being counted and actions from
being taken between battles.

Revision: 7659
Fix null pointer exception when CLI object is needed in things that aren't conditional statements

Revision: 7660
Parse new quest item format on inventory pages.

Revision: 7661
Parse quest items from the inventory page even if images are turned off.
Read more about items from the inventory page, including the descid and the
"rel" string, which would allow us to determine all sorts of things about
unknown items, including autosell price and quest status. Not yet...
Read descitem for unknown items in the clan stash.

Revision: 7662
Remove Supreme Being Glossary from inventory after you use it successfully.

Revision: 7663
When you find the memory of a small stone block, you lose the memory of an
iron key

Revision: 7664
When you fight the Giant Octopus, remove a memory of a grappling hook from your
inventory, if present. It won't be present if you lost a fight with it...

Revision: 7665
Replace chat_reply(string) with the following functions:
- chat_clan(string), which broadcasts a message to everyone in /clan
- chat_private(string, string), which sends a message to the specified clan member

Revision: 7666
Remove unused code in chat manager

Revision: 7667
Print current working directory to initial CLI output

Revision: 7668
Since KoL now provides Javascript functions with HTML bold directives, start
searching for the encounter name in the HTML body.

Revision: 7669
Fix null pointer exception when launching chat

Revision: 7670
Fix chat not loading when the user has nothing specified for highlighting

Revision: 7671
Add Staff of the Soupbone and Star of Bravery

Revision: 7672
Readd 'text' command and the ability to visit URLs from CLI commands
Sort CLI command objects in alphabetical order

Revision: 7673
Allow the CLI to access ASH runtime library functions via the namespace interpreter

Revision: 7674
Add null value checks, since response text can be null
Update VisitURLCommand to handle visiting a URL without the 'text' command

Revision: 7675
Minor code cleanup form mood manager and custom combat manager
Ensure that custom combat settings get loaded, even if custom combat panel is never loaded (fixes the issue where CCS is never properly loaded if the adventure frame isn't loaded)

Revision: 7676
For consistency, use the same logic for the SET command as is used for the CCS command when updating which CCS file to use

Revision: 7677
Re-implement the integrated gCLI interface using iframes so that it can automatically get updates made to KoL chat

Revision: 7678
Preserve CLI when invoking internal aliased commands
Fix parameter parsing in campground command

Revision: 7679
For consistency, print the return value from functions invoked via the namespace interpreter (similar to what the 'ash' command currently does).

Revision: 7680
Allow ASH functions invoked via the namespace interpreter to be prompted for parameters (similar to the main method in ASH scripts). Anything typed into the CLI after the name of the function will be treated as a single string parameter. Ambiguity is resolved as follows:
If a parameter is provided, choose the function that has a single string parameter. If no such function is available, but there is exactly one function that needs one parameter, then choose that function. If no such functions are available, consider the invocation to be ambiguous and abort.
If no parameter is provided, choose the function that has no parameters. If no such function is available, then choose the function with the fewest number of parameters. If multiple functions tie for the fewest number of parameters, consider the invocation to be ambiguous and abort.

Revision: 7681
Mark evil potion creation method as COOK, rather than SAUCE, since Saucerors
only get a yield of one potion per nauseating reagent used. That doesn't do
any skill checking, but since nauseating reagent is a quest item that only a
Sauceror with Advanced Saucecrafting can even have in inventory, it's moot.

Revision: 7682
Clarify help text for the hiddencity command (it requires an item id, not an item name)
Fix handling for the 'altar' parameter in the hiddencity command

Revision: 7683
Whenever we visit the terrarium, update familiar weights of all familiars.

Revision: 7684
Support for Squamous Gibberer

Revision: 7685
Add minimal description to build file.
Update all mall prices.
Bump version to 13.6
 
Top