您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
hax
// ==UserScript== // @name OWOP Plot Bot // @namespace lol // @description hax // @version 1 // @author Bela, modified by ucrain3 // @include http://www.ourworldofpixels.com/* // @run-at document-start // @grant GM_getValue // @grant GM_setValue // ==/UserScript== var lastcursorx = 0; var lastcursory = 0; var undefPut = true; var canNext = true; var offX = 0; var offY = 0; var tSkip = 30; var lastMap = -1; var randShuf = 1; var randShufA = [1,3,17,15,33,63,31]; var randOffset = 0; var randRev = 1; var preRender = null; var rArray = [ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ]; var gArray = [ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ]; var bArray = [ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ]; window.addEventListener('keyup', function(e) { var key = e.keyCode || e.which; if(key == 90) { canNext = true; } else if(key == 87) { offY -= 1; } else if(key == 83) { offY += 1; } else if(key == 68) { offX += 1; } else if(key == 65) { offX -= 1; } }); function loop() { tSkip -= 1; if(tSkip < 0) { tSkip = 0; } if(!canNext || typeof socket == "undefined" || tSkip > 0) { return; } canNext = false; if(!undefPut || typeof put != "undefined") { if(preRender === null) { preRender = render; /**render = function() { if(document.hasFocus()) { render2(); } };**/ render = render2; for(var rgbFlip = 0; rgbFlip < 192; rgbFlip++) { rArray[192] = rArray[191]; gArray[192] = gArray[191]; bArray[192] = bArray[191]; } } if(document.hasFocus()) { GM_setValue("camx", camx); GM_setValue("camy", camy); GM_setValue("cursorx", cursorx); GM_setValue("cursory", cursory); GM_setValue("chnkx", chnkx); GM_setValue("chnky", chnky); GM_setValue("pixlx", pixlx); GM_setValue("pixly", pixly); GM_setValue("r", rgb[rgbn][0]); GM_setValue("g", rgb[rgbn][1]); GM_setValue("b", rgb[rgbn][2]); } if(true) { var maincamx = GM_getValue("camx"); var maincamy = GM_getValue("camy"); var maincursorx = GM_getValue("cursorx"); var maincursory = GM_getValue("cursory"); var mainchnkx = GM_getValue("chnkx"); var mainchnky = GM_getValue("chnky"); var mainpixlx = GM_getValue("pixlx"); var mainpixly = GM_getValue("pixly"); var randIndex = Math.ceil(visible.length * Math.random()) - 1; var theP = visible[randIndex]; if(lastMap == -1) { lastMap = theP; randOffset = Math.ceil(Math.random() * 256) - 1; randRev = Math.ceil(Math.random() * 2) * 2 - 3; randShuf = randShufA[Math.ceil(randShufA.length * Math.random()) - 1]; } theP = lastMap; if(theP === null || visible.indexOf(lastMap) == -1){lastMap = visible[randIndex];randOffset = Math.ceil(Math.random() * 256) - 1;randRev = Math.ceil(Math.random() * 2) * 2 - 3;randShuf = randShufA[Math.ceil(randShufA.length * Math.random()) - 1];canNext = true;return;} var poinP = map[theP]; if(poinP === null || poinP === undefined){lastMap = visible[randIndex];randOffset = Math.ceil(Math.random() * 256) - 1;randRev = Math.ceil(Math.random() * 2) * 2 - 3;randShuf = randShufA[Math.ceil(randShufA.length * Math.random()) - 1];canNext = true;return;} if(camx != maincamx || camy != maincamy) { camx = maincamx; camy = maincamy; updatevisible(); } cursorx = maincursorx + offX * 16; cursory = maincursory + offY * 16; chnkx = mainchnkx; chnky = mainchnky; pixlx = mainpixlx; pixly = mainpixly; var found = false; for(var inci = 0; inci < 256 && !found; inci++) { var inciP = inci; if(randRev == -1) { inciP = 255-inciP; } var inc = (((inciP) + randOffset) * randShuf) % 256; if(poinP[0][inc * 3] !== rArray[inc] || poinP[0][inc * 3 + 1] !== gArray[inc] || poinP[0][inc * 3 + 2] !== bArray[inc]) { var b = theP.split(',').map(function(item) { return parseInt(item, 10); }); //console.log(b); rgb[rgbn][0] = rArray[inc]; rgb[rgbn][1] = gArray[inc]; rgb[rgbn][2] = bArray[inc]; mainchnkx = chnkx = b[0]; mainchnky = chnky = b[1]; mainpixlx = pixlx = inc % 16; mainpixly = pixly = Math.floor(inc / 16); cursorx = mainchnkx * 256 + mainpixlx * 16; cursory = mainchnky * 256 + mainpixly * 16; found = true; } } if(!found) { lastMap = visible[randIndex]; randOffset = Math.ceil(Math.random() * 256) - 1; randRev = Math.ceil(Math.random() * 2) * 2 - 3; randShuf = randShufA[Math.ceil(randShufA.length * Math.random()) - 1]; } var xOffset = offX; var yOffset = offY; pixlx += xOffset; pixly += yOffset; if(pixlx > 15) { chnkx += Math.floor(pixlx / 16); pixlx = pixlx % 16; } if(pixly > 16) { chnky += Math.floor(pixly / 16); pixly = pixly % 16; } if(pixlx < 0) { chnkx -= Math.ceil(-pixlx / 16); pixlx = -(-pixlx % 16); } if(pixly < 0) { chnky -= Math.ceil(-pixly / 16); pixly = -(-pixly % 16); } } put2(0); undefPut = false; //clicking = true; //dragnpaint = true; } simulateKeyPress(90, true); simulateKeyPress(90, false); } setInterval(loop, 80); function put2(btn){ var ref = map[[chnkx, chnky]]; if(socket.readyState != socket.OPEN || !ref) {return;}; switch(tool){ case 0: var paint = true; var sel = rgb[rgbn]; switch(btn){ case 1: var nrgb = new Uint8Array( [ref[0][(pixly * 16 + pixlx) * 3], ref[0][(pixly * 16 + pixlx) * 3 + 1], ref[0][(pixly * 16 + pixlx) * 3 + 2]]); var i = findrgb(nrgb); if(i == -1){ rgbn = 0; rgb.unshift(nrgb); } else { rgbn = i; } paint = false; break; case 2: sel = [255, 255, 255]; break; } if(paint && !(ref[0][(pixly * 16 + pixlx) * 3] == sel[0] && ref[0][(pixly * 16 + pixlx) * 3 + 1] == sel[1] && ref[0][(pixly * 16 + pixlx) * 3 + 2] == sel[2]) && pbuckt.canspend(1)){ undos.push([cursorx >> 4, cursory >> 4, pixlx << 4 | pixly, ref[0][(pixly * 16 + pixlx) * 3], ref[0][(pixly * 16 + pixlx) * 3 + 1], ref[0][(pixly * 16 + pixlx) * 3 + 2]]); updatechunk(ref, pixlx, pixly, sel); var arr = new ArrayBuffer(11); var dv = new DataView(arr); dv.setInt32(0, cursorx >> 4, true); dv.setInt32(4, cursory >> 4, true); dv.setUint8(8, sel[0]); dv.setUint8(9, sel[1]); dv.setUint8(10, sel[2]); socket.send(arr); } break; case 2: var nrgb = new Uint8Array( [ref[0][(pixly * 16 + pixlx) * 3], ref[0][(pixly * 16 + pixlx) * 3 + 1], ref[0][(pixly * 16 + pixlx) * 3 + 2]]); var i = findrgb(nrgb); if(i == -1){ rgbn = 0; rgb.unshift(nrgb); } else { rgbn = i; } break; case 3: var cl = false; for(var i = ref[0].length; i--;){ if(ref[0][i] != 255){ cl = true; break; } } if(cl){ var arr = new ArrayBuffer(9); var dv = new DataView(arr); dv.setInt32(0, chnkx, true); dv.setInt32(4, chnky, true); dv.setUint8(8, 0); socket.send(arr); } break; } } function render2(){ nt = Date.now(); if(!document.hasFocus()) { window.requestAnimationFrame(render); return; } ctx.save(); ctx.transform(zoom, 0, 0, zoom, camx, camy); for(var i = visible.length; i--;){ var pos = visible[i].split(','); if(pos in map){ if(!map[pos][1]){ map[pos][1] = renderchunk(map[pos][0]); } ctx.drawImage(map[pos][1], pos[0] << 8, pos[1] << 8); } else { ctx.beginPath(); ctx.fillStyle = unloadedpat; ctx.rect(pos[0] << 8, pos[1] << 8, 256, 256); ctx.fill(); } } ctx.lineWidth = 2.5; ctx.globalAlpha = .8; if([chnkx, chnky] in map){ ctx.globalAlpha = .8; if(tool == 0){ ctx.strokeStyle = "rgb(" + rgb[rgbn].join(',') + ")"; ctx.strokeRect(~(~cursorx | 0xF), ~(~cursory | 0xF), 16, 16); } else if(tool == 3){ ctx.strokeStyle = "#FFFFFF"; ctx.strokeRect(~(~cursorx | 0xFF) + 1, ~(~cursory | 0xFF), 254, 255); } } for(var c in ppl){ if(c != id){ var pplx = ppl[c].getX(); var pply = ppl[c].getY(); if(!isvisible(pplx - 32, pply - 32, 64, 64)) continue; var chxy = [pplx >> 8, pply >> 8]; if(chxy in map){ if(ppl[c].tool == 0){ ctx.strokeStyle = "rgb(" + ppl[c].r + "," + ppl[c].g + "," + ppl[c].b + ")"; ctx.strokeRect(~(~pplx | 0xF), ~(~pply | 0xF), 16, 16); } else if(ppl[c].tool == 2){ ctx.globalAlpha = 1; var pxy = [pplx - (chxy[0] << 8) >> 4, pply - (chxy[1] << 8) >> 4]; var m = map[chxy]; var nrgb = [m[0][(pxy[1] * 16 + pxy[0]) * 3], m[0][(pxy[1] * 16 + pxy[0]) * 3 + 1], m[0][(pxy[1] * 16 + pxy[0]) * 3 + 2]]; ctx.fillStyle = "rgb(" + nrgb.join(',') + ")"; ctx.fillRect(pplx + .5, pply - 30.5, 8, 8); ctx.strokeStyle = "#4d313b"; ctx.strokeRect(pplx - .5, pply - 31.5, 10, 10); ctx.strokeStyle = "#FFFFFF"; ctx.lineWidth = 1; ctx.strokeRect(pplx - .5, pply - 31.5, 10, 10); ctx.lineWidth = 3.5; } else if(ppl[c].tool == 3){ ctx.strokeStyle = "#FFFFFF"; ctx.strokeRect(~(~pplx | 0xFF) + 1, ~(~pply | 0xFF), 254, 255); } } } } ctx.lineWidth = 1.75; for(var i = fx.length; i--;){ if((ctx.globalAlpha = 1 + (fx[i][2] - nt) / 1000) <= 0){ fx.splice(i, 1); continue; } if(fx[i].length == 4){ ctx.strokeStyle = "rgb(" + ((fx[i][3] >> 16) & 0xFF) + "," + ((fx[i][3] >> 8) & 0xFF) + "," + (fx[i][3] & 0xFF) + ")"; ctx.strokeRect(.5+(fx[i][0] << 4), .5+(fx[i][1] << 4), 15, 15); } else { ctx.strokeStyle = "#000000"; ctx.strokeRect(.5+(fx[i][0] << 8), .5+(fx[i][1] << 8), 256, 256); } } ctx.globalAlpha = 1; ctx.strokeStyle = "#000000"; for(var c in ppl){ if(c != id){ var pplx = ppl[c].getX(); var pply = ppl[c].getY(); if(!isvisible(pplx - 32, pply - 32, 64, 64)) continue; ctx.drawImage(cur[ppl[c].tool][0], pplx + cur[ppl[c].tool][1], pply + cur[ppl[c].tool][2]); ctx.font = "10px sans-serif"; var w = ctx.measureText(c.toString()).width + 8; var h = 10; var ofs = cur[ppl[c].tool][0].height + cur[ppl[c].tool][2]; ctx.fillStyle = "#" + ppl[c].clr; ctx.fillRect(pplx, pply + ofs, w, h + 6); ctx.globalAlpha = 0.2; ctx.lineWidth = 3; ctx.strokeRect(pplx, pply + ofs, w, h + 6); ctx.globalAlpha = 1; drawtext(c.toString(), pplx + 4, pply + h + ofs + 2); ctx.font = "14px sans-serif"; } } if([[chnkx, chnky]] in map && tool == 2){ var ref = map[[chnkx, chnky]]; var nrgb = new Uint8Array( [ref[0][(pixly * 16 + pixlx) * 3], ref[0][(pixly * 16 + pixlx) * 3 + 1], ref[0][(pixly * 16 + pixlx) * 3 + 2]]); ctx.fillStyle = "rgb(" + nrgb.join(',') + ")"; ctx.fillRect(cursorx + .5, cursory - 30.5, 8, 8); ctx.strokeStyle = "#4d313b"; ctx.lineWidth = 3.5; ctx.strokeRect(cursorx - .5, cursory - 31.5, 10, 10); ctx.strokeStyle = "#FFFFFF"; ctx.lineWidth = 1; ctx.strokeRect(cursorx - .5, cursory - 31.5, 10, 10); } ctx.restore(); ctx.strokeStyle = "#000000"; /* Render windows */ ctx.globalAlpha = 0.9; ctx.save(); for(var x = 0; x < windows.length; x++){ if(x == windows.length - 1) ctx.globalAlpha = 1; windows[x].render(ctx); } ctx.restore(); var hudx = canvas.width - 40; var hudy = (canvas.height >> 1) - 16; ctx.fillStyle = "#DDDDDD"; ctx.fillRect(hudx - 4, hudy - 4, 44, 40); ctx.fillStyle = "#888888"; ctx.fillRect(hudx - 32, hudy + 4, 24, 24); ctx.globalAlpha = 0.2; ctx.strokeRect(hudx - 4, hudy - 4, 44, 40); ctx.strokeRect(hudx - 32, hudy + 4, 24, 24); ctx.globalAlpha = 1; ctx.strokeStyle = "#FFFFFF"; ctx.beginPath(); ctx.moveTo(hudx - 20, hudy + 8); ctx.lineTo(hudx - 20, hudy + 24); ctx.stroke(); ctx.beginPath(); ctx.moveTo(hudx - 28, hudy + 16); ctx.lineTo(hudx - 12, hudy + 16); ctx.stroke(); ctx.strokeStyle = "#000000"; for(var j = rgbn + 1, i = 0; --j >= 0; --i){ ctx.fillStyle = "rgb(" + rgb[j].join(',') + ")"; ctx.fillRect(hudx, hudy - 40 * i, 32, 32); ctx.globalAlpha = 0.2; ctx.strokeRect(hudx, hudy - 40 * i, 32, 32); ctx.globalAlpha = 1; } for(var j = rgbn, i = 1; ++j < rgb.length; ++i){ ctx.fillStyle = "rgb(" + rgb[j].join(',') + ")"; ctx.fillRect(hudx, hudy - 40 * i, 32, 32); ctx.globalAlpha = 0.2; ctx.strokeRect(hudx, hudy - 40 * i, 32, 32); ctx.globalAlpha = 1; } ctx.fillStyle = "#444444"; if(chatting){ ctx.globalAlpha = .7; var maxw = 300; for(var i = chatlog.length, j = 0; i-- && j < 12; j++){ maxw = Math.max(ctx.measureText(chatlog[i]).width, maxw); } maxw = Math.max(ctx.measureText("> " + chatstr).width, maxw); var h = chatlog.length; h = (h >= 12 ? 12 : h) + 1; ctx.fillRect(0, canvas.height - h * 16 - 8, maxw + 10, h * 16 + 16); ctx.globalAlpha = .2; ctx.lineWidth = 3; ctx.strokeRect(-1, canvas.height - h * 16 - 8, maxw + 10.5, h * 16 + 16); ctx.globalAlpha = .4; ctx.strokeRect(-1, canvas.height - 18, maxw + 10.5, 19); ctx.fillStyle = "#DDDDDD"; ctx.fillRect(-1, canvas.height - 18, maxw + 10.5, 19); drawtext("> " + chatstr + (((nt >> 8) & 1) ? '_' : ''), 5, canvas.height - 5); } ctx.globalAlpha = 1; for(var i = chatlog.length, j = +chatting; i-- && j <= (chatting ? 12 : 6); j++){ drawtext(chatlog[i], 5, canvas.height - j * 16 - 8); } var j = (nt - dt[0]) / 500; j = j >= 1 ? 1 : j <= 0 ? 0 : j; ctx.drawImage(drop, (canvas.width >> 1) - (drop.width >> 1), -drop.height + 14 + (drop.height - 14) * (dt[1] ? j : 1 - j)); ctx.drawImage(cur[tool][0], mousex + cur[tool][1], mousey + cur[tool][2]); var xystr = "X: " + ((chnkx << 4) + pixlx) + ", Y: " + ((chnky << 4) + pixly); if(con){ var pplstr = count + " cursor" + (count != 1 ? "s" : "") + " online"; drawtext(pplstr, canvas.width - ctx.measureText(pplstr).width - 5, 14); } var xyw = ctx.measureText(xystr).width; ctx.fillStyle = "#888888"; ctx.globalAlpha = .7; ctx.fillRect(0, 0, xyw + 8, 19); ctx.globalAlpha = .2; ctx.strokeRect(-1, -1, xyw + 8, 19); drawtext(xystr, 4, 14); if(nt - t < 2500 || true){ window.requestAnimationFrame(render); } } function simulateKeyPress(key, hold) { var eventObj; if(hold) { eventObj = document.createEvent("Events"); eventObj.initEvent("keydown", true, true); eventObj.keyCode = key; window.dispatchEvent(eventObj); } else { eventObj = document.createEvent("Events"); eventObj.initEvent("keyup", true, true); eventObj.keyCode = key; window.dispatchEvent(eventObj); } } function simulateMousePress(button, clientX, clientY, press) { if(press) { canvas.dispatchEvent(new MouseEvent('mousedown', { 'clientX': clientX, 'clientY': clientY, 'button': button, 'mozPressure' : 1.0 })); } else{ canvas.dispatchEvent(new MouseEvent('mouseup', { 'clientX': clientX, 'clientY': clientY, 'button': button, 'mozPressure' : 1.0 })); } } function simulateMouseMove(clientX, clientY) { canvas.dispatchEvent(new MouseEvent('mousemove', { 'clientX': clientX, 'clientY': clientY })); }