bumcheekcend.ash - A zero setup semi-automated ascension script!

Winterbay

Active member
Or, at least I think so, you can use acquire(), which will use any old way of acquiring the item including coinmasters if available.
 

fronobulax

Developer
Staff member
SVN update this morning has a missing ")".

Line 4469 or thereabouts.

As corrected:
buy($coinmaster[The Shore\, Inc. Gift Shop], 1, ($item[dingy dinghy]));
 

Theraze

Active member
And create also works for coinmasters, if you want to be lazy and just do a number and item. But buying a number from a coinmaster using the right currency is probably better. :)

The problem with using acquire/retrieve_item - acquire is the gCLI, the ASH is retrieve_item() - or the zlib obtain is that it respects the user's settings and only uses their auto settings, which means that if they have auto satisfy with coinmasters disabled, they won't get the item in the end. It's much better to force the purchase, in this case, using create(2 vars) or buy (3 vars). :)
 
I only have the Eye of Ed and the Staff of Fats, but the script is trying to adventure in the pyramid:

Code:
> call scripts\bumcheekascend.ash

******************************************************************************************
******************************************************************************************
******************************************************************************************
Thankyou for using bumcheekcity's ascension script. Please report all bugs on the sourceforge page available in my profile with a copy+paste from the CLI of the problematic points, and your username. Ask on the thread on the kolmafia.us forum for help and assistance with the script, particularly first time problems, and issues setting it up. 
******************************************************************************************
******************************************************************************************
******************************************************************************************

