My personal Meat farming script

It's not a priority by any means but would you consider adding the following to VMF if Oliver's Place is available:
  • Run the three free combats in "An Unusually Quiet Barroom Brawl"
  • Visit "A Pool Table"
  • Use a government-per-diem if there is one in inventory
 
Would you consider the use of +meat items gained during adventuring to be within the scope of VMF? I'm thinking of the new "Flapper fly" drop from the S.I.T. Course Certificate (+60% meat drop for twenty turns).
 
Last edited:
That sounds like something a Mood could handle for you:

Trigger On: When an effect is lost
Check For: Flapper Dancin'
Command: use 1 flapper fly

Currently, VMF does not track what items you gain while adventuring.
It would be relatively cheap (computationally) to save inventory at the start and compare at the end to see what items has been gained - just as it does for Meat.
Doing it after each turn would be the same calculation - just multiplied by the number of turns.

There's another farming script which apparently counts gained items as part of your profits. That's fair, although one wonders how they are valued. (5th cheapest) mall price? I actually find that pretty dubious, since, unless the item is priced at mall minimum, the current mall price is not "what the item will sell for". It is "what the item is not currently selling for" - since if it's in the mall, it has not been sold. :)

This script COULD track items gained across the whole run and do some sort of analysis/valuation at the end, but tracking items gained after each adventure and doing ... something ... with that info seems out of scope.
 
By the way - I have a big list of things I want to do for this (and other) scripts, but my coding mojo is currently consumed by my Standard runs - 3 days apiece, done manually in the Relay Browser - and fixing bugs/adding new content as I observe it. It's a lot of time, especially since I am now chaining the runs (starting the next run the same day I finish the previous). I haven't even update VGH to handle the Rock Garden, yet, although that's probably first on my agenda, once I return to staying in aftercore for a while.
 
That sounds like something a Mood could handle for you:
I have not done autumn leaves with a mood because I didn't want a leaf to be purchased if there were not any in inventory but I did not want the mood to fail when there were none available.

It does seem like the solution would be to make the command, in the mood, a script. The script uses the item if available. The issue might be if the item remains unavailable because the script would be called every time the mood was checked but that could be coded around if it is a problem.
 
That sounds like something a Mood could handle for you
I was thinking of something more like a between battle script. A mood check would fire, and fail as @fronobulax mentioned, even if the character had no Flapper flies in inventory while a between battle script would "notice" that a Flapper fly had dropped and then use it.
 
I was thinking of something more like a between battle script. A mood check would fire, and fail as @fronobulax mentioned, even if the character had no Flapper flies in inventory while a between battle script would "notice" that a Flapper fly had dropped and then use it.
<veer>I tend to avoid between battle scripts because I am already using someone else's and I don't want to maintain local modifications and I have not been motivated enough to write BBS that is a wrapper and thus adding a new BBS is just one line.

I am lazy and my autumn-aton script is an unconditional trigger in my mood. The first thing it does is check inventory and exits if the autumn-aton is not in inventory. There is no noticeable performance hit in my environment.
 
I use zarqon's BBB and, while I am also lazy, @zarqon doesn't update it very frequently so that's less of a concern (but it is still a concern). I haven't gotten around to throwing together a wrapper script. I think the only thing that I've done that for is Bale's NewLife.
 
Today I migrated this from sourceforge using SVN to github using GIT.
Future updates will be pushed only to the latter.

I suggest you delete the SVN version (make sure you have KoLmafia r27304!) and then install it via GIT:

Code:
git checkout Veracity0/meat-farm
 
Revision 3 (!) has this:

Code:
// You can replace an item in your workshed once per day. Therefore you can benefit from two such
// items per day: the one you start with and the one you switch to. You can configure two items and
// we will cycle through them:
//
// Day 1: start with item 1
//        do stuff with it
//        switch to item 2
//        do stuff with it
// Day 2: start with item 2
//        do stuff with it
//        switch to item 1
//        do stuff with it
//
// What, exactly we "do" with each item, and when we "switch" depends on which two items we use.
//
// We know how to use the following workshed items:
//
//        model train set    ~1,600 Meat every 8 turns (200 mpa)
//                This should be installed before running fights
//        spinning wheel     level cubed (max 30 = 27,000) Meat once per day (<75 mpa)
//                This should be used immediately whenever it is in the workshed
//                It should be installed after turns have been run, since gaining
//                levels (until Level 30) will improve its yield
//        portable Mayo Clinic    Mayoflex = +1 adventure per food (10? extra turns)
//                This should be used for all eating before switching to a different
//                item. That implies it is usable only when you can have it in your
//                workshed before you eat: every other day with a model train set or
//                every day with a spinning wheel.
//
// Depending on your diet, fullness capacity, and expected MPA, Mayo Clinic is likely the weakest.
// I recommend the model train set and spinning wheel, but you may not have both of those.
// You may not have more than one workshed item - or even one.
//
// Therefore, the default configuration lists three items, and we will use the best two we find.
// If you have none (or only one), we will not swap workshed items.
The property to control it:

Code:
item_list workshed_cycle = define_property( "VMF.WorkshedCycle", "item", "model train set|spinning wheel|portable Mayo Clinic", "list" );

We had existing code to handle the portable Mayo clinic, the spinning wheel is configurable as part of "breakfast", and we were happy to passively let your model train set give stats and meat and such, but now you can mix and match and use any two of those (if you have two) or one (if that's all you have).

I like the following for the model train set:

1) Brawn Silo - muscle substats
2) Brain Silo - mysticality substats
3) Groin Silo - moxie substats
4) Viewing Platform - muscle/mysticality/moxie substats
5) Coal Hopper - doubles next stop
6) Meat Mine Sluice - meat
7) Logging Camp - muscle/mysticality/moxie substats
8) Water Tower, Fizzy - 8 turns of MP regen

