修复商店录像bug;怪物属性多选框;修复接档工具bug

This commit is contained in:
ckcz123 2020-05-25 13:13:41 +08:00
parent fc760bda46
commit 8b183544c9
12 changed files with 129 additions and 50 deletions

View File

@ -78,6 +78,7 @@
- color 取色器
- point 地图选点
- disable 不允许编辑
- popCheckBoxSet 以弹窗形式多选框
当某个event例如 门信息编辑 无法适应修改后的数据结构, 可以修改事件编辑器, 也可以把_type改成textarea
以上类型的格式要如何写请搜索例如`"_type": "checkboxSet"`来查找例子, 此处不展示

View File

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

View File

@ -49,11 +49,12 @@ editor_table_wrapper = function (editor) {
editor_table.prototype.checkboxSetMember = function (value,key,prefixString) {
return /* html */`${prefixString}<input key='${key}' ctype='${typeof key}' type='checkbox' class='checkboxSetMember' onchange='editor.table.checkboxSetMemberOnchange(this)' ${(value ? 'checked ' : '')}/>\n`;
}
editor_table.prototype.editGrid = function (showComment, showEdit, showCopy) {
editor_table.prototype.editGrid = function (showComment, type) {
var list = [];
if (showComment) list.push("<button onclick='editor.table.onCommentBtnClick(this)'>注释</button>");
if (showEdit) list.push("<button onclick='editor.table.onEditBtnClick(this)' style='background-color: #ddf8ff'>编辑</button>");
if (showCopy) list.push("<button onclick='editor.table.onCopyBtnClick(this)'>复制</button>");
if (type != 'select' && type != 'checkbox' && type != 'checkboxSet' && type != 'disable')
list.push("<button onclick='editor.table.onEditBtnClick(this)' style='background-color: #ddf8ff'>编辑</button>");
if (type == 'disable') list.push("<button onclick='editor.table.onCopyBtnClick(this)'>复制</button>");
return list.join(' ');
}
@ -80,7 +81,7 @@ editor_table_wrapper = function (editor) {
<td title="${field}">${shortField}</td>
<td title="${commentHTMLescape}" cobj="${cobjstr}">${shortComment || commentHTMLescape}</td>
<td><div class="etableInputDiv ${type}">${tdstr}</div></td>
<td>${editor.table.editGrid(shortComment, type != 'select' && type != 'checkbox' && type != 'checkboxSet' && type != 'disable', type == 'disable')}</td>
<td>${editor.table.editGrid(shortComment, type)}</td>
</tr>\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();
})
}
/**
* 删除表格项
*/

View File

@ -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 += "</ul>";
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 += '<br/>';
});
html += "</p>";
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 = '<table style="width: 100%">';
for (var index = 0; index < keys.length; index++) {
var one = keys[index];
if (index % 3 == 0) {
table += '<tr>';
}
table += `<td style='color:black'>${prefixStrings[index]}<input type="checkbox" _type="${typeof one}" key="${one}" class="uieventCheckboxSet" ${value.indexOf(one) >= 0? 'checked' : ''}/></td>`;
if (index % 3 == 2) {
table += '</tr>';
}
}
if (keys.length % 3 != 0) table += '</tr>';
table += '</table>';
uievent.elements.extraBody.innerHTML = "<p>"+table+"</p>";
}
editor.constructor.prototype.uievent=uievent;
}

View File

@ -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?'<br>':'')+name+'')
c.push(name+"("+array[index][0]+")")
}
return {
"prefix":c,

View File

@ -558,8 +558,7 @@
<div id='uieventBody'>
<canvas class='gameCanvas' id='uievent' width='416' height='416'></canvas>
<div id="selectPointBox"></div>
<div id="uieventUsedFlagList" style="display: none"></div>
<div id="uieventMaterialList" style="display: none"></div>
<div id="uieventExtraBody" style="display: none"></div>
</div>
<div id="selectPoint">
<select id="selectPointFloor"></select>

View File

@ -541,8 +541,7 @@
<div id='uieventBody'>
<canvas class='gameCanvas' id='uievent' width='416' height='416'></canvas>
<div id="selectPointBox"></div>
<div id="uieventUsedFlagList" style="display: none; margin-top: -10px"></div>
<div id="uieventMaterialList" style="display: none; margin-top: -10px"></div>
<div id="uieventExtraBody" style="display: none; margin-top: -10px"></div>
</div>
<div id="selectPoint">
<select id="selectPointFloor"></select>

View File

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

View File

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

View File

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

View File

@ -45,12 +45,6 @@ if (functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events.setInitData || !plugin
<li>部分方框进行了合并,请一个个仔细检查是否存在问题。</li>
</ul>
</li>
<li>下拉框切到「楼层属性」,并注意以下内容:
<ul>
<li><code>item_ratio</code>被重命名为<code>ratio</code>,请自行修改。</li>
<li>楼层贴图的结构在V2.7中被修改;请重新制作。</li>
</ul>
</li>
<li>素材区的如下图块有所变动:
<ul>
<li>三色墙和六色门从terrains中解除引用请用animates中的进行绘制。</li>
@ -61,6 +55,13 @@ if (functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events.setInitData || !plugin
<li>npc48的默认动画帧数<code>null</code>改回为4如需静止状态请手动改成1。</li>
</ul>
</li>
<li>下拉框切到「楼层属性」,并注意以下内容:
<ul>
<li><code>item_ratio</code>被重命名为<code>ratio</code>,请自行修改。</li>
<li>(你也可以直接改宝石和血瓶的效果,将<code>core.status.thisMap.ratio</code>改成<code>core.status.thisMap.item_ratio</code>。)</li>
<li>楼层贴图的结构在V2.7中被修改;请重新制作。</li>
</ul>
</li>
<li>下拉框切换到「脚本编辑」并请重新编辑各个自己改过的函数可以双开一个原版V266项目和当前接档的项目进行处理
<ul>
<li>请注意V2.7中的经验全部从<code>experience</code>替换成简写的<code>exp</code>;写伤害计算等时请尤其注意。</li>
@ -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

View File

@ -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) 怪物属性多选
图片化文本翻转;绘制矩形(边框)旋转;
-------------