BCC: Trying to check bcs_aliases on the Bumcheekcity servers.
BCC: Registering aliases for script use. Check the forum thread - http://kolmafia.us/showthread.php?t=4963 - for more information
String successfully aliased.
bcasc => ash import <bumcheekascend.ash>; mainWrapper();
Setting alias 'toot' for function 'Toot'.
String successfully aliased.
bcasc_toot => ash import <bumcheekascend.ash>; bcascToot();
Setting alias 'guild' for function 'Guild'.
String successfully aliased.
bcasc_guild => ash import <bumcheekascend.ash>; bcascGuild();
Setting alias 'knob' for function 'Knob'.
String successfully aliased.
bcasc_knob => ash import <bumcheekascend.ash>; bcascKnob();
Setting alias 'pantry' for function 'Pantry'.
String successfully aliased.
bcasc_pantry => ash import <bumcheekascend.ash>; bcascPantry();
Setting alias 'forest' for function 'SpookyForest'.
String successfully aliased.
bcasc_forest => ash import <bumcheekascend.ash>; bcascSpookyForest();
Setting alias 'spookyforest' for function 'SpookyForest'.
String successfully aliased.
bcasc_spookyforest => ash import <bumcheekascend.ash>; bcascSpookyForest();
Setting alias 'tavern' for function 'Tavern'.
String successfully aliased.
bcasc_tavern => ash import <bumcheekascend.ash>; bcascTavern();
Setting alias 'bats1' for function 'Bats1'.
String successfully aliased.
bcasc_bats1 => ash import <bumcheekascend.ash>; bcascBats1();
Setting alias 'bats2' for function 'Bats2'.
String successfully aliased.
bcasc_bats2 => ash import <bumcheekascend.ash>; bcascBats2();
Setting alias 'bats' for function 'Bats2'.
String successfully aliased.
bcasc_bats => ash import <bumcheekascend.ash>; bcascBats2();
Setting alias 'eightbit' for function '8Bit'.
String successfully aliased.
bcasc_eightbit => ash import <bumcheekascend.ash>; bcasc8Bit();
Setting alias '8bit' for function '8Bit'.
String successfully aliased.
bcasc_8bit => ash import <bumcheekascend.ash>; bcasc8Bit();
Setting alias 'knobking' for function 'KnobKing'.
String successfully aliased.
bcasc_knobking => ash import <bumcheekascend.ash>; bcascKnobKing();
Setting alias 'goblinking' for function 'KnobKing'.
String successfully aliased.
bcasc_goblinking => ash import <bumcheekascend.ash>; bcascKnobKing();
Setting alias 'king' for function 'KnobKing'.
String successfully aliased.
bcasc_king => ash import <bumcheekascend.ash>; bcascKnobKing();
Setting alias 'dingy' for function 'DinghyHippy'.
String successfully aliased.
bcasc_dingy => ash import <bumcheekascend.ash>; bcascDinghyHippy();
Setting alias 'dinghy' for function 'DinghyHippy'.
String successfully aliased.
bcasc_dinghy => ash import <bumcheekascend.ash>; bcascDinghyHippy();
Setting alias 'hippy' for function 'DinghyHippy'.
String successfully aliased.
bcasc_hippy => ash import <bumcheekascend.ash>; bcascDinghyHippy();
Setting alias 'billiards' for function 'ManorBilliards'.
String successfully aliased.
bcasc_billiards => ash import <bumcheekascend.ash>; bcascManorBilliards();
Setting alias 'friars' for function 'Friars'.
String successfully aliased.
bcasc_friars => ash import <bumcheekascend.ash>; bcascFriars();
Setting alias 'friarssteel' for function 'FriarsSteel'.
String successfully aliased.
bcasc_friarssteel => ash import <bumcheekascend.ash>; bcascFriarsSteel();
Setting alias 'steel' for function 'FriarsSteel'.
String successfully aliased.
bcasc_steel => ash import <bumcheekascend.ash>; bcascFriarsSteel();
Setting alias 'password' for function 'KnobPassword'.
String successfully aliased.
bcasc_password => ash import <bumcheekascend.ash>; bcascKnobPassword();
Setting alias 'farquar' for function 'KnobPassword'.
String successfully aliased.
bcasc_farquar => ash import <bumcheekascend.ash>; bcascKnobPassword();
Setting alias 'cyrpt' for function 'Cyrpt'.
String successfully aliased.
bcasc_cyrpt => ash import <bumcheekascend.ash>; bcascCyrpt();
Setting alias 'crypt' for function 'Cyrpt'.
String successfully aliased.
bcasc_crypt => ash import <bumcheekascend.ash>; bcascCyrpt();
Setting alias 'library' for function 'Library'.
String successfully aliased.
bcasc_library => ash import <bumcheekascend.ash>; bcascLibrary();
Setting alias 'bedroom' for function 'Bedroom'.
String successfully aliased.
bcasc_bedroom => ash import <bumcheekascend.ash>; bcascBedroom();
Setting alias 'goat' for function 'Trapper'.
String successfully aliased.
bcasc_goat => ash import <bumcheekascend.ash>; bcascTrapper();
Setting alias 'goatlet' for function 'Trapper'.
String successfully aliased.
bcasc_goatlet => ash import <bumcheekascend.ash>; bcascTrapper();
Setting alias 'mine' for function 'Trapper'.
String successfully aliased.
bcasc_mine => ash import <bumcheekascend.ash>; bcascTrapper();
Setting alias 'trapper' for function 'Trapper'.
String successfully aliased.
bcasc_trapper => ash import <bumcheekascend.ash>; bcascTrapper();
Setting alias 'wand' for function 'Wand'.
String successfully aliased.
bcasc_wand => ash import <bumcheekascend.ash>; bcascWand();
Setting alias 'dod' for function 'Wand'.
String successfully aliased.
bcasc_dod => ash import <bumcheekascend.ash>; bcascWand();
Setting alias 'fledges' for function 'PirateFledges'.
String successfully aliased.
bcasc_fledges => ash import <bumcheekascend.ash>; bcascPirateFledges();
Setting alias 'fcle' for function 'PirateFledges'.
String successfully aliased.
bcasc_fcle => ash import <bumcheekascend.ash>; bcascPirateFledges();
******************
Ascending Starting
******************
Conditions list cleared.
BCC: Trying to check bcsrelay_settings on the Bumcheekcity servers.
BCC: We have not completed the stage [lair0].
Doing a check for Telescope Items
BCC: We have not completed the stage [lair0].
BCC: Please get stick of dynamite for telescope part 7 from 'Muscle Vacation' yourself
Level 1 Starting
BCC: We have completed the stage [toot].
BCC: We have completed the stage [guild].
BCC: We have completed the stage [knob].
BCC: We have completed the stage [pantry] and need to set it as so.
BCC: We have completed the stage [pantry].
BCC: levelMe(5, true) called.
Level 2 Starting
BCC: We have completed the stage spookyforest
BCC: levelMe(8, true) called.
Level 3 Starting
BCC: We have completed the stage tavern
BCC: levelMe(13, true) called.
Level 4 Starting
BCC: We have completed the stage [bats1].
BCC: We have completed the stage [meatcar].
BCC: We have completed the stage [bats2].
BCC: We have completed the stage [8bit].
BCC: levelMe(20, true) called.
Level 5 Starting
BCC: We have completed the stage [knobking].
BCC: We have completed the stage [dinghy].
BCC: We have completed the stage [manorbilliards].
BCC: levelMe(29, true) called.
Level 6 Starting
BCC: We have completed the stage [friars].
BCC: We have completed the stage [knobking].
BCC: We have completed the stage [friarssteel].
BCC: We have completed the stage [manorlibrary].
BCC: levelMe(40, true) called.
Level 7 Starting
BCC: We have completed the stage [friarssteel].
BCC: We have completed the stage [cyrpt].
BCC: We have completed the stage [innaboxen].
BCC: We have completed the stage [manorbedroom].
BCC: levelMe(53, true) called.
Level 8 Starting
BCC: We have completed the stage Trapper
BCC: We have completed the stage [wand].
BCC: We have completed the stage [piratefledges].
BCC: levelMe(68, true) called.
Level 9 Starting
BCC: We have completed the stage [chasm].
BCC: levelMe(85, true) called.
Level 10 Starting
BCC: We have completed the stage [airship].
BCC: We have completed the stage [castle].
BCC: levelMe(104, true) called.
Level 11 Starting
BCC: We have completed the stage [macguffinprelim].
BCC: We have completed the stage [macguffinpalin].
BCC: We have completed the stage [hits].
BCC: We have completed the stage [macguffinspooky].
BCC: We have completed the stage [macguffinpyramid].
BCC: We have completed the stage [macguffinhiddencity].
BCC: We have not completed the stage [macguffinfinal].
BCC: Maximizing ''
Maximizing...
48 combinations checked, best score 1,312.75
BCC: Switching Familiar for General Use
BCC: Using a default stat familiar.
BCC: Nothing to fax according to whatShouldIFax
Cleared mood.
Cleared mood.
Set mood trigger: When I get Just the Best Anapests, uneffect just the best anapests
Set mood trigger: When I run low on Jabañero Saucesphere, cast 1 Jabañero Saucesphere
Set mood trigger: When I run low on Jalapeño Saucesphere, cast 1 Jalapeño Saucesphere
Mood swing complete.
Mood swing complete.
BCC: Getting the Carved Wooden Wheel
Conditions list cleared.
BCC: Setting goals of 'carved wooden wheel'...
Condition added: carved wooden wheel

