Advertisement
kopilo

RLVa - change group on teleport, use notecard as config.

Feb 8th, 2012
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. key owner;
  2. string region;
  3. list regions;
  4. list groups;
  5. string defaultgroup;
  6. //notecard
  7. integer qline = 0;
  8. key query;
  9. key nc;
  10. //listen
  11. integer listener;
  12. integer chan = -1337;
  13.  
  14. loadGroups() {
  15.     llOwnerSay("loading notecard...");
  16.     qline = 0;
  17.     groups = [];
  18.     regions = [];
  19.     defaultgroup = "";
  20.     nc = llGetInventoryKey("config");
  21.     if(nc == NULL_KEY) { llOwnerSay("NC not found: please make sure your notecard is called \"config\" without the quotation marks."); return;}
  22.     query = llGetNotecardLine(nc, qline);
  23.     llOwnerSay("finish loading.");
  24. }
  25.  
  26. integer setGroup() {
  27.     region = llGetRegionName();
  28.     integer i;
  29.     integer max = llGetListLength(regions);
  30.     for(i = 0;i <= max;i++) {
  31.         string tmp = llList2String(regions, i);
  32.        
  33.         if(llGetSubString(tmp, -1, -1) == "*") {
  34.             //region match
  35.             if(tmp == (llGetSubString(region,0, (llStringLength(tmp) - 2)) + "*" )) {
  36.                 llOwnerSay("@setgroup:"+ llList2String(groups, i) +"=force");
  37.                 i = max;
  38.                 return TRUE;
  39.             }
  40.         }
  41.         //no wildcard
  42.         else {
  43.             if(tmp == region) {
  44.                 llOwnerSay("@setgroup:"+ llList2String(groups, i) +"=force");
  45.                 i = max;
  46.                 return TRUE;
  47.             }
  48.         }
  49.     }
  50.     return FALSE;
  51. }
  52.  
  53.  
  54. default
  55. {
  56.     attach(key av) { llResetScript(); }
  57.     state_entry() {
  58.         llSetColor(<0,1,0>,ALL_SIDES);
  59.         if(groups == []) loadGroups();
  60.         owner = llGetOwner();
  61.         if(setGroup() == FALSE)  llOwnerSay("@setgroup:"+ defaultgroup +"=force");;
  62.     }
  63.     changed(integer p) {
  64.         if(p & CHANGED_REGION) if(setGroup() == FALSE)  llOwnerSay("@setgroup:"+ defaultgroup +"=force");
  65.         if((p & CHANGED_OWNER) || (p & CHANGED_INVENTORY)) loadGroups();
  66.     }
  67.     dataserver(key query_id, string data) {
  68.         if(query != query_id) return;
  69.         if(data == EOF) return;
  70.         //clean
  71.         data = llStringTrim(data, STRING_TRIM);
  72.         if(llGetSubString(data,0,0) != "#") {
  73.        
  74.         list tmp = llParseString2List(data, ["="], []);    
  75.             //key=value
  76.             if(llGetListLength(tmp) > 1) {
  77.                 regions += [llList2String(tmp,0)]; groups += [llList2String(tmp,1)];
  78.             }
  79.             else { //default
  80.                 defaultgroup = data;
  81.             }
  82.         }
  83.         qline++; query = llGetNotecardLine(nc, qline);
  84.     }
  85.    
  86.     touch_start(integer i) {
  87.         if(owner == llDetectedKey(0)) {
  88.             listener = llListen(chan, "", owner, ""); llDialog(owner, "Choose an action..", ["Reset", "Disable"], chan);
  89.         }
  90.     }
  91.    
  92.     listen(integer chan, string name, key av, string msg) {
  93.         llListenRemove(listener);
  94.         if(msg == "Reset") llResetScript();
  95.         else if(msg == "Disable") state off;
  96.     }
  97. }
  98.  
  99. state off {
  100.     state_entry() { llSetColor(<1,0,0>,ALL_SIDES); }
  101.     touch_start(integer i) {
  102.         if(owner == llDetectedKey(0)) {
  103.             listener = llListen(chan, "", owner, ""); llDialog(owner, "Choose an action..", ["Reset", "Enable"], chan);
  104.         }
  105.     }
  106.     listen(integer chan, string name, key av, string msg) {
  107.         llListenRemove(listener);
  108.         if(msg == "Reset") llResetScript();
  109.         else if(msg == "Enable") state default;
  110.     }
  111.     changed(integer p) {
  112.         if((p & CHANGED_OWNER) || (p & CHANGED_INVENTORY)) loadGroups();
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement