ZenMondo's Not So Simple Door 2.1.5

From ZenMondo Wormser, 1 Year ago, written in Linden Scripting, viewed 415 times.
URL http://flynnos.org/flynnbin/view/7b4a10e0 Embed
Download Paste or View Raw
  1. /////////////////////////////
  2. // ZenMondo's Not So Simple Door 2.1.5
  3. //
  4. // Full featured door script.
  5. // Access list is contained on a notecard named 'users'
  6. // Put an Avatar's Username on each line of the notecard.
  7. //
  8. // Access the door menu by clicking on the door.  The menu
  9. // will dynamically change depending on the door's status.
  10. //
  11. // Place this script and the notecard 'users' in a box prim
  12. // that has a Path Cut of Begin: 0.3750 End: 0.8750
  13. /////////////////////////////
  14.  
  15.  
  16. integer isClosed;
  17. integer isLocked;
  18. integer stayOpenFlag;
  19.  
  20.  
  21. string AutoOption = "Stay Open";
  22. string LockOption = "Lock";
  23. string OpenOption = "Open";
  24.  
  25. list OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  26.  
  27. key OwnerKey;
  28.  
  29. integer userChannel = -11811;
  30. integer handle;
  31.  
  32. integer buttonFlag;
  33.  
  34. integer position = 0;
  35. string notecard = "users";
  36. key query;
  37. list users;
  38.  
  39.  
  40. OpenDoor()
  41. {
  42.     rotation rot = llGetRot();
  43.     rotation delta = llEuler2Rot(<0,0,PI/8>);
  44.     rot = delta * rot;
  45.     llSetRot(rot);
  46.     llSleep(0.25);
  47.     rot = delta * rot;
  48.     llSetRot(rot);
  49.     llSleep(0.25);
  50.     rot = delta * rot;
  51.     llSetRot(rot);
  52.     llSleep(0.25);
  53.     rot = delta * rot;
  54.     llSetRot(rot);
  55.    
  56.     isClosed = FALSE;
  57.     OpenOption = "Close";
  58.     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  59. }
  60.  
  61. CloseDoor()
  62. {
  63.     rotation rot = llGetRot();
  64.     rotation delta = llEuler2Rot(<0,0,-PI/8>);
  65.     rot = delta * rot;
  66.     llSetRot(rot);
  67.     llSleep(0.25);
  68.     rot = delta * rot;
  69.     llSetRot(rot);
  70.     llSleep(0.25);
  71.     rot = delta * rot;
  72.     llSetRot(rot);
  73.     llSleep(0.25);
  74.     rot = delta * rot;
  75.     llSetRot(rot);
  76.            
  77.     isClosed = TRUE;
  78.     OpenOption = "Open";
  79.     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  80. }
  81.  
  82. {
  83.     state_entry()
  84.     {
  85.         OwnerKey = llGetOwner();
  86.         userChannel = -((integer)llFrand(2147483646.0) + 1);
  87.        
  88.         isClosed = TRUE;
  89.         isLocked = FALSE;
  90.         stayOpenFlag = FALSE;
  91.  
  92.  
  93.         AutoOption = "Stay Open";
  94.         LockOption = "Lock";
  95.         OpenOption = "Open";
  96.        
  97.         llSensorRepeat("", NULL_KEY, AGENT, 2.0, PI, 1.0);
  98.        
  99.         if(llGetInventoryType(notecard) == INVENTORY_NOTECARD)
  100.         {
  101.             query = llGetNotecardLine(notecard, position);
  102.         }
  103.        
  104.         else
  105.         {
  106.             llOwnerSay(notecard + " is not a notecard in the object's inventory.");
  107.         }
  108.        
  109.     }
  110.  
  111.     touch_start(integer total_number)
  112.     {
  113.         string touching_me = llToLower(llDetectedName(0));
  114.        
  115.         if(llDetectedKey(0) == OwnerKey || llListFindList(users, [touching_me]) != -1)
  116.         {
  117.             handle = llListen(userChannel, "", llDetectedKey(0), "");
  118.             llDialog(llDetectedKey(0), "Door Options", OwnerMenu, userChannel);
  119.             llSetTimerEvent(30);
  120.         }
  121.        
  122.         else
  123.         {
  124.             if(!isLocked && isClosed)
  125.             {
  126.                 llSensorRemove();
  127.                 OpenDoor();
  128.                 buttonFlag = TRUE;
  129.                 llSensorRepeat("", NULL_KEY, AGENT, 2.0, PI, 10.0);  
  130.             }
  131.         }
  132.     }
  133.    
  134.     listen(integer channel, string name, key id, string message)
  135.     {
  136.         if (llListFindList(OwnerMenu, [message]) != -1)  // verify dialog choice
  137.         {
  138.             if(message == AutoOption)
  139.             {
  140.                 if(AutoOption == "Stay Open")
  141.                 {
  142.                     AutoOption = "Close Automaticaly";
  143.                     stayOpenFlag = TRUE;
  144.                     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  145.                 }
  146.                 else
  147.                 {
  148.                     AutoOption = "Stay Open";
  149.                     stayOpenFlag = FALSE;
  150.                     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  151.                 }
  152.             }
  153.            
  154.             if(message == LockOption)
  155.             {
  156.                 if(LockOption == "Lock")
  157.                 {
  158.                     LockOption = "Unlock";
  159.                     isLocked = TRUE;
  160.                     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  161.                 }
  162.                
  163.                 else
  164.                 {
  165.                     LockOption = "Lock";
  166.                     isLocked = FALSE;
  167.                     OwnerMenu = [ AutoOption, LockOption,  OpenOption  ];
  168.                 }
  169.                
  170.             }
  171.            
  172.             if(message == OpenOption)
  173.             {
  174.                 if(OpenOption == "Open")
  175.                 {
  176.                     llSensorRemove();
  177.                     OpenDoor();
  178.                     buttonFlag = TRUE;
  179.                     llSensorRepeat("", NULL_KEY, AGENT, 2.0, PI, 10.0);  
  180.                    
  181.                 }
  182.                 else
  183.                 {
  184.                     CloseDoor();
  185.                 }  
  186.             }
  187.         }
  188.        
  189.     }
  190.    
  191.    
  192.     sensor(integer num_detected)
  193.     {
  194.         if(!isLocked && isClosed)
  195.         {
  196.             OpenDoor();
  197.         }  
  198.     }
  199.    
  200.     no_sensor()
  201.     {
  202.         if(buttonFlag)
  203.         {
  204.              llSensorRepeat("", NULL_KEY, AGENT, 2.0, PI, 1.0);
  205.              buttonFlag = FALSE;
  206.         }
  207.    
  208.        
  209.         if(!stayOpenFlag && !isClosed)
  210.         {
  211.             CloseDoor();
  212.         }
  213.     }
  214.    
  215.     timer()
  216.     {
  217.         llSetTimerEvent(0);
  218.         llListenRemove(handle);
  219.     }
  220.    
  221.     dataserver(key request, string data)
  222.     {
  223.         if(query == request)
  224.         {
  225.             if(data == EOF)
  226.             {
  227.                 llSay(0, "Ready");
  228.                 //End of notecard!
  229.             }
  230.             else
  231.             {
  232.                 //Do something with the data
  233.                
  234.                 users = (users=[]) + users + llToLower(llStringTrim(data, STRING_TRIM));
  235.                
  236.                 //llSay(0, "Added " + data +" to access list.");
  237.                
  238.                 //Increase the position variable and
  239.                 ++position;
  240.                 //Continue reading the next lines.
  241.                 query = llGetNotecardLine(notecard, position);
  242.             }
  243.         }
  244.     }
  245.    
  246.    
  247.     changed(integer change)
  248.     {
  249.         if(change & CHANGED_OWNER)
  250.         {
  251.             llWhisper(0, "Control Given To:" + llKey2Name(llGetOwner()));
  252.             llResetScript();
  253.            
  254.         }
  255.        
  256.         if(change & CHANGED_INVENTORY)
  257.         {
  258.             llResetScript();
  259.         }
  260.     }
  261.    
  262.     on_rez(integer start_param)
  263.     {
  264.         llResetScript();
  265.     }
  266. }
  267.  

Reply to "ZenMondo's Not So Simple Door 2.1.5"

Here you can reply to the paste above

captcha