From dd124708661d539b6232fe64458fe6c2d35dddc4 Mon Sep 17 00:00:00 2001 From: oc Date: Sat, 16 Jun 2018 23:23:19 +0800 Subject: [PATCH] V2.3.1 --- README.md | 13 +++++ _server/blockly/MotaAction.g4 | 4 +- _server/comment.js | 6 ++ _server/data.comment.js | 2 + index.html | 3 +- libs/actions.js | 94 ++++++++++++++++++++++---------- libs/control.js | 50 +++++++++++++++-- libs/core.js | 7 ++- libs/events.js | 31 ++++++++++- libs/thirdparty/lz-string.min.js | 1 + libs/ui.js | 87 +++++++++++++++++------------ libs/utils.js | 23 ++++++-- main.js | 4 +- project/data.js | 3 +- 更新说明.txt | 17 +++++- 15 files changed, 259 insertions(+), 86 deletions(-) create mode 100644 libs/thirdparty/lz-string.min.js diff --git a/README.md b/README.md index 634ab3a4..646ba1e8 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,19 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! ## 更新说明 +### 2018.6.16 V2.3.1 + +* [x] 存档采用高比率压缩,单个大小是原来的1/10! +* [x] 默认存档数改成100页500个 +* [x] base64上传成绩,杜绝乱码 +* [x] 道具栏翻页 +* [x] 单击瞬移(菜单栏中开关) +* [x] 重新补上E键打开光标 +* [x] 楼层属性增添地下层选项,同层传送至上楼梯 +* [x] core.debug()穿墙模式不能穿出地图 +* [x] core.values和core.flags也存入存档 +* [x] 修复所有已知bug + ### 2018.5.27 V2.3 * [x] 启动服务和便捷PS工具(Mac版) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index 7b72897d..a010a7da 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -1491,8 +1491,10 @@ ActionParser.prototype.parseAction = function() { break; case "setFg": // 颜色渐变 if(this.isset(data.color)){ + var alpha = data.color[3]; + if (alpha==undefined || alpha==null) alpha=1; this.next = MotaActionBlocks['setFg_0_s'].xmlText([ - data.color[0],data.color[1],data.color[2],data.color[3]||1,data.time||0,this.next]); + data.color[0],data.color[1],data.color[2],alpha,data.time||0,this.next]); } else { this.next = MotaActionBlocks['setFg_1_s'].xmlText([ data.time||0,this.next]); diff --git a/_server/comment.js b/_server/comment.js index 982153b9..858dcb03 100644 --- a/_server/comment.js +++ b/_server/comment.js @@ -307,6 +307,12 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_type": "event", "_event": "firstArrive", "_data": "第一次到该楼层触发的事件,可以双击进入事件编辑器。" + }, + "underGround": { + "_leaf": true, + "_type": "checkbox", + "_bool": "bool", + "_data": "是否是地下层;如果该项为true则同层传送将传送至上楼梯" } } }, diff --git a/_server/data.comment.js b/_server/data.comment.js index ca4084c6..bc9535d0 100644 --- a/_server/data.comment.js +++ b/_server/data.comment.js @@ -463,12 +463,14 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_bool": "bool", "_data": "剑和盾是否直接作为装备。如果此项为true,则作为装备,需要在道具栏使用,否则将直接加属性。" }, + /* "enableDeleteItem": { "_leaf": true, "_type": "checkbox", "_bool": "bool", "_data": "是否允许删除(丢弃)道具" }, + */ "enableAddPoint": { "_leaf": true, "_type": "checkbox", diff --git a/index.html b/index.html index e03830c3..0f69d24f 100644 --- a/index.html +++ b/index.html @@ -116,8 +116,9 @@ 此浏览器不支持HTML5 + + - \ No newline at end of file diff --git a/libs/actions.js b/libs/actions.js index c0c3c823..7701257e 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -315,11 +315,8 @@ actions.prototype.keyUp = function(keyCode, fromReplay) { core.load(true); break; case 69: // E - /* - // Cursor is unnecessary! if (core.status.heroStop) core.ui.drawCursor(); - */ break; case 84: // T if (core.status.heroStop) @@ -938,6 +935,8 @@ actions.prototype.clickFly = function(x,y) { if (x>=0 && x<=9 && y>=3 && y<=11) { var index=core.status.hero.flyRange.indexOf(core.status.floorId); var stair=core.status.event.data=10 && x<=12 && y<=1) { if (!core.isset(core.status.event.data)) return; if (!core.flags.enableDeleteItem) { @@ -1170,22 +1170,50 @@ actions.prototype.clickToolbox = function(x,y) { core.ui.drawToolbox(); return; } + */ - var index=0; - if (y==4||y==5||y==9||y==10) index=parseInt(x/2); - else index=6+parseInt(x/2); - if (y>=9) index+=100; - this.clickToolboxIndex(index); + // 当前页面 + var page = parseInt((core.status.event.selection%1000)/12)+1; + + // 上一页 + if ((x == 3 || x == 4) && y == 12) { + if (page>1) { + core.ui.drawToolbox(core.status.event.selection-12); + } + return; + } + // 下一页 + if ((x == 8 || x == 9) && y == 12) { + var toolPage = parseInt(Object.keys(core.status.hero.items.tools).length/12)+1, + constantPage = parseInt(Object.keys(core.status.hero.items.constants).length/12)+1; + if (page=0) + this.clickToolboxIndex(index); } ////// 选择工具栏界面中某个Index后的操作 ////// actions.prototype.clickToolboxIndex = function(index) { var items = null; var ii=index; - if (ii<100) + if (ii<1000) items = Object.keys(core.status.hero.items.tools).sort(); else { - ii-=100; + ii-=1000; items = Object.keys(core.status.hero.items.constants).sort(); } if (items==null) return; @@ -1206,58 +1234,59 @@ actions.prototype.keyDownToolbox = function (keycode) { var tools = Object.keys(core.status.hero.items.tools).sort(); var constants = Object.keys(core.status.hero.items.constants).sort(); var index=core.status.event.selection; + var page=parseInt(index%1000/12), offset=12*page; if (keycode==37) { // left - if ((index>0 && index<100) || index>100) { + if ((index>0 && index<1000) || index>1000) { this.clickToolboxIndex(index-1); return; } - if (index==100 && tools.length>0) { + if (index==1000 && tools.length>0) { this.clickToolboxIndex(tools.length-1); return; } } if (keycode==38) { // up - if ((index>5 && index<100) || index>105) { + if ((index>offset+5 && index<1000) || index>offset+1005) { this.clickToolboxIndex(index-6); return; } - if (index>=100 && index<=105) { - if (tools.length>6) { - this.clickToolboxIndex(Math.min(tools.length-1, index-100+6)); + if (index>=offset+1000 && index<=offset+1005) { + if (tools.length>offset+6) { + this.clickToolboxIndex(Math.min(tools.length-1, index-1000+6)); } - else if (tools.length>0) { - this.clickToolboxIndex(Math.min(tools.length-1, index-100)); + else if (tools.length>offset) { + this.clickToolboxIndex(Math.min(tools.length-1, index-1000)); } return; } } if (keycode==39) { // right - if ((index=100 && index=1000 && index0) { - this.clickToolboxIndex(100); + this.clickToolboxIndex(1000); return; } } if (keycode==40) { // down - if (index<=5) { - if (tools.length>6) { + if (index<=offset+5) { + if (tools.length>offset+6) { this.clickToolboxIndex(Math.min(tools.length-1, index+6)); } - else if (constants.length>0) { - this.clickToolboxIndex(100+Math.min(constants.length-1, index)); + else if (constants.length>offset) { + this.clickToolboxIndex(1000+Math.min(constants.length-1, index)); } return; } - if (index>5 && index<100 && constants.length>0) { - this.clickToolboxIndex(100+Math.min(constants.length-1, index-6)); + if (index>offset+5 && indexoffset) { + this.clickToolboxIndex(1000+Math.min(constants.length-1, index-6)); return; } - if (index>=100 && index<=105 && constants.length>6) { - this.clickToolboxIndex(Math.min(100+constants.length-1, index+6)); + if (index>=offset+1000 && index<=offset+1005 && constants.length>offset+6) { + this.clickToolboxIndex(Math.min(1000+constants.length-1, index+6)); return; } } @@ -1276,6 +1305,7 @@ actions.prototype.keyUpToolbox = function (keycode) { return; } + /* if (keycode==46) { // delete if (!core.isset(core.status.event.data)) return; if (!core.flags.enableDeleteItem) { @@ -1287,6 +1317,7 @@ actions.prototype.keyUpToolbox = function (keycode) { core.ui.drawToolbox(); return; } + */ } @@ -1486,9 +1517,14 @@ actions.prototype.clickSwitchs = function (x,y) { core.ui.drawSwitchs(); break; case 6: - window.open(core.firstData.name+".zip", "_blank"); + core.status.automaticRoute.clickMoveDirectly=!core.status.automaticRoute.clickMoveDirectly; + core.setLocalStorage('clickMoveDirectly', core.status.automaticRoute.clickMoveDirectly); + core.ui.drawSwitchs(); break; case 7: + window.open(core.firstData.name+".zip", "_blank"); + break; + case 8: core.status.event.selection=0; core.ui.drawSettings(); break; diff --git a/libs/control.js b/libs/control.js index 7b562801..db1beff0 100644 --- a/libs/control.js +++ b/libs/control.js @@ -243,7 +243,7 @@ control.prototype.clearStatus = function() { } ////// 重置游戏状态和初始数据 ////// -control.prototype.resetStatus = function(hero, hard, floorId, route, maps) { +control.prototype.resetStatus = function(hero, hard, floorId, route, maps, values, flags) { var totalTime=0; if (core.isset(core.status) && core.isset(core.status.hero) @@ -261,6 +261,7 @@ control.prototype.resetStatus = function(hero, hard, floorId, route, maps) { core.status.maps = core.clone(maps); // 初始化怪物 core.material.enemys = core.clone(core.enemys.getEnemys()); + core.material.items = core.clone(core.items.getItems()); // 初始化人物属性 core.status.hero = core.clone(hero); // 统计数据 @@ -285,6 +286,16 @@ control.prototype.resetStatus = function(hero, hard, floorId, route, maps) { // 保存的Index core.status.saveIndex = core.getLocalStorage('saveIndex2', 1); + core.status.automaticRoute.clickMoveDirectly = core.getLocalStorage('clickMoveDirectly', false); + + if (core.isset(values)) + core.values = core.clone(values); + + if (core.isset(flags)) + core.flags = core.clone(flags); + + core.events.initGame(); + } ////// 开始游戏 ////// @@ -304,8 +315,9 @@ control.prototype.startGame = function (hard, callback) { formData.append('name', core.firstData.name); formData.append('version', core.firstData.version); formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); - formData.append('hard', hard); + formData.append('hard', LZString.compressToBase64(hard)); formData.append('hardCode', core.getFlag('hard', 0)); + formData.append('base64', 1); core.utils.http("POST", "/games/upload.php", formData); }) @@ -409,6 +421,22 @@ control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { } return; } + + // 单击瞬间移动 + if (core.status.automaticRoute.clickMoveDirectly && core.status.heroStop) { + var ignoreSteps = core.canMoveDirectly(destX, destY); + if (ignoreSteps>0) { + core.clearMap('hero', 0, 0, 416, 416); + core.setHeroLoc('x', destX); + core.setHeroLoc('y', destY); + core.drawHero(); + core.status.route.push("move:"+destX+":"+destY); + core.status.hero.statistics.moveDirectly++; + core.status.hero.statistics.ignoreSteps+=ignoreSteps; + return; + } + } + var step = 0; var tempStep = null; var moveStep; @@ -720,8 +748,19 @@ control.prototype.moveHero = function (direction, callback) { if (!core.status.heroStop) { if (core.hasFlag('debug') && core.status.ctrlDown) { if (core.status.heroMoving!=0) return; + // 检测是否穿出去 + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + direction = core.getHeroLoc('direction'); + var nx = core.getHeroLoc('x') + scan[direction].x, ny=core.getHeroLoc('y') + scan[direction].y; + if (nx<0 || nx>12 || ny<0 || ny>12) return; + core.status.heroMoving=-1; - core.eventMoveHero([core.getHeroLoc('direction')], 100, function () { + core.eventMoveHero([direction], 100, function () { core.status.heroMoving=0; doAction(); }); @@ -2077,6 +2116,8 @@ control.prototype.saveData = function() { 'hard': core.status.hard, 'maps': core.maps.save(core.status.maps), 'route': core.encodeRoute(core.status.route), + 'values': core.clone(core.values), + 'flags': core.clone(core.flags), 'shops': {}, 'version': core.firstData.version, "time": new Date().getTime() @@ -2096,7 +2137,8 @@ control.prototype.saveData = function() { ////// 从本地读档 ////// control.prototype.loadData = function (data, callback) { - core.resetStatus(data.hero, data.hard, data.floorId, core.decodeRoute(data.route), core.maps.load(data.maps)); + core.resetStatus(data.hero, data.hard, data.floorId, core.decodeRoute(data.route), core.maps.load(data.maps), + data.values, data.flags); // load shop times for (var shop in core.status.shops) { diff --git a/libs/core.js b/libs/core.js index 55093bf7..00c37d91 100644 --- a/libs/core.js +++ b/libs/core.js @@ -103,6 +103,7 @@ function core() { 'cursorX': null, 'cursorY': null, "moveDirectly": false, + 'clickMoveDirectly': false, }, // 按下键的时间:为了判定双击 @@ -179,7 +180,7 @@ core.prototype.init = function (coreData, callback) { core.dom.logoLabel.innerHTML = core.firstData.title; document.title = core.firstData.title + " - HTML5魔塔"; document.getElementById("startLogo").innerHTML = core.firstData.title; - core.material.items = core.items.getItems(); + core.material.items = core.clone(core.items.getItems()); core.initStatus.maps = core.maps.initMaps(core.floorIds); core.material.enemys = core.clone(core.enemys.getEnemys()); core.material.icons = core.icons.getIcons(); @@ -303,8 +304,8 @@ core.prototype.clearStatus = function() { } ////// 重置游戏状态和初始数据 ////// -core.prototype.resetStatus = function(hero, hard, floorId, route, maps) { - core.control.resetStatus(hero, hard, floorId, route, maps) +core.prototype.resetStatus = function(hero, hard, floorId, route, maps, values, flags) { + core.control.resetStatus(hero, hard, floorId, route, maps, values, flags); } ////// 开始游戏 ////// diff --git a/libs/events.js b/libs/events.js index 400b2ab4..1ec5cc69 100644 --- a/libs/events.js +++ b/libs/events.js @@ -175,9 +175,9 @@ events.prototype.gameOver = function (ending, fromReplay) { formData.append('name', core.firstData.name); formData.append('version', core.firstData.version); formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); - formData.append('hard', core.status.hard); - formData.append('username', username||""); - formData.append('ending', ending); + formData.append('hard', LZString.compressToBase64(core.status.hard)); + formData.append('username', LZString.compressToBase64(username||"")); + formData.append('ending', LZString.compressToBase64(ending)); formData.append('lv', core.status.hero.lv); formData.append('hp', Math.min(hp, Math.pow(2, 63))); formData.append('atk', core.status.hero.atk); @@ -189,6 +189,7 @@ events.prototype.gameOver = function (ending, fromReplay) { formData.append('seed', core.getFlag('seed')); formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime/1000)); formData.append('route', core.encodeRoute(core.status.route)); + formData.append('base64', 1); if (main.isCompetition) core.http("POST", "/games/competition/upload.php", formData); @@ -1482,4 +1483,28 @@ events.prototype.afterLoadData = function (data) { return this.eventdata.afterLoadData(data); } +////// 上传当前数据 ////// +events.prototype.uploadCurrent = function () { + var formData = new FormData(); + formData.append('type', 'score'); + formData.append('name', core.firstData.name); + formData.append('version', core.firstData.version); + formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":""); + formData.append('hard', LZString.compressToBase64(core.status.hard)); + formData.append('lv', core.status.hero.lv); + formData.append('hp', Math.min(hp, Math.pow(2, 63))); + formData.append('atk', core.status.hero.atk); + formData.append('def', core.status.hero.def); + formData.append('mdef', core.status.hero.mdef); + formData.append('money', core.status.hero.money); + formData.append('experience', core.status.hero.experience); + formData.append('steps', core.status.hero.steps); + formData.append('seed', core.getFlag('seed')); + formData.append('totalTime', Math.floor(core.status.hero.statistics.totalTime/1000)); + formData.append('route', core.encodeRoute(core.status.route)); + formData.append('deler', 'current'); + formData.append('base64', 1); + + core.http("POST", "/games/upload.php", formData); +} diff --git a/libs/thirdparty/lz-string.min.js b/libs/thirdparty/lz-string.min.js new file mode 100644 index 00000000..b2088b1f --- /dev/null +++ b/libs/thirdparty/lz-string.min.js @@ -0,0 +1 @@ +var LZString=function(){function o(o,r){if(!t[o]){t[o]={};for(var n=0;ne;e++){var s=r.charCodeAt(e);n[2*e]=s>>>8,n[2*e+1]=s%256}return n},decompressFromUint8Array:function(o){if(null===o||void 0===o)return i.decompress(o);for(var n=new Array(o.length/2),e=0,t=n.length;t>e;e++)n[e]=256*o[2*e]+o[2*e+1];var s=[];return n.forEach(function(o){s.push(r(o))}),i.decompress(s.join(""))},compressToEncodedURIComponent:function(o){return null==o?"":i._compress(o,6,function(o){return e.charAt(o)})},decompressFromEncodedURIComponent:function(r){return null==r?"":""==r?null:(r=r.replace(/ /g,"+"),i._decompress(r.length,32,function(n){return o(e,r.charAt(n))}))},compress:function(o){return i._compress(o,16,function(o){return r(o)})},_compress:function(o,r,n){if(null==o)return"";var e,t,i,s={},p={},u="",c="",a="",l=2,f=3,h=2,d=[],m=0,v=0;for(i=0;ie;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++),s[c]=f++,a=String(u)}if(""!==a){if(Object.prototype.hasOwnProperty.call(p,a)){if(a.charCodeAt(0)<256){for(e=0;h>e;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++)}for(t=2,e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;for(;;){if(m<<=1,v==r-1){d.push(n(m));break}v++}return d.join("")},decompress:function(o){return null==o?"":""==o?null:i._decompress(o.length,32768,function(r){return o.charCodeAt(r)})},_decompress:function(o,n,e){var t,i,s,p,u,c,a,l,f=[],h=4,d=4,m=3,v="",w=[],A={val:e(0),position:n,index:1};for(i=0;3>i;i+=1)f[i]=i;for(p=0,c=Math.pow(2,2),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(t=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 2:return""}for(f[3]=l,s=l,w.push(l);;){if(A.index>o)return"";for(p=0,c=Math.pow(2,m),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(l=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 2:return w.join("")}if(0==h&&(h=Math.pow(2,m),m++),f[l])v=f[l];else{if(l!==d)return null;v=s+s.charAt(0)}w.push(v),f[d++]=s+v.charAt(0),h--,s=v,0==h&&(h=Math.pow(2,m),m++)}}};return i}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module&&(module.exports=LZString); \ No newline at end of file diff --git a/libs/ui.js b/libs/ui.js index e42bacaa..5cfedd53 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -737,6 +737,7 @@ ui.prototype.drawSwitchs = function() { "怪物显伤: "+(core.flags.displayEnemyDamage ? "[ON]" : "[OFF]"), "临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"), "领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), + "单击瞬移: "+(core.status.automaticRoute.clickMoveDirectly ? "[ON]" : "[OFF]"), "下载离线版本", "返回主菜单" ]; @@ -1461,19 +1462,27 @@ ui.prototype.drawToolbox = function(index) { if (!core.isset(index)) { if (tools.length>0) index=0; - else if (constants.length>0) index=100; + else if (constants.length>0) index=1000; else index=0; } core.status.event.selection=index; var selectId; - if (index<100) + if (index<1000) { + if (index>=tools.length) index=Math.max(0, tools.length-1); selectId = tools[index]; - else - selectId = constants[index-100]; + } + else { + if (index-1000>=constants.length) index=1000+Math.max(0, constants.length-1); + selectId = constants[index-1000]; + } + + var page = parseInt((index%1000)/12)+1; + var totalPage = parseInt(Math.max(tools.length, constants.length)/12)+1; if (!core.hasItem(selectId)) selectId=null; + core.status.event.data=selectId; core.clearMap('ui', 0, 0, 416, 416); @@ -1485,34 +1494,37 @@ ui.prototype.drawToolbox = function(index) { core.canvas.ui.lineWidth = 2; core.canvas.ui.strokeWidth = 2; + var ydelta = 20; + // 画线 core.canvas.ui.beginPath(); - core.canvas.ui.moveTo(0, 130); - core.canvas.ui.lineTo(416, 130); + core.canvas.ui.moveTo(0, 130-ydelta); + core.canvas.ui.lineTo(416, 130-ydelta); core.canvas.ui.stroke(); core.canvas.ui.beginPath(); - core.canvas.ui.moveTo(0,129); - core.canvas.ui.lineTo(0,105); - core.canvas.ui.lineTo(72,105); - core.canvas.ui.lineTo(102,129); + core.canvas.ui.moveTo(416,129-ydelta); + core.canvas.ui.lineTo(416,105-ydelta); + core.canvas.ui.lineTo(416-72,105-ydelta); + core.canvas.ui.lineTo(416-102,129-ydelta); core.canvas.ui.fill(); core.canvas.ui.beginPath(); - core.canvas.ui.moveTo(0, 290); - core.canvas.ui.lineTo(416, 290); + core.canvas.ui.moveTo(0, 290-ydelta); + core.canvas.ui.lineTo(416, 290-ydelta); core.canvas.ui.stroke(); core.canvas.ui.beginPath(); - core.canvas.ui.moveTo(0,289); - core.canvas.ui.lineTo(0,265); - core.canvas.ui.lineTo(72,265); - core.canvas.ui.lineTo(102,289); + core.canvas.ui.moveTo(416,289-ydelta); + core.canvas.ui.lineTo(416,265-ydelta); + core.canvas.ui.lineTo(416-72,265-ydelta); + core.canvas.ui.lineTo(416-102,289-ydelta); core.canvas.ui.fill(); // 文字 - core.canvas.ui.textAlign = 'left'; - core.fillText('ui', "消耗道具", 5, 124, '#333333', "bold 16px Verdana"); - core.fillText('ui', "永久道具", 5, 284); + core.canvas.ui.textAlign = 'right'; + core.fillText('ui', "消耗道具", 411, 124-ydelta, '#333333', "bold 16px Verdana"); + core.fillText('ui', "永久道具", 411, 284-ydelta); + core.canvas.ui.textAlign = 'left'; // 描述 if (core.isset(selectId)) { var item=core.material.items[selectId]; @@ -1536,47 +1548,49 @@ ui.prototype.drawToolbox = function(index) { var images = core.material.images.items; // 消耗道具 - for (var i=0;i0) { + try { + return JSON.parse(output); + } + catch (ee) {} + } + return JSON.parse(value); + } + return defaultValue; + } + catch (e) { + console.log(e); + return defaultValue; + } } ////// 移除本地存储 ////// diff --git a/main.js b/main.js index 4892caa0..5f19aee0 100644 --- a/main.js +++ b/main.js @@ -2,7 +2,7 @@ function main() { //------------------------ 用户修改内容 ------------------------// - this.version = "2.3"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 + this.version = "2.3.1"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 this.useCompress = false; // 是否使用压缩文件 // 当你即将发布你的塔时,请使用“JS代码压缩工具”将所有js代码进行压缩,然后将这里的useCompress改为true。 @@ -14,7 +14,7 @@ function main() { this.isCompetition = false; // 是否是比赛模式 - this.savePages = 30; // 存档页数,每页可存5个;默认为30页150个存档 + this.savePages = 100; // 存档页数,每页可存5个;默认为100页500个存档 //------------------------ 用户修改内容 END ------------------------// diff --git a/project/data.js b/project/data.js index 6e6b2432..c6cab035 100644 --- a/project/data.js +++ b/project/data.js @@ -26,7 +26,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "firstData" : { "title": "魔塔样板", "name": "template", - "version": "Ver 2.3", + "version": "Ver 2.3.1", "floorId": "sample0", "hero": { "name": "阳光", @@ -148,7 +148,6 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "snowFourDirections": false, "bigKeyIsBox": false, "equipment": false, - "enableDeleteItem": true, "enableAddPoint": false, "enableNegativeDamage": false, "hatredDecrease": true, diff --git a/更新说明.txt b/更新说明.txt index db6354f9..ef07cf76 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,4 +1,19 @@ -HTML5魔塔样板V2.3 +HTML5魔塔样板V2.3.1 + +存档采用高比率压缩,单个大小是原来的1/10! +默认存档数改成100页500个 +base64上传成绩,杜绝乱码 +道具栏翻页 +单击瞬移(菜单栏中开关) +重新补上E键打开光标 +楼层属性增添地下层选项,同层传送至上楼梯 +core.debug()穿墙模式不能穿出地图 +core.values和core.flags存入存档 +修复所有已知bug + +----------------------------------------------------------------------- + +HTML5魔塔样板V2.3 启动服务和便捷PS工具(Mac版) 地图编辑器可以右键复制或移动图块