commit
4a02b73cae
@ -776,7 +776,8 @@ core.getCurrentEnemys(floorId)
|
|||||||
|
|
||||||
|
|
||||||
core.hasEnemyLeft(enemyId, floorId)
|
core.hasEnemyLeft(enemyId, floorId)
|
||||||
检查某个楼层是否还有剩余的(指定)怪物。floorId为楼层ID,可忽略表示当前楼层。
|
检查某个楼层是否还有剩余的(指定)怪物。
|
||||||
|
floorId为楼层ID,可忽略表示当前楼层。也可以传数组如["MT0","MT1"]同时检测多个楼层。
|
||||||
enemyId如果不填或null则检查是否剩余任何怪物,否则只检查是否剩余指定的某类怪物。
|
enemyId如果不填或null则检查是否剩余任何怪物,否则只检查是否剩余指定的某类怪物。
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -587,7 +587,7 @@ default : ["","","",500,false]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -620,7 +620,7 @@ default : ["","","",500,false]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -761,7 +761,7 @@ default : ["","",""]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -792,7 +792,7 @@ default : ["","",""]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -823,7 +823,7 @@ default : ["bg","","",""]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -854,7 +854,7 @@ default : ["bg","","",""]
|
|||||||
colour : this.mapColor
|
colour : this.mapColor
|
||||||
var floorstr = '';
|
var floorstr = '';
|
||||||
if (EvalString_0 && EvalString_1) {
|
if (EvalString_0 && EvalString_1) {
|
||||||
var pattern1 = /^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/;
|
var pattern1 = /^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/;
|
||||||
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
if(pattern1.test(EvalString_0) || pattern1.test(EvalString_1)){
|
||||||
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
EvalString_0=MotaActionFunctions.PosString_pre(EvalString_0);
|
||||||
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
EvalString_1=MotaActionFunctions.PosString_pre(EvalString_1);
|
||||||
@ -1157,7 +1157,7 @@ helpUrl : https://h5mota.com/games/template/docs/#/event?id=animate%EF%BC%9A%E6%
|
|||||||
default : ["zone","hero",false]
|
default : ["zone","hero",false]
|
||||||
colour : this.soundColor
|
colour : this.soundColor
|
||||||
if (EvalString_0) {
|
if (EvalString_0) {
|
||||||
if(/^flag:[0-9a-zA-Z_][0-9a-zA-Z_\-]*,flag:[0-9a-zA-Z_][0-9a-zA-Z_\-]*$/.test(EvalString_0)) {
|
if(/^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+),flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/.test(EvalString_0)) {
|
||||||
EvalString_0=', "loc": ["'+EvalString_0.split(',').join('","')+'"]';
|
EvalString_0=', "loc": ["'+EvalString_0.split(',').join('","')+'"]';
|
||||||
} else if (/hero|([+-]?\d+),([+-]?\d+)/.test(EvalString_0)) {
|
} else if (/hero|([+-]?\d+),([+-]?\d+)/.test(EvalString_0)) {
|
||||||
if(EvalString_0.indexOf(',')!==-1)EvalString_0='['+EvalString_0+']';
|
if(EvalString_0.indexOf(',')!==-1)EvalString_0='['+EvalString_0+']';
|
||||||
@ -2857,13 +2857,14 @@ MotaActionFunctions.EvalString_pre = function(EvalString){
|
|||||||
|
|
||||||
MotaActionFunctions.IdString_pre = function(IdString){
|
MotaActionFunctions.IdString_pre = function(IdString){
|
||||||
if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。');
|
if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。');
|
||||||
if (IdString && !(/^[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/.test(IdString)))throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符');
|
if (IdString && !(/^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/.test(IdString)) && !(/^[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/.test(IdString)))
|
||||||
|
throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符');
|
||||||
return IdString;
|
return IdString;
|
||||||
}
|
}
|
||||||
|
|
||||||
MotaActionFunctions.PosString_pre = function(PosString){
|
MotaActionFunctions.PosString_pre = function(PosString){
|
||||||
if (!PosString || /^-?\d+$/.test(PosString)) return PosString;
|
if (!PosString || /^-?\d+$/.test(PosString)) return PosString;
|
||||||
if (!(/^flag:[0-9a-zA-Z_][0-9a-zA-Z_:]*$/.test(PosString)))throw new Error(PosString+'中包含了0-9 a-z A-Z _ :之外的字符,或者是没有以flag: 开头');
|
if (!(/^flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)$/.test(PosString)))throw new Error(PosString+'中包含了0-9 a-z A-Z _ 和中文之外的字符,或者是没有以flag: 开头');
|
||||||
return '"'+PosString+'"';
|
return '"'+PosString+'"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,6 +50,7 @@ editor.prototype.init = function (callback) {
|
|||||||
main.init('editor', function () {
|
main.init('editor', function () {
|
||||||
editor_util_wrapper(editor);
|
editor_util_wrapper(editor);
|
||||||
editor_game_wrapper(editor, main, core);
|
editor_game_wrapper(editor, main, core);
|
||||||
|
editor_file_wrapper(editor);
|
||||||
editor_table_wrapper(editor);
|
editor_table_wrapper(editor);
|
||||||
editor_unsorted_1_wrapper(editor);
|
editor_unsorted_1_wrapper(editor);
|
||||||
afterMainInit();
|
afterMainInit();
|
||||||
@ -65,7 +66,7 @@ editor.prototype.init = function (callback) {
|
|||||||
editor_mode = editor_mode(editor);
|
editor_mode = editor_mode(editor);
|
||||||
editor_unsorted_2_wrapper(editor_mode);
|
editor_unsorted_2_wrapper(editor_mode);
|
||||||
editor.mode = editor_mode;
|
editor.mode = editor_mode;
|
||||||
core.resetGame(core.firstData.hero, null, core.firstData.floorId, core.initStatus.maps);
|
core.resetGame(core.firstData.hero, null, core.firstData.floorId, core.clone(core.initStatus.maps));
|
||||||
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function () {
|
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function () {
|
||||||
afterCoreReset();
|
afterCoreReset();
|
||||||
}, true);
|
}, true);
|
||||||
|
|||||||
@ -2,7 +2,11 @@ editor_blockly = function () {
|
|||||||
|
|
||||||
var editor_blockly = {};
|
var editor_blockly = {};
|
||||||
|
|
||||||
initscript = String.raw`
|
/////////////////initscript start/////////////////////////////
|
||||||
|
// do not use String.raw because of highlighting
|
||||||
|
// Comment tagged templates
|
||||||
|
// https://marketplace.visualstudio.com/items?itemName=bierner.comment-tagged-templates
|
||||||
|
initscript = /* js */`
|
||||||
(function(){
|
(function(){
|
||||||
var getCategory = function(name,custom){
|
var getCategory = function(name,custom){
|
||||||
for(var node of document.getElementById('toolbox').children) {
|
for(var node of document.getElementById('toolbox').children) {
|
||||||
@ -30,7 +34,7 @@ editor_blockly = function () {
|
|||||||
"textInList": "1F金币商店",
|
"textInList": "1F金币商店",
|
||||||
"use": "money",
|
"use": "money",
|
||||||
"need": "20+10*times*(times+1)",
|
"need": "20+10*times*(times+1)",
|
||||||
"text": "勇敢的武士啊,给我\${need}金币就可以:",
|
"text": "勇敢的武士啊,给我\\\${need}金币就可以:",
|
||||||
"choices": [
|
"choices": [
|
||||||
{"text": "生命+800", "effect": "status:hp+=800"},
|
{"text": "生命+800", "effect": "status:hp+=800"},
|
||||||
{"text": "攻击+4", "effect": "status:atk+=4"},
|
{"text": "攻击+4", "effect": "status:atk+=4"},
|
||||||
@ -188,27 +192,27 @@ editor_blockly = function () {
|
|||||||
'<label text="检测音乐如果没有开启则系统提示开启"></label>',
|
'<label text="检测音乐如果没有开启则系统提示开启"></label>',
|
||||||
MotaActionFunctions.actionParser.parseList({"type": "if", "condition": "!core.musicStatus.bgmStatus",
|
MotaActionFunctions.actionParser.parseList({"type": "if", "condition": "!core.musicStatus.bgmStatus",
|
||||||
"true": [
|
"true": [
|
||||||
"\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳"
|
"\\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳"
|
||||||
],
|
],
|
||||||
"false": []
|
"false": []
|
||||||
}),
|
}),
|
||||||
'<label text="商店购买属性/钥匙"></label>',
|
'<label text="商店购买属性/钥匙"></label>',
|
||||||
MotaActionFunctions.actionParser.parse([
|
MotaActionFunctions.actionParser.parse([
|
||||||
{"type": "choices", "text": "\t[老人,man]少年,你需要钥匙吗?\n我这里有大把的!",
|
{"type": "choices", "text": "\\t[老人,man]少年,你需要钥匙吗?\\n我这里有大把的!",
|
||||||
"choices": [
|
"choices": [
|
||||||
{"text": "黄钥匙(\${9+flag:shop_times}金币)", "color": [255,255,0,1], "action": [
|
{"text": "黄钥匙(\\\${9+flag:shop_times}金币)", "color": [255,255,0,1], "action": [
|
||||||
{"type": "if", "condition": "status:money>=9+flag:shop_times",
|
{"type": "if", "condition": "status:money>=9+flag:shop_times",
|
||||||
"true": [
|
"true": [
|
||||||
{"type": "addValue", "name": "status:money", "value": "-(9+flag:shop_times)"},
|
{"type": "addValue", "name": "status:money", "value": "-(9+flag:shop_times)"},
|
||||||
{"type": "addValue", "name": "item:yellowKey", "value": "1"},
|
{"type": "addValue", "name": "item:yellowKey", "value": "1"},
|
||||||
],
|
],
|
||||||
"false": [
|
"false": [
|
||||||
"\t[老人,man]你的金钱不足!",
|
"\\t[老人,man]你的金钱不足!",
|
||||||
{"type": "revisit"}
|
{"type": "revisit"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]},
|
]},
|
||||||
{"text": "蓝钥匙(\${18+2*flag:shop_times}金币)", "color": [0,0,255,1], "action": [
|
{"text": "蓝钥匙(\\\${18+2*flag:shop_times}金币)", "color": [0,0,255,1], "action": [
|
||||||
]},
|
]},
|
||||||
{"text": "离开", "action": [
|
{"text": "离开", "action": [
|
||||||
{"type": "exit"}
|
{"type": "exit"}
|
||||||
@ -361,7 +365,7 @@ function omitedcheckUpdateFunction(event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var code = Blockly.JavaScript.workspaceToCode(workspace).replace(/\\i/g, '\\\\i');
|
var code = Blockly.JavaScript.workspaceToCode(workspace).replace(/\\\\i/g, '\\\\\\\\i');
|
||||||
codeAreaHL.setValue(code);
|
codeAreaHL.setValue(code);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
codeAreaHL.setValue(String(error));
|
codeAreaHL.setValue(String(error));
|
||||||
@ -433,6 +437,7 @@ function omitedcheckUpdateFunction(event) {
|
|||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
`;
|
`;
|
||||||
|
/////////////////initscript end /////////////////////////////
|
||||||
|
|
||||||
var input_ = '';
|
var input_ = '';
|
||||||
editor_blockly.runOne = function () {
|
editor_blockly.runOne = function () {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
928
_server/editor_file_unsorted.js
Normal file
928
_server/editor_file_unsorted.js
Normal file
@ -0,0 +1,928 @@
|
|||||||
|
editor_file = function (editor, callback) {
|
||||||
|
|
||||||
|
var editor_file = new editor_file_proto();
|
||||||
|
editor.file=editor_file;
|
||||||
|
|
||||||
|
editor.file.loadCommentjs(callback);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.getFloorFileList = function (callback) {
|
||||||
|
checkCallback(callback);
|
||||||
|
/* var fs = editor.fs;
|
||||||
|
fs.readdir('project/floors',function(err, data){
|
||||||
|
callback([data,err]);
|
||||||
|
}); */
|
||||||
|
callback([editor.core.floorIds, null]);
|
||||||
|
}
|
||||||
|
//callback([Array<String>,err:String])
|
||||||
|
editor.file.loadFloorFile = function (filename, callback) {
|
||||||
|
//filename不含'/'不含'.js'
|
||||||
|
checkCallback(callback);
|
||||||
|
|
||||||
|
editor.currentFloorId = editor.core.status.floorId;
|
||||||
|
editor.currentFloorData = editor.core.floors[editor.currentFloorId];
|
||||||
|
}
|
||||||
|
//callback(err:String)
|
||||||
|
editor.file.saveFloorFile = function (callback) {
|
||||||
|
checkCallback(callback);
|
||||||
|
/* if (!isset(editor.currentFloorId) || !isset(editor.currentFloorData)) {
|
||||||
|
callback('未选中文件或无数据');
|
||||||
|
} */
|
||||||
|
var filename = 'project/floors/' + editor.currentFloorId + '.js';
|
||||||
|
var datastr = ['main.floors.', editor.currentFloorId, '=\n'];
|
||||||
|
if (editor.currentFloorData.map == 'new') {
|
||||||
|
/*
|
||||||
|
editor.currentFloorData.map = editor.map.map(function (v) {
|
||||||
|
return v.map(function () {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
var width = parseInt(document.getElementById('newMapWidth').value);
|
||||||
|
var height = parseInt(document.getElementById('newMapHeight').value);
|
||||||
|
var row = [];
|
||||||
|
for (var i=0;i<width;i++) row.push(0);
|
||||||
|
editor.currentFloorData.map = [];
|
||||||
|
for (var i=0;i<height;i++) editor.currentFloorData.map.push(row);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(var ii=0,name;name=['map','bgmap','fgmap'][ii];ii++){
|
||||||
|
var mapArray=editor[name].map(function (v) {
|
||||||
|
return v.map(function (v) {
|
||||||
|
return v.idnum || v || 0
|
||||||
|
})
|
||||||
|
});
|
||||||
|
editor.currentFloorData[name]=mapArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// format 更改实现方式以支持undefined删除
|
||||||
|
var tempJsonObj=Object.assign({},editor.currentFloorData);
|
||||||
|
var tempMap=[['map',editor.util.guid()],['bgmap',editor.util.guid()],['fgmap',editor.util.guid()]];
|
||||||
|
tempMap.forEach(function(v){
|
||||||
|
v[2]=tempJsonObj[v[0]];
|
||||||
|
tempJsonObj[v[0]]=v[1];
|
||||||
|
});
|
||||||
|
var tempJson=JSON.stringify(tempJsonObj, null, 4);
|
||||||
|
tempMap.forEach(function(v){
|
||||||
|
tempJson=tempJson.replace('"'+v[1]+'"','[\n'+ formatMap(v[2],v[0]!='map')+ '\n]')
|
||||||
|
});
|
||||||
|
datastr = datastr.concat([tempJson]);
|
||||||
|
datastr = datastr.join('');
|
||||||
|
alertWhenCompress();
|
||||||
|
fs.writeFile(filename, encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//callback(err:String)
|
||||||
|
editor.file.saveNewFile = function (saveFilename, callback) {
|
||||||
|
//saveAsFilename不含'/'不含'.js'
|
||||||
|
checkCallback(callback);
|
||||||
|
var currData=editor.currentFloorData;
|
||||||
|
var saveStatus = document.getElementById('newMapStatus').checked;
|
||||||
|
|
||||||
|
var title = saveStatus?currData.title:"新建楼层";
|
||||||
|
var name = saveStatus?currData.name:"0";
|
||||||
|
if (/^mt\d+$/i.test(saveFilename)) {
|
||||||
|
name = saveFilename.substring(2);
|
||||||
|
title = "主塔 "+name+" 层";
|
||||||
|
}
|
||||||
|
editor.currentFloorData = {
|
||||||
|
floorId: saveFilename,
|
||||||
|
title: title,
|
||||||
|
name: name,
|
||||||
|
width: parseInt(document.getElementById('newMapWidth').value),
|
||||||
|
height: parseInt(document.getElementById('newMapHeight').value),
|
||||||
|
canFlyTo: saveStatus?currData.canFlyTo:true,
|
||||||
|
canUseQuickShop: saveStatus?currData.canUseQuickShop:true,
|
||||||
|
cannotViewMap: saveStatus?currData.cannotViewMap:false,
|
||||||
|
cannotMoveDirectly: saveStatus?currData.cannotMoveDirectly:false,
|
||||||
|
images: [],
|
||||||
|
item_ratio: saveStatus?currData.item_ratio:1,
|
||||||
|
defaultGround: saveStatus?currData.defaultGround:"ground",
|
||||||
|
bgm: saveStatus?currData.bgm:null,
|
||||||
|
upFloor: null,
|
||||||
|
downFloor: null,
|
||||||
|
color: saveStatus?currData.color:null,
|
||||||
|
weather: saveStatus?currData.weather:null,
|
||||||
|
firstArrive: [],
|
||||||
|
eachArrive: [],
|
||||||
|
parallelDo: "",
|
||||||
|
events: {},
|
||||||
|
changeFloor: {},
|
||||||
|
afterBattle: {},
|
||||||
|
afterGetItem: {},
|
||||||
|
afterOpenDoor: {},
|
||||||
|
cannotMove: {}
|
||||||
|
};
|
||||||
|
Object.keys(editor.currentFloorData).forEach(function (t) {
|
||||||
|
if (editor.currentFloorData[t] == null)
|
||||||
|
delete editor.currentFloorData[t];
|
||||||
|
})
|
||||||
|
editor.currentFloorData.map = "new";
|
||||||
|
editor.currentFloorId = saveFilename;
|
||||||
|
editor.file.saveFloorFile(callback);
|
||||||
|
}
|
||||||
|
editor.file.saveNewFiles = function (floorIdList, from, to, callback) {
|
||||||
|
checkCallback(callback);
|
||||||
|
var currData=editor.currentFloorData;
|
||||||
|
var saveStatus = document.getElementById('newMapsStatus').checked;
|
||||||
|
|
||||||
|
var calValue = function (text, i) {
|
||||||
|
return text.replace(/\${(.*?)}/g, function (word, value) {
|
||||||
|
return eval(value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var width = parseInt(document.getElementById('newMapsWidth').value);
|
||||||
|
var height = parseInt(document.getElementById('newMapsHeight').value);
|
||||||
|
|
||||||
|
var row = [], map = [];
|
||||||
|
for (var i=0;i<width;i++) row.push(0);
|
||||||
|
for (var i=0;i<height;i++) map.push(row);
|
||||||
|
|
||||||
|
var filenames = floorIdList.map(function (v) {return "project/floors/"+v+".js";});
|
||||||
|
var datas = [];
|
||||||
|
for (var i=from;i<=to;i++) {
|
||||||
|
var datastr = ['main.floors.', floorIdList[i-from], '=\n{'];
|
||||||
|
var data = {
|
||||||
|
floorId: floorIdList[i-from],
|
||||||
|
title: calValue(document.getElementById('newFloorTitles').value, i),
|
||||||
|
name: calValue(document.getElementById('newFloorNames').value, i),
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
map: map,
|
||||||
|
canFlyTo: saveStatus?currData.canFlyTo:true,
|
||||||
|
canUseQuickShop: saveStatus?currData.canUseQuickShop:true,
|
||||||
|
cannotViewMap: saveStatus?currData.cannotViewMap:false,
|
||||||
|
cannotMoveDirectly: saveStatus?currData.cannotMoveDirectly:false,
|
||||||
|
images: [],
|
||||||
|
item_ratio: saveStatus?currData.item_ratio:1,
|
||||||
|
defaultGround: saveStatus?currData.defaultGround:"ground",
|
||||||
|
bgm: saveStatus?currData.bgm:null,
|
||||||
|
upFloor: null,
|
||||||
|
downFloor: null,
|
||||||
|
color: saveStatus?currData.color:null,
|
||||||
|
weather: saveStatus?currData.weather:null,
|
||||||
|
firstArrive: [],
|
||||||
|
eachArrive: [],
|
||||||
|
parallelDo: "",
|
||||||
|
events: {},
|
||||||
|
changeFloor: {},
|
||||||
|
afterBattle: {},
|
||||||
|
afterGetItem: {},
|
||||||
|
afterOpenDoor: {},
|
||||||
|
cannotMove: {}
|
||||||
|
};
|
||||||
|
Object.keys(data).forEach(function (t) {
|
||||||
|
if (data[t] == null)
|
||||||
|
delete data[t];
|
||||||
|
else {
|
||||||
|
if (t=='map') {
|
||||||
|
datastr = datastr.concat(['\n"', t, '": [\n', formatMap(data[t]), '\n],']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
datastr = datastr.concat(['\n"', t, '": ', JSON.stringify(data[t], null, 4), ',']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
datastr = datastr.concat(['\n}']);
|
||||||
|
datastr = datastr.join('');
|
||||||
|
datas.push(encode(datastr));
|
||||||
|
}
|
||||||
|
alertWhenCompress();
|
||||||
|
fs.writeMultiFiles(filenames, datas, function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//callback(err:String)
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.autoRegister = function (info, callback) {
|
||||||
|
|
||||||
|
var iconActions = [];
|
||||||
|
var mapActions = [];
|
||||||
|
var templateActions = [];
|
||||||
|
|
||||||
|
var image = info.images;
|
||||||
|
|
||||||
|
if (image=='autotile') {
|
||||||
|
callback('不能对自动元件进行自动注册!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var c=image.toUpperCase().charAt(0);
|
||||||
|
|
||||||
|
// terrains id
|
||||||
|
var terrainsId = [];
|
||||||
|
Object.keys(core.material.icons.terrains).forEach(function (id) {
|
||||||
|
terrainsId[core.material.icons.terrains[id]]=id;
|
||||||
|
})
|
||||||
|
|
||||||
|
var allIds = [];
|
||||||
|
editor.ids.forEach(function (v) {
|
||||||
|
if (v.images==image) {
|
||||||
|
allIds[v.y]=true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
var per_height = image.endsWith('48')?48:32;
|
||||||
|
|
||||||
|
var idnum=300;
|
||||||
|
for (var y=0; y<editor.widthsX[image][3]/per_height;y++) {
|
||||||
|
if (allIds[y]) continue;
|
||||||
|
while (editor.core.maps.blocksInfo[idnum]) idnum++;
|
||||||
|
|
||||||
|
// get id num
|
||||||
|
var id = c+idnum;
|
||||||
|
|
||||||
|
if (image=='terrains' && terrainsId[y] != null) {
|
||||||
|
id=terrainsId[y];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
iconActions.push(["add", "['" + image + "']['" + id + "']", y])
|
||||||
|
}
|
||||||
|
mapActions.push(["add", "['" + idnum + "']", {'cls': image, 'id': id}])
|
||||||
|
if (image=='items')
|
||||||
|
templateActions.push(["add", "['items']['" + id + "']", editor.file.comment._data.items_template]);
|
||||||
|
else if (image.indexOf('enemy')==0)
|
||||||
|
templateActions.push(["add", "['" + id + "']", editor.file.comment._data.enemys_template]);
|
||||||
|
idnum++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mapActions.length==0) {
|
||||||
|
callback("没有要注册的项!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var templist = [];
|
||||||
|
var tempcallback = function (err) {
|
||||||
|
templist.push(err);
|
||||||
|
if (templist.length == 3) {
|
||||||
|
if (templist[0] != null || templist[1] != null || templist[2] != null)
|
||||||
|
callback((templist[0] || '') + '\n' + (templist[1] || '') + '\n' + (templist[2] || ''));
|
||||||
|
//这里如果一个成功一个失败会出严重bug
|
||||||
|
else
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (iconActions.length>0)
|
||||||
|
saveSetting('icons', iconActions, tempcallback);
|
||||||
|
else tempcallback(null);
|
||||||
|
|
||||||
|
saveSetting('maps', mapActions, tempcallback);
|
||||||
|
|
||||||
|
if (image=='items')
|
||||||
|
saveSetting('items', templateActions, tempcallback);
|
||||||
|
else if (image.indexOf('enemy')==0)
|
||||||
|
saveSetting('enemys', templateActions, tempcallback);
|
||||||
|
else tempcallback(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.file.registerAutotile = function (filename, callback) {
|
||||||
|
var idnum = 140;
|
||||||
|
while (editor.core.maps.blocksInfo[idnum]) idnum++;
|
||||||
|
|
||||||
|
var iconActions = [];
|
||||||
|
var mapActions = [];
|
||||||
|
|
||||||
|
iconActions.push(["add", "['autotile']['" + filename + "']", 0]);
|
||||||
|
mapActions.push(["add", "['" + idnum + "']", {'cls': 'autotile', 'id': filename, 'noPass': true}]);
|
||||||
|
|
||||||
|
var templist = [];
|
||||||
|
var tempcallback = function (err) {
|
||||||
|
templist.push(err);
|
||||||
|
if (templist.length == 2) {
|
||||||
|
if (templist[0] != null || templist[1] != null)
|
||||||
|
callback((templist[0] || '') + '\n' + (templist[1] || ''));
|
||||||
|
//这里如果一个成功一个失败会出严重bug
|
||||||
|
else
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
saveSetting('icons', iconActions, tempcallback);
|
||||||
|
saveSetting('maps', mapActions, tempcallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.file.changeIdAndIdnum = function (id, idnum, info, callback) {
|
||||||
|
checkCallback(callback);
|
||||||
|
//检查maps中是否有重复的idnum或id
|
||||||
|
var change = -1;
|
||||||
|
for (var ii in editor.core.maps.blocksInfo) {
|
||||||
|
if (ii == idnum) {
|
||||||
|
//暂时只允许创建新的不允许修改已有的
|
||||||
|
//if (info.idnum==idnum){change=ii;break;}//修改id
|
||||||
|
callback('idnum重复了');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (editor.core.maps.blocksInfo[ii].id == id) {
|
||||||
|
//if (info.id==id){change=ii;break;}//修改idnum
|
||||||
|
callback('id重复了');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if (change!=-1 && change!=idnum){//修改idnum
|
||||||
|
editor.core.maps.blocksInfo[idnum] = editor.core.maps.blocksInfo[change];
|
||||||
|
delete(editor.core.maps.blocksInfo[change]);
|
||||||
|
} else if (change==idnum) {//修改id
|
||||||
|
var oldid = editor.core.maps.blocksInfo[idnum].id;
|
||||||
|
editor.core.maps.blocksInfo[idnum].id = id;
|
||||||
|
for(var ii in editor.core.icons.icons){
|
||||||
|
if (ii.hasOwnProperty(oldid)){
|
||||||
|
ii[id]=ii[oldid];
|
||||||
|
delete(ii[oldid]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {//创建新的
|
||||||
|
editor.core.maps.blocksInfo[idnum]={'cls': info.images, 'id':id};
|
||||||
|
editor.core.icons.icons[info.images][id]=info.y;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
var templist = [];
|
||||||
|
var tempcallback = function (err) {
|
||||||
|
templist.push(err);
|
||||||
|
if (templist.length == 2) {
|
||||||
|
if (templist[0] != null || templist[1] != null)
|
||||||
|
callback((templist[0] || '') + '\n' + (templist[1] || ''));
|
||||||
|
//这里如果一个成功一个失败会出严重bug
|
||||||
|
else
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
saveSetting('maps', [["add", "['" + idnum + "']", {'cls': info.images, 'id': id}]], tempcallback);
|
||||||
|
saveSetting('icons', [["add", "['" + info.images + "']['" + id + "']", info.y]], tempcallback);
|
||||||
|
if (info.images === 'items') {
|
||||||
|
saveSetting('items', [["add", "['items']['" + id + "']", editor.file.comment._data.items_template]], function (err) {
|
||||||
|
if (err) {
|
||||||
|
printe(err);
|
||||||
|
throw(err)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (info.images === 'enemys' || info.images === 'enemy48') {
|
||||||
|
saveSetting('enemys', [["add", "['" + id + "']", editor.file.comment._data.enemys_template]], function (err) {
|
||||||
|
if (err) {
|
||||||
|
printe(err);
|
||||||
|
throw(err)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
//callback(err:String)
|
||||||
|
editor.file.editItem = function (id, actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['items']['name']","红宝石的新名字"],
|
||||||
|
["add","['items']['新的和name同级的属性']",123],
|
||||||
|
["change","['itemEffectTip']","',攻击力+'+editor.core.values.redJewel"],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
var tempindex = value[1].indexOf(']') + 1;
|
||||||
|
value[1] = [value[1].slice(0, tempindex), "['" + id + "']", value[1].slice(tempindex)].join('');
|
||||||
|
});
|
||||||
|
saveSetting('items', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj_ = {};
|
||||||
|
Object.keys(editor.file.comment._data.items._data).forEach(function (v) {
|
||||||
|
if (isset(editor.core.items[v][id]) && v !== 'items')
|
||||||
|
locObj_[v] = editor.core.items[v][id];
|
||||||
|
else
|
||||||
|
locObj_[v] = null;
|
||||||
|
});
|
||||||
|
locObj_['items'] = (function () {
|
||||||
|
var locObj = Object.assign({}, editor.core.items.items[id]);
|
||||||
|
Object.keys(editor.file.comment._data.items._data.items._data).forEach(function (v) {
|
||||||
|
if (!isset(editor.core.items.items[id][v]))
|
||||||
|
locObj[v] = null;
|
||||||
|
});
|
||||||
|
return locObj;
|
||||||
|
})();
|
||||||
|
return locObj_;
|
||||||
|
})(),
|
||||||
|
editor.file.comment._data.items,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
//只有items.cls是items的才有itemEffect和itemEffectTip,keys和constants和tools只有items
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
editor.file.editEnemy = function (id, actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['name']","初级巫师的新名字"],
|
||||||
|
["add","['新的和name同级的属性']",123],
|
||||||
|
["change","['bomb']",null],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
value[1] = "['" + id + "']" + value[1];
|
||||||
|
});
|
||||||
|
saveSetting('enemys', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj = Object.assign({}, editor.core.enemys.enemys[id]);
|
||||||
|
Object.keys(editor.file.comment._data.enemys._data).forEach(function (v) {
|
||||||
|
if (!isset(editor.core.enemys.enemys[id][v]))
|
||||||
|
/* locObj[v]=editor.core.enemys.enemys[id][v];
|
||||||
|
else */
|
||||||
|
locObj[v] = null;
|
||||||
|
});
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.comment._data.enemys,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
editor.file.editMapBlocksInfo = function (idnum, actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['events']",["\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]],
|
||||||
|
["change","['afterBattle']",null],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
var tempmap=[];
|
||||||
|
for(var ii=0;ii<actionList.length;ii++){
|
||||||
|
var value=actionList[ii];
|
||||||
|
// 是tilesets 且未定义 且在这里是第一次定义
|
||||||
|
if(idnum>=editor.core.icons.tilesetStartOffset && !isset(editor.core.maps.blocksInfo[idnum]) && tempmap.indexOf(idnum)===-1){
|
||||||
|
actionList.splice(ii,0,["add","['" + idnum + "']",{"cls": "tileset", "id": "X"+idnum, "noPass": true}]);
|
||||||
|
tempmap.push(idnum);
|
||||||
|
ii++;
|
||||||
|
}
|
||||||
|
value[1] = "['" + idnum + "']" + value[1];
|
||||||
|
}
|
||||||
|
saveSetting('maps', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var sourceobj=editor.core.maps.blocksInfo[idnum];
|
||||||
|
if(!isset(sourceobj) && idnum>=editor.core.icons.tilesetStartOffset)sourceobj={"cls": "tileset", "id": "X"+idnum, "noPass": true}
|
||||||
|
var locObj = Object.assign({}, sourceobj);
|
||||||
|
Object.keys(editor.file.comment._data.maps._data).forEach(function (v) {
|
||||||
|
if (!isset(sourceobj[v]))
|
||||||
|
locObj[v] = null;
|
||||||
|
});
|
||||||
|
locObj.idnum = idnum;
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.comment._data.maps,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.editLoc = function (x, y, actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['events']",["\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]],
|
||||||
|
["change","['afterBattle']",null],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
value[1] = value[1] + "['" + x + "," + y + "']";
|
||||||
|
});
|
||||||
|
saveSetting('floorloc', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj = {};
|
||||||
|
Object.keys(editor.file.comment._data.floors._data.loc._data).forEach(function (v) {
|
||||||
|
if (isset(editor.currentFloorData[v][x + ',' + y]))
|
||||||
|
locObj[v] = editor.currentFloorData[v][x + ',' + y];
|
||||||
|
else
|
||||||
|
locObj[v] = null;
|
||||||
|
});
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.comment._data.floors._data.loc,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.editFloor = function (actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['title']",'样板 3 层'],
|
||||||
|
["change","['color']",null],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
saveSetting('floors', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj = Object.assign({}, editor.currentFloorData);
|
||||||
|
Object.keys(editor.file.comment._data.floors._data.floor._data).forEach(function (v) {
|
||||||
|
if (!isset(editor.currentFloorData[v]))
|
||||||
|
/* locObj[v]=editor.currentFloorData[v];
|
||||||
|
else */
|
||||||
|
locObj[v] = null;
|
||||||
|
});
|
||||||
|
Object.keys(editor.file.comment._data.floors._data.loc._data).forEach(function (v) {
|
||||||
|
delete(locObj[v]);
|
||||||
|
});
|
||||||
|
delete(locObj.map);
|
||||||
|
delete(locObj.bgmap);
|
||||||
|
delete(locObj.fgmap);
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.comment._data.floors._data.floor,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.editTower = function (actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['firstData']['version']",'Ver 1.0.1 (Beta)'],
|
||||||
|
["change","['values']['lavaDamage']",200],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
var data_obj = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
saveSetting('data', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
//var locObj=Object.assign({'main':{}},editor.core.data);
|
||||||
|
var locObj = Object.assign({}, data_obj, {'main': {}});
|
||||||
|
Object.keys(editor.file.dataComment._data.main._data).forEach(function (v) {
|
||||||
|
if (isset(editor.main[v]))
|
||||||
|
locObj.main[v] = data_obj.main[v];
|
||||||
|
else
|
||||||
|
locObj.main[v] = null;
|
||||||
|
});
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.dataComment,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var fmap = {};
|
||||||
|
var fjson = JSON.stringify(functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a, function (k, v) {
|
||||||
|
if (v instanceof Function) {
|
||||||
|
var id_ = editor.util.guid();
|
||||||
|
fmap[id_] = v.toString();
|
||||||
|
return id_;
|
||||||
|
} else return v
|
||||||
|
}, 4);
|
||||||
|
var fobj = JSON.parse(fjson);
|
||||||
|
editor.file.functionsMap = fmap;
|
||||||
|
editor.file.functionsJSON = fjson;
|
||||||
|
var buildlocobj = function (locObj) {
|
||||||
|
for (var key in locObj) {
|
||||||
|
if (typeof(locObj[key]) !== typeof('')) buildlocobj(locObj[key]);
|
||||||
|
else locObj[key] = fmap[locObj[key]];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
editor.file.editFunctions = function (actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['events']['afterChangeLight']","function(x,y){console.log(x,y)}"],
|
||||||
|
["change","['ui']['drawAbout']","function(){...}"],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
saveSetting('functions', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj = JSON.parse(fjson);
|
||||||
|
buildlocobj(locObj);
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.functionsComment,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
editor.file.editCommonEvent = function (actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['test']",['123']],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
var data_obj = events_c12a15a8_c380_4b28_8144_256cba95f760.commonEvent;
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
value[1] = "['commonEvent']" + value[1];
|
||||||
|
});
|
||||||
|
saveSetting('events', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
Object.assign({},data_obj),
|
||||||
|
editor.file.eventsComment._data.commonEvent,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var plmap = {};
|
||||||
|
var pljson = JSON.stringify(plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1, function (k, v) {
|
||||||
|
if (v instanceof Function) {
|
||||||
|
var id_ = editor.util.guid();
|
||||||
|
plmap[id_] = v.toString();
|
||||||
|
return id_;
|
||||||
|
} else if(v===null){
|
||||||
|
var id_ = editor.util.guid();
|
||||||
|
plmap[id_] = null;
|
||||||
|
return id_;
|
||||||
|
} return v
|
||||||
|
}, 4);
|
||||||
|
var plobj = JSON.parse(pljson);
|
||||||
|
editor.file.pluginsMap = plmap;
|
||||||
|
editor.file.pluginsObj = plobj;
|
||||||
|
var buildpllocobj = function (locObj) {
|
||||||
|
for (var key in locObj) {
|
||||||
|
if (typeof(locObj[key]) !== typeof('')) buildpllocobj(locObj[key]);
|
||||||
|
else locObj[key] = plmap[locObj[key]];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
editor.file.editPlugins = function (actionList, callback) {
|
||||||
|
/*actionList:[
|
||||||
|
["change","['test']","function(x,y){console.log(x,y)}"],
|
||||||
|
]
|
||||||
|
为[]时只查询不修改
|
||||||
|
*/
|
||||||
|
checkCallback(callback);
|
||||||
|
if (isset(actionList) && actionList.length > 0) {
|
||||||
|
saveSetting('plugins', actionList, function (err) {
|
||||||
|
callback([err]);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback([
|
||||||
|
(function () {
|
||||||
|
var locObj = JSON.parse(JSON.stringify(plobj));
|
||||||
|
buildpllocobj(locObj);
|
||||||
|
return locObj;
|
||||||
|
})(),
|
||||||
|
editor.file.pluginsComment,
|
||||||
|
null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//callback([obj,commentObj,err:String])
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var isset = function (val) {
|
||||||
|
if (val == undefined || val == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var checkCallback=function(callback){
|
||||||
|
if (!isset(callback)) {
|
||||||
|
printe('未设置callback');
|
||||||
|
throw('未设置callback')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var formatMap = function (mapArr,trySimplify) {
|
||||||
|
if(!mapArr || JSON.stringify(mapArr)==JSON.stringify([]))return '';
|
||||||
|
if(trySimplify){
|
||||||
|
//检查是否是全0二维数组
|
||||||
|
var jsoncheck=JSON.stringify(mapArr).replace(/\D/g,'');
|
||||||
|
if(jsoncheck==Array(jsoncheck.length+1).join('0'))return '';
|
||||||
|
}
|
||||||
|
//把二维数组格式化
|
||||||
|
var formatArrStr = '';
|
||||||
|
var arr = JSON.stringify(mapArr).replace(/\s+/g, '').split('],[');
|
||||||
|
var si=mapArr.length-1,sk=mapArr[0].length-1;
|
||||||
|
for (var i = 0; i <= si; i++) {
|
||||||
|
var a = [];
|
||||||
|
formatArrStr += ' [';
|
||||||
|
if (i == 0 || i == si) a = arr[i].split(/\D+/).join(' ').trim().split(' ');
|
||||||
|
else a = arr[i].split(/\D+/);
|
||||||
|
for (var k = 0; k <= sk; k++) {
|
||||||
|
var num = parseInt(a[k]);
|
||||||
|
formatArrStr += Array(Math.max(4 - String(num).length, 0)).join(' ') + num + (k == sk ? '' : ',');
|
||||||
|
}
|
||||||
|
formatArrStr += ']' + (i == si ? '' : ',\n');
|
||||||
|
}
|
||||||
|
return formatArrStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
var encode = editor.util.encode64
|
||||||
|
|
||||||
|
var alertWhenCompress = function(){
|
||||||
|
if(editor.useCompress===true){
|
||||||
|
editor.useCompress='alerted';
|
||||||
|
setTimeout("alert('当前游戏使用的是压缩文件,修改完成后请使用启动服务.exe->Js代码压缩工具重新压缩,或者把main.js的useCompress改成false来使用原始文件')",1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var saveSetting = function (file, actionList, callback) {
|
||||||
|
//console.log(file);
|
||||||
|
//console.log(actionList);
|
||||||
|
alertWhenCompress();
|
||||||
|
|
||||||
|
if (file == 'icons') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
var datastr = 'var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = \n';
|
||||||
|
datastr += JSON.stringify(icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1, null, '\t');
|
||||||
|
fs.writeFile('project/icons.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'maps') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("maps_90f36752_8815_4be8_b32b_d7fad1d0542e" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
var datastr = 'var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = \n';
|
||||||
|
//datastr+=JSON.stringify(maps_90f36752_8815_4be8_b32b_d7fad1d0542e,null,4);
|
||||||
|
|
||||||
|
var emap = {};
|
||||||
|
var estr = JSON.stringify(maps_90f36752_8815_4be8_b32b_d7fad1d0542e, function (k, v) {
|
||||||
|
if (v.id != null) {
|
||||||
|
var id_ = editor.util.guid();
|
||||||
|
emap[id_] = JSON.stringify(v);
|
||||||
|
return id_;
|
||||||
|
} else return v
|
||||||
|
}, '\t');
|
||||||
|
for (var id_ in emap) {
|
||||||
|
estr = estr.replace('"' + id_ + '"', emap[id_])
|
||||||
|
}
|
||||||
|
datastr += estr;
|
||||||
|
|
||||||
|
fs.writeFile('project/maps.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'items') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
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, null, '\t');
|
||||||
|
fs.writeFile('project/items.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'enemys') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
var datastr = 'var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = \n';
|
||||||
|
var emap = {};
|
||||||
|
var estr = JSON.stringify(enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80, function (k, v) {
|
||||||
|
if (v.hp != null) {
|
||||||
|
var id_ = editor.util.guid();
|
||||||
|
emap[id_] = JSON.stringify(v);
|
||||||
|
return id_;
|
||||||
|
} else return v
|
||||||
|
}, '\t');
|
||||||
|
for (var id_ in emap) {
|
||||||
|
estr = estr.replace('"' + id_ + '"', emap[id_])
|
||||||
|
}
|
||||||
|
datastr += estr;
|
||||||
|
fs.writeFile('project/enemys.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'data') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
if (data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main.floorIds.indexOf(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.floorId) < 0)
|
||||||
|
data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.floorId = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main.floorIds[0];
|
||||||
|
var datastr = 'var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = \n';
|
||||||
|
datastr += JSON.stringify(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d, null, '\t');
|
||||||
|
fs.writeFile('project/data.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'functions') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("fmap[fobj" + value[1] + ']=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
var fraw = fjson;
|
||||||
|
for (var id_ in fmap) {
|
||||||
|
fraw = fraw.replace('"' + id_ + '"', fmap[id_])
|
||||||
|
}
|
||||||
|
var datastr = 'var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = \n';
|
||||||
|
datastr += fraw;
|
||||||
|
fs.writeFile('project/functions.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'floorloc') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
// 检测null/undefined
|
||||||
|
if (value[2]==null)
|
||||||
|
eval("delete editor.currentFloorData" + value[1]);
|
||||||
|
else
|
||||||
|
eval("editor.currentFloorData" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
editor.file.saveFloorFile(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'floors') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("editor.currentFloorData" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
editor.file.saveFloorFile(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'events') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
eval("events_c12a15a8_c380_4b28_8144_256cba95f760" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
});
|
||||||
|
var datastr = 'var events_c12a15a8_c380_4b28_8144_256cba95f760 = \n';
|
||||||
|
datastr += JSON.stringify(events_c12a15a8_c380_4b28_8144_256cba95f760, null, '\t');
|
||||||
|
fs.writeFile('project/events.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (file == 'plugins') {
|
||||||
|
actionList.forEach(function (value) {
|
||||||
|
if(value[0]==='add'){
|
||||||
|
eval("plobj" + value[1] + '=' + JSON.stringify(value[2]));
|
||||||
|
} else {
|
||||||
|
eval("plmap[plobj" + value[1] + ']=' + JSON.stringify(value[2]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var plraw = JSON.stringify(plobj,null,4);
|
||||||
|
for (var id_ in plmap) {
|
||||||
|
plraw = plraw.replace('"' + id_ + '"', plmap[id_])
|
||||||
|
}
|
||||||
|
var datastr = 'var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = \n';
|
||||||
|
datastr += plraw;
|
||||||
|
fs.writeFile('project/plugins.js', encode(datastr), 'base64', function (err, data) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
callback('出错了,要设置的文件名不识别');
|
||||||
|
}
|
||||||
|
|
||||||
|
return editor_file;
|
||||||
|
}
|
||||||
|
//editor_file = editor_file(editor);
|
||||||
@ -1,37 +1,77 @@
|
|||||||
editor_game_wrapper = function (editor, main, core) {
|
editor_game_wrapper = function (editor, main, core) {
|
||||||
|
// 原则上重构后只有此文件允许`\s(main|core)`形式的调用, 以及其初始化 editor_game_wrapper(editor, main, core)
|
||||||
|
|
||||||
editor_game = function () {
|
editor_game = function () {
|
||||||
|
this.replacerRecord = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 三个 replacer 和 replacerRecord 暂时放在此处
|
||||||
|
editor_game.prototype.replacerForLoading = function (_key, value) {
|
||||||
|
var rmap = editor.game.replacerRecord;
|
||||||
|
if (value instanceof Function) {
|
||||||
|
var guid_ = editor.util.guid()
|
||||||
|
rmap[guid_] = value.toString()
|
||||||
|
return guid_
|
||||||
|
} else if (value === null) {
|
||||||
|
// 为了包含plugins的新建
|
||||||
|
var guid_ = editor.util.guid()
|
||||||
|
rmap[guid_] = null
|
||||||
|
return guid_
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.replacerForSaving = function (_key, value) {
|
||||||
|
var rmap = editor.game.replacerRecord;
|
||||||
|
if (rmap.hasOwnProperty(value)) {
|
||||||
|
return rmap[value]
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.getValue = function(field){
|
||||||
|
var rmap = editor.game.replacerRecord;
|
||||||
|
var value = eval(field)
|
||||||
|
if (rmap.hasOwnProperty(oldval)) {
|
||||||
|
return rmap[value]
|
||||||
|
} else {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.setValue = function(field,value){
|
||||||
|
var rmap = editor.game.replacerRecord;
|
||||||
|
var oldval = eval(field)
|
||||||
|
if (rmap.hasOwnProperty(oldval)) {
|
||||||
|
rmap[value]=eval(value)
|
||||||
|
} else {
|
||||||
|
eval(field+'='+value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.replacerWithoutRecord = function (_key, value) {
|
||||||
|
if (value instanceof Function) {
|
||||||
|
return value.toString()
|
||||||
|
} else return value
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_game.prototype.fixFunctionInGameData = function () {
|
editor_game.prototype.fixFunctionInGameData = function () {
|
||||||
core.floors = JSON.parse(JSON.stringify(core.floors, function (_k, v) {
|
var rf = editor.game.replacerWithoutRecord
|
||||||
if (v instanceof Function) {
|
core.floors = JSON.parse(JSON.stringify(core.floors, rf));
|
||||||
return v.toString()
|
core.data = JSON.parse(JSON.stringify(core.data, rf));
|
||||||
} else return v
|
data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = JSON.parse(JSON.stringify(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d, rf));
|
||||||
}));
|
|
||||||
core.data = JSON.parse(JSON.stringify(core.data, function (_k, v) {
|
|
||||||
if (v instanceof Function) {
|
|
||||||
return v.toString()
|
|
||||||
} else return v
|
|
||||||
}));
|
|
||||||
data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = JSON.parse(JSON.stringify(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d, function (_k, v) {
|
|
||||||
if (v instanceof Function) {
|
|
||||||
return v.toString()
|
|
||||||
} else return v
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_game.prototype.idsInit = function (maps, icons) {
|
editor_game.prototype.idsInit = function (maps, icons) {
|
||||||
editor.ids = [0];
|
editor.ids = [0];
|
||||||
editor.indexs = [];
|
editor.indexs = [];
|
||||||
var MAX_NUM = 0;
|
var MAX_NUM = 0;
|
||||||
var keys=Object.keys(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
var keys = Object.keys(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
||||||
for(var ii=0;ii<keys.length;ii++){
|
for (var ii = 0; ii < keys.length; ii++) {
|
||||||
var v=~~keys[ii];
|
var v = ~~keys[ii];
|
||||||
if(v>MAX_NUM && v<core.icons.tilesetStartOffset)MAX_NUM=v;
|
if (v > MAX_NUM && v < core.icons.tilesetStartOffset) MAX_NUM = v;
|
||||||
}
|
}
|
||||||
editor.MAX_NUM=MAX_NUM;
|
editor.MAX_NUM = MAX_NUM;
|
||||||
var getInfoById = function (id) {
|
var getInfoById = function (id) {
|
||||||
var block = maps.initBlock(0, 0, id);
|
var block = maps.initBlock(0, 0, id);
|
||||||
if (Object.prototype.hasOwnProperty.call(block, 'event')) {
|
if (Object.prototype.hasOwnProperty.call(block, 'event')) {
|
||||||
@ -46,15 +86,15 @@ editor_game_wrapper = function (editor, main, core) {
|
|||||||
var id = indexBlock.event.id;
|
var id = indexBlock.event.id;
|
||||||
var indexId = indexBlock.id;
|
var indexId = indexBlock.id;
|
||||||
var allCls = Object.keys(icons);
|
var allCls = Object.keys(icons);
|
||||||
if(i==17){
|
if (i == 17) {
|
||||||
editor.ids.push({'idnum': 17, 'id': id, 'images': 'terrains'});
|
editor.ids.push({ 'idnum': 17, 'id': id, 'images': 'terrains' });
|
||||||
point++;
|
point++;
|
||||||
editor.indexs[i].push(point);
|
editor.indexs[i].push(point);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (var j = 0; j < allCls.length; j++) {
|
for (var j = 0; j < allCls.length; j++) {
|
||||||
if (id in icons[allCls[j]]) {
|
if (id in icons[allCls[j]]) {
|
||||||
editor.ids.push({'idnum': indexId, 'id': id, 'images': allCls[j], 'y': icons[allCls[j]][id]});
|
editor.ids.push({ 'idnum': indexId, 'id': id, 'images': allCls[j], 'y': icons[allCls[j]][id] });
|
||||||
point++;
|
point++;
|
||||||
editor.indexs[i].push(point);
|
editor.indexs[i].push(point);
|
||||||
}
|
}
|
||||||
@ -67,31 +107,31 @@ editor_game_wrapper = function (editor, main, core) {
|
|||||||
for (var i in core.tilesets) {
|
for (var i in core.tilesets) {
|
||||||
var imgName = core.tilesets[i];
|
var imgName = core.tilesets[i];
|
||||||
var img = core.material.images.tilesets[imgName];
|
var img = core.material.images.tilesets[imgName];
|
||||||
var width = Math.floor(img.width/32), height = Math.floor(img.height/32);
|
var width = Math.floor(img.width / 32), height = Math.floor(img.height / 32);
|
||||||
if(img.width%32 || img.height%32){
|
if (img.width % 32 || img.height % 32) {
|
||||||
alert(imgName+'的长或宽不是32的整数倍, 请修改后刷新页面');
|
alert(imgName + '的长或宽不是32的整数倍, 请修改后刷新页面');
|
||||||
}
|
}
|
||||||
if(img.width*img.height > 32*32*3000){
|
if (img.width * img.height > 32 * 32 * 3000) {
|
||||||
alert(imgName+'上的图块数量超过了3000,请修改后刷新页面');
|
alert(imgName + '上的图块数量超过了3000,请修改后刷新页面');
|
||||||
}
|
}
|
||||||
for (var id=startOffset; id<startOffset+width*height;id++) {
|
for (var id = startOffset; id < startOffset + width * height; id++) {
|
||||||
var x = (id-startOffset)%width, y = parseInt((id-startOffset)/width);
|
var x = (id - startOffset) % width, y = parseInt((id - startOffset) / width);
|
||||||
var indexBlock = getInfoById(id);
|
var indexBlock = getInfoById(id);
|
||||||
editor.ids.push({'idnum': id, 'id': indexBlock.event.id, 'images': imgName, "x": x, "y": y, isTile: true});
|
editor.ids.push({ 'idnum': id, 'id': indexBlock.event.id, 'images': imgName, "x": x, "y": y, isTile: true });
|
||||||
point++;
|
point++;
|
||||||
editor.indexs[id]=[point];
|
editor.indexs[id] = [point];
|
||||||
}
|
}
|
||||||
startOffset += core.icons.tilesetStartOffset;
|
startOffset += core.icons.tilesetStartOffset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_game.prototype.fetchMapFromCore = function(){
|
editor_game.prototype.fetchMapFromCore = function () {
|
||||||
var mapArray = core.maps.saveMap(core.status.floorId);
|
var mapArray = core.maps.saveMap(core.status.floorId);
|
||||||
editor.map = mapArray.map(function (v) {
|
editor.map = mapArray.map(function (v) {
|
||||||
return v.map(function (v) {
|
return v.map(function (v) {
|
||||||
var x = parseInt(v), y = editor.indexs[x];
|
var x = parseInt(v), y = editor.indexs[x];
|
||||||
if (y == null) {
|
if (y == null) {
|
||||||
printe("素材数字"+x+"未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?");
|
printe("素材数字" + x + "未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?");
|
||||||
y = [0];
|
y = [0];
|
||||||
}
|
}
|
||||||
return editor.ids[y[0]]
|
return editor.ids[y[0]]
|
||||||
@ -99,17 +139,17 @@ editor_game_wrapper = function (editor, main, core) {
|
|||||||
});
|
});
|
||||||
editor.currentFloorId = core.status.floorId;
|
editor.currentFloorId = core.status.floorId;
|
||||||
editor.currentFloorData = core.floors[core.status.floorId];
|
editor.currentFloorData = core.floors[core.status.floorId];
|
||||||
for(var ii=0,name;name=['bgmap','fgmap'][ii];ii++){
|
for (var ii = 0, name; name = ['bgmap', 'fgmap'][ii]; ii++) {
|
||||||
var mapArray = editor.currentFloorData[name];
|
var mapArray = editor.currentFloorData[name];
|
||||||
if(!mapArray || JSON.stringify(mapArray)==JSON.stringify([])){//未设置或空数组
|
if (!mapArray || JSON.stringify(mapArray) == JSON.stringify([])) {//未设置或空数组
|
||||||
//与editor.map同形的全0
|
//与editor.map同形的全0
|
||||||
mapArray=eval('['+Array(editor.map.length+1).join('['+Array(editor.map[0].length+1).join('0,')+'],')+']');
|
mapArray = eval('[' + Array(editor.map.length + 1).join('[' + Array(editor.map[0].length + 1).join('0,') + '],') + ']');
|
||||||
}
|
}
|
||||||
editor[name]=mapArray.map(function (v) {
|
editor[name] = mapArray.map(function (v) {
|
||||||
return v.map(function (v) {
|
return v.map(function (v) {
|
||||||
var x = parseInt(v), y = editor.indexs[x];
|
var x = parseInt(v), y = editor.indexs[x];
|
||||||
if (y == null) {
|
if (y == null) {
|
||||||
printe("素材数字"+x+"未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?");
|
printe("素材数字" + x + "未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?");
|
||||||
y = [0];
|
y = [0];
|
||||||
}
|
}
|
||||||
return editor.ids[y[0]]
|
return editor.ids[y[0]]
|
||||||
@ -118,7 +158,6 @@ editor_game_wrapper = function (editor, main, core) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
editor.constructor.prototype.game = new editor_game();
|
editor.constructor.prototype.game = new editor_game();
|
||||||
}
|
}
|
||||||
//editor_game_wrapper(editor);
|
//editor_game_wrapper(editor);
|
||||||
@ -12,31 +12,31 @@ editor_table_wrapper = function (editor) {
|
|||||||
values.map(function (v) {
|
values.map(function (v) {
|
||||||
return editor.table.option(v)
|
return editor.table.option(v)
|
||||||
}).join('')
|
}).join('')
|
||||||
return `<select>\n${content}</select>\n`
|
return /* html */`<select>\n${content}</select>\n`
|
||||||
}
|
}
|
||||||
editor_table.prototype.option = function (value) {
|
editor_table.prototype.option = function (value) {
|
||||||
return `<option value='${JSON.stringify(value)}'>${JSON.stringify(value)}</option>\n`
|
return /* html */`<option value='${JSON.stringify(value)}'>${JSON.stringify(value)}</option>\n`
|
||||||
}
|
}
|
||||||
editor_table.prototype.text = function (value) {
|
editor_table.prototype.text = function (value) {
|
||||||
return `<input type='text' spellcheck='false' value='${JSON.stringify(value)}'/>\n`
|
return /* html */`<input type='text' spellcheck='false' value='${JSON.stringify(value)}'/>\n`
|
||||||
}
|
}
|
||||||
editor_table.prototype.checkbox = function (value) {
|
editor_table.prototype.checkbox = function (value) {
|
||||||
return `<input type='checkbox' ${(value ? 'checked ' : '')}/>\n`
|
return /* html */`<input type='checkbox' ${(value ? 'checked ' : '')}/>\n`
|
||||||
}
|
}
|
||||||
editor_table.prototype.textarea = function (value, indent) {
|
editor_table.prototype.textarea = function (value, indent) {
|
||||||
return `<textarea spellcheck='false'>${JSON.stringify(value, null, indent || 0)}</textarea>\n`
|
return /* html */`<textarea spellcheck='false'>${JSON.stringify(value, null, indent || 0)}</textarea>\n`
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_table.prototype.title = function () {
|
editor_table.prototype.title = function () {
|
||||||
return `\n<tr><td>条目</td><td>注释</td><td>值</td></tr>\n`
|
return /* html */`\n<tr><td>条目</td><td>注释</td><td>值</td></tr>\n`
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_table.prototype.gap = function (field) {
|
editor_table.prototype.gap = function (field) {
|
||||||
return `<tr><td>----</td><td>----</td><td>${field}</td></tr>\n`
|
return /* html */`<tr><td>----</td><td>----</td><td>${field}</td></tr>\n`
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_table.prototype.tr = function (guid, field, shortField, commentHTMLescape, cobjstr, shortCommentHTMLescape, tdstr) {
|
editor_table.prototype.tr = function (guid, field, shortField, commentHTMLescape, cobjstr, shortCommentHTMLescape, tdstr) {
|
||||||
return `<tr id="${guid}">
|
return /* html */`<tr id="${guid}">
|
||||||
<td title="${field}">${shortField}</td>
|
<td title="${field}">${shortField}</td>
|
||||||
<td title="${commentHTMLescape}" cobj="${cobjstr}">${shortCommentHTMLescape}</td>
|
<td title="${commentHTMLescape}" cobj="${cobjstr}">${shortCommentHTMLescape}</td>
|
||||||
<td><div class="etableInputDiv">${tdstr}</div></td>
|
<td><div class="etableInputDiv">${tdstr}</div></td>
|
||||||
|
|||||||
@ -473,7 +473,7 @@ editor_unsorted_2_wrapper=function(editor_mode){
|
|||||||
throw(err);
|
throw(err);
|
||||||
}
|
}
|
||||||
// Step 4: 自动注册
|
// Step 4: 自动注册
|
||||||
editor_file.registerAutotile(filename, function (err) {
|
editor.file.registerAutotile(filename, function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
printe(err);
|
printe(err);
|
||||||
throw(err);
|
throw(err);
|
||||||
|
|||||||
@ -11,11 +11,11 @@
|
|||||||
+ [ ] editor_multi 多行文本编辑器
|
+ [ ] editor_multi 多行文本编辑器
|
||||||
+ [x] editor_table 处理表格的生成, 及其响应的事件, 从原editor\_mode中分离
|
+ [x] editor_table 处理表格的生成, 及其响应的事件, 从原editor\_mode中分离
|
||||||
+ [ ] editor_file 调用fs.js编辑文件, 把原editor\_file模块化
|
+ [ ] editor_file 调用fs.js编辑文件, 把原editor\_file模块化
|
||||||
+ [ ] editor_game 处理来自core的数据, 导入为editor的数据, 从原editor中分离
|
+ [ ] editor_game 处理来自core的数据, 导入为editor的数据, 从原editor中分离. **只有此文件允许`\s(main|core)`形式的调用**(以及其初始化`editor_game_wrapper(editor, main, core);`)
|
||||||
+ [x] editor_util 生成guid等函数, 从editor分离
|
+ [x] editor_util 生成guid等函数, 从editor分离
|
||||||
+ [ ] editor 执行初始化流程加组合各组件
|
+ [ ] editor 执行初始化流程加组合各组件
|
||||||
+ [ ] 原editor_mode 移除
|
+ [ ] 原editor_mode 移除
|
||||||
+ [ ] 原vm 移除
|
+ [x] 原vm 移除
|
||||||
+ [x] \*comment.js 表格注释与结构, 移至table/\*comment.js
|
+ [x] \*comment.js 表格注释与结构, 移至table/\*comment.js
|
||||||
|
|
||||||
## 对象结构
|
## 对象结构
|
||||||
@ -46,19 +46,23 @@ editor: {
|
|||||||
|
|
||||||
+ 插入公共事件的参数的转义处理, .g4中添加ObjectString, 要求其中的值可以JSON.parse, 生成的code中也是作为对象而不是字符串出现
|
+ 插入公共事件的参数的转义处理, .g4中添加ObjectString, 要求其中的值可以JSON.parse, 生成的code中也是作为对象而不是字符串出现
|
||||||
|
|
||||||
+ 修改editor.multi中的转义处理
|
+ 修改editor.multi中的转义处理, 目前双击某些方块使用文本编辑的处理, 一部分在editor.blockly, 一部分在editor.multi, 比较混乱
|
||||||
|
|
||||||
+ 地图的编辑与其他(如全塔属性和楼层属性), 现在的文件操作的模式是完全不同的
|
+ 地图的编辑与其他(如全塔属性和楼层属性), 现在的文件操作的模式是完全不同的
|
||||||
楼层文件的储存与其他不同
|
楼层文件的储存与其他不同
|
||||||
|
|
||||||
+ editor.file在修改时不再返回obj和commentobj,只在查询时返回
|
+ [x] editor.file在修改时不再返回obj和commentobj,只在查询时返回
|
||||||
|
|
||||||
+ editor.file中的各个条目, 非常相似, 但是细节的不同处理非常麻烦. 是类似的代码复制后修改一部分, 尝试模块化
|
+ editor.file中的各个条目, 非常相似, 但是细节的不同处理非常麻烦. 是类似的代码复制后修改一部分, 尝试模块化(或者重写)
|
||||||
|
|
||||||
+ functions和plugins的借助JSON.stringify的replacer特殊处理
|
+ functions和plugins的借助JSON.stringify的replacer特殊处理, 与其他项的处理完全不同, 改成用统一的方法处理(为了统一,全部使用这种不直观的replacer的处理)
|
||||||
|
|
||||||
|
+ 怪物/物品/地图选点事件的处理, field中怪物id等明显与其他节地位不等, 处理起来很繁琐
|
||||||
|
|
||||||
+ 目前editor.map中储存的是info\<object\>, 准备改为和core一致只储存数字
|
+ 目前editor.map中储存的是info\<object\>, 准备改为和core一致只储存数字
|
||||||
|
|
||||||
|
+ editor.widthX特别不直观
|
||||||
|
|
||||||
## 功能改进
|
## 功能改进
|
||||||
|
|
||||||
+ [ ] 大地图
|
+ [ ] 大地图
|
||||||
@ -99,6 +103,10 @@ editor: {
|
|||||||
|
|
||||||
+ [ ] 多帧素材只显示第一帧
|
+ [ ] 多帧素材只显示第一帧
|
||||||
|
|
||||||
|
+ [ ] `显示文章`以及`选项`等方块, 把`标题`和`图像`从字符串提取出填回相应的空
|
||||||
|
|
||||||
|
+ [ ] blockly中某些需要选点的填空, 增加按钮, 点击后从缩略图中点击位置
|
||||||
|
|
||||||
## 左侧页面模式
|
## 左侧页面模式
|
||||||
|
|
||||||
标题? 保存按钮? 添加按钮? 删除按钮?
|
标题? 保存按钮? 添加按钮? 删除按钮?
|
||||||
|
|||||||
@ -32,7 +32,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
|
|||||||
"_leaf": true,
|
"_leaf": true,
|
||||||
"_type": "textarea",
|
"_type": "textarea",
|
||||||
"_range": "editor.mode.checkUnique(thiseval)",
|
"_range": "editor.mode.checkUnique(thiseval)",
|
||||||
"_data": "在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名 \n动画必须放在animates目录下;文件名不能使用中文,不能带空格或特殊字符 \n \"jianji\", \"thunder\" \n 根据需求自行添加"
|
"_data": "在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名 \n动画必须放在animates目录下;文件名不能使用中文,不能带空格或特殊字符 \n \"jianji\", \"thunder\" 根据需求自行添加"
|
||||||
},
|
},
|
||||||
"bgms": {
|
"bgms": {
|
||||||
"_leaf": true,
|
"_leaf": true,
|
||||||
@ -46,6 +46,11 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
|
|||||||
"_range": "editor.mode.checkUnique(thiseval)",
|
"_range": "editor.mode.checkUnique(thiseval)",
|
||||||
"_data": "在此存放所有的SE,和文件名一致 \n音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好"
|
"_data": "在此存放所有的SE,和文件名一致 \n音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好"
|
||||||
},
|
},
|
||||||
|
"nameMap": {
|
||||||
|
"_leaf": true,
|
||||||
|
"_type": "textarea",
|
||||||
|
"_data": "文件名映射,目前仅对images, animates, bgms, sounds有效。\n例如定义 {\"精灵石.mp3\":\"jinglingshi.mp3\"} 就可以使用\ncore.playBgm(\"精灵石.mp3\") 或对应的事件来播放该bgm。"
|
||||||
|
},
|
||||||
"startBackground": {
|
"startBackground": {
|
||||||
"_leaf": true,
|
"_leaf": true,
|
||||||
"_type": "textarea",
|
"_type": "textarea",
|
||||||
|
|||||||
@ -523,8 +523,9 @@
|
|||||||
<!-- <script src='_server/vendor/polyfill.min.js'></script> -->
|
<!-- <script src='_server/vendor/polyfill.min.js'></script> -->
|
||||||
<script src='_server/fs.js'></script>
|
<script src='_server/fs.js'></script>
|
||||||
<script src='_server/editor_util.js'></script>
|
<script src='_server/editor_util.js'></script>
|
||||||
<script src='_server/editor_file.js'></script>
|
|
||||||
<script src='_server/editor_game.js'></script>
|
<script src='_server/editor_game.js'></script>
|
||||||
|
<script src='_server/editor_file.js'></script>
|
||||||
|
<script src='_server/editor_file_unsorted.js'></script>
|
||||||
<script src='_server/editor_table.js'></script>
|
<script src='_server/editor_table.js'></script>
|
||||||
<script src='_server/editor_mode.js'></script>
|
<script src='_server/editor_mode.js'></script>
|
||||||
<script src='_server/editor_unsorted_1.js'></script>
|
<script src='_server/editor_unsorted_1.js'></script>
|
||||||
|
|||||||
@ -506,8 +506,9 @@
|
|||||||
<!-- <script src='_server/vendor/polyfill.min.js'></script> -->
|
<!-- <script src='_server/vendor/polyfill.min.js'></script> -->
|
||||||
<script src='_server/fs.js'></script>
|
<script src='_server/fs.js'></script>
|
||||||
<script src='_server/editor_util.js'></script>
|
<script src='_server/editor_util.js'></script>
|
||||||
<script src='_server/editor_file.js'></script>
|
|
||||||
<script src='_server/editor_game.js'></script>
|
<script src='_server/editor_game.js'></script>
|
||||||
|
<script src='_server/editor_file.js'></script>
|
||||||
|
<script src='_server/editor_file_unsorted.js'></script>
|
||||||
<script src='_server/editor_table.js'></script>
|
<script src='_server/editor_table.js'></script>
|
||||||
<script src='_server/editor_mode.js'></script>
|
<script src='_server/editor_mode.js'></script>
|
||||||
<script src='_server/editor_unsorted_1.js'></script>
|
<script src='_server/editor_unsorted_1.js'></script>
|
||||||
|
|||||||
@ -71,7 +71,7 @@ actions.prototype._init = function () {
|
|||||||
* 返回:如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。
|
* 返回:如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。
|
||||||
*/
|
*/
|
||||||
actions.prototype.registerAction = function (action, name, func, priority) {
|
actions.prototype.registerAction = function (action, name, func, priority) {
|
||||||
if (!name || !func || !(func instanceof Function))
|
if (!name || !func)
|
||||||
return;
|
return;
|
||||||
priority = priority || 0;
|
priority = priority || 0;
|
||||||
if (!this.actions[action]) {
|
if (!this.actions[action]) {
|
||||||
@ -99,8 +99,14 @@ actions.prototype.doRegisteredAction = function (action) {
|
|||||||
var actions = this.actions[action];
|
var actions = this.actions[action];
|
||||||
if (!actions) return false;
|
if (!actions) return false;
|
||||||
for (var i = 0; i < actions.length; ++i) {
|
for (var i = 0; i < actions.length; ++i) {
|
||||||
if (core.doFunc.apply(core, [actions[i].func, this].concat(Array.prototype.slice.call(arguments, 1))))
|
try {
|
||||||
return true;
|
if (core.doFunc.apply(core, [actions[i].func, this].concat(Array.prototype.slice.call(arguments, 1))))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
main.log(e);
|
||||||
|
main.log("ERROR in actions["+actions[i].name+"].");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -239,6 +245,7 @@ actions.prototype._sys_keyDown_lockControl = function (keyCode) {
|
|||||||
case 'save':
|
case 'save':
|
||||||
case 'load':
|
case 'load':
|
||||||
case 'replayLoad':
|
case 'replayLoad':
|
||||||
|
case 'replayRemain':
|
||||||
this._keyDownSL(keyCode);
|
this._keyDownSL(keyCode);
|
||||||
break;
|
break;
|
||||||
case 'shop':
|
case 'shop':
|
||||||
@ -340,6 +347,7 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) {
|
|||||||
case 'save':
|
case 'save':
|
||||||
case 'load':
|
case 'load':
|
||||||
case 'replayLoad':
|
case 'replayLoad':
|
||||||
|
case 'replayRemain':
|
||||||
this._keyUpSL(keyCode);
|
this._keyUpSL(keyCode);
|
||||||
break;
|
break;
|
||||||
case 'keyBoard':
|
case 'keyBoard':
|
||||||
@ -606,6 +614,7 @@ actions.prototype._sys_onclick_lockControl = function (x, y) {
|
|||||||
case 'save':
|
case 'save':
|
||||||
case 'load':
|
case 'load':
|
||||||
case 'replayLoad':
|
case 'replayLoad':
|
||||||
|
case 'replayRemain':
|
||||||
this._clickSL(x, y);
|
this._clickSL(x, y);
|
||||||
break;
|
break;
|
||||||
case 'confirmBox':
|
case 'confirmBox':
|
||||||
@ -750,7 +759,7 @@ actions.prototype._sys_longClick_lockControl = function (x, y) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 长按SL快速翻页
|
// 长按SL快速翻页
|
||||||
if (["save","load","replayLoad"].indexOf(core.status.event.id) >= 0) {
|
if (["save","load","replayLoad","replayRemain"].indexOf(core.status.event.id) >= 0) {
|
||||||
if ([this.HSIZE-2, this.HSIZE-3, this.HSIZE+2, this.HSIZE+3].indexOf(x) >= 0 && y == this.LAST) {
|
if ([this.HSIZE-2, this.HSIZE-3, this.HSIZE+2, this.HSIZE+3].indexOf(x) >= 0 && y == this.LAST) {
|
||||||
this._clickSL(x, y);
|
this._clickSL(x, y);
|
||||||
return true;
|
return true;
|
||||||
@ -991,10 +1000,17 @@ actions.prototype._clickBook = function (x, y) {
|
|||||||
// 怪物信息
|
// 怪物信息
|
||||||
var data = core.status.event.data;
|
var data = core.status.event.data;
|
||||||
if (data != null && y < this.LAST) {
|
if (data != null && y < this.LAST) {
|
||||||
var page = parseInt(data / this.HSIZE);
|
var pageinfo = core.ui._drawBook_pageinfo();
|
||||||
var index = this.HSIZE * page + parseInt(y / 2);
|
var per_page = pageinfo.per_page, page = parseInt(data / per_page);
|
||||||
core.ui.drawBook(index);
|
var u = this.LAST / per_page;
|
||||||
core.ui.drawBookDetail(index);
|
for (var i = 0; i < per_page; ++i) {
|
||||||
|
if (y >= u*i && y < u*(i+1)) {
|
||||||
|
var index = per_page * page + i;
|
||||||
|
core.ui.drawBook(index);
|
||||||
|
core.ui.drawBookDetail(index);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1027,7 +1043,7 @@ actions.prototype._keyUpBook = function (keycode) {
|
|||||||
if (keycode == 13 || keycode == 32 || keycode == 67) {
|
if (keycode == 13 || keycode == 32 || keycode == 67) {
|
||||||
var data = core.status.event.data;
|
var data = core.status.event.data;
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
this._clickBook(this.HSIZE, 2 * (data % this.HSIZE));
|
core.ui.drawBookDetail(data);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1644,6 +1660,7 @@ actions.prototype._clickSL = function (x, y) {
|
|||||||
if (core.events.recoverEvents(core.status.event.interval))
|
if (core.events.recoverEvents(core.status.event.interval))
|
||||||
return;
|
return;
|
||||||
core.ui.closePanel();
|
core.ui.closePanel();
|
||||||
|
delete core.status.tempRoute;
|
||||||
if (!core.isPlaying())
|
if (!core.isPlaying())
|
||||||
core.showStartAnimate(true);
|
core.showStartAnimate(true);
|
||||||
return;
|
return;
|
||||||
@ -1847,18 +1864,20 @@ actions.prototype._clickSwitchs = function (x, y) {
|
|||||||
case 1:
|
case 1:
|
||||||
return this._clickSwitchs_sound();
|
return this._clickSwitchs_sound();
|
||||||
case 2:
|
case 2:
|
||||||
return this._clickSwitchs_displayEnemyDamage();
|
return this._clickSwitchs_moveSpeed();
|
||||||
case 3:
|
case 3:
|
||||||
return this._clickSwitchs_displayCritical();
|
return this._clickSwitchs_displayEnemyDamage();
|
||||||
case 4:
|
case 4:
|
||||||
return this._clickSwitchs_displayExtraDamage();
|
return this._clickSwitchs_displayCritical();
|
||||||
case 5:
|
case 5:
|
||||||
return this._clickSwitchs_localForage();
|
return this._clickSwitchs_displayExtraDamage();
|
||||||
case 6:
|
case 6:
|
||||||
return this._clickSwitchs_clickMove();
|
return this._clickSwitchs_localForage();
|
||||||
case 7:
|
case 7:
|
||||||
return this._clickSwitchs_ExtendKeyboard();
|
return this._clickSwitchs_clickMove();
|
||||||
case 8:
|
case 8:
|
||||||
|
return this._clickSwitchs_ExtendKeyboard();
|
||||||
|
case 9:
|
||||||
core.status.event.selection = 0;
|
core.status.event.selection = 0;
|
||||||
core.ui.drawSettings();
|
core.ui.drawSettings();
|
||||||
break;
|
break;
|
||||||
@ -1877,6 +1896,16 @@ actions.prototype._clickSwitchs_sound = function () {
|
|||||||
core.ui.drawSwitchs();
|
core.ui.drawSwitchs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actions.prototype._clickSwitchs_moveSpeed = function () {
|
||||||
|
core.myprompt("请输入行走速度(每走一步的时间,单位毫秒,默认100)", core.values.moveSpeed, function (value) {
|
||||||
|
value = parseInt(value) || core.values.moveSpeed;
|
||||||
|
value = core.clamp(value, 10, 500);
|
||||||
|
core.values.moveSpeed = value;
|
||||||
|
core.setLocalStorage("moveSpeed", value);
|
||||||
|
core.ui.drawSwitchs();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
actions.prototype._clickSwitchs_displayEnemyDamage = function () {
|
actions.prototype._clickSwitchs_displayEnemyDamage = function () {
|
||||||
core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage;
|
core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage;
|
||||||
core.updateDamage();
|
core.updateDamage();
|
||||||
@ -2006,12 +2035,10 @@ actions.prototype._clickSyncSave = function (x, y) {
|
|||||||
case 4:
|
case 4:
|
||||||
return this._clickSyncSave_replay();
|
return this._clickSyncSave_replay();
|
||||||
case 5:
|
case 5:
|
||||||
return this._clickSyncSave_download();
|
|
||||||
case 6:
|
|
||||||
core.status.event.selection = 0;
|
core.status.event.selection = 0;
|
||||||
core.ui.drawStorageRemove();
|
core.ui.drawStorageRemove();
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 6:
|
||||||
core.status.event.selection = 4;
|
core.status.event.selection = 4;
|
||||||
core.ui.drawSettings();
|
core.ui.drawSettings();
|
||||||
break;
|
break;
|
||||||
@ -2040,19 +2067,6 @@ actions.prototype._clickSyncSave_replay = function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.prototype._clickSyncSave_download = function () {
|
|
||||||
if (core.hasFlag('debug')) {
|
|
||||||
core.drawText("\t[系统提示]调试模式下无法下载录像");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", JSON.stringify({
|
|
||||||
'name': core.firstData.name,
|
|
||||||
'hard': core.status.hard,
|
|
||||||
'seed': core.getFlag('__seed__'),
|
|
||||||
'route': core.encodeRoute(core.status.route)
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
////// 同步存档界面时,放开某个键的操作 //////
|
////// 同步存档界面时,放开某个键的操作 //////
|
||||||
actions.prototype._keyUpSyncSave = function (keycode) {
|
actions.prototype._keyUpSyncSave = function (keycode) {
|
||||||
if (keycode == 27 || keycode == 88) {
|
if (keycode == 27 || keycode == 88) {
|
||||||
@ -2239,9 +2253,10 @@ actions.prototype._clickReplay = function (x, y) {
|
|||||||
switch (selection) {
|
switch (selection) {
|
||||||
case 0: return this._clickReplay_fromBeginning();
|
case 0: return this._clickReplay_fromBeginning();
|
||||||
case 1: return this._clickReplay_fromLoad();
|
case 1: return this._clickReplay_fromLoad();
|
||||||
case 2: return core.chooseReplayFile();
|
case 2: return this._clickReplay_replayRemain();
|
||||||
case 3: return this._clickReplay_download();
|
case 3: return core.chooseReplayFile();
|
||||||
case 4: return core.ui.closePanel();
|
case 4: return this._clickReplay_download();
|
||||||
|
case 5: return core.ui.closePanel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2260,6 +2275,21 @@ actions.prototype._clickReplay_fromLoad = function () {
|
|||||||
core.ui.drawSLPanel(10 * page + offset);
|
core.ui.drawSLPanel(10 * page + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actions.prototype._clickReplay_replayRemain = function () {
|
||||||
|
core.closePanel();
|
||||||
|
core.drawText([
|
||||||
|
"\t[接续播放录像]该功能允许你播放\r[yellow]两个存档之间的录像\r,常常用于\r[yellow]区域优化\r。\n" +
|
||||||
|
"例如,有若干个区,已经全部通关;之后重打一区并进行了优化,则可以对剩余区域直接播放录像而无需全部重打。",
|
||||||
|
"\t[步骤1]请选择一个存档。\n\r[yellow]该存档的坐标必须和当前勇士坐标完全相同。\r\n将尝试从此处开始回放。",
|
||||||
|
], function () {
|
||||||
|
core.status.event.id = 'replayRemain';
|
||||||
|
core.lockControl();
|
||||||
|
var saveIndex = core.saves.saveIndex;
|
||||||
|
var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
|
||||||
|
core.ui.drawSLPanel(10 * page + offset);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
actions.prototype._clickReplay_download = function () {
|
actions.prototype._clickReplay_download = function () {
|
||||||
if (core.hasFlag('debug')) return core.drawText("\t[系统提示]调试模式下无法下载录像");
|
if (core.hasFlag('debug')) return core.drawText("\t[系统提示]调试模式下无法下载录像");
|
||||||
core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", JSON.stringify({
|
core.download(core.firstData.name + "_" + core.formatDate2() + ".h5route", JSON.stringify({
|
||||||
|
|||||||
@ -1059,7 +1059,7 @@ control.prototype.startReplay = function (list) {
|
|||||||
core.status.replay.pausing=false;
|
core.status.replay.pausing=false;
|
||||||
core.status.replay.speed=1.0;
|
core.status.replay.speed=1.0;
|
||||||
core.status.replay.toReplay = core.clone(list);
|
core.status.replay.toReplay = core.clone(list);
|
||||||
core.status.replay.totalList = core.clone(list);
|
core.status.replay.totalList = core.status.route.concat(list);
|
||||||
core.status.replay.steps = 0;
|
core.status.replay.steps = 0;
|
||||||
core.status.replay.save = [];
|
core.status.replay.save = [];
|
||||||
core.updateStatusBar();
|
core.updateStatusBar();
|
||||||
@ -1100,7 +1100,7 @@ control.prototype.speedUpReplay = function () {
|
|||||||
else if (core.status.replay.speed==3) core.status.replay.speed=6;
|
else if (core.status.replay.speed==3) core.status.replay.speed=6;
|
||||||
else if (core.status.replay.speed==2.5) core.status.replay.speed=3;
|
else if (core.status.replay.speed==2.5) core.status.replay.speed=3;
|
||||||
else if (core.status.replay.speed==2) core.status.replay.speed=2.5;
|
else if (core.status.replay.speed==2) core.status.replay.speed=2.5;
|
||||||
else {
|
else if (core.status.replay.speed<2) {
|
||||||
core.status.replay.speed = parseInt(10*core.status.replay.speed + 2)/10;
|
core.status.replay.speed = parseInt(10*core.status.replay.speed + 2)/10;
|
||||||
}
|
}
|
||||||
core.drawTip("x"+core.status.replay.speed+"倍");
|
core.drawTip("x"+core.status.replay.speed+"倍");
|
||||||
@ -1512,8 +1512,9 @@ control.prototype.checkAutosave = function () {
|
|||||||
control.prototype.doSL = function (id, type) {
|
control.prototype.doSL = function (id, type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'save': this._doSL_save(id); break;
|
case 'save': this._doSL_save(id); break;
|
||||||
case 'load': this._doSL_load(id); break;
|
case 'load': this._doSL_load(id, this._doSL_load_afterGet); break;
|
||||||
case 'replayLoad': this._doSL_replayLoad(id); break;
|
case 'replayLoad': this._doSL_load(id, this._doSL_replayLoad_afterGet); break;
|
||||||
|
case 'replayRemain': this._doSL_load(id, this._doSL_replayRemain_afterGet); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1542,14 +1543,14 @@ control.prototype._doSL_save = function (id) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
control.prototype._doSL_load = function (id) {
|
control.prototype._doSL_load = function (id, callback) {
|
||||||
if (id == 'autoSave' && core.saves.autosave.data != null) {
|
if (id == 'autoSave' && core.saves.autosave.data != null) {
|
||||||
this._doSL_load_afterGet(id, core.clone(core.saves.autosave.data));
|
callback(id, core.clone(core.saves.autosave.data))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.getLocalForage(id=='autoSave'?id:"save"+id, null, function(data) {
|
core.getLocalForage(id=='autoSave'?id:"save"+id, null, function(data) {
|
||||||
if (id == 'autoSave') core.saves.autosave.data = core.clone(data);
|
if (id == 'autoSave') core.saves.autosave.data = core.clone(data);
|
||||||
core.control._doSL_load_afterGet(id, data);
|
callback(id, data);
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
main.log(err);
|
main.log(err);
|
||||||
alert("无效的存档");
|
alert("无效的存档");
|
||||||
@ -1579,22 +1580,6 @@ control.prototype._doSL_load_afterGet = function (id, data) {
|
|||||||
core.setLocalStorage('saveIndex', core.saves.saveIndex);
|
core.setLocalStorage('saveIndex', core.saves.saveIndex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
control.prototype._doSL_replayLoad = function (id) {
|
|
||||||
if (id == 'autoSave' && core.saves.autosave.data != null) {
|
|
||||||
this._doSL_replayLoad_afterGet(core.clone(core.saves.autosave.data));
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
core.getLocalForage(id=='autoSave'?id:"save"+id, null, function(data) {
|
|
||||||
if (id == 'autoSave') core.saves.autosave.data = core.clone(data);
|
|
||||||
core.control._doSL_replayLoad_afterGet(id, data);
|
|
||||||
}, function(err) {
|
|
||||||
main.log(err);
|
|
||||||
alert("无效的存档");
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
control.prototype._doSL_replayLoad_afterGet = function (id, data) {
|
control.prototype._doSL_replayLoad_afterGet = function (id, data) {
|
||||||
@ -1613,6 +1598,34 @@ control.prototype._doSL_replayLoad_afterGet = function (id, data) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
control.prototype._doSL_replayRemain_afterGet = function (id, data) {
|
||||||
|
if (!data) return core.drawTip("无效的存档");
|
||||||
|
|
||||||
|
var route = core.decodeRoute(data.route);
|
||||||
|
if (core.status.tempRoute) {
|
||||||
|
var remainRoute = core.subarray(route, core.status.tempRoute);
|
||||||
|
if (remainRoute == null)
|
||||||
|
return alert("无法接续播放录像!\n该存档必须是前一个选择的存档的后续内容。");
|
||||||
|
delete core.status.tempRoute;
|
||||||
|
core.ui.closePanel();
|
||||||
|
core.startReplay(remainRoute);
|
||||||
|
core.drawTip("接续播放录像");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (data.floorId != core.status.floorId || data.hero.loc.x != core.getHeroLoc('x') || data.hero.loc.y != core.getHeroLoc('y'))
|
||||||
|
return alert("楼层或坐标不一致!");
|
||||||
|
|
||||||
|
core.status.tempRoute = route;
|
||||||
|
core.ui.closePanel();
|
||||||
|
core.drawText("\t[步骤2]请选择第二个存档。\n\r[yellow]该存档必须是前一个存档的后续。\r\n将尝试播放到此存档。", function () {
|
||||||
|
core.status.event.id = 'replayRemain';
|
||||||
|
core.lockControl();
|
||||||
|
var saveIndex = core.saves.saveIndex;
|
||||||
|
var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page;
|
||||||
|
core.ui.drawSLPanel(10 * page + offset);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
////// 同步存档到服务器 //////
|
////// 同步存档到服务器 //////
|
||||||
control.prototype.syncSave = function (type) {
|
control.prototype.syncSave = function (type) {
|
||||||
core.ui.drawWaiting("正在同步,请稍后...");
|
core.ui.drawWaiting("正在同步,请稍后...");
|
||||||
@ -1856,8 +1869,8 @@ control.prototype.getStatus = function (name) {
|
|||||||
////// 从status中获得属性,如果不存在则从勇士属性中获取 //////
|
////// 从status中获得属性,如果不存在则从勇士属性中获取 //////
|
||||||
control.prototype.getStatusOrDefault = function (status, name) {
|
control.prototype.getStatusOrDefault = function (status, name) {
|
||||||
if (status && name in status)
|
if (status && name in status)
|
||||||
return status[name];
|
return Math.floor(status[name]);
|
||||||
return this.getStatus(name);
|
return Math.floor(this.getStatus(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 获得勇士实际属性(增幅后的) //////
|
////// 获得勇士实际属性(增幅后的) //////
|
||||||
@ -1867,7 +1880,7 @@ control.prototype.getRealStatus = function (name) {
|
|||||||
|
|
||||||
////// 从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取 //////
|
////// 从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取 //////
|
||||||
control.prototype.getRealStatusOrDefault = function (status, name) {
|
control.prototype.getRealStatusOrDefault = function (status, name) {
|
||||||
return this.getStatusOrDefault(status, name) * this.getBuff(name);
|
return Math.floor(this.getStatusOrDefault(status, name) * this.getBuff(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 设置某个属性的增幅值 //////
|
////// 设置某个属性的增幅值 //////
|
||||||
@ -1966,6 +1979,10 @@ control.prototype.debug = function() {
|
|||||||
|
|
||||||
// ------ 天气,色调,BGM ------ //
|
// ------ 天气,色调,BGM ------ //
|
||||||
|
|
||||||
|
control.prototype.getMappedName = function (name) {
|
||||||
|
return (main.nameMap || {})[name] || name;
|
||||||
|
}
|
||||||
|
|
||||||
////// 更改天气效果 //////
|
////// 更改天气效果 //////
|
||||||
control.prototype.setWeather = function (type, level) {
|
control.prototype.setWeather = function (type, level) {
|
||||||
// 非雨雪
|
// 非雨雪
|
||||||
@ -2088,6 +2105,7 @@ control.prototype.screenFlash = function (color, time, times, callback) {
|
|||||||
|
|
||||||
////// 播放背景音乐 //////
|
////// 播放背景音乐 //////
|
||||||
control.prototype.playBgm = function (bgm, startTime) {
|
control.prototype.playBgm = function (bgm, startTime) {
|
||||||
|
bgm = core.getMappedName(bgm);
|
||||||
if (main.mode!='play' || !core.material.bgms[bgm]) return;
|
if (main.mode!='play' || !core.material.bgms[bgm]) return;
|
||||||
// 如果不允许播放
|
// 如果不允许播放
|
||||||
if (!core.musicStatus.bgmStatus) {
|
if (!core.musicStatus.bgmStatus) {
|
||||||
@ -2114,8 +2132,6 @@ control.prototype.playBgm = function (bgm, startTime) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
control.prototype._playBgm_play = function (bgm, startTime) {
|
control.prototype._playBgm_play = function (bgm, startTime) {
|
||||||
// 缓存BGM
|
|
||||||
core.loader.loadBgm(bgm);
|
|
||||||
// 如果当前正在播放,且和本BGM相同,直接忽略
|
// 如果当前正在播放,且和本BGM相同,直接忽略
|
||||||
if (core.musicStatus.playingBgm == bgm && !core.material.bgms[core.musicStatus.playingBgm].paused) {
|
if (core.musicStatus.playingBgm == bgm && !core.material.bgms[core.musicStatus.playingBgm].paused) {
|
||||||
return;
|
return;
|
||||||
@ -2124,6 +2140,8 @@ control.prototype._playBgm_play = function (bgm, startTime) {
|
|||||||
if (core.musicStatus.playingBgm) {
|
if (core.musicStatus.playingBgm) {
|
||||||
core.material.bgms[core.musicStatus.playingBgm].pause();
|
core.material.bgms[core.musicStatus.playingBgm].pause();
|
||||||
}
|
}
|
||||||
|
// 缓存BGM
|
||||||
|
core.loader.loadBgm(bgm);
|
||||||
// 播放当前BGM
|
// 播放当前BGM
|
||||||
core.material.bgms[bgm].volume = core.musicStatus.volume;
|
core.material.bgms[bgm].volume = core.musicStatus.volume;
|
||||||
core.material.bgms[bgm].currentTime = startTime || 0;
|
core.material.bgms[bgm].currentTime = startTime || 0;
|
||||||
@ -2152,7 +2170,7 @@ control.prototype.pauseBgm = function () {
|
|||||||
control.prototype.resumeBgm = function () {
|
control.prototype.resumeBgm = function () {
|
||||||
if (main.mode!='play')return;
|
if (main.mode!='play')return;
|
||||||
try {
|
try {
|
||||||
core.playBgm(core.musicStatus.playingBgm || core.musicStatus.lastBgm);
|
core.playBgm(core.musicStatus.playingBgm || core.musicStatus.lastBgm || main.startBgm);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
console.log("无法恢复BGM");
|
console.log("无法恢复BGM");
|
||||||
@ -2182,6 +2200,7 @@ control.prototype.triggerBgm = function () {
|
|||||||
|
|
||||||
////// 播放音频 //////
|
////// 播放音频 //////
|
||||||
control.prototype.playSound = function (sound) {
|
control.prototype.playSound = function (sound) {
|
||||||
|
sound = core.getMappedName(sound);
|
||||||
if (main.mode!='play' || !core.musicStatus.soundStatus || !core.material.sounds[sound]) return;
|
if (main.mode!='play' || !core.musicStatus.soundStatus || !core.material.sounds[sound]) return;
|
||||||
try {
|
try {
|
||||||
if (core.musicStatus.audioContext != null) {
|
if (core.musicStatus.audioContext != null) {
|
||||||
|
|||||||
@ -252,6 +252,8 @@ core.prototype._init_sys_flags = function () {
|
|||||||
core.flags.displayEnemyDamage = core.getLocalStorage('enemyDamage', core.flags.displayEnemyDamage);
|
core.flags.displayEnemyDamage = core.getLocalStorage('enemyDamage', core.flags.displayEnemyDamage);
|
||||||
core.flags.displayCritical = core.getLocalStorage('critical', core.flags.displayCritical);
|
core.flags.displayCritical = core.getLocalStorage('critical', core.flags.displayCritical);
|
||||||
core.flags.displayExtraDamage = core.getLocalStorage('extraDamage', core.flags.displayExtraDamage);
|
core.flags.displayExtraDamage = core.getLocalStorage('extraDamage', core.flags.displayExtraDamage);
|
||||||
|
// 行走速度
|
||||||
|
core.values.moveSpeed = core.getLocalStorage('moveSpeed', core.values.moveSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
core.prototype._init_platform = function () {
|
core.prototype._init_platform = function () {
|
||||||
|
|||||||
@ -360,6 +360,14 @@ enemys.prototype._getCurrentEnemys_sort = function (enemys) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enemys.prototype.hasEnemyLeft = function (enemyId, floorId) {
|
enemys.prototype.hasEnemyLeft = function (enemyId, floorId) {
|
||||||
|
if (floorId == null) floorId = core.status.floorId;
|
||||||
|
if (floorId instanceof Array) {
|
||||||
|
for (var i = 0; i < floorId.length; ++i) {
|
||||||
|
if (core.hasEnemyLeft(enemyId, floorId[i]))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return core.getCurrentEnemys(floorId).filter(function (enemy) {
|
return core.getCurrentEnemys(floorId).filter(function (enemy) {
|
||||||
return enemyId == null || enemy.id == enemyId;
|
return enemyId == null || enemy.id == enemyId;
|
||||||
}).length > 0;
|
}).length > 0;
|
||||||
|
|||||||
@ -41,7 +41,7 @@ events.prototype.startGame = function (hard, seed, route, callback) {
|
|||||||
|
|
||||||
events.prototype._startGame_start = function (hard, seed, route, callback) {
|
events.prototype._startGame_start = function (hard, seed, route, callback) {
|
||||||
console.log('开始游戏');
|
console.log('开始游戏');
|
||||||
core.resetGame(core.firstData.hero, hard, null, core.initStatus.maps);
|
core.resetGame(core.firstData.hero, hard, null, core.clone(core.initStatus.maps));
|
||||||
var nowLoc = core.clone(core.getHeroLoc());
|
var nowLoc = core.clone(core.getHeroLoc());
|
||||||
core.setHeroLoc('x', -1);
|
core.setHeroLoc('x', -1);
|
||||||
core.setHeroLoc('y', -1);
|
core.setHeroLoc('y', -1);
|
||||||
@ -287,8 +287,12 @@ events.prototype.doSystemEvent = function (type, data, callback) {
|
|||||||
|
|
||||||
////// 触发(x,y)点的事件 //////
|
////// 触发(x,y)点的事件 //////
|
||||||
events.prototype._trigger = function (x, y) {
|
events.prototype._trigger = function (x, y) {
|
||||||
// 如果已经死亡,或正处于某事件中,则忽略
|
if (core.status.gameOver) return;
|
||||||
if (core.status.gameOver || core.status.event.id) return;
|
if (core.status.event.id == 'action') {
|
||||||
|
core.insertAction({"type": "trigger", "loc": [x, y]}, x, y, null, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (core.status.event.id) return;
|
||||||
|
|
||||||
var block = core.getBlock(x, y);
|
var block = core.getBlock(x, y);
|
||||||
if (block == null) return;
|
if (block == null) return;
|
||||||
@ -711,7 +715,7 @@ events.prototype._sys_action = function (data, callback) {
|
|||||||
var dir = core.reverseDirection();
|
var dir = core.reverseDirection();
|
||||||
var id = data.event.id, toId = (data.event.faceIds || {})[dir];
|
var id = data.event.id, toId = (data.event.faceIds || {})[dir];
|
||||||
if (toId && id != toId) {
|
if (toId && id != toId) {
|
||||||
var number = core.icons.getNumberById(toId);
|
var number = core.getNumberById(toId);
|
||||||
if (number > 0)
|
if (number > 0)
|
||||||
core.setBlock(number, ex, ey);
|
core.setBlock(number, ex, ey);
|
||||||
}
|
}
|
||||||
@ -924,7 +928,7 @@ events.prototype._action_autoText = function (data, x, y, prefix) {
|
|||||||
|
|
||||||
events.prototype._action_scrollText = function (data, x, y, prefix) {
|
events.prototype._action_scrollText = function (data, x, y, prefix) {
|
||||||
if (this.__action_checkReplaying()) return;
|
if (this.__action_checkReplaying()) return;
|
||||||
this.__action_doAsyncFunc(data.async, core.ui.drawScrollText, data.text, data.lineHeight || 1.4, data.time || 5000);
|
this.__action_doAsyncFunc(data.async, core.drawScrollText, data.text, data.time || 5000, data.lineHeight || 1.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_comment = function (data, x, y, prefix) {
|
events.prototype._action_comment = function (data, x, y, prefix) {
|
||||||
@ -941,9 +945,10 @@ events.prototype._action_setText = function (data, x, y, prefix) {
|
|||||||
core.status.textAttribute[t] = data[t];
|
core.status.textAttribute[t] = data[t];
|
||||||
}
|
}
|
||||||
if (t == 'background') {
|
if (t == 'background') {
|
||||||
var img = core.material.images.images[data[t]];
|
var name = core.getMappedName(data[t]);
|
||||||
|
var img = core.material.images.images[name];
|
||||||
if (img && img.width == 192 && img.height == 128) {
|
if (img && img.width == 192 && img.height == 128) {
|
||||||
core.status.textAttribute[t] = data[t];
|
core.status.textAttribute[t] = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1067,20 +1072,20 @@ events.prototype._action_changePos = function (data, x, y, prefix) {
|
|||||||
|
|
||||||
events.prototype._action_showImage = function (data, x, y, prefix) {
|
events.prototype._action_showImage = function (data, x, y, prefix) {
|
||||||
if (core.isReplaying()) data.time = 0;
|
if (core.isReplaying()) data.time = 0;
|
||||||
this.__action_doAsyncFunc(data.async || data.time == 0, this.showImage,
|
this.__action_doAsyncFunc(data.async || data.time == 0, core.showImage,
|
||||||
data.code, data.image, data.sloc, data.loc, data.opacity, data.time);
|
data.code, data.image, data.sloc, data.loc, data.opacity, data.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_showTextImage = function (data, x, y, prefix) {
|
events.prototype._action_showTextImage = function (data, x, y, prefix) {
|
||||||
var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
|
var loc = this.__action_getLoc(data.loc, 0, 0, prefix);
|
||||||
if (core.isReplaying()) data.time = 0;
|
if (core.isReplaying()) data.time = 0;
|
||||||
this.__action_doAsyncFunc(data.async || data.time == 0, this.showImage,
|
this.__action_doAsyncFunc(data.async || data.time == 0, core.showImage,
|
||||||
data.code, core.ui.textImage(data.text), loc[0], loc[1], 100, 100, data.opacity, data.time);
|
data.code, core.ui.textImage(data.text), loc[0], loc[1], 100, 100, data.opacity, data.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_hideImage = function (data, x, y, prefix) {
|
events.prototype._action_hideImage = function (data, x, y, prefix) {
|
||||||
if (core.isReplaying()) data.time = 0;
|
if (core.isReplaying()) data.time = 0;
|
||||||
this.__action_doAsyncFunc(data.async || data.time == 0, this.hideImage, data.code, data.time);
|
this.__action_doAsyncFunc(data.async || data.time == 0, core.hideImage, data.code, data.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_showGif = function (data, x, y, prefix) {
|
events.prototype._action_showGif = function (data, x, y, prefix) {
|
||||||
@ -1091,7 +1096,7 @@ events.prototype._action_showGif = function (data, x, y, prefix) {
|
|||||||
|
|
||||||
events.prototype._action_moveImage = function (data, x, y, prefix) {
|
events.prototype._action_moveImage = function (data, x, y, prefix) {
|
||||||
if (this.__action_checkReplaying()) return;
|
if (this.__action_checkReplaying()) return;
|
||||||
this.__action_doAsyncFunc(data.async, this.moveImage, data.code, data.to, data.opacity, data.time);
|
this.__action_doAsyncFunc(data.async, core.moveImage, data.code, data.to, data.opacity, data.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_setFg = function (data, x, y, prefix) {
|
events.prototype._action_setFg = function (data, x, y, prefix) {
|
||||||
@ -1250,7 +1255,7 @@ events.prototype._action_stopSound = function (data, x, y, prefix) {
|
|||||||
events.prototype._action_setVolume = function (data, x, y, prefix) {
|
events.prototype._action_setVolume = function (data, x, y, prefix) {
|
||||||
data.value = core.clamp(parseInt(data.value) / 100, 0, 1);
|
data.value = core.clamp(parseInt(data.value) / 100, 0, 1);
|
||||||
core.setFlag("__volume__", data.value);
|
core.setFlag("__volume__", data.value);
|
||||||
this.__action_doAsyncFunc(data.async, this.setVolume, data.value, data.time || 0);
|
this.__action_doAsyncFunc(data.async, core.setVolume, data.value, data.time || 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_setValue = function (data, x, y, prefix) {
|
events.prototype._action_setValue = function (data, x, y, prefix) {
|
||||||
@ -1487,7 +1492,7 @@ events.prototype._action_updateEnemys = function (data, x, y, prefix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_vibrate = function (data, x, y, prefix) {
|
events.prototype._action_vibrate = function (data, x, y, prefix) {
|
||||||
this.__action_doAsyncFunc(data.async, this.vibrate, data.time);
|
this.__action_doAsyncFunc(data.async, core.vibrate, data.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.prototype._action_sleep = function (data, x, y, prefix) {
|
events.prototype._action_sleep = function (data, x, y, prefix) {
|
||||||
@ -1743,6 +1748,7 @@ events.prototype.hasAsync = function () {
|
|||||||
////// 跟随 //////
|
////// 跟随 //////
|
||||||
events.prototype.follow = function (name) {
|
events.prototype.follow = function (name) {
|
||||||
core.status.hero.followers = core.status.hero.followers || [];
|
core.status.hero.followers = core.status.hero.followers || [];
|
||||||
|
name = core.getMappedName(name);
|
||||||
if (core.material.images.images[name]
|
if (core.material.images.images[name]
|
||||||
&& core.material.images.images[name].width == 128) {
|
&& core.material.images.images[name].width == 128) {
|
||||||
core.status.hero.followers.push({"name": name});
|
core.status.hero.followers.push({"name": name});
|
||||||
@ -1759,6 +1765,7 @@ events.prototype.unfollow = function (name) {
|
|||||||
core.status.hero.followers = [];
|
core.status.hero.followers = [];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
name = core.getMappedName(name);
|
||||||
for (var i = 0; i < core.status.hero.followers.length; i++) {
|
for (var i = 0; i < core.status.hero.followers.length; i++) {
|
||||||
if (core.status.hero.followers[i].name == name) {
|
if (core.status.hero.followers[i].name == name) {
|
||||||
core.status.hero.followers.splice(i, 1);
|
core.status.hero.followers.splice(i, 1);
|
||||||
@ -1883,7 +1890,10 @@ events.prototype.closeDoor = function (x, y, id, callback) {
|
|||||||
|
|
||||||
////// 显示图片 //////
|
////// 显示图片 //////
|
||||||
events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, callback) {
|
events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, callback) {
|
||||||
if (typeof image == 'string') image = core.material.images.images[image];
|
if (typeof image == 'string') {
|
||||||
|
image = core.getMappedName(image);
|
||||||
|
image = core.material.images.images[image];
|
||||||
|
}
|
||||||
if (!image) {
|
if (!image) {
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
return;
|
return;
|
||||||
@ -1976,6 +1986,7 @@ events.prototype._moveImage_moving = function (name, moveInfo, callback) {
|
|||||||
|
|
||||||
////// 绘制或取消一张gif图片 //////
|
////// 绘制或取消一张gif图片 //////
|
||||||
events.prototype.showGif = function (name, x, y) {
|
events.prototype.showGif = function (name, x, y) {
|
||||||
|
name = core.getMappedName(name);
|
||||||
var image = core.material.images.images[name];
|
var image = core.material.images.images[name];
|
||||||
if (image) {
|
if (image) {
|
||||||
var gif = new Image();
|
var gif = new Image();
|
||||||
@ -2226,6 +2237,7 @@ events.prototype.canUseQuickShop = function (shopId) {
|
|||||||
|
|
||||||
////// 设置角色行走图 //////
|
////// 设置角色行走图 //////
|
||||||
events.prototype.setHeroIcon = function (name, noDraw) {
|
events.prototype.setHeroIcon = function (name, noDraw) {
|
||||||
|
name = core.getMappedName(name);
|
||||||
var img = core.material.images.images[name];
|
var img = core.material.images.images[name];
|
||||||
if (!img || img.width != 128) return;
|
if (!img || img.width != 128) return;
|
||||||
core.setFlag("heroIcon", name);
|
core.setFlag("heroIcon", name);
|
||||||
|
|||||||
@ -238,6 +238,7 @@ loader.prototype.loadOneSound = function (name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loader.prototype.loadBgm = function (name) {
|
loader.prototype.loadBgm = function (name) {
|
||||||
|
name = core.getMappedName(name);
|
||||||
if (!core.material.bgms[name]) return;
|
if (!core.material.bgms[name]) return;
|
||||||
// 如果没开启音乐,则不预加载
|
// 如果没开启音乐,则不预加载
|
||||||
if (!core.musicStatus.bgmStatus) return;
|
if (!core.musicStatus.bgmStatus) return;
|
||||||
@ -265,6 +266,7 @@ loader.prototype._preloadBgm = function (bgm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loader.prototype.freeBgm = function (name) {
|
loader.prototype.freeBgm = function (name) {
|
||||||
|
name = core.getMappedName(name);
|
||||||
if (!core.material.bgms[name]) return;
|
if (!core.material.bgms[name]) return;
|
||||||
// 从cachedBgms中删除
|
// 从cachedBgms中删除
|
||||||
core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (t) {
|
core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (t) {
|
||||||
|
|||||||
16
libs/maps.js
16
libs/maps.js
@ -784,13 +784,26 @@ maps.prototype._drawBgFgMap = function (floorId, ctx, name, onMap) {
|
|||||||
core.status[name + "maps"] = {};
|
core.status[name + "maps"] = {};
|
||||||
|
|
||||||
var arr = this._getBgFgMapArray(name, floorId, true);
|
var arr = this._getBgFgMapArray(name, floorId, true);
|
||||||
|
var eventArr = null;
|
||||||
|
if (main.mode == 'editor' && name == 'fg' && onMap) {
|
||||||
|
eventArr = this.getMapArray(floorId);
|
||||||
|
}
|
||||||
|
|
||||||
for (var x = 0; x < width; x++) {
|
for (var x = 0; x < width; x++) {
|
||||||
for (var y = 0; y < height; y++) {
|
for (var y = 0; y < height; y++) {
|
||||||
var block = this.initBlock(x, y, arr[y][x], true);
|
var block = this.initBlock(x, y, arr[y][x], true);
|
||||||
block.name = name;
|
block.name = name;
|
||||||
var blockInfo = this.getBlockInfo(block);
|
var blockInfo = this.getBlockInfo(block);
|
||||||
if (!blockInfo) continue;
|
if (!blockInfo) continue;
|
||||||
|
// --- 前景虚化
|
||||||
|
var blur = false, alpha;
|
||||||
|
if (eventArr != null && eventArr[y][x] != 0) {
|
||||||
|
blur = true;
|
||||||
|
alpha = ctx.globalAlpha;
|
||||||
|
ctx.globalAlpha = 0.6;
|
||||||
|
}
|
||||||
this._drawMap_drawBlockInfo(ctx, block, blockInfo, arr, onMap);
|
this._drawMap_drawBlockInfo(ctx, block, blockInfo, arr, onMap);
|
||||||
|
if (blur) ctx.globalAlpha = alpha;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (onMap)
|
if (onMap)
|
||||||
@ -806,6 +819,7 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat
|
|||||||
images.forEach(function (t) {
|
images.forEach(function (t) {
|
||||||
if (typeof t == 'string') t = [0, 0, t];
|
if (typeof t == 'string') t = [0, 0, t];
|
||||||
var dx = parseInt(t[0]), dy = parseInt(t[1]), imageName = t[2], frame = core.clamp(parseInt(t[4]), 1, 8);
|
var dx = parseInt(t[0]), dy = parseInt(t[1]), imageName = t[2], frame = core.clamp(parseInt(t[4]), 1, 8);
|
||||||
|
imageName = core.getMappedName(imageName);
|
||||||
var image = core.material.images.images[imageName];
|
var image = core.material.images.images[imageName];
|
||||||
if (redraw && frame == 1) return; // 不重绘
|
if (redraw && frame == 1) return; // 不重绘
|
||||||
|
|
||||||
@ -1069,6 +1083,7 @@ maps.prototype._drawThumbnail_realDrawTempCanvas = function (floorId, blocks, op
|
|||||||
// 缩略图:勇士
|
// 缩略图:勇士
|
||||||
if (options.heroLoc) {
|
if (options.heroLoc) {
|
||||||
options.heroIcon = options.heroIcon || core.getFlag("heroIcon", "hero.png");
|
options.heroIcon = options.heroIcon || core.getFlag("heroIcon", "hero.png");
|
||||||
|
options.heroIcon = core.getMappedName(options.heroIcon);
|
||||||
var icon = core.material.icons.hero[options.heroLoc.direction];
|
var icon = core.material.icons.hero[options.heroLoc.direction];
|
||||||
var height = core.material.images.images[options.heroIcon].height / 4;
|
var height = core.material.images.images[options.heroIcon].height / 4;
|
||||||
tempCanvas.drawImage(core.material.images.images[options.heroIcon], icon.stop * 32, icon.loc * height, 32, height,
|
tempCanvas.drawImage(core.material.images.images[options.heroIcon], icon.stop * 32, icon.loc * height, 32, height,
|
||||||
@ -1844,6 +1859,7 @@ maps.prototype.drawBoxAnimate = function () {
|
|||||||
|
|
||||||
////// 绘制动画 //////
|
////// 绘制动画 //////
|
||||||
maps.prototype.drawAnimate = function (name, x, y, callback) {
|
maps.prototype.drawAnimate = function (name, x, y, callback) {
|
||||||
|
name = core.getMappedName(name);
|
||||||
|
|
||||||
// 正在播放录像:不显示动画
|
// 正在播放录像:不显示动画
|
||||||
if (core.isReplaying()) {
|
if (core.isReplaying()) {
|
||||||
|
|||||||
95
libs/ui.js
95
libs/ui.js
@ -226,6 +226,7 @@ ui.prototype.drawImage = function (name, image, x, y, w, h, x1, y1, w1, h1) {
|
|||||||
var ctx = this.getContextByName(name);
|
var ctx = this.getContextByName(name);
|
||||||
if (!ctx) return;
|
if (!ctx) return;
|
||||||
if (typeof image == 'string') {
|
if (typeof image == 'string') {
|
||||||
|
image = core.getMappedName(image);
|
||||||
image = core.material.images.images[image];
|
image = core.material.images.images[image];
|
||||||
if (!image) return;
|
if (!image) return;
|
||||||
}
|
}
|
||||||
@ -374,8 +375,10 @@ ui.prototype._getTitleAndIcon = function (content) {
|
|||||||
icon = 0;
|
icon = 0;
|
||||||
height = core.material.icons.hero.height;
|
height = core.material.icons.hero.height;
|
||||||
}
|
}
|
||||||
else if (/^[-\w.]+\.png$/.test(s4))
|
else if (s4.endsWith(".png")) {
|
||||||
|
s4 = core.getMappedName(s4);
|
||||||
image = core.material.images.images[s4];
|
image = core.material.images.images[s4];
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
var blockInfo = core.getBlockInfo(s4);
|
var blockInfo = core.getBlockInfo(s4);
|
||||||
if (blockInfo != null) {
|
if (blockInfo != null) {
|
||||||
@ -509,29 +512,42 @@ ui.prototype.drawBackground = function (left, top, right, bottom, posInfo) {
|
|||||||
var xoffset = posInfo.xoffset || 0, yoffset = posInfo.yoffset || 0;
|
var xoffset = posInfo.xoffset || 0, yoffset = posInfo.yoffset || 0;
|
||||||
var background = core.status.textAttribute.background;
|
var background = core.status.textAttribute.background;
|
||||||
|
|
||||||
|
if (this._drawBackground_drawWindowSkin(background, left, top, right, bottom, posInfo.position, px, py))
|
||||||
|
return true;
|
||||||
|
if (typeof background == 'string') background = core.initStatus.textAttribute.background;
|
||||||
|
this._drawBackground_drawColor(background, left, top, right, bottom, posInfo.position, px, py, xoffset, yoffset);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.prototype._drawWindowSkin_getOpacity = function () {
|
||||||
|
return core.getFlag("__winskin_opacity__", 0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.prototype._drawBackground_drawWindowSkin = function (background, left, top, right, bottom, position, px, py) {
|
||||||
if (typeof background == 'string' && core.material.images.images[background]) {
|
if (typeof background == 'string' && core.material.images.images[background]) {
|
||||||
var image = core.material.images.images[background];
|
var image = core.material.images.images[background];
|
||||||
if (image.width==192 && image.height==128) {
|
if (image.width==192 && image.height==128) {
|
||||||
core.setAlpha('ui', 0.85);
|
core.setAlpha('ui', this._drawWindowSkin_getOpacity());
|
||||||
this.drawWindowSkin(image, 'ui', left, top, right - left, bottom - top, posInfo.position, px, py);
|
this.drawWindowSkin(image, 'ui', left, top, right - left, bottom - top, position, px, py);
|
||||||
core.setAlpha('ui', 1);
|
core.setAlpha('ui', 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
background = core.initStatus.textAttribute.background;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.prototype._drawBackground_drawColor = function (background, left, top, right, bottom, position, px, py, xoffset, yoffset) {
|
||||||
var alpha = background[3];
|
var alpha = background[3];
|
||||||
core.setAlpha('ui', alpha);
|
core.setAlpha('ui', alpha);
|
||||||
core.setStrokeStyle('ui', core.status.globalAttribute.borderColor);
|
core.setStrokeStyle('ui', core.status.globalAttribute.borderColor);
|
||||||
core.setFillStyle('ui', core.arrayToRGB(background));
|
core.setFillStyle('ui', core.arrayToRGB(background));
|
||||||
core.setLineWidth('ui', 2);
|
core.setLineWidth('ui', 2);
|
||||||
|
|
||||||
// 绘制
|
// 绘制
|
||||||
var ctx = core.canvas.ui;
|
var ctx = core.canvas.ui;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.moveTo(left, top);
|
ctx.moveTo(left, top);
|
||||||
// 上边缘三角
|
// 上边缘三角
|
||||||
if (posInfo.position == 'down' && px != null && py != null) {
|
if (position == 'down' && px != null && py != null) {
|
||||||
ctx.lineTo(px + xoffset, top);
|
ctx.lineTo(px + xoffset, top);
|
||||||
ctx.lineTo(px + 16, top - yoffset);
|
ctx.lineTo(px + 16, top - yoffset);
|
||||||
ctx.lineTo(px + 32 - xoffset, top);
|
ctx.lineTo(px + 32 - xoffset, top);
|
||||||
@ -539,7 +555,7 @@ ui.prototype.drawBackground = function (left, top, right, bottom, posInfo) {
|
|||||||
ctx.lineTo(right, top);
|
ctx.lineTo(right, top);
|
||||||
ctx.lineTo(right, bottom);
|
ctx.lineTo(right, bottom);
|
||||||
// 下边缘三角
|
// 下边缘三角
|
||||||
if (posInfo.position == 'up' && px != null && py != null) {
|
if (position == 'up' && px != null && py != null) {
|
||||||
ctx.lineTo(px + 32 - xoffset, bottom);
|
ctx.lineTo(px + 32 - xoffset, bottom);
|
||||||
ctx.lineTo(px + 16, bottom + yoffset);
|
ctx.lineTo(px + 16, bottom + yoffset);
|
||||||
ctx.lineTo(px + xoffset, bottom);
|
ctx.lineTo(px + xoffset, bottom);
|
||||||
@ -549,7 +565,6 @@ ui.prototype.drawBackground = function (left, top, right, bottom, posInfo) {
|
|||||||
ctx.fill();
|
ctx.fill();
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
core.setAlpha('ui', 1);
|
core.setAlpha('ui', 1);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 计算有效文本框的宽度
|
////// 计算有效文本框的宽度
|
||||||
@ -802,7 +817,7 @@ ui.prototype.drawTextBox = function(content, showAll) {
|
|||||||
var pInfo = core.clone(posInfo);
|
var pInfo = core.clone(posInfo);
|
||||||
pInfo.xoffset = hPos.xoffset; pInfo.yoffset = vPos.yoffset - 4;
|
pInfo.xoffset = hPos.xoffset; pInfo.yoffset = vPos.yoffset - 4;
|
||||||
var isWindowSkin = this.drawBackground(hPos.left, vPos.top, hPos.right, vPos.bottom, pInfo);
|
var isWindowSkin = this.drawBackground(hPos.left, vPos.top, hPos.right, vPos.bottom, pInfo);
|
||||||
var alpha = isWindowSkin ? 0.85 : textAttribute.background[3];
|
var alpha = isWindowSkin ? this._drawWindowSkin_getOpacity() : textAttribute.background[3];
|
||||||
|
|
||||||
// Step 4: 绘制标题、头像、动画
|
// Step 4: 绘制标题、头像、动画
|
||||||
var content_top = this._drawTextBox_drawTitleAndIcon(titleInfo, hPos, vPos, alpha);
|
var content_top = this._drawTextBox_drawTitleAndIcon(titleInfo, hPos, vPos, alpha);
|
||||||
@ -818,6 +833,7 @@ ui.prototype._drawTextBox_drawImages = function (content) {
|
|||||||
return content.replace(/(\f|\\f)\[(.*?)]/g, function (text, sympol, str) {
|
return content.replace(/(\f|\\f)\[(.*?)]/g, function (text, sympol, str) {
|
||||||
var ss = str.split(",");
|
var ss = str.split(",");
|
||||||
if (ss.length!=3 && ss.length!=5 && ss.length!=9) return "";
|
if (ss.length!=3 && ss.length!=5 && ss.length!=9) return "";
|
||||||
|
ss[0] = core.getMappedName(ss[0]);
|
||||||
var img = core.material.images.images[ss[0]];
|
var img = core.material.images.images[ss[0]];
|
||||||
if (!img) return "";
|
if (!img) return "";
|
||||||
// 绘制
|
// 绘制
|
||||||
@ -1174,6 +1190,7 @@ ui.prototype.drawSwitchs = function() {
|
|||||||
var choices = [
|
var choices = [
|
||||||
"背景音乐: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]"),
|
"背景音乐: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]"),
|
||||||
"背景音效: "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"),
|
"背景音效: "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"),
|
||||||
|
"行走速度: "+parseInt(core.values.moveSpeed),
|
||||||
"怪物显伤: "+(core.flags.displayEnemyDamage ? "[ON]" : "[OFF]"),
|
"怪物显伤: "+(core.flags.displayEnemyDamage ? "[ON]" : "[OFF]"),
|
||||||
"临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"),
|
"临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"),
|
||||||
"领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"),
|
"领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"),
|
||||||
@ -1210,7 +1227,7 @@ ui.prototype.drawQuickShop = function () {
|
|||||||
ui.prototype.drawSyncSave = function () {
|
ui.prototype.drawSyncSave = function () {
|
||||||
core.status.event.id = 'syncSave';
|
core.status.event.id = 'syncSave';
|
||||||
this.drawChoices(null, [
|
this.drawChoices(null, [
|
||||||
"同步存档到服务器", "从服务器加载存档", "存档至本地文件", "从本地文件读档", "回放当前录像", "下载当前录像", "清空本地存档", "返回主菜单"
|
"同步存档到服务器", "从服务器加载存档", "存档至本地文件", "从本地文件读档", "回放和下载录像", "清空本地存档", "返回主菜单"
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1242,7 +1259,7 @@ ui.prototype.drawReplay = function () {
|
|||||||
core.lockControl();
|
core.lockControl();
|
||||||
core.status.event.id = 'replay';
|
core.status.event.id = 'replay';
|
||||||
this.drawChoices(null, [
|
this.drawChoices(null, [
|
||||||
"从头回放录像", "从存档开始回放", "选择录像文件", "下载当前录像", "返回游戏"
|
"从头回放录像", "从存档开始回放", "接续播放剩余录像", "选择录像文件", "下载当前录像", "返回游戏"
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1309,12 +1326,14 @@ ui.prototype.drawBook = function (index) {
|
|||||||
|
|
||||||
index = core.clamp(index, 0, enemys.length - 1);
|
index = core.clamp(index, 0, enemys.length - 1);
|
||||||
core.status.event.data = index;
|
core.status.event.data = index;
|
||||||
var perpage = this.HSIZE, page = parseInt(index / perpage) + 1, totalPage = Math.ceil(enemys.length / perpage);
|
var pageinfo = this._drawBook_pageinfo();
|
||||||
|
var perpage = pageinfo.per_page, page = parseInt(index / perpage) + 1, totalPage = Math.ceil(enemys.length / perpage);
|
||||||
|
|
||||||
var start = (page - 1) * perpage;
|
var start = (page - 1) * perpage;
|
||||||
enemys = enemys.slice(start, page * perpage);
|
enemys = enemys.slice(start, page * perpage);
|
||||||
|
|
||||||
for (var i = 0; i < enemys.length; i++)
|
for (var i = 0; i < enemys.length; i++)
|
||||||
this._drawBook_drawOne(floorId, i, enemys[i], index == start + i);
|
this._drawBook_drawOne(floorId, i, enemys[i], pageinfo, index == start + i);
|
||||||
|
|
||||||
core.drawBoxAnimate();
|
core.drawBoxAnimate();
|
||||||
this.drawPagination(page, totalPage);
|
this.drawPagination(page, totalPage);
|
||||||
@ -1322,6 +1341,13 @@ ui.prototype.drawBook = function (index) {
|
|||||||
core.fillText('ui', '返回游戏', this.PIXEL - 46, this.PIXEL - 13,'#DDDDDD', this._buildFont(15, true));
|
core.fillText('ui', '返回游戏', this.PIXEL - 46, this.PIXEL - 13,'#DDDDDD', this._buildFont(15, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.prototype._drawBook_pageinfo = function () {
|
||||||
|
var per_page = this.HSIZE; // 每页个数
|
||||||
|
var padding_top = 12; // 距离顶端像素
|
||||||
|
var per_height = (this.PIXEL - 32 - padding_top) / per_page;
|
||||||
|
return { per_page: per_page, padding_top: padding_top, per_height: per_height };
|
||||||
|
}
|
||||||
|
|
||||||
ui.prototype._drawBook_drawBackground = function () {
|
ui.prototype._drawBook_drawBackground = function () {
|
||||||
core.setAlpha('ui', 1);
|
core.setAlpha('ui', 1);
|
||||||
core.setFillStyle('ui', core.material.groundPattern);
|
core.setFillStyle('ui', core.material.groundPattern);
|
||||||
@ -1332,24 +1358,24 @@ ui.prototype._drawBook_drawBackground = function () {
|
|||||||
core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL);
|
core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.prototype._drawBook_drawOne = function (floorId, index, enemy, selected) {
|
ui.prototype._drawBook_drawOne = function (floorId, index, enemy, pageinfo, selected) {
|
||||||
// --- 区域规划:每个区域总高度为62,宽度为 PIXEL
|
// --- 区域规划:每个区域总高度默认为62,宽度为 PIXEL
|
||||||
var top = 62 * index + 12; // 最上面margin是12px
|
var top = pageinfo.per_height * index + pageinfo.padding_top; // 最上面margin默认是12px
|
||||||
// 横向规划:
|
// 横向规划:
|
||||||
// 22 + 42 = 64 是头像框
|
// 22 + 42 = 64 是头像框
|
||||||
this._drawBook_drawBox(index, enemy, top);
|
this._drawBook_drawBox(index, enemy, top, pageinfo);
|
||||||
// 剩余 PIXEL - 64 的宽度,按照 10 : 9 : 8 : 8 的比例划分
|
// 剩余 PIXEL - 64 的宽度,按照 10 : 9 : 8 : 8 的比例划分
|
||||||
var left = 64, total_width = this.PIXEL - left;
|
var left = 64, total_width = this.PIXEL - left;
|
||||||
var name_width = total_width * 10 / 35;
|
var name_width = total_width * 10 / 35;
|
||||||
this._drawBook_drawName(index, enemy, top, left, name_width);
|
this._drawBook_drawName(index, enemy, top, left, name_width);
|
||||||
this._drawBook_drawContent(index, enemy, top, left + name_width);
|
this._drawBook_drawContent(index, enemy, top, left + name_width);
|
||||||
if (selected)
|
if (selected)
|
||||||
core.strokeRect('ui', 10, top + 1, this.PIXEL - 10 * 2, 62, '#FFD700');
|
core.strokeRect('ui', 10, top + 1, this.PIXEL - 10 * 2, pageinfo.per_height, '#FFD700');
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.prototype._drawBook_drawBox = function (index, enemy, top) {
|
ui.prototype._drawBook_drawBox = function (index, enemy, top, pageinfo) {
|
||||||
// 横向:22+42;纵向:10 + 42 + 10(正好居中);内部图像 32x32
|
// 横向:22+42;纵向:10 + 42 + 10(正好居中);内部图像 32x32
|
||||||
var border_top = top + 10, border_left = 22;
|
var border_top = top + (pageinfo.per_height - 42) / 2, border_left = 22;
|
||||||
var img_top = border_top + 5, img_left = border_left + 5;
|
var img_top = border_top + 5, img_left = border_left + 5;
|
||||||
core.strokeRect('ui', 22, border_top, 42, 42, '#DDDDDD', 2);
|
core.strokeRect('ui', 22, border_top, 42, 42, '#DDDDDD', 2);
|
||||||
var blockInfo = core.getBlockInfo(enemy.id);
|
var blockInfo = core.getBlockInfo(enemy.id);
|
||||||
@ -2011,19 +2037,19 @@ ui.prototype._drawEquipbox_getStatusChanged = function (info, equip, equipType)
|
|||||||
ui.prototype._drawEquipbox_drawStatusChanged = function (info, y, equip, equipType) {
|
ui.prototype._drawEquipbox_drawStatusChanged = function (info, y, equip, equipType) {
|
||||||
var compare = this._drawEquipbox_getStatusChanged(info, equip, equipType);
|
var compare = this._drawEquipbox_getStatusChanged(info, equip, equipType);
|
||||||
if (compare == null) return;
|
if (compare == null) return;
|
||||||
var drawOffset = 10;
|
var obj = { drawOffset: 10, y: y };
|
||||||
|
|
||||||
// --- 变化值...
|
// --- 变化值...
|
||||||
core.setFont('ui', this._buildFont(14, true));
|
core.setFont('ui', this._buildFont(14, true));
|
||||||
for (var name in compare) {
|
for (var name in compare) {
|
||||||
var img = core.statusBar.icons[name];
|
var img = core.statusBar.icons[name];
|
||||||
var text = core.getStatusName(name);
|
var text = core.getStatusName(name);
|
||||||
if (img && core.flags.iconInEquipbox) { // 绘制图标
|
if (img && core.flags.iconInEquipbox) { // 绘制图标
|
||||||
core.drawImage('ui', img, 0, 0, 32, 32, drawOffset, y - 13, 16, 16);
|
core.drawImage('ui', img, 0, 0, 32, 32, obj.drawOffset, obj.y - 13, 16, 16);
|
||||||
drawOffset += 20;
|
obj.drawOffset += 20;
|
||||||
}
|
}
|
||||||
else { // 绘制文字
|
else { // 绘制文字
|
||||||
core.fillText('ui', text + " ", drawOffset, y, '#CCCCCC');
|
this._drawEquipbox_drawStatusChanged_draw(text + " ", '#CCCCCC', obj);
|
||||||
drawOffset += core.calWidth('ui', text + " ");
|
|
||||||
}
|
}
|
||||||
var nowValue = core.getStatus(name) * core.getBuff(name), newValue = (nowValue + compare[name]) * core.getBuff(name);
|
var nowValue = core.getStatus(name) * core.getBuff(name), newValue = (nowValue + compare[name]) * core.getBuff(name);
|
||||||
if (equip.equip.percentage) {
|
if (equip.equip.percentage) {
|
||||||
@ -2033,13 +2059,22 @@ ui.prototype._drawEquipbox_drawStatusChanged = function (info, y, equip, equipTy
|
|||||||
}
|
}
|
||||||
nowValue = core.formatBigNumber(nowValue);
|
nowValue = core.formatBigNumber(nowValue);
|
||||||
newValue = core.formatBigNumber(newValue);
|
newValue = core.formatBigNumber(newValue);
|
||||||
core.fillText('ui', nowValue + "->", drawOffset, y, '#CCCCCC');
|
this._drawEquipbox_drawStatusChanged_draw(nowValue+"->", '#CCCCCC', obj);
|
||||||
drawOffset += core.calWidth('ui', nowValue + "->");
|
this._drawEquipbox_drawStatusChanged_draw(newValue, compare[name]>0?'#00FF00':'#FF0000', obj);
|
||||||
core.fillText('ui', newValue, drawOffset, y, compare[name]>0?'#00FF00':'#FF0000');
|
obj.drawOffset += 8;
|
||||||
drawOffset += core.calWidth('ui', newValue) + 8;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.prototype._drawEquipbox_drawStatusChanged_draw = function (text, color, obj) {
|
||||||
|
var len = core.calWidth('ui', text);
|
||||||
|
if (obj.drawOffset + len >= core.__PIXELS__) { // 换行
|
||||||
|
obj.y += 19;
|
||||||
|
obj.drawOffset = 10;
|
||||||
|
}
|
||||||
|
core.fillText('ui', text, obj.drawOffset, obj.y, color);
|
||||||
|
obj.drawOffset += len;
|
||||||
|
}
|
||||||
|
|
||||||
ui.prototype._drawEquipbox_drawEquiped = function (info, line) {
|
ui.prototype._drawEquipbox_drawEquiped = function (info, line) {
|
||||||
core.setTextAlign('ui', 'center');
|
core.setTextAlign('ui', 'center');
|
||||||
var per_line = this.HSIZE - 3, width = Math.floor(this.PIXEL / (per_line + 0.25));
|
var per_line = this.HSIZE - 3, width = Math.floor(this.PIXEL / (per_line + 0.25));
|
||||||
@ -2169,7 +2204,7 @@ ui.prototype._drawSLPanel_drawRecords = function (n) {
|
|||||||
var page = core.status.event.data.page;
|
var page = core.status.event.data.page;
|
||||||
var offset = core.status.event.data.offset;
|
var offset = core.status.event.data.offset;
|
||||||
var u = Math.floor(this.PIXEL/6), size = Math.floor(this.PIXEL/3-20);
|
var u = Math.floor(this.PIXEL/6), size = Math.floor(this.PIXEL/3-20);
|
||||||
var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":core.status.event.id=='replayLoad'?"回放":"";
|
var name=core.status.event.id=='save'?"存档":core.status.event.id=='load'?"读档":"回放";
|
||||||
|
|
||||||
for (var i = 0; i < (n||6); i++){
|
for (var i = 0; i < (n||6); i++){
|
||||||
var data = core.status.event.ui[i];
|
var data = core.status.event.ui[i];
|
||||||
|
|||||||
@ -63,10 +63,10 @@ utils.prototype.replaceText = function (text, need, times) {
|
|||||||
utils.prototype.calValue = function (value, prefix, need, times) {
|
utils.prototype.calValue = function (value, prefix, need, times) {
|
||||||
if (!core.isset(value)) return null;
|
if (!core.isset(value)) return null;
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
value = value.replace(/status:([\w\d_]+)/g, "core.getStatus('$1')");
|
value = value.replace(/status:([a-zA-Z0-9_]+)/g, "core.getStatus('$1')");
|
||||||
value = value.replace(/item:([\w\d_]+)/g, "core.itemCount('$1')");
|
value = value.replace(/item:([a-zA-Z0-9_]+)/g, "core.itemCount('$1')");
|
||||||
value = value.replace(/flag:([\w\d_]+)/g, "core.getFlag('$1', 0)");
|
value = value.replace(/flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)/g, "core.getFlag('$1', 0)");
|
||||||
value = value.replace(/switch:([\w\d_]+)/g, "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)");
|
value = value.replace(/switch:([a-zA-Z0-9_]+)/g, "core.getFlag('" + (prefix || ":f@x@y") + "@$1', 0)");
|
||||||
return eval(value);
|
return eval(value);
|
||||||
}
|
}
|
||||||
if (value instanceof Function) {
|
if (value instanceof Function) {
|
||||||
@ -282,8 +282,10 @@ utils.prototype.clone = function (data, filter, recursion) {
|
|||||||
|
|
||||||
////// 裁剪图片 //////
|
////// 裁剪图片 //////
|
||||||
utils.prototype.splitImage = function (image, width, height) {
|
utils.prototype.splitImage = function (image, width, height) {
|
||||||
if (typeof image == "string")
|
if (typeof image == "string") {
|
||||||
|
image = core.getMappedName(image);
|
||||||
image = core.material.images.images[image];
|
image = core.material.images.images[image];
|
||||||
|
}
|
||||||
if (!image) return [];
|
if (!image) return [];
|
||||||
width = width || 32;
|
width = width || 32;
|
||||||
height = height || width;
|
height = height || width;
|
||||||
|
|||||||
@ -35,6 +35,10 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
|
|||||||
"bomb.mp3",
|
"bomb.mp3",
|
||||||
"centerFly.mp3"
|
"centerFly.mp3"
|
||||||
],
|
],
|
||||||
|
"nameMap": {
|
||||||
|
"背景图.jpg": "bg.jpg",
|
||||||
|
"背景音乐.mp3": "bgm.mp3"
|
||||||
|
},
|
||||||
"startBackground": "bg.jpg",
|
"startBackground": "bg.jpg",
|
||||||
"startLogoStyle": "color: black",
|
"startLogoStyle": "color: black",
|
||||||
"levelChoose": [
|
"levelChoose": [
|
||||||
@ -63,7 +67,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
|
|||||||
"statusLeftBackground": "url(project/images/ground.png) repeat",
|
"statusLeftBackground": "url(project/images/ground.png) repeat",
|
||||||
"statusTopBackground": "url(project/images/ground.png) repeat",
|
"statusTopBackground": "url(project/images/ground.png) repeat",
|
||||||
"toolsBackground": "url(project/images/ground.png) repeat",
|
"toolsBackground": "url(project/images/ground.png) repeat",
|
||||||
"borderColor": "white",
|
"borderColor": "#CCCCCC",
|
||||||
"statusBarColor": "white",
|
"statusBarColor": "white",
|
||||||
"hardLabelColor": "red",
|
"hardLabelColor": "red",
|
||||||
"floorChangingBackground": "black",
|
"floorChangingBackground": "black",
|
||||||
|
|||||||
@ -9,7 +9,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
// 这一步会清空状态栏和全部画布内容,并删除所有动态创建的画布
|
// 这一步会清空状态栏和全部画布内容,并删除所有动态创建的画布
|
||||||
core.clearStatus();
|
core.clearStatus();
|
||||||
// 初始化status
|
// 初始化status
|
||||||
core.status = core.clone(core.initStatus);
|
core.status = core.clone(core.initStatus, function (name) {
|
||||||
|
return name != 'hero' && name != 'maps';
|
||||||
|
});
|
||||||
core.status.played = true;
|
core.status.played = true;
|
||||||
// 初始化人物,图标,统计信息
|
// 初始化人物,图标,统计信息
|
||||||
core.status.hero = core.clone(hero);
|
core.status.hero = core.clone(hero);
|
||||||
@ -22,7 +24,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.status.hard = hard || "";
|
core.status.hard = hard || "";
|
||||||
// 初始化地图
|
// 初始化地图
|
||||||
core.status.floorId = floorId;
|
core.status.floorId = floorId;
|
||||||
core.status.maps = core.clone(maps);
|
core.status.maps = maps;
|
||||||
// 初始化怪物和道具
|
// 初始化怪物和道具
|
||||||
core.material.enemys = core.enemys.getEnemys();
|
core.material.enemys = core.enemys.getEnemys();
|
||||||
core.material.items = core.items.getItems();
|
core.material.items = core.items.getItems();
|
||||||
@ -968,6 +970,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.events.setVolume(core.getFlag("__volume__", 1), 0);
|
core.events.setVolume(core.getFlag("__volume__", 1), 0);
|
||||||
// 加载勇士图标
|
// 加载勇士图标
|
||||||
var icon = core.getFlag("heroIcon", "hero.png");
|
var icon = core.getFlag("heroIcon", "hero.png");
|
||||||
|
icon = core.getMappedName(icon);
|
||||||
if (core.material.images.images[icon]) {
|
if (core.material.images.images[icon]) {
|
||||||
core.material.images.hero.src = core.material.images.images[icon].src;
|
core.material.images.hero.src = core.material.images.images[icon].src;
|
||||||
core.material.icons.hero.height = core.material.images.images[icon].height / 4;
|
core.material.icons.hero.height = core.material.images.images[icon].height / 4;
|
||||||
@ -978,7 +981,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
// TODO:增加自己的一些读档处理
|
// TODO:增加自己的一些读档处理
|
||||||
|
|
||||||
// 切换到对应的楼层
|
// 切换到对应的楼层
|
||||||
core.changeFloor(data.floorId, null, data.hero.loc, 0, callback, true);
|
core.changeFloor(data.floorId, null, data.hero.loc, 0, function () {
|
||||||
|
// TODO:可以在这里设置读档后播放BGM
|
||||||
|
// if (core.getFlag("bgm", 0)==1) core.playBgm("bgm.mp3");
|
||||||
|
|
||||||
|
if (callback) callback();
|
||||||
|
}, true);
|
||||||
},
|
},
|
||||||
"updateStatusBar": function () {
|
"updateStatusBar": function () {
|
||||||
// 更新状态栏
|
// 更新状态栏
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user