light_control.lsl 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // :SHOW:1
  2. // :CATEGORY:Light
  3. // :NAME:Rene Free Lighting System
  4. // :AUTHOR:Rene10957 Resident
  5. // :KEYWORDS: light,lamp,lighting light
  6. // :CREATED:2015-06-11 14:41:08
  7. // :EDITED:2016-03-30 20:29:28
  8. // :ID:1079
  9. // :NUM:1771
  10. // :REV:1.1
  11. // :WORLD:Opensim
  12. // :DESCRIPTION:
  13. // Light Control (light without bulbs)
  14. // :CODE:
  15. // :LICENSE: CC0 (Public Domain)
  16. // Rene's Free Lighting System - Light Control (light without bulbs)
  17. //
  18. // Author: Rene10957 Resident
  19. // Date: 21-03-2014
  20. //
  21. // Use together with switch and drop in the same prim
  22. // No other scripts are needed
  23. // License: CC0 (Public Domain).
  24. // To the extent possible under law, Rene10957 has waived all copyright and related or neighboring rights.
  25. // For more information, see http://creativecommons.org/publicdomain/zero/1.0/.
  26. //////////////////////////////////////////
  27. // Please read user manual before using //
  28. //////////////////////////////////////////
  29. string title = "Light Control"; // title
  30. string version = "1.1"; // version
  31. integer silent = TRUE; // silent startup
  32. // Constants
  33. integer switchChannel = -10957; // switch channel
  34. // Functions
  35. string getGroup(integer link)
  36. {
  37. list desc = llGetLinkPrimitiveParams(link, [PRIM_DESC]);
  38. string str = llToLower(llStringTrim(llList2String(desc, 0), STRING_TRIM));
  39. if (str == "(no description)" || str == "") str = "default";
  40. return str;
  41. }
  42. unpackMessage(string msg)
  43. {
  44. list msgList = llCSV2List(msg);
  45. string group = llToLower(llList2String(msgList, 0));
  46. integer on = (integer)llList2String(msgList, 1);
  47. vector color = (vector)llList2String(msgList, 2);
  48. float intensity = (float)llList2String(msgList, 3);
  49. float radius = (float)llList2String(msgList, 4);
  50. float falloff = (float)llList2String(msgList, 5);
  51. float alpha = (float)llList2String(msgList, 6);
  52. float glow = (float)llList2String(msgList, 7);
  53. integer fullbright = (integer)llList2String(msgList, 8);
  54. vector primColor = (vector)llList2String(msgList, 9);
  55. integer i;
  56. integer number = llGetNumberOfPrims();
  57. integer link = llGetLinkNumber();
  58. for (i = number; i >= 0; --i) {
  59. if (group == getGroup(i)) {
  60. if (i != link || i < 2) {
  61. llSetLinkPrimitiveParamsFast(i, [
  62. PRIM_POINT_LIGHT, on, color, intensity, radius, falloff,
  63. PRIM_COLOR, ALL_SIDES, primColor, alpha,
  64. PRIM_GLOW, ALL_SIDES, glow,
  65. PRIM_FULLBRIGHT, ALL_SIDES, fullbright]);
  66. }
  67. }
  68. }
  69. }
  70. default
  71. {
  72. state_entry()
  73. {
  74. if (!silent) llWhisper(0, title + " " + version + " ready");
  75. }
  76. on_rez(integer start_param)
  77. {
  78. llResetScript();
  79. }
  80. link_message(integer sender_number, integer number, string msg, key id)
  81. {
  82. if (number == switchChannel) unpackMessage(msg);
  83. }
  84. }