Noobsorb: A relay script to help track your absorptions.

Just an easy relay script to help keep track of your Gelatinous Noob absorbtions. Each modifier displays your current stat, click it to drop down a list of skills that affect that stat and what items you have available. It'll optionally tell you what zones have monsters that drop items to give you a skill (uses canadv, slows down each reload dramatically), and there's a custom data file with tips on various others. Example image below.

Code:
svn checkout https://svn.code.sf.net/p/kolm-noobsorb/svn/

This also now has an AutoAbsorb(int retain) function in noob.ash. It'll prioritize skills as per the skill order in the static section near the top of the list. Feel free to modify it to taste. "remain" is the number of absorbs to save for later, or -1 to only absorb for skills.

Noobsorb.PNG
 
Last edited:

gemelli

Member
This is super useful, thanks! Can you tweak it to remove items that can't actually be absorbed like the pixel coin, eleven-foot pole, etc.?
 
This is super useful, thanks! Can you tweak it to remove items that can't actually be absorbed like the pixel coin, eleven-foot pole, etc.?

As far as I was aware it's accurate according to the latest spading I could find, but it's using its own logic rather than Mafia's because at the time Mafia wasn't accurate. Do you know what property it is that keeps them from being absorbed, is it the no-discard? I'd rather have things listed that DON'T work than have things not listed that DO...

Also, if you're trying it through Mafia please actually look at the item itself and verify whether the absorb option is there. For some reason Mafia's "absorb" command is still refusing things that totally can be, including at least one of the Noob's own starting items!

Edit: I just verified the eleven-foot pole can't be absorbed. I'm not sure what the rules are then but I'm gonna hope on Mafia's being more accurate than mine now and defer to it, expect an update shortly..

Edit 2: Updated, run "svn update" for the correction. Thanks!
 
Last edited:

Bale

Minion
Edit: I just verified the eleven-foot pole can't be absorbed. I'm not sure what the rules are then but I'm gonna hope on Mafia's being more accurate than mine now and defer to it, expect an update shortly..

The eleven-foot pole is not discardable. The rules are these:

Code:
boolean is_absorbable(item it) {
	if($items[interesting clod of dirt, dirty bottlecap, discarded button] contains it) return true;
	return (it.gift || it.tradeable) && it.discardable;
}
 
The eleven-foot pole is not discardable. The rules are these:

Thanks, that's good to know; I just changed it to check for mafia's noob_skill property instead, so any further changes or new info will automatically update whenever Mafia does. What made me think Mafia didn't have it totally correct was just a bug absorbing the bottlecap specifically that's now fixed.
 
updated for the new drink items and their supposed +combat/-combat properties, latest commit should automatically pick up the skills once Mafia has them
 

Theraze

Active member
Might I suggest adding this row at line 270?
Code:
					if (noobskill[sk].granter[gid].it.item_amount() == 0) retrieve_item(1, noobskill[sk].granter[gid].it);
