Shins Script.lsl 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. // :SHOW:1
  2. // :CATEGORY:NPC
  3. // :NAME:HyperGrid Story Nine
  4. // :AUTHOR:Shin Ingen
  5. // :KEYWORDS:NPC, controller and timer
  6. // :CREATED:2015-11-24 20:25:34
  7. // :EDITED:2015-11-24 19:25:34
  8. // :ID:1087
  9. // :NUM:1845
  10. // :REV:1.0
  11. // :WORLD:OpenSim
  12. // :DESCRIPTION:
  13. // Timer script - ended up not being used.
  14. // :CODE:
  15. //HYPERGRID STORY NINE
  16. // List NPC Listener channels
  17. //sara=11 sammy=12 claire=13 jolinda=14 tiny=15 tiny2=16 fireworks=20
  18. integer gListener; // Listener for handling different channels
  19. integer gSimpleMenuChannel; // The channel used for the menu
  20. float gTimerInterval = 1; // Keep this at 1 for your sanity.
  21. list gTimeoutList;
  22. float gTimeElapsed=0;
  23. integer gAutofire=FALSE;
  24. //============================================================================
  25. vector gFacecolor=<1.0,0.0,0.0>; //RED
  26. integer gNewTime;
  27. integer gOldTime;
  28. //==Function that returns a random number for our menu handler channel
  29. integer randomchannel() {
  30. return((integer)(llFrand(99999.0)*-1));
  31. }
  32. menu(key id, integer channel, string title, list buttons) {
  33. llListenRemove(gListener);
  34. gListener = llListen(channel,"",id,"");
  35. llDialog(id,title,buttons,channel);
  36. // TimerEvent for killing the menu listener
  37. settimeout("untouched", 30); //call untouched timeout
  38. }
  39. simplemenu(key id) {
  40. gSimpleMenuChannel = randomchannel();
  41. menu(id,gSimpleMenuChannel,"Select an option",["FIREWORKS","SARA","SAMMY","CLAIRE","JOLINDA","TINY","TINY2","LeadNPC","Finale!","CeaseFire"]);
  42. }
  43. settimeout(string timereventid, float time) {
  44. if(gTimeoutList == [])
  45. llSetTimerEvent(gTimerInterval);
  46. integer identifyerIndex = llListFindList(gTimeoutList, [timereventid]);
  47. if (identifyerIndex != -1)
  48. gTimeoutList = llDeleteSubList(gTimeoutList, identifyerIndex - 1, identifyerIndex);
  49. if (time != 0) {
  50. gTimeoutList += time + gTimeElapsed;
  51. gTimeoutList += timereventid;
  52. }
  53. gTimeoutList = llListSort(gTimeoutList, 2, TRUE);
  54. }
  55. timeout(string timereventid)
  56. {
  57. if (timereventid == "untouched")
  58. {
  59. llSay(0, "I have been untouched for 30 seconds, killing menu listener!");
  60. llListenRemove(gListener); // kill the listener after 30 seconds inactivity
  61. }
  62. else if (timereventid == "countdown2execute")
  63. {
  64. float seconds2count = 1800;
  65. llSay(0, "I have counted down " + (string)seconds2count + " seconds, repeat countdown and start the show");
  66. settimeout("countdown2execute", seconds2count); //call it again to loop.
  67. }
  68. else if (timereventid == "autofire")
  69. {
  70. if(gAutofire)
  71. {
  72. llSay(0,"should fire every 5 seconds.");
  73. llRegionSay(20,"Go");
  74. settimeout("autofire", 5);
  75. }
  76. }
  77. if (timereventid == "stopautofire")
  78. {
  79. gAutofire=FALSE;
  80. }
  81. }
  82. timertick()
  83. {
  84. gTimeElapsed += gTimerInterval;
  85. integer i;
  86. integer numTimers = llGetListLength(gTimeoutList);
  87. for (i = 0; i < numTimers; i += 2)
  88. {
  89. float triggerTime = llList2Float(gTimeoutList, i);
  90. if (triggerTime <= gTimeElapsed)
  91. {
  92. string timereventid = llList2String(gTimeoutList, i + 1);
  93. gTimeoutList = llDeleteSubList(gTimeoutList, i, i + 1);
  94. timeout(timereventid);
  95. if (timereventid=="countdown2execute")
  96. {
  97. displaycountdowntext((integer)gTimeElapsed);
  98. getdigit((integer)gTimeElapsed);
  99. }
  100. if (gTimeoutList == [])
  101. llSetTimerEvent(0);
  102. }
  103. else
  104. {
  105. return;
  106. }
  107. }
  108. }
  109. displaydigit(integer n, string d){
  110. list Facelist; //list depends on your mesh digital readout face number.
  111. integer i;
  112. if(n==0) Facelist=[ 1,1,1,1,0,1,1 ]; //index @0 | 7 faces per digit
  113. if(n==1) Facelist=[ 0,0,1,0,0,1,0 ];
  114. if(n==2) Facelist=[ 1,1,0,1,1,1,0 ];
  115. if(n==3) Facelist=[ 1,1,1,0,1,1,0 ];
  116. if(n==4) Facelist=[ 0,0,1,0,1,1,1 ];
  117. if(n==5) Facelist=[ 1,1,1,0,1,0,1 ];
  118. if(n==6) Facelist=[ 0,1,1,1,1,0,1 ];
  119. if(n==7) Facelist=[ 1,0,1,0,0,1,0 ];
  120. if(n==8) Facelist=[ 1,1,1,1,1,1,1 ];
  121. if(n==9) Facelist=[ 1,0,1,0,1,1,1 ];
  122. integer l = llGetLinkNumber() != 0;
  123. integer x = llGetNumberOfPrims() + l;
  124. for (; l < x; ++l){
  125. if (llGetLinkName(l) == d){
  126. for (i=0;i<7;i++){
  127. llSetLinkPrimitiveParamsFast(l,[PRIM_COLOR,i,gFacecolor,llList2Float(Facelist,i)]);
  128. }
  129. }
  130. }
  131. }
  132. getdigit(integer time){
  133. string dOne;
  134. string dTen;
  135. string dHundred;
  136. string dThousand;
  137. integer i;
  138. if (time<10){
  139. dOne=(string)time;
  140. dTen="0";
  141. dHundred="0";
  142. dThousand="0"; // add your digits here
  143. }else if(time<100){
  144. dOne=llGetSubString((string)time,-1,-1);
  145. dTen=llGetSubString((string)time,0,0);
  146. dHundred="0";
  147. dThousand="0";
  148. }else if(time<1000){
  149. dOne=llGetSubString((string)time,-1,-1);
  150. dTen=llGetSubString((string)time,1,1);
  151. dHundred=llGetSubString((string)time,0,0);
  152. dThousand="0";
  153. }else if(time<10000){
  154. dOne=llGetSubString((string)time,-1,-1);
  155. dTen=llGetSubString((string)time,2,2);
  156. dHundred=llGetSubString((string)time,1,1);
  157. dThousand=llGetSubString((string)time,0,0);
  158. }
  159. displaydigit((integer)dOne, "one");
  160. displaydigit((integer)dTen, "ten");
  161. displaydigit((integer)dHundred, "hundred");
  162. displaydigit((integer)dThousand, "thousand");
  163. }
  164. displaycountdowntext(integer time){
  165. gNewTime = time;
  166. if (gOldTime < gNewTime){
  167. llSetText("Elapsed Ticker: " + (string)gNewTime + " ticks",<1,1,.6>,1.0);
  168. gOldTime = gNewTime;
  169. }
  170. }
  171. default
  172. {
  173. state_entry()
  174. {
  175. float seconds2count = 3600;
  176. settimeout("countdown2execute", seconds2count);
  177. }
  178. touch_start(integer num)
  179. {
  180. simplemenu(llDetectedKey(0));
  181. }
  182. listen (integer channel, string name, key id, string message)
  183. {
  184. if (message == "FIREWORKS") {
  185. llSay(0,"You selected option FIREWORKS");
  186. llRegionSay(20,"Go");
  187. //do something else here
  188. }
  189. else if (message == "SARA")
  190. {
  191. llSay(0,"You selected option SARA");
  192. llRegionSay(11,"@go");
  193. //do something else here
  194. }
  195. else if (message == "SAMMY")
  196. {
  197. llSay(0,"You selected option SAMMY");
  198. llRegionSay(12,"@go");
  199. //do something else here
  200. }
  201. else if (message == "CLAIRE")
  202. {
  203. llSay(0,"You selected option CLAIRE");
  204. llRegionSay(13,"@go");
  205. //do something else here
  206. }
  207. else if (message == "JOLINDA")
  208. {
  209. llSay(0,"You selected option JOLINDA");
  210. llRegionSay(14,"@go");
  211. //do something else here
  212. }
  213. else if (message == "TINY")
  214. {
  215. llSay(0,"You selected option TINY");
  216. llRegionSay(15,"@go");
  217. //do something else here
  218. }
  219. else if (message == "TINY2")
  220. {
  221. llSay(0,"You selected option TINY2");
  222. llRegionSay(16,"@go");
  223. //do something else here
  224. }
  225. else if (message == "LeadNPC")
  226. {
  227. llSay(0,"You selected option LeadNPC");
  228. llRegionSay(10,"@go");
  229. //do something else here
  230. }
  231. else if (message == "Finale!")
  232. {
  233. llSay(0,"You selected option Finale!");
  234. gAutofire=TRUE;
  235. settimeout("autofire", 1);
  236. settimeout("stopautofire", 90);
  237. //do something else here
  238. }
  239. else if (message == "CeaseFire")
  240. {
  241. llSay(0,"You selected option CeaseFire");
  242. gAutofire=FALSE;
  243. //do something else here
  244. }
  245. simplemenu(id); // refresh menu
  246. }
  247. timer()
  248. {
  249. timertick();
  250. integer MaxTicks = 1800; //Ticks to countdown from
  251. //limit the ticker to maximum ticks
  252. if(gTimeElapsed >= MaxTicks){
  253. gTimeElapsed=0;
  254. }
  255. integer CountDown = MaxTicks - (integer)gTimeElapsed;
  256. integer mm = (CountDown / 60) * 100;
  257. integer ss = (CountDown % 60);
  258. integer cc = mm + ss;
  259. displaycountdowntext((integer)gTimeElapsed);
  260. getdigit((integer)cc);
  261. }
  262. }