diff --git a/_docs/editor.md b/_docs/editor.md
index 34c9f770..22e369ac 100644
--- a/_docs/editor.md
+++ b/_docs/editor.md
@@ -78,6 +78,7 @@
- color 取色器
- point 地图选点
- disable 不允许编辑
+ - popCheckBoxSet 以弹窗形式多选框
当某个event例如 门信息编辑 无法适应修改后的数据结构, 可以修改事件编辑器, 也可以把_type改成textarea
以上类型的格式要如何写请搜索例如`"_type": "checkboxSet"`来查找例子, 此处不展示
diff --git a/_server/editor_file.js b/_server/editor_file.js
index 0c28dc6f..1087f975 100644
--- a/_server/editor_file.js
+++ b/_server/editor_file.js
@@ -919,10 +919,9 @@ editor_file = function (editor, callback) {
eval("items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a" + value[1] + '=' + JSON.stringify(value[2]));
});
var datastr = 'var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = \n';
- datastr += JSON.stringify(items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a, function (k, v) {
- if (v.id != null) delete v.id;
- return v;
- }, '\t');
+ var items = core.clone(items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a);
+ for (var id in items) delete items[id].id;
+ datastr += JSON.stringify(items, null, '\t');
fs.writeFile('project/items.js', encode(datastr), 'base64', function (err, data) {
callback(err);
});
@@ -934,9 +933,10 @@ editor_file = function (editor, callback) {
});
var datastr = 'var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = \n';
var emap = {};
+ var enemys = enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80;
+ for (var id in enemys) delete enemys[id].id;
var estr = JSON.stringify(enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80, function (k, v) {
- if (v.hp != null) {
- delete v.id;
+ if (v && v.hp != null) {
var id_ = editor.util.guid();
emap[id_] = JSON.stringify(v);
return id_;
diff --git a/_server/editor_table.js b/_server/editor_table.js
index 672d26a5..bc0410e7 100644
--- a/_server/editor_table.js
+++ b/_server/editor_table.js
@@ -49,11 +49,12 @@ editor_table_wrapper = function (editor) {
editor_table.prototype.checkboxSetMember = function (value,key,prefixString) {
return /* html */`${prefixString}\n`;
}
- editor_table.prototype.editGrid = function (showComment, showEdit, showCopy) {
+ editor_table.prototype.editGrid = function (showComment, type) {
var list = [];
if (showComment) list.push("");
- if (showEdit) list.push("");
- if (showCopy) list.push("");
+ if (type != 'select' && type != 'checkbox' && type != 'checkboxSet' && type != 'disable')
+ list.push("");
+ if (type == 'disable') list.push("");
return list.join(' ');
}
@@ -80,7 +81,7 @@ editor_table_wrapper = function (editor) {
${shortField} |
${shortComment || commentHTMLescape} |
${tdstr} |
- ${editor.table.editGrid(shortComment, type != 'select' && type != 'checkbox' && type != 'checkboxSet' && type != 'disable', type == 'disable')} |
+ ${editor.table.editGrid(shortComment, type)} |
\n`
}
@@ -289,7 +290,7 @@ editor_table_wrapper = function (editor) {
case 'checkboxSet':
return editor.table.checkboxSet(thiseval, cobj._checkboxSet.key, cobj._checkboxSet.prefix);
default:
- return editor.table.textarea(thiseval, cobj.indent || 0, cobj._type == 'disable');
+ return editor.table.textarea(thiseval, cobj.indent || 0, cobj._type == 'disable' || cobj._type == 'popCheckboxSet');
}
}
@@ -420,6 +421,7 @@ editor_table_wrapper = function (editor) {
if (cobj._type === 'material') editor.table.selectMaterial(input, cobj);
if (cobj._type === 'color') editor.table.selectColor(input);
if (cobj._type === 'point') editor.table.selectPoint(input);
+ if (cobj._type === 'popCheckboxSet') editor.table.popCheckboxSet(input, cobj);
}
editor_table.prototype.onCopyBtnClick = function (button) {
@@ -451,6 +453,7 @@ editor_table_wrapper = function (editor) {
if (cobj._type === 'material') editor.table.selectMaterial(input, cobj);
if (cobj._type === 'color') editor.table.selectColor(input);
if (cobj._type === 'point') editor.table.selectPoint(input);
+ if (cobj._type === 'popCheckboxSet') editor.table.popCheckboxSet(input, cobj);
} else if (editor_mode.doubleClickMode === 'add') {
editor_mode.doubleClickMode = 'change';
editor.table.addfunc(guid, obj, commentObj, thisTr, input, field, cobj, modeNode)
@@ -503,6 +506,13 @@ editor_table_wrapper = function (editor) {
})
}
+ editor_table.prototype.popCheckboxSet = function (input, cobj) {
+ editor.uievent.popCheckboxSet(JSON.parse(input.value), cobj._checkboxSet, cobj._docs || cobj._data || '请选择多选项', function (value) {
+ input.value = JSON.stringify(value);
+ input.onchange();
+ })
+ }
+
/**
* 删除表格项
*/
diff --git a/_server/editor_ui.js b/_server/editor_ui.js
index f545e4ad..99f01747 100644
--- a/_server/editor_ui.js
+++ b/_server/editor_ui.js
@@ -475,8 +475,7 @@ editor_ui_wrapper = function (editor) {
uievent.elements.selectPointButtons = document.getElementById('selectPointButtons');
uievent.elements.canvas = document.getElementById('uievent');
uievent.elements.usedFlags = document.getElementById('uieventUsedFlags');
- uievent.elements.usedFlagList = document.getElementById('uieventUsedFlagList');
- uievent.elements.materialList = document.getElementById('uieventMaterialList');
+ uievent.elements.extraBody = document.getElementById('uieventExtraBody');
uievent.close = function () {
uievent.isOpen = false;
@@ -524,7 +523,7 @@ editor_ui_wrapper = function (editor) {
uievent.elements.selectPointBox.style.display = 'none';
uievent.elements.canvas.style.display = 'block';
uievent.elements.usedFlags.style.display = 'none';
- uievent.elements.usedFlagList.style.display = 'none';
+ uievent.elements.extraBody.style.display = 'none';
uievent.elements.body.style.overflow = "hidden";
uievent.values.list = list;
@@ -548,7 +547,7 @@ editor_ui_wrapper = function (editor) {
uievent.elements.selectPointBox.style.display = 'block';
uievent.elements.canvas.style.display = 'block';
uievent.elements.usedFlags.style.display = 'none';
- uievent.elements.usedFlagList.style.display = 'none';
+ uievent.elements.extraBody.style.display = 'none';
uievent.elements.body.style.overflow = "hidden";
uievent.elements.yes.onclick = function () {
var floorId = uievent.values.floorId, x = uievent.values.x, y = uievent.values.y;
@@ -679,7 +678,7 @@ editor_ui_wrapper = function (editor) {
uievent.elements.selectPointBox.style.display = 'none';
uievent.elements.canvas.style.display = 'none';
uievent.elements.usedFlags.style.display = 'inline';
- uievent.elements.usedFlagList.style.display = 'block';
+ uievent.elements.extraBody.style.display = 'block';
uievent.elements.body.style.overflow = "auto";
// build flags
@@ -708,7 +707,7 @@ editor_ui_wrapper = function (editor) {
html += x;
});
html += "";
- uievent.elements.usedFlagList.innerHTML = html;
+ uievent.elements.extraBody.innerHTML = html;
}
var hasUsedFlags = function (obj, flag) {
@@ -775,8 +774,7 @@ editor_ui_wrapper = function (editor) {
uievent.elements.selectPointBox.style.display = 'none';
uievent.elements.canvas.style.display = 'none';
uievent.elements.usedFlags.style.display = 'none';
- uievent.elements.usedFlagList.style.display = 'none';
- uievent.elements.materialList.style.display = 'block';
+ uievent.elements.extraBody.style.display = 'block';
uievent.elements.body.style.overflow = "auto";
uievent.elements.yes.onclick = function () {
@@ -808,7 +806,7 @@ editor_ui_wrapper = function (editor) {
html += '
';
});
html += "";
- uievent.elements.materialList.innerHTML = html;
+ uievent.elements.extraBody.innerHTML = html;
});
}
@@ -869,6 +867,66 @@ editor_ui_wrapper = function (editor) {
if (audio.paused) audio.play();
}
+ // ------ 多选框 ------ //
+ uievent.popCheckboxSet = function (value, comments, title, callback) {
+ if (value == null) value = [];
+ if (!(value instanceof Array)) {
+ if (value == 0) value = [];
+ else value = [value];
+ }
+
+ uievent.isOpen = true;
+ uievent.elements.div.style.display = 'block';
+ uievent.mode = 'popCheckboxSet';
+ uievent.elements.selectPoint.style.display = 'none';
+ uievent.elements.yes.style.display = 'block';
+ uievent.elements.title.innerText = title;
+ uievent.elements.selectBackground.style.display = 'none';
+ uievent.elements.selectFloor.style.display = 'none';
+ uievent.elements.selectPointBox.style.display = 'none';
+ uievent.elements.canvas.style.display = 'none';
+ uievent.elements.usedFlags.style.display = 'none';
+ uievent.elements.extraBody.style.display = 'block';
+ uievent.elements.body.style.overflow = "auto";
+
+ uievent.elements.yes.onclick = function () {
+ var list = Array.from(document.getElementsByClassName('uieventCheckboxSet')).filter(function (one) {
+ return one.checked;
+ }).map(function (one) {
+ var value = one.getAttribute('key');
+ if (one.getAttribute('_type') == 'number') value = parseFloat(value);
+ return value;
+ });
+ uievent.close();
+ if (callback) callback(list);
+ }
+
+ var keys=Array.from(comments.key)
+ var prefixStrings=Array.from(comments.prefix)
+ for (var index = 0; index < value.length; index++) {
+ if (keys.indexOf(value[index])==-1) {
+ prefixStrings.push(value[index]+': ')
+ keys.push(value[index])
+ }
+ }
+ var table = '';
+
+ uievent.elements.extraBody.innerHTML = ""+table+"
";
+ }
+
editor.constructor.prototype.uievent=uievent;
}
\ No newline at end of file
diff --git a/_server/table/comment.js b/_server/table/comment.js
index 14a709e0..eddc54cb 100644
--- a/_server/table/comment.js
+++ b/_server/table/comment.js
@@ -167,7 +167,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
},
"special": {
"_leaf": true,
- "_type": "checkboxSet",
+ "_type": "popCheckboxSet",
"_checkboxSet":function(){
var array=functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.enemys.getSpecials()
var b=[],c=[];
@@ -175,7 +175,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
b.push(array[index][0])
var name = array[index][1];
if (name instanceof Function) name = name({});
- c.push((index%2==0&&index>0?'
':'')+name+'')
+ c.push(name+"("+array[index][0]+")")
}
return {
"prefix":c,
diff --git a/editor-mobile.html b/editor-mobile.html
index de06dc87..60895ee4 100644
--- a/editor-mobile.html
+++ b/editor-mobile.html
@@ -558,8 +558,7 @@
diff --git a/editor.html b/editor.html
index a03d70db..6e59f8c2 100644
--- a/editor.html
+++ b/editor.html
@@ -541,8 +541,7 @@
diff --git a/libs/control.js b/libs/control.js
index f099f45b..2f599c52 100644
--- a/libs/control.js
+++ b/libs/control.js
@@ -695,11 +695,7 @@ control.prototype._moveHero_moving = function () {
// 检测是否穿出去
var nx = core.nextX(), ny = core.nextY();
if (nx < 0 || nx >= core.bigmap.width || ny < 0 || ny >= core.bigmap.height) return;
- core.status.heroMoving=-1;
- core.eventMoveHero([core.getHeroLoc('direction')], core.values.moveSpeed, function () {
- core.status.heroMoving=0;
- move();
- });
+ core.eventMoveHero([core.getHeroLoc('direction')], core.values.moveSpeed, move);
}
else {
core.moveAction();
diff --git a/libs/events.js b/libs/events.js
index 509e5092..7b2153d4 100644
--- a/libs/events.js
+++ b/libs/events.js
@@ -2856,10 +2856,12 @@ events.prototype.eventMoveHero = function(steps, time, callback) {
var step = 0, moveSteps = (steps||[]).filter(function (t) {
return ['up','down','left','right','forward','backward'].indexOf(t)>=0;
});
+ core.status.heroMoving = -1;
var animate=window.setInterval(function() {
if (moveSteps.length==0) {
delete core.animateFrame.asyncId[animate];
clearInterval(animate);
+ core.status.heroMoving = 0;
core.drawHero();
if (callback) callback();
}
@@ -2912,6 +2914,7 @@ events.prototype.jumpHero = function (ex, ey, time, callback) {
}
events.prototype._jumpHero_doJump = function (jumpInfo, callback) {
+ core.status.heroMoving = -1;
var animate = window.setInterval(function () {
if (jumpInfo.jump_count > 0)
core.events._jumpHero_jumping(jumpInfo)
@@ -2940,6 +2943,7 @@ events.prototype._jumpHero_finished = function (animate, ex, ey, callback) {
clearInterval(animate);
core.setHeroLoc('x', ex);
core.setHeroLoc('y', ey);
+ core.status.heroMoving = 0;
core.drawHero();
if (callback) callback();
}
diff --git a/libs/utils.js b/libs/utils.js
index 6ada02f9..ae36a708 100644
--- a/libs/utils.js
+++ b/libs/utils.js
@@ -498,7 +498,7 @@ utils.prototype._encodeRoute_encodeOne = function (t) {
else if (t.indexOf('choices:') == 0)
return "C" + t.substring(8);
else if (t.indexOf('shop:') == 0)
- return "S" + t.substring(5);
+ return "S" + t.substring(5) + ":";
else if (t == 'turn')
return 'T';
else if (t.indexOf('turn:') == 0)
diff --git a/migration.html b/migration.html
index e0e58b00..6765c92f 100644
--- a/migration.html
+++ b/migration.html
@@ -45,12 +45,6 @@ if (functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events.setInitData || !plugin
部分方框进行了合并,请一个个仔细检查是否存在问题。
-
下拉框切到「楼层属性」,并注意以下内容:
-
- item_ratio被重命名为ratio,请自行修改。
- - 楼层贴图的结构在V2.7中被修改;请重新制作。
-
-
素材区的如下图块有所变动:
- 三色墙和六色门从terrains中解除引用;请用animates中的进行绘制。
@@ -61,6 +55,13 @@ if (functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events.setInitData || !plugin
- npc48的默认动画帧数
null改回为4;如需静止状态请手动改成1。
+
下拉框切到「楼层属性」,并注意以下内容:
+
+ item_ratio被重命名为ratio,请自行修改。
+ - (你也可以直接改宝石和血瓶的效果,将
core.status.thisMap.ratio改成core.status.thisMap.item_ratio。)
+ - 楼层贴图的结构在V2.7中被修改;请重新制作。
+
+
下拉框切换到「脚本编辑」,并请重新编辑各个自己改过的函数(可以双开一个原版V266项目和当前接档的项目进行处理)。
- 请注意:V2.7中的经验全部从
experience替换成简写的exp;写伤害计算等时请尤其注意。
@@ -116,6 +117,10 @@ function encode(str) {
}))
}
+function random_string() {
+ return (Math.random()+"_"+Math.random()+"_"+Math.random()).replace(".", "");
+}
+
// 接档全局属性
function action_data(callback) {
var data = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
@@ -181,6 +186,11 @@ function action_data(callback) {
delete values.greenJewel;
delete values.moveSpeed;
delete values.floorChangeTime;
+
+ if (flags.enableExperience != null) {
+ flags.enableExp = flags.enableExperience;
+ delete flags.enableExperience;
+ }
var statusList = [
"enableFloor",
"enableName",
@@ -208,6 +218,7 @@ function action_data(callback) {
});
}
statusList.forEach(function (one) { delete flags[one]; });
+ delete flags.enableExperience;
delete flags.pickaxeFourDirections;
delete flags.bombFourDirections;
delete flags.snowFourDirections;
@@ -218,6 +229,7 @@ function action_data(callback) {
delete flags.betweenAttackCeil;
delete flags.startDirectly;
delete flags.enableDisabledShop;
+ delete flags.potionWhileRouting;
delete flags.checkConsole;
// 写入
@@ -246,7 +258,7 @@ function action_enemys(callback) {
var estr = JSON.stringify(enemy, function (k, t) {
if (t && t.hp != null) {
delete t.id;
- var id_ = ":" + k + ":";
+ var id_ = random_string();
emap[id_] = JSON.stringify(t);
return id_;
} else return t;
@@ -340,7 +352,7 @@ function action_items(callback) {
"text": "可以打开一扇红门",
"hideInToolbox": true
},
- "redGem": {
+ "redJewel": {
"cls": "items",
"name": "红宝石",
"text": "攻击+${core.values.redGem}",
@@ -349,7 +361,7 @@ function action_items(callback) {
"useItemEffect": "core.status.hero.atk += core.values.redGem",
"canUseItemEffect": "true"
},
- "blueGem": {
+ "blueJewel": {
"cls": "items",
"name": "蓝宝石",
"text": ",防御+${core.values.blueGem}",
@@ -358,7 +370,7 @@ function action_items(callback) {
"useItemEffect": "core.status.hero.def += core.values.blueGem",
"canUseItemEffect": "true"
},
- "greenGem": {
+ "greenJewel": {
"cls": "items",
"name": "绿宝石",
"text": ",护盾+${core.values.greenGem}",
@@ -367,7 +379,7 @@ function action_items(callback) {
"useItemEffect": "core.status.hero.mdef += core.values.greenGem",
"canUseItemEffect": "true"
},
- "yellowGem": {
+ "yellowJewel": {
"cls": "items",
"name": "黄宝石",
"text": "可以进行加点",
@@ -513,12 +525,11 @@ function action_items(callback) {
for (var id in data) {
items[id] = data[id];
}
+ delete items.snow;
var datastr = 'var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = \n';
- datastr += JSON.stringify(items, function (k, v) {
- if (v && v.id != null) delete v.id;
- return v;
- }, '\t');
+ for (var id in items) delete items[id].id;
+ datastr += JSON.stringify(items, null, '\t');
fs.writeFile('project/items.js', encode(datastr), 'base64', function (err, data) {
if (err) {
alert('items接档失败!请查看控制台报错,并刷新重试。');
@@ -570,7 +581,7 @@ function action_maps(callback) {
var emap = {};
var estr = JSON.stringify(maps, function (k, v) {
if (v && v.id != null) {
- var id_ = ':' + v.id + ':';
+ var id_ = random_string();
emap[id_] = JSON.stringify(v);
return id_;
} else return v
diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt
index 7b9ea9b0..18a0e758 100644
--- a/v2.x-final更新.txt
+++ b/v2.x-final更新.txt
@@ -68,9 +68,10 @@
(不处理;现在静止状态可以有帧动画了,所以不考虑行走过程动画) 行走动画
(已完成!) 合并main中一些设置内容
(已完成!) \t[this], 勇士朝下,flag:arg清理,瞬移扣血
-(OK) 同步存档合并;(OK) 失去焦点右键;(OK) 竖屏标题界面背景
+(OK) 同步存档合并;(OK) 失去焦点右键;(OK) 竖屏标题界面背景;(OK)商店录像bug
(OK) 右键反复弹出;(OK) 上下楼梯绑定楼传;(OK) 属性框出现0问题;(OK) 上下楼点选点
-地图编辑框无效;jumpHero和帧动画冲突;图片化文本翻转;bookDetails重复计算buff
+地图编辑框无效;(OK) jumpHero和帧动画冲突;bookDetails重复计算buff;(OK) 怪物属性多选
+图片化文本翻转;绘制矩形(边框)旋转;
-------------