libpbr2

You don't need this unless you're planning on writing a script that runs alongside Replay Rewrite.

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/1371/3533/libpbr2.js

  1. // ==UserScript==
  2. // @name libpbr2
  3. // @description You don't need this unless you're planning on writing a script that runs alongside Replay Rewrite.
  4. // @include http://www.goallineblitz.com/game/replay.pl?game_id=*&pbp_id=*
  5. // @copyright 2009, pabst
  6. // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
  7. // @version 13.11.25
  8. // ==/UserScript==
  9.  
  10. var fieldLayerZ = 0;
  11. var lowerDecalLayerZ = 64;
  12. var lineLayerZ = 128;
  13. var middleDecalLayerZ = 192;
  14. var playerLayerZ = 255;
  15. var upperDecalLayerZ = 768;
  16. var iconOverlayLayerZ = 1024;
  17.  
  18. var startLimit = 0;
  19. var lockTime = 0;
  20.  
  21. function importPBP(address, page) {
  22. console.log("inserting pbp");
  23. var pbp = document.getElementById("pbp");
  24. pbp.style.visibility = "hidden";
  25. pbp.style.display = "none";
  26. var string = page.responseText.replace(/<img/g,"<div").replace(/\/img/g,"/div>");
  27. string = string.slice(string.indexOf('<div id="content">'));
  28. string = string.slice(0,string.indexOf('<div id="footer">'));
  29. pbp.innerHTML = string;
  30. /*
  31. var code = page.responseText.split('<body onload="loadInbox()">')[1];
  32. code = code.replace(/<script /g,"<crap ");
  33. code = code.replace(/<\/script>/g,"/crap>");
  34. code = code.replace(/<link /g,"<crap ");
  35. pbp.innerHTML = code;
  36. */
  37. }
  38.  
  39. function init(needsPBP) {
  40. // console.log("init");
  41. if (startLimit == 0) {
  42. startLimit++;
  43. addToActive();
  44. activate();
  45. }
  46.  
  47. if (needsPBP == true) {
  48. var pbptag = document.createElement("div");
  49. pbptag.setAttribute("id","pbp");
  50.  
  51. var pbp = document.getElementById("pbp");
  52. if (pbp == null) {
  53. document.body.appendChild(pbptag);
  54.  
  55. var href = window.location.toString();
  56. href = href.replace("replay.pl","game.pl");
  57. var idx = href.indexOf("&pbp_id");
  58. href = href.slice(0,idx) + "&mode=pbp";
  59.  
  60. console.log("loading pbp");
  61. getInetPage(href, importPBP);
  62. return;
  63. }
  64. else if (pbp.childNodes.length == 0) {
  65. console.log("waiting for pbp");
  66. setTimeout(init, 300);
  67. return;
  68. }
  69. }
  70. if (document.getElementById("rrplay") == null) {
  71. if (startLimit >= 10) return;
  72. startLimit++;
  73. setTimeout(init, 300);
  74. return;
  75. }
  76. else {
  77. var rrplay = document.getElementById("rrplay");
  78. rrplay.addEventListener("change",function(e) { activate(e) }, false);
  79. }
  80. }
  81.  
  82. function deinit() { }
  83.  
  84. function addToActive() {
  85. // console.log("addToActive");
  86. var list = document.getElementById("active_list");
  87. if (list == null) {
  88. // console.log("addToActive: "+scriptName+" waiting");
  89. if (startLimit < 10) {
  90. startLimit++;
  91. setTimeout(addToActive,1000);
  92. }
  93. return;
  94. }
  95.  
  96. var div = document.createElement("div");
  97. div.innerHTML = scriptName+" : "+scriptVersion;
  98. list.appendChild(div);
  99.  
  100. if (GM_getValue) {
  101. var data = GM_getValue(scriptName);
  102. if (data == null) {
  103. GM_setValue(scriptName,0+"\t"+scriptVersion);
  104. data = GM_getValue(scriptName);
  105. }
  106.  
  107. var date = parseInt(data.split("\t")[0]);
  108. var ver = data.split("\t")[1];
  109. console.log("Checking for update : "+scriptName+" ("+date+") ("+ver+")");
  110.  
  111. var delay = 12*60*60*1000;
  112. if (((new Date()).getTime() - parseInt(date)) > delay) {
  113. console.log("checking for new version");
  114. GM_getInetPage(scriptWebpage.replace("/show/","/source/") + ".meta.js", updateCheck);
  115. }
  116. else if (ver != scriptVersion) {
  117. console.log("using local version");
  118. updateCheck(null, null, ver);
  119. }
  120. else {
  121. console.log("too soon to check");
  122. }
  123. }
  124. }
  125.  
  126. function lock(e) {
  127. console.log("locked "+scriptName);
  128. lockTime = new Date();
  129.  
  130. var pd = unsafeWindow.play_data;
  131. if (pd == null) {
  132. console.log("no play_data: turn flash replays off?");
  133. }
  134.  
  135. var rrplay;
  136. if (e == null) {
  137. rrplay = document.getElementById("rrplay");
  138. }
  139. else {
  140. rrplay = e.target;
  141. }
  142. if (rrplay == null) {
  143. console.log("rrplay == null");
  144. return;
  145. }
  146.  
  147. var div = document.createElement("div");
  148. div.setAttribute("id",scriptName);
  149. rrplay.appendChild(div);
  150. }
  151.  
  152. function unlock() {
  153. var time = new Date() - lockTime;
  154. console.log("unlocked : "+scriptName+" : "+time.toFixed(0)+"ms");
  155. var div = document.getElementById(scriptName);
  156. if (div != null) div.parentNode.removeChild(div);
  157. }
  158.  
  159. function updateCheck(address, page, v) {
  160. console.log("updateCheck : loaded "+address);
  161. var version = null;
  162. if (address != null) {
  163. // console.log(page.responseText);
  164. version = page.responseText.split("@version")[1];
  165. version = version.split("/")[0];
  166. version = version.replace(/^\s*|\s*$/g,"");
  167. // console.log("'"+version+"'");
  168. GM_setValue(scriptName,(new Date().getTime().toString())+"\t"+version);
  169. }
  170. else {
  171. version = v;
  172. }
  173.  
  174. if (scriptVersion != version) {
  175. var div = document.getElementById("active_list");
  176. for (var i=0; i<div.childNodes.length; i++) {
  177. var c = div.childNodes[i];
  178. if (c.innerHTML.indexOf(scriptName) == 0) {
  179. c.innerHTML +=" &nbsp;(";
  180. var a = document.createElement("a");
  181. a.href = scriptWebpage;
  182. a.innerHTML = version+" available";
  183. c.appendChild(a);
  184. c.innerHTML +=")";
  185. }
  186. }
  187. }
  188. }
  189.  
  190. function arraySum(arr,start) {
  191. var total = 0;
  192. for (var i=start; i<arr.length; i++) {
  193. total += arr[i];
  194. }
  195. return total;
  196. }
  197.  
  198. function fixEscapedText(str) {
  199. var s = str;
  200. while (s.indexOf('"') != -1) {
  201. s = s.replace('"',"&quot;");
  202. }
  203. while (s.indexOf("'") != -1) {
  204. s = s.replace("'","&#39;");
  205. }
  206. return s;
  207. }
  208.  
  209. function trim(str) {
  210. var s = str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  211. return s.replace(/\n/," ");
  212. }
  213.  
  214. function setCookie(c_name, value) {
  215. var strs = new Array();
  216. var v = btoa(escape(value));
  217. if (GM_setValue != null) {
  218. GM_setValue(c_name,v);
  219. //console.log("writing gmValue ("+value.length+" --> "+v.length+") :"+c_name+" ==> "+v);
  220. }
  221. else {
  222. var cw = c_name + "=" + v +";";
  223. document.cookie = cw;
  224. //console.log("writing cookie ("+value.length+" --> "+v.length+") :"+c_name+" ==> "+v);
  225. }
  226. }
  227.  
  228. function getCookie(c_name) {
  229. if (GM_getValue != null) {
  230. var s = GM_getValue(c_name,"");
  231. // console.log(c_name+" --> '"+s+"'");
  232. return unescape(atob(s));
  233. }
  234. else {
  235. var start = document.cookie.indexOf(c_name+"=");
  236. if (start != -1) {
  237. console.log(document.cookie);
  238. var s = document.cookie.slice(start+(c_name+"=").length);
  239. s = s.slice(0,s.indexOf(";"));
  240. var c = s;
  241. // console.log(c_name+" --> '"+s+"'");
  242. return unescape(atob(s));
  243. }
  244. else {
  245. console.log("cookie not set");
  246. }
  247. }
  248. return null;
  249. }
  250.  
  251. function rangeCheck(arr, i) {
  252. if (i < 0) return false;
  253. if (i >= arr.length) return false;
  254. return true;
  255. }
  256.  
  257. function findChild(id,node) {
  258. if (node.id+"" == id+"") {
  259. return node;
  260. }
  261. //for each (var c in node.childNodes) {
  262. for (var i=0; i<node.childNodes.length; i++) {
  263. var c = node.childNodes[i];
  264. var r = findChild(id,c);
  265. if (r != null) {
  266. return r;
  267. }
  268. }
  269. return null;
  270. }
  271.  
  272. function getInetPage(address, func, target) {
  273. console.log("getInetPage : "+address);
  274. var req = new XMLHttpRequest();
  275. req.open( 'GET', address, true );
  276. req.onreadystatechange = function() {
  277. if (target != null) {
  278. var d = ["..","...","."];
  279. var str = target.innerHTML.split(" ");
  280. target.innerHTML = str[0]+" "+d[str[1].length-1];
  281. }
  282. };
  283. req.onload = function() {
  284. if (this.status != 200) {
  285. alert("pbr gm script: Error "+this.status+" loading "+address);
  286. }
  287. else {
  288. console.log("loaded: "+address)
  289. func(address,this);
  290. }
  291. };
  292.  
  293. req.send(null);
  294. return req;
  295. }
  296.  
  297. function GM_getInetPage(address, func, target) {
  298. console.log("GM_getInetPage : "+address);
  299. GM_xmlhttpRequest({
  300. method: 'GET',
  301. url: address,
  302. headers: {
  303. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  304. 'Accept': 'application/atom+xml,application/xml,text/xml',
  305. },
  306. onload: function(page) {
  307. console.log("loaded: "+address)
  308. func(address,page);
  309. }
  310. });
  311. }
  312.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址