您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enables the use of custom fields when viewing plays with the replay rewrite script.
// ==UserScript== // @name Replay Rewrite - Custom Graphics On Replay // @description Enables the use of custom fields when viewing plays with the replay rewrite script. // @namespace pbr/cgor // @include http://*goallineblitz.com/game/replay.pl?game_id=*&pbp_id=* // @include http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=* // @copyright 2010, pabst // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/ // @version 13.12.291 // @require https://greasyfork.org/scripts/1371-libpbr2/code/libpbr2.js?version=3533 // ==/UserScript== var scriptName = "Custom Graphics"; var scriptVersion = "13.12.29"; var scriptWebpage = "http://userscripts.org/scripts/show/54524"; // XML stadium descriptions are at the bottom of this file var useXMLDescription = true; var useRemoteXML = true; // if XML descriptions = true, set the booleans to image types you want to see. // if XML descriptions = false, set the booleans to image types you want to see and set the addresses here. // 1080x480 var enableFieldLayer = true; var fieldImage = null; //"http://img242.imageshack.us/img242/6797/fieldnewbasefixedkp2.png"; var fieldImageX = 520; //set to the x-axis length of your image if not using xml var fieldImageY = 1160; //set to the y-axis length of your image if not using xml // 1080x480 var enableLineLayer = true; var lineImage = "http://img527.imageshack.us/img527/3776/glblinesyk7.png"; // 480x91 including outline var enableLowerDecalLayer = true; var northEndZoneImage = "http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-top.jpg"; var southEndZoneImage = "http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-bottom.jpg"; // x & y size MUST be set to the size of your image var enableMiddleDecalLayer = true; var middleDecalImage = "http://img184.imageshack.us/img184/320/glblogotx0.png"; var middleDecalImageX = 224; //set to the x-axis length of your image if not using xml var middleDecalImageY = 140; //set to the y-axis length of your image if not using xml // 1080x480 var enableUpperDecalLayer = true; var upperDecalImage = "http://img515.imageshack.us/img515/9223/glboverlaymappedto100vu7.png"; // you can modify the previous variables // don't screw with these var hometeam = unsafeWindow.home; var runUpdate = fieldGraphicsUpdate; var deff = "/images/game/fields/grass_plain.jpg"; window.setTimeout( function() { init(); }, 100); function activate(e) { console.log("activate custom graphics"); lock(); if (fieldImage == null) { if (document.getElementById("field_image") != null) { console.log("no field_image element yet! failure imminent?"); fieldImage = document.getElementById("field_image").src; deff = fieldImage; } else { fieldImage = deff; //deff @ 51 } } var inp = document.getElementById("use_graphics"); if (inp == null) { var br = document.createElement("br"); inp = document.createElement("input"); inp.id = "use_graphics"; inp.type = "checkbox"; var data = "0"; if (GM_getValue) { data = GM_getValue("use_graphics",0); if (data == "1") { inp.checked = true; } } var text = document.createElement("text"); text.textContent = " Use default field"; var footer = document.getElementById("replay_footer"); footer.style.height = "90px"; var options = document.getElementById("options_popup"); options.appendChild(br); options.appendChild(inp); options.appendChild(text); inp.addEventListener("click",boxClicked,false); } if (inp.checked == false) { runUpdate(); } unlock(); } function boxClicked(e) { lock(); if (e.target.checked == false) { if (GM_setValue) { GM_setValue("use_graphics",0); } var addr = window.location.toString(); addr = addr.split("game")[0]+"game/team.pl?team_id="+hometeam; getInetPage(addr, remoteXMLHandler, null); } else { if (GM_setValue) { GM_setValue("use_graphics",1); } var ids = ["upperdecals","middledecals","lowerdecals","linelayer"]; for (var i=0; i<ids.length; i++) { var div = document.getElementById(ids[i]); if (div != null) { div.parentNode.removeChild(div); } } var saved = useRemoteXML; useRemoteXML = false; fieldGraphicsUpdate("<root><team id='"+hometeam+"'><field x='520' y='1160'>"+deff+"</field></team></root>"); useRemoteXML = saved; } } function remoteXMLHandler(addr, page) { //console.log(page.responseText); var xmlDesc = null; var src = page.responseText.split('<div id="team_note_content"'); if (src.length > 1) { src = '<div id="team_note_content"'+src[1]; src = src.split("</div>")[0]+"</div"; var div = document.createElement("div"); div.innerHTML = src; src = div.textContent; //console.log(src); xmlDesc = '<root><team id="'+hometeam+'">'; var found = false; var tags = ["field","north","south","middle","upper"]; for (var i=0; i<tags.length; i++) { var layer = ""; var start = src.indexOf("<"+tags[i]); if (start != -1) { var end = src.indexOf("</"+tags[i]+">")+("</"+tags[i]+">").length; layer = src.slice(start, end); xmlDesc += layer; found = true; } //console.log(start+" -- "+end+" : "+layer); } if (found == true) { xmlDesc += '</team></root>'; } else { xmlDesc = null; } } else if (useXMLDescription == true) { console.log("No remote XML source. Using xmlDescription."); xmlDesc = xmlDescription; } var saved = useRemoteXML; useRemoteXML = false; fieldGraphicsUpdate(xmlDesc); useRemoteXML = saved; } function fieldGraphicsUpdate(xml) { console.log("xml="+xml); if (useRemoteXML == true) { // console.log("hometeam="+hometeam); var addr = window.location.toString(); addr = addr.split("game")[0]+"game/team.pl?team_id="+hometeam; getInetPage(addr, remoteXMLHandler, null); return; } if (xml != null) { var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xml, "application/xml"); var teams = xmlDoc.getElementsByTagName("team"); console.log("Remote XML: "+hometeam); var found = false; for (var i=0; i<teams.length; i++) { var t = teams[i]; if (t.getAttribute("id") == hometeam) { if (setImages(t) == true) { fieldGraphicsInsert(); found = true; break; } } } if (found == false) { for (var i=0; i<teams.length; i++) { var t = teams[i]; if (t.getAttribute("id") == "-1") { if (setImages(t) == true) { fieldGraphicsInsert(); break; } } } } } else if (useXMLDescription == true) { var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlDescription, "application/xml"); var teams = xmlDoc.getElementsByTagName("team"); console.log("Local XML: "+hometeam+": number of teams in XML = "+teams.length); var found = false; for (var i=0; i<teams.length; i++) { var t = teams[i]; if (t.getAttribute("id") == hometeam) { if (setImages(t) == true) { fieldGraphicsInsert(); found = true; break; } } } if (found == false) { for (var i=0; i<teams.length; i++) { var t = teams[i]; if (t.getAttribute("id") == "-1") { if (setImages(t) == true) { fieldGraphicsInsert(); break; } } } } } else { fieldGraphicsInsert(); } } function setImages(t) { var change = false; var f = t.getElementsByTagName("field")[0]; if (f != null) { if ((f.textContent != null) && (f.textContent != "null")) { if (f.textContent.length > 0) { fieldImage = f.textContent; } } var x = f.getAttribute("x"); var y = f.getAttribute("y"); if (x != null) fieldImageX = parseInt(x); if (y != null) fieldImageY = parseInt(y); change = true; } else { fieldImage = null; } var l = t.getElementsByTagName("line")[0]; if (l != null) { lineImage = l.textContent; if (l.textContent.length == 0) lineImage = null; change = true; } else lineImage = null; var n = t.getElementsByTagName("north")[0]; if (n != null) { northEndZoneImage = n.textContent; if (n.textContent.length == 0) northEndZoneImage = null; change = true; } else northEndZoneImage = null; var s = t.getElementsByTagName("south")[0]; if (s != null) { southEndZoneImage = s.textContent; if (s.textContent.length == 0) southEndZoneImage = null; change = true; } else southEndZoneImage = null; var u = t.getElementsByTagName("upper")[0]; if (u != null) { upperDecalImage = u.textContent; if (u.textContent.length == 0) upperDecalImage = null; change = true; } else upperDecalImage = null; var m = t.getElementsByTagName("middle")[0]; if (m != null) { middleDecalImage = m.textContent; if (m.textContent.length == 0) middleDecalImage = null; else { middleDecalImageX = parseInt(m.getAttribute("xsize")); middleDecalImageY = parseInt(m.getAttribute("ysize")); change = true; if ((middleDecalImageX == null) || (middleDecalImageY == null)) { alert("Replay Rewrite: Image sizes for middle decal aren't included! Fix it!") change = false; } } } else middleDecalImage = null; //console.log(middleDecalImage+" --- "+middleDecalImageX); return change; } function fieldGraphicsInsert() { if (document.getElementById("field_image") == null) { console.log("FGI: no field_image element. delaying."); setTimeout( function() { fieldGraphicsInsert(); }, 1000); } if ((enableFieldLayer == true) && (fieldImage != null)) { // var field = document.getElementById("replay_area"); // field.style.backgroundImage = "url("+fieldImage+")"; var field = document.getElementById("field_image"); field.src = fieldImage; field.style.position = "absolute"; field.style.left = ((520-fieldImageX)>>1)+"px"; field.style.top = ((1160-fieldImageY)>>1)+"px"; console.log("("+fieldImageX+","+fieldImageY+") "+fieldImage); } if ((enableLowerDecalLayer == true) && (northEndZoneImage != null) && (southEndZoneImage != null)) { var d = document.getElementById("lowerdecals"); if (d == null) { var repdiv = document.getElementById("replay_area"); var parstyle = repdiv.getAttribute("style"); if (parstyle == null) parstyle = ""; div = document.createElement("div"); div.setAttribute("style","position:absolute; z-index:"+lowerDecalLayerZ+";"); div.setAttribute("id","lowerdecals"); div.zIndex=lowerDecalLayerZ; var img = document.createElement("img"); img.src = northEndZoneImage; img.setAttribute("style","position: absolute; top:0px; left:0px; z-index:"+lowerDecalLayerZ+";"); img.zIndex=lowerDecalLayerZ; div.appendChild(img); var img = document.createElement("img"); img.src = southEndZoneImage; img.setAttribute("style","position: absolute; top:988px; left:0px; z-index:"+lowerDecalLayerZ+";"); img.zIndex=lowerDecalLayerZ; div.appendChild(img); repdiv.appendChild(div); } } if ((enableLineLayer == true) && (lineImage != null)) { var d = document.getElementById("linelayer"); if (d == null) { var repdiv = document.getElementById("replay_area"); div = document.createElement("div"); div.setAttribute("style","position:absolute; z-index:"+lineLayerZ+";"); div.setAttribute("id","linelayer"); div.zIndex=lineLayerZ; var img = document.createElement("img"); img.src = lineImage; img.setAttribute("style","position: absolute; z-index:"+lineLayerZ+";"); img.zIndex=lineLayerZ; div.appendChild(img); repdiv.appendChild(div); } } if ((enableMiddleDecalLayer == true) && (middleDecalImage != null)) { var d = document.getElementById("middledecals"); if (d == null) { var repdiv = document.getElementById("replay_area"); var parstyle = repdiv.getAttribute("style"); if (parstyle == null) parstyle = ""; div = document.createElement("div"); div.setAttribute("style","position:absolute; z-index:"+middleDecalLayerZ+";"); div.setAttribute("id","middledecals"); div.zIndex=middleDecalLayerZ; //50 yard line image var imgysize = middleDecalImageX; var imgxsize = middleDecalImageY; //set to the y-axis length of your image var img = document.createElement("img"); img.src = middleDecalImage; img.setAttribute("style","position: absolute; top:"+(540-(imgysize>>1))+"px; left:"+(240-(imgxsize>>1))+"px; z-index:"+middleDecalLayerZ+";"); img.zIndex=middleDecalLayerZ; div.appendChild(img); repdiv.appendChild(div); } } if ((enableUpperDecalLayer == true) && (upperDecalImage != null)) { var d = document.getElementById("upperdecals"); if (d == null) { var repdiv = document.getElementById("replay_area"); div = document.createElement("div"); div.setAttribute("style","position:absolute; z-index:"+upperDecalLayerZ+";"); div.setAttribute("id","upperdecals"); div.zIndex=upperDecalLayerZ; var img = document.createElement("img"); img.src = upperDecalImage; img.setAttribute("style","position: absolute; opacity:0.45; z-index:"+upperDecalLayerZ+";"); img.zIndex=upperDecalLayerZ; div.appendChild(img); repdiv.appendChild(div); } } runUpdate = function() { someOwnersAreFuckingJackasses(); }; unlock(); } function someOwnersAreFuckingJackasses() { var fi = document.getElementById("field_image"); console.log("Jackass who cannot follow directions ahoy!"); if (fi.naturalWidth == 480) { fi.style.width = "480px"; fi.style.height = "1080px"; fi.style.top = "40px"; fi.style.left = "20px"; } } //these fields have yard lines already. DISABLE THE LINE LAYER. //fields[fields.length] = 'http://img517.imageshack.us/img517/2792/glbfieldgrassph5.jpg'; //fields[fields.length] = 'http://img517.imageshack.us/img517/2551/glbfieldturfhl0.jpg'; //fields[fields.length] = 'http://img517.imageshack.us/img517/811/glbfieldwornwh2.jpg'; //fields[fields.length] = 'http://img215.imageshack.us/img215/5927/glbfieldsloppyweatheryf1.jpg'; //fields[fields.length] = 'http://img205.imageshack.us/img205/2179/glbfieldsnowvs1.jpg'; //fields[fields.length] = 'http://img523.imageshack.us/img523/6463/glbfieldrb0.gif'; //fields[fields.length] = 'http://img95.imageshack.us/img95/2734/myfield.jpg'; // upper decal images //img.src = "http://img409.imageshack.us/img409/8636/northshadowxf1.png"; //img.src = "http://img510.imageshack.us/img510/1931/eastshadowhs0.png"; //img.src = "http://img515.imageshack.us/img515/9223/glboverlaymappedto100vu7.png"; //my unlined field //"http://img296.imageshack.us/img296/4293/smoothfieldpq9.jpg" // my lines //"http://img527.imageshack.us/img527/3776/glblinesyk7.png" //two GLB endzones //north: "http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-top.jpg" //south: "http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-bottom.jpg" // GLB logo for the middle // "http://img184.imageshack.us/img184/320/glblogotx0.png"; 224x140 /* * To add a stadium for a particular team, just copy/paste a new <team> --> </team> block. * set the id to that team's ID number and insert their particular images in the appropriate places. * The xsize/ysize options MUST BE SET for the mid field image. * * The block for id# -1 is the default stadium to use if no ID match can be found. */ var xmlDescription = '\n\ <root>\n\ <team id="0">\n\ <field>http://img296.imageshack.us/img296/4293/smoothfieldpq9.jpg</field>\n\ <line>http://img527.imageshack.us/img527/3776/glblinesyk7.png</line>\n\ <north>http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-top.jpg</north>\n\ <south>http://i10.photobucket.com/albums/a136/ggakma/GLB/ENDZONES/endzone-glb-bottom.jpg</south>\n\ <middle xsize="224" ysize="140">http://img184.imageshack.us/img184/320/glblogotx0.png</middle>\n\ <upper></upper>\n\ </team>\n\ <team id="-1">\n\ <field x="'+fieldImageX+'" y="'+fieldImageY+'">'+fieldImage+'</field>\n\ <line></line>\n\ <north></north>\n\ <south></south>\n\ <middle xsize="" ysize=""></middle>\n\ <upper></upper>\n\ </team>\n\ </root>\n\ ';