My personal Meat farming script

I just noticed this...

Code:
    // Optionally choose an endowment
    int endowment_option =
	lov_endowment == LOV_ENAMORANG ? 1 :
	lov_endowment == LOV_EMOTIONIZER ? 2 :
	lov_endowment == LOV_EXTRATERRESTRIAL_CHOCOLATE ? 3 :
	lov_endowment == LOV_ECHINACEA_BOUQUET ? 4 :
	lov_endowment == LOV_ELEPHANT ? 5 :
	have_space_jellyfish && lov_endowment == TOAST ? 6 :
	7;

    page = visit_url( "choice.php?pwd&whichchoice=1228&option=3" );

That doesn't seem like a real choice! LoL.

BTW, do you have a reason not to use run_choice() instead of visit_url()? Just a matter of your personal preference? I find that run_choice() is more human readable.
 
Heh. I had to study this to understand what you meant. Fixed in revision 25.

I used hard-wired visit_url calls because I ran through the Tunnel of L.O.V.E. with debugging on and copied all the URLS from the DEBUG log and basically just copied them into the script verbatim, except for changing to run_combat(). using run_choice() would have fixed this bug, at least. I guess that since I know which choice # it is, I like specifying it, rather than having run_choice() extract it, but that's a pretty feeble reason.

I'll convert and try it tomorrow and commit the change after testing...
 
Or not. I was curious about what run_choice() does.

Code:
	public static Value run_choice( Interpreter interpreter, final Value decision )
	{
		int option = (int) decision.intValue();
		String response = null;
		if ( ( !ChoiceManager.handlingChoice && !FightRequest.choiceFollowsFight ) || ChoiceManager.lastResponseText == null ||
		     option == 0 )
		{
			// If you are not in a choice, or you send 0, just return the last response
			response = ChoiceManager.lastResponseText;
		}
		else if ( option == -1 )
		{
			// Try to automate using existing settings
			response = ChoiceManager.gotoGoal();
		}
		else if ( option > 0 )
		{
			String message = "Submitting option " + option + " for choice " + ChoiceManager.getLastChoice();
			RequestLogger.printLine( message );
			RequestLogger.updateSessionLog( message );
			// Submit the option chosen
			response = ChoiceManager.processChoiceAdventure( option, false );
		}
		return new Value( DataTypes.BUFFER_TYPE, "", new StringBuffer( response == null ? "" : response ) );
	}
- It logs a message to the gCLI and session log: "Submitting option X for choice Y"
- It calls ChoiceManager.processChoiceAdventure to submit it. That "false" is "tryToAutomate", So, it doesn't try to process the result and follow choice chains and such. That is good.

With the exception of printing an extra message, this does essentially what the visit_url does, with the extra convenience (?) of you not having to know exactly which choice # it is - although you presumably know that anyway, given that you know the option you want to use.

I wonder why it prints the message? run_combat() doesn't print any extra messages for submitting (and automating) a fight.
 
Revision 26 uses run_choice(), as appropriate. Here is my session log:

Code:
Visiting The Towering Inferno Discotheque
Submitting option 6 for choice 1090
Took choice 1090/6: Go to the fifth floor
choice.php?whichchoice=1090&option=6&pwd
You gain 5 Adventures
I think that "Submitting option 6 for choice 1090" is OK for the gCLI, but it seems redundant in the session log.

I also did a lot of validation of various configurable parameters before using them; submitting bad choices, for example, would cause problems. I'm going to validate all the configuration before running anything and will list all errors and abort to let you fix them, if there are errors. That's my next project.

Here is the current To Do list:

Code:
// ****** To Do **************
//
// Validate all VMF properties/settings at startup
//
// Bug: Use sufficient Inigo's when crafting SHC drinks to avoid spending turns
// Bug: Don't let Turtle Taming NCs satisfy the "1 choice" condition in Barf Mountain.
//
// Make DMT choice configurable
// Clan Pool Table and Swimming Pool
// Improved Garden harvesting (goals for all types of crop)
// Handle additional disco goals; perhaps reducing drunk is worth more than 5 adventures
//    In any case, since it is configurable, use it even if goal is not turns
// Platinum Yendorian Express Card
// Make moods configurable (Farming, Gingerbread City)
// Consider using Extract and configuring daily extrudes
// Robortender as plausible Meat Drop familiar?
// Better use of Dinsey foodcone and jumping horseradish
The "improved garden" stuff is so that I can have whatever type of garden I want and not have to worry about switching breakfast options.
 
