Jul 15, 2016, 6:17 AM

Hello! Here is code for you if you want it. It's about 99% done. It'll work well as it is, there's just one command I haven't finished yet. I'll update here when I do. You can change the categories you think your game might support via changing &data.categories prco=category1.category2.category3.etc. And then the code needs no other updates.

// help files
// +prefs - show your own prefs - done
// +prefs * - show someone else's prefs - done
// +prefs/list - show what categories the game provides - done
// +prefs/set <category>=# - rank this pref
// +prefs/note <set a note of your prefs>
// +prefs/find <category> - find all people who have that category of at least 3+ stars.
// categorys: action, adventure, casual, comedy, conflict, mystery, public, romance, social
// to set up your own categories do the follow: &data.categories prco=category1.category2.category3.etc

@create +Prefs Code Object <PrCO>
@set prco=inherit
&data.categories prco=action.adventure.casual.comedy.conflict.mystery.public.romance.social
&c.+prefs prco=$+prefs:@pemit %#=[setq(p, pmatch(%#))]
	[if(hasattr(%qp, _prefs.ratings),
		[header([name(%qp)]'s +Prefs)]%r
		[u(fn.displayprefs, %qp)]%r
		[if(hasattr(%qp, _prefs.note),
			%r%r[ansi(h, Note)]: [u(%qp/_prefs.note)]%r
			)]
		[footer()],
		[alert(+Prefs, alert)] You have not set up +prefs yet! See +help +prefs for help.
	)]
&c.+prefs_other prco=$+prefs *:@pemit %#=[setq(p, pmatch(%0))]
	[if(%qp,
		[if(hasattr(%qp, _prefs.ratings),
			[header([name(%qp)]'s +Prefs)]%r
			[u(fn.displayprefs, %qp)]%r
			[if(hasattr(%qp, _prefs.note),
				%r%r[ansi(h, Note)]: [u(%qp/_prefs.note)]%r
			)]
			[footer()],
			[alert(+Prefs, alert)] [name(%qp)] has not set up +prefs.
		)],
		[alert(+Prefs, alert)] I can't find player '%0'.  Please check your spelling.
	)]

&fn.displayprefs prco=[setq(r, get(%0/_prefs.ratings))]
	[iter(sort(u(data.categories), a, .), 
		[ljust(
			ansi(
				h, [capstr(%i0)]:
			), 
		15)]
		%b
		[u(fn.dispref, %qr,%i0)],
		.
		,%r
		)]

&fn.dispref prco=[repeat(
			*, 
			after(
				graball(%0, %1*, .), 
			:)
		)]

&c.+prefs/list prco=$+prefs/list:@pemit %#=[header(Available +Pref Categories)]%r
			[itemize(
				iter(
					sort(
						u(data.categories), a, . , .
					), 
					[capstr(%i0)], 
					., .
				), .
			)].%r
			[footer()]

//this is poop!
&c.+prefs/set prco=$+prefs/set *=*:@pemit %#=[setq(p, pmatch(%#))]
			[if(u(fn.iscat?, %0),
				[if(and(lte(%1, 5), gte(%1, 0)),
					[if(u(fn.hascat?, %qp, %0),
							[alert(+Prefs)] Changing %0 to %1.[set(%qp, _prefs.ratings:[setdiff(get(%qp/_prefs.ratings), [graball(get(%qp/_prefs.ratings), %0*, .)], .)].%0:%1)],
							[alert(+Prefs)] Setting %0 to %1.[set(%qp, _prefs.ratings:[get(%qp/_prefs.ratings)].%0:%1)]
					)],
						
					[alert(+Prefs, alert)] You tried to set '%1'.  You must set a rating of 0 to 5.
				)],
				[alert(+Prefs, alert)] I'm sorry but '%0' is not a category.  Check +prefs/list for available categories.
				)]

&fn.iscat? prco=[if(graball(u(data.categories), %0*, .),
		1,
		0
		)]
&fn.hascat? prco=[if(graball(get(%0/_prefs.ratings), %1*, .),
		1,
		0
		)]
		

&c.+prefs/note prco=$+prefs/note *:@pemit %#=[setq(p, pmatch(%#))][alert(+prefs)] Setting your Prefs Note to [setr(n, secure(%0))].[set(%qp, _prefs.note:%qn)]

&C.+PREF +Prefs Code Object <PrCO>=$+pref:@force %#=+prefs
&C.+PREF_OTHER +Prefs Code Object <PrCO>=$+pref *:@force %#=+prefs %0
&C.+PREF/SET +Prefs Code Object <PrCO>=$+pref/set *=*:@force %#=+prefs/set %0=%1
&C.+PREF/NOTE +Prefs Code Object <PrCO>=$+pref/note *:@force %#=+prefs/note %0
&C.+PREF/NOTE_CLEAR +Prefs Code Object <PrCO>=$+pref/note:@force %#=+prefs/note
&C.+PREFS/NOTE_CLEAR +Prefs Code Object <PrCO>=$+prefs/note:@pemit %#=[setq(p, [pmatch(%#)])][alert(+Prefs, alert)] Clearing your note it was:%R[get(%qp/_prefs.note)][set(%qp, _prefs.note:)]

&c.+prefs/find prco=$+prefs/find *:@pemit %#=[if(u(fn.iscat?, %0), [header(+Prefs/Find: %0)]%r%b[columns(squish(iter(filter(fil.hasprefs, lwho()), if(gte([after(graball([get(%i0/_prefs.ratings)], %0*, .), :)], 3), [name(%i0)]: [u(fn.dispref, [get(%i0/_prefs.ratings)], %0)]~))), 20, ~, 0)]%rThese are all the people [ansi(h, currently connected)] with %0 at 3+.%r[footer()], [alert(+prefs, alert)] Sorry %0 is not a category.  Check +prefs/list.)]

&fil.hasprefs prco=FIL.HASPREFS: hasattr(%0, _prefs.ratings)

You can c/p this into Muxify and then be able to c/p it onto your game.

added aliases so you can do +pref/<stuff>.

Also +pref/note by itself will now clear your note.