怪物的faceIds

This commit is contained in:
ckcz123 2021-07-31 11:30:17 +08:00
parent b8b9367da3
commit 59c1828e16
7 changed files with 64 additions and 14 deletions

View File

@ -617,7 +617,7 @@ return code;
faceIds_m
: '行走图朝向:' BGNL? Newline '向上ID' IdString? '向下ID' IdString? '向左ID' IdString? '向右ID' IdString? BEND
: '行走图朝向:' BGNL? Newline '向下ID' IdString? '向左ID' IdString? '向右ID' IdString? '向上ID' IdString? BEND
/* faceIds_m
@ -626,10 +626,10 @@ default : ["","","",""]
allIds : ['IdString_0','IdString_1','IdString_2','IdString_3']
helpUrl : /_docs/#/instruction
return '{' + [
IdString_0 && ('"up": "' + IdString_0 +'"'),
IdString_1 && ('"down": "' + IdString_1 +'"'),
IdString_2 && ('"left": "' + IdString_2 +'"'),
IdString_3 && ('"right": "' + IdString_3 +'"'),
IdString_0 && ('"down": "' + IdString_0 +'"'),
IdString_1 && ('"left": "' + IdString_1 +'"'),
IdString_2 && ('"right": "' + IdString_2 +'"'),
IdString_3 && ('"up": "' + IdString_3 +'"'),
].filter(function (x) { return x; }).join(', ') + '}\n';
*/;

View File

@ -115,7 +115,7 @@ ActionParser.prototype.parse = function (obj,type) {
case 'faceIds':
if(!obj) obj={};
return MotaActionBlocks['faceIds_m'].xmlText([obj.up||"", obj.down||"", obj.left||"", obj.right||""]);
return MotaActionBlocks['faceIds_m'].xmlText([obj.down||"", obj.left||"", obj.right||"", obj.up||""]);
case 'mainStyle':
if(!obj) obj={};

View File

@ -306,7 +306,8 @@ editor_file = function (editor, callback) {
callback('不能对自动元件进行自动注册!');
return;
}
if (image=='npc48' && confirm("你想绑定npc48的朝向么\n如果是则会将最后四个npc48的faceIds进行自动绑定。")) {
if ((image=='npcs' || image=='npc48' || image == 'enemys' || image == 'enemy48')
&& confirm("你想绑定图块的朝向么?\n如果是则会将最后四个注册图块的faceIds进行自动绑定。")) {
bindFaceIds = true;
}
var c=image.toUpperCase().charAt(0);
@ -353,10 +354,17 @@ editor_file = function (editor, callback) {
var i = faceIds.length - 4;
var down = faceIds[i], left = faceIds[i+1], right = faceIds[i+2], up = faceIds[i+3];
var obj = {down: down.id, left: left.id, right: right.id, up: up.id};
mapActions.push(["add", "['" + down.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + left.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + right.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + up.idnum + "']['faceIds']", obj]);
if (image.indexOf('enemy')==0) {
templateActions.push(["add", "['" + down.id + "']['faceIds']", obj]);
templateActions.push(["add", "['" + left.id + "']['faceIds']", obj]);
templateActions.push(["add", "['" + right.id + "']['faceIds']", obj]);
templateActions.push(["add", "['" + up.id + "']['faceIds']", obj]);
} else {
mapActions.push(["add", "['" + down.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + left.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + right.idnum + "']['faceIds']", obj]);
mapActions.push(["add", "['" + up.idnum + "']['faceIds']", obj]);
}
}
}

View File

@ -135,6 +135,13 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_docs": "手册ID",
"_data": "在怪物手册中映射到的怪物ID。如果此项不为null则在怪物手册中将用目标ID来替换该怪物原本的ID。常被运用在同一个怪物的多朝向上。"
},
"faceIds": {
"_leaf": true,
"_type": "event",
"_event": "faceIds",
"_docs": "行走图朝向",
"_data": "行走图朝向。在勇士撞上图块时,或图块在移动时,会自动选择最合适的朝向图块(如果存在定义)来进行绘制。"
},
"hp": {
"_leaf": true,
"_type": "textarea",
@ -374,7 +381,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_type": "event",
"_event": "faceIds",
"_docs": "行走图朝向",
"_data": "行走图朝向仅对npc48有效。在勇士撞上NPC时或NPC在移动时,会自动选择最合适的朝向图块(如果存在定义)来进行绘制。"
"_data": "行走图朝向。在勇士撞上图块时,或图块在移动时,会自动选择最合适的朝向图块(如果存在定义)来进行绘制。"
}
}
},

View File

@ -30,6 +30,16 @@ enemys.prototype.getEnemys = function () {
}
}
}
// 将所有怪物的各项属性映射到朝下的
for (var id in enemys) {
if (enemys[id].faceIds) {
var downId = enemys[id].faceIds.down;
if (downId != null && downId != id && enemys[downId]) {
enemys[id] = core.clone(enemys[downId]);
enemys[id].id = id;
}
}
}
return enemys;
}
@ -365,8 +375,8 @@ enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) {
var enemy = core.material.enemys[enemyId];
if (!enemy) return null;
// 检查displayIdInBook
return core.material.enemys[enemy.displayIdInBook] || enemy;
// 检查朝向;displayIdInBook
return core.material.enemys[(enemy.faceIds || {}).down] || core.material.enemys[enemy.displayIdInBook] || enemy;
}
enemys.prototype._getCurrentEnemys_addEnemy = function (enemyId, enemys, used, x, y, floorId) {

View File

@ -419,6 +419,17 @@ events.prototype._trigger_ignoreChangeFloor = function (block) {
}
events.prototype._sys_battle = function (data, callback) {
// 检查是否需要改变朝向
if (data.x == core.nextX() && data.y == core.nextY()) {
var dir = core.turnDirection(":back");
var id = data.event.id, toId = (data.event.faceIds || {})[dir];
if (toId && id != toId) {
var number = core.getNumberById(toId);
if (number > 0)
core.setBlock(number, data.x, data.y);
}
}
// 检查战前事件
var beforeBattle = [];
core.push(beforeBattle, core.floors[core.status.floorId].beforeBattle[data.x + "," + data.y]);

View File

@ -218,6 +218,14 @@ maps.prototype.initBlock = function (x, y, id, addInfo, eventFloor) {
}
delete block.event.canPass;
// 增加怪物的faceIds
if (block.event.cls.indexOf("enemy") ==0 ) {
var enemy = core.material.enemys[block.event.id];
if (enemy && enemy.faceIds) {
block.event.faceIds = enemy.faceIds;
}
}
if (addInfo) this._addInfo(block);
if (eventFloor) {
this._addEvent(block, x, y, (eventFloor.events || {})[x + "," + y]);
@ -1883,6 +1891,12 @@ maps.prototype.searchBlockWithFilter = function (blockFilter, floorId, showDisab
return result;
}
////// 获得某个图块其行走图朝向朝下的图块ID //////
maps.prototype.getFaceDownId = function (block) {
if (block == null || !block.event) return null;
return (block.event.faceIds || {}).down || block.event.id;
}
// -------- 启用/禁用图块,楼层贴图 -------- //
////// 将某个块从禁用变成启用状态 //////