// Thanks to Catherine Omega, the dialog boxes came to keep showing.
// You can not only just put this script in your attached object, but also
// put into a prim you rez to execute.

integer CHANNEL = 42; // dialog channel

list MENU_UNHAPPY = // The limit of dialog is only twelve. So I cannot help
[ // separating the list.
"disdain", "repulsed", "anger",
"bored", "sad", "cry",
"embarrased", "frawn","shrug",
"afraid", "worry", "surprise"
];

list MENU_HAPPY =
[
"wink", "toungue out", "kiss",
"toothesmile", "smile", "laugh",
"open mouth"
];


default {
state_entry()
{
llListen(CHANNEL, "", NULL_KEY, "");
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
llInstantMessage(llGetOwner(), "Just typing \"/42menu\", you can express your emotions");
}
on_rez(integer total_number)
{
llResetScript();
}
listen(integer channel, string name, key id, string message)
{

if (llListFindList(MENU_UNHAPPY, [message]) != -1) // verify dialog choice
{
if (message == "afraid")
{
llStartAnimation("express_afraid_emote");
}
if (message == "anger")
{
llStartAnimation("express_anger_emote");
}
if (message == "bored")
{
llStartAnimation("express_bored_emote");
}
if (message == "cry")
{
llStartAnimation("express_cry_emote");
}
if (message == "disdain")
{
llStartAnimation("express_disdain");
}
if (message == "embarrased")
{
llStartAnimation("express_embarrassed_emote");
}
if (message == "frawn")
{
llStartAnimation("express_frown");
}
if (message == "repulsed")
{
llStartAnimation("express_repulsed_emote");
}
if (message == "sad")
{
llStartAnimation("express_sad_emote");
}
if (message == "shrug")
{
llStartAnimation("express_shrug_emote");
}
if (message == "surprise")
{
llStartAnimation("express_surprise_emote");
}
if (message == "worry")
{
llStartAnimation("express_worry_emote");
}
llDialog(llGetOwner(), "What do you want to express?", MENU_UNHAPPY, CHANNEL);
// The dialog box keeps showing until you chose "Ignore".
}
if (llListFindList(MENU_HAPPY, [message]) != -1) // verify dialog choice
{
if (message == "kiss")
{
llStartAnimation("express_kiss");
}
if (message == "laugh")
{
llStartAnimation("express_laugh_emote");
}
if (message == "open mouth")
{
llStartAnimation("express_open_mouth");
}
if (message == "smile")
{
llStartAnimation("express_smile");
}

if (message == "toungue out")
{
llStartAnimation("express_tongue_out");
}
if (message == "toothesmile")
{
llStartAnimation("express_toothsmile");
}
if (message == "wink")
{
llStartAnimation("express_wink_emote");
}
llDialog(llGetOwner(), "What do you want to express?", MENU_HAPPY, CHANNEL);
// The dialog box keeps showing until you chose "Ignore".
}
else if (message == "menu")
//If you cleard the dialog boxes, you could recall them by /42menu.
{
llDialog(llGetOwner(), "What do you want to express?", MENU_UNHAPPY, CHANNEL);
llDialog(llGetOwner(), "What do you want to express?", MENU_HAPPY, CHANNEL);
}
}
}