From a516d4518907c64e9e72e40cb2311b30c517a813 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sun, 10 May 2020 09:55:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9B=E6=96=B9=E5=90=91=E5=A4=B9=E5=87=BB?= =?UTF-8?q?=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor_datapanel.js | 8 ++++---- libs/enemys.js | 3 +++ project/functions.js | 17 ++++++++++------- v2.x-final更新.txt | 12 ++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/_server/editor_datapanel.js b/_server/editor_datapanel.js index 948ce9c0..e0f2ea50 100644 --- a/_server/editor_datapanel.js +++ b/_server/editor_datapanel.js @@ -162,8 +162,8 @@ editor_datapanel_wrapper = function (editor) { printe('不合法的idnum'); return; } - if (!/^[0-9a-zA-Z_]+$/.test(id)) { - printe('不合法的id,请使用字母、数字或下划线') + if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(id)) { + printe('不合法的id,请使用字母、数字或下划线,且不能以数字开头'); return; } editor.file.changeIdAndIdnum(id, idnum, editor_mode.info, function (err) { @@ -193,8 +193,8 @@ editor_datapanel_wrapper = function (editor) { changeId.children[1].onclick = function () { var id = changeId.children[0].value; if (id) { - if (!/^[0-9a-zA-Z_]+$/.test(id)) { - printe('不合法的id,请使用字母、数字或下划线') + if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(id)) { + printe('不合法的id,请使用字母、数字或下划线,且不能以数字开头') return; } editor.file.changeIdAndIdnum(id, null, editor_mode.info, function (err) { diff --git a/libs/enemys.js b/libs/enemys.js index cfc23e07..4c82a6fa 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -267,12 +267,14 @@ enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) { } enemys.prototype.getEnemyInfo = function (enemy, hero, x, y, floorId) { + if (enemy == null) return null; if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; return this.enemydata.getEnemyInfo(enemy, hero, x, y, floorId) } ////// 获得战斗伤害信息(实际伤害计算函数) ////// enemys.prototype.getDamageInfo = function (enemy, hero, x, y, floorId) { + if (enemy == null) return null; // 移动到了脚本编辑 - getDamageInfo中 if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; return this.enemydata.getDamageInfo(enemy, hero, x, y, floorId); @@ -284,6 +286,7 @@ enemys.prototype.getDamage = function (enemy, x, y, floorId) { } enemys.prototype._getDamage = function (enemy, hero, x, y, floorId) { + if (enemy == null) return null; if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; var info = this.getDamageInfo(enemy, hero, x, y, floorId); diff --git a/project/functions.js b/project/functions.js index ebd1681a..87a4c0e3 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1210,32 +1210,35 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = for (var y = 0; y < height; y++) { var loc = x + "," + y; // 夹击怪物的ID - var enemyId = null; + var enemyId1 = null, enemyId2 = null; // 检查左右夹击 var leftBlock = blocks[(x - 1) + "," + y], rightBlock = blocks[(x + 1) + "," + y]; if (leftBlock && rightBlock && leftBlock.id == rightBlock.id) { if (core.hasSpecial(leftBlock.event.id, 16)) - enemyId = leftBlock.event.id; + enemyId1 = leftBlock.event.id; } // 检查上下夹击 var topBlock = blocks[x + "," + (y - 1)], bottomBlock = blocks[x + "," + (y + 1)]; if (topBlock && bottomBlock && topBlock.id == bottomBlock.id) { if (core.hasSpecial(topBlock.event.id, 16)) - enemyId = topBlock.event.id; + enemyId2 = topBlock.event.id; } - if (enemyId != null) { + if (enemyId1 != null || enemyId2 != null) { var leftHp = core.status.hero.hp - (damage[loc] || 0); if (leftHp > 1) { // 上整/下整 var value = Math.floor((leftHp + (core.flags.betweenAttackCeil ? 1 : 0)) / 2); // 是否不超过怪物伤害值 if (core.flags.betweenAttackMax) { - var enemyDamage = core.getDamage(enemyId, x, y, floorId); - if (enemyDamage != null && enemyDamage < value) - value = enemyDamage; + var enemyDamage1 = core.getDamage(enemyId1, x, y, floorId); + if (enemyDamage1 != null && enemyDamage1 < value) + value = enemyDamage1; + var enemyDamage2 = core.getDamage(enemyId2, x, y, floorId); + if (enemyDamage2 != null && enemyDamage2 < value) + value = enemyDamage2; } if (value > 0) { damage[loc] = (damage[loc] || 0) + value; diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 5a8fd939..3653a79c 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -9,7 +9,7 @@ (已完成!) 8. 系统设置菜单中“音量”和“步时”的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化 (已完成!) 9. 建议给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”,用来实现一些如新新2的QTE,录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支 10. 建议给“转变图块”事件增加一个淡入时间参数,用于原本是空地或空气墙的情况,目前这种效果必须借助存在安全隐患的红点 -11. 建议修复勇士后退时跟随者的鬼畜行为,并推出一套能够对跟随者位置和朝向进行读写的API甚至事件,且允许这些信息被计入存档,以实现一些演出效果甚至游戏要素,如新新2用公主占位防冰块 +(已完成!) 11. 建议修复勇士后退时跟随者的鬼畜行为,并推出一套能够对跟随者位置和朝向进行读写的API甚至事件,且允许这些信息被计入存档,以实现一些演出效果甚至游戏要素,如新新2用公主占位防冰块 (已完成!) 12. “设置怪物属性”事件的下拉框目前只支持一部分,另一部分只能通过手敲json再解析来得到,希望提供完整支持 13. 建议给core.moveAction(callback)提供对应的事件,用于在事件中让勇士像事件外一样移动,从而正常触发跑毒和阻激夹域捕等 14. core.openShop()和对应的事件,建议在用于公共事件时简单地退化为“插入公共事件”而不要打断当前事件,把决定权交给作者 @@ -28,13 +28,13 @@ (已完成!) noPass->canPass改成选择框 初始化&读档优化:不一次读取全部楼层并创建 绿钥匙进状态栏 -图块ID不可全数字 +(已完成!) 图块ID不可全数字 怪物详细信息富文本化 (已完成!) for和forEach事件 转向:顺时针/逆时针/反向 事件转向 (已完成!) 合并数值操作事件 -fromLoad,聚集问题 +(已完成!) fromLoad,聚集问题 (不处理) 0. 部分文案的修改,如“地图编辑器”(启动服务.exe中)、“enemys”、“snipe” @@ -59,12 +59,12 @@ fromLoad,聚集问题 (不处理) 19. (来自群友)建议删除2连击和3连击 (不处理) 20. (来自群友)建议优化怪物图块属性中value的结构(退化和攻防光环同理),君浪为此配置了一个独立的表格可供使用(基于在getEnemyInfo、getDamageInfo和afterBattle中各eval一串脚本) (不处理) 21. (来自群友)建议大幅缩减表格的长度,譬如把勾选项和单个数值类紧凑摆放 -(不处理) 22. betweenAttackMax在被四个怪同时夹击时(比如上下楼后或通过事件使勇士和其中一只怪重合了)目前是以上下方向的怪为准,建议在表格注释中予以强调,更合理的做法是在两种怪的战损中取max或min +(已完成!) 22. betweenAttackMax在被四个怪同时夹击时(比如上下楼后或通过事件使勇士和其中一只怪重合了)目前是以上下方向的怪为准,建议在表格注释中予以强调,更合理的做法是在两种怪的战损中取max或min (不处理) 23. displayIdInBook属性不能用于夹击QAQ,同时建议给core.getBlockId()追加一个“如果是怪物,是否按displayIdInBook进行映射”的参数。此外此属性会导致core.hasEnemyLeft()在指定id时失真(不一定是坏事) (不处理) 24. core.hasEnemyLeft()不应该调用core.getCurrentEnemys(),因为后者是用于手册的,它为了按伤害升序排列而调用了core.getDamageInfo(),而core.getDamageInfo()又会调用core.getEnemyInfo(),但作者完全可能在core.getDamageInfo()或core.getEnemyInfo()中使用core.hasEnemyLeft()判断特定id的怪物是否存在从而实现一些类似光环的效果(如协同),这样就会造成死递归 (不处理) 25. 建议新增一个类似“勇士转向”的事件指令————“图块转向”,用于NPC甚至怪物(比如基于索引/数字对4取余),毕竟用转变图块的话不够通用 (已完成!) 26. “勇士转向”会导致跟随者聚集,这不利于演出,建议改成像core.turnHero()一样不聚集跟随者 -27. 勇士后退时跟随者很鬼畜,建议优化(每步聚集算是一种简陋的办法) +(已完成!) 27. 勇士后退时跟随者很鬼畜,建议优化(每步聚集算是一种简陋的办法) (不处理) 28. 勇士的移动帧只有2,建议改为允许作者指定 (不处理) 29. 建议加一对“勇士开始抖动”和“勇士停止抖动”事件指令,来让勇士像图块一样原地抖动(即全局动画)。目前这个效果还只能通过隐藏勇士(或切换透明行走图)并转变图块/图层块来实现且只能用于事件处理中QAQ 30. 建议加一个“视角锁定”事件指令,从而允许用事件改变勇士位置、朝向或行走图时不会使视角重置到以其为中心,用于一些演出效果 @@ -116,7 +116,7 @@ fromLoad,聚集问题 (已完成!) 74. “设置画布属性”的基准线建议增加'hanging'和'ideographic'这两种模式 (已完成!) 75. 建议修复“绘制多行文本”时行距比字号大不太多会导致各行下缘丢失的bug(加大行距又会导致第一行的纵坐标难以估计),此bug在道具商店和1.3倍行距英文看的很明显 76. (来自群友)建议给第一代全局商店像“显示选择项”一样提供图标、颜色和出现条件 -(不处理) 77. 建议给core.searchBlock()新增问号通配符(匹配一个任意字符) +(已完成!增加正则匹配) 77. 建议给core.searchBlock()新增问号通配符(匹配一个任意字符) (已完成!) 78. 建议移除core.setInitData()并将其内容写在startText以方便作者仿照修改 (不处理;有跟随情况下处理很麻烦) 79. 建议给core.drawHero()添加纵横两个偏移参数(目前只有一个),以用于做一些斜向移动的演出 (文档都给秋橙) 80. 在线文档中“系统使用的flag变量”不够完整,建议加以补充