From 06501777b1e24f291e48773bc27312e793d92a5b Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 24 Jun 2020 15:00:41 +0800 Subject: [PATCH 01/11] adjust damage color --- libs/control.js | 4 ++-- libs/enemys.js | 8 ++++---- libs/ui.js | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libs/control.js b/libs/control.js index c7a3f9f72..0b282363a 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1142,11 +1142,11 @@ control.prototype._updateDamage_extraDamage = function (floorId, ctx, refresh) { var damage = core.status.checkBlock.damage[x+","+y]||0; if (damage>0) { // 该点伤害 damage = core.formatBigNumber(damage, true); - core.fillBoldText(ctx, damage, 32*x+16, 32*(y+1)-14, '#FF7F00'); + core.fillBoldText(ctx, damage, 32*x+16, 32*(y+1)-14, '#ffaa33'); } else { // 检查捕捉 if (core.status.checkBlock.ambush[x+","+y]) { - core.fillBoldText(ctx, '!', 32*x+16, 32*(y+1)-14, '#FF7F00'); + core.fillBoldText(ctx, '!', 32*x+16, 32*(y+1)-14, '#ffaa33'); } } } diff --git a/libs/enemys.js b/libs/enemys.js index 3ec88b5df..978a89e75 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -159,14 +159,14 @@ enemys.prototype.getDamageString = function (enemy, x, y, floorId) { if (damage == null) { damage = "???"; - color = '#FF0000'; + color = '#FF2222'; } else { - if (damage <= 0) color = '#00FF00'; + if (damage <= 0) color = '#11FF11'; else if (damage < core.status.hero.hp / 3) color = '#FFFFFF'; else if (damage < core.status.hero.hp * 2 / 3) color = '#FFFF00'; - else if (damage < core.status.hero.hp) color = '#FF7F00'; - else color = '#FF0000'; + else if (damage < core.status.hero.hp) color = '#FF9933'; + else color = '#FF2222'; damage = core.formatBigNumber(damage, true); if (core.enemys.hasSpecial(enemy, 19)) diff --git a/libs/ui.js b/libs/ui.js index 33b60acbb..0b04f68dc 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2048,11 +2048,11 @@ ui.prototype._drawBook_drawDamage = function (index, enemy, offset, position) { var damage = enemy.damage, color = '#FFFF00'; if (damage == null) { damage = '无法战斗'; - color = '#FF0000'; + color = '#FF2222'; } else { - if (damage >= core.status.hero.hp) color = '#FF0000'; - if (damage <= 0) color = '#00FF00'; + if (damage >= core.status.hero.hp) color = '#FF2222'; + if (damage <= 0) color = '#11FF11'; damage = core.formatBigNumber(damage); if (core.enemys.hasSpecial(enemy, 19)) damage += "+"; if (core.enemys.hasSpecial(enemy, 21)) damage += "-"; From e3d9afe4420a9ec89a1e2ddba3e664acf37b633f Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 24 Jun 2020 15:05:41 +0800 Subject: [PATCH 02/11] adjust damage color --- libs/ui.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/ui.js b/libs/ui.js index 0b04f68dc..a6ad2eb0e 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2052,7 +2052,8 @@ ui.prototype._drawBook_drawDamage = function (index, enemy, offset, position) { } else { if (damage >= core.status.hero.hp) color = '#FF2222'; - if (damage <= 0) color = '#11FF11'; + else if (damage >= core.status.hero.hp * 2 / 3) color = '#FFAA33'; + else if (damage <= 0) color = '#11FF11'; damage = core.formatBigNumber(damage); if (core.enemys.hasSpecial(enemy, 19)) damage += "+"; if (core.enemys.hasSpecial(enemy, 21)) damage += "-"; From c767b6c17441c3f116fe2cc28fb22ce4d6c3e360 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 24 Jun 2020 15:07:06 +0800 Subject: [PATCH 03/11] adjust damage color --- libs/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ui.js b/libs/ui.js index a6ad2eb0e..c64b909f7 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2052,7 +2052,7 @@ ui.prototype._drawBook_drawDamage = function (index, enemy, offset, position) { } else { if (damage >= core.status.hero.hp) color = '#FF2222'; - else if (damage >= core.status.hero.hp * 2 / 3) color = '#FFAA33'; + else if (damage >= core.status.hero.hp * 2 / 3) color = '#FF9933'; else if (damage <= 0) color = '#11FF11'; damage = core.formatBigNumber(damage); if (core.enemys.hasSpecial(enemy, 19)) damage += "+"; From a31344c6fd9989039b1a82dd5236529b70b950b1 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 24 Jun 2020 23:19:57 +0800 Subject: [PATCH 04/11] selectColor --- libs/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ui.js b/libs/ui.js index c64b909f7..d3971e304 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2840,7 +2840,7 @@ ui.prototype.drawKeyBoard = function () { if (isWindowSkin) this.drawWindowSelector(core.status.textAttribute.background, this.HPIXEL + 92, offset - 22, 72, 27); else - core.strokeRoundRect('ui', this.HPIXEL + 92, offset - 22, 72, 27, 6, "#FFD700", 2); + core.strokeRoundRect('ui', this.HPIXEL + 92, offset - 22, 72, 27, 6, core.status.globalAttribute.selectColor, 2); } ////// 绘制状态栏 ///// From cd41c90c60ca30b757b4150719b2e7160d74841d Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 25 Jun 2020 11:29:16 +0800 Subject: [PATCH 05/11] Wait async in replay --- libs/events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/events.js b/libs/events.js index 1a730d7c2..65db6cbef 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2226,7 +2226,7 @@ events.prototype._action_waitAsync = function (data, x, y, prefix) { clearInterval(test); core.doAction(); } - }, 50); + }, 50 / core.status.replay.speed); } events.prototype._action_callBook = function (data, x, y, prefix) { From 80ae48250bc28e12216afc4f05f6613ba42f6d27 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 25 Jun 2020 12:01:35 +0800 Subject: [PATCH 06/11] Optimize automaticRoute_bfs --- libs/core.js | 4 ++-- libs/maps.js | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/core.js b/libs/core.js index 09b90cabe..bba8f4fcd 100644 --- a/libs/core.js +++ b/libs/core.js @@ -228,7 +228,7 @@ core.prototype.init = function (coreData, callback) { this._init_flags(); this._init_platform(); this._init_others(); - this._initPlugins(); + this._init_plugins(); // 初始化画布 for (var name in core.canvas) { @@ -410,7 +410,7 @@ core.prototype._afterLoadResources = function (callback) { if (callback) callback(); } -core.prototype._initPlugins = function () { +core.prototype._init_plugins = function () { core.plugin = new function () {}; for (var name in plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1) { diff --git a/libs/maps.js b/libs/maps.js index 0038f6661..6e89dd654 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -704,6 +704,7 @@ maps.prototype._automaticRoute_bfs = function (startX, startY, destX, destY) { var queue = new PriorityQueue({comparator: function (a,b) { return a.depth - b.depth; }}); route[startX + "," + startY] = ''; queue.queue({depth: 0, x: startX, y: startY}); + var blocks = core.getMapBlocksObj(); while (queue.length!=0) { var curr = queue.dequeue(), deep = curr.depth, nowX = curr.x, nowY = curr.y; for (var direction in core.utils.scan) { @@ -719,17 +720,17 @@ maps.prototype._automaticRoute_bfs = function (startX, startY, destX, destY) { // 不可通行 if (core.noPass(nx, ny)) continue; route[nx+","+ny] = direction; - queue.queue({depth: deep + this._automaticRoute_deepAdd(nx, ny), x: nx, y: ny}); + queue.queue({depth: deep + this._automaticRoute_deepAdd(nx, ny, blocks), x: nx, y: ny}); } if (route[destX+","+destY] != null) break; } return route; } -maps.prototype._automaticRoute_deepAdd = function (x, y) { +maps.prototype._automaticRoute_deepAdd = function (x, y, blocks) { // 判定每个可通行点的损耗值,越高越应该绕路 var deepAdd = 1; - var block = core.getBlock(x,y); + var block = blocks[x+","+y]; if (block != null){ var id = block.block.event.id; // 绕过亮灯 From eafe284e2c3821993bb908922166dea66d460603 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 25 Jun 2020 12:34:53 +0800 Subject: [PATCH 07/11] Fix bug --- libs/maps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/maps.js b/libs/maps.js index 6e89dd654..1d698576d 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -732,7 +732,7 @@ maps.prototype._automaticRoute_deepAdd = function (x, y, blocks) { var deepAdd = 1; var block = blocks[x+","+y]; if (block != null){ - var id = block.block.event.id; + var id = block.event.id; // 绕过亮灯 if (id == "light") deepAdd += 100; // 绕过路障 From fa7f6ab7642950d47eea51e1b3ee26ee03a1ec2c Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 25 Jun 2020 16:29:54 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E7=89=A9=E5=93=81=E5=88=86=E7=B1=BB?= =?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/CodeMirror/defs.js | 4 + _server/table/plugins.comment.js | 6 ++ libs/actions.js | 18 ++-- libs/control.js | 6 +- libs/items.js | 6 ++ libs/ui.js | 6 +- project/plugins.js | 138 +++++++++++++++++++++++++++++++ runtime.d.ts | 3 + 8 files changed, 167 insertions(+), 20 deletions(-) diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 6f4ce6888..783376a83 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -2608,6 +2608,10 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "静默增减某种道具的持有量 不会更新游戏画面或是显示提示
例如:core.addItem('yellowKey', -2) // 没收两把黄钥匙
itemId: 道具id
itemNum: 增加量,负数表示没收", "!type": "fn(itemId: string, itemNum?: number)" }, + "getDisplayItemsInToolbox": { + "!doc": "获得所有应该在道具栏显示的某个类型道具", + "!type": "fn(cls: string) -> [string]" + }, "unloadEquip": { "!doc": "脱下某个类型的装备
例如:core.unloadEquip(1) // 卸下盾牌,无回调
equipType: 装备类型编号,自然数
callback: 卸下装备后的回调函数", "!type": "fn(equipType: number, callback?: fn())" diff --git a/_server/table/plugins.comment.js b/_server/table/plugins.comment.js index b968d3fe4..e19c11ff8 100644 --- a/_server/table/plugins.comment.js +++ b/_server/table/plugins.comment.js @@ -69,6 +69,12 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_range": "typeof(thiseval)=='string' || thiseval==null", "_data": "楼传可以跳过楼层" }, + "itemCategory": { + "_leaf": true, + "_type": "textarea", + "_range": "typeof(thiseval)=='string' || thiseval==null", + "_data": "物品分类插件" + }, "smoothCamera": { "_leaf": true, "_type": "textarea", diff --git a/libs/actions.js b/libs/actions.js index ff02f1a20..1d25fc3af 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1346,10 +1346,8 @@ actions.prototype._keyUpQuickShop = function (keycode) { ////// 工具栏界面时的点击操作 ////// actions.prototype._clickToolbox = function (x, y) { - var tools = Object.keys(core.status.hero.items.tools) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); - var constants = Object.keys(core.status.hero.items.constants) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); + var tools = core.getDisplayItemsInToolbox('tools'), + constants = core.getDisplayItemsInToolbox('constants'); // 装备栏 if (x >= this.LAST - 2 && y == 0) { @@ -1402,10 +1400,8 @@ actions.prototype._clickToolbox = function (x, y) { ////// 选择工具栏界面中某个Index后的操作 ////// actions.prototype._clickToolboxIndex = function (index) { - var tools = Object.keys(core.status.hero.items.tools) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); - var constants = Object.keys(core.status.hero.items.constants) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); + var tools = core.getDisplayItemsInToolbox('tools'), + constants = core.getDisplayItemsInToolbox('constants'); var items = null; var select; @@ -1435,10 +1431,8 @@ actions.prototype._keyDownToolbox = function (keycode) { var last_index = this.LAST - 1; - var tools = Object.keys(core.status.hero.items.tools) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); - var constants = Object.keys(core.status.hero.items.constants) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); + var tools = core.getDisplayItemsInToolbox('tools'), + constants = core.getDisplayItemsInToolbox('constants'); var index = core.status.event.selection; var toolsPage = core.status.event.data.toolsPage; var constantsPage = core.status.event.data.constantsPage; diff --git a/libs/control.js b/libs/control.js index 0b282363a..66506bd33 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1486,10 +1486,8 @@ control.prototype._replayAction_item = function (action) { core.useItem(itemId, false, core.replay); return true; } - var tools = Object.keys(core.status.hero.items.tools) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); - var constants = Object.keys(core.status.hero.items.constants) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); + var tools = core.getDisplayItemsInToolbox('tools'), + constants = core.getDisplayItemsInToolbox('constants'); var index, per = core.__SIZE__-1; if ((index=tools.indexOf(itemId))>=0) { core.status.event.data = {"toolsPage": Math.floor(index/per)+1, "constantsPage":1}; diff --git a/libs/items.js b/libs/items.js index b54db5250..cd736bfc9 100644 --- a/libs/items.js +++ b/libs/items.js @@ -207,6 +207,12 @@ items.prototype.removeItem = function (itemId, itemNum) { return true; } +////// 获得所有应该在道具栏显示的某个类型道具 ////// +items.prototype.getDisplayItemsInToolbox = function (cls) { + return Object.keys(core.status.hero.items[cls]) + .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); +} + // ---------- 装备相关 ------------ // items.prototype.getEquipTypeByName = function (name) { diff --git a/libs/ui.js b/libs/ui.js index d3971e304..ec01ef982 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2382,10 +2382,8 @@ ui.prototype._drawToolbox_getInfo = function (index) { if (!core.status.event.data || core.status.event.data.toolsPage == null) core.status.event.data = {"toolsPage":1, "constantsPage":1, "selectId":null} // 获取物品列表 - var tools = Object.keys(core.status.hero.items.tools) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); - var constants = Object.keys(core.status.hero.items.constants) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); + var tools = core.getDisplayItemsInToolbox('tools'), + constants = core.getDisplayItemsInToolbox('constants'); // 处理页数 var toolsPage = core.status.event.data.toolsPage; var constantsPage = core.status.event.data.constantsPage; diff --git a/project/plugins.js b/project/plugins.js index 0b11ff7ef..eb067be24 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -1235,6 +1235,144 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } +}, + "itemCategory": function () { + // 物品分类插件。此插件允许你对消耗道具和永久道具进行分类,比如标记「宝物类」「剧情道具」「药品」等等。 + // 使用方法: + // 1. 启用本插件 + // 2. 在下方数组中定义全部的物品分类类型 + // 3. 点击道具的【配置表格】,找到“【道具】相关的表格配置”,然后在【道具描述】之后仿照增加道具的分类: + /* + "category": { + "_leaf": true, + "_type": "textarea", + "_string": true, + "_data": "道具分类" + }, + */ + // (你也可以选择使用下拉框的方式定义每个道具的分类,写法参见上面的cls) + // 然后刷新编辑器,就可以对每个物品进行分类了 + + // 是否开启本插件,默认禁用;将此改成 true 将启用本插件。 + var __enable = false; + if (!__enable) return; + + // 在这里定义所有的道具分类类型,一行一个 + var categories = [ + "宝物类", + "辅助类", + "技能类", + "剧情道具", + "增益道具", + ]; + // 当前选中的道具类别 + var currentCategory = null; + + // 重写 core.ui.drawToolbox 以绘制分类类别 + var _drawToolbox = core.ui.drawToolbox; + core.ui.drawToolbox = function (index) { + _drawToolbox.call(this, index); + core.setTextAlign('ui', 'left'); + core.fillText('ui', '类别[E]:' + (currentCategory || "全部"), 15, this.PIXEL - 13); + } + + // 获得所有应该在道具栏显示的某个类型道具 + core.items.getDisplayItemsInToolbox = function (cls) { + // 检查类别 + return Object.keys(core.status.hero.items[cls]) + .filter(function (id) { + return !core.material.items[id].hideInToolbox && + (currentCategory == null || core.material.items[id].category == currentCategory); + }).sort(); + } + + // 注入道具栏的点击事件(点击类别) + var _clickToolbox = core.actions._clickToolbox; + core.actions._clickToolbox = function (x, y) { + if (x >= 0 && x <= this.HSIZE - 4 && y == this.LAST) { + drawToolboxCategory(); + return; + } + return _clickToolbox.call(core.actions, x, y); + } + + // 注入道具栏的按键事件(E键) + var _keyUpToolbox = core.actions._keyUpToolbox; + core.actions._keyUpToolbox = function (keyCode) { + if (keyCode == 69) { + // 按E键则打开分类类别选择 + drawToolboxCategory(); + return; + } + return _keyUpToolbox.call(core.actions, keyCode); + } + + // ------ 以下为选择道具分类的相关代码 ------ // + + // 关闭窗口时清除分类选择项 + var _closePanel = core.ui.closePanel; + core.ui.closePanel = function () { + currentCategory = null; + _closePanel.call(core.ui); + } + + // 弹出菜单以选择具体哪个分类 + // 直接使用 core.drawChoices 进行绘制 + var drawToolboxCategory = function () { + if (core.status.event.id != 'toolbox') return; + var selection = categories.indexOf(currentCategory) + 1; + core.ui.closePanel(); + core.status.event.id = 'toolbox-category'; + core.status.event.selection = selection; + core.lockControl(); + // 给第一项插入「全部」 + core.drawChoices('请选择道具类别', ["全部"].concat(categories)); + } + + // 选择某一项 + var _selectCategory = function (index) { + core.ui.closePanel(); + if (index <= 0 || index > categories.length) currentCategory = null; + else currentCategory = categories[index - 1]; + core.openToolbox(); + } + + var _clickToolBoxCategory = function (x, y) { + if (!core.status.lockControl || core.status.event.id != 'toolbox-category') return false; + + if (x < core.actions.CHOICES_LEFT || x > core.actions.CHOICES_RIGHT) return false; + var choices = core.status.event.ui.choices; + var topIndex = core.actions.HSIZE - parseInt((choices.length - 1) / 2) + (core.status.event.ui.offset || 0); + if (y >= topIndex && y < topIndex + choices.length) { + _selectCategory(y - topIndex); + } + return true; + } + + // 注入点击事件 + core.registerAction('onclick', 'toolbox-category', _clickToolBoxCategory, 100); + + // 注入光标跟随事件 + core.registerAction('onmove', 'toolbox-category', function (x, y) { + if (!core.status.lockControl || core.status.event.id != 'toolbox-category') return false; + core.actions._onMoveChoices(x, y); + return true; + }, 100); + + // 注入键盘光标事件 + core.registerAction('keyDown', 'toolbox-category', function (keyCode) { + if (!core.status.lockControl || core.status.event.id != 'toolbox-category') return false; + core.actions._keyDownChoices(keyCode); + return true; + }, 100); + + // 注入键盘按键事件 + core.registerAction('keyUp', 'toolbox-category', function (keyCode) { + if (!core.status.lockControl || core.status.event.id != 'toolbox-category') return false; + core.actions._selectChoices(core.status.event.ui.choices.length, keyCode, _clickToolBoxCategory); + return true; + }, 100); + }, "smoothCamera": function () { // 此插件开启后,大地图的瞬间移动将开启平滑镜头移动,避免突兀感 diff --git a/runtime.d.ts b/runtime.d.ts index 875e67e5c..1420d1dac 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -1928,6 +1928,9 @@ declare class items { */ addItem(itemId: string, itemNum?: number): void + /** 获得所有应该在道具栏显示的某个类型道具 */ + getDisplayItemsInToolbox(cls: string): string[] + /** * 判定某件装备的类型 * @example core.getEquipTypeById('shield5') // 1(盾牌) From ea2fdb2887338fbc32ec33c6fc175d11cdbe9458 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sat, 27 Jun 2020 13:08:27 +0800 Subject: [PATCH 09/11] =?UTF-8?q?getToolboxItems;48=E7=9A=84=E6=80=AA?= =?UTF-8?q?=E7=89=A9=E4=B8=8A16=E5=83=8F=E7=B4=A0=E9=80=8F=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/CodeMirror/defs.js | 8 ++--- _server/table/functions.comment.js | 6 ++++ libs/actions.js | 18 +++++----- libs/control.js | 6 ++-- libs/items.js | 6 ---- libs/ui.js | 55 ++++++++++++++++++++++++------ project/functions.js | 9 +++++ project/plugins.js | 2 +- runtime.d.ts | 6 ++-- 9 files changed, 80 insertions(+), 36 deletions(-) diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index 783376a83..95efd9b0a 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -2607,10 +2607,6 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "addItem": { "!doc": "静默增减某种道具的持有量 不会更新游戏画面或是显示提示
例如:core.addItem('yellowKey', -2) // 没收两把黄钥匙
itemId: 道具id
itemNum: 增加量,负数表示没收", "!type": "fn(itemId: string, itemNum?: number)" - }, - "getDisplayItemsInToolbox": { - "!doc": "获得所有应该在道具栏显示的某个类型道具", - "!type": "fn(cls: string) -> [string]" }, "unloadEquip": { "!doc": "脱下某个类型的装备
例如:core.unloadEquip(1) // 卸下盾牌,无回调
equipType: 装备类型编号,自然数
callback: 卸下装备后的回调函数", @@ -3550,6 +3546,10 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "绘制怪物属性的详细信息", "!type": "fn(index?: ?)" }, + "getToolboxItems": { + "!doc": "获得所有应该在道具栏显示的某个类型道具", + "!type": "fn(cls: string) -> [string]" + }, "drawToolbox": { "!doc": "绘制道具栏", "!type": "fn(index?: ?)" diff --git a/_server/table/functions.comment.js b/_server/table/functions.comment.js index bb056eb1d..f14d295ab 100644 --- a/_server/table/functions.comment.js +++ b/_server/table/functions.comment.js @@ -182,6 +182,12 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "ui": { "_type": "object", "_data": { + "getToolboxItems": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "道具栏显示项" + }, "drawStatusBar": { "_leaf": true, "_type": "textarea", diff --git a/libs/actions.js b/libs/actions.js index 1d25fc3af..3ba55a3e8 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1346,8 +1346,8 @@ actions.prototype._keyUpQuickShop = function (keycode) { ////// 工具栏界面时的点击操作 ////// actions.prototype._clickToolbox = function (x, y) { - var tools = core.getDisplayItemsInToolbox('tools'), - constants = core.getDisplayItemsInToolbox('constants'); + var tools = core.getToolboxItems('tools'), + constants = core.getToolboxItems('constants'); // 装备栏 if (x >= this.LAST - 2 && y == 0) { @@ -1400,8 +1400,8 @@ actions.prototype._clickToolbox = function (x, y) { ////// 选择工具栏界面中某个Index后的操作 ////// actions.prototype._clickToolboxIndex = function (index) { - var tools = core.getDisplayItemsInToolbox('tools'), - constants = core.getDisplayItemsInToolbox('constants'); + var tools = core.getToolboxItems('tools'), + constants = core.getToolboxItems('constants'); var items = null; var select; @@ -1431,8 +1431,8 @@ actions.prototype._keyDownToolbox = function (keycode) { var last_index = this.LAST - 1; - var tools = core.getDisplayItemsInToolbox('tools'), - constants = core.getDisplayItemsInToolbox('constants'); + var tools = core.getToolboxItems('tools'), + constants = core.getToolboxItems('constants'); var index = core.status.event.selection; var toolsPage = core.status.event.data.toolsPage; var constantsPage = core.status.event.data.constantsPage; @@ -1565,7 +1565,7 @@ actions.prototype._clickEquipbox = function (x, y) { } // 下一页 if ((x == this.HSIZE+2 || x == this.HSIZE+3) && y == this.LAST) { - var lastPage = Math.ceil(Object.keys(core.status.hero.items.equips).length / this.LAST); + var lastPage = Math.ceil(core.getToolboxItems('equips').length / this.LAST); if (core.status.event.data.page < lastPage) { core.status.event.data.page++; core.ui.drawEquipbox(core.status.event.selection); @@ -1601,7 +1601,7 @@ actions.prototype._clickEquipboxIndex = function (index) { } } else { - var equips = Object.keys(core.status.hero.items.equips || {}).sort(); + var equips = core.getToolboxItems('equips'); if (index == core.status.event.selection) { if (core.isReplaying()) return; var equipId = equips[index - this.LAST + (core.status.event.data.page - 1) * this.LAST]; @@ -1619,7 +1619,7 @@ actions.prototype._keyDownEquipbox = function (keycode) { var last_index = this.LAST - 1; var per_line = this.HSIZE - 3; var equipCapacity = core.status.globalAttribute.equipName.length; - var ownEquipment = Object.keys(core.status.hero.items.equips).sort(); + var ownEquipment = core.getToolboxItems('equips'); var index = core.status.event.selection; var page = core.status.event.data.page; var totalPage = Math.ceil(ownEquipment.length / this.LAST); diff --git a/libs/control.js b/libs/control.js index 66506bd33..f6bef443d 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1486,8 +1486,8 @@ control.prototype._replayAction_item = function (action) { core.useItem(itemId, false, core.replay); return true; } - var tools = core.getDisplayItemsInToolbox('tools'), - constants = core.getDisplayItemsInToolbox('constants'); + var tools = core.getToolboxItems('tools'), + constants = core.getToolboxItems('constants'); var index, per = core.__SIZE__-1; if ((index=tools.indexOf(itemId))>=0) { core.status.event.data = {"toolsPage": Math.floor(index/per)+1, "constantsPage":1}; @@ -1509,7 +1509,7 @@ control.prototype._replayAction_item = function (action) { control.prototype._replayAction_equip = function (action) { if (action.indexOf("equip:")!=0) return false; var equipId = action.substring(6); - var ownEquipment = Object.keys(core.status.hero.items.equips).sort(); + var ownEquipment = core.getToolboxItems('equips'); var index = ownEquipment.indexOf(equipId), per = core.__SIZE__-1; if (index<0) return false; core.status.route.push(action); diff --git a/libs/items.js b/libs/items.js index cd736bfc9..b54db5250 100644 --- a/libs/items.js +++ b/libs/items.js @@ -207,12 +207,6 @@ items.prototype.removeItem = function (itemId, itemNum) { return true; } -////// 获得所有应该在道具栏显示的某个类型道具 ////// -items.prototype.getDisplayItemsInToolbox = function (cls) { - return Object.keys(core.status.hero.items[cls]) - .filter(function (id) { return !core.material.items[id].hideInToolbox; }).sort(); -} - // ---------- 装备相关 ------------ // items.prototype.getEquipTypeByName = function (name) { diff --git a/libs/ui.js b/libs/ui.js index ec01ef982..41321d089 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1919,6 +1919,18 @@ ui.prototype._drawBook_drawOne = function (floorId, index, enemy, pageinfo, sele core.strokeRoundRect('ui', 10, top + 1, this.PIXEL - 10 * 2, pageinfo.per_height, 10, core.status.globalAttribute.selectColor); } +ui.prototype._drawBook_is32x32 = function (blockInfo) { + // 判定48的怪物上半部分是否是全透明 + var height = blockInfo.height - 32; + var canvas = document.createElement('canvas'); + canvas.width = 32; canvas.height = height; + var ctx = canvas.getContext("2d"); + core.drawImage(ctx, blockInfo.image, 0, blockInfo.posY * blockInfo.height, 32, height, 0, 0, 32, height); + var url = canvas.toDataURL(); + core.clearMap(ctx); + return url == canvas.toDataURL(); +} + ui.prototype._drawBook_drawBox = function (index, enemy, top, pageinfo) { // 横向:22+42;纵向:10 + 42 + 10(正好居中);内部图像 32x32 var border_top = top + (pageinfo.per_height - 42) / 2, border_left = 22; @@ -1926,13 +1938,26 @@ ui.prototype._drawBook_drawBox = function (index, enemy, top, pageinfo) { core.strokeRect('ui', 22, border_top, 42, 42, '#DDDDDD', 2); var blockInfo = core.getBlockInfo(enemy.id); if (blockInfo.height >= 42) { - var drawWidth = 42 * 32 / blockInfo.height; - core.status.boxAnimateObjs.push({ - 'bgx': border_left, 'bgy': border_top, 'bgWidth': 42, 'bgHeight': 42, - 'x': img_left - 5 + (42 - drawWidth) / 2, 'y': img_top - 5, 'dw': drawWidth, 'dh': 42, - 'height': blockInfo.height, 'animate': blockInfo.animate, - 'image': blockInfo.image, 'pos': blockInfo.posY * blockInfo.height - }); + var originEnemy = core.material.enemys[enemy.id] || {}; + // 检查上半部分是不是纯透明的;取用原始值避免重复计算 + if (originEnemy.is32x32 == null) { + originEnemy.is32x32 = this._drawBook_is32x32(blockInfo); + } + if (originEnemy.is32x32) { + core.status.boxAnimateObjs.push({ + 'bgx': border_left, 'bgy': border_top, 'bgWidth': 42, 'bgHeight': 42, + 'x': img_left, 'y': img_top, 'height': 32, 'animate': blockInfo.animate, + 'image': blockInfo.image, 'pos': blockInfo.posY * blockInfo.height + blockInfo.height - 32 + }); + } else { + var drawWidth = 42 * 32 / blockInfo.height; + core.status.boxAnimateObjs.push({ + 'bgx': border_left, 'bgy': border_top, 'bgWidth': 42, 'bgHeight': 42, + 'x': img_left - 5 + (42 - drawWidth) / 2, 'y': img_top - 5, 'dw': drawWidth, 'dh': 42, + 'height': blockInfo.height, 'animate': blockInfo.animate, + 'image': blockInfo.image, 'pos': blockInfo.posY * blockInfo.height + }); + } } else { core.status.boxAnimateObjs.push({ 'bgx': border_left, 'bgy': border_top, 'bgWidth': 42, 'bgHeight': 42, @@ -2377,13 +2402,23 @@ ui.prototype.drawToolbox = function(index) { core.fillText('ui', '返回游戏', this.PIXEL - 46, this.PIXEL - 13); } +////// 获得所有应该在道具栏显示的某个类型道具 ////// +ui.prototype.getToolboxItems = function (cls) { + if (this.uidata.getToolboxItems) { + return this.uidata.getToolboxItems(cls); + } + return Object.keys(core.status.hero.items[cls] || {}) + .filter(function (id) { return !core.material.items[id].hideInToolbox; }) + .sort(); +} + ui.prototype._drawToolbox_getInfo = function (index) { // 设定eventdata if (!core.status.event.data || core.status.event.data.toolsPage == null) core.status.event.data = {"toolsPage":1, "constantsPage":1, "selectId":null} // 获取物品列表 - var tools = core.getDisplayItemsInToolbox('tools'), - constants = core.getDisplayItemsInToolbox('constants'); + var tools = core.getToolboxItems('tools'), + constants = core.getToolboxItems('constants'); // 处理页数 var toolsPage = core.status.event.data.toolsPage; var constantsPage = core.status.event.data.constantsPage; @@ -2510,7 +2545,7 @@ ui.prototype._drawEquipbox_getInfo = function (index) { var equipLength = allEquips.length; if (!core.status.hero.equipment) core.status.hero.equipment = []; var equipEquipment = core.status.hero.equipment; - var ownEquipment = Object.keys(core.status.hero.items.equips).sort(); + var ownEquipment = core.getToolboxItems('equips'); var page = core.status.event.data.page; var totalPage = Math.ceil(ownEquipment.length / this.LAST); // 处理index diff --git a/project/functions.js b/project/functions.js index b16d427e7..c81728474 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1451,6 +1451,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } }, "ui": { + "getToolboxItems": function (cls) { + // 获得道具栏中当前某类型道具的显示项和显示顺序 + // cls为道具类型,只可能是 tools, constants 和 equips + // 返回一个数组,代表当前某类型道具的显示内容和顺序 + + return Object.keys(core.status.hero.items[cls] || {}) + .filter(function (id) { return !core.material.items[id].hideInToolbox; }) + .sort(); +}, "drawStatusBar": function () { // 自定义绘制状态栏,需要开启状态栏canvas化 diff --git a/project/plugins.js b/project/plugins.js index eb067be24..5f25ac13c 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -1277,7 +1277,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } // 获得所有应该在道具栏显示的某个类型道具 - core.items.getDisplayItemsInToolbox = function (cls) { + core.ui.getToolboxItems = function (cls) { // 检查类别 return Object.keys(core.status.hero.items[cls]) .filter(function (id) { diff --git a/runtime.d.ts b/runtime.d.ts index 1420d1dac..6fb09a77d 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -1928,9 +1928,6 @@ declare class items { */ addItem(itemId: string, itemNum?: number): void - /** 获得所有应该在道具栏显示的某个类型道具 */ - getDisplayItemsInToolbox(cls: string): string[] - /** * 判定某件装备的类型 * @example core.getEquipTypeById('shield5') // 1(盾牌) @@ -2244,6 +2241,9 @@ declare class ui { /** 绘制道具栏 */ drawToolbox(index?: any): void + /** 获得所有应该在道具栏显示的某个类型道具 */ + getToolboxItems(cls: string): string[] + /** 绘制装备界面 */ drawEquipbox(index?: any): void From d89c63008a157a0d1534356b6161a64328322c17 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sat, 27 Jun 2020 21:35:03 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=80=8F=E6=98=8E?= =?UTF-8?q?=E5=9C=B0=E9=9D=A2=E7=9A=84=E7=BC=A9=E7=95=A5=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/maps.js | 2 +- libs/ui.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/maps.js b/libs/maps.js index 1d698576d..52ca529c8 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1302,7 +1302,7 @@ maps.prototype._drawThumbnail_drawToTarget = function (floorId, toDraw) { if (centerY == null) centerY = Math.floor(height / 2); var tempCanvas = core.bigmap.tempCanvas, tempWidth = 32 * width, tempHeight = 32 * height; - core.clearMap(ctx, x, y, size, size); + // core.clearMap(ctx, x, y, size, size); if (toDraw.all) { // 绘制全景图 if (tempWidth <= tempHeight) { diff --git a/libs/ui.js b/libs/ui.js index 41321d089..8af94db7a 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2281,6 +2281,8 @@ ui.prototype.drawCenterFly = function () { var fillstyle = 'rgba(255,0,0,0.5)'; if (core.canUseItem('centerFly')) fillstyle = 'rgba(0,255,0,0.5)'; var toX = core.bigmap.width - 1 - core.getHeroLoc('x'), toY = core.bigmap.height - 1 - core.getHeroLoc('y'); + this.clearUI(); + core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL, '#000000'); core.drawThumbnail(null, null, {heroLoc: core.status.hero.loc, heroIcon: core.status.hero.image}, {ctx: 'ui', centerX: toX, centerY: toY}); var offsetX = core.clamp(toX - core.__HALF_SIZE__, 0, core.bigmap.width - core.__SIZE__), @@ -2300,6 +2302,7 @@ ui.prototype.drawMaps = function (index, x, y) { core.clearTip(); core.status.checkBlock.cache = {}; var data = this._drawMaps_buildData(index, x, y); + core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL, '#000000'); core.drawThumbnail(data.floorId, null, {damage: data.damage}, {ctx: 'ui', centerX: data.x, centerY: data.y, all: data.all}); core.clearMap('data'); From 9387479b73f48a586b2b2ec351bd2e5cd4c282d7 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sun, 28 Jun 2020 13:37:34 +0800 Subject: [PATCH 11/11] Fix mobile z-index --- _server/editor_listen.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 5647f5b1b..94725b6eb 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -83,14 +83,14 @@ editor_listen_wrapper = function (editor) { editor.showdataarea(true) } mobileview.children[1].onclick = function () { - mid.style = ''; + mid.style = 'z-index:110'; right.style = 'z-index:-1;opacity: 0;'; // mobileeditdata.style = 'z-index:-1;opacity: 0;'; editor.lastClickId = ''; } mobileview.children[3].onclick = function () { mid.style = 'z-index:-1;opacity: 0;'; - right.style = ''; + right.style = 'z-index:110'; // mobileeditdata.style = 'z-index:-1;opacity: 0;'; editor.lastClickId = ''; }