diff --git a/BUILD/familiars/item.dat b/BUILD/familiars/item.dat index 95f650583e..825d1ffbdd 100644 --- a/BUILD/familiars/item.dat +++ b/BUILD/familiars/item.dat @@ -14,6 +14,8 @@ Steam-Powered Cheerleader prop:_cheerleaderSteam>100 Steam-Powered Cheerleader prop:_cheerleaderSteam>50 # 1.1x multiplier fairy Steam-Powered Cheerleader prop:_cheerleaderSteam>0 +# fairy with useful special powers above a certain weight so we want to preload it +Grey Goose prop_boolean:auto_prioritizeGoose # fairy that generates extra adventures Reagnimated Gnome !path:Heavy Rains # Fairywhelp that drops x and o without limit. 1 each per 9 combats. 3 o for food. 3 x for drink, 23 x to skip half bridge. diff --git a/BUILD/task_order/Avatar of Jarlsberg.dat b/BUILD/task_order/Avatar of Jarlsberg.dat index bc94d87539..33afc0ba7f 100644 --- a/BUILD/task_order/Avatar of Jarlsberg.dat +++ b/BUILD/task_order/Avatar of Jarlsberg.dat @@ -54,6 +54,5 @@ L5_slayTheGoblinKing L4_batCave L3_tavern setSoftblockDelay allowSoftblockDelay -setSoftblockShen allowSoftblockShen L13_towerAscent LX_attemptPowerLevel diff --git a/BUILD/task_order/Legacy of Loathing.dat b/BUILD/task_order/Legacy of Loathing.dat index b371080d2d..707fe04a5d 100644 --- a/BUILD/task_order/Legacy of Loathing.dat +++ b/BUILD/task_order/Legacy of Loathing.dat @@ -91,7 +91,6 @@ L12_finalizeWar L12_clearBattlefield LX_koeInvaderHandler setSoftblockDelay allowSoftblockDelay -setSoftblockShen allowSoftblockShen LX_getDigitalKey LX_getStarKey L12_lastDitchFlyer diff --git a/BUILD/task_order/Quantum Terrarium.dat b/BUILD/task_order/Quantum Terrarium.dat index e4345a13d5..8664fa4ed8 100644 --- a/BUILD/task_order/Quantum Terrarium.dat +++ b/BUILD/task_order/Quantum Terrarium.dat @@ -58,6 +58,5 @@ L5_slayTheGoblinKing L4_batCave L3_tavern setSoftblockDelay allowSoftblockDelay -setSoftblockShen allowSoftblockShen L13_towerAscent LX_attemptPowerLevel diff --git a/BUILD/task_order/Zombie Slayer.dat b/BUILD/task_order/Zombie Slayer.dat index ea5e0fe147..2979dc1736 100644 --- a/BUILD/task_order/Zombie Slayer.dat +++ b/BUILD/task_order/Zombie Slayer.dat @@ -54,6 +54,5 @@ L5_slayTheGoblinKing L4_batCave L3_tavern setSoftblockDelay allowSoftblockDelay -setSoftblockShen allowSoftblockShen L13_towerAscent LX_attemptPowerLevel diff --git a/BUILD/task_order/default.dat b/BUILD/task_order/default.dat index 8c94c9441c..cbbb695db5 100644 --- a/BUILD/task_order/default.dat +++ b/BUILD/task_order/default.dat @@ -83,7 +83,6 @@ L12_finalizeWar L12_clearBattlefield LX_koeInvaderHandler setSoftblockDelay allowSoftblockDelay -setSoftblockShen allowSoftblockShen LX_getDigitalKey LX_getStarKey L12_lastDitchFlyer diff --git a/README.md b/README.md index a22c1180b4..0af62e13ff 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareA Run this command in the graphical CLI: ``` -git checkout https://github.com/Loathing-Associates-Scripting-Society/autoscend.git +git checkout loathers/autoscend ``` Will require [a recent build of KoLMafia](http://builds.kolmafia.us/job/Kolmafia/lastSuccessfulBuild/). diff --git a/RELEASE/data/autoscend_familiars.txt b/RELEASE/data/autoscend_familiars.txt index 6615a349a0..006628408f 100644 --- a/RELEASE/data/autoscend_familiars.txt +++ b/RELEASE/data/autoscend_familiars.txt @@ -113,53 +113,55 @@ item 2 Steam-Powered Cheerleader prop:_cheerleaderSteam>100 item 3 Steam-Powered Cheerleader prop:_cheerleaderSteam>50 # 1.1x multiplier fairy item 4 Steam-Powered Cheerleader prop:_cheerleaderSteam>0 +# fairy with useful special powers above a certain weight so we want to preload it +item 5 Grey Goose prop_boolean:auto_prioritizeGoose # fairy that generates extra adventures -item 5 Reagnimated Gnome !path:Heavy Rains +item 6 Reagnimated Gnome !path:Heavy Rains # Fairywhelp that drops x and o without limit. 1 each per 9 combats. 3 o for food. 3 x for drink, 23 x to skip half bridge. -item 6 XO Skeleton +item 7 XO Skeleton # Fairy that drops bacon with no limit. 1 per combat -item 7 Intergnat +item 8 Intergnat # Fairyballs -item 8 Elf Operative -item 9 Optimistic Candle -item 10 Rockin' Robin -item 11 God Lobster item:God Lobster's Crown>0 -item 12 Hobo in Sheep's Clothing +item 9 Elf Operative +item 10 Optimistic Candle +item 11 Rockin' Robin +item 12 God Lobster item:God Lobster's Crown>0 +item 13 Hobo in Sheep's Clothing # Fairywhelps -item 13 Pocket Professor -item 14 Garbage Fire -item 15 Dandy Lion -item 16 Choctopus +item 14 Pocket Professor +item 15 Garbage Fire +item 16 Dandy Lion +item 17 Choctopus # Fairychauns -item 17 Fist Turkey -item 18 Cat Burglar -item 19 Angry Jung Man -item 20 Grimstone Golem -item 21 Adventurous Spelunker -item 22 Blavious Kloop -item 23 Hippo Ballerina -item 24 Dancing Frog -item 25 Coffee Pixie -item 26 Attention-Deficit Demon -item 27 Jitterbug -item 28 Casagnova Gnome -item 29 Psychedelic Bear -item 30 Piano Cat +item 18 Fist Turkey +item 19 Cat Burglar +item 20 Angry Jung Man +item 21 Grimstone Golem +item 22 Adventurous Spelunker +item 23 Blavious Kloop +item 24 Hippo Ballerina +item 25 Dancing Frog +item 26 Coffee Pixie +item 27 Attention-Deficit Demon +item 28 Jitterbug +item 29 Casagnova Gnome +item 30 Psychedelic Bear +item 31 Piano Cat # Slightly special fairies -item 31 Grey Goose -item 32 Ghost of Crimbo Carols -item 33 Red-Nosed Snapper -item 34 Pair of Stomping Boots !path:G-Lover -item 35 Gelatinous Cubeling -item 36 Steam-Powered Cheerleader -item 37 Obtuse Angel -item 38 Green Pixie +item 32 Grey Goose +item 33 Ghost of Crimbo Carols +item 34 Red-Nosed Snapper +item 35 Pair of Stomping Boots !path:G-Lover +item 36 Gelatinous Cubeling +item 37 Steam-Powered Cheerleader +item 38 Obtuse Angel +item 39 Green Pixie # Elemental fairies -item 39 Sleazy Gravy Fairy -item 40 Stinky Gravy Fairy -item 41 Flaming Gravy Fairy -item 42 Frozen Gravy Fairy -item 43 Spooky Gravy Fairy +item 40 Sleazy Gravy Fairy +item 41 Stinky Gravy Fairy +item 42 Flaming Gravy Fairy +item 43 Frozen Gravy Fairy +item 44 Spooky Gravy Fairy # Physical damage fairy item 44 Bowlet item 45 Crimbo Elf diff --git a/RELEASE/data/autoscend_properties.txt b/RELEASE/data/autoscend_properties.txt index c6fe7bd15a..590693139c 100644 --- a/RELEASE/data/autoscend_properties.txt +++ b/RELEASE/data/autoscend_properties.txt @@ -227,3 +227,5 @@ 224 auto_wishes 225 auto_restoreUseBloodBond 226 auto_aosolLastSkill +227 auto_skipStage2 +228 auto_skipStage4 diff --git a/RELEASE/data/autoscend_task_order.txt b/RELEASE/data/autoscend_task_order.txt index 16f737bf89..90dd48277f 100644 --- a/RELEASE/data/autoscend_task_order.txt +++ b/RELEASE/data/autoscend_task_order.txt @@ -60,9 +60,8 @@ Avatar of Jarlsberg 52 L5_slayTheGoblinKing Avatar of Jarlsberg 53 L4_batCave Avatar of Jarlsberg 54 L3_tavern Avatar of Jarlsberg 55 setSoftblockDelay allowSoftblockDelay -Avatar of Jarlsberg 56 setSoftblockShen allowSoftblockShen -Avatar of Jarlsberg 57 L13_towerAscent -Avatar of Jarlsberg 58 LX_attemptPowerLevel +Avatar of Jarlsberg 56 L13_towerAscent +Avatar of Jarlsberg 57 LX_attemptPowerLevel Legacy of Loathing 0 LX_freeCombatsTask Legacy of Loathing 1 LX_unlockPirateRealm @@ -157,18 +156,17 @@ Legacy of Loathing 81 L12_finalizeWar Legacy of Loathing 82 L12_clearBattlefield Legacy of Loathing 83 LX_koeInvaderHandler Legacy of Loathing 84 setSoftblockDelay allowSoftblockDelay -Legacy of Loathing 85 setSoftblockShen allowSoftblockShen -Legacy of Loathing 86 LX_getDigitalKey -Legacy of Loathing 87 LX_getStarKey -Legacy of Loathing 88 L12_lastDitchFlyer -Legacy of Loathing 89 LX_bugbearInvasionFinale -Legacy of Loathing 90 L13_towerNSContests -Legacy of Loathing 91 L13_towerNSHedge -Legacy of Loathing 92 L13_sorceressDoor -Legacy of Loathing 93 L13_towerNSTower -Legacy of Loathing 94 L13_towerNSNagamar -Legacy of Loathing 95 L13_towerNSFinal -Legacy of Loathing 96 LX_attemptPowerLevel +Legacy of Loathing 85 LX_getDigitalKey +Legacy of Loathing 86 LX_getStarKey +Legacy of Loathing 87 L12_lastDitchFlyer +Legacy of Loathing 88 LX_bugbearInvasionFinale +Legacy of Loathing 89 L13_towerNSContests +Legacy of Loathing 90 L13_towerNSHedge +Legacy of Loathing 91 L13_sorceressDoor +Legacy of Loathing 92 L13_towerNSTower +Legacy of Loathing 93 L13_towerNSNagamar +Legacy of Loathing 94 L13_towerNSFinal +Legacy of Loathing 95 LX_attemptPowerLevel Quantum Terrarium 0 LX_freeCombatsTask Quantum Terrarium 1 LX_unlockPirateRealm @@ -230,9 +228,8 @@ Quantum Terrarium 56 L5_slayTheGoblinKing Quantum Terrarium 57 L4_batCave Quantum Terrarium 58 L3_tavern Quantum Terrarium 59 setSoftblockDelay allowSoftblockDelay -Quantum Terrarium 60 setSoftblockShen allowSoftblockShen -Quantum Terrarium 61 L13_towerAscent -Quantum Terrarium 62 LX_attemptPowerLevel +Quantum Terrarium 60 L13_towerAscent +Quantum Terrarium 61 LX_attemptPowerLevel Zombie Slayer 0 LM_zombieSlayer Zombie Slayer 1 LX_unlockPirateRealm @@ -290,9 +287,8 @@ Zombie Slayer 52 L5_slayTheGoblinKing Zombie Slayer 53 L4_batCave Zombie Slayer 54 L3_tavern Zombie Slayer 55 setSoftblockDelay allowSoftblockDelay -Zombie Slayer 56 setSoftblockShen allowSoftblockShen -Zombie Slayer 57 L13_towerAscent -Zombie Slayer 58 LX_attemptPowerLevel +Zombie Slayer 56 L13_towerAscent +Zombie Slayer 57 LX_attemptPowerLevel default 0 LX_freeCombatsTask default 1 LX_unlockPirateRealm @@ -379,16 +375,15 @@ default 81 L12_finalizeWar default 82 L12_clearBattlefield default 83 LX_koeInvaderHandler default 84 setSoftblockDelay allowSoftblockDelay -default 85 setSoftblockShen allowSoftblockShen -default 86 LX_getDigitalKey -default 87 LX_getStarKey -default 88 L12_lastDitchFlyer -default 89 LX_bugbearInvasionFinale -default 90 L13_towerNSContests -default 91 L13_towerNSHedge -default 92 L13_sorceressDoor -default 93 L13_towerNSTower -default 94 L13_towerNSNagamar -default 95 L13_towerNSFinal -default 96 LX_attemptPowerLevel +default 85 LX_getDigitalKey +default 86 LX_getStarKey +default 87 L12_lastDitchFlyer +default 88 LX_bugbearInvasionFinale +default 89 L13_towerNSContests +default 90 L13_towerNSHedge +default 91 L13_sorceressDoor +default 92 L13_towerNSTower +default 93 L13_towerNSNagamar +default 94 L13_towerNSFinal +default 95 LX_attemptPowerLevel diff --git a/RELEASE/dependencies.txt b/RELEASE/dependencies.txt index c3ea1d1481..c3a10099e0 100644 --- a/RELEASE/dependencies.txt +++ b/RELEASE/dependencies.txt @@ -3,4 +3,4 @@ github Ezandora/Helix-Fossil Release github Ezandora/Far-Future Release github gausie/excavator github midgleyc/Voting-Booth -github Loathing-Associates-Scripting-Society/combo release +github loathers/combo release diff --git a/RELEASE/scripts/autoscend.ash b/RELEASE/scripts/autoscend.ash index eb38e1693c..23ea0ce0f4 100644 --- a/RELEASE/scripts/autoscend.ash +++ b/RELEASE/scripts/autoscend.ash @@ -199,6 +199,7 @@ void initializeSettings() { set_property("auto_doMeatsmith", false); set_property("auto_L8_ninjaAssassinFail", false); set_property("auto_L8_extremeInstead", false); + set_property("auto_L9_smutOrcPervert", false); set_property("auto_haveSourceTerminal", false); set_property("auto_hedge", "fast"); set_property("auto_hippyInstead", false); @@ -219,7 +220,6 @@ void initializeSettings() { set_property("auto_pulls", ""); // Last level during which we ran out of stuff to do without pre-completing some Shen quests. - set_property("auto_shenSkipLastLevel", 0); remove_property("auto_shenZonesTurnsSpent"); remove_property("auto_lastShenTurn"); @@ -1846,6 +1846,8 @@ boolean doTasks() auto_voteSetup(0,0,0); auto_setSongboom(); if(LX_ForceNC()) return true; + prioritizeGoose(); + if(LX_dronesOut()) return true; if(LM_bond()) return true; if(LX_calculateTheUniverse(false)) return true; rockGardenEnd(); @@ -2005,7 +2007,7 @@ void print_help_text() { print_html("Thank you for using autoscend!"); print_html("If you need to configure or interrupt the script, choose autoscend from the drop-down \"run script\" menu in your browser."); - print_html("If you want to contribute, please open an issue on Github"); + print_html("If you want to contribute, please open an issue on Github"); print_html("A FAQ with common issues (and tips for a great bug report) can be found here"); print_html("The developers also hang around on the Ascension Speed Society discord server"); print_html(""); @@ -2013,7 +2015,7 @@ void print_help_text() void sad_times() { - print_html('autoscend (formerly sl_ascend) is under new management. Soolar (the maintainer of sl_ascend) and Jeparo (the most active contributor) have decided to cease development of sl_ascend in response to Jick\'s behavior that has recently come to light. New developers have taken over maintenance and rebranded sl_ascend to autoscend as per Soolar\'s request. Please be patient with us during this transition period. Please see the readme on the github page for more information.'); + print_html('autoscend (formerly sl_ascend) is under new management. Soolar (the maintainer of sl_ascend) and Jeparo (the most active contributor) have decided to cease development of sl_ascend in response to Jick\'s behavior that has recently come to light. New developers have taken over maintenance and rebranded sl_ascend to autoscend as per Soolar\'s request. Please be patient with us during this transition period. Please see the readme on the github page for more information.'); } void safe_preference_reset_wrapper(int level) diff --git a/RELEASE/scripts/autoscend/auto_familiar.ash b/RELEASE/scripts/autoscend/auto_familiar.ash index 06d881f851..e754f650b3 100644 --- a/RELEASE/scripts/autoscend/auto_familiar.ash +++ b/RELEASE/scripts/autoscend/auto_familiar.ash @@ -449,7 +449,11 @@ boolean autoChooseFamiliar(location place) } // The World's Biggest Jerk can send us here so only use +item if we're farming sonars. - if ($location[The Batrat and Ratbat Burrow] == place && internalQuestStatus("questL04Bat") < 3) { + if ($location[The Batrat and Ratbat Burrow] == place && internalQuestStatus("questL04Bat") < 3 && auto_haveGreyGoose()) { + auto_log_info("Bringing the Grey Goose to emit some drones at a bat to get Sonar."); + famChoice = $familiar[Grey Goose]; + } + else if ($location[The Batrat and Ratbat Burrow] == place && internalQuestStatus("questL04Bat") < 3) { famChoice = lookupFamiliarDatafile("item"); } @@ -470,6 +474,13 @@ boolean autoChooseFamiliar(location place) famChoice = lookupFamiliarDatafile("item"); } + // If we have Grey Goose and we're farming bridge parts and Smut Orc Pervert is coming up, we should use the Goose to dupe the Keepsake box + if ($location[The Smut Orc Logging Camp] == place && internalQuestStatus("questL09Topping") < 1 && is_integer(($location[The Smut Orc Logging Camp].turns_spent - 1)/20) && auto_haveGreyGoose()) + { + auto_log_info("Bringing the Grey Goose to emit some drones at smut orc pervert to dupe a Box."); + famChoice = $familiar[Grey Goose]; + } + // The World's Biggest Jerk can also send us here so only use +item if we're farming bridge parts. if ($location[The Smut Orc Logging Camp] == place && internalQuestStatus("questL09Topping") < 1) { famChoice = lookupFamiliarDatafile("item"); diff --git a/RELEASE/scripts/autoscend/auto_util.ash b/RELEASE/scripts/autoscend/auto_util.ash index 1386a14c12..205f42bbf1 100644 --- a/RELEASE/scripts/autoscend/auto_util.ash +++ b/RELEASE/scripts/autoscend/auto_util.ash @@ -1619,27 +1619,6 @@ boolean inGnomeSign() return $strings[Blender, Packrat, Wombat] contains my_sign(); } -boolean allowSoftblockShen() -{ - //Some quests have a softblock on doing them because shen might need them. When we run out of things to do this softblock is released. - //Return true means the softblock is active. Return false means the softblock is released. - if(get_property("questL11Shen") == "finished") - { - return false; //shen quest is over. softblock not needed - } - - //We tell users to disable the shen softblock by setting auto_shenSkipLastLevel to 999. - //This is why we want to return < my_level() and not != my_level() - return get_property("auto_shenSkipLastLevel").to_int() < my_level(); -} - -boolean setSoftblockShen() -{ - auto_log_warning("I was trying to avoid zones that Shen might need, but I've run out of stuff to do. Releasing softblock.", "red"); - set_property("auto_shenSkipLastLevel", my_level()); - return true; -} - boolean instakillable(monster mon) { if(mon.boss) @@ -1930,6 +1909,9 @@ boolean LX_summonMonster() (lumberCount() < 30 || fastenerCount() < 30) && canSummonMonster($monster[smut orc pervert])) { // summon pervert here but handling of L9 quest will open box + if(auto_haveGreyGoose()){ + handleFamiliar($familiar[Grey Goose]); + } if(summonMonster($monster[smut orc pervert])) return true; } diff --git a/RELEASE/scripts/autoscend/autoscend_header.ash b/RELEASE/scripts/autoscend/autoscend_header.ash index edcb005828..7531107289 100644 --- a/RELEASE/scripts/autoscend/autoscend_header.ash +++ b/RELEASE/scripts/autoscend/autoscend_header.ash @@ -463,6 +463,10 @@ int auto_CombatLoversLocketCharges(); boolean auto_haveReminiscedMonster(monster mon); boolean auto_monsterInLocket(monster mon); boolean auto_fightLocketMonster(monster mon, boolean speculative); +boolean auto_haveGreyGoose(); +int gooseExpectedDrones(); +boolean dronesOut(); +void prioritizeGoose(); boolean canUseCleaver(); void juneCleaverChoiceHandler(int choice); boolean canUseSweatpants(); @@ -1163,6 +1167,7 @@ boolean LX_dolphinKingMap(); boolean LX_meatMaid(); item LX_getDesiredWorkshed(); boolean LX_setWorkshed(); +boolean LX_dronesOut(); ######################################################################################################## //Defined in autoscend/quests/optional.ash @@ -1666,8 +1671,6 @@ boolean isDesertAvailable(); boolean inKnollSign(); boolean inCanadiaSign(); boolean inGnomeSign(); -boolean allowSoftblockShen(); -boolean setSoftblockShen(); boolean instakillable(monster mon); boolean stunnable(monster mon); float combatItemDamageMultiplier(); diff --git a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage2.ash b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage2.ash index 0e1c5eeb04..a643d8fe56 100644 --- a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage2.ash +++ b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage2.ash @@ -2,6 +2,9 @@ string auto_combatDefaultStage2(int round, monster enemy, string text) { // stage 2 = enders: escape, replace, instakill, yellowray and other actions that instantly end combat string retval; + + // Skip if have drones out + if(get_property("auto_skipStage2").to_boolean()) return ""; //if we want to olfact in stage 4 then we should delay stage 2 until we olfact. //we do not want to olfact now because we should do stage 3 first to stun and/or debuff the enemy first before olfacting. @@ -24,7 +27,7 @@ string auto_combatDefaultStage2(int round, monster enemy, string text) //use industrial fire extinguisher zone specific skills string extinguisherSkill = auto_FireExtinguisherCombatString(my_location()); if(extinguisherSkill != "" && have_equipped(wrap_item($item[industrial fire extinguisher])) - //below is temp workaround for https://github.com/Loathing-Associates-Scripting-Society/autoscend/issues/1011 + //below is temp workaround for https://github.com/loathers/autoscend/issues/1011 && enemy != $monster[screambat]) { handleTracker(enemy, to_skill(substring(extinguisherSkill, 6)), "auto_otherstuff"); diff --git a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage3.ash b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage3.ash index 82cd79d030..1e9be56a82 100644 --- a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage3.ash +++ b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage3.ash @@ -2,6 +2,9 @@ string auto_combatDefaultStage3(int round, monster enemy, string text) { // stage 3 = debuff: delevel, stun, curse, damage over time string retval; + + //Unskip stage 2 + if(get_property("auto_skipStage2").to_boolean()) set_property("auto_skipStage2", false); // Path = Heavy Rains retval = auto_combatHeavyRainsStage3(round, enemy, text); @@ -33,6 +36,101 @@ string auto_combatDefaultStage3(int round, monster enemy, string text) return useSkill($skill[Tunnel Downwards]); } + //iotm skill that duplicates dropped items + //prioritize grey goose over xo and extinguisher because the drones last multiple fights until they are consumed + if(canUse($skill[Emit Matter Duplicating Drones]) && my_familiar() == $familiar[Grey Goose]) + { + boolean emitDrones = false; + boolean canExtingo = true; + if(auto_fireExtinguisherCharges() <= 30 || !canUse($skill[Fire Extinguisher: Polar Vortex], false)) + { + canExtingo = false; + } + boolean drones = gooseExpectedDrones() >= 1; //only want to try if we expect any number of drones. + + //dupe a sonar-in-a-biscuit if we're lucky, only want to try it if we need more than 1 biscuit + if((item_drops(enemy) contains $item[sonar-in-a-biscuit]) && (count(item_drops(enemy)) <= 2) && (internalQuestStatus("questL04Bat") <= 1) && drones) + { + emitDrones = true; + } + + //dupe stone wool + if((item_drops(enemy) contains $item[stone wool]) && item_amount($item[stone wool]) < 2 && drones) + { + emitDrones = true; + } + + //dupe goat cheese + if(enemy == $monster[Dairy goat] && canExtingo = false && item_amount($item[Goat Cheese]) < 3 && drones) + { + emitDrones = true; + } + + //dupe Smut Orc Keepsake + if(enemy == $monster[Smut orc pervert] && auto_autumnatonQuestingIn() != $location[The Smut Orc Logging Camp] && my_location() == $location[The Smut Orc Logging Camp] && drones) + { + emitDrones = true; + } + + //dupe some hedge trimmers if we're lucky + if(canExtingo = false && ($monsters[bearpig topiary animal, elephant (meatcar?) topiary animal, spider (duck?) topiary animal] contains enemy) && auto_autumnatonQuestingIn() != $location[Twin Peak] && hedgeTrimmersNeeded() > 1 && drones) + { + emitDrones = true; + } + + //dupe some stars/lines + if(my_location() == $location[The Hole in the Sky] && item_drops(enemy) contains $item[star] && item_drops(enemy) contains $item[line] && needStarKey() && (item_amount($item[star]) < 8 && item_amount($item[line]) < 7) && drones) + { + emitDrones = true; + } + + //dupe some blackberries + if(enemy == $monster[Blackberry bush] && drones) + { + emitDrones = true; + } + + //dupe some glark cables + if(enemy == $monster[Red butler] && drones) + { + emitDrones = true; + } + + //dupe some bowling balls if we can't use an Industrial Fire Extinguisher + if(canExtingo = false && (enemy == $monster[Pygmy bowler] && (get_property("hiddenBowlingAlleyProgress").to_int() + item_amount($item[Bowling Ball])) < 6) && drones) + { + emitDrones = true; + } + + //dupe tomb ratchets if we're lucky + if((enemy == $monster[Tomb rat king]) && ((item_amount($item[Crumbling Wooden Wheel]) + item_amount($item[Tomb Ratchet])) < 10) && drones) + { + emitDrones = true; + } + + //dupe Cursed Dragon Wishbone and Cursed Bat Paw if in AoSOL + if(($monsters[two-headed shadow bat, shadowboner shadowdagon] contains enemy) && drones) + { + emitDrones = true; + } + + //dupe GROPs + if(enemy == $monster[Green Ops Soldier] && drones){ + emitDrones = true; + } + + if(dronesOut()) //If we have drones out, let's not use the skill again + { + emitDrones = false; + } + + if(emitDrones) + { + handleTracker(enemy, $skill[Emit Matter Duplicating Drones], "auto_otherstuff"); + return useSkill($skill[Emit Matter Duplicating Drones]); + } + } + //iotm skill that can be used on any combat round, repeatedly until an item is stolen if(canUse($skill[Hugs and Kisses!]) && (my_familiar() == $familiar[XO Skeleton]) && (get_property("_xoHugsUsed").to_int() < 11)) { diff --git a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage4.ash b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage4.ash index ce0e6bfb07..a8f9a36535 100644 --- a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage4.ash +++ b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage4.ash @@ -14,6 +14,9 @@ string auto_combatDefaultStage4(int round, monster enemy, string text) // Path = The Source retval = auto_combatZombieSlayerStage4(round, enemy, text); if(retval != "") return retval; + + // Skip if have drones out + if(get_property("auto_skipStage4").to_boolean()) return ""; //sniffers are skills that increase the odds of encountering this same monster again in the current zone. if(auto_wantToSniff(enemy, my_location())) @@ -357,7 +360,7 @@ string auto_combatDefaultStage4(int round, monster enemy, string text) return useItem($item[red rocket]); } //use if next food is large in size. Currently autoConsume doesn't analyze stat gain, which would be better - //disabled until fix: https://github.com/Loathing-Associates-Scripting-Society/autoscend/issues/1053 + //disabled until fix: https://github.com/loathers/autoscend/issues/1053 //item simulationOutput = auto_autoConsumeOneSimulation("eat"); //if (simulationOutput != $item[none] && simulationOutput.fullness > 3) //{ diff --git a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage5.ash b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage5.ash index 068cf54e38..0a30b3df8a 100644 --- a/RELEASE/scripts/autoscend/combat/auto_combat_default_stage5.ash +++ b/RELEASE/scripts/autoscend/combat/auto_combat_default_stage5.ash @@ -2,6 +2,9 @@ string auto_combatDefaultStage5(int round, monster enemy, string text) { // stage 5 = kill string retval; + + //Unskip stage 4 + if(get_property("auto_skipStage4").to_boolean()) set_property("auto_skipStage4", false); // Path = Heavy Rains retval = auto_combatHeavyRainsStage5(round, enemy, text); diff --git a/RELEASE/scripts/autoscend/iotms/mr2022.ash b/RELEASE/scripts/autoscend/iotms/mr2022.ash index 55dafc3c1e..168626d901 100644 --- a/RELEASE/scripts/autoscend/iotms/mr2022.ash +++ b/RELEASE/scripts/autoscend/iotms/mr2022.ash @@ -145,6 +145,53 @@ boolean auto_fightLocketMonster(monster mon, boolean speculative) } +boolean auto_haveGreyGoose() +{ + if(auto_have_familiar($familiar[Grey Goose])) + { + return true; + } + return false; +} + +int gooseExpectedDrones() +{ + if(!auto_haveGreyGoose()) return 0; + if(my_familiar() == $familiar[Grey Goose]) + { + set_property("auto_gooseExpectedDrones", familiar_weight($familiar[Grey Goose]) - 5); + } + return get_property("auto_gooseExpectedDrones").to_int(); +} + +boolean dronesOut() //want a function to override the task order if we have drones out so as not to waste them +{ + if(!auto_haveGreyGoose()) return false; + if(get_property("gooseDronesRemaining").to_int() > 0) + { + return true; + } + return false; +} + +void prioritizeGoose() //prioritize Goose only if we still have things to get +{ + if(!auto_haveGreyGoose()) return; + if( (internalQuestStatus("questL04Bat") <= 1 && gooseExpectedDrones() < 1) || + ((item_amount($item[Stone Wool]) == 0 && have_effect($effect[Stone-Faced]) == 0 && internalQuestStatus("questL11Worship") <= 2) && gooseExpectedDrones() < 1) || + (internalQuestStatus("questL08Trapper") <= 1 && gooseExpectedDrones() < 1) || + (((internalQuestStatus("questL09Topping") >= 2 && internalQuestStatus("questL09Topping") <= 3) && get_property("twinPeakProgress").to_int() < 15) && gooseExpectedDrones() < 2) || + ((needStarKey() && (item_amount($item[star]) < 7 && item_amount($item[line]) < 6)) && gooseExpectedDrones() < 8) || + (internalQuestStatus("questL11Ron") < 5 && gooseExpectedDrones() < 2) || + ((get_property("hiddenBowlingAlleyProgress").to_int() + item_amount($item[Bowling Ball])) < 5 && gooseExpectedDrones() < 2) || + (((item_amount($item[Crumbling Wooden Wheel]) + item_amount($item[Tomb Ratchet])) < 9) && gooseExpectedDrones() < 3)) + { + set_property("auto_prioritizeGoose", true); + return; + } + set_property("auto_prioritizeGoose", false); +} + boolean canUseCleaver() { if (possessEquipment($item[June cleaver]) && can_equip($item[June cleaver]) && auto_is_valid($item[June cleaver])) { return true; @@ -761,7 +808,7 @@ void auto_checkTrainSet() } } int eight = 13; //monster level - if(monster_level_adjustment() > get_property("auto_MLSafetyLimit").to_int() && get_property("auto_MLSafetyLimit") != ""){ + if((monster_level_adjustment() > get_property("auto_MLSafetyLimit").to_int() && get_property("auto_MLSafetyLimit") != "") || get_property("auto_MLSafetyLimit").to_int() == -1){ eight = 9; //cold res, stench dmg } int turnsSinceTSConfigured = min(trainsetPosition - lastTrainsetConfiguration, 40); diff --git a/RELEASE/scripts/autoscend/paths/actually_ed_the_undying.ash b/RELEASE/scripts/autoscend/paths/actually_ed_the_undying.ash index 9537158eb0..9472dda502 100644 --- a/RELEASE/scripts/autoscend/paths/actually_ed_the_undying.ash +++ b/RELEASE/scripts/autoscend/paths/actually_ed_the_undying.ash @@ -1544,16 +1544,6 @@ boolean LM_edTheUndying() return true; } - if (!have_skill($skill[Even More Elemental Wards])) { - // if we don't have the last Elemental Resistance Upgrade, we still need Ka - // Thus we shouldn't block quests that Shen might request as almost all of them are Ka zones. - if(allowSoftblockShen()) { - auto_log_warning("I was trying to avoid zones that Shen might need, but I still need Ka for upgrades.", "red"); - set_property("auto_shenSkipLastLevel", my_level()); - return true; - } - } - // Crush the jackass adventurer! if (L13_ed_towerHandler()) { diff --git a/RELEASE/scripts/autoscend/paths/low_key_summer.ash b/RELEASE/scripts/autoscend/paths/low_key_summer.ash index c471ccd500..4d58b80e01 100644 --- a/RELEASE/scripts/autoscend/paths/low_key_summer.ash +++ b/RELEASE/scripts/autoscend/paths/low_key_summer.ash @@ -600,13 +600,6 @@ boolean LX_lowkeySummer() { // Make sure to unlock Menagerie if it wasn't done while getting Knob labinet key if (LX_unlockKnobMenagerie()) { return true; } - // Release the softblock on quests that are waiting for Shen quest. - // If anyone ever gets this far in this path I will be both surprised and weirdly impressed. - if (my_level() > get_property("auto_shenSkipLastLevel").to_int() && get_property("questL11Shen") != "finished") { - auto_log_warning("I was trying to avoid zones that Shen might need, but I've run out of stuff to do.", "red"); - set_property("auto_shenSkipLastLevel", my_level()); - return true; - } // Make sure to go to war if (L12_lastDitchFlyer()) { return true; } diff --git a/RELEASE/scripts/autoscend/paths/wildfire.ash b/RELEASE/scripts/autoscend/paths/wildfire.ash index 2b0a23cf76..88ca7f38e0 100644 --- a/RELEASE/scripts/autoscend/paths/wildfire.ash +++ b/RELEASE/scripts/autoscend/paths/wildfire.ash @@ -458,7 +458,7 @@ boolean LX_wildfire_water() { abort("Due to tracking issues you need to manually acquire the necessary war outfit and run me again"); // below is code for automation that is not functional due to mafia not tracking fire levels correctly. When fixed upstream remove the the abort and uncomment the code -// https://github.com/Loathing-Associates-Scripting-Society/autoscend/issues/892#issuecomment-934059485 +// https://github.com/loathers/autoscend/issues/892#issuecomment-934059485 // if(auto_warSide() == "fratboy") // { // LX_wildfire_hose($location[Wartime Frat House (Hippy Disguise)]); diff --git a/RELEASE/scripts/autoscend/quests/level_04.ash b/RELEASE/scripts/autoscend/quests/level_04.ash index 72197f4587..e0db35c69e 100644 --- a/RELEASE/scripts/autoscend/quests/level_04.ash +++ b/RELEASE/scripts/autoscend/quests/level_04.ash @@ -61,6 +61,9 @@ boolean L4_batCave() { buffMaintain($effect[Queso Fustulento], 10, 1, 10); buffMaintain($effect[Tricky Timpani], 30, 1, 10); + if(auto_haveGreyGoose() && $location[The Boss Bat's Lair].turns_spent >=4){ + handleFamiliar($familiar[Grey Goose]); + } } bat_formWolf(); addToMaximize("10meat"); @@ -91,6 +94,9 @@ boolean L4_batCave() auto_log_debug("Delaying Batrat Burrow in case of Shen."); return false; } + if(auto_haveGreyGoose()){ + handleFamiliar($familiar[Grey Goose]); + } autoAdv($location[The Batrat and Ratbat Burrow]); return true; } @@ -103,6 +109,9 @@ boolean L4_batCave() return false; } bat_formBats(); + if(auto_haveGreyGoose()){ + handleFamiliar($familiar[Grey Goose]); + } autoAdv($location[The Batrat and Ratbat Burrow]); return true; } @@ -117,5 +126,8 @@ boolean L4_batCave() } bat_formBats(); + if(auto_haveGreyGoose()){ + handleFamiliar($familiar[Grey Goose]); + } return autoAdv($location[Guano Junction]); } diff --git a/RELEASE/scripts/autoscend/quests/level_07.ash b/RELEASE/scripts/autoscend/quests/level_07.ash index 85d5b7ad0f..e9f8eb1357 100644 --- a/RELEASE/scripts/autoscend/quests/level_07.ash +++ b/RELEASE/scripts/autoscend/quests/level_07.ash @@ -346,6 +346,9 @@ boolean L7_crypt() { buffMaintain($effect[Queso Fustulento], 10, 1, 10); buffMaintain($effect[Tricky Timpani], 30, 1, 10); + if(auto_haveGreyGoose()){ + handleFamiliar($familiar[Grey Goose]); + } } acquireHP(); diff --git a/RELEASE/scripts/autoscend/quests/level_08.ash b/RELEASE/scripts/autoscend/quests/level_08.ash index c848e3fa93..62ebb548d8 100644 --- a/RELEASE/scripts/autoscend/quests/level_08.ash +++ b/RELEASE/scripts/autoscend/quests/level_08.ash @@ -273,10 +273,15 @@ boolean L8_getGoatCheese() { auto_sourceTerminalEducate($skill[Extract], $skill[Duplicate]); } + if(auto_haveGreyGoose() && item_amount($item[Goat Cheese]) >= 2){ + auto_log_info("Bringing the Grey Goose to emit some drones at a Dairy Goat for cheese, Gromit."); + handleFamiliar($familiar[Grey Goose]); + } if(canSniff($monster[Dairy Goat], $location[The Goatlet]) && auto_mapTheMonsters()) { auto_log_info("Attemping to use Map the Monsters to olfact a Dairy Goat."); } + boolean retval = autoAdv($location[The Goatlet]); auto_sourceTerminalEducate($skill[Extract], $skill[Portscan]); return retval; diff --git a/RELEASE/scripts/autoscend/quests/level_09.ash b/RELEASE/scripts/autoscend/quests/level_09.ash index 3e8425e7a5..9b95296348 100644 --- a/RELEASE/scripts/autoscend/quests/level_09.ash +++ b/RELEASE/scripts/autoscend/quests/level_09.ash @@ -836,6 +836,10 @@ boolean L9_twinPeak() return false; } } + if(auto_haveGreyGoose()){ + auto_log_info("Bringing the Grey Goose to emit some drones to get some hedge trimmers."); + handleFamiliar($familiar[Grey Goose]); + } return autoAdv($location[Twin Peak]); } diff --git a/RELEASE/scripts/autoscend/quests/level_11.ash b/RELEASE/scripts/autoscend/quests/level_11.ash index 546505428d..c1284a1388 100644 --- a/RELEASE/scripts/autoscend/quests/level_11.ash +++ b/RELEASE/scripts/autoscend/quests/level_11.ash @@ -169,11 +169,6 @@ boolean[location] shenSnakeLocations(int day, int n_items_returned) boolean[location] shenZonesToAvoidBecauseMaybeSnake() { - if (!allowSoftblockShen()) - { - boolean[location] empty; - return empty; - } if (get_property("shenInitiationDay").to_int() > 0) { int day = get_property("shenInitiationDay").to_int(); @@ -186,11 +181,9 @@ boolean[location] shenZonesToAvoidBecauseMaybeSnake() boolean[location] zones_to_avoid; if (my_level() < 11) { - //if it's day 1, don't count this day's snakes since it's leaving it until day 2 - int fromThisDay = (my_daycount() == 1) ? 1 : 0; //if level 10, assume shen today or tomorrow, otherwise up to two days from now int beforeThatDay = (my_level() >= 10) ? 2 : 3; - for (int day=fromThisDay; day 0 && auto_haveGreyGoose() && !possessEquipment($item[Blackberry Galoshes]) && item_amount($item[Blackberry]) < 2 && !in_darkGyffte()){ + auto_log_info("Bringing the Grey Goose to emit some drones at a blackberry bush."); + handleFamiliar($familiar[Grey Goose]); + } + boolean advSpent = autoAdv($location[The Black Forest]); //For people with autoCraft set to false for some reason if(item_amount($item[Reassembled Blackbird]) == 0 && creatable_amount($item[Reassembled Blackbird]) > 0) @@ -1356,7 +1353,13 @@ boolean L11_unlockHiddenCity() if(item_amount($item[Stone Wool]) == 0 && have_effect($effect[Stone-Faced]) == 0 && canSummonMonster($monster[Baa\'baa\'bu\'ran])) { //attempt to summon before using a clover - handleFamiliar("item"); + if(auto_haveGreyGoose()){ + auto_log_info("Bringing the Grey Goose to emit some drones at a Sheep carving."); + handleFamiliar($familiar[Grey Goose]); + } + else { + handleFamiliar("item"); + } addToMaximize("20 item 400max"); if(summonMonster($monster[Baa\'baa\'bu\'ran])) { @@ -1898,6 +1901,11 @@ boolean L11_hiddenCity() auto_log_info("Bringing the Camel to spit on a Pygmy Bowler for bowling balls."); handleFamiliar($familiar[Melodramedary]); } + if (auto_haveGreyGoose() && get_property("hiddenBowlingAlleyProgress").to_int() < 3) + { + auto_log_info("Bringing the Grey Goose to emit some drones at a Pygmy Bowler for bowling balls."); + handleFamiliar($familiar[Grey Goose]); + } if(item_amount($item[Bowling Ball]) > 0 && get_property("hiddenBowlingAlleyProgress").to_int() == 5) { set_property("auto_nextEncounter","ancient protector spirit (The Hidden Bowling Alley)"); @@ -2481,6 +2489,10 @@ boolean L11_ronCopperhead() auto_log_info("Bringing the Camel to spit on a Red Butler for glark cables."); handleFamiliar($familiar[Melodramedary]); } + if(auto_haveGreyGoose()){ + auto_log_info("Bringing the Grey Goose to emit some drones at a Red Butler for glark cables."); + handleFamiliar($familiar[Grey Goose]); + } if(internalQuestStatus("questL11Ron") == 4) { set_property("auto_nextEncounter","Ron \"The Weasel\" Copperhead"); @@ -2512,11 +2524,7 @@ boolean L11_shenStartQuest() { return false; } - if (my_daycount() < 2 || !allowSoftblockShen()) - { - // if you're fast enough to open it on day 1, maybe wait until day 2 - return false; - } + auto_log_info("Going to see the World's Biggest Jerk about some snakes and stones and stuff.", "blue"); if (autoAdv($location[The Copperhead Club])) { @@ -3146,6 +3154,12 @@ boolean L11_unlockEd() auto_log_info("Attemping to use Map the Monsters to olfact a Tomb Rat."); } + if(auto_haveGreyGoose() && item_amount($item[Tangle of rat tails]) >= 1) + { + auto_log_info("Bringing the Grey Goose to emit some drones at some rat kings."); + handleFamiliar($familiar[Grey Goose]); + } + return autoAdv(1, $location[The Middle Chamber]); } diff --git a/RELEASE/scripts/autoscend/quests/level_12.ash b/RELEASE/scripts/autoscend/quests/level_12.ash index e479344f43..ab665b6342 100644 --- a/RELEASE/scripts/autoscend/quests/level_12.ash +++ b/RELEASE/scripts/autoscend/quests/level_12.ash @@ -317,6 +317,10 @@ WarPlan auto_bestWarPlan() { considerNuns = false; } + if(get_property("auto_ignoreFlyer").to_boolean()) + { + considerArena = false; + } // Calculate the adventure cost of doing each sidequest. int advCostArena = 0; //Arena actual cost is 0 adventures... unless you mess it up. TODO: check if messed up. @@ -545,6 +549,11 @@ boolean warAdventure() if(!get_property("auto_hippyInstead").to_boolean()) { + //Commented out until Green smoke bomb support is added + if(auto_warEnemiesRemaining() <= 600 && auto_haveGreyGoose()){ + auto_log_info("Bringing the Grey Goose to emit some drones at a GrOPs hopefully."); + handleFamiliar($familiar[Grey Goose]); + } if(!autoAdv(1, $location[The Battlefield (Frat Uniform)])) { set_property("hippiesDefeated", get_property("hippiesDefeated").to_int() + 1); diff --git a/RELEASE/scripts/autoscend/quests/level_13.ash b/RELEASE/scripts/autoscend/quests/level_13.ash index d8b03f0db3..93a15cdc22 100644 --- a/RELEASE/scripts/autoscend/quests/level_13.ash +++ b/RELEASE/scripts/autoscend/quests/level_13.ash @@ -263,6 +263,10 @@ boolean LX_getStarKey() set_property("choiceAdventure1221", 2 + (my_ascensions() % 2)); } } + if(auto_haveGreyGoose()){ + auto_log_info("Bringing the Grey Goose to emit some drones at some Constellations."); + handleFamiliar($familiar[Grey Goose]); + } return autoAdv(1, $location[The Hole In The Sky]); } diff --git a/RELEASE/scripts/autoscend/quests/level_any.ash b/RELEASE/scripts/autoscend/quests/level_any.ash index f3333b7c71..0a98fb4409 100644 --- a/RELEASE/scripts/autoscend/quests/level_any.ash +++ b/RELEASE/scripts/autoscend/quests/level_any.ash @@ -891,3 +891,93 @@ boolean LX_ForceNC() return false; } } + +boolean LX_dronesOut() +{ + if(!dronesOut()) + { + return false; + } + boolean canExtingo = true; + if(auto_fireExtinguisherCharges() <= 30 || !canUse($skill[Fire Extinguisher: Polar Vortex], false)) + { + canExtingo = false; + } + auto_log_info("Have drones out so re-routing to not waste"); + + //where to go to. Not handling Smut Orc Keepsake, Blackberry Bush due to adventuring conditions required. If they happen to show up, they are handled in auto_combat + if(needStarKey() && (item_amount($item[star]) < 7 && item_amount($item[line]) < 6) && zone_isAvailable($location[The Hole In The Sky])) + { + auto_log_info("Going to HiTS"); + if(get_property("auto_priorLocation").to_location() != $location[The Hole In The Sky]) + { + set_property("auto_skipStage2", true); + set_property("auto_skipStage4", true); + } + return autoAdv($location[The Hole In The Sky]); //Stars and Lines + } + if (get_property("middleChamberUnlock").to_boolean() && ((item_amount($item[Crumbling Wooden Wheel]) + item_amount($item[Tomb Ratchet])) < 10) && item_amount($item[Tangle of rat tails]) >= 1 && zone_isAvailable($location[The Middle Chamber])) + { + auto_log_info("Going to Middle Chamber"); + if(get_property("auto_priorLocation").to_location() != $location[The Middle Chamber]) + { + set_property("auto_skipStage4", true); //don't set skipStage2 because rat king + } + return autoAdv($location[The Middle Chamber]); //Tomb ratchets + } + if((internalQuestStatus("questL09Topping") >= 2 && internalQuestStatus("questL09Topping") <= 3) && get_property("twinPeakProgress").to_int() < 15 && zone_isAvailable($location[Twin Peak])) + { + auto_log_info("Going to Twin Peak"); + if(get_property("auto_priorLocation").to_location() != $location[Twin Peak]) + { + set_property("auto_skipStage2", true); + set_property("auto_skipStage4", true); + } + return autoAdv($location[Twin Peak]); //Hedge trimmers + } + if (internalQuestStatus("questL11Ron") > 1 && internalQuestStatus("questL11Ron") < 5 && zone_isAvailable($location[The Red Zeppelin])) + { + auto_log_info("Going to the Red Zeppelin"); + if(get_property("auto_priorLocation").to_location() != $location[The Red Zeppelin]) + { + set_property("auto_skipStage4", true); //don't set skipStage2 because glark cables + } + return autoAdv($location[The Red Zeppelin]); //Glark cables + } + if(canExtingo = false && (get_property("hiddenBowlingAlleyProgress").to_int() + item_amount($item[Bowling Ball])) < 6 && zone_isAvailable($location[The Hidden Bowling Alley])) + { + auto_log_info("Going to the Hidden Bowling Alley"); + if(get_property("auto_priorLocation").to_location() != $location[The Hidden Bowling Alley]) + { + set_property("auto_skipStage2", true); + set_property("auto_skipStage4", true); + } + return autoAdv($location[The Hidden Bowling Alley]); //Bowling balls + } + if(internalQuestStatus("questL04Bat") <= 1 && zone_isAvailable($location[The Batrat and Ratbat Burrow])) + { + auto_log_info("Going to the Batrat and Ratbat Burrow"); + if(get_property("auto_priorLocation").to_location() != $location[The Batrat and Ratbat Burrow]) + { + set_property("auto_skipStage2", true); + set_property("auto_skipStage4", true); + } + return autoAdv($location[The Batrat and Ratbat Burrow]); //Sonar-in-a-Biscuit + } + if(internalQuestStatus("questL08Trapper") == 1 && zone_isAvailable($location[The Goatlet])) + { + auto_log_info("Going to the Goatlet"); + if(get_property("auto_priorLocation").to_location() != $location[The Goatlet]) + { + set_property("auto_skipStage2", true); + set_property("auto_skipStage4", true); + } + return autoAdv($location[The Goatlet]); //Goat cheese + } + if(item_amount($item[Stone Wool]) == 0 && have_effect($effect[Stone-Faced]) == 0 && canSummonMonster($monster[Baa\'baa\'bu\'ran]) && internalQuestStatus("questL11Worship") < 3 && my_level() >= 11) + { + auto_log_info("Summoning Baa baa buran"); + return summonMonster($monster[Baa\'baa\'bu\'ran]); //Stone wool + } + return false; +} diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index b0a5aed478..ebc69b6064 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -36,7 +36,7 @@ The best place to ask questions is the [autoscend channel on the Ascension Speed ## Reporting Bugs and Feature Requests -Before submitting bugs or feature request please ask for help in the [autoscend channel on the Ascension Speed Society discord server](https://discord.gg/96xZxv3) and search through the [issues page](https://github.com/Loathing-Associates-Scripting-Society/autoscend/issues) to see if it is already reported. If you find a similar issue to yours feel free to add extra details or just a +1 to it. +Before submitting bugs or feature request please ask for help in the [autoscend channel on the Ascension Speed Society discord server](https://discord.gg/96xZxv3) and search through the [issues page](https://github.com/loathers/autoscend/issues) to see if it is already reported. If you find a similar issue to yours feel free to add extra details or just a +1 to it. Finally, if no one on discord can help your you cant find a similar issue, read and fill out the [issue template](./ISSUE_TEMPLATE.md) that appears when you open a new issue. @@ -55,7 +55,7 @@ Working on your first open source project or pull request? Her are some helpful You can request access to the project which will let you push working branches to the project, but you can also just (or even prefer) to fork the repository and submit pull requests from your fork. **main** branch: -The main branch is the current "release" of autoscend. When someone does `git checkout https://github.com/Loathing-Associates-Scripting-Society/autoscend.git` in KoLMafia, they are getting the main branch scripts. +The main branch is the current "release" of autoscend. When someone does `git checkout loathers/autoscend` in KoLMafia, they are getting the main branch scripts. `main` is restricted and can only be merged into with a pull request which requires approval from 1 other developer (though admins can by pass this requirements if they need to). @@ -64,7 +64,7 @@ For all of our sanity a good git work flow is something like this: 2. `git pull` 3. `git checkout -b my-cool-new-feature` 4. change code, add and commit files with [good commit messages][5] -5. when ready, submit a [pull request](https://github.com/Loathing-Associates-Scripting-Society/autoscend/compare/beta...Loathing-Associates-Scripting-Society:main) for your `my-cool-new-feature` branch against the `main` branch +5. when ready, submit a [pull request](https://github.com/loathers/autoscend/compare/beta...loathers:main) for your `my-cool-new-feature` branch against the `main` branch ### Merging Pull Requests When closing pull requests, please use the "Squash and Merge" option when merging the branch. This creates much cleaner git commit histories and make it much easier to cherry-pick features from one branch to another. After the merge its also good practice to delete the branch from the remote, again trying to keep the repository clean. diff --git a/docs/PULL_REQUEST_TEMPLATE b/docs/PULL_REQUEST_TEMPLATE index 26cd2d3887..fc956e6a96 100644 --- a/docs/PULL_REQUEST_TEMPLATE +++ b/docs/PULL_REQUEST_TEMPLATE @@ -1,6 +1,6 @@ # Description -Please include a summary of the change. Pull requests should always be against the [main branch](https://github.com/Loathing-Associates-Scripting-Society/autoscend/tree/main). +Please include a summary of the change. Pull requests should always be against the [main branch](https://github.com/loathers/autoscend/tree/main). If it addresses a particular issue, please put the issue numbers below (see also [Closing Issues Using Keywords](https://help.github.com/en/articles/closing-issues-using-keywords)). @@ -15,4 +15,4 @@ Testing ASH scripts is tricky and generally involves you doing multiple runs wit - [ ] My code follows the style guidelines of this project. - [ ] I have performed a self-review of my own code. - [ ] I have commented my code, particularly in hard-to-understand areas. -- [ ] I have based my pull request against the [main branch](https://github.com/Loathing-Associates-Scripting-Society/autoscend/tree/main) or have a good reason not to. +- [ ] I have based my pull request against the [main branch](https://github.com/loathers/autoscend/tree/main) or have a good reason not to.