This commit is contained in:
oc 2018-06-16 23:23:19 +08:00
parent 6b89497abe
commit dd12470866
15 changed files with 259 additions and 86 deletions

View File

@ -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版

View File

@ -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]);

View File

@ -307,6 +307,12 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_type": "event",
"_event": "firstArrive",
"_data": "第一次到该楼层触发的事件,可以双击进入事件编辑器。"
},
"underGround": {
"_leaf": true,
"_type": "checkbox",
"_bool": "bool",
"_data": "是否是地下层如果该项为true则同层传送将传送至上楼梯"
}
}
},

View File

@ -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",

View File

@ -116,8 +116,9 @@
<canvas class='gameCanvas' id='ui' width='416' height='416'></canvas>
<canvas class='gameCanvas' id='data' width='416' height='416'>此浏览器不支持HTML5</canvas>
</div>
<script src='libs/thirdparty/mid.min.js'></script>
<script src='libs/thirdparty/lz-string.min.js'></script>
<script id='mainScript' src='main.js'></script>
<script>main.init();main.listen();</script>
<script src='libs/thirdparty/mid.min.js'></script>
</body>
</html>

View File

@ -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<index?"upFloor":"downFloor";
if (core.status.event.data==index && core.floors[core.status.floorId].underGround)
stair = "upFloor";
var floorId=core.status.event.data;
var toFloor = core.status.hero.flyRange[floorId];
core.status.route.push("fly:"+toFloor);
@ -1159,6 +1158,7 @@ actions.prototype.clickToolbox = function(x,y) {
core.ui.closePanel();
return;
}
/*
if (x>=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<toolPage) {
core.ui.drawToolbox(12*page);
}
else if (page<constantPage) {
core.ui.drawToolbox(1000+12*page);
}
return;
}
var index=parseInt(12*(page-1)+x/2);
if (y==4) index+=0;
else if (y==6) index+=6;
else if (y==9) index+=1000;
else if (y==11) index+=1006;
else index=-1;
if (index>=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<tools.length-1) || (index>=100 && index<constants.length+100)) {
if ((index<tools.length-1) || (index>=1000 && index<constants.length+1000)) {
this.clickToolboxIndex(index+1);
return;
}
if (index==tools.length-1 && constants.length>0) {
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 && index<offset+1000 && constants.length>offset) {
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;

View File

@ -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) {

View File

@ -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);
}
////// 开始游戏 //////

View File

@ -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);
}

1
libs/thirdparty/lz-string.min.js vendored Normal file
View File

@ -0,0 +1 @@
var LZString=function(){function o(o,r){if(!t[o]){t[o]={};for(var n=0;n<o.length;n++)t[o][o.charAt(n)]=n}return t[o][r]}var r=String.fromCharCode,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",t={},i={compressToBase64:function(o){if(null==o)return"";var r=i._compress(o,6,function(o){return n.charAt(o)});switch(r.length%4){default:case 0:return r;case 1:return r+"===";case 2:return r+"==";case 3:return r+"="}},decompressFromBase64:function(r){return null==r?"":""==r?null:i._decompress(r.length,32,function(e){return o(n,r.charAt(e))})},compressToUTF16:function(o){return null==o?"":i._compress(o,15,function(o){return r(o+32)})+" "},decompressFromUTF16:function(o){return null==o?"":""==o?null:i._decompress(o.length,16384,function(r){return o.charCodeAt(r)-32})},compressToUint8Array:function(o){for(var r=i.compress(o),n=new Uint8Array(2*r.length),e=0,t=r.length;t>e;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;i<o.length;i+=1)if(u=o.charAt(i),Object.prototype.hasOwnProperty.call(s,u)||(s[u]=f++,p[u]=!0),c=a+u,Object.prototype.hasOwnProperty.call(s,c))a=c;else{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++),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);

View File

@ -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;i<tools.length;i++) {
var tool=tools[i];
for (var i=0;i<12;i++) {
var tool=tools[12*(page-1)+i];
if (!core.isset(tool)) break;
var icon=core.material.icons.items[tool];
if (i<6) {
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 144+5, 32, 32)
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 144+5-ydelta, 32, 32)
// 个数
core.fillText('ui', core.itemCount(tool), 16*(4*i+1)+40, 144+38, '#FFFFFF', "bold 14px Verdana");
core.fillText('ui', core.itemCount(tool), 16*(4*i+1)+40, 144+38-ydelta, '#FFFFFF', "bold 14px Verdana");
if (selectId == tool)
core.strokeRect('ui', 16*(4*i+1)+1, 144+1, 40, 40, '#FFD700');
core.strokeRect('ui', 16*(4*i+1)+1, 144+1-ydelta, 40, 40, '#FFD700');
}
else {
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 144+64+5, 32, 32)
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 144+64+5-ydelta, 32, 32)
// 个数
core.fillText('ui', core.itemCount(tool), 16*(4*(i-6)+1)+40, 144+64+38, '#FFFFFF', "bold 14px Verdana");
core.fillText('ui', core.itemCount(tool), 16*(4*(i-6)+1)+40, 144+64+38-ydelta, '#FFFFFF', "bold 14px Verdana");
if (selectId == tool)
core.strokeRect('ui', 16*(4*(i-6)+1)+1, 144+64+1, 40, 40, '#FFD700');
core.strokeRect('ui', 16*(4*(i-6)+1)+1, 144+64+1-ydelta, 40, 40, '#FFD700');
}
}
// 永久道具
for (var i=0;i<constants.length;i++) {
var constant=constants[i];
for (var i=0;i<12;i++) {
var constant=constants[12*(page-1)+i];
if (!core.isset(constant)) break;
var icon=core.material.icons.items[constant];
if (i<6) {
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 304+5, 32, 32)
// core.fillText('ui', core.itemCount(constant), 16*(4*i+1)+40, 304+38, '#FFFFFF', "bold 16px Verdana")
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 304+5-ydelta, 32, 32)
if (selectId == constant)
core.strokeRect('ui', 16*(4*i+1)+1, 304+1, 40, 40, '#FFD700');
core.strokeRect('ui', 16*(4*i+1)+1, 304+1-ydelta, 40, 40, '#FFD700');
}
else {
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 304+64+5, 32, 32)
core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 304+64+5-ydelta, 32, 32)
if (selectId == constant)
core.strokeRect('ui', 16*(4*(i-6)+1)+1, 304+64+1, 40, 40, '#FFD700');
core.strokeRect('ui', 16*(4*(i-6)+1)+1, 304+64+1-ydelta, 40, 40, '#FFD700');
}
}
// 退出
this.drawPagination(page, totalPage);
core.canvas.ui.textAlign = 'center';
core.fillText('ui', '删除道具', 370, 32,'#DDDDDD', 'bold 15px Verdana');
// core.fillText('ui', '删除道具', 370, 32,'#DDDDDD', 'bold 15px Verdana');
core.fillText('ui', '返回游戏', 370, 403,'#DDDDDD', 'bold 15px Verdana');
}
@ -1941,6 +1955,7 @@ ui.prototype.drawHelp = function () {
"点状态栏中图标: 进行对应的操作\n"+
"点任意块: 寻路并移动\n"+
"点任意块并拖动: 指定寻路路线\n"+
"双击空地: 瞬间移动\n"+
"单击勇士: 转向\n"+
"双击勇士: 轻按(仅在轻按开关打开时有效)\n"+
"长按任意位置:跳过剧情对话或打开虚拟键盘\n"

View File

@ -76,7 +76,7 @@ utils.prototype.unshift = function (a,b) {
////// 设置本地存储 //////
utils.prototype.setLocalStorage = function(key, value) {
try {
localStorage.setItem(core.firstData.name + "_" + key, JSON.stringify(value));
localStorage.setItem(core.firstData.name + "_" + key, LZString.compress(JSON.stringify(value)));
return true;
}
catch (e) {
@ -87,9 +87,24 @@ utils.prototype.setLocalStorage = function(key, value) {
////// 获得本地存储 //////
utils.prototype.getLocalStorage = function(key, defaultValue) {
var value = localStorage.getItem(core.firstData.name+"_"+key);
if (core.isset(value)) return JSON.parse(value);
return defaultValue;
try {
var value = localStorage.getItem(core.firstData.name+"_"+key);
if (core.isset(value)) {
var output = LZString.decompress(value);
if (core.isset(output) && output.length>0) {
try {
return JSON.parse(output);
}
catch (ee) {}
}
return JSON.parse(value);
}
return defaultValue;
}
catch (e) {
console.log(e);
return defaultValue;
}
}
////// 移除本地存储 //////

View File

@ -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 ------------------------//

View File

@ -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,

View File

@ -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版
地图编辑器可以右键复制或移动图块