but the script does not configure it; it uses whatever setup you have
 
Revision 4:
  1. 3 free fights from Speakeasy
  2. 1 free fight from molehill mountain.
    (Unless you lose; make sure your CCS can handle it!)
  3. Pull Guzzlr tablet and molehill mountain, if available and not in inventory
  4. Get free Guzzler cocktail set even if you have maxed out MP regen from Platinum deliveries
 
Would you entertain two small additions to the Speakeasy handling:
  • Getting meat from the pool table
  • Using a per-diem if one is either gained in a fight or is already in inventory if not
 
They are unrelated to Free Fights, so I didn't get them this time.
Those are on my To Do list.

The pool table is a little tricky in that you want to maximize Pool Skill - and 10 inebriety is the sweet spot for that.
 
Revision 6 (!) has the following:

Support for Veracity's ShadowRift script.

Two changes:

1) (Optionally) use first casting of Sweet Synthesis to get Synthesis: Collection for Item Drop: +150

Code:
// Should we always do one Item Drop synthesis so that it is in effect for free fights?

boolean synthesize_item_drop_for_free_fights = define_property( "VMF.SynthesizeItemDropForFreeFights", "boolean", "true" ).to_boolean();

2) Call ShadowRift up to three times for valuable prizes.

With default configuration, you get:
- Spend 3 shadow items and get at 2-3 of three different items - including the one you spent 3 of.
- 10 free fights (stats/items/Meat) - which can drop more of those same three items.
- 30 turns of Shadow Waters (Init/Item Drop/Meat Drop +100)

Code:
// If you want to perform daily tasks for Rufus every day -- up to 11 free combats and a reward -
// specify one or two commands to pass to Veracity's ShadowRift script.
//
// Try "ShadowRift help" to see your options.
//
// The script will maximize your equipment for item drop.
// You can specify additional required equipment or desired modifier
// parameters if you wish via a setting in the Shadow Rift script.
//
// You must set uo your CCS (via a consult script, perhaps) to handle
// any combats that you may encounter during your exploration.
//
// This script will invoke ShadowRift.ash up to three times:
//
// 1) ShadowRift check
// -> visits Rufus to see what he's looking for. ITEM <- the shadow items he wants
// 2) ShadowRift items ITEM waters onlyfree buy notallfree
// -> accepts the "items" quest and fulfills it using ITEM from inventory or the mall.
// -> You now have 11 turns of Shadow Affinity and 30 turns of Shadow Waters (Init/Meat/Items +100)
// 3) ShadowRift artifact ITEM forest onlyfree allfree
// -> Uses up 11 turns of Shadow Affinity.
// -> Possibly gain a shadow item from each free fight.
// -> Gains 2-3 of 3 different shadow items, including the one you spent.
//
// Net result: 10 free fights (stats/items/Meat), spent 3 items to gain 6-9 items, 30 turns of useful buff.
//
// Potential ways to customize:
//
// 1) No Shadow Rift automation? Set the two properties to "".
// 2) No buying items? Set the first property to "" and change ITEM in the second to "random" (or your choice of rift).
// 3) No items and get buff, not items? See 2, and also change "forest" to "waters".
// 4) Your CCS can reliably kill a shadow boss? Change "artifact" to "entity" for a free fight and 2 more shadow items.

string shadow_rift_command1 = define_property( "VMF.ShadowRiftCommand1", "string", "items ITEM waters buy onlyfree notallfree" );
string shadow_rift_command2 = define_property( "VMF.ShadowRiftCommand2", "string", "artifact ITEM forest onlyfree allfree" );

ShadowRift will be called as the first of available "free fights" so that Shadow Waters will be in effect for subsequent free fights - and Spacegate and Gingerbread City, if you are using those.
 
Revision 7 will use a government per-diem, once per day (duh), if you have one available.
Whether or not one dropped today; we'll pull one, if necessary.

It will also lubricate your Robortender before running free fights if it is either your Meat or Item familiar.
 
Revision 8 will ask the cursed monkey's paw to cast wishes for (or at) you.
This will happen just before running free turns, since you can ask for (potentially useful) effects.

Code:
// *** cursed monkey's paw *****

// Which wishes to request
//
// List up to five wishes, separated by "|".
// Each wish can be:
//
//   item ITEM
//   effect EFFECT
//   wish WISH
//
// If you list fewer than five, the last one listed will be repeated until you run out.

string_list monkey_paw_wishes = define_property( "VMF.MonkeyPawWishes", "string", "", "list" );
 
Revision 9 dos this:

1) Don't open a chat window in order to use built-in faxbot support. Instead, use chat_private to communicate directly with faxbots and detect that a fax has arrived by simply trying to receive it.

This could work better with a little more support from KoLmafia. In particular, support for finding which faxbot(s) have the desired monster. Later, perhaps.

2) Faxed monster is configurable. You may want Meat - or items. Add configuration to specify which:
Code:
// Reason for faxing monster
//
//   meat        Before running regular turns with meat drop effects active
//   items       After free fights with item drop effects active

string fax_goal = define_property( "VMF.FaxGoal", "string", "meat" );
If "meat", we'll fax after all the Meat buffs are done, as before.
If "items", we'll fax in after free fights are done (which is after item buffs are done).
At least two monsters that _I_ like to fax in are free fights. :)
 
The faxing changes "broke" things for the character who has never visited the Altar of Literacy and thus cannot chat. It went into a probably infinite loop checking for an embezzler. It got the void monster which was already there. When I manually used the void monster the script was usable because it knew it couldn't get another copy. AFAIK I am using VMF defaults.

Switching to chat_private seems to have introduced this since previously the failure to open chat was detected.
 
Back
Top