From 54c6e7162aca070c94f92b5c6ac0770d97f9005e Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 2 Jul 2018 00:17:24 +0800 Subject: [PATCH 1/6] Do Effect --- libs/control.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libs/control.js b/libs/control.js index 2162ffd2..af79f445 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1509,25 +1509,26 @@ control.prototype.updateFg = function () { } ////// 执行一个表达式的effect操作 ////// -control.prototype.doEffect = function (expression) { - // 必须使用"+=" - var arr = expression.split("+="); - if (arr.length!=2) return; - var name=arr[0], value=core.calValue(arr[1]); - if (name.indexOf("status:")==0) { - var status=name.substring(7); - core.setStatus(status, core.getStatus(status)+value); - } - else if (name.indexOf("item:")==0) { - var itemId=name.substring(5); - core.setItem(itemId, core.itemCount(itemId)+value); - } +control.prototype.doEffect = function (effect) { + effect.split(";").forEach(function (expression) { + var arr = expression.split("+="); + if (arr.length!=2) return; + var name=arr[0], value=core.calValue(arr[1]); + if (name.indexOf("status:")==0) { + var status=name.substring(7); + core.setStatus(status, core.getStatus(status)+value); + } + else if (name.indexOf("item:")==0) { + var itemId=name.substring(5); + core.setItem(itemId, core.itemCount(itemId)+value); + } + }); } ////// 开启debug模式 ////// control.prototype.debug = function() { core.setFlag('debug', true); - core.insertAction(["\t[调试模式开启]此模式下按住Ctrl键可以穿墙并忽略一切事件。\n同时,录像将失效,也无法上传成绩。"]); + core.insertAction(["\t[调试模式开启]此模式下按住Ctrl键(或Ctrl+Shift键)可以穿墙并忽略一切事件。\n同时,录像将失效,也无法上传成绩。"]); /* core.setStatus('hp', 999999); core.setStatus('atk', 10000); From 74d3fd070e606901ed1977ff57be1b7e24b407c5 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 3 Jul 2018 18:56:35 +0800 Subject: [PATCH 2/6] Follow Effect --- .DS_Store | Bin 0 -> 8196 bytes _server/blockly/MotaAction.g4 | 36 ++++++ _server/editor_blockly.js | 4 +- docs/event.md | 32 +++++ libs/control.js | 214 ++++++++++++++++++++++++---------- libs/core.js | 8 +- libs/events.js | 36 ++++++ libs/maps.js | 5 +- libs/utils.js | 2 +- project/.DS_Store | Bin 0 -> 8196 bytes project/data.js | 2 +- project/images/A1.png | Bin 0 -> 2929 bytes 更新说明.txt | 1 + 13 files changed, 269 insertions(+), 71 deletions(-) create mode 100644 .DS_Store create mode 100644 project/.DS_Store create mode 100755 project/images/A1.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84ef737f38f56d65c8715e73a469c6493314db78 GIT binary patch literal 8196 zcmeHMO-~a+7=A}8-L|6mk(A?JOgJ>PAc)48lmZ44MWhWSQG_nLv^7hYv|9?)N-v%~ z=n><|o8CD43;YNE0)K(r@tK)T)7=&mFGk`_GV{*vJkQL|^S-;oTZo8d>gE{H2oY(h z+z!Xk^eKFt*Pe30yK@beflstc7F8E)XVb8I(CUU#Kq;UUPzopolmh>P0ywjI(at#c z<)~_v0!o4ZQUU&b&{4Tfd$ujD_;jEVDFAE;w?#o8d4S;Po=tnUEv=wpPMJM0kIK9h zgGoBZbqtfVwlmSGPyukDM=;tw#oLhSUkYGO7oPX$MlFM zKjv0*rK#fKlf(MxW;mP29CgeToZ(GihA7soU}cN;&Rq3pfDuEJ3Ub-B0C}D-S4^joaq1PbCg#b?0Zof&k@ewtvpF%D(8uphwi0@C zYATh`CvM+qwIW*l=GcRUjqUw|=Bw80BkTx;d7pK+*b@R%jg9RCT_XXtuYmzt>lD z+tUZJQ;i<-2)B+Gzn(^ba1nO_zwwyx&8FpUEq^W!Eq?-@$Eg+YGu{dxKJ?;leRS=| z(?$S?c<|x0trP3`?a9{V{?Eac@Zm4D^x~4`x`T_ccddLXpYG2SYV38?fa=0sXv8TD ztImJKm?}zv^Q6FleAp45|IeNM`~P{`l6qF9fKuQO6=0#+>}&=kajN$r^HW|&-9Y7q p', MotaActionBlocks['if_s'].xmlText(), MotaActionBlocks['while_s'].xmlText(), diff --git a/docs/event.md b/docs/event.md index 814a2ff7..3e83793f 100644 --- a/docs/event.md +++ b/docs/event.md @@ -617,6 +617,38 @@ time为可选的,指定的话将作为楼层切换动画的时间。 使用disableShop可以永久禁用全局商店直到再次被openShop打开为止。有关全局商店的说明可参见[全局商店](#全局商店)。 +### follow:跟随勇士 + +使用 `{"type": "follow"}` 可以让一个npc加入跟随。 + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "follow", "name": "npc.png"}, // 将 npc.png 这个行走图加入跟随 + {"type": "follow", "name": "hero.png"}, // 再将另一个行走图加入跟随 +] +``` + +name为必须的,是要加入跟随的行走图文件名。 + +name所指定的图片必须存在,在全塔属性中的images中被定义过,且是一个合法的行走图(宽为128像素,高不限。) + +### unfollow:取消跟随 + +使用 `{"type": "unfollow"}` 来取消一个跟随。 + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "unfollow", "name": "npc.png"}, // 将 npc.png 这个行走图取消跟随 + {"type": "follow"}, // 取消所有跟随 +] +``` + +name为可选的,是要取消跟随的行走图文件名。 + +如果name指定了,则会检查所有当前正在跟随的行走图,并删除第一个文件名是name的跟随效果。 + +如果name省略,则会取消所有的跟随效果。 + ### animate:显示动画 我们可以使用 `{"type": "animate"}` 来显示一段动画。 diff --git a/libs/control.js b/libs/control.js index af79f445..51622c78 100644 --- a/libs/control.js +++ b/libs/control.js @@ -92,10 +92,10 @@ control.prototype.setRequestAnimationFrame = function () { if (timestamp-core.animateFrame.moveTime>16 && core.isset(core.status.heroMoving) && core.status.heroMoving>0) { var x=core.getHeroLoc('x'), y=core.getHeroLoc('y'), direction = core.getHeroLoc('direction'); if (core.status.heroMoving<=4) { - core.drawHero(direction, x, y, 'leftFoot', 4*core.status.heroMoving*scan[direction].x, 4*core.status.heroMoving*scan[direction].y); + core.drawHero(direction, x, y, 'leftFoot', 4*core.status.heroMoving); } else if (core.status.heroMoving<=8) { - core.drawHero(direction, x, y, 'rightFoot', 4*core.status.heroMoving*scan[direction].x, 4*core.status.heroMoving*scan[direction].y); + core.drawHero(direction, x, y, 'rightFoot', 4*core.status.heroMoving); } core.animateFrame.moveTime = timestamp; } @@ -379,6 +379,25 @@ control.prototype.clearContinueAutomaticRoute = function () { core.status.automaticRoute.moveStepBeforeStop=[]; } +////// 瞬间移动 ////// +control.prototype.moveDirectly = function (destX, destY) { + var ignoreSteps = core.canMoveDirectly(destX, destY); + if (ignoreSteps>0) { + core.clearMap('hero', 0, 0, 416, 416); + var lastDirection = core.status.route[core.status.route.length-1]; + if (['left', 'right', 'up', 'down'].indexOf(lastDirection)>=0) + core.setHeroLoc('direction', lastDirection); + 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 true; + } + return false; +} + ////// 设置自动寻路路线 ////// control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { if (!core.status.played || core.status.lockControl) { @@ -392,19 +411,7 @@ control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { core.status.automaticRoute.moveDirectly = true; setTimeout(function () { if (core.status.automaticRoute.moveDirectly && core.status.heroMoving==0) { - var ignoreSteps = core.canMoveDirectly(destX, destY); - if (ignoreSteps>0) { - core.clearMap('hero', 0, 0, 416, 416); - var lastDirection = core.status.route[core.status.route.length-1]; - if (['left', 'right', 'up', 'down'].indexOf(lastDirection)>=0) - core.setHeroLoc('direction', lastDirection); - 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; - } + core.control.moveDirectly(destX, destY); } core.status.automaticRoute.moveDirectly = false; }, 100); @@ -429,17 +436,8 @@ control.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { // 单击瞬间移动 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; + if (core.control.moveDirectly(destX, destY)) return; - } } var step = 0; @@ -656,8 +654,9 @@ control.prototype.setHeroMoveInterval = function (direction, x, y, callback) { core.interval.heroMoveInterval = window.setInterval(function () { core.status.heroMoving+=toAdd; if (core.status.heroMoving>=8) { - core.setHeroLoc('x', x+scan[direction].x); - core.setHeroLoc('y', y+scan[direction].y); + core.setHeroLoc('x', x+scan[direction].x, true); + core.setHeroLoc('y', y+scan[direction].y, true); + core.control.updateFollowers(); core.moveOneStep(); core.clearMap('hero', 0, 0, 416, 416); core.drawHero(direction); @@ -837,15 +836,16 @@ control.prototype.eventMoveHero = function(steps, time, callback) { core.setHeroLoc('direction', direction); step++; if (step <= 4) { - core.drawHero(direction, x, y, 'leftFoot', 4 * step * scan[direction].x, 4 * step * scan[direction].y); + core.drawHero(direction, x, y, 'leftFoot', 4 * step); } else if (step <= 8) { - core.drawHero(direction, x, y, 'rightFoot', 4 * step * scan[direction].x, 4 * step * scan[direction].y); + core.drawHero(direction, x, y, 'rightFoot', 4 * step); } if (step == 8) { step = 0; - core.setHeroLoc('x', x + scan[direction].x); - core.setHeroLoc('y', y + scan[direction].y); + core.setHeroLoc('x', x + scan[direction].x, true); + core.setHeroLoc('y', y + scan[direction].y, true); + core.control.updateFollowers(); moveSteps.shift(); } } @@ -891,12 +891,16 @@ control.prototype.jumpHero = function (ex, ey, time, callback) { curry = (curry * jump_count + ey) / (jump_count + 1.0); } + if (core.isset(core.status.hero.followers) && core.status.hero.followers.length>0) + core.clearMap('hero'); + var animate=window.setInterval(function() { if (jump_count>0) { core.clearMap('hero', drawX(), drawY()-height+32, 32, height); updateJump(); - core.canvas.hero.drawImage(core.material.images.hero, heroIcon[status] * 32, heroIcon.loc * height, 32, height, drawX(), drawY() + 32-height, 32, height); } + core.canvas.hero.drawImage(core.material.images.hero, heroIcon[status] * 32, heroIcon.loc * height, 32, height, drawX(), drawY() + 32-height, 32, height); + } else { clearInterval(animate); core.setHeroLoc('x', ex); @@ -954,33 +958,72 @@ control.prototype.stopHero = function () { } ////// 绘制勇士 ////// -control.prototype.drawHero = function (direction, x, y, status, offsetX, offsetY) { - offsetX = offsetX || 0; - offsetY = offsetY || 0; - var dx=offsetX==0?0:offsetX/Math.abs(offsetX), dy=offsetY==0?0:offsetY/Math.abs(offsetY); +control.prototype.drawHero = function (direction, x, y, status, offset) { + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + if (!core.isset(x)) x = core.getHeroLoc('x'); if (!core.isset(y)) y = core.getHeroLoc('y'); - core.clearAutomaticRouteNode(x+dx, y+dy); - x = x * 32; - y = y * 32; status = status || 'stop'; - var heroIcon = core.material.icons.hero[direction || core.getHeroLoc('direction')]; - core.canvas.hero.clearRect(x - 32, y - 32, 96, 96); - var height=core.material.icons.hero.height; - core.canvas.hero.drawImage(core.material.images.hero, heroIcon[status] * 32, heroIcon.loc * height, 32, height, x + offsetX, y + offsetY + 32-height, 32, height); + direction = direction || core.getHeroLoc('direction'); + offset = offset || 0; + var dx=offset==0?0:scan[direction].x, dy=offset==0?0:scan[direction].y; + core.clearAutomaticRouteNode(x+dx, y+dy); + core.canvas.hero.clearRect(32 * x - 32, 32 * y - 32, 96, 96); + + var heroIconArr = core.material.icons.hero; + var drawObjs = []; + // add hero + drawObjs.push({ + "img": core.material.images.hero, + "height": core.material.icons.hero.height, + "heroIcon": heroIconArr[direction], + "posx": 32 * x + scan[direction].x*offset, + "posy": 32 * y + scan[direction].y*offset, + "status": status, + "index": 0, + }); + + // Add other followers + if (core.isset(core.status.hero.followers)) { + var index=1; + core.status.hero.followers.forEach(function (t) { + core.canvas.hero.clearRect(32*t.x-32, 32*t.y-32, 96, 96); + if (core.isset(core.material.images.images[t.img])) { + drawObjs.push({ + "img": core.material.images.images[t.img], + "height": core.material.images.images[t.img].height/4, + "heroIcon": heroIconArr[t.direction], + "posx": 32*t.x + (t.stop?0:scan[t.direction].x*offset), + "posy": 32*t.y + (t.stop?0:scan[t.direction].y*offset), + "status": t.stop?"stop":status, + "index": index++ + }); + } + }); + } + + drawObjs.sort(function (a, b) { + return a.posy==b.posy?b.index-a.index:a.posy-b.posy; + }) + + drawObjs.forEach(function (block) { + core.canvas.hero.drawImage(block.img, block.heroIcon[block.status]*32, + block.heroIcon.loc * block.height, 32, block.height, + block.posx, block.posy+32-block.height, 32, block.height); + }) } ////// 设置勇士的位置 ////// -control.prototype.setHeroLoc = function (itemName, itemVal) { - if (itemVal == '++') { - core.status.hero.loc[itemName]++; - return; - } - else if (itemVal == '--') { - core.status.hero.loc[itemName]--; - return; - } +control.prototype.setHeroLoc = function (itemName, itemVal, noGather) { core.status.hero.loc[itemName] = itemVal; + if ((itemName=='x' || itemName=='y') && !noGather) { + this.gatherFollowers(); + } } ////// 获得勇士的位置 ////// @@ -1011,6 +1054,62 @@ control.prototype.nextY = function (n) { return core.getHeroLoc('y')+scan[core.getHeroLoc('direction')].y*(n||1); } +////// 聚集跟随者 ////// +control.prototype.gatherFollowers = function () { + if (!core.isset(core.status.hero.followers) || core.status.hero.followers.length==0) return; + var x=core.getHeroLoc('x'), y=core.getHeroLoc('y'), dir=core.getHeroLoc('direction'); + core.status.hero.followers.forEach(function (t) { + t.x = x; + t.y = y; + t.stop = true; + t.direction = dir; + }); +} + +////// 更新跟随者坐标 ////// +control.prototype.updateFollowers = function () { + if (!core.isset(core.status.hero.followers) || core.status.hero.followers.length==0) return; + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + core.status.hero.followers.forEach(function (t) { + if (!t.stop) { + t.x += scan[t.direction].x; + t.y += scan[t.direction].y; + } + }) + + var nowx = core.getHeroLoc('x'), nowy = core.getHeroLoc('y'); + core.status.hero.followers.forEach(function (t) { + if (t.x == nowx && t.y == nowy) { + t.stop = true; + } + else { + var dx = nowx-t.x, dy = nowy-t.y; + if (dx==-1) { + t.stop=false; + t.direction='left'; + } + else if (dx==1) { + t.stop=false; + t.direction='right'; + } + else if (dy==-1) { + t.stop=false; + t.direction='up'; + } + else if (dy==1) { + t.stop=false; + t.direction='down'; + } + } + nowx=t.x; nowy=t.y; + }) +} + ////// 更新领域、夹击、阻击的伤害地图 ////// control.prototype.updateCheckBlock = function() { core.status.checkBlock = {}; @@ -1823,16 +1922,7 @@ control.prototype.replay = function () { else if (action.indexOf('move:')==0) { var pos=action.substring(5).split(":"); var x=parseInt(pos[0]), y=parseInt(pos[1]); - - var ignoreSteps = core.canMoveDirectly(x, y); - if (ignoreSteps>0) { - core.clearMap('hero', 0, 0, 416, 416); - core.setHeroLoc('x', x); - core.setHeroLoc('y', y); - core.drawHero(); - core.status.route.push("move:"+x+":"+y); - core.status.hero.statistics.moveDirectly++; - core.status.hero.statistics.ignoreSteps+=ignoreSteps; + if (core.control.moveDirectly(x,y)) { core.replay(); return; } diff --git a/libs/core.js b/libs/core.js index ed43bd8a..4ae431dc 100644 --- a/libs/core.js +++ b/libs/core.js @@ -484,13 +484,13 @@ core.prototype.stopHero = function () { } ////// 绘制勇士 ////// -core.prototype.drawHero = function (direction, x, y, status, offsetX, offsetY) { - core.control.drawHero(direction, x, y, status, offsetX, offsetY); +core.prototype.drawHero = function (direction, x, y, status, offset) { + core.control.drawHero(direction, x, y, status, offset); } ////// 设置勇士的位置 ////// -core.prototype.setHeroLoc = function (itemName, itemVal) { - core.control.setHeroLoc(itemName, itemVal); +core.prototype.setHeroLoc = function (itemName, itemVal, noGather) { + core.control.setHeroLoc(itemName, itemVal, noGather); } ////// 获得勇士的位置 ////// diff --git a/libs/events.js b/libs/events.js index 3e5d1470..f8ff8424 100644 --- a/libs/events.js +++ b/libs/events.js @@ -405,6 +405,42 @@ events.prototype.doAction = function() { this.doAction(); break; } + case "follow": // 跟随 + if (core.isset(core.material.images.images[data.name]) + && core.material.images.images[data.name].width==128) { + if (!core.isset(core.status.hero.followers)) + core.status.hero.followers = []; + core.status.hero.followers.push({"img": data.name}); + core.control.gatherFollowers(); + core.clearMap('hero'); + core.drawHero(); + } + this.doAction(); + break; + case "unfollow": // 取消跟随 + if (core.isset(core.status.hero.followers)) { + var remove = false; + if (!core.isset(data.name) && core.status.hero.followers.length>0) { + core.status.hero.followers = []; + remove=true; + } + if (core.isset(data.name)) { + for (var i=0;i0) - return 0; + // 可以无视起点事件 + // if (core.getBlock(fromX,fromY)!=null||core.status.checkBlock.damage[13*fromX+fromY]>0) + // return 0; // BFS var visited=[], queue=[]; diff --git a/libs/utils.js b/libs/utils.js index 71da66d9..13a9f677 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -631,7 +631,7 @@ utils.prototype.hide = function (obj, speed, callback) { }, speed); } -utils.prototype.export = function (floorIds) { +utils.prototype._export = function (floorIds) { if (!core.isset(floorIds)) floorIds = [core.status.floorId]; else if (floorIds=='all') floorIds = core.clone(core.floorIds); else if (typeof floorIds == 'string') floorIds = [floorIds]; diff --git a/project/.DS_Store b/project/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fb9d8dabd23d30fe765889aade905d707cfda5ca GIT binary patch literal 8196 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 bK9J~d2-124qHVZO00000NkvXXu0mjfx!;Ny literal 0 HcmV?d00001 diff --git a/更新说明.txt b/更新说明.txt index 8601bc08..8a977687 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,6 +1,7 @@ HTML5魔塔样板V2.3.2 启动服务的多开版本 √ +跟随效果 √ 怪物数据导出器 gif播放可随着分辨率自动放缩 √ 状态栏可随文字长度自动调整放缩 √ From 9c732edc1a2355999b6583fd6e0a453321121953 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 3 Jul 2018 18:58:45 +0800 Subject: [PATCH 3/6] Follow Effect --- .DS_Store | Bin 8196 -> 0 bytes .gitignore | 2 ++ project/.DS_Store | Bin 8196 -> 8196 bytes project/data.js | 2 +- project/images/A1.png | Bin 2929 -> 0 bytes 5 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 .DS_Store delete mode 100755 project/images/A1.png diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 84ef737f38f56d65c8715e73a469c6493314db78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMO-~a+7=A}8-L|6mk(A?JOgJ>PAc)48lmZ44MWhWSQG_nLv^7hYv|9?)N-v%~ z=n><|o8CD43;YNE0)K(r@tK)T)7=&mFGk`_GV{*vJkQL|^S-;oTZo8d>gE{H2oY(h z+z!Xk^eKFt*Pe30yK@beflstc7F8E)XVb8I(CUU#Kq;UUPzopolmh>P0ywjI(at#c z<)~_v0!o4ZQUU&b&{4Tfd$ujD_;jEVDFAE;w?#o8d4S;Po=tnUEv=wpPMJM0kIK9h zgGoBZbqtfVwlmSGPyukDM=;tw#oLhSUkYGO7oPX$MlFM zKjv0*rK#fKlf(MxW;mP29CgeToZ(GihA7soU}cN;&Rq3pfDuEJ3Ub-B0C}D-S4^joaq1PbCg#b?0Zof&k@ewtvpF%D(8uphwi0@C zYATh`CvM+qwIW*l=GcRUjqUw|=Bw80BkTx;d7pK+*b@R%jg9RCT_XXtuYmzt>lD z+tUZJQ;i<-2)B+Gzn(^ba1nO_zwwyx&8FpUEq^W!Eq?-@$Eg+YGu{dxKJ?;leRS=| z(?$S?c<|x0trP3`?a9{V{?Eac@Zm4D^x~4`x`T_ccddLXpYG2SYV38?fa=0sXv8TD ztImJKm?}zv^Q6FleAp45|IeNM`~P{`l6qF9fKuQO6=0#+>}&=kajN$r^HW|&-9Y7q p^~ zfG{R^2&*}9Dm!>XxC|T&+6;~iUJStu84TqNeGIc0)-dc~ILdH~;SIw#MixdfMkPjV gMiWL`MtepN#z4j(#t_Cx#;D0ZgimcgEaJ!w0QOi#f&c&j delta 272 zcmZp1XmQw3F35Oda)n@nhIn&^jzYD$xq*&?iLqI2EhmS#s-dlCLT+VM zbxm#EjLC{Z@{BVlI||tuii(L#h)N1c%ft%^CnY9lrx)dy=A}62=j0bT<&>tz3-A|b zQpO#jfS`rCTl3bLZlM|3%oLQ2YpEp@V*jGLx z6R0IPvnmy=G`Ju!IWsR^+5Q6q7;sLWD6HnC><|FqDm!>X7z`W?+6;~i!3;4Bg$xZ0 z(-{^stY^_jOL6EjGl~Mj6RHkj6sus3ZL41NW_U7 E0N(3OdjJ3c diff --git a/project/data.js b/project/data.js index 124f0593..6a33d6e3 100644 --- a/project/data.js +++ b/project/data.js @@ -5,7 +5,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "sample0", "sample1", "sample2", "MT0" ], "images" : [ - "bg.jpg", "A1.png" + "bg.jpg" ], "animates" : [ "hand", "sword", "zone", diff --git a/project/images/A1.png b/project/images/A1.png deleted file mode 100755 index 96902d3176100c8edbfef035d2cffa9800bfab05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2929 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 bK9J~d2-124qHVZO00000NkvXXu0mjfx!;Ny From 5edac5d8a8dbad44451867f001fde64b1592ac4f Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 3 Jul 2018 19:07:03 +0800 Subject: [PATCH 4/6] Remove .DS_Store from everywhere --- .gitignore | 2 +- project/.DS_Store | Bin 8196 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 project/.DS_Store diff --git a/.gitignore b/.gitignore index 928ab591..94816db6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .vscode *ce5eec52_2fa1_447b_8dad_764e267a7fab* -.DS_Store +**/.DS_Store # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 diff --git a/project/.DS_Store b/project/.DS_Store deleted file mode 100644 index cb91c1efb7910a4fcec45e24f7e255885de718a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMO-~a+7=8y3wkWbF2og;;HYOwz0|E75jJ0YMJ%F@95VdT(Ls{LXs_%RhYfDcghQt{%^SqsTp4pwJnccnv0FZRWn*@B|H9_k z$%`iLA>>wY{sNvn_^4oQuJNNuXCb@Lo-fz@s$tFD+MiCaIoyo~_TjS2=g$ono&h*sz zt*wMLe0uWI%t~qF>E^So=daN$EJQzRpzTWT0xx*wtM zGchgAuvLy%Tt}a0%Yqgy&@e)5(JwB!Vd%0VO>aC1+&m3tS(?W&FA1iY4Hq&OQZbXf zQl{({d{#_e{;sS{rsnFwmiIMf4}-tH+4W4w z0?vxqFEnD?h$FsIn{6hxa^qI$kq?z}8@AZYjqGmZak-tnmW?kqa0A!8|IrUqj01ac zpi^l_ME-xh{rUeMu3)6b0pq}acYt(V%Unz2UDkgUG~ckuwH>T0SVa-MnnEeTMyBJ4 hG95?U`G+CK4pN0CrLm?Ed$5>;0BM71j06AFf#1V?RG$C< From 2a5d318675a091e759fbc7509b32c35e40a2a782 Mon Sep 17 00:00:00 2001 From: oc Date: Wed, 4 Jul 2018 02:09:08 +0800 Subject: [PATCH 5/6] Fix ChangeFloor Bug --- _server/blockly/MotaAction.g4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index 6a1a0f9f..403d19d9 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -555,7 +555,7 @@ var floorstr = ''; if (PosString_0 && PosString_1) { floorstr = ', "loc": ['+PosString_0+','+PosString_1+']'; } -var code = '{"type": "changeFloor", "floorId": "'+IdString_0+floorstr+DirectionEx_List_0+Int_0+' },\n'; +var code = '{"type": "changeFloor", "floorId": "'+IdString_0+'"'+floorstr+DirectionEx_List_0+Int_0+' },\n'; return code; */; From 6317224c7433165d533e07e7c154f42b28752ead Mon Sep 17 00:00:00 2001 From: oc Date: Thu, 5 Jul 2018 00:03:31 +0800 Subject: [PATCH 6/6] Default --- libs/actions.js | 4 ++-- project/data.js | 2 +- 更新说明.txt | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index b3211f26..35e5f9d4 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -326,7 +326,7 @@ actions.prototype.keyUp = function(keyCode, fromReplay) { if (core.status.heroStop) core.turnHero(); break; - case 75: // K + case 75: case 86: // K/V if (core.status.heroStop) core.openQuickShop(true); break; @@ -1139,7 +1139,7 @@ actions.prototype.keyDownQuickShop = function (keycode) { ////// 快捷商店界面时,放开某个键的操作 ////// actions.prototype.keyUpQuickShop = function (keycode) { - if (keycode==27 || keycode==75 || keycode==88) { + if (keycode==27 || keycode==75 || keycode==88 || keycode==86) { core.ui.closePanel(); return; } diff --git a/project/data.js b/project/data.js index 6a33d6e3..984d3398 100644 --- a/project/data.js +++ b/project/data.js @@ -155,7 +155,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "startDirectly": false, "canOpenBattleAnimate": true, "showBattleAnimateConfirm": true, - "battleAnimate": true, + "battleAnimate": false, "displayEnemyDamage": true, "displayCritical": true, "displayExtraDamage": true, diff --git a/更新说明.txt b/更新说明.txt index 8a977687..32a266cc 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -6,6 +6,7 @@ gif播放可随着分辨率自动放缩 √ 状态栏可随文字长度自动调整放缩 √ 也可以用status:exp来代替经验值的写法 √ +V键也可以打开快捷商店 √ 破炸在周围只有一个目标时无需转向面对它 √ 道具效果中,无需再将null改成""才能双击编辑了 √ 各个已知Bug的修复,部分细节优化 √