Request 1 of 91 (Pyramid: The Upper Chamber) in progress...
You can't get to that area.


Is the temple still an issue? Last ascension I did it manually...
 

Theraze

Active member
Hidden City, not the temple. The temple solves fine, it's the city changes that don't work.

It's worse since the "handle it" change, since that marks the section as done instead of waiting until you have the amulet. I could whip up some bad automation, but... I've been waiting until we can do it without wasting tons of server hits on checking if a sphere has been found and used, etc. Which might have already happened, or it might be one of the few of the dozens of Darzil patches that haven't been committed yet. :)
 

lostcalpolydude

Developer
Staff member
I've been waiting until we can do it without wasting tons of server hits on checking if a sphere has been found and used, etc. Which might have already happened, or it might be one of the few of the dozens of Darzil patches that haven't been committed yet. :)

It's in hidden...Progress settings, which was in one of Darzil's patches.
 

CKtheFat

Member
Something to note in case this hasn't already been updated:

Tropical orchids are now found from opening up the tropical island getaway souvenir crate as opposed to just adventuring there. The script kept sending me to vacation since it would never find it in my inventory after the vacation, eating up a lot of adventures, but luckily I was able to catch it before it ate up the remainder of them.
 

Theraze

Active member
I think those are the ones noted in the telescope bits... the actual auto-adventure bits were updated though.
 

