Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.85 KB | None | 0 0
  1. // ==================
  2. // MUFFLER
  3. // ==================
  4. // CONFIG
  5.  
  6. // Channel to use for muffled speech.
  7. integer gMuffleChannel = 3;
  8.  
  9. // Type of algorithm to use for muffled speech. 0: loose. 1: tight. 2: painful.
  10. integer gMuffleSeverity = 0;
  11.  
  12. // TRUE: Listen on channel 0 for speech. FALSE: Disable the listener.
  13. integer gListen = TRUE;
  14.  
  15. // Responds to speech on muffle channel sent by an object with this name.
  16. // If blank, only responds to speech on muffle channel from the gag wearer herself.
  17. string gMuffleCall = "";
  18.  
  19. // Use this to reference null_key as a pointer. Surprisingly, this approach saves 2k per script.
  20. key null_key = NULL_KEY;
  21.  
  22. // ==================
  23. // STATES
  24.  
  25. // TRUE: Gag is inserted (visible). FALSE: Gag is removed (hidden).
  26. integer gInserted = FALSE;
  27.  
  28. // ==================
  29. // HANDLES
  30.  
  31. integer gHandleMuffle;
  32. integer gHandleMuffleCall;
  33. integer gHandleSpeech;
  34.  
  35. // ==================
  36. // VARIABLE HANDLER
  37.  
  38. integer ProcessVariable(string variable, string value)
  39. {
  40. // Assign the values to the relevant variables.
  41.  
  42. if (variable == "MuffleCall")
  43. gMuffleCall = value;
  44.  
  45. return TRUE;
  46. }
  47.  
  48. openMouth()
  49. {
  50. if(gMuffleSeverity==2)
  51. {
  52. llWhisper(-299,"set smile|0");
  53. llWhisper(-299,"set openness|0");
  54. }
  55. else
  56. {
  57. llWhisper(-299,"set smile|3");
  58. llWhisper(-299,"set openness|3");
  59. }
  60. }
  61.  
  62. // ==================
  63. // MUFFLE CHANNEL
  64.  
  65. // Send a gagged-speech version of a message to the open channel.
  66. integer mumble(string mes, integer severity)
  67. {
  68. // Iterate through the speech, mushing up the wearer's diction.
  69. integer i;
  70. string sub = "";
  71. string rep = "";
  72. for (i = 0; i < llStringLength(mes); i++)
  73. {
  74. sub = llGetSubString(mes, i, i);
  75. rep = "";
  76.  
  77. if (severity == 0)
  78. {
  79. if (sub == "l")
  80. rep = "w";
  81. else
  82. if (sub == "L")
  83. rep = "W";
  84. else
  85. if (sub == "s")
  86. rep = "f";
  87. else
  88. if (sub == "S")
  89. rep = "F";
  90. else
  91. if (sub == "t")
  92. rep = "g";
  93. else
  94. if (sub == "T")
  95. rep = "G";
  96. }
  97. else
  98. if (severity == 1)
  99. {
  100. if (sub == "r" || sub == "l" || sub == "q" || sub == "j" || sub == "d")
  101. rep = "w";
  102. else
  103. if (sub == "R" || sub == "L" || sub == "Q" || sub == "J" || sub == "D")
  104. rep = "W";
  105. else
  106. if (sub == "s")
  107. rep = "f";
  108. else
  109. if (sub == "S")
  110. rep = "F";
  111. else
  112. if (sub == "b" | sub == "t")
  113. rep = "g";
  114. else
  115. if (sub == "B" | sub == "T")
  116. rep = "G";
  117. }
  118. else
  119. if (severity == 2)
  120. {
  121. if (sub == "r" || sub == "l" || sub == "q" || sub == "j" || sub == "d")
  122. rep = "w";
  123. else
  124. if (sub == "R" || sub == "L" || sub == "Q" || sub == "J" || sub == "D")
  125. rep = "W";
  126. else
  127. if (sub == "s")
  128. rep = "f";
  129. else
  130. if (sub == "S")
  131. rep = "F";
  132. else
  133. if (sub == "b" | sub == "t" | sub == "h" | sub == "d" | sub == "c" | sub == "k" | sub == "v")
  134. rep = "g";
  135. else
  136. if (sub == "B" | sub == "T" | sub == "H" | sub == "D" | sub == "C" | sub == "K" | sub == "V")
  137. rep = "G";
  138. }
  139. else
  140. if (severity == 3)
  141. {
  142. sub=llToLower(sub);
  143. if(sub=="h")
  144. rep="h";
  145. else if(sub=="v" || sub=="f")
  146. rep="f";
  147. else
  148. {
  149. if(llSubStringIndex("abcdefghijklmnopqrstuvwxyzäöü1234567890",sub)!=-1)
  150. rep="m";
  151. }
  152. }
  153. else
  154. {
  155. llOwnerSay("Tried to use an unsupported muffle algorithm called '" + (string)severity + "'.");
  156. }
  157.  
  158. // Replace character if necessary.
  159. if (rep != "")
  160. {
  161. mes = llDeleteSubString(mes, i, i);
  162. mes = llInsertString(mes, i, rep);
  163. }
  164. }
  165.  
  166. // Broadcast the muffled speech on the chat channel.
  167. llMessageLinked(LINK_THIS, 0, "Say", mes);
  168.  
  169. return TRUE;
  170. }
  171.  
  172. // ==================
  173. // EVENT HANDLER
  174.  
  175. // All scripts have a default state, this will be
  176. // the first code executed.
  177. default
  178. {
  179.  
  180.  
  181. listen(integer channel, string name, key id, string message)
  182. {
  183. // Listen on muffle channel for gagged speech.
  184. if (channel == gMuffleChannel)
  185. {
  186. // 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.)
  187. if ((llGetOwnerKey(id) == llGetOwner() && name == gMuffleCall) || id == llGetOwner()) mumble(message,gMuffleSeverity);
  188. }
  189. else
  190. // Listen on chat channel for forbidden speech.
  191. if (channel == 0)
  192. {
  193. // Truncate message since we don't need to keep the whole thing in memory.
  194. message = llGetSubString(message,0,8);
  195. // Ignore emotes.
  196. if (llGetSubString(message, 0, 2) != "/me")
  197. {
  198. // Request punishment of the wearer.
  199. llMessageLinked(LINK_THIS, 0, "Wearer Spoke", null_key);
  200. }
  201. }
  202. }
  203.  
  204. // Waits for another script to send a link message.
  205. link_message(integer sender_num, integer num, string variable, key value)
  206. {
  207. // Update variable from notecard name.
  208. if (variable == "ProcessVariable")
  209. {
  210. integer index1 = llSubStringIndex(value,"|") - 1;
  211. integer index2 = index1 + 2;
  212.  
  213. ProcessVariable(llGetSubString(value,0,index1),llGetSubString(value,index2,-1));
  214.  
  215. }
  216. else if (variable == "Inserted")
  217. {
  218. gInserted = TRUE;
  219. // Listen for muffled speech from wearer
  220. gHandleMuffle = llListen(gMuffleChannel, "", llGetOwner(), "");
  221. if (gMuffleCall != "")
  222. // Listen for muffled speech from registered object.
  223. gHandleMuffleCall = llListen(gMuffleChannel, gMuffleCall, "", "");
  224. // Listen for forbidden chat channel speech from wearer
  225. if (gListen == TRUE) gHandleSpeech = llListen(0, "", llGetOwner(), "");
  226. llMessageLinked(LINK_SET, gMuffleSeverity, "MuffleSeverity", NULL_KEY);
  227. openMouth();
  228. }
  229. else if (variable == "Removed")
  230. {
  231. gInserted = FALSE;
  232. // Remove Listens.
  233. llListenRemove(gHandleMuffle);
  234. llListenRemove(gHandleMuffleCall);
  235. llListenRemove(gHandleSpeech);
  236.  
  237. llWhisper(-299,"set smile|0");
  238. llWhisper(-299,"set openness|0");
  239. }
  240. // Muffle Severity has been set.
  241. else if (variable == "MuffleSeverity")
  242. {
  243. gMuffleSeverity = num;
  244. openMouth();
  245. }
  246. // MuffleChannel
  247. else if (variable == "Muffle Channel")
  248. {
  249. // Set muffle channel.
  250. gMuffleChannel = num;
  251. // Remove Listens.
  252. llListenRemove(gHandleMuffle);
  253. llListenRemove(gHandleMuffleCall);
  254. // Listen for muffled speech from wearer on the updated channel.
  255. if (gInserted == TRUE)
  256. {
  257. gHandleMuffle = llListen(gMuffleChannel, "", llGetOwner(), "");
  258. if (gMuffleCall != "")
  259. // Listen for muffled speech from registered object.
  260. gHandleMuffleCall = llListen(gMuffleChannel, gMuffleCall, "", "");
  261. }
  262. }
  263. // Status messages.
  264. else if (variable == "Status Listen")
  265. {
  266. gListen = num;
  267. // Update listener status.
  268. if (gListen == TRUE)
  269. {
  270. // Listen for forbidden chat channel speech from wearer
  271. gHandleSpeech = llListen(0, "", llGetOwner(), "");
  272. }
  273. else
  274. {
  275. // Remove Listen.
  276. llListenRemove(gHandleSpeech);
  277. }
  278. }
  279. // Output current free memory.
  280. else if (variable == "Memory")
  281. {
  282. llOwnerSay(llGetScriptName() + ": " + (string)llGetFreeMemory() + "kb free.");
  283. }
  284. }
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement