From fa61c25cf8bba4fd5ab65640d9a989f2d53311d2 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 14:24:08 +0800 Subject: [PATCH 01/10] highlight savefloor button --- _server/editor.js | 1 + _server/editor_mappanel.js | 17 +++++++++++++++++ _server/editor_ui.js | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/_server/editor.js b/_server/editor.js index 31d1f954..4717dbdb 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -282,6 +282,7 @@ editor.prototype.changeFloor = function (floorId, callback) { editor.viewportLoc = editor.viewportLoc || {}; var loc = editor.viewportLoc[floorId] || [], x = loc[0] || 0, y = loc[1] || 0; editor.setViewport(x, y); + editor.uifunctions.unhighlightSaveFloorButton(); editor.config.set('editorLastFloorId', floorId, function() { if (callback) callback(); diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index f6c7687c..3c8c86e1 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -274,6 +274,7 @@ editor_mappanel_wrapper = function (editor) { editor.uivalues.holdingPath = 0; editor.uivalues.stepPostfix = []; editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); + editor.uifunctions.highlightSaveFloorButton(); } return false; } @@ -465,6 +466,7 @@ editor_mappanel_wrapper = function (editor) { editor.drawEventBlock(); editor_mode.showMode('loc'); printf('添加楼梯事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); return true; } @@ -525,6 +527,7 @@ editor_mappanel_wrapper = function (editor) { editor.drawPosSelection(); editor_mode.showMode('loc'); printf('绑定机关门事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); bindSpecialDoor.loc = null; bindSpecialDoor.enemys = []; @@ -577,6 +580,7 @@ editor_mappanel_wrapper = function (editor) { throw (err) } ; printf('复制事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); } @@ -591,6 +595,7 @@ editor_mappanel_wrapper = function (editor) { editor.savePreMap(); editor_mode.onmode(''); editor.exchangePos(editor.pos, editor.uivalues.lastRightButtonPos[1]); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -600,6 +605,7 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.clearEvent_click = function (e) { e.stopPropagation(); editor.clearPos(false); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -609,6 +615,7 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.clearLoc_click = function (e) { e.stopPropagation(); editor.clearPos(true); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -765,6 +772,15 @@ editor_mappanel_wrapper = function (editor) { }); } + editor.uifunctions.highlightSaveFloorButton=function(){ + var saveFloor = document.getElementById('saveFloor'); + saveFloor.style.background='#FFCCAA'; + } + + editor.uifunctions.unhighlightSaveFloorButton=function(){ + var saveFloor = document.getElementById('saveFloor'); + saveFloor.style.background=''; + } editor.uifunctions.saveFloor_func = function () { var saveFloor = document.getElementById('saveFloor'); @@ -776,6 +792,7 @@ editor_mappanel_wrapper = function (editor) { throw (err) } ; printf('保存成功'); + editor.uifunctions.unhighlightSaveFloorButton() }); } saveFloor.onclick = editor_mode.saveFloor; diff --git a/_server/editor_ui.js b/_server/editor_ui.js index cc9588ed..c316d200 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -318,6 +318,7 @@ editor_ui_wrapper = function (editor) { editor.bgmap = JSON.parse(JSON.stringify(data.bgmap)); editor.updateMap(); editor.uivalues.postMapData.push(data); + editor.uifunctions.highlightSaveFloorButton(); printf("已撤销此操作,你可能需要重新保存地图。"); } return; @@ -332,6 +333,7 @@ editor_ui_wrapper = function (editor) { editor.bgmap = JSON.parse(JSON.stringify(data.bgmap)); editor.updateMap(); editor.uivalues.preMapData.push(data); + editor.uifunctions.highlightSaveFloorButton(); printf("已重做此操作,你可能需要重新保存地图。"); } return; @@ -349,6 +351,7 @@ editor_ui_wrapper = function (editor) { editor.uivalues.copyedInfo = editor.copyFromPos(); editor.clearPos(true, null, function () { printf('该点事件已剪切'); + editor.uifunctions.unhighlightSaveFloorButton(); }) return; } @@ -366,6 +369,7 @@ editor_ui_wrapper = function (editor) { throw (err) } ; printf('粘贴事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); return; @@ -373,6 +377,7 @@ editor_ui_wrapper = function (editor) { // DELETE if (e.keyCode == 46 && !selectBox.isSelected()) { editor.clearPos(true); + editor.uifunctions.unhighlightSaveFloorButton(); return; } // ESC From eca70afcc4abcc7451db55a2a9a95dfc8dd90cc9 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 16:27:32 +0800 Subject: [PATCH 02/10] fix missing in exchangePos --- _server/editor_mappanel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 3c8c86e1..93d57fed 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -202,6 +202,7 @@ editor_mappanel_wrapper = function (editor) { editor.exchangeBgFg(editor.uivalues.startPos, editor.uivalues.endPos, editor.layerMod); editor.uivalues.startPos = editor.uivalues.endPos = null; editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); + editor.uifunctions.unhighlightSaveFloorButton(); return false; } editor.uivalues.holdingPath = 0; From 0bd37974a24696c8852c19dcefeeedcb3a046cad Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 17:12:01 +0800 Subject: [PATCH 03/10] fix regexp format for moblie --- _server/MotaActionParse.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 5654bd52..1ad9682a 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -1022,9 +1022,9 @@ ActionParser.prototype.matchEvalCompare=function(args, isShadow){ // 按优先级依次寻找以下符号 var oplist=['<','<=','>','>=','==','!=','&&','||'].reverse() for (var index = 0,op; op=oplist[index]; index++) { - var match=new RegExp('(?<= )'+(op=='||'?'\\|\\|':op)+'(?= )').exec(str) + var match=new RegExp(' '+(op=='||'?'\\|\\|':op)+' ').exec(str) if (!match) continue; - args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op.replace(/&/g,'&').replace(//g,'>'),this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + args=[this.expandEvalBlock([raw.slice(0,match.index+1)],isShadow),op.replace(/&/g,'&').replace(//g,'>'),this.expandEvalBlock([raw.slice(match.index+1+op.length)],isShadow)] return {ret:true,xml:xml,args:args} } return {ret:false} From bdca4fdd553f9414a874861c8afdf114d237f908 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 20:24:08 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E6=A1=86=E9=80=89tileset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 2 + _server/editor_listen.js | 2 + _server/editor_materialpanel.js | 72 ++++++++++++++++++++++++++++----- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index 4717dbdb..de9c25ce 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -105,6 +105,7 @@ function editor() { // tile tileSize: [1,1], + startLoc: {"x":0,"y":0}, lockMode: false, // 最近使用的图块 @@ -683,6 +684,7 @@ editor.prototype.setSelectBoxFromInfo=function(thisevent, scrollTo){ editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; editor.dom.dataSelection.style.height = ysize - 6 + 'px'; + editor.dom.dataSelection.style.width = 32 - 6 + 'px'; setTimeout(function(){ selectBox.isSelected(true); editor.updateLastUsedMap(); diff --git a/_server/editor_listen.js b/_server/editor_listen.js index f5994f4e..115d37d5 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -24,6 +24,8 @@ editor_listen_wrapper = function (editor) { editor.dom.iconExpandBtn.onclick = editor.uifunctions.fold_material_click editor.dom.iconLib.onmousedown = editor.uifunctions.material_ondown + editor.dom.iconLib.onmousemove = editor.uifunctions.material_onmove + editor.dom.iconLib.onmouseup = editor.uifunctions.material_onup editor.dom.iconLib.oncontextmenu = function (e) { e.preventDefault() } editor.dom.extraEvent.onmousedown = editor.uifunctions.extraEvent_click diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js index 51752b9c..7aa54339 100644 --- a/_server/editor_materialpanel.js +++ b/_server/editor_materialpanel.js @@ -62,13 +62,41 @@ editor_materialpanel_wrapper = function (editor) { } } + var lastmoveE=null; /** * editor.dom.iconLib.onmousedown - * 素材区的单击事件 + * 素材区的单击/拖拽事件 */ editor.uifunctions.material_ondown = function (e) { e.stopPropagation(); e.preventDefault(); + lastmoveE=e; + if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + editor.uivalues.startLoc={ + 'x': scrollLeft + e.clientX + editor.dom.iconLib.scrollLeft - right.offsetLeft - editor.dom.iconLib.offsetLeft, + 'y': scrollTop + e.clientY + editor.dom.iconLib.scrollTop - right.offsetTop - editor.dom.iconLib.offsetTop, + 'size': 32 + }; + } + + /** + * editor.dom.iconLib.onmousemove + * 素材区的单击/拖拽事件 + */ + editor.uifunctions.material_onmove = function (e) { + e.stopPropagation(); + e.preventDefault(); + lastmoveE=e; + } + + /** + * editor.dom.iconLib.onmouseup + * 素材区的单击/拖拽事件 + */ + editor.uifunctions.material_onup = function (ee) { + var e=lastmoveE; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; @@ -79,6 +107,7 @@ editor_materialpanel_wrapper = function (editor) { }; editor.loc = loc; editor.uivalues.tileSize = [1,1]; + var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); var pos = editor.uifunctions.locToPos(loc); for (var spriter in editor.widthsX) { if (pos.x >= editor.widthsX[spriter][1] && pos.x < editor.widthsX[spriter][2]) { @@ -115,6 +144,7 @@ editor_materialpanel_wrapper = function (editor) { editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; editor.dom.dataSelection.style.height = ysize - 6 + 'px'; + editor.dom.dataSelection.style.width = 32 - 6 + 'px'; if (pos.x == 0 && pos.y == 0) { // editor.info={idnum:0, id:'empty','images':'清除块', 'y':0}; @@ -133,21 +163,21 @@ editor_materialpanel_wrapper = function (editor) { editor.info = { 'images': pos.images, 'y': y } } - for (var ii = 0; ii < editor.ids.length; ii++) { - if ((core.tilesets.indexOf(pos.images) != -1 && editor.info.images == editor.ids[ii].images - && editor.info.y == editor.ids[ii].y && editor.info.x == editor.ids[ii].x) - || (Object.prototype.hasOwnProperty.call(autotiles, pos.images) && editor.info.images == editor.ids[ii].id - && editor.info.y == editor.ids[ii].y) - || (core.tilesets.indexOf(pos.images) == -1 && editor.info.images == editor.ids[ii].images - && editor.info.y == editor.ids[ii].y) + for (var idindex = 0; idindex < editor.ids.length; idindex++) { + if ((core.tilesets.indexOf(pos.images) != -1 && editor.info.images == editor.ids[idindex].images + && editor.info.y == editor.ids[idindex].y && editor.info.x == editor.ids[idindex].x) + || (Object.prototype.hasOwnProperty.call(autotiles, pos.images) && editor.info.images == editor.ids[idindex].id + && editor.info.y == editor.ids[idindex].y) + || (core.tilesets.indexOf(pos.images) == -1 && editor.info.images == editor.ids[idindex].images + && editor.info.y == editor.ids[idindex].y) ) { - editor.info = editor.ids[ii]; + editor.info = editor.ids[idindex]; break; } } - if (editor.info.isTile && e.button == 2) { + if (editor.info.isTile && e.button == 2) { //这段改一改之类的应该能给手机用,就不删了 var v = prompt("请输入该额外素材区域绑定宽高,以逗号分隔", "1,1"); if (v != null && /^\d+,\d+$/.test(v)) { v = v.split(","); @@ -157,9 +187,31 @@ editor_materialpanel_wrapper = function (editor) { alert("不合法的输入范围,已经越界"); } else { editor.uivalues.tileSize = [x, y]; + editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; + editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; + editor.dom.dataSelection.style.height = ysize*y - 6 + 'px'; + editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; } } } + if (editor.info.isTile && e.button != 2) { //左键拖拽框选 + + var x = pos.x-pos0.x+1, y = pos.y-pos0.y+1; + var widthX = editor.widthsX[editor.info.images]; + // 懒得仔细处理了, 只允许左上往右下拉 + if (x <= 0 || y <= 0 || pos0.x < widthX[1]){ + + } else { + editor.info = editor.ids[idindex-(x-1)-(y-1)*(widthX[2]-widthX[1])]; + editor.uifunctions.locToPos(editor.uivalues.startLoc); //重置editor.pos + editor.uivalues.tileSize = [x, y]; + editor.dom.dataSelection.style.left = pos0.x * 32 + 'px'; + editor.dom.dataSelection.style.top = pos0.y * ysize + 'px'; + editor.dom.dataSelection.style.height = ysize*y - 6 + 'px'; + editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; + } + + } } tip.infos(JSON.parse(JSON.stringify(editor.info))); From ebbb4b8b46be2b152ec033ec0aba44938a336790 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 20:30:07 +0800 Subject: [PATCH 05/10] fix unhighlight button --- _server/editor_listen.js | 8 ++++++++ _server/editor_ui.js | 1 + 2 files changed, 9 insertions(+) diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 115d37d5..7a3b83b1 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -134,6 +134,14 @@ editor_listen_wrapper = function (editor) { editor.dom.moveLoc.onmousedown = null editor.dom.clearLoc.ontouchstart = editor.dom.clearLoc.onmousedown editor.dom.clearLoc.onmousedown = null + + // 不使用以下6语句, 会使得素材区手机无法拖动, 手机的框选素材只能放弃, 要通过弹框实现框选 + // editor.dom.iconLib.ontouchstart = editor.dom.iconLib.onmousedown + // editor.dom.iconLib.onmousedown = null + // editor.dom.iconLib.ontouchmove = editor.dom.iconLib.onmousemove + // editor.dom.iconLib.onmousemove = null + // editor.dom.iconLib.ontouchend = editor.dom.iconLib.onmouseup + // editor.dom.iconLib.onmouseup = null } editor.constructor.prototype.mode_listen = function (callback) { diff --git a/_server/editor_ui.js b/_server/editor_ui.js index c316d200..1bcd019d 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -236,6 +236,7 @@ editor_ui_wrapper = function (editor) { throw (err) } ; printf('地图保存成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); } selectBox.isSelected(false); From 9143d687d4639ec3eecac0342d87abe9fabae61a Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 21:11:50 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=94=BE=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/actions.js | 83 +++++++++++++++++++++++++++++++--------------- libs/control.js | 56 ++++++++++++++++++------------- libs/core.js | 5 +++ libs/ui.js | 7 ++-- styles.css | 2 +- v2.x-final更新.txt | 6 ++-- 6 files changed, 103 insertions(+), 56 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 0a9ed824..a05d286a 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1919,7 +1919,7 @@ actions.prototype._clickSwitchs = function (x, y) { var topIndex = this.HSIZE - parseInt((choices.length - 1) / 2) + (core.status.event.ui.offset || 0); var selection = y - topIndex; if (x < this.CHOICES_LEFT || x > this.CHOICES_RIGHT) { - if (selection != 2 && selection != 3 && selection != 4) return; + if (selection != 1 && selection != 2 && selection != 3 && selection != 4) return; } var width = choices[selection].width; var leftPos = (core.__PIXELS__ - width) / 2, rightPos = (core.__PIXELS__ + width) / 2; @@ -1928,32 +1928,32 @@ actions.prototype._clickSwitchs = function (x, y) { core.status.event.selection = selection; switch (selection) { case 0: - return this._clickSwitchs_bgm(); + return this._clickSwitchs_bgmSound(); case 1: - return this._clickSwitchs_sound(); - case 2: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_userVolume(-1); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_userVolume(1); return; - case 3: + case 2: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_moveSpeed(-10); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_moveSpeed(10); return; - case 4: + case 3: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_floorChangeTime(-100); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_floorChangeTime(100); return; + case 4: + if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_setSize(-1); + if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_setSize(1); + return; case 5: return this._clickSwitchs_displayEnemyDamage(); case 6: - return this._clickSwitchs_displayCritical(); + return this._clickSwitchs_displayCriticalExtra(); case 7: - return this._clickSwitchs_displayExtraDamage(); - case 8: return this._clickSwitchs_potionNoRouting(); - case 9: + case 8: return this._clickSwitchs_clickMove(); - case 10: + case 9: core.status.event.selection = 0; core.ui.drawSettings(); break; @@ -1961,13 +1961,23 @@ actions.prototype._clickSwitchs = function (x, y) { } } -actions.prototype._clickSwitchs_bgm = function () { - core.triggerBgm(); - core.ui.drawSwitchs(); -} - -actions.prototype._clickSwitchs_sound = function () { - core.musicStatus.soundStatus = !core.musicStatus.soundStatus; +actions.prototype._clickSwitchs_bgmSound = function () { + var bgm = core.musicStatus.bgmStatus; + var sound = core.musicStatus.soundStatus; + if (bgm && sound) { + sound = false; + } else if (bgm && !sound) { + bgm = false; + sound = true; + } else if (!bgm && sound) { + sound = false; + } else { + bgm = true; + sound = true; + } + if (bgm != core.musicStatus.bgmStatus) + core.triggerBgm(); + core.musicStatus.soundStatus = sound; core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); core.ui.drawSwitchs(); } @@ -1995,6 +2005,17 @@ actions.prototype._clickSwitchs_floorChangeTime = function (delta) { core.ui.drawSwitchs(); } +actions.prototype._clickSwitchs_setSize = function (delta) { + var index = core.domStyle.availableScale.indexOf(core.domStyle.scale); + if (index < 0) return; + index += delta; + if (index < 0 || index >= core.domStyle.availableScale.length); + core.domStyle.scale = core.domStyle.availableScale[index]; + core.setLocalStorage('scale', core.domStyle.scale); + core.resize(); + core.ui.drawSwitchs(); +} + actions.prototype._clickSwitchs_displayEnemyDamage = function () { core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; core.updateDamage(); @@ -2002,16 +2023,26 @@ actions.prototype._clickSwitchs_displayEnemyDamage = function () { core.ui.drawSwitchs(); } -actions.prototype._clickSwitchs_displayCritical = function () { - core.flags.displayCritical = !core.flags.displayCritical; +actions.prototype._clickSwitchs_displayCriticalExtra = function () { + var critical = core.flags.displayCritical; + var extra = core.flags.displayExtraDamage; + if (critical && extra) { + extra = false; + } else if (critical && !extra) { + critical = false; + extra = true; + } else if (!critical && extra) { + critical = false; + extra = false; + } else { + critical = true; + extra = true; + } + + core.flags.displayCritical = critical; + core.flags.displayExtraDamage = extra; core.updateDamage(); core.setLocalStorage('critical', core.flags.displayCritical); - core.ui.drawSwitchs(); -} - -actions.prototype._clickSwitchs_displayExtraDamage = function () { - core.flags.displayExtraDamage = !core.flags.displayExtraDamage; - core.updateDamage(); core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); core.ui.drawSwitchs(); } diff --git a/libs/control.js b/libs/control.js index 381584ee..caa6189f 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2679,17 +2679,28 @@ control.prototype._doResize = function (obj) { control.prototype.resize = function() { if (main.mode=='editor')return; var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight; - var CANVAS_WIDTH = core.__PIXELS__ + 6, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31) + 3; + var CANVAS_WIDTH = core.__PIXELS__, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31); + var BORDER = 3; - if (clientWidth >= CANVAS_WIDTH + BAR_WIDTH || (clientWidth > clientHeight && clientHeight < CANVAS_WIDTH)) { + if (clientWidth - 3 * BORDER >= CANVAS_WIDTH + BAR_WIDTH || (clientWidth > clientHeight && clientHeight - 2 * BORDER < CANVAS_WIDTH)) { // 横屏 core.domStyle.isVertical = false; - core.domStyle.scale = Math.min(1, clientHeight / CANVAS_WIDTH); + + core.domStyle.availableScale = []; + [1, 1.25, 1.5, 2].forEach(function (v) { + if (clientWidth - 3 * BORDER >= v*(CANVAS_WIDTH + BAR_WIDTH) && clientHeight - 2 * BORDER >= v * CANVAS_WIDTH) { + core.domStyle.availableScale.push(v); // 64x64 + } + }); + if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) { + core.domStyle.scale = Math.min(1, (clientHeight - 2 * BORDER) / CANVAS_WIDTH); + } } else { // 竖屏 core.domStyle.isVertical = true; - core.domStyle.scale = Math.min(1, clientWidth / CANVAS_WIDTH); + core.domStyle.scale = Math.min(1, (clientWidth - 2 * BORDER) / CANVAS_WIDTH); + core.domStyle.availableScale = []; } var statusDisplayArr = this._shouldDisplayStatus(), count = statusDisplayArr.length; @@ -2705,15 +2716,16 @@ control.prototype.resize = function() { clientWidth: clientWidth, clientHeight: clientHeight, CANVAS_WIDTH: CANVAS_WIDTH, + BORDER: BORDER, BAR_WIDTH: BAR_WIDTH, - outerSize: CANVAS_WIDTH * core.domStyle.scale, + outerSize: CANVAS_WIDTH * core.domStyle.scale + 2 * BORDER, globalAttribute: globalAttribute, border: '3px ' + globalAttribute.borderColor + ' solid', statusDisplayArr: statusDisplayArr, count: count, col: col, - statusBarHeightInVertical: core.domStyle.isVertical ? (32 * col + 6) * core.domStyle.scale + 6 : 0, - toolbarHeightInVertical: core.domStyle.isVertical ? 44 * core.domStyle.scale + 6 : 0, + statusBarHeightInVertical: core.domStyle.isVertical ? (32 * col + 6) * core.domStyle.scale + 2 * BORDER : 0, + toolbarHeightInVertical: core.domStyle.isVertical ? 44 * core.domStyle.scale + 2 * BORDER : 0, is15x15: core.__SIZE__ == 15 }; @@ -2730,7 +2742,7 @@ control.prototype._resize_gameGroup = function (obj) { totalHeight = obj.outerSize + obj.statusBarHeightInVertical + obj.toolbarHeightInVertical } else { - totalWidth = (obj.CANVAS_WIDTH + obj.BAR_WIDTH) * core.domStyle.scale; + totalWidth = obj.outerSize + obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER; totalHeight = obj.outerSize; } gameGroup.style.width = totalWidth + "px"; @@ -2739,8 +2751,8 @@ control.prototype._resize_gameGroup = function (obj) { gameGroup.style.top = (obj.clientHeight - totalHeight) / 2 + "px"; // floorMsgGroup var floorMsgGroup = core.dom.floorMsgGroup; - floorMsgGroup.style.width = obj.outerSize - 6 + "px"; - floorMsgGroup.style.height = totalHeight - 6 + "px"; + floorMsgGroup.style.width = obj.outerSize - 2 * obj.BORDER + "px"; + floorMsgGroup.style.height = totalHeight - 2 * obj.BORDER + "px"; floorMsgGroup.style.background = obj.globalAttribute.floorChangingBackground; floorMsgGroup.style.color = obj.globalAttribute.floorChangingTextColor; // musicBtn @@ -2754,7 +2766,7 @@ control.prototype._resize_gameGroup = function (obj) { } control.prototype._resize_canvas = function (obj) { - var innerSize = (obj.outerSize - 6) + "px"; + var innerSize = (obj.CANVAS_WIDTH * core.domStyle.scale) + "px"; for (var i = 0; i < core.dom.gameCanvas.length; ++i) core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[i].style.height = innerSize; core.dom.gif.style.width = core.dom.gif.style.height = innerSize; @@ -2779,8 +2791,6 @@ control.prototype._resize_canvas = function (obj) { // resize next main.dom.next.style.width = main.dom.next.style.height = 5 * core.domStyle.scale + "px"; main.dom.next.style.borderBottomWidth = main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px"; - - } control.prototype._resize_statusBar = function (obj) { @@ -2793,7 +2803,7 @@ control.prototype._resize_statusBar = function (obj) { statusBar.style.fontSize = 16 * core.domStyle.scale + "px"; } else { - statusBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + statusBar.style.width = (obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER) + "px"; statusBar.style.height = obj.outerSize + "px"; statusBar.style.background = obj.globalAttribute.statusLeftBackground; // --- 计算文字大小 @@ -2805,22 +2815,22 @@ control.prototype._resize_statusBar = function (obj) { statusBar.style.borderBottom = core.domStyle.isVertical ? '' : obj.border; // 自绘状态栏 if (core.domStyle.isVertical) { - core.dom.statusCanvas.style.width = obj.outerSize - 6 + "px"; - core.dom.statusCanvas.width = core.__PIXELS__; + core.dom.statusCanvas.style.width = obj.CANVAS_WIDTH + "px"; + core.dom.statusCanvas.width = obj.CANVAS_WIDTH; core.dom.statusCanvas.style.height = obj.statusBarHeightInVertical - 3 + "px"; core.dom.statusCanvas.height = obj.col * 32 + 9; } else { - core.dom.statusCanvas.style.width = obj.BAR_WIDTH * core.domStyle.scale - 3 + "px"; - core.dom.statusCanvas.width = obj.BAR_WIDTH - 3; - core.dom.statusCanvas.style.height = obj.outerSize - 6 + "px"; - core.dom.statusCanvas.height = core.__PIXELS__; + core.dom.statusCanvas.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + core.dom.statusCanvas.width = obj.BAR_WIDTH; + core.dom.statusCanvas.style.height = obj.outerSize - 2 * obj.BORDER + "px"; + core.dom.statusCanvas.height = obj.CANVAS_WIDTH; } core.dom.statusCanvas.style.display = core.flags.statusCanvas ? "block" : "none"; } control.prototype._resize_status = function (obj) { - var statusHeight = (core.domStyle.isVertical ? 1 : (core.__HALF_SIZE__ + 3) / obj.count) * 32 * core.domStyle.scale * 0.8; + var statusHeight = (core.domStyle.isVertical ? 1 : (core.__HALF_SIZE__ + obj.BORDER) / obj.count) * 32 * core.domStyle.scale * 0.8; // status for (var i = 0; i < core.dom.status.length; ++i) { var id = core.dom.status[i].id, style = core.dom.status[i].style; @@ -2828,7 +2838,7 @@ control.prototype._resize_status = function (obj) { style.display = core.flags.statusCanvas || obj.statusDisplayArr.indexOf(id) < 0 ? 'none': 'block'; style.margin = 3 * core.domStyle.scale + "px"; style.height = statusHeight + "px"; - style.maxWidth = obj.BAR_WIDTH * core.domStyle.scale * (core.domStyle.isVertical ? 0.95 : 1) + "px"; + style.maxWidth = obj.BAR_WIDTH * core.domStyle.scale * (core.domStyle.isVertical ? 0.95 : 1) + obj.BORDER + "px"; if (obj.is15x15 && !core.domStyle.isVertical) style.marginLeft = 11 * core.domStyle.scale + "px"; } @@ -2860,7 +2870,7 @@ control.prototype._resize_toolBar = function (obj) { toolBar.style.background = obj.globalAttribute.toolsBackground; } else { - toolBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + toolBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER + "px"; toolBar.style.top = 0.718 * obj.outerSize + "px"; toolBar.style.height = 0.281 * obj.outerSize + "px"; toolBar.style.background = 'transparent'; diff --git a/libs/core.js b/libs/core.js index dc5ee70d..0d9281f4 100644 --- a/libs/core.js +++ b/libs/core.js @@ -84,6 +84,7 @@ function core() { // 样式 this.domStyle = { scale: 1.0, + availableScale: [], isVertical: false, showStatusBar: true, toolbarBtn: false, @@ -291,6 +292,10 @@ core.prototype._init_sys_flags = function () { // 行走速度 core.values.moveSpeed = core.getLocalStorage('moveSpeed', 100); core.values.floorChangeTime = core.getLocalStorage('floorChangeTime', 500); + core.domStyle.scale = core.getLocalStorage('scale', 1); + if (core.domStyle.scale != 1) { + core.resize(); + } } core.prototype._init_platform = function () { diff --git a/libs/ui.js b/libs/ui.js index 690f9984..79836eee 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1655,16 +1655,15 @@ ui.prototype.drawWaiting = function(text) { ui.prototype.drawSwitchs = function() { core.status.event.id = 'switchs'; var choices = [ - "背景音乐: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]"), - "背景音效: "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), + "音乐/音效: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]") + " "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), //显示为 0~10 十挡 " < 音量:" + Math.round(Math.sqrt(100 * core.musicStatus.userVolume)) + " > ", //数值越大耗时越长 " < 步时:" + core.values.moveSpeed + " > ", " < 转场:" + core.values.floorChangeTime + " > ", + " < 放缩:" + Math.max(core.domStyle.scale, 1) + "x > ", "怪物显伤: "+(core.flags.displayEnemyDamage ? "[ON]" : "[OFF]"), - "临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"), - "领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), + "临界/领域: "+(core.flags.displayCritical ? "[ON]" : "[OFF]")+" "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), "血瓶绕路: "+(core.hasFlag('__potionNoRouting__') ? "[ON]":"[OFF]"), "单击瞬移: "+(!core.hasFlag("__noClickMove__") ? "[ON]":"[OFF]"), "返回主菜单" diff --git a/styles.css b/styles.css index d981dfdf..999e30f4 100644 --- a/styles.css +++ b/styles.css @@ -74,7 +74,7 @@ color: #fff; font-size: 0.6rem; position: absolute; - top: 8%; + top: 10%; left: 5%; z-index: 15; } diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index a6d4e1d7..ba14b148 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -51,7 +51,7 @@ 地图拉框选择复制剪切删除 额外素材区拖动选择一个区域 (已完成!) 素材替换 -大屏幕下放大游戏界面 +(已完成!) 大屏幕下放大游戏界面 (已完成!) 最近使用/最常使用的图块 (已完成!) loader并行加载 合并items.js @@ -60,6 +60,8 @@ (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) 装备同时加属性和比例 +removeMap和resumeMap + ------------- @@ -93,7 +95,7 @@ (已完成!) 27. 勇士后退时跟随者很鬼畜,建议优化(每步聚集算是一种简陋的办法) (不处理) 28. 勇士的移动帧只有2,建议改为允许作者指定 (不处理) 29. 建议加一对“勇士开始抖动”和“勇士停止抖动”事件指令,来让勇士像图块一样原地抖动(即全局动画)。目前这个效果还只能通过隐藏勇士(或切换透明行走图)并转变图块/图层块来实现且只能用于事件处理中QAQ -30. 建议加一个“视角锁定”事件指令,从而允许用事件改变勇士位置、朝向或行走图时不会使视角重置到以其为中心,用于一些演出效果 +(不处理) 30. 建议加一个“视角锁定”事件指令,从而允许用事件改变勇士位置、朝向或行走图时不会使视角重置到以其为中心,用于一些演出效果 (已完成!) 31. 楼层切换事件(绿点)一旦使用blockly编辑就会无视全塔属性的切换时间,只能手动在表格中删除时间(数据相关“楼层切换”事件指令也有这个问题,有群友还希望这个默认时间能像步时和音量一样由玩家设定来节约拆塔时间)。使用blockly编辑也无法做出“ignore:true”的效果(用来覆盖全塔属性的禁止穿透),建议优化 (已完成!) 32. (关于CC的来回回档优化版)据其称,清空存档后会出现bug,此外他使用了W键导致二倍斩失效了(js的switch语句遇到duplicate cases居然不报错吗...) (已完成!) 33. (疑似已被CC修复)楼传平面塔模式在记录离开位置时会错误地把读档也算作离开 From dc5ff0e309f3ce37d41f0a5be891fc3b7319af67 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 21:56:25 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E9=A2=9D=E5=A4=96=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E6=8B=96=E6=A1=86=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 2 +- _server/editor_mappanel.js | 6 +++--- _server/editor_materialpanel.js | 21 +++++++++++++++++++-- libs/core.js | 8 +++++--- v2.x-final更新.txt | 4 ++-- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index de9c25ce..c2843696 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -105,7 +105,7 @@ function editor() { // tile tileSize: [1,1], - startLoc: {"x":0,"y":0}, + startLoc: null, lockMode: false, // 最近使用的图块 diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 93d57fed..144e54ac 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -655,9 +655,9 @@ editor_mappanel_wrapper = function (editor) { * 切换画笔模式 */ editor.uifunctions.brushMod3_onchange = function () { - if (!editor.config.get('alertTileMode') && - !confirm("从V2.6.6开始,tileset贴图模式已被废弃。\n请右键额外素材,并输入所需要绘制的宽高,然后单击地图以绘制一个区域。\n\n点取消将不再显示此提示。")) { - editor.config.set('alertTileMode', true); + if (!editor.config.get('alertTileModeV2.7') && + !confirm("从V2.7开始,请直接素材区拖框进行绘制区域。\n\n点取消将不再显示此提示。")) { + editor.config.set('alertTileModeV2.7', true); } // tip.showHelp(5) tip.isSelectedBlock(false) diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js index 7aa54339..8a6704fa 100644 --- a/_server/editor_materialpanel.js +++ b/_server/editor_materialpanel.js @@ -77,6 +77,8 @@ editor_materialpanel_wrapper = function (editor) { editor.uivalues.startLoc={ 'x': scrollLeft + e.clientX + editor.dom.iconLib.scrollLeft - right.offsetLeft - editor.dom.iconLib.offsetLeft, 'y': scrollTop + e.clientY + editor.dom.iconLib.scrollTop - right.offsetTop - editor.dom.iconLib.offsetTop, + 'px': e.clientX, + 'py': e.clientY, 'size': 32 }; } @@ -89,6 +91,14 @@ editor_materialpanel_wrapper = function (editor) { e.stopPropagation(); e.preventDefault(); lastmoveE=e; + if (!editor.uivalues.startLoc) return; + var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); + + editor.dom.dataSelection.style.left = 32 * pos0.x + 'px'; + editor.dom.dataSelection.style.top = 32 * pos0.y + 'px'; + editor.dom.dataSelection.style.width = e.clientX - editor.uivalues.startLoc.px + 'px'; + editor.dom.dataSelection.style.height = e.clientY - editor.uivalues.startLoc.py + 'px'; + editor.dom.dataSelection.style.display = 'block'; } /** @@ -96,6 +106,9 @@ editor_materialpanel_wrapper = function (editor) { * 素材区的单击/拖拽事件 */ editor.uifunctions.material_onup = function (ee) { + var startLoc = editor.uivalues.startLoc; + editor.uivalues.startLoc = null; + var e=lastmoveE; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; @@ -107,7 +120,7 @@ editor_materialpanel_wrapper = function (editor) { }; editor.loc = loc; editor.uivalues.tileSize = [1,1]; - var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); + var pos0 = editor.uifunctions.locToPos(startLoc); var pos = editor.uifunctions.locToPos(loc); for (var spriter in editor.widthsX) { if (pos.x >= editor.widthsX[spriter][1] && pos.x < editor.widthsX[spriter][2]) { @@ -178,6 +191,9 @@ editor_materialpanel_wrapper = function (editor) { } if (editor.info.isTile && e.button == 2) { //这段改一改之类的应该能给手机用,就不删了 + // 废弃好了 + alert('V2.7后右键已被废弃,请直接素材区拖框选中区域。'); + /* var v = prompt("请输入该额外素材区域绑定宽高,以逗号分隔", "1,1"); if (v != null && /^\d+,\d+$/.test(v)) { v = v.split(","); @@ -193,6 +209,7 @@ editor_materialpanel_wrapper = function (editor) { editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; } } + */ } if (editor.info.isTile && e.button != 2) { //左键拖拽框选 @@ -203,7 +220,7 @@ editor_materialpanel_wrapper = function (editor) { } else { editor.info = editor.ids[idindex-(x-1)-(y-1)*(widthX[2]-widthX[1])]; - editor.uifunctions.locToPos(editor.uivalues.startLoc); //重置editor.pos + editor.uifunctions.locToPos(startLoc); //重置editor.pos editor.uivalues.tileSize = [x, y]; editor.dom.dataSelection.style.left = pos0.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos0.y * ysize + 'px'; diff --git a/libs/core.js b/libs/core.js index 0d9281f4..de495399 100644 --- a/libs/core.js +++ b/libs/core.js @@ -292,9 +292,11 @@ core.prototype._init_sys_flags = function () { // 行走速度 core.values.moveSpeed = core.getLocalStorage('moveSpeed', 100); core.values.floorChangeTime = core.getLocalStorage('floorChangeTime', 500); - core.domStyle.scale = core.getLocalStorage('scale', 1); - if (core.domStyle.scale != 1) { - core.resize(); + if (main.mode != 'editor') { + core.domStyle.scale = core.getLocalStorage('scale', 1); + if (core.domStyle.scale != 1) { + core.resize(); + } } } diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index ba14b148..5eb614cf 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -44,12 +44,12 @@ (已完成!) 重构全局商店! (已完成!) 读档时色调数据丢失 (已完成!) 圆角边框 -像素高分辨率问题 +(不处理) 像素高分辨率问题 (已完成!) 道具效果优化,删除部分道具相关的开关 (已完成!) 素材列表选择 (已完成!) 油漆桶,动态更改地图大小 地图拉框选择复制剪切删除 -额外素材区拖动选择一个区域 +(已完成!) 额外素材区拖动选择一个区域 (已完成!) 素材替换 (已完成!) 大屏幕下放大游戏界面 (已完成!) 最近使用/最常使用的图块 From 075390df0a8cf878362d4dacab341815e843bcd6 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 22:57:24 +0800 Subject: [PATCH 08/10] =?UTF-8?q?tileset=E5=B9=B3=E9=93=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _docs/personalization.md | 2 +- _server/editor_mappanel.js | 11 +++++------ _server/editor_ui.js | 2 +- editor-mobile.html | 2 +- editor.html | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/_docs/personalization.md b/_docs/personalization.md index ac7ff766..356bb46a 100644 --- a/_docs/personalization.md +++ b/_docs/personalization.md @@ -236,7 +236,7 @@ ID必须由数字字母下划线组成,数字在1000以内,且均不能和 除此之外,额外素材在游戏中的使用和正式素材都是一致的,也能在前景或背景图层绘制。 -额外素材可以使用“tileset贴图”的方式进行绘制,一次绘制一个矩形区域。 +额外素材可以使用“tileset平铺”的方式进行绘制,一次绘制一个矩形区域。 “辅助工具”中提供了“额外素材合并”,如果使用此功能,请不要对额外素材进行基于ID、索引和数字的判定和读写等操作,如确有此需求,可以创建一些玩家不可达也不可预览的隐藏样板层,然后用等量代换的办法去从样板层取用。 ## 自定义道具效果 diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 144e54ac..f2f850ac 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -240,12 +240,11 @@ editor_mappanel_wrapper = function (editor) { var x0 = editor.uivalues.stepPostfix[0].x; var y0 = editor.uivalues.stepPostfix[0].y; var idnum = editor.info.idnum; + var pmod=function(a,b){return (a%b+b)%b;} for (var ii = 0; ii < editor.uivalues.stepPostfix.length; ii++) { - if (editor.uivalues.stepPostfix[ii].y != y0) { - y0++; - idnum += imgWidth; - } - editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.ids[editor.indexs[idnum + editor.uivalues.stepPostfix[ii].x - x0]]; + var dx=pmod(editor.uivalues.stepPostfix[ii].x-x0,editor.uivalues.tileSize[0]); + var dy=pmod(editor.uivalues.stepPostfix[ii].y-y0,editor.uivalues.tileSize[1]); + editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.ids[editor.indexs[idnum + dx+dy*imgWidth]]; } } else { // 检测是否是填充模式 @@ -661,7 +660,7 @@ editor_mappanel_wrapper = function (editor) { } // tip.showHelp(5) tip.isSelectedBlock(false) - tip.msgs[11] = String('tileset贴图模式下可以按选中tileset素材,并在地图上拖动来一次绘制一个区域'); + tip.msgs[11] = String('tileset平铺模式下可以按选中tileset素材,并在地图上拖动来一次绘制一个区域'); tip.whichShow(12); editor.brushMod = editor.dom.brushMod3.value; } diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 1bcd019d..3d528f20 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -30,7 +30,7 @@ editor_ui_wrapper = function (editor) { '双击事件编辑器的图块可以进行长文本编辑/脚本编辑/地图选点/UI绘制预览等操作', 'ESC或点击空白处可以自动保存当前修改', 'H键可以打开操作帮助哦', - 'tileset贴图模式可以在地图上拖动来一次绘制一个区域;右键额外素材也可以绑定宽高', + 'tileset平铺模式可以在地图上拖动来平铺框选的图形', '可以拖动地图上的图块和事件,或按Ctrl+C, Ctrl+X和Ctrl+V进行复制,剪切和粘贴,Delete删除', 'Alt+数字键保存图块,数字键读取保存的图块', ]; diff --git a/editor-mobile.html b/editor-mobile.html index df00077d..8bc87798 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -386,7 +386,7 @@ 线 矩形 - tileset贴图 + tileset平铺 填充 From fb49beb1fdeb6083e4deeedf8d386be49f6b4c67 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 23:03:53 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A0=8D=E5=B1=82?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/table/plugins.comment.js | 6 +++++ libs/events.js | 2 +- libs/maps.js | 23 ++++------------- project/materials/icons.png | Bin 8414 -> 8832 bytes project/materials/icons_old.png | Bin 0 -> 26359 bytes project/plugins.js | 43 +++++++++++++++++++++++++++++++ 6 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 project/materials/icons_old.png diff --git a/_server/table/plugins.comment.js b/_server/table/plugins.comment.js index f012cdc1..059b7e5d 100644 --- a/_server/table/plugins.comment.js +++ b/_server/table/plugins.comment.js @@ -26,6 +26,12 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_range": "typeof(thiseval)=='string' || thiseval==null", "_data": "灯光效果" }, + "removeMap": { + "_leaf": true, + "_type": "textarea", + "_range": "typeof(thiseval)=='string' || thiseval==null", + "_data": "砍层插件" + }, "itemShop": { "_leaf": true, "_type": "textarea", diff --git a/libs/events.js b/libs/events.js index 3e2e46f6..6fa74489 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2067,7 +2067,7 @@ events.prototype._action_wait = function (data, x, y, prefix) { } else if (data.timeout) { core.status.event.interval = setTimeout(function() { core.status.route.push("input:none"); - core.removeFlag("type"); + core.setFlag("type", -1); core.doAction(); }, data.timeout); } diff --git a/libs/maps.js b/libs/maps.js index a2477497..9254a1cc 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -42,6 +42,10 @@ maps.prototype.loadFloor = function (floorId, map) { if (notCopy.indexOf(name) == -1 && map[name] != null) content[name] = core.clone(map[name]); } + if (map.deleted) { + content['blocks'] = []; + return content; + } map = this.decompressMap(map.map, floorId); // 事件处理 content['blocks'] = this._mapIntoBlocks(map, floor, floorId); @@ -267,7 +271,7 @@ maps.prototype.saveMap = function (floorId) { } // 砍层状态:直接返回 if (main.mode == 'play' && (flags.__removed__ || []).indexOf(floorId) >= 0) { - return { canFlyTo: false, cannotViewMap: true }; + return { deleted: true, canFlyTo: false, cannotViewMap: true }; } var map = maps[floorId], floor = core.floors[floorId]; @@ -305,23 +309,6 @@ maps.prototype.loadMap = function (data, floorId) { return this.loadFloor(floorId, data[floorId]); } -////// 删除地图,不计入存档 ////// -maps.prototype.removeMaps = function (fromId, toId) { - if (!core.isPlaying()) return; - toId = toId || fromId; - var fromIndex = core.floorIds.indexOf(fromId), - toIndex = core.floorIds.indexOf(toId); - if (toIndex < 0) toIndex = core.floorIds.length - 1; - flags.__removed__ = flags.__removed__ || []; - for (var i = fromIndex; i <= toIndex; ++i) { - var floorId = core.floorIds[i]; - delete flags.__visited__[floorId]; - flags.__removed__.push(floorId); - core.status.maps[floorId].canFlyTo = false; - core.status.maps[floorId].cannotViewMap = true; - } -} - ////// 更改地图画布的尺寸 maps.prototype.resizeMap = function (floorId) { floorId = floorId || core.status.floorId; diff --git a/project/materials/icons.png b/project/materials/icons.png index 2a602bf3af825442d1c84375209eb8ff114c90e8..a24d21eb6d742cb2ad45b9255c545ecfe189f22d 100644 GIT binary patch literal 8832 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 Date: Tue, 19 May 2020 23:27:35 +0800 Subject: [PATCH 10/10] enemy.experience->exp --- project/enemys.js | 162 ++++++++++++++++++++++----------------------- v2.x-final更新.txt | 4 +- 2 files changed, 84 insertions(+), 82 deletions(-) diff --git a/project/enemys.js b/project/enemys.js index c3de9b33..cf035ecf 100644 --- a/project/enemys.js +++ b/project/enemys.js @@ -1,84 +1,84 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = { - "greenSlime": {"name":"绿头怪","hp":100,"atk":120,"def":0,"money":1,"experience":1,"point":0,"special":[1,5,7,8]}, - "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":[16,18],"value":10}, - "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"experience":0,"point":0,"special":[1,9]}, - "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"experience":0,"point":0,"special":1}, - "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redBat": {"name":"红蝙蝠","hp":100,"atk":120,"def":0,"money":5,"experience":0,"point":0,"special":4}, - "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "rock": {"name":"石头人","hp":100,"atk":120,"def":0,"money":4,"experience":0,"point":0,"special":3}, - "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"experience":0,"point":1,"special":2}, - "redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"experience":0,"point":0,"special":15,"value":100,"range":2}, - "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"experience":0,"point":0,"special":15,"value":200,"zoneSquare":true}, - "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"experience":0,"point":0,"special":[5,23]}, - "soldier": {"name":"冥战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redKnight": {"name":"红骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"experience":0,"point":0,"special":8}, - "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "poisonSkeleton": {"name":"紫骷髅","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"experience":0,"point":0,"special":13}, - "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"experience":0,"point":0,"special":18,"value":20}, - "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"experience":0,"point":0,"special":14}, - "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"experience":0,"point":0,"special":6,"n":8}, - "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"experience":0,"point":0,"special":12}, - "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":18,"value":20}, - "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":1,"def":0,"money":0,"experience":0,"point":0,"special":[2,3]}, - "frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ghostWarrior": {"name":"冥队长","hp":100,"atk":120,"def":0,"money":8,"experience":0,"point":0,"special":7}, - "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"experience":0,"point":0,"special":[10,21],"atkValue":2,"defValue":3}, - "yellowGT": {"name":"初级卫兵","hp":100,"atk":120,"def":0,"money":10,"experience":0,"point":0,"special":0}, - "blueGT": {"name":"中级卫兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redGT": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blackMS": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"experience":1000,"point":0,"special":0,"notBomb":true}, - "yellowMS": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenMS": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"experience":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true}, - "blueMS": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"experience":0,"point":0,"special":16}, - "redMS": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilPrincess": {"name":"痛苦魔女","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "crismonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "mutantSlimeman": {"name":"变异战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenGT": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0} + "greenSlime": {"name":"绿头怪","hp":100,"atk":120,"def":0,"money":1,"exp":1,"point":0,"special":[1,5,7,8]}, + "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[16,18],"value":10}, + "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":[1,9]}, + "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":1}, + "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redBat": {"name":"红蝙蝠","hp":100,"atk":120,"def":0,"money":5,"exp":0,"point":0,"special":4}, + "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "rock": {"name":"石头人","hp":100,"atk":120,"def":0,"money":4,"exp":0,"point":0,"special":3}, + "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":2}, + "redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"exp":0,"point":0,"special":15,"value":100,"range":2}, + "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true}, + "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":0,"point":0,"special":[5,23]}, + "soldier": {"name":"冥战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redKnight": {"name":"红骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8}, + "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "poisonSkeleton": {"name":"紫骷髅","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13}, + "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20}, + "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14}, + "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"exp":0,"point":0,"special":6,"n":8}, + "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":12}, + "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20}, + "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":1,"def":0,"money":0,"exp":0,"point":0,"special":[2,3]}, + "frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ghostWarrior": {"name":"冥队长","hp":100,"atk":120,"def":0,"money":8,"exp":0,"point":0,"special":7}, + "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[10,21],"atkValue":2,"defValue":3}, + "yellowGT": {"name":"初级卫兵","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":0}, + "blueGT": {"name":"中级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redGT": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blackMS": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true}, + "yellowMS": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenMS": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true}, + "blueMS": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":16}, + "redMS": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilPrincess": {"name":"痛苦魔女","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "crismonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "mutantSlimeman": {"name":"变异战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenGT": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0} } \ No newline at end of file diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 5eb614cf..1d0849d9 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -60,7 +60,9 @@ (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) 装备同时加属性和比例 -removeMap和resumeMap +(已完成!) removeMap和resumeMap +右键图块选择复制/粘贴事件 +showImage, drawImage等加上对称选项 -------------