fronobulax

Developer
Staff member
I don't think any of this is new, but I will throw it out there in case it jogs someone elses memory.

1)BCCA will try and adventure in the HITS even though the quest to open it has not been completed. For HC, I suspect the thing to do is just always and unconditionally try and open it when you are already dealing with the Castle. Make HITS an option and then the SC players can turn it off, pull the star gear and identify bang potions elsewhere.

2)BCCA kept trying to go to the Barrr without the swashbuckling getup equipped. This puzzles me because it was clearly trying to maximize with "+outfit swashbuckling getup". The string did not seem to have been recorded in the mazimizer's MRU and one of my strings was still there so I wonder if the mazimizer didn't actually get called. But this is one of those weird things that won't get fixed or looked at until it is repeatable and its not there yet.

3)BCCA seems to unconditionally want a box of matches to unlock the Hidden Tavern. That might be worth making an option. Certainly it is not needed for an Oxy run, right? Maybe I have just annoyed the RNG but it seems as if adventuring in one place to get the matches when all of the other conditions of interest in that place have been met and it could go for a sphere and move on, takes longer. An observation, not a complaint, since I know the support for the revised Hidden City is not complete.

4) BCCA could do a better job of realizing that it just tried to do something and failed, and moving on to something else. Examples include the Barr and HITS above as well as any area where KoL wants you to confirm that your stats are low for the area. All three cases generated infinite loops for me today :)
 

lostcalpolydude

Developer
Staff member
3)BCCA seems to unconditionally want a box of matches to unlock the Hidden Tavern. That might be worth making an option. Certainly it is not needed for an Oxy run, right?
Even if you can't drink, having a bowl of scorpions gives you a free runaway against a monster in the bowling alley. That doesn't necessarily mean it's worth getting though.

any area where KoL wants you to confirm that your stats are low for the area. All three cases generated infinite loops for me today :)

Mafia should probably abort when that happens.
 

Theraze

Active member
1) It tries to unlock the HitS during the quest, but if it doesn't happen for any reason due to extreme RNG-luck/swing, it stays locked and won't keep trying after.
2) Myst class, right? There was a ~15 minute period or so where the maxme string was in the wrong parenthesis. Already fixed.
3) Even in an Oxy run, you want the scorpions for the bowling alley.
4) It could. But how. There's no major easy way to discern between "lost your buffs and they'll come back after we hand control back to the script" and "you don't have enough stats and there's no buff coming" when you re-use the combat code. Same goes for the other various "failed to adventure for some reason" things, which are even more nebulous. Besides sending out a test adventure without gear first to see if it's going to work, which would also abort if you happened to lose the battle due to a bad series of stasis...
 

fronobulax

Developer
Staff member
1) Then perhaps completing HITS opening should be a separate action that could be invoked later if it wasn't opened and Ascend wanted to go there?
2) Myst class but that was yesterday or maybe even the day before.
3) In my suboptimal play, I only want scorpions if BCCAscend or WHAM will use them when appropriate :) How many turns do the matches save? I burned over 60 waiting for them. Perhaps there is something else going on? Even if they are useful, would it not be better to complete everything but the bowling alley before deciding that turns must be spent to get them, rather than having them drop as a side effect of something else?
4) Let me clarify that the something I had in mind was something that actually tried to burn an adventure. The problem I am seeing could be detected by just looking at the turns used counter. If it ain't changing and Ascend is trying to adventure then something is wrong and it should stop trying the same thing and either abort or try something else. I should also note that checking new and improved CanAdv more aggressively might also eliminate the specific things I have seen. But it sure would be nice if it would not go into an infinite loop...
 

lostcalpolydude

Developer
Staff member
4) Let me clarify that the something I had in mind was something that actually tried to burn an adventure. The problem I am seeing could be detected by just looking at the turns used counter. If it ain't changing and Ascend is trying to adventure then something is wrong and it should stop trying the same thing and either abort or try something else. I should also note that checking new and improved CanAdv more aggressively might also eliminate the specific things I have seen. But it sure would be nice if it would not go into an infinite loop...

Noncombat options that don't take a turn, wearing an antique machete against dense liana, and having a bowl of scorpions for a drunk pygmy are all cases where turns used doesn't change. That's ignoring things like hipster/goth kid fights and bander/boots/GAP runaways.
 
I am trying to do a run with high ML so I am doing it all manually, but I invoke the script every now and then to make sure I am not missing any step. I've got a problem now in which I got the pirate fledges but it still tries to get them. Long story short, I know there is a command you can manually input to tell the script that you have already completed a step, but I haven't been able to find it, can anybody post it?
 

Winterbay

Active member
I can't remember if the script creates this alias or not, but this is what my MAfia has:
alias bcasc_set => ash string what = $string[%%]; set_property("bcasc_stage_"+what, my_ascensions());

Call it with bcasc_set <name_of_stage>
 

Theraze

Active member
1) Yes. It should.
2) Which was exactly when there was a bug. So that should be gone.
3) If I understand the way this works properly, it's just immediately used out of your inventory without needing to be thrown. Win, no turn-cost. Turns saved depends on how many drunk pygmies you encounter, since every one of those will not count as a fight. With 5 monsters normally, and being able to eliminate the janitors, that brings us to a roughly 50/50 chance for a turn being usefully used on a bowler rather than a 1/4 chance. If I've been told how statistics work and remember anything of it. Which I really don't. Especially right after lunch.
4) As lost pointed out, there are valid things that don't count as a turn, including the antique machete and the bowl of scorpions. So we can't just check for turncount. Unless we're making a specific check somewhere where we know there's a 0% chance of skipped adventure, we really can't validate things especially well. It only gets worse when we try to generalize.
 

lostcalpolydude

Developer
Staff member
3) If I understand the way this works properly, it's just immediately used out of your inventory without needing to be thrown. Win, no turn-cost. Turns saved depends on how many drunk pygmies you encounter, since every one of those will not count as a fight. With 5 monsters normally, and being able to eliminate the janitors, that brings us to a roughly 50/50 chance for a turn being usefully used on a bowler rather than a 1/4 chance. If I've been told how statistics work and remember anything of it. Which I really don't. Especially right after lunch.

On average you will see an equal number of drunk pygmies and bowlers, so the tavern is 5 turns saved. Unless you have olfaction, and then it goes down, as long as you also have SGEEAs to olfact everywhere in the hidden city. But 5 turns is a good average turn savings to assume from a book of matches.
 

fronobulax

Developer
Staff member
So if the book of matches saves on average five turns and I spend more than 5 turns trying to get it after everything else in the zone then it is RNG screwage.

On the turn count since the only reason for doing it would be to avoid infinite loops, my problem could be solved if BCCA paused and asked itself if the turn count had changed since the last pause. Five (for example) pauses in a row and it reconsiders what it is doing.

That said, it is clear that this bothers no one else as much as it does me so...
 
Top