mirror of
https://github.com/d07RiV/diabloweb.git
synced 2026-07-03 11:51:35 +00:00
2 lines
38 KiB
JavaScript
2 lines
38 KiB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{11:function(e,t,n){"use strict";n.d(t,"a",function(){return w});var r=n(4),o=n(1),a=n.n(o),i=n(2),s=n(13),c=n.n(s),u=function(){return new Promise(function(e,t){var n=!1,r=document.createElement("iframe");window.addEventListener("message",function(t){var o=t.data;"storage"!==o.method||n||(n=!0,e(o.files),r.contentWindow.postMessage({method:"clear"},"*"))}),r.addEventListener("load",function(){r.contentWindow.postMessage({method:"transfer"},"*")}),r.addEventListener("error",function(){n||(n=!0,e(null))}),r.src="https://diablo.rivsoft.net/storage.html",r.style.display="none",document.body.appendChild(r),setTimeout(function(){n||(n=!0,e(null))},1e4)})};function l(e,t){return d.apply(this,arguments)}function d(){return(d=Object(i.a)(a.a.mark(function e(t,n){var r,o,i,s;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(n.toLowerCase());case 2:(r=e.sent)?(o=new Blob([r],{type:"binary/octet-stream"}),i=URL.createObjectURL(o),(s=document.createElement("a")).setAttribute("href",i),s.setAttribute("download",n),document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)):console.error("File ".concat(n," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function h(e){return f.apply(this,arguments)}function f(){return(f=Object(i.a)(a.a.mark(function e(t){var n,r,o,i,s,c;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=!0,r=!1,o=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,i=e.sent[e.t0]();case 8:if(n=(s=i.next()).done){e.next=14;break}(c=s.value).match(/\.sv$/i)&&l(t,c);case 11:n=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),r=!0,o=e.t1;case 20:e.prev=20,e.prev=21,n||null==i.return||i.return();case 23:if(e.prev=23,!r){e.next=26;break}throw o;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var v=function(e){return new Promise(function(t,n){var r=new FileReader;r.onload=function(){return t(r.result)},r.onerror=function(){return n(r.error)},r.onabort=function(){return n()},r.readAsArrayBuffer(e)})};function p(e,t,n){return m.apply(this,arguments)}function m(){return(m=Object(i.a)(a.a.mark(function e(t,n,r){var o;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,v(r);case 3:return e.t1=e.sent,o=new e.t0(e.t1),n.set(r.name.toLowerCase(),o),e.abrupt("return",t.set(r.name.toLowerCase(),o));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function w(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(a.a.mark(function e(t){var n,o,i,s,d,f,v,m,w,y,b,g,k,_,x,E,M,C;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=new c.a("diablo_fs"),o=new Map,i=0,e.t0=Object,e.next=7,n.json();case 7:e.t1=e.sent,s=e.t0.entries.call(e.t0,e.t1);case 9:if(!(i<s.length)){e.next=18;break}d=s[i],f=Object(r.a)(d,2),v=f[0],m=f[1],o.set(v,m);case 15:i++,e.next=9;break;case 18:if(!t){e.next=42;break}return e.next=21,u();case 21:if(!(w=e.sent)){e.next=42;break}for(y=!0,b=!1,g=void 0,e.prev=26,k=w[Symbol.iterator]();!(y=(_=k.next()).done);y=!0)x=_.value,E=Object(r.a)(x,2),M=E[0],C=E[1],w.set(M,C),n.set(M,C);e.next=34;break;case 30:e.prev=30,e.t2=e.catch(26),b=!0,g=e.t2;case 34:e.prev=34,e.prev=35,y||null==k.return||k.return();case 37:if(e.prev=37,!b){e.next=40;break}throw g;case 40:return e.finish(37);case 41:return e.finish(34);case 42:return window.DownloadFile=function(e){return l(n,e)},window.DownloadSaves=function(){return h(n)},e.abrupt("return",{files:o,update:function(e,t){return n.set(e,t)},delete:function(e){return n.remove(e)},clear:function(){return n.clear()},download:function(e){return l(n,e)},upload:function(e){return p(n,o,e)}});case 47:return e.prev=47,e.t3=e.catch(0),window.DownloadFile=function(){return console.error("IndexedDB is not supported")},window.DownloadSaves=function(){return console.error("IndexedDB is not supported")},e.abrupt("return",{files:new Map,update:function(){return Promise.resolve()},delete:function(){return Promise.resolve()},clear:function(){return Promise.resolve()},download:function(){return Promise.resolve()},upload:function(){return Promise.resolve()}});case 52:case"end":return e.stop()}},e,null,[[0,47],[26,30,34,42],[35,,37,41]])}))).apply(this,arguments)}},26:function(e,t,n){e.exports=function(){return new Worker(n.p+"f2bd0f1b568ba5e5d268.worker.js")}},31:function(e,t,n){e.exports=n(64)},37:function(e,t,n){},38:function(e,t,n){},62:function(e,t){function n(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id=62},64:function(e,t,n){"use strict";n.r(t);var r=n(0),o=n.n(r),a=n(24),i=n.n(a),s=(n(37),Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)));function c(e,t){navigator.serviceWorker.register(e).then(function(e){e.onupdatefound=function(){var n=e.installing;null!=n&&(n.onstatechange=function(){"installed"===n.state&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See https://bit.ly/CRA-PWA."),t&&t.onUpdate&&t.onUpdate(e)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(e)))})}}).catch(function(e){console.error("Error during service worker registration:",e)})}var u=n(5),l=n(8),d=n(9),h=n(28),f=n(25),v=n(6),p=n(29),m=n(30),w=(n(38),n(7)),y=n.n(w),b=n(14),g=n(11),k=n(1),_=n.n(k),x=n(4),E=n(2),M=n(26),C=n.n(M);function j(){var e=window.AudioContext||window.webkitAudioContext,t=window.StereoPannerNode;if(!e)return{create_sound:function(){return 0},duplicate_sound:function(){return 0},play_sound:function(){},set_volume:function(){},stop_sound:function(){},delete_sound:function(){}};var n=null;try{n=new e}catch(o){}var r=new Map;return{create_sound_raw:function(e,o,a,i,s){if(n){for(var c=n.createBuffer(i,a,s),u=0;u<i;++u)c.getChannelData(u).set(o.subarray(u*a,u*a+a));r.set(e,{buffer:Promise.resolve(c),gain:n.createGain(),panner:t&&new t(n,{pan:0})})}},create_sound:function(e,o){if(n){var a=function(e,t){return new Promise(function(n,r){e.decodeAudioData(t,n,r)})}(n,o.buffer);r.set(e,{buffer:a,gain:n.createGain(),panner:t&&new t(n,{pan:0})})}},duplicate_sound:function(e,o){if(n){var a=r.get(o);a&&r.set(e,{buffer:a.buffer,gain:n.createGain(),panner:t&&new t(n,{pan:0})})}},play_sound:function(e,t,o,a){var i=r.get(e);if(i){i.source&&i.source.then(function(e){return e.stop()}),i.gain.gain.value=Math.pow(2,t/1e3);var s=Math.pow(2,o/1e3);i.panner&&(i.panner.pan.value=1-2/(1+s)),i.source=i.buffer.then(function(e){var t=n.createBufferSource();t.buffer=e,t.loop=!!a;var r=t.connect(i.gain);return i.panner&&(r=r.connect(i.panner)),r.connect(n.destination),t.start(),t})}},set_volume:function(e,t){var n=r.get(e);n&&(n.gain.gain.value=Math.pow(2,t/1e3))},stop_sound:function(e){var t=r.get(e);t&&t.source&&(t.source.then(function(e){return e.stop()}),delete t.source)},delete_sound:function(e){var t=r.get(e);t&&t.source&&t.source.then(function(e){return e.stop()}),r.delete(e)},stop_all:function(){var e=!0,t=!1,o=void 0;try{for(var a,i=r[Symbol.iterator]();!(e=(a=i.next()).done);e=!0){var s=a.value,c=Object(x.a)(s,2)[1];c.source&&c.source.then(function(e){return e.stop()})}}catch(u){t=!0,o=u}finally{try{e||null==i.return||i.return()}finally{if(t)throw o}}r.clear(),n=null}}}var T=n(27),D=n.n(T),O=[50274091,25830791];function S(e,t){return L.apply(this,arguments)}function L(){return(L=Object(E.a)(_.a.mark(function e(t,n){var r,o,a;return _.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=n.files.get("spawn.mpq"))||O.includes(r.byteLength)){e.next=6;break}return n.files.delete("spawn.mpq"),e.next=5,n.delete("spawn.mpq");case 5:r=null;case 6:if(r){e.next=15;break}return e.next=9,D.a.request({url:"/diabloweb/spawn.mpq",responseType:"arraybuffer",onDownloadProgress:function(e){t.onProgress&&t.onProgress({text:"Downloading...",loaded:e.loaded,total:e.total||O[1]})},headers:{"Cache-Control":"max-age=31536000"}});case 9:if(o=e.sent,O.includes(o.data.byteLength)){e.next=12;break}throw Error("Invalid spawn.mpq size. Try clearing cache and refreshing the page.");case 12:a=new Uint8Array(o.data),n.files.set("spawn.mpq",a),n.update("spawn.mpq",a.slice());case 15:return e.abrupt("return",n);case 16:case"end":return e.stop()}},e)}))).apply(this,arguments)}var A=n(12),B=n.n(A),N=function(){function e(t){Object(l.a)(this,e),this.buffer=t instanceof Uint8Array?t:new Uint8Array(t),this.pos=0}return Object(d.a)(e,[{key:"done",value:function(){return this.pos===this.buffer.byteLength}},{key:"read8",value:function(){if(this.pos>=this.buffer.byteLength)throw Error("packet too small");return this.buffer[this.pos++]}},{key:"read16",value:function(){var e=this.pos,t=this.buffer;if(e+2>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8;return this.pos+=2,n}},{key:"read32",value:function(){var e=this.pos,t=this.buffer;if(e+4>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return this.pos+=4,n}},{key:"read_str",value:function(){var e=this.read8(),t=this.pos,n=this.buffer;if(t+e>n.byteLength)throw Error("packet too small");var r=String.fromCharCode.apply(String,Object(u.a)(n.subarray(t,t+e)));return this.pos+=e,r}},{key:"rest",value:function(){var e=this.buffer.subarray(this.pos);return this.pos=this.buffer.length,e}}]),e}(),P=function(){function e(t){Object(l.a)(this,e),this.buffer=new Uint8Array(t),this.pos=0}return Object(d.a)(e,[{key:"write8",value:function(e){return this.buffer[this.pos++]=e,this}},{key:"write16",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,this.pos+=2,this}},{key:"write32",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,n[t+2]=e>>16,n[t+3]=e>>24,this.pos+=4,this}},{key:"write_str",value:function(e){var t=e.length;this.write8(t);for(var n=this.pos,r=this.buffer,o=0;o<t;++o)r[n+o]=e.charCodeAt(o);return this.pos+=t,this}},{key:"rest",value:function(e){return this.buffer.set(e,this.pos),this}},{key:"result",get:function(){return this.buffer.buffer}}]),e}(),K={JOIN_SUCCESS:0,JOIN_ALREADY_IN_GAME:1,JOIN_GAME_NOT_FOUND:2,JOIN_INCORRECT_PASSWORD:3,JOIN_VERSION_MISMATCH:4,JOIN_GAME_FULL:5,CREATE_GAME_EXISTS:6},I={info:{code:50,read:function(e){return{version:e.read32()}},write:function(e){var t=e.version;return new P(5).write8(I.info.code).write32(t).result}},game_list:{code:33,read:function(e){for(var t=e.read8(),n=[],r=0;r<t;++r)n.push({type:e.read32(),name:e.read_str()});return{games:n}},write:function(e){var t=e.games,n=new P(t.reduce(function(e,t){return e+5+t.name.length},2));n.write8(I.game_list.code),n.write8(t.length);var r=!0,o=!1,a=void 0;try{for(var i,s=t[Symbol.iterator]();!(r=(i=s.next()).done);r=!0){var c=i.value,u=c.code,l=c.name;n.write32(u),n.write_str(l)}}catch(d){o=!0,a=d}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return n.result}},join_accept:{code:18,read:function(e){return{cookie:e.read32(),index:e.read8(),seed:e.read32(),difficulty:e.read32()}},write:function(e){var t=e.cookie,n=e.index,r=e.seed,o=e.difficulty;return new P(14).write8(I.join_accept.code).write32(t).write8(n).write32(r).write32(o).result}},join_reject:{code:21,read:function(e){return{cookie:e.read32(),reason:e.read8()}},write:function(e){var t=e.cookie,n=e.reason;return new P(6).write8(I.join_reject.code).write32(t).write8(n).result}},connect:{code:19,read:function(e){return{id:e.read8()}},write:function(e){var t=e.id;return new P(2).write8(I.connect.code).write8(t).result}},disconnect:{code:20,read:function(e){return{id:e.read8(),reason:e.read32()}},write:function(e){var t=e.id,n=e.reason;return new P(6).write8(I.disconnect.code).write8(t).write32(n).result}},message:{code:1,read:function(e){return{id:e.read8(),payload:e.rest()}},write:function(e){var t=e.id,n=e.payload;return new P(2+n.byteLength).write8(I.message.code).write8(t).rest(n).result}},turn:{code:2,read:function(e){return{id:e.read8(),turn:e.read32()}},write:function(e){var t=e.id,n=e.turn;return new P(6).write8(I.turn.code).write8(t).write32(n).result}}},R={info:{code:49,read:function(e){return{version:e.read32()}},write:function(e){var t=e.version;return new P(5).write8(R.info.code).write32(t).result}},game_list:{code:33,read:function(){return{}},write:function(){return new P(1).write8(R.game_list.code).result}},create_game:{code:34,read:function(e){return{cookie:e.read32(),name:e.read_str(),password:e.read_str(),difficulty:e.read32()}},write:function(e){var t=e.cookie,n=e.name,r=e.password,o=e.difficulty;return new P(11+n.length+r.length).write8(R.create_game.code).write32(t).write_str(n).write_str(r).write32(o).result}},join_game:{code:35,read:function(e){return{cookie:e.read32(),name:e.read_str(),password:e.read_str()}},write:function(e){var t=e.cookie,n=e.name,r=e.password;return new P(7+n.length+r.length).write8(R.join_game.code).write32(t).write_str(n).write_str(r).result}},leave_game:{code:36,read:function(){return{}},write:function(){return new P(1).write8(R.leave_game.code).result}},drop_player:{code:3,read:function(e){return{id:e.read8(),reason:e.read32()}},write:function(e){var t=e.id,n=e.reason;return new P(6).write8(R.drop_player.code).write8(t).write32(n).result}},message:{code:1,read:function(e){return{id:e.read8(),payload:e.rest()}},write:function(e){var t=e.id,n=e.payload;return new P(2+n.byteLength).write8(R.message.code).write8(t).rest(n).result}},turn:{code:2,read:function(e){return{turn:e.read32()}},write:function(e){var t=e.turn;return new P(5).write8(R.turn.code).write32(t).result}}},U=function(e){return"diabloweb_".concat(e)},F=function(){function e(t,n,r,o){var a=this,i=n.cookie,s=n.name,c=n.password,u=n.difficulty;Object(l.a)(this,e),this.version=t,this.name=s,this.password=c,this.difficulty=u,this.onMessage=r,this.onClose=o,this.peer=new B.a(U(s)),this.peer.on("connection",function(e){return a.onConnect(e)}),this.players=[],this.myplr=0,this.seed=Math.floor(Math.random()*Math.pow(2,32));var d=function e(){r(I.join_reject.write({cookie:i,reason:K.CREATE_GAME_EXISTS})),o(),a.peer.off("error",e),a.peer.off("open",h)},h=function e(){setTimeout(function(){r(I.join_accept.write({cookie:i,index:0,seed:a.seed,difficulty:u})),r(I.connect.write({id:0}))},0),a.peer.off("error",d),a.peer.off("open",e)};this.peer.on("error",d),this.peer.on("open",h)}return Object(d.a)(e,[{key:"onConnect",value:function(e){var t=this,n={conn:e};e.on("data",function(r){var o,a=new N(r),i=a.read8();switch(i){case R.info.code:o=R.info.read(a),n.version=o.version;break;case R.join_game.code:if(o=R.join_game.read(a),n.version!==t.version)e.send(I.join_reject.write({cookie:o.cookie,reason:K.JOIN_VERSION_MISMATCH}));else if(o.name!==t.name)e.send(I.join_reject.write({cookie:o.cookie,reason:K.JOIN_GAME_NOT_FOUND}));else if(o.password!==t.password)e.send(I.join_reject.write({cookie:o.cookie,reason:K.JOIN_INCORRECT_PASSWORD}));else{for(var s=1;s<4&&t.players[s];)++s;s>=4?e.send(I.join_reject.write({cookie:o.cookie,reason:K.JOIN_GAME_FULL})):(t.players[s]=n,n.id=s,e.send(I.join_accept.write({cookie:o.cookie,index:s,seed:t.seed,difficulty:t.difficulty})),t.send(255,I.connect.write({id:s})))}break;default:if(null==n.id)return;t.handle(n.id,i,a)}if(!a.done())throw Error("packet too large")}),e.on("close",function(){null!=n.id&&t.drop(n.id,1073741830)})}},{key:"send",value:function(e,t){for(var n=1;n<4;++n)e&1<<n&&this.players[n]&&this.players[n].conn&&this.players[n].conn.send(t);1&e&&this.onMessage(t)}},{key:"drop",value:function(e,t){if(0===e){for(var n=1;n<4;++n)this.drop(n,1073741830);this.onMessage(I.disconnect.write({id:e,reason:t})),this.peer.destroy(),this.onClose()}else this.players[e]&&(this.send(255,I.disconnect.write({id:e,reason:t})),this.players[e].id=null,this.players[e].conn&&this.players[e].conn.close(),this.players[e]=null)}},{key:"handle",value:function(e,t,n){var r;switch(t){case R.leave_game.code:r=R.leave_game.read(n),this.drop(e,3);break;case R.drop_player.code:r=R.drop_player.read(n),this.drop(r.id,r.reason);break;case R.message.code:r=R.message.read(n),this.send(255===r.id?~(1<<e):1<<r.id,I.message.write({id:e,payload:r.payload}));break;case R.turn.code:r=R.turn.read(n),this.send(~(1<<e),I.turn.write({id:e,turn:r.turn}));break;default:throw Error("invalid packet ".concat(t))}}}]),e}(),G=function(){function e(t,n,r,o){var a=this,i=n.cookie,s=n.name,c=n.password;Object(l.a)(this,e),this.pending=[],this.peer=new B.a,this.conn=this.peer.connect(U(s));var u=!0,d=function(){u&&(u=!1,a.peer.off("error",h),a.conn.off("error",h),a.conn.off("open",f),clearTimeout(v))},h=function(){r(I.join_reject.write({cookie:i,reason:K.JOIN_GAME_NOT_FOUND})),o(),d()},f=function e(){a.conn.send(R.info.write({version:t})),a.conn.send(R.join_game.write({cookie:i,name:s,password:c}));var n=!0,r=!1,o=void 0;try{for(var u,l=a.pending[Symbol.iterator]();!(n=(u=l.next()).done);n=!0){var d=u.value;a.conn.send(d)}}catch(h){r=!0,o=h}finally{try{n||null==l.return||l.return()}finally{if(r)throw o}}a.pending=null,a.conn.off("open",e)},v=setTimeout(h,1e4);this.peer.on("error",h),this.conn.on("error",h),this.conn.on("open",f),this.conn.on("data",function(e){d();var t,n=new N(e);switch(n.read8()){case I.join_accept.code:t=I.join_accept.read(n),a.myplr=t.index;break;case I.join_reject.code:o();break;case I.disconnect.code:"myplr"===(t=I.disconnect.read(n)).id&&o()}r(e)}),this.conn.on("close",function(e){o()})}return Object(d.a)(e,[{key:"send",value:function(e){this.pending?this.pending.push(e):this.conn.send(e)}}]),e}();function X(e){var t=null,n=null,r=0;return{send:function(o){var a,i=new N(o),s=i.read8();switch(s){case R.info.code:a=R.info.read(i),r=a.version;break;case R.create_game.code:a=R.create_game.read(i),t||n?e(I.join_reject.write({cookie:a.cookie,reason:K.JOIN_ALREADY_IN_GAME})):t=new F(r,a,e,function(){return t=null});break;case R.join_game.code:a=R.join_game.read(i),t||n?e(I.join_reject.write({cookie:a.cookie,reason:K.JOIN_ALREADY_IN_GAME})):n=new G(r,a,e,function(){return n=null});break;default:if(t)t.handle(0,s,i),s===R.leave_game.code&&(t=null);else{if(n)return n.send(o),void(s===R.leave_game.code&&(n=null));if(s!==R.leave_game.code)throw Error("invalid packet ".concat(s))}}if(!i.done())throw Error("packet too large")}}}function J(e,t,n){var r=n.bitmap,o=n.images,a=n.text,i=n.clip,s=n.belt;if(r)t.transferFromImageBitmap(r);else{var c=!0,u=!1,l=void 0;try{for(var d,h=o[Symbol.iterator]();!(c=(d=h.next()).done);c=!0){var f=d.value,v=f.x,p=f.y,m=f.w,w=f.h,y=f.data,b=t.createImageData(m,w);b.data.set(y),t.putImageData(b,v,p)}}catch(K){u=!0,l=K}finally{try{c||null==h.return||h.return()}finally{if(u)throw l}}if(a.length){if(t.save(),t.font="bold 13px Times New Roman",i){var g=i.x0,k=i.y0,_=i.x1,x=i.y1;t.beginPath(),t.rect(g,k,_-g,x-k),t.clip()}var E=!0,M=!1,C=void 0;try{for(var j,T=a[Symbol.iterator]();!(E=(j=T.next()).done);E=!0){var D=j.value,O=D.x,S=D.y,L=D.text,A=D.color,B=A>>16&255,N=A>>8&255,P=255&A;t.fillStyle="rgb(".concat(B,", ").concat(N,", ").concat(P,")"),t.fillText(L,O,S+22)}}catch(K){M=!0,C=K}finally{try{E||null==T.return||T.return()}finally{if(M)throw C}}t.restore()}}e.updateBelt(s)}function Y(){return(Y=Object(E.a)(_.a.mark(function e(t,n,r,o){var a,i,s;return _.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.fs;case 2:if(a=e.sent,!o||r){e.next=6;break}return e.next=6,S(t,a);case 6:return i=null,s=!1,i=t.canvas.getContext("2d",{alpha:!1}),e.next=10,new Promise(function(e,c){try{var l=new C.a,d=[],h=X(function(e){d.push(e)});l.addEventListener("message",function(r){var o=r.data;switch(o.action){case"loaded":e(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return l.postMessage({action:"event",func:e,params:n})});break;case"render":J(t,i,o.batch);break;case"audio":n[o.func].apply(n,Object(u.a)(o.params));break;case"audioBatch":var s=!0,d=!1,f=void 0;try{for(var v,p=o.batch[Symbol.iterator]();!(s=(v=p.next()).done);s=!0){var m=v.value,w=m.func,y=m.params;n[w].apply(n,Object(u.a)(y))}}catch(M){d=!0,f=M}finally{try{s||null==p.return||p.return()}finally{if(d)throw f}}break;case"fs":a[o.func].apply(a,Object(u.a)(o.params));break;case"cursor":t.setCursorPos(o.x,o.y);break;case"keyboard":t.openKeyboard(o.rect);break;case"error":n.stop_all(),t.onError(o.error,o.stack);break;case"failed":c(Error(o.stack||o.error));break;case"progress":t.onProgress({text:o.text,loaded:o.loaded,total:o.total});break;case"exit":t.onExit();break;case"current_save":t.setCurrentSave(o.name);break;case"packet":h.send(o.buffer);break;case"packetBatch":var b=!0,g=!1,k=void 0;try{for(var _,x=o.batch[Symbol.iterator]();!(b=(_=x.next()).done);b=!0){var E=_.value;h.send(E)}}catch(M){g=!0,k=M}finally{try{b||null==x.return||x.return()}finally{if(g)throw k}}}});var f=[],v=!0,p=!1,m=void 0;try{for(var w,y=a.files[Symbol.iterator]();!(v=(w=y.next()).done);v=!0){var b=w.value,g=Object(x.a)(b,2)[1];f.push(g.buffer)}}catch(k){p=!0,m=k}finally{try{v||null==y.return||y.return()}finally{if(p)throw m}}l.postMessage({action:"init",files:a.files,mpq:r,spawn:o,offscreen:s},f),setInterval(function(){d.length&&(l.postMessage({action:"packetBatch",batch:d},d),d.length=0)},20),delete a.files}catch(_){c(_)}});case 10:return e.abrupt("return",e.sent);case 11:case"end":return e.stop()}},e)}))).apply(this,arguments)}function q(e,t,n){return function(e,t,n,r){return Y.apply(this,arguments)}(e,j(),t,n)}function W(e,t){var n=e.stack||e.message||"Unknown error",r=new URL("https://github.com/d07RiV/diabloweb/issues/new");return r.searchParams.set("body","**Description:**\n[Please describe what you were doing before the error occurred]\n\n**App version:**\nDiabloWeb ".concat("1.0.29"," (").concat(t?"Retail":"Shareware",")\n\n**Error message:**\n \n").concat(n.split("\n").map(function(e){return" "+e}).join("\n"),"\n\n**User agent:**\n\n ").concat(navigator.userAgent,"\n\n**Save file:**\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ","`DownloadSaves()`","]\n")),r.toString()}window.Peer=B.a,b.a.initialize("UA-43123589-6"),b.a.pageview("/");var z=0,H=1;var V=null;try{V=function(){var e=!0,t=!1,n=void 0;try{for(var r,o=document.styleSheets[Symbol.iterator]();!(e=(r=o.next()).done);e=!0){var a=r.value,i=!0,s=!1,c=void 0;try{for(var u,l=a.cssRules[Symbol.iterator]();!(i=(u=l.next()).done);i=!0){var d=u.value;if(d.type===CSSRule.MEDIA_RULE&&"(min-aspect-ratio: 3/1)"===d.conditionText){var h=!0,f=!1,v=void 0;try{for(var p,m=d.cssRules[Symbol.iterator]();!(h=(p=m.next()).done);h=!0){var w=p.value;if(".App.keyboard .Body .inner"===w.selectorText)return w}}catch(y){f=!0,v=y}finally{try{h||null==m.return||m.return()}finally{if(f)throw v}}}}}catch(y){s=!0,c=y}finally{try{i||null==l.return||l.return()}finally{if(s)throw c}}}}catch(y){t=!0,n=y}finally{try{e||null==o.return||o.return()}finally{if(t)throw n}}}()}catch(Z){}var $=function(e){var t=e.children,n=Object(m.a)(e,["children"]);return o.a.createElement("a",Object.assign({target:"_blank",rel:"noopener noreferrer"},n),t)},Q=function(e){function t(e){var n;return Object(l.a)(this,t),(n=Object(h.a)(this,Object(f.a)(t).call(this,e))).files=new Map,n.state={started:!1,loading:!1,dropping:0,has_spawn:!1},n.cursorPos={x:0,y:0},n.touchControls=!1,n.touchButtons=[null,null,null,null,null,null],n.touchCtx=[null,null,null,null,null,null],n.touchMods=[!1,!1,!1,!1,!1,!1],n.touchBelt=[-1,-1,-1,-1,-1,-1],n.maxKeyboard=0,n.fs=Object(g.a)(!0),n.onDrop=function(e){var t=function(e){if(e.dataTransfer.items)for(var t=0;t<e.dataTransfer.items.length;++t)if("file"===e.dataTransfer.items[t].kind)return e.dataTransfer.items[t].getAsFile();if(e.dataTransfer.files.length)return e.dataTransfer.files[0]}(e);t&&(e.preventDefault(),n.start(t)),n.setState({dropping:0})},n.onDragEnter=function(e){e.preventDefault(),n.setDropping(1)},n.onDragOver=function(e){(function(e){if(e.dataTransfer.items)for(var t=0;t<e.dataTransfer.items.length;++t)if("file"===e.dataTransfer.items[t].kind)return!0;return!!e.dataTransfer.files.length})(e)&&e.preventDefault()},n.onDragLeave=function(e){n.setDropping(-1)},n.downloadSave=function(e){n.fs.then(function(e){return n.saveName&&e.download(n.saveName)}),e.stopPropagation(),e.preventDefault()},n.onResize=function(){document.exitPointerLock()},n.onPointerLockChange=function(){window.screen&&window.innerHeight===window.screen.height&&!n.pointerLocked()&&(n.game("DApi_Key",0,0,27),n.game("DApi_Key",1,0,27))},n.onMouseMove=function(e){if(n.canvas){var t=n.mousePos(e),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o),e.preventDefault()}},n.onMouseDown=function(e){if(n.canvas&&e.target!==n.keyboard){n.touchControls&&(n.touchControls=!1,n.element.classList.remove("touch"));var t=n.mousePos(e),r=t.x,o=t.y;window.screen&&window.innerHeight===window.screen.height&&(n.pointerLocked()||n.canvas.requestPointerLock()),n.game("DApi_Mouse",1,n.mouseButton(e),n.eventMods(e),r,o),e.preventDefault()}},n.onMouseUp=function(e){if(n.canvas){e.target,n.keyboard;var t=n.mousePos(e),r=t.x,o=t.y;n.game("DApi_Mouse",2,n.mouseButton(e),n.eventMods(e),r,o),e.target!==n.keyboard&&e.preventDefault()}},n.onKeyDown=function(e){n.canvas&&(n.game("DApi_Key",0,n.eventMods(e),e.keyCode),!n.showKeyboard&&e.keyCode>=32&&1===e.key.length?n.game("DApi_Char",e.key.charCodeAt(0)):8!==e.keyCode&&13!==e.keyCode||n.game("DApi_Char",e.keyCode),n.clearKeySel(),n.showKeyboard||(8===e.keyCode||9===e.keyCode||e.keyCode>=112&&e.keyCode<=119)&&e.preventDefault())},n.onMenu=function(e){e.preventDefault()},n.onKeyUp=function(e){n.canvas&&(n.game("DApi_Key",1,n.eventMods(e),e.keyCode),n.clearKeySel())},n.onKeyboard=function(){n.onKeyboardInner(0)},n.onKeyboardBlur=function(){n.onKeyboardInner(1)},n.parseFile=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.touchButton=null,n.touchCanvas=null,n.onTouchStart=function(e){if(n.canvas&&e.target!==n.keyboard&&(n.keyboard.blur(),e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o),n.touchMods[z]||n.game("DApi_Mouse",1,n.touchMods[H]?2:1,n.eventMods(e),r,o)}},n.onTouchMove=function(e){if(n.canvas&&e.target!==n.keyboard&&(e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o)}},n.onTouchEnd=function(e){if(n.canvas){e.target===n.keyboard||e.preventDefault();var t=n.touchCanvas;if(n.updateTouchButton(e.touches,!0),t&&!n.touchCanvas){var r=n.mousePos(t),o=r.x,a=r.y;n.game("DApi_Mouse",2,1,n.eventMods(e),o,a),n.game("DApi_Mouse",2,2,n.eventMods(e),o,a),!n.touchMods[H]||n.touchButton&&n.touchButton.index===H||n.setTouchMod(H,!1)}document.fullscreenElement||n.element.requestFullscreen()}},n.setCanvas=function(e){return n.canvas=e},n.setElement=function(e){return n.element=e},n.setKeyboard=function(e){return n.keyboard=e},n.setTouch0=n.setTouch_.bind(Object(v.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(v.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(v.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(v.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(v.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(v.a)(n),5),n}return Object(p.a)(t,e),Object(d.a)(t,[{key:"componentDidMount",value:function(){var e=this;document.addEventListener("drop",this.onDrop,!0),document.addEventListener("dragover",this.onDragOver,!0),document.addEventListener("dragenter",this.onDragEnter,!0),document.addEventListener("dragleave",this.onDragLeave,!0),this.fs.then(function(t){var n=t.files.get("spawn.mpq");n&&O.includes(n.byteLength)&&e.setState({has_spawn:!0})})}},{key:"setDropping",value:function(e){this.setState(function(t){var n=t.dropping;return{dropping:Math.max(n+e,0)}})}},{key:"onError",value:function(e,t){this.setState(function(n){return!n.error&&{error:{message:e,stack:t}}})}},{key:"openKeyboard",value:function(e){e?(this.showKeyboard={left:"".concat((100*(e[0]-10)/640).toFixed(2),"%"),top:"".concat((100*(e[1]-10)/480).toFixed(2),"%"),width:"".concat((100*(e[2]-e[0]+20)/640).toFixed(2),"%"),height:"".concat((100*(e[3]-e[1]+20)/640).toFixed(2),"%")},this.maxKeyboard=e[4],this.element.classList.add("keyboard"),Object.assign(this.keyboard.style,this.showKeyboard),this.keyboard.focus(),V&&(V.style.transform="translate(-50%, ".concat((56.25*-(e[1]+e[3])/960).toFixed(2),"vw)"))):(this.showKeyboard=!1,this.element.classList.remove("keyboard"),this.keyboard.blur(),this.keyboard.value="",this.keyboardNum=0)}},{key:"setCursorPos",value:function(e,t){var n=this,r=this.canvas.getBoundingClientRect();this.cursorPos={x:r.left+(r.right-r.left)*e/640,y:r.top+(r.bottom-r.top)*t/480},setTimeout(function(){n.game("DApi_Mouse",0,0,0,e,t)})}},{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onExit",value:function(){this.state.error||window.location.reload()}},{key:"setCurrentSave",value:function(e){this.saveName=e}},{key:"drawBelt",value:function(e,t){this.canvas&&this.touchButtons[e]&&(this.touchBelt[e]=t,t>=0?(this.touchButtons[e].style.display="block",this.touchCtx[e].drawImage(this.canvas,205+29*t,357,28,28,0,0,28,28)):this.touchButtons[e].style.display="none")}},{key:"updateBelt",value:function(e){if(e){for(var t=new Set,n=3,r=0;r<e.length&&n<6;++r)e[r]>=0&&!t.has(e[r])&&(this.drawBelt(n++,r),t.add(e[r]));for(;n<6;++n)this.drawBelt(n,-1)}else this.drawBelt(3,-1),this.drawBelt(4,-1),this.drawBelt(5,-1)}},{key:"start",value:function(e){var t=this;if(e&&e.name.match(/\.sv$/i))this.fs.then(function(t){return t.upload(e)}).then(console.log("Updated ".concat(e.name)));else{document.removeEventListener("drop",this.onDrop,!0),document.removeEventListener("dragover",this.onDragOver,!0),document.removeEventListener("dragenter",this.onDragEnter,!0),document.removeEventListener("dragleave",this.onDragLeave,!0),this.setState({dropping:0});var n=!(!e||!e.name.match(/^diabdat\.mpq$/i));b.a.event({category:"Game",action:n?"Start Retail":"Start Shareware"}),this.setState({loading:!0,retail:n}),q(this,e,!n).then(function(e){t.game=e,document.addEventListener("mousemove",t.onMouseMove,!0),document.addEventListener("mousedown",t.onMouseDown,!0),document.addEventListener("mouseup",t.onMouseUp,!0),document.addEventListener("keydown",t.onKeyDown,!0),document.addEventListener("keyup",t.onKeyUp,!0),document.addEventListener("contextmenu",t.onMenu,!0),document.addEventListener("touchstart",t.onTouchStart,{passive:!1,capture:!0}),document.addEventListener("touchmove",t.onTouchMove,{passive:!1,capture:!0}),document.addEventListener("touchend",t.onTouchEnd,{passive:!1,capture:!0}),document.addEventListener("pointerlockchange",t.onPointerLockChange),window.addEventListener("resize",t.onResize),t.setState({started:!0})},function(e){return t.onError(e.message,e.stack)})}}},{key:"pointerLocked",value:function(){return document.pointerLockElement===this.canvas||document.mozPointerLockElement===this.canvas}},{key:"mousePos",value:function(e){var t=this.canvas.getBoundingClientRect();return this.pointerLocked()?(this.cursorPos.x=Math.max(t.left,Math.min(t.right,this.cursorPos.x+e.movementX)),this.cursorPos.y=Math.max(t.top,Math.min(t.bottom,this.cursorPos.y+e.movementY))):this.cursorPos={x:e.clientX,y:e.clientY},{x:Math.max(0,Math.min(Math.round((this.cursorPos.x-t.left)/(t.right-t.left)*640),639)),y:Math.max(0,Math.min(Math.round((this.cursorPos.y-t.top)/(t.bottom-t.top)*480),479))}}},{key:"mouseButton",value:function(e){switch(e.button){case 0:return 1;case 1:return 4;case 2:return 2;case 3:return 5;case 4:return 6;default:return 1}}},{key:"eventMods",value:function(e){return(e.shiftKey||this.touchMods[2]?1:0)+(e.ctrlKey?2:0)+(e.altKey?4:0)+(e.touches?8:0)}},{key:"clearKeySel",value:function(){if(this.showKeyboard){var e=this.keyboard.value.length;this.keyboard.setSelectionRange(e,e)}}},{key:"onKeyboardInner",value:function(e){if(this.showKeyboard){var t,n=this.keyboard.value;if(this.maxKeyboard>0)t=(n.match(/[\x20-\x7E]/g)||[]).join("").substring(0,this.maxKeyboard);else{var r=-this.maxKeyboard;n.match(/^\d*$/)&&(this.keyboardNum=Math.min(n.length?parseInt(n):0,r)),t=this.keyboardNum?this.keyboardNum.toString():""}n!==t&&(this.keyboard.value=t),this.clearKeySel(),this.game("text",t,e)}}},{key:"setTouchMod",value:function(e,t,n){if(e<3)this.touchMods[e]=t,this.touchButtons[e]&&this.touchButtons[e].classList.toggle("active",t);else if(n&&this.touchBelt[e]>=0){var r=performance.now();(!this.beltTime||r-this.beltTime>750)&&(this.game("DApi_Char",49+this.touchBelt[e]),this.beltTime=r)}}},{key:"updateTouchButton",value:function(e,t){var n=this,r=null;this.touchControls||(this.touchControls=!0,this.element.classList.add("touch"));var o=this.touchButton,a=!0,i=!1,s=void 0;try{for(var c,l=function(){var t=c.value,a=t.target,i=t.identifier,s=t.clientX,l=t.clientY;if(o&&o.id===i&&n.touchButtons[o.index]===a)return e.length>1&&(o.stick=!1),o.clientX=s,o.clientY=l,n.touchCanvas=Object(u.a)(e).find(function(e){return e.identifier!==i}),n.touchCanvas&&(n.touchCanvas={clientX:n.touchCanvas.clientX,clientY:n.touchCanvas.clientY}),delete n.panPos,{v:null!=n.touchCanvas};var d=n.touchButtons.indexOf(a);d>=0&&!r&&(r={id:i,index:d,stick:!0,original:n.touchMods[d],clientX:s,clientY:l})},d=e[Symbol.iterator]();!(a=(c=d.next()).done);a=!0){var h=l();if("object"===typeof h)return h.v}}catch(_){i=!0,s=_}finally{try{a||null==d.return||d.return()}finally{if(i)throw s}}if(o&&!r&&t&&o.stick){var f=this.touchButtons[o.index].getBoundingClientRect(),v=o.clientX,p=o.clientY;v>=f.left&&v<f.right&&p>=f.top&&p<f.bottom?this.setTouchMod(o.index,!o.original,!0):this.setTouchMod(o.index,o.original)}else o&&this.setTouchMod(o.index,!1);if(this.touchButton=r,r)this.setTouchMod(r.index,!0),r.index===z?this.setTouchMod(H,!1):r.index===H&&this.setTouchMod(z,!1),delete this.panPos;else{if(2===e.length){var m=(e[1].clientX+e[0].clientX)/2,w=(e[1].clientY+e[0].clientY)/2;if(this.panPos){var y,b=m-this.panPos.x,g=w-this.panPos.y,k=this.canvas.offsetHeight/12;if(Math.max(Math.abs(b),Math.abs(g))>k)y=Math.abs(b)>Math.abs(g)?b>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,y),this.panPos={x:m,y:w}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:m,y:w};return this.touchCanvas=null,!1}delete this.panPos}return this.touchCanvas=Object(u.a)(e).find(function(e){return!r||e.identifier!==r.id}),this.touchCanvas&&(this.touchCanvas={clientX:this.touchCanvas.clientX,clientY:this.touchCanvas.clientY}),null!=this.touchCanvas}},{key:"setTouch_",value:function(e,t){this.touchButtons[e]=t}},{key:"setTouchBelt_",value:function(e,t){if(this.touchButtons[e]=t,t){var n=document.createElement("canvas");n.width=28,n.height=28,t.appendChild(n),this.touchCtx[e]=n.getContext("2d")}else this.touchCtx[e]=null}},{key:"render",value:function(){var e=this,t=this.state,n=t.started,r=t.loading,a=t.error,i=t.progress,s=t.dropping,c=t.has_spawn;return o.a.createElement("div",{className:y()("App",{touch:this.touchControls,started:n,dropping:s,keyboard:!!this.showKeyboard}),ref:this.setElement},o.a.createElement("div",{className:"touch-ui touch-mods"},o.a.createElement("div",{className:y()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),o.a.createElement("div",{className:y()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),o.a.createElement("div",{className:y()("touch-button","touch-button-2",{active:this.touchMods[2]}),ref:this.setTouch2})),o.a.createElement("div",{className:"touch-ui touch-belt"},o.a.createElement("div",{className:y()("touch-button","touch-button-0"),ref:this.setTouch3}),o.a.createElement("div",{className:y()("touch-button","touch-button-1"),ref:this.setTouch4}),o.a.createElement("div",{className:y()("touch-button","touch-button-2"),ref:this.setTouch5})),o.a.createElement("div",{className:"Body"},o.a.createElement("div",{className:"inner"},!a&&o.a.createElement("canvas",{ref:this.setCanvas,width:640,height:480}),o.a.createElement("input",{type:"text",className:"keyboard",onChange:this.onKeyboard,onBlur:this.onKeyboardBlur,ref:this.setKeyboard,spellCheck:!1,style:this.showKeyboard||{}}))),o.a.createElement("div",{className:"BodyV"},!!a&&o.a.createElement($,{className:"error",href:W(a,this.state.retail)},o.a.createElement("p",{className:"header"},"The following error has occurred:"),o.a.createElement("p",{className:"body"},a.message),o.a.createElement("p",{className:"footer"},"Click to create an issue on GitHub"),null!=this.saveName&&o.a.createElement("p",{className:"link",onClick:this.downloadSave},"Download save file")),!!r&&!n&&!a&&o.a.createElement("div",{className:"loading"},i&&i.text||"Loading...",null!=i&&!!i.total&&o.a.createElement("span",{className:"progressBar"},o.a.createElement("span",null,o.a.createElement("span",{style:{width:"".concat(Math.round(100*i.loaded/i.total),"%")}})))),!n&&!r&&!a&&o.a.createElement("div",{className:"start"},o.a.createElement("p",null,"This is a web port of the original Diablo game, based on source code reconstructed by GalaXyHaXz and devilution team. The project page with information and links can be found over here ",o.a.createElement($,{href:"https://github.com/d07RiV/diabloweb"},"https://github.com/d07RiV/diabloweb")),o.a.createElement("p",null,"If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing. The game can be purchased from ",o.a.createElement($,{href:"https://www.gog.com/game/diablo"},"GoG"),"."),!c&&o.a.createElement("p",null,"Or you can play the shareware version for free (50MB download)."),o.a.createElement("form",null,o.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),o.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),o.a.createElement("span",{className:"startButton",onClick:function(){return e.start()}},"Play Shareware"))))}}]),t}(o.a.Component);i.a.render(o.a.createElement(Q,null),document.getElementById("root")),function(e){if("serviceWorker"in navigator){if(new URL("/diabloweb",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",function(){var t="".concat("/diabloweb","/service-worker.js");s?(function(e,t){fetch(e).then(function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then(function(e){e.unregister().then(function(){window.location.reload()})}):c(e,t)}).catch(function(){console.log("No internet connection found. App is running in offline mode.")})}(t,e),navigator.serviceWorker.ready.then(function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA")})):c(t,e)})}}({onUpdate:function(){}})}},[[31,2,0,5]]]);
|
|
//# sourceMappingURL=main.fe9d2913.chunk.js.map
|