// Robortender as plausible Meat Drop familiar?

Giving a drive-by shooting to the Robortender doubles it's effective weight as a leprechaun according to Ezandora. So that seems a really good idea. Undeniably better than a Hobo Monkey for a farming effective cost that is steadily dropping in the mall.

Of course it is a little tricky if the script has no way to know if the Robortender has drunken one yet today. (Robortender gets only 5 drinks a day. Drinks of different types stack, but if the drink is the same type the higher level drink takes precedence over lower level drink.)
 
Undeniably better than a Hobo Monkey for a farming effective cost that is steadily dropping in the mall.

Well, at least when monster base meat drop is large enough that the difference covers the potential ~75 mpa from monkey theft.
(and the difference will tend to 0.75*2*currentWeight*baseMeat/100 mpa, which, even at 40 pounds, will overtake 75 mpa for any reasonable meatfarming monsters - certainly beyond 125 base meat)
#### (all mpa are at 100% combat rate)

It's also better than pirate tot (300% meat), if you can get it above ~43 pounds (which is not trivial if you want to equip a toggle switch, but close).

And on top of that, it drops stuff that has value, too.
 
I was posting in a farming script thread so I was assuming it would be clear that the answer would be applied here. In other words, base meat drop is 250.
 
Of course it is a little tricky if the script has no way to know if the Robortender has drunken one yet today. (Robortender gets only 5 drinks a day. Drinks of different types stack, but if the drink is the same type the higher level drink takes precedence over lower level drink.)
Yeah. I figure I'll put this off until we have better support for that. Or perhaps the better support will be motivated by my desire to use it. :)

Getting well over 300 adventures per day without even thinking hard, we're paying about 70+ mpa for a double-weight Leprechaun instead of a Hobo Monkey or a Tot. Well worth considering.

And yes - my main, who has the Robortender, is farming at Barf Mountain, where, as you say, base Meat Drop is 250.
 
Single-data-point spading (high base +meat, high weight leprechaun vs an embezzler) seems to verify that the drive-by shooting does indeed cause the Robortender to act as a 2x wt leprechaun, since 2x effect does not coincide with the single datapoint I observed (71483 meat at +4842%, 382lb).
 
This makes me want to add Fax/Spooky Putty/Rain-Doh so that I can farm up some fish heads. They are "only" 25,000 in the mall, but that is a lot higher than my MPA of ~3,600 (even with 28 turns of sprinkle farming factored in each day).
 
Link to spading in my previous post.

Yes, I saw that; said argument wasn't adequate to convince me that 2x familiar effectiveness was ruled out (I could easily see this being implemented as if you had a second full-weight leprechaun active). We've known for years how rounding works in this context (in fact, Mafia is aware of this); there's no good reason to rely solely on statistical averages of small datasets.
 
Got it.

This makes me want to add Fax/Spooky Putty/Rain-Doh so that I can farm up some fish heads. They are "only" 25,000 in the mall, but that is a lot higher than my MPA of ~3,600 (even with 28 turns of sprinkle farming factored in each day).

If you fax a black crayon penguin, it costs ZERO turns to fight as many as you can copy. All it costs is your limited number of copies per day.
 
Revision 32 adds the following configuration:

Code:
// *** Deluxe Fax Machine *******

// Which monster to fax in to a photocopied monster

monster fax_monster = define_property( "VMF.FaxMonster", "monster", "" ).to_monster();

// Items to use to make additional copies of faxed monster

boolean use_rain_doh = define_property( "VMF.UseRainDoh", "boolean", "true" ).to_boolean();
boolean use_spooky_putty = define_property( "VMF.UseSpookyPutty", "boolean", "true" ).to_boolean();

// Which familiar to equip while fighting copies of the faxed monster

familiar copied_monster_familiar = define_property( "VMF.CopyFamiliar", "familiar", "" ).to_familiar();
I ran with:

VMF.FaxMonster=Black Crayon Penguin
VMF.UseRainDoh=true (the default)
VMF.UseSpookyPutty=true (the default)
VMF.CopyFamiliar=Robortender

and it fought 7 Black Crayon Penguins and got 4 fish heads.

I'm content with this feature, although allowing a 4-d camera would actually be easy enough...
 
One thing to note: you have to have chat open (either in the browser or the GUI) for faxing to work.
 
Back
Top