New Content - Implemented September 2018 IotM - The Neverending Party

Right. Unsure if they reset on ascension, I thought I saw somewhere that they did not. Which would make for some really ridiculous initiative.
 
r18973. Just ran breakfast without viewing the pump-up high-tops first, and no pumps occurred. _highTopPumps and highTopPumped started at 0. highTopPumps was still 3. I pumped them three times in the relay browser, viewing the item description in between each pump, and all of those preferences are now 3.

Is highTopPumps (no leading underscore) no longer used?
 

Darzil

Developer
r18974 fixes recognising current number of pumps when viewing item description.

No, there is no need for a how many pumped today count that doesn't reset overnight. We needed two counters as we have a daily limit and a current that doesn't have a daily limit.
 

gausie

D̰͕̝͚̤̥̙̐̇̑͗̒e͍͔͎͈͔ͥ̉̔̅́̈l̠̪̜͓̲ͧ̍̈́͛v̻̾ͤe͗̃ͥ̐̊ͬp̔͒ͪ
Staff member
Would it be possible to track what once-per-day quest-expediting choice adventures have already been used? I'm trying to script the quest and it would be convenient - currently you can only find out if the option is available after unrevokably deciding on the first part of the choice (i.e. going upstairs, basement).
 

zarqon

Well-known member
@gausie: Mercenary Mood does it like so:

PHP:
      case $location[The Neverending Party]: if (qprop("_questPartyFair < started") || qprop("_questPartyFair")) return;  // don't do anything if the quest isn't started OR is finished
         switch (get_property("_questPartyFairQuest")) {
            case "food": friendlyset(1324,"2","Go to the kitchen for food stuff.");
               if (get_property("_questPartyFairProgress") == "") friendlyset(1326,"3","Ask the kitchen lady which food to collect.");
                else if (item_amount(to_item(to_int(excise(get_property("_questPartyFairProgress")," ","")))) >= to_int(excise(get_property("_questPartyFairProgress"),""," ")))
                   friendlyset(1326,"4","Turn in your snacks to the kitchen lady.");
               return;
            case "booze": friendlyset(1324,"3","Go to the backyard for booze stuff.");
               if (get_property("_questPartyFairProgress") == "") friendlyset(1327,"3","Find Gerald.");
                else if (item_amount(to_item(to_int(excise(get_property("_questPartyFairProgress")," ","")))) >= to_int(excise(get_property("_questPartyFairProgress"),""," ")))
                   friendlyset(1327,"4","Turn in the food to Gerald.");
               return;
            case "dj": if (my_buffedstat($stat[moxie]) < 300) break;
               friendlyset(1324,"1","Go upstairs to look for meat.");
               friendlyset(1325,"4","Crack the safe!");
               return;
            case "trash": friendlyset(1324,"2","Go to the kitchen to burn trash.");
               friendlyset(1326,"5","Burn some trash! (25% progress)");
               return;
            case "woots": if (item_amount($item[very small red dress]) > 0 && !contains_text(session_logs(1)[0],"Encounter: A Room With a View")) {  // detection method imperfect but good enough
                  friendlyset(1324,"1","Go upstairs for the lamp.");
                  friendlyset(1325,"5","Throw a red dress on the lamp.");
               } else if (item_amount($item[electronics kit]) > 0 && !contains_text(session_logs(1)[0],"Encounter: Basement Urges")) {
                  friendlyset(1324,"4","Go to the basement for the lights.");
                  friendlyset(1328,"4","Modify the living room lights.");
               } else friendlyset(1324,"5","Fight a random partier.");
               return;
            case "partiers": if (have_item($item[intimidating chainsaw]) == 0) {  // saw -> 30% -> 20% is optimal regardless of easy/hard
                  friendlyset(1324,"4","Go to the basement for a chainsaw.");
                  friendlyset(1328,"3","Pick up a chainsaw.");
               } else if (item_amount($item[jam band bootleg]) > 0 && !contains_text(session_logs(1)[0],"Encounter: A Room With a View")) {
                  friendlyset(1324,"1","Go upstairs for the stereo.");
                  friendlyset(1325,"3","Put a jam band bootleg in the stereo.");
               } else if (item_amount($item[Purple Beast energy drink]) > 0 && get_property("_questPartyFairProgress").to_int() >= 10 && !contains_text(session_logs(1)[0],"Encounter: Forward to the Back")) {
                  friendlyset(1324,"3","Go to the backyard for the pool.");
                  friendlyset(1327,"5","Pour Purple Beast in the pool!");
               } else friendlyset(1324,"5","Fight a random partier.");
               return;
            default: friendlyset(1324,"0","Decide what to do yourself!");
         }

This has worked well enough for me so far (three characters, one finished and two almost done with HARD MODE). If you're using MM and BBB all you need to script is starting the quest -- then you can simply adventure there until you're done. BBB will equip items you need and MM will set the choices for you.
 
Last edited:

gausie

D̰͕̝͚̤̥̙̐̇̑͗̒e͍͔͎͈͔ͥ̉̔̅́̈l̠̪̜͓̲ͧ̍̈́͛v̻̾ͤe͗̃ͥ̐̊ͬp̔͒ͪ
Staff member
Well I do use both of your scripts anyway and didn't realise I didn't need to write my own :) I guess searching the session logs is a good enough solution though yes.
 
My free fight script logs the encounters when they happened.

Code:
boolean StockPartyConsumables() {
	string [int] PartyFairConsumableStrings;
	item PartyFairConsumable,PartyFairConsumableCreator;
	int PartyFairConsumableAmount, dummy;
	PartyFairConsumableStrings = split_string(get_property("_questPartyFairProgress")," ");
	if ( PartyFairConsumableStrings.count() == 2 ) {
		PartyFairConsumable = to_item(to_int(PartyFairConsumableStrings[1]));
		PartyFairConsumableAmount = to_int(PartyFairConsumableStrings[0]);
		if ( PartyFairConsumable.fullness > 0 )
			PartyFairConsumableCreator = $item[van key];
		else if ( PartyFairConsumable.inebriety > 0 )
			PartyFairConsumableCreator = $item[unremarkable duffel bag];
		else
			return false;
		while ( available_amount(PartyFairConsumable) < PartyFairConsumableAmount ) {
			if ( mall_price(PartyFairConsumable) > 2*mall_price(PartyFairConsumableCreator) ) {
				if ( item_amount(PartyFairConsumableCreator)==0 )
					buy(1,PartyFairConsumableCreator);
				use(item_amount(PartyFairConsumableCreator),PartyFairConsumableCreator);
			}
			else				
				dummy = buy(PartyFairConsumableAmount-available_amount(PartyFairConsumable),PartyFairConsumable,mall_price(PartyFairConsumable));
		}
	}
	return retrieve_item(PartyFairConsumableAmount,PartyFairConsumable);
}

void UpdateNeverendingParty() {
	string PartyNoncombatsVisited = get_property("_neverendingPartyNoncombatsVisited");
	if ( get_property("_neverendingPartyFreeTurns").to_int() == 9 && UseClaraForPartying && have_effect($effect[Eldritch Attunement])==0 && $strings[food,booze,woots] contains get_property("_questPartyFairQuest") )
		use(1,$item[Clara's Bell]);
	switch ( get_property("_questPartyFairQuest") ) {
		case "dj":			// crack the safe?
		case "trash":		// burn trash in the kitchen?
		case "":
			set_property("choiceAdventure1324",5);	// combat
			break;
		case "food":
			set_property("choiceAdventure1324",2);	// kitchen
			switch ( get_property("_questPartyFair") ) {
				case "started":
					set_property("choiceAdventure1326",3);	// talk to geraldine
					break;
				case "step1":
					if ( !StockPartyConsumables() )
						abort("Couldn't acquire the required consumables");
				case "step2":
					set_property("choiceAdventure1326",4);	// give food to geraldine
					break;
			}
			break;
		case "booze":
			set_property("choiceAdventure1324",3);	// backyard
			switch ( get_property("_questPartyFair") ) {
				case "started":
					set_property("choiceAdventure1327",3);	// talk to gerald
					break;
				case "step1":
					if ( !StockPartyConsumables() )
						abort("Couldn't acquire the required consumables");
				case "step2":
					set_property("choiceAdventure1327",4);	// give booze to gerald
					break;
			}
			break;
		case "woots":
			if ( item_amount($item[cosmetic football])>0 && equipped_item($slot[off-hand])!=$item[cosmetic football] )
				equip($slot[off-hand],$item[cosmetic football]);
			set_property("choiceAdventure1325",5);	// drape red dress over lamp
			set_property("choiceAdventure1328",4);	// adjust lights

			if ( !contains_text(PartyNoncombatsVisited,"1325-5") && item_amount($item[very small red dress])>0 )
				set_property("choiceAdventure1324",1);	// bedroom
			else if ( !contains_text(PartyNoncombatsVisited,"1328-5") && item_amount($item[electronics kit])>0 )
				set_property("choiceAdventure1324",4);	// basement
			else
				set_property("choiceAdventure1324",5);	// combat
			break;
		case "partiers":
			if ( item_amount($item[intimidating chainsaw])>0 && equipped_item($slot[weapon])!=$item[intimidating chainsaw] )
				equip($item[intimidating chainsaw]);
			set_property("choiceAdventure1328",3);	// intimidating chainsaw
			set_property("choiceAdventure1325",3);	// play jam bad bootleg
			set_property("choiceAdventure1327",5);	// throw purple energy drink into pool

			if ( !contains_text(PartyNoncombatsVisited,"1328-3") )
				set_property("choiceAdventure1324",4);	// basement
			else if ( !contains_text(PartyNoncombatsVisited,"1325-3") && item_amount($item[jam band bootleg])>0 )
				set_property("choiceAdventure1324",1);	// bedroom
			else if ( !contains_text(PartyNoncombatsVisited,"1327-5") && item_amount($item[Purple Beast energy drink])>0 )
				set_property("choiceAdventure1324",3);	// backyard
			else
				set_property("choiceAdventure1324",5);	// combat
			break;
		default: 
			abort("Huh, were we unable to recognize the party quest?");
	}
}


void NeverendingParty() {
	if ( get_property("_neverendingPartyFreeTurns").to_int() < 10 ) {
		HeavyRains((10-get_property("_neverendingPartyFreeTurns").to_int())*(have_effect($effect[Eldritch Attunement]) > 0 ? 2 : 1));
		InitializeNeverendingParty();
		if ( get_property("_partyHard").to_boolean() ) {
			libramBurn();
			equip($item[PARTY HARD T-shirt]);
		}
		while ( get_property("_neverendingPartyFreeTurns").to_int() < 10 && get_property("_questPartyFair") != "finished" ) {
			UpdateNeverendingParty();
			ChooseFamiliar();
			adv1($location[The Neverending Party], -1, "");
			while ( in_multi_fight() )
				run_combat();
			if ( last_choice()>=1325 && last_choice()<=1328 && last_decision()>=3 && !contains_text(get_property("_neverendingPartyNoncombatsVisited"),last_choice()+"-"+last_decision()) )
				set_property("_neverendingPartyNoncombatsVisited",get_property("_neverendingPartyNoncombatsVisited")+last_choice()+"-"+last_decision()+" ");
		}
		if ( get_property("_questPartyFair") == "step2" )
			adv1($location[The Neverending Party], -1, "");
		if ( ( get_property("lastEncounter") == "Party's Over" || get_property("lastEncounter") == "All Done!" ) && get_property("_questPartyFair") != "finished" )
			print(get_property("_questPartyFair"));
	}
}
 

Erosion

Member
It appears that either something changed maybe a month ago.
When you use the NEP noncom to trigger a fight, and then run away from it, Mafia will think that takes a charge when it doesn't.
-----------------
more info: it seems to only happen when you run mafia turns in the zone and get:
[12887] The Neverending Party
Encounter: It Hasn't Ended, It's Just Paused
Manual control requested for choice #1324

loading the relay browser before taking a choice in the noncom will tick the Mafia pref by 1 even though it won't in-game.
 
Last edited:
Top