四方向夹击判定

This commit is contained in:
ckcz123 2020-05-10 09:55:58 +08:00
parent 461caa933e
commit a516d45189
4 changed files with 23 additions and 17 deletions

View File

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

View File

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

View File

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

View File

@ -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变量”不够完整建议加以补充