Files
diabloweb/static/js/main.bdb398a3.chunk.js
2019-08-18 01:51:09 +03:00

2 lines
38 KiB
JavaScript

(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{11:function(e,t,n){"use strict";n.d(t,"a",function(){return m});var r=n(6),o=n(1),a=n.n(o),i=n(2),s=n(13),c=n.n(s);function u(e,t){return l.apply(this,arguments)}function l(){return(l=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 d(e){return h.apply(this,arguments)}function h(){return(h=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)&&u(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 f=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 v.apply(this,arguments)}function v(){return(v=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,f(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 m(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(a.a.mark(function e(t){var n,o,i,s,l,h,f,v;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}l=s[i],h=Object(r.a)(l,2),f=h[0],v=h[1],o.set(f,v);case 15:i++,e.next=9;break;case 18:return window.DownloadFile=function(e){return u(n,e)},window.DownloadSaves=function(){return d(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 u(n,e)},upload:function(e){return p(n,o,e)}});case 23:return e.prev=23,e.t2=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 28:case"end":return e.stop()}},e,null,[[0,23]])}))).apply(this,arguments)}},27:function(e,t,n){e.exports=function(){return new Worker(n.p+"3d851ae1dfd110e041f9.worker.js")}},32:function(e,t,n){e.exports=n(65)},38:function(e,t,n){},39:function(e,t,n){},63: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=63},65: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(38),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(4),l=n(7),d=n(8),h=n(29),f=n(25),p=n(5),v=n(30),m=n(31),y=(n(39),n(9)),w=n.n(y),b=n(14),g=n(26),k=n(11),_=n(1),x=n.n(_),E=n(6),M=n(2),C=n(27),T=n.n(C);function D(){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(E.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 j=n(28),O=n.n(j),S=[50274091,25830791];function A(e,t){return L.apply(this,arguments)}function L(){return(L=Object(M.a)(x.a.mark(function e(t,n){var r,o,a;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=n.files.get("spawn.mpq"))||S.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,O.a.request({url:"/diabloweb/spawn.mpq",responseType:"arraybuffer",onDownloadProgress:function(e){t.onProgress&&t.onProgress({text:"Downloading...",loaded:e.loaded,total:e.total||S[1]})},headers:{"Cache-Control":"max-age=31536000"}});case 9:if(o=e.sent,S.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 B=n(12),N=n.n(B),P=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:"read_buf",value:function(){var e=this.read32(),t=this.buffer.subarray(this.pos,this.pos+e);return this.pos+=e,t}}]),e}(),I=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.pos+=e.byteLength,this}},{key:"write_buf",value:function(e){return this.write32(e.byteLength),this.rest(e),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};function R(e,t){var n=e.read8(),r=Object.values(t).find(function(e){return e.code===n});if(!r)throw Error("invalid packet code");return{type:r,packet:r.read(e)}}function U(e,t){return("function"===typeof e.size?e.size(t):e.size)+1}function z(e,t){var n=U(e,t);return e.write(new I(n).write8(e.code),t).result}function F(e){return{code:0,read:function(t){for(var n=t.read16(),r=[],o=0;o<n;++o)r.push(R(t,e()));return r},size:function(e){return e.reduce(function(e,t){return e+U(t.type,t.packet)},2)},write:function(e,t){e.write16(t.length);var n=!0,r=!1,o=void 0;try{for(var a,i=t[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var s=a.value,c=s.type,u=s.packet;c.write(e.write8(c.code),u)}}catch(l){r=!0,o=l}finally{try{n||null==i.return||i.return()}finally{if(r)throw o}}return e}}}var G={info:{code:50,read:function(e){return{version:e.read32()}},size:4,write:function(e,t){var n=t.version;return e.write32(n)}},game_list:{code:33,read:function(e){for(var t=e.read16(),n=[],r=0;r<t;++r)n.push({type:e.read32(),name:e.read_str()});return{games:n}},size:function(e){return e.games.reduce(function(e,t){return e+5+t.name.length},2)},write:function(e,t){var n=t.games;e.write16(n.length);var r=!0,o=!1,a=void 0;try{for(var i,s=n[Symbol.iterator]();!(r=(i=s.next()).done);r=!0){var c=i.value,u=c.type,l=c.name;e.write32(u),e.write_str(l)}}catch(d){o=!0,a=d}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return e}},join_accept:{code:18,read:function(e){return{cookie:e.read32(),index:e.read8(),seed:e.read32(),difficulty:e.read32()}},size:13,write:function(e,t){var n=t.cookie,r=t.index,o=t.seed,a=t.difficulty;return e.write32(n).write8(r).write32(o).write32(a)}},join_reject:{code:21,read:function(e){return{cookie:e.read32(),reason:e.read8()}},size:5,write:function(e,t){var n=t.cookie,r=t.reason;return e.write32(n).write8(r)}},connect:{code:19,read:function(e){return{id:e.read8()}},size:1,write:function(e,t){var n=t.id;return e.write8(n)}},disconnect:{code:20,read:function(e){return{id:e.read8(),reason:e.read32()}},size:5,write:function(e,t){var n=t.id,r=t.reason;return e.write8(n).write32(r)}},message:{code:1,read:function(e){return{id:e.read8(),payload:e.read_buf()}},size:function(e){return 5+e.payload.byteLength},write:function(e,t){var n=t.id,r=t.payload;return e.write8(n).write_buf(r)}},turn:{code:2,read:function(e){return{id:e.read8(),turn:e.read32()}},size:5,write:function(e,t){var n=t.id,r=t.turn;return e.write8(n).write32(r)}},batch:F(function(){return G})},X={info:{code:49,read:function(e){return{version:e.read32()}},size:4,write:function(e,t){var n=t.version;return e.write32(n)}},game_list:{code:33,read:function(){return{}},size:0,write:function(e){return e}},create_game:{code:34,read:function(e){return{cookie:e.read32(),name:e.read_str(),password:e.read_str(),difficulty:e.read32()}},size:function(e){var t=e.name,n=e.password;return 10+t.length+n.length},write:function(e,t){var n=t.cookie,r=t.name,o=t.password,a=t.difficulty;return e.write32(n).write_str(r).write_str(o).write32(a)}},join_game:{code:35,read:function(e){return{cookie:e.read32(),name:e.read_str(),password:e.read_str()}},size:function(e){var t=e.name,n=e.password;return 6+t.length+n.length},write:function(e,t){var n=t.cookie,r=t.name,o=t.password;return e.write32(n).write_str(r).write_str(o)}},leave_game:{code:36,read:function(){return{}},size:0,write:function(e){return e}},drop_player:{code:3,read:function(e){return{id:e.read8(),reason:e.read32()}},size:5,write:function(e,t){var n=t.id,r=t.reason;return e.write8(n).write32(r)}},message:{code:1,read:function(e){return{id:e.read8(),payload:e.read_buf()}},size:function(e){return 5+e.payload.byteLength},write:function(e,t){var n=t.id,r=t.payload;return e.write8(n).write_buf(r)}},turn:{code:2,read:function(e){return{turn:e.read32()}},size:4,write:function(e,t){var n=t.turn;return e.write32(n)}},batch:F(function(){return G})},q=function(e){return"diabloweb_".concat(e)},J={host:"diablo.rivsoft.net",port:443,secure:!0},Y=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 N.a(q(s),J),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(z(G.join_reject,{cookie:i,reason:K.CREATE_GAME_EXISTS})),o(),a.peer.off("error",e),a.peer.off("open",h)},h=function e(){setTimeout(function(){r(z(G.join_accept,{cookie:i,index:0,seed:a.seed,difficulty:u})),r(z(G.connect,{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=new P(r),a=R(o,X),i=a.type,s=a.packet;switch(i.code){case X.info.code:n.version=s.version;break;case X.join_game.code:if(n.version!==t.version)e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_VERSION_MISMATCH}));else if(s.name!==t.name)e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_GAME_NOT_FOUND}));else if(s.password!==t.password)e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_INCORRECT_PASSWORD}));else{for(var c=1;c<4&&t.players[c];)++c;c>=4?e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_GAME_FULL})):(t.players[c]=n,n.id=c,e.send(z(G.join_accept,{cookie:s.cookie,index:c,seed:t.seed,difficulty:t.difficulty})),t.send(255,z(G.connect,{id:c})))}break;default:if(null==n.id)return;t.handle(n.id,i.code,s)}if(!o.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(z(G.disconnect,{id:e,reason:t})),this.peer.destroy(),this.onClose()}else this.players[e]&&(this.send(255,z(G.disconnect,{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){switch(t){case X.leave_game.code:this.drop(e,3);break;case X.drop_player.code:this.drop(n.id,n.reason);break;case X.message.code:this.send(255===n.id?~(1<<e):1<<n.id,z(G.message,{id:e,payload:n.payload}));break;case X.turn.code:this.send(~(1<<e),z(G.turn,{id:e,turn:n.turn}));break;default:throw Error("invalid packet ".concat(t))}}}]),e}(),W=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 N.a(J),this.conn=this.peer.connect(q(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(p))},h=function(){r(z(G.join_reject,{cookie:i,reason:K.JOIN_GAME_NOT_FOUND})),o(),d()},f=function e(){a.conn.send(z(X.info,{version:t})),a.conn.send(z(X.join_game,{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)},p=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=R(new P(e),G),n=t.type,i=t.packet;switch(n.code){case G.join_accept.code:a.myplr=i.index;break;case G.join_reject.code:o();break;case G.disconnect.code:"myplr"===i.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 H(e){var t=null,n=null,r=0;return{send:function(o){var a=new P(o),i=R(a,X),s=i.type,c=i.packet;switch(s.code){case X.info.code:r=c.version;break;case X.create_game.code:t||n?e(z(G.join_reject,{cookie:c.cookie,reason:K.JOIN_ALREADY_IN_GAME})):t=new Y(r,c,e,function(){return t=null});break;case X.join_game.code:t||n?e(z(G.join_reject,{cookie:c.cookie,reason:K.JOIN_ALREADY_IN_GAME})):n=new W(r,c,e,function(){return n=null});break;default:if(t)t.handle(0,s.code,c),s.code===X.leave_game.code&&(t=null);else{if(n)return n.send(o),void(s.code===X.leave_game.code&&(n=null));if(s.code!==X.leave_game.code)throw Error("invalid packet ".concat(s.code))}}if(!a.done())throw Error("packet too large")}}}function V(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,p=f.x,v=f.y,m=f.w,y=f.h,w=f.data,b=t.createImageData(m,y);b.data.set(w),t.putImageData(b,p,v)}}catch(I){u=!0,l=I}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 T,D=a[Symbol.iterator]();!(E=(T=D.next()).done);E=!0){var j=T.value,O=j.x,S=j.y,A=j.text,L=j.color,B=L>>16&255,N=L>>8&255,P=255&L;t.fillStyle="rgb(".concat(B,", ").concat(N,", ").concat(P,")"),t.fillText(A,O,S+22)}}catch(I){M=!0,C=I}finally{try{E||null==D.return||D.return()}finally{if(M)throw C}}t.restore()}}e.updateBelt(s)}function $(){return($=Object(M.a)(x.a.mark(function e(t,n,r,o){var a,i,s;return x.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,A(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 T.a,d=[],h=H(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":V(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 p,v=o.batch[Symbol.iterator]();!(s=(p=v.next()).done);s=!0){var m=p.value,y=m.func,w=m.params;n[y].apply(n,Object(u.a)(w))}}catch(M){d=!0,f=M}finally{try{s||null==v.return||v.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=[],p=!0,v=!1,m=void 0;try{for(var y,w=a.files[Symbol.iterator]();!(p=(y=w.next()).done);p=!0){var b=y.value,g=Object(E.a)(b,2)[1];f.push(g.buffer)}}catch(k){v=!0,m=k}finally{try{p||null==w.return||w.return()}finally{if(v)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 $.apply(this,arguments)}(e,D(),t,n)}function Z(e,t){var n=(e.message||"Unknown error")+(e.stack?"\n"+e.stack:""),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.34"," (").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=N.a,b.a.initialize("UA-43123589-6"),b.a.pageview("/");var ee=0,te=1;var ne=null;try{ne=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,p=void 0;try{for(var v,m=d.cssRules[Symbol.iterator]();!(h=(v=m.next()).done);h=!0){var y=v.value;if(".App.keyboard .Body .inner"===y.selectorText)return y}}catch(w){f=!0,p=w}finally{try{h||null==m.return||m.return()}finally{if(f)throw p}}}}}catch(w){s=!0,c=w}finally{try{i||null==l.return||l.return()}finally{if(s)throw c}}}}catch(w){t=!0,n=w}finally{try{e||null==o.return||o.return()}finally{if(t)throw n}}}()}catch(ae){}var re=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)},oe=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(k.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[ee]||n.game("DApi_Mouse",1,n.touchMods[te]?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[te]||n.touchButton&&n.touchButton.index===te||n.setTouchMod(te,!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(p.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(p.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(p.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(p.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(p.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(p.a)(n),5),n}return Object(v.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&&S.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){var n=this;t?Object(g.mapStackTrace)(t,function(t){n.setState(function(n){return!n.error&&{error:{message:e,stack:t.join("\n")}}})}):this.setState(function(t){return!t.error&&{error:{message:e}}})}},{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(),ne&&(ne.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 if(!e||e.name.match(/\.mpq$/i)){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)})}else window.alert("Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.")}},{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(),p=o.clientX,v=o.clientY;p>=f.left&&p<f.right&&v>=f.top&&v<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===ee?this.setTouchMod(te,!1):r.index===te&&this.setTouchMod(ee,!1),delete this.panPos;else{if(2===e.length){var m=(e[1].clientX+e[0].clientX)/2,y=(e[1].clientY+e[0].clientY)/2;if(this.panPos){var w,b=m-this.panPos.x,g=y-this.panPos.y,k=this.canvas.offsetHeight/12;if(Math.max(Math.abs(b),Math.abs(g))>k)w=Math.abs(b)>Math.abs(g)?b>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,w),this.panPos={x:m,y:y}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:m,y:y};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:w()("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:w()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),o.a.createElement("div",{className:w()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),o.a.createElement("div",{className:w()("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:w()("touch-button","touch-button-0"),ref:this.setTouch3}),o.a.createElement("div",{className:w()("touch-button","touch-button-1"),ref:this.setTouch4}),o.a.createElement("div",{className:w()("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(re,{className:"error",href:Z(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(re,{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(re,{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(oe,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(){}})}},[[32,2,0,5]]]);
//# sourceMappingURL=main.bdb398a3.chunk.js.map