This is the code for the Drink Menu in Shenanigan's, in case someone wants to make some sort of drink menu themselves.

Drink Menu Help
+drink Lists all drinks.
+drink <drink> Lists the info on the drink.
+add drink <name>=<desc> Adds the selected drink.
+help drink Shows this menu.
+credits Credits & contact info.
Drinks may have spaces in their names
Administrator Help
+rm drink <drink> Deletes the selected drink.
+admin Lists all currently stored users.
+add admin <name> Adds an additional owner to the list.
+rm admin <name> Removes an owner from the list.

Coded by Jayashri of PernWorld. Questions or comments are welcome.

@@ Create the menu.
@create Drink Menu=10
@Desc Drink Menu=A large blackboard hangs on from a bricked wall near the bar, listing the bartender's specialties.%R%RFor a list of offered cocktails: [space(4)][ansi(y,+drink)]%RFor details on a specific cocktail: [space(1)][ansi(y,+drink <name>)]%RFor more in depth help: [space(13)][ansi(y,+help drink)]%RFor credits and contact info: [space(7)][ansi(y,+credits)]
@@ Add help information and credits.
&INFO-HELP Drink Menu=Commands:%R[ansi(y,+drink)] [space(18)] -- Lists all drinks.%R[ansi(y,+drink <drink>)] [space(10)] -- Lists the info on the drink.%R[ansi(y,+add drink <name>=<desc>)] %b-- Adds the selected drink.
&INFO-HELP_ADMIN Drink Menu=Administrative Commands:%R[ansi(y,+rm drink <name>)] [space(8)] -- Deletes the selected drink.%R[ansi(y,+admin)] [space(18)] -- Lists all current admin.%R[ansi(y,+add admin <name>)] [space(7)] -- Adds an additional admin.%R[ansi(y,+rm admin <name>)] [space(8)] -- Removes an admin.
&INFO-HELP_MISC Drink Menu=[ansi(y,+help drink)] [space(13)] -- Shows this menu.%R[ansi(y,+credits)] [space(16)] -- Credits & contact info.%R%R[ansi(y,*)] Drink names may have spaces in them.
&INFO-CREDITS Drink Menu=Designed for tavern or bar use, this menu allows bartenders or even patrons to add their own creative cocktails for use in a role playing environment.%R%RThis menu was designed and coded by Jayashri of PernWorld. Questions, comments, or bug reports can be directed via @mail, page, or email (Jayashri.PW@gmail.com).
@@ Add borders to make it look nice. These can be customized.
&BORDER-TOP Drink Menu=[ansi(hx,/)][repeat([ansi(hx,-)][ansi(y,=)],33)][ansi(hx,-\\)]
&BORDER-BOTTOM Drink Menu=[ansi(hx,\\)][repeat([ansi(hx,-)][ansi(y,=)],33)][ansi(hx,-/)]
&BORDER-SIDE Drink Menu=[ansi(hx,|)][ansi(y,-)][ansi(hx,|)]
&BORDER-HEADER Drink Menu=[ansi(hx,-)][ansi(y,=)][ansi(hx,-)]
&BORDER-DIV Drink Menu=[ansi(hx,|)]
&SPACER Drink Menu=[space(63)]
@@ Object commands.
&CMD-DRINK-LIST Drink Menu=$+drink:@pemit %#=[u(BORDER-TOP)]%R[cborder([u(BORDER-HEADER)] Bartender Specialties [u(BORDER-HEADER)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]%R[cborder(edit([sort([u(LIST-DRINKS)],a,|)],|,%R),61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]
&CMD-VIEW-DRINK Drink Menu=$+drink *:[switch([member([u(LIST-DRINKS)],%0,|)],0,[pemit(%#,That drink is not on the menu.)],[pemit(%#,[u(BORDER-TOP)]%R[cborder([u(BORDER-HEADER)] %0 [u(BORDER-HEADER)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]%R[cborder([u(DRINK-[edit(%0,%b,_)])],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)])])]
&CMD-RM-DRINK Drink Menu=$+rm drink *:think [switch([member(v(LIST-ADMIN),%#,|)],0,{[pemit(%#,You are not authorized to do that.)]},{[switch([member(v(LIST-DRINKS),%0,|)],0,[pemit(%#,%0 is not on the drink menu.)],[set(me,LIST-DRINKS:[remove([v(LIST-DRINKS)],%0,|)])][set(me,DRINK-[edit(%0,%b,_)])],)][pemit(%#,You remove %0 from the drink list.)])]})]
&CMD-ADD_DRINK Drink Menu=$+add drink *=*:think [switch([member(v(LIST-DRINKS),%0,|)],0,{[set(me,LIST-DRINKS:[v(LIST-DRINKS)]|%0)][set(me,DRINK-[edit(%0,%b,_)]:%1)][pemit(%#,You add %0 to the drink menu.)]},{[pemit(%#,That item is already on the drink menu.)]})]
&CMD-HELP Drink Menu=$+help drink:@pemit %#=[u(BORDER-TOP)]%R[cborder([u(BORDER-HEADER)] Drink Menu Help [u(BORDER-HEADER)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]%R[border([switch([member(v(LIST-ADMIN),%#,|)],0,{[u(INFO-HELP)]%R[u(INFO-HELP_MISC)]},{[u(INFO-HELP)]%R[u(INFO-HELP_MISC)]%R%R[u(INFO-HELP_ADMIN)]})],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]
&CMD-CREDITS Drink Menu=$+credits:@pemit %#=[u(BORDER-TOP)]%R[cborder([u(BORDER-HEADER)] Drink Menu Credits [u(BORDER-HEADER)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]%R[border([u(INFO-CREDITS)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]
&CMD-LIST-ADMIN Drink Menu=$+admin:think [pemit(%#,[u(BORDER-TOP)]%R[cborder([u(BORDER-HEADER)] Drink Menu Administrators [u(BORDER-HEADER)],61,[u(BORDER-SIDE)]%b,%b[u(BORDER-SIDE)])]%R[u(BORDER-BOTTOM)]%R[ctables(sort(iter(u(LIST-ADMIN),[name(##)],|,|),a,|),12 12 12 12 11,[u(BORDER-SIDE)],[u(BORDER-SIDE)],|,[u(BORDER-DIV)])]%R[u(BORDER-BOTTOM)])]
&CMD-ADD-ADMIN Drink Menu=$+add admin *:think [switch([member(v(LIST-ADMIN),%#,|)],0,{[pemit(%#,You are not authorized to do that.)]},{[switch([member([v(LIST-ADMIN)],[num(*%0)],|)],0,[set(me,LIST-ADMIN:[v(LIST-ADMIN)]|[num(*%0)])][pemit(%#,You add %0 to the list of admin.)],[pemit(%#,%0 is already an admin.)])]})]
&CMD-RM-ADMIN Drink Menu=$+rm admin *:think [switch([member(u(LIST-ADMIN),%#,|)],0,{[pemit(%#,You are not authorized to do that.)]},{[switch([member(u(LIST-ADMIN),[num(*%0)],|)],0,[pemit(%#,%0 is not an admin.)],[set(me,LIST-ADMIN:[remove([u(LIST-ADMIN)],[num(*%0)],|)])][pemit(%#,You remove %0 from the list of admin.)])]})]