Merge branch 'v2.x' into blockly-entrance
This commit is contained in:
commit
7f79e9be59
@ -714,7 +714,7 @@ if (EvalString_0==''){
|
|||||||
if (EvalString_1=='')title='\\t['+EvalString_0+']';
|
if (EvalString_1=='')title='\\t['+EvalString_0+']';
|
||||||
else title='\\t['+EvalString_0+','+EvalString_1+']';
|
else title='\\t['+EvalString_0+','+EvalString_1+']';
|
||||||
}
|
}
|
||||||
if(EvalString_2 && !(/^(up|center|down|hero|null)(,(hero|null|\d+,\d+|\d+))?$/.test(EvalString_2))) {
|
if(EvalString_2 && !(/^(up|center|down|hero|this)(,(hero|null|\d+,\d+|\d+))?$/.test(EvalString_2))) {
|
||||||
throw new Error('对话框效果的用法请右键点击帮助');
|
throw new Error('对话框效果的用法请右键点击帮助');
|
||||||
}
|
}
|
||||||
EvalString_2 = EvalString_2 && ('\\b['+EvalString_2+']');
|
EvalString_2 = EvalString_2 && ('\\b['+EvalString_2+']');
|
||||||
@ -754,7 +754,7 @@ if (EvalString_0==''){
|
|||||||
if (EvalString_1=='')title='\\t['+EvalString_0+']';
|
if (EvalString_1=='')title='\\t['+EvalString_0+']';
|
||||||
else title='\\t['+EvalString_0+','+EvalString_1+']';
|
else title='\\t['+EvalString_0+','+EvalString_1+']';
|
||||||
}
|
}
|
||||||
if(EvalString_2 && !(/^(up|down)(,hero)?(,([+-]?\d+),([+-]?\d+))?$/.test(EvalString_2))) {
|
if(EvalString_2 && !(/^(up|center|down|hero|this)(,(hero|null|\d+,\d+|\d+))?$/.test(EvalString_2))) {
|
||||||
throw new Error('对话框效果的用法请右键点击帮助');
|
throw new Error('对话框效果的用法请右键点击帮助');
|
||||||
}
|
}
|
||||||
EvalString_2 = EvalString_2 && ('\\b['+EvalString_2+']');
|
EvalString_2 = EvalString_2 && ('\\b['+EvalString_2+']');
|
||||||
|
|||||||
@ -493,8 +493,9 @@ editor_blockly = function () {
|
|||||||
|
|
||||||
var namesObj={};
|
var namesObj={};
|
||||||
|
|
||||||
namesObj.allIds = core.getAllIconIds();
|
namesObj.allIds = ["this"].concat(core.getAllIconIds());
|
||||||
namesObj.allIconIds = namesObj.allIds.concat(Object.keys(core.statusBar.icons).filter(function (x) {
|
namesObj.allIconIds = namesObj.allIds.concat(Object.keys(core.statusBar.icons).filter(function (x) {
|
||||||
|
|
||||||
return core.statusBar.icons[x] instanceof Image;
|
return core.statusBar.icons[x] instanceof Image;
|
||||||
}));
|
}));
|
||||||
namesObj.allImages = Object.keys(core.material.images.images);
|
namesObj.allImages = Object.keys(core.material.images.images);
|
||||||
|
|||||||
@ -388,6 +388,10 @@ editor_datapanel_wrapper = function (editor) {
|
|||||||
printe('不合法的id,请使用字母、数字或下划线,且不能以数字开头')
|
printe('不合法的id,请使用字母、数字或下划线,且不能以数字开头')
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (id == 'hero' || id == 'this' || id == 'none' || id == 'airwall') {
|
||||||
|
printe('不得使用保留关键字作为id!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
editor.file.changeIdAndIdnum(id, null, editor_mode.info, function (err) {
|
editor.file.changeIdAndIdnum(id, null, editor_mode.info, function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
printe(err);
|
printe(err);
|
||||||
|
|||||||
@ -1579,10 +1579,12 @@ control.prototype._replayAction_getNext = function (action) {
|
|||||||
control.prototype._replayAction_moveDirectly = function (action) {
|
control.prototype._replayAction_moveDirectly = function (action) {
|
||||||
if (action.indexOf("move:")!=0) return false;
|
if (action.indexOf("move:")!=0) return false;
|
||||||
// 忽略连续的瞬移事件
|
// 忽略连续的瞬移事件
|
||||||
while (core.status.replay.toReplay.length>0 &&
|
if (!core.hasFlag('poison')) {
|
||||||
core.status.replay.toReplay[0].indexOf('move:')==0) {
|
while (core.status.replay.toReplay.length>0 &&
|
||||||
core.status.route.push(action);
|
core.status.replay.toReplay[0].indexOf('move:')==0) {
|
||||||
action = core.status.replay.toReplay.shift();
|
core.status.route.push(action);
|
||||||
|
action = core.status.replay.toReplay.shift();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var pos=action.substring(5).split(":");
|
var pos=action.substring(5).split(":");
|
||||||
|
|||||||
@ -988,7 +988,7 @@ events.prototype.insertCommonEvent = function (name, x, y, callback, addToLast)
|
|||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.insertAction(commonEvent, x, y, callback, addToLast);
|
this.insertAction({"type": "dowhile", "condition": "false", "data": commonEvent}, x, y, callback, addToLast);
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 获得一个公共事件 //////
|
////// 获得一个公共事件 //////
|
||||||
|
|||||||
@ -53,6 +53,7 @@ icons.prototype._getAnimateFrames = function (cls, useOriginValue) {
|
|||||||
icons.prototype.getTilesetOffset = function (id) {
|
icons.prototype.getTilesetOffset = function (id) {
|
||||||
|
|
||||||
if (typeof id == 'string') {
|
if (typeof id == 'string') {
|
||||||
|
id = core.getIdOfThis(id);
|
||||||
// Tileset的ID必须是 X+数字 的形式
|
// Tileset的ID必须是 X+数字 的形式
|
||||||
if (!/^X\d+$/.test(id)) return null;
|
if (!/^X\d+$/.test(id)) return null;
|
||||||
id = parseInt(id.substring(1));
|
id = parseInt(id.substring(1));
|
||||||
@ -74,4 +75,4 @@ icons.prototype.getTilesetOffset = function (id) {
|
|||||||
startOffset += this.tilesetStartOffset;
|
startOffset += this.tilesetStartOffset;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
10
libs/maps.js
10
libs/maps.js
@ -79,6 +79,7 @@ maps.prototype._mapIntoBlocks = function (map, floor, floorId) {
|
|||||||
|
|
||||||
////// 从ID获得数字 //////
|
////// 从ID获得数字 //////
|
||||||
maps.prototype.getNumberById = function (id) {
|
maps.prototype.getNumberById = function (id) {
|
||||||
|
id = this.getIdOfThis(id);
|
||||||
core.status.id2number = core.status.id2number || {};
|
core.status.id2number = core.status.id2number || {};
|
||||||
if (core.status.id2number[id] != null) return core.status.id2number[id];
|
if (core.status.id2number[id] != null) return core.status.id2number[id];
|
||||||
return core.status.id2number[id] = this._getNumberById(id);
|
return core.status.id2number[id] = this._getNumberById(id);
|
||||||
@ -109,6 +110,13 @@ maps.prototype.getBlockById = function (id) {
|
|||||||
return this.getBlockByNumber(this.getNumberById(id));
|
return this.getBlockByNumber(this.getNumberById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maps.prototype.getIdOfThis = function (id) {
|
||||||
|
if (id != 'this') return id;
|
||||||
|
if (core.status.event.id != 'action') return id;
|
||||||
|
if (!core.status.event.data || core.status.event.data.x == null || core.status.event.data.y == null) return id;
|
||||||
|
return core.getBlockId(core.status.event.data.x, core.status.event.data.y) || id;
|
||||||
|
}
|
||||||
|
|
||||||
////// 数字和ID的对应关系 //////
|
////// 数字和ID的对应关系 //////
|
||||||
maps.prototype.initBlock = function (x, y, id, addInfo, eventFloor) {
|
maps.prototype.initBlock = function (x, y, id, addInfo, eventFloor) {
|
||||||
var disable = null;
|
var disable = null;
|
||||||
@ -562,8 +570,6 @@ maps.prototype._canMoveDirectly_checkGlobal = function () {
|
|||||||
if (core.status.thisMap.cannotMoveDirectly) return false;
|
if (core.status.thisMap.cannotMoveDirectly) return false;
|
||||||
// flag:cannotMoveDirectly为true:不能
|
// flag:cannotMoveDirectly为true:不能
|
||||||
if (core.hasFlag('cannotMoveDirectly')) return false;
|
if (core.hasFlag('cannotMoveDirectly')) return false;
|
||||||
// 中毒状态:不能
|
|
||||||
if (core.hasFlag('poison')) return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
11
libs/ui.js
11
libs/ui.js
@ -596,7 +596,7 @@ ui.prototype.closePanel = function () {
|
|||||||
if (core.status.hero && core.status.hero.flags) {
|
if (core.status.hero && core.status.hero.flags) {
|
||||||
// 清除全部临时变量
|
// 清除全部临时变量
|
||||||
Object.keys(core.status.hero.flags).forEach(function (name) {
|
Object.keys(core.status.hero.flags).forEach(function (name) {
|
||||||
if (name.startsWith("@temp@")) {
|
if (name.startsWith("@temp@") || /^arg\d+$/.test(name)) {
|
||||||
delete core.status.hero.flags[name];
|
delete core.status.hero.flags[name];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -752,7 +752,7 @@ ui.prototype._getPosition = function (content) {
|
|||||||
py = core.status.event.data.y;
|
py = core.status.event.data.y;
|
||||||
}
|
}
|
||||||
content = content.replace("\b", "\\b")
|
content = content.replace("\b", "\\b")
|
||||||
.replace(/\\b\[(up|center|down|hero|null)(,(hero|null|\d+,\d+|\d+))?]/g, function (s0, s1, s2, s3) {
|
.replace(/\\b\[(up|center|down|hero|this)(,(hero|null|\d+,\d+|\d+))?]/g, function (s0, s1, s2, s3) {
|
||||||
pos = s1;
|
pos = s1;
|
||||||
if (s3 == 'hero' || s1=='hero' && !s3) {
|
if (s3 == 'hero' || s1=='hero' && !s3) {
|
||||||
px = core.status.hero.loc.x;
|
px = core.status.hero.loc.x;
|
||||||
@ -776,7 +776,7 @@ ui.prototype._getPosition = function (content) {
|
|||||||
noPeak = core.getBlockId(px, py) == null;
|
noPeak = core.getBlockId(px, py) == null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(pos=='hero' || pos=='null'){
|
if(pos=='hero' || pos=='this'){
|
||||||
pos = py==null?'center':(py>=core.__HALF_SIZE__? 'up':'down');
|
pos = py==null?'center':(py>=core.__HALF_SIZE__? 'up':'down');
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
@ -974,6 +974,7 @@ ui.prototype._getDrawableIconInfo = function (id) {
|
|||||||
if (id && id.indexOf('flag:') === 0) {
|
if (id && id.indexOf('flag:') === 0) {
|
||||||
id = core.getFlag(id.substring(5), id);
|
id = core.getFlag(id.substring(5), id);
|
||||||
}
|
}
|
||||||
|
id = core.getIdOfThis(id);
|
||||||
var image = null, icon = null;
|
var image = null, icon = null;
|
||||||
["terrains","animates","items","npcs","enemys"].forEach(function (v) {
|
["terrains","animates","items","npcs","enemys"].forEach(function (v) {
|
||||||
if (core.material.icons[v][id] != null) {
|
if (core.material.icons[v][id] != null) {
|
||||||
@ -1401,10 +1402,12 @@ ui.prototype._drawTextBox_drawTitleAndIcon = function (titleInfo, hPos, vPos, al
|
|||||||
// --- 勇士
|
// --- 勇士
|
||||||
if (titleInfo.image == core.material.images.hero) {
|
if (titleInfo.image == core.material.images.hero) {
|
||||||
if (core.status.hero.animate) {
|
if (core.status.hero.animate) {
|
||||||
|
var direction = core.getHeroLoc('direction');
|
||||||
|
if (direction == 'up') direction = 'down';
|
||||||
core.status.boxAnimateObjs.push({
|
core.status.boxAnimateObjs.push({
|
||||||
'bgx': hPos.left + 15, 'bgy': image_top, 'bgWidth': 32, 'bgHeight': titleInfo.height,
|
'bgx': hPos.left + 15, 'bgy': image_top, 'bgWidth': 32, 'bgHeight': titleInfo.height,
|
||||||
'x': hPos.left + 15, 'y': image_top, 'height': titleInfo.height, 'animate': 4,
|
'x': hPos.left + 15, 'y': image_top, 'height': titleInfo.height, 'animate': 4,
|
||||||
'image': titleInfo.image, 'pos': core.material.icons.hero[core.getHeroLoc('direction')].loc * titleInfo.height
|
'image': titleInfo.image, 'pos': core.material.icons.hero[direction].loc * titleInfo.height
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
core.clearMap('ui', hPos.left + 15, image_top, 32, titleInfo.height);
|
core.clearMap('ui', hPos.left + 15, image_top, 32, titleInfo.height);
|
||||||
|
|||||||
@ -1287,6 +1287,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
// 判定能否瞬移到该点
|
// 判定能否瞬移到该点
|
||||||
if (ignoreSteps == null) ignoreSteps = core.canMoveDirectly(x, y);
|
if (ignoreSteps == null) ignoreSteps = core.canMoveDirectly(x, y);
|
||||||
if (ignoreSteps >= 0) {
|
if (ignoreSteps >= 0) {
|
||||||
|
// 中毒也允许瞬移
|
||||||
|
if (core.hasFlag('poison')) {
|
||||||
|
var damage = ignoreSteps * core.values.poisonDamage;
|
||||||
|
if (damage >= core.status.hero.hp) return false;
|
||||||
|
core.status.hero.statistics.poisonDamage += damage;
|
||||||
|
core.status.hero.hp -= damage;
|
||||||
|
}
|
||||||
|
|
||||||
core.clearMap('hero');
|
core.clearMap('hero');
|
||||||
// 获得勇士最后的朝向
|
// 获得勇士最后的朝向
|
||||||
var lastDirection = core.status.route[core.status.route.length - 1];
|
var lastDirection = core.status.route[core.status.route.length - 1];
|
||||||
@ -1301,6 +1309,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
// 统计信息
|
// 统计信息
|
||||||
core.status.hero.statistics.moveDirectly++;
|
core.status.hero.statistics.moveDirectly++;
|
||||||
core.status.hero.statistics.ignoreSteps += ignoreSteps;
|
core.status.hero.statistics.ignoreSteps += ignoreSteps;
|
||||||
|
if (core.hasFlag('poison')) {
|
||||||
|
core.updateStatusBar();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -67,7 +67,7 @@
|
|||||||
(已完成!) 勇士帧动画
|
(已完成!) 勇士帧动画
|
||||||
(不处理;现在静止状态可以有帧动画了,所以不考虑行走过程动画) 行走动画
|
(不处理;现在静止状态可以有帧动画了,所以不考虑行走过程动画) 行走动画
|
||||||
合并main中一些设置内容
|
合并main中一些设置内容
|
||||||
\t[this], 勇士朝下,flag:arg清理,瞬移扣血
|
(已完成!) \t[this], 勇士朝下,flag:arg清理,瞬移扣血
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user