Optionally, tweaking (originally) line 285 (which is line 286, if you add the above line 270):
Code:
			while( noobadvs[iid].item_amount() > 1 && remain > retain ) {

Basically, line 1 is that absorb doesn't retrieve items automatically - it knows they're available, but it won't do it for you. So we need to retrieve them ourselves. That's line 270.
The second tweak is that if we have 14 imp ales, for example, we might as well burn through them before we knock out photoprotoneutron torpedos, smart skulls, etc.
 
Might I suggest adding this row at line 270?
Code:
					if (noobskill[sk].granter[gid].it.item_amount() == 0) retrieve_item(1, noobskill[sk].granter[gid].it);
Optionally, tweaking (originally) line 285 (which is line 286, if you add the above line 270):
Code:
			while( noobadvs[iid].item_amount() > 1 && remain > retain ) {

Basically, line 1 is that absorb doesn't retrieve items automatically - it knows they're available, but it won't do it for you. So we need to retrieve them ourselves. That's line 270.
The second tweak is that if we have 14 imp ales, for example, we might as well burn through them before we knock out photoprotoneutron torpedos, smart skulls, etc.

Thanks, I could've sworn the "absorb" command was auto-retrieving stuff before but when I tried it recently it wasn't. Might have to do with Mafia settings, I didn't check to verify. In any case noob.ash as well as the relay will now retrieve the necessary item if it needs to. It also will also prioritize items you have multiple of, then items you have one of, before restoring to retrieving.

And thanks, yeah the loop you're describing was actually the initial intention but I goofed it. I'm pondering whether it'd be worth bothering to sort things in mall price order before absorbing but it'd be a hassle I'm not sure it's really worth.

edit: went ahead and made it prioritize cheaper stuff.
 
Last edited:

Theraze

Active member
I'd tweaked my copy, but it looks like the updated version didn't actually fix it, so...
Line 280 should move to 284. Line 281 is now unneeded. Line 330 should be duplicated after (original) line 307.
Line 142 needs to check for can_interact. (Found this later)
One more note. Even with the absorb change, it absorbs one item too many and believes that it keeps 3, when it only has 2 left. Right. Needs an equal sign in the comparison. Fixed in the block below.
Reasoning:
Change 1 and 2 - After it picks a single item, it will keep trying to use that item even after learning the skill. Oops. :)
Change 3 - After removing an item to learn a skill, the script doesn't actually reduce the remaining absorb count.
Change 4 - We try to retrieve from storage in Hardcore.
Code:
	if( remain > retain ) {
		foreach i in Noob_SkillOrder {
			skill sk = Noob_SkillOrder[i];
			item chosen = $item[none];
			
			if( sk.have_skill() )
				continue;
			
			// First look for any we have on hand, then resort to acquireables.
			foreach gid in noobskill[sk].granter {
				if( noobskill[sk].granter[gid].it.item_amount() > 1 ) {
					chosen = noobskill[sk].granter[gid].it;
					break;
				} else if( noobskill[sk].granter[gid].it.item_amount() > 0 ) {
					chosen = noobskill[sk].granter[gid].it;
				} else if( chosen == $item[none] && noobskill[sk].granter[gid].acquireable ) {
					chosen = noobskill[sk].granter[gid].it;
				}
			}
			
			if( chosen != $item[none] ) {
				if( chosen.item_amount() <= 0 ) {
					print( "acquire 1 [" + chosen.to_int().to_string() + "]" + chosen.to_string(), "blue" );
					cli_execute( "acquire 1 [" + chosen.to_int().to_string() + "]" + chosen.to_string() );
				}
				print( "absorb [" + chosen.to_int().to_string() + "]" + chosen.to_string(), "blue" );
				cli_execute( "absorb [" + chosen.to_int().to_string() + "]" + chosen.to_string() );
				remain -= 1;
			}
			
			if( remain <= retain )
				break;
		}
	}
Code:
		if( get_property("autoSatisfyWithStorage").to_boolean() && can_interact() )
 
Last edited:

Theraze

Active member
Sorry, the change 5 (which got a note and marked in the code, but not a flag) didn't get implemented. Remain <= Retain, not Remain < Retain.
Code:
			if( remain <= retain )
is how line 310 needs to be to stop properly. Also, the way that 142 was changed means that post-ronin Storage is completely ignored.

Edit: Maybe this for 142 or something similar?
Code:
		if( get_property("autoSatisfyWithStorage").to_boolean() && ( can_interact() || ( !in_hardcore() && pulls_remaining()>0 ) ) )
If we can interact, or if we aren't in hardcore and have pulls remaining, then consider it to be possible.
 
Last edited:
Sorry, the change 5 (which got a note and marked in the code, but not a flag) didn't get implemented. Remain <= Retain, not Remain < Retain.
Code:
			if( remain <= retain )
is how line 310 needs to be to stop properly. Also, the way that 142 was changed means that post-ronin Storage is completely ignored.

Edit: Maybe this for 142 or something similar?
Code:
		if( get_property("autoSatisfyWithStorage").to_boolean() && ( can_interact() || ( !in_hardcore() && pulls_remaining()>0 ) ) )
If we can interact, or if we aren't in hardcore and have pulls remaining, then consider it to be possible.

Sorry, I had a holy hell of a headache yesterday and just kinda threw changes in there and threw it out there. As for storage; are there people that keep stuff in hagnks in aftercore? I don't even think about that, my prismbreak script just grabs everything. But yeah it should be fixed, and I guess might as well check if it's a free pull too; not that you'd absorb such a thing but I'm copying this function elsewhere so it should be accurate.
 

Veracity

Developer
Staff member
I always leave everything in Hagnk's in aftercore and just pull what I need when I need it.
There are no free pulls in aftercore, but you're no longer a noob in aftercore.
 
That makes sense. My PVP experience is basically my ascension script smashing the stone and running "swagger" just before jumping the gash. I wonder if I have enough by now to afford anything...
 

Pazleysox

Member
I'm running my (probably only) Noob run, because I want (needs) the trophy for it.

I downloaded this script, and the relay script doesn't work for me. I deleted the SVN download, and downloaded fresh, updated all the files, and still it does nothing. I just get a blank screen. I'm running mafia r18049 with Firefox 53.0.2
 
Top