Advertisement
Guest User

t1cr

a guest
Oct 9th, 2016
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function(context, args)
  2.  
  3. {
  4.    
  5.     function nxtLockChk(t)
  6.     {
  7.         if (!t.ret.split('\n')[2]) //if this member is missing no more locks
  8.         {  
  9.             #db.r({ledger:"locs", loc:t["loc"]});
  10.             l.log("Done and removed from db.");
  11.         }  
  12.         else
  13.         {
  14.             t["lock"] = t.ret.split('\n')[2].split(' ')[t.ret.split('\n')[2].split(' ').length-2].slice(1, -1);
  15.             l.log("Going for next lock --- " + t["lock"]);
  16.             release(t);
  17.         }
  18.        
  19.     }
  20.  
  21.     function lWord(t)
  22.     {
  23.         var unl = ["open", "release", "unlock"];
  24.         for (var i = 0; i < 3; i++)
  25.         {
  26.                 t.params[t["lock"]] = unl[i];
  27.             t.ret = t.call(t.params);
  28.             if (t.ret.split(" ")[t.ret.split(" ").length-1].slice(0, -1) != "command")
  29.                 return true;
  30.         }
  31.     }
  32.  
  33.     function lNumber(t)
  34.     {  
  35.         t.nxtParam = t.ret.split(" ")[t.ret.split(" ").length-3].slice(1,-1);
  36.         for (var j = 0; j < 10; j++)
  37.         {  
  38.             t.params[t.nxtParam] = j;
  39.             t.ret = t.call(t.params);
  40.             if (t.ret.split("\n")[0].substr(0, 15) == "!LOCK_UNLOCKED!")
  41.                 return true;
  42.         }
  43.     }
  44.  
  45.     function lPrime(t)
  46.     {
  47.         //Computing them took too much time, shuffling seems to help, no more timeouts on EZ_40s
  48.         var primes = l.shuffle([2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]);
  49.         t.nxtParam = t.ret.split(" ")[t.ret.split(" ").length-3].slice(1,-1);
  50.         for (var prime in primes)
  51.         {
  52.             t.params[t.nxtParam] = primes[prime];
  53.             t.ret = t.call(t.params);
  54.             if (t.ret.split("\n")[0].substr(0, 15) == "!LOCK_UNLOCKED!")
  55.                 return true;
  56.         }
  57.     }
  58.  
  59.     function cSeries(t)
  60.     {
  61.         function lTheory(selector) //t2 = 3, comp = 4, t1 = 5
  62.         {  
  63.             var cIndex = clrs.indexOf(t.params[t["lock"]]);
  64.             t.nxtParam = t.ret.split(" ")[t.ret.split(" ").length-3].slice(1,-1);
  65.             //Using the ternary op to warp around the array max
  66.             t.params[t.nxtParam] = clrs[(cIndex+selector)>7 ? (cIndex+selector)%8 : cIndex+selector];
  67.             t.ret = t.call(t.params);
  68.         }
  69.  
  70.         var clrs = ["red", "orange", "yellow", "lime", "green", "cyan", "blue", "purple"];
  71.         for (var clr in clrs)
  72.         {
  73.             t.params[t["lock"]] = clrs[clr];
  74.             t.ret = t.call(t.params);
  75.                 if (t.ret.split(" ")[t.ret.split(" ").length-1].slice(0, -1) != "name")
  76.                     break;
  77.         }
  78.  
  79.        
  80.         switch (t["lock"])
  81.         {
  82.             case "c001":
  83.                 lNumber(t);
  84.                 break;
  85.             case "c002":
  86.                 lTheory(4);
  87.                 break;
  88.             case "c003":
  89.                 lTheory(5);
  90.                 lTheory(3);    
  91.         }
  92.     }
  93.  
  94.     function ezSeries(t)
  95.     {
  96.         lWord(t);
  97.         if (t["lock"] == "EZ_40")
  98.             lPrime(t);
  99.         else
  100.             lNumber(t);            
  101.     }
  102.  
  103.     function release(t)
  104.     {
  105.         l.log("Hitting -- " + t.loc + " -- " + t.lock);
  106.         if (t["lock"].substr(0, 2) == "EZ")
  107.             ezSeries(t);
  108.         else
  109.             cSeries(t);
  110.         nxtLockChk(t);
  111.     }
  112.  
  113.     var l = #s.scripts.lib();
  114.    
  115.     for (var targ in args)
  116.     {  
  117.         var target =
  118.         {
  119.             loc:args[targ].name,
  120.             call:args[targ].call,
  121.             params:{},
  122.             ret:"",
  123.             lock:#db.f({ledger:"locs", loc:args[targ].name}).first().lock,
  124.             nxtParam:""
  125.         };
  126.  
  127.         if (target["lock"] == "UNK") //updates the db with lock types
  128.         {
  129.             target.ret = target.call({});
  130.             if (target.ret.substr(0,12) != "+LOCK_ERROR+")
  131.                 #db.r({ledger: "locs", loc:target["loc"]});
  132.             else
  133.             {
  134.                 target["lock"] = target.ret.split(" ")[target.ret.split(" ").length-2].slice(1, -1);
  135.                 #db.u({ledger: "locs", loc:target["loc"]}, {$set:{lock:target["lock"]}});
  136.             }
  137.         } else
  138.             release(target);   
  139.     }  
  140.     return { ok:true, msg:l.get_log() };
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement