Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==================
- // MUFFLER
- // ==================
- // CONFIG
- // Channel to use for muffled speech.
- integer gMuffleChannel = 3;
- // Type of algorithm to use for muffled speech. 0: loose. 1: tight. 2: painful.
- integer gMuffleSeverity = 0;
- // TRUE: Listen on channel 0 for speech. FALSE: Disable the listener.
- integer gListen = TRUE;
- // Responds to speech on muffle channel sent by an object with this name.
- // If blank, only responds to speech on muffle channel from the gag wearer herself.
- string gMuffleCall = "";
- // Use this to reference null_key as a pointer. Surprisingly, this approach saves 2k per script.
- key null_key = NULL_KEY;
- // ==================
- // STATES
- // TRUE: Gag is inserted (visible). FALSE: Gag is removed (hidden).
- integer gInserted = FALSE;
- // ==================
- // HANDLES
- integer gHandleMuffle;
- integer gHandleMuffleCall;
- integer gHandleSpeech;
- // ==================
- // VARIABLE HANDLER
- integer ProcessVariable(string variable, string value)
- {
- // Assign the values to the relevant variables.
- if (variable == "MuffleCall")
- gMuffleCall = value;
- return TRUE;
- }
- openMouth()
- {
- if(gMuffleSeverity==2)
- {
- llWhisper(-299,"set smile|0");
- llWhisper(-299,"set openness|0");
- }
- else
- {
- llWhisper(-299,"set smile|3");
- llWhisper(-299,"set openness|3");
- }
- }
- // ==================
- // MUFFLE CHANNEL
- // Send a gagged-speech version of a message to the open channel.
- integer mumble(string mes, integer severity)
- {
- // Iterate through the speech, mushing up the wearer's diction.
- integer i;
- string sub = "";
- string rep = "";
- for (i = 0; i < llStringLength(mes); i++)
- {
- sub = llGetSubString(mes, i, i);
- rep = "";
- if (severity == 0)
- {
- if (sub == "l")
- rep = "w";
- else
- if (sub == "L")
- rep = "W";
- else
- if (sub == "s")
- rep = "f";
- else
- if (sub == "S")
- rep = "F";
- else
- if (sub == "t")
- rep = "g";
- else
- if (sub == "T")
- rep = "G";
- }
- else
- if (severity == 1)
- {
- if (sub == "r" || sub == "l" || sub == "q" || sub == "j" || sub == "d")
- rep = "w";
- else
- if (sub == "R" || sub == "L" || sub == "Q" || sub == "J" || sub == "D")
- rep = "W";
- else
- if (sub == "s")
- rep = "f";
- else
- if (sub == "S")
- rep = "F";
- else
- if (sub == "b" | sub == "t")
- rep = "g";
- else
- if (sub == "B" | sub == "T")
- rep = "G";
- }
- else
- if (severity == 2)
- {
- if (sub == "r" || sub == "l" || sub == "q" || sub == "j" || sub == "d")
- rep = "w";
- else
- if (sub == "R" || sub == "L" || sub == "Q" || sub == "J" || sub == "D")
- rep = "W";
- else
- if (sub == "s")
- rep = "f";
- else
- if (sub == "S")
- rep = "F";
- else
- if (sub == "b" | sub == "t" | sub == "h" | sub == "d" | sub == "c" | sub == "k" | sub == "v")
- rep = "g";
- else
- if (sub == "B" | sub == "T" | sub == "H" | sub == "D" | sub == "C" | sub == "K" | sub == "V")
- rep = "G";
- }
- else
- if (severity == 3)
- {
- sub=llToLower(sub);
- if(sub=="h")
- rep="h";
- else if(sub=="v" || sub=="f")
- rep="f";
- else
- {
- if(llSubStringIndex("abcdefghijklmnopqrstuvwxyzäöü1234567890",sub)!=-1)
- rep="m";
- }
- }
- else
- {
- llOwnerSay("Tried to use an unsupported muffle algorithm called '" + (string)severity + "'.");
- }
- // Replace character if necessary.
- if (rep != "")
- {
- mes = llDeleteSubString(mes, i, i);
- mes = llInsertString(mes, i, rep);
- }
- }
- // Broadcast the muffled speech on the chat channel.
- llMessageLinked(LINK_THIS, 0, "Say", mes);
- return TRUE;
- }
- // ==================
- // EVENT HANDLER
- // All scripts have a default state, this will be
- // the first code executed.
- default
- {
- listen(integer channel, string name, key id, string message)
- {
- // Listen on muffle channel for gagged speech.
- if (channel == gMuffleChannel)
- {
- // Send mumbled speech to the chat channel. (Only responds to wearer or permitted object owned by wearer -- if that was even allowed by the listen filter.)
- if ((llGetOwnerKey(id) == llGetOwner() && name == gMuffleCall) || id == llGetOwner()) mumble(message,gMuffleSeverity);
- }
- else
- // Listen on chat channel for forbidden speech.
- if (channel == 0)
- {
- // Truncate message since we don't need to keep the whole thing in memory.
- message = llGetSubString(message,0,8);
- // Ignore emotes.
- if (llGetSubString(message, 0, 2) != "/me")
- {
- // Request punishment of the wearer.
- llMessageLinked(LINK_THIS, 0, "Wearer Spoke", null_key);
- }
- }
- }
- // Waits for another script to send a link message.
- link_message(integer sender_num, integer num, string variable, key value)
- {
- // Update variable from notecard name.
- if (variable == "ProcessVariable")
- {
- integer index1 = llSubStringIndex(value,"|") - 1;
- integer index2 = index1 + 2;
- ProcessVariable(llGetSubString(value,0,index1),llGetSubString(value,index2,-1));
- }
- else if (variable == "Inserted")
- {
- gInserted = TRUE;
- // Listen for muffled speech from wearer
- gHandleMuffle = llListen(gMuffleChannel, "", llGetOwner(), "");
- if (gMuffleCall != "")
- // Listen for muffled speech from registered object.
- gHandleMuffleCall = llListen(gMuffleChannel, gMuffleCall, "", "");
- // Listen for forbidden chat channel speech from wearer
- if (gListen == TRUE) gHandleSpeech = llListen(0, "", llGetOwner(), "");
- llMessageLinked(LINK_SET, gMuffleSeverity, "MuffleSeverity", NULL_KEY);
- openMouth();
- }
- else if (variable == "Removed")
- {
- gInserted = FALSE;
- // Remove Listens.
- llListenRemove(gHandleMuffle);
- llListenRemove(gHandleMuffleCall);
- llListenRemove(gHandleSpeech);
- llWhisper(-299,"set smile|0");
- llWhisper(-299,"set openness|0");
- }
- // Muffle Severity has been set.
- else if (variable == "MuffleSeverity")
- {
- gMuffleSeverity = num;
- openMouth();
- }
- // MuffleChannel
- else if (variable == "Muffle Channel")
- {
- // Set muffle channel.
- gMuffleChannel = num;
- // Remove Listens.
- llListenRemove(gHandleMuffle);
- llListenRemove(gHandleMuffleCall);
- // Listen for muffled speech from wearer on the updated channel.
- if (gInserted == TRUE)
- {
- gHandleMuffle = llListen(gMuffleChannel, "", llGetOwner(), "");
- if (gMuffleCall != "")
- // Listen for muffled speech from registered object.
- gHandleMuffleCall = llListen(gMuffleChannel, gMuffleCall, "", "");
- }
- }
- // Status messages.
- else if (variable == "Status Listen")
- {
- gListen = num;
- // Update listener status.
- if (gListen == TRUE)
- {
- // Listen for forbidden chat channel speech from wearer
- gHandleSpeech = llListen(0, "", llGetOwner(), "");
- }
- else
- {
- // Remove Listen.
- llListenRemove(gHandleSpeech);
- }
- }
- // Output current free memory.
- else if (variable == "Memory")
- {
- llOwnerSay(llGetScriptName() + ": " + (string)llGetFreeMemory() + "kb free.");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement