diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index ad12ff1a..399a4c1b 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -1651,8 +1651,8 @@ Arithmetic_List ; Weather_List - : '无'|'雨'|'雪' - /*Weather_List ['','rain','snow']*/; + : '无'|'雨'|'雪'|'雾' + /*Weather_List ['','rain','snow','fog']*/; B_0_List : '不改变'|'不可通行'|'可以通行' @@ -1675,8 +1675,8 @@ Global_Attribute_List /*Global_Attribute_List ['font','statusLeftBackground','statusTopBackground', 'toolsBackground', 'borderColor', 'statusBarColor', 'hardLabelColor', 'floorChangingBackground', 'floorChangingTextColor']*/; Global_Value_List - : '血网伤害'|'中毒伤害'|'衰弱效果'|'红宝石效果'|'蓝宝石效果'|'绿宝石效果'|'红血瓶效果'|'蓝血瓶效果'|'黄血瓶效果'|'绿血瓶效果'|'破甲比例'|'反击比例'|'净化比例'|'仇恨增加值'|'行走速度'|'动画时间' - /*Global_Value_List ['lavaDamage','poisonDamage','weakValue', 'redJewel', 'blueJewel', 'greenJewel', 'redPotion', 'bluePotion', 'yellowPotion', 'greenPotion', 'breakArmor', 'counterAttack', 'purify', 'hatred', 'moveSpeed', 'animateSpeed']*/; + : '血网伤害'|'中毒伤害'|'衰弱效果'|'红宝石效果'|'蓝宝石效果'|'绿宝石效果'|'红血瓶效果'|'蓝血瓶效果'|'黄血瓶效果'|'绿血瓶效果'|'破甲比例'|'反击比例'|'净化比例'|'仇恨增加值'|'行走速度'|'动画时间'|'楼层切换时间' + /*Global_Value_List ['lavaDamage','poisonDamage','weakValue', 'redJewel', 'blueJewel', 'greenJewel', 'redPotion', 'bluePotion', 'yellowPotion', 'greenPotion', 'breakArmor', 'counterAttack', 'purify', 'hatred', 'moveSpeed', 'animateSpeed', 'floorChangeTime']*/; Bool: 'TRUE' | 'FALSE' @@ -1904,7 +1904,7 @@ ActionParser.prototype.parseAction = function() { case "autoText": // 自动剧情文本 data.time=this.isset(data.time)?data.time:MotaActionBlocks['autoText_s'].fieldDefault[3]; this.next = MotaActionBlocks['autoText_s'].xmlText([ - '','','',data.time,this.EvalString(data.text),this.next]); + '','','',data.time||0,this.EvalString(data.text),this.next]); break; case "comment": // 注释 this.next = MotaActionBlocks['comment_s'].xmlText([data.text,this.next]); @@ -1916,7 +1916,7 @@ ActionParser.prototype.parseAction = function() { if (!/^\w+\.png$/.test(data.background)) data.background=setTextfunc(data.background); this.next = MotaActionBlocks['setText_s'].xmlText([ - data.position,data.offset,data.title,data.text,data.background,data.bold,data.titlefont,data.textfont,data.time,this.next]); + data.position,data.offset,data.title,data.text,data.background,data.bold,data.titlefont,data.textfont,data.time||0,this.next]); break; case "tip": this.next = MotaActionBlocks['tip_s'].xmlText([ @@ -2069,10 +2069,10 @@ ActionParser.prototype.parseAction = function() { case "animateImage": // 显示图片 if(data.action == 'show'){ this.next = MotaActionBlocks['animateImage_0_s'].xmlText([ - data.name,data.loc[0],data.loc[1],data.time,data.keep||false,data.async||false,this.next]); + data.name,data.loc[0],data.loc[1],data.time||0,data.keep||false,data.async||false,this.next]); } else if (data.action == 'hide') { this.next = MotaActionBlocks['animateImage_1_s'].xmlText([ - data.name,data.loc[0],data.loc[1],data.time,data.keep||false,data.async||false,this.next]); + data.name,data.loc[0],data.loc[1],data.time||0,data.keep||false,data.async||false,this.next]); } break; case "showGif": // 显示动图 @@ -2086,7 +2086,7 @@ ActionParser.prototype.parseAction = function() { break; case "moveImage": // 移动图片 this.next = MotaActionBlocks['moveImage_0_s'].xmlText([ - data.name, data.from[0], data.from[1], data.to[0], data.to[1], data.time, data.keep||false, data.async||false, this.next + data.name, data.from[0], data.from[1], data.to[0], data.to[1], data.time||0, data.keep||false, data.async||false, this.next ]); break; case "setFg": // 颜色渐变 @@ -2147,7 +2147,7 @@ ActionParser.prototype.parseAction = function() { break case "setVolume": this.next = MotaActionBlocks['setVolume_s'].xmlText([ - data.value, data.time, data.async||false, this.next]); + data.value, data.time||0, data.async||false, this.next]); break case "setValue": this.next = MotaActionBlocks['setValue_s'].xmlText([ @@ -2246,7 +2246,7 @@ ActionParser.prototype.parseAction = function() { break; case "sleep": // 等待多少毫秒 this.next = MotaActionBlocks['sleep_s'].xmlText([ - data.time,this.next]); + data.time||0,this.next]); break; case "wait": // 等待用户操作 this.next = MotaActionBlocks['wait_s'].xmlText([ diff --git a/_server/comment.js b/_server/comment.js index 2b7fcc33..9577712f 100644 --- a/_server/comment.js +++ b/_server/comment.js @@ -376,7 +376,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "weather": { "_leaf": true, "_type": "textarea", - "_data": "该层的默认天气。本项可忽略表示晴天,如果写则第一项为\"rain\"或\"snow\"代表雨雪,第二项为1-10之间的数代表强度。\n如[\"rain\", 8]代表8级雨天。" + "_data": "该层的默认天气。本项可忽略表示晴天,如果写则第一项为\"rain\",\"snow\"或\"fog\"代表雨雪雾,第二项为1-10之间的数代表强度。\n如[\"rain\", 8]代表8级雨天。" }, "bgm": { "_leaf": true, diff --git a/_server/data.comment.js b/_server/data.comment.js index ab8ddd6e..ec0d4f11 100644 --- a/_server/data.comment.js +++ b/_server/data.comment.js @@ -389,6 +389,11 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_leaf": true, "_type": "textarea", "_data": "全局动画时间,即怪物振动频率,一般300比较合适" + }, + "floorChangeTime": { + "_leaf": true, + "_type": "textarea", + "_data": "默认楼层切换时间" } } }, diff --git a/_server/editor.js b/_server/editor.js index 6c92568c..f83e68b4 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -197,7 +197,12 @@ editor.prototype.fetchMapFromCore = function(){ var mapArray = core.maps.save(core.status.maps, core.status.floorId); editor.map = mapArray.map(function (v) { return v.map(function (v) { - return editor.ids[[editor.indexs[parseInt(v)][0]]] + var x = parseInt(v), y = editor.indexs[x]; + if (!core.isset(y)) { + printe("素材数字"+x+"未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?"); + y = [0]; + } + return editor.ids[y[0]] }) }); editor.currentFloorId = core.status.floorId; @@ -210,7 +215,12 @@ editor.prototype.fetchMapFromCore = function(){ } editor[name]=mapArray.map(function (v) { return v.map(function (v) { - return editor.ids[[editor.indexs[parseInt(v)][0]]] + var x = parseInt(v), y = editor.indexs[x]; + if (!core.isset(y)) { + printe("素材数字"+x+"未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?"); + y = [0]; + } + return editor.ids[y[0]] }) }); } diff --git a/_server/editor_mode.js b/_server/editor_mode.js index 94e65bee..031dd8b9 100644 --- a/_server/editor_mode.js +++ b/_server/editor_mode.js @@ -587,15 +587,16 @@ editor_mode = function (editor) { tempCanvas.imageSmoothingEnabled = false; tempCanvas.drawImage(image, 0, 0); var imgData = tempCanvas.getImageData(0, 0, image.width, image.height); - var trans = 0, white = 0; + var trans = 0, white = 0, black=0; for (var i=0;itrans*10 && confirm("看起来这张图片是以白色为底色,是否自动调整为透明底色?")) { + if (white>black && white>trans*10 && confirm("看起来这张图片是以纯白为底色,是否自动调整为透明底色?")) { for (var i=0;iwhite && black>trans*10 && confirm("看起来这张图片是以纯黑为底色,是否自动调整为透明底色?")) { + for (var i=0;i 0) { + core.clearMap('weather'); + if (core.animateFrame.weather.fog) { + var w = 416, h = 416; + core.setAlpha('weather', 0.5); + core.animateFrame.weather.nodes.forEach(function (p) { + core.canvas.weather.drawImage(core.animateFrame.weather.fog, p.x - ox, p.y - oy, w, h); + + p.x += p.xs; + p.y += p.ys; + if (p.x > core.bigmap.width*32 - w/2) { + p.x = core.bigmap.width*32 - w/2 - 1; + p.xs = -p.xs; + } + if (p.x < -w/2) { + p.x = -w/2+1; + p.xs = -p.xs; + } + if (p.y > core.bigmap.height*32 - h/2) { + p.y = core.bigmap.height*32 - h/2 - 1; + p.ys = -p.ys; + } + if (p.y < -h/2) { + p.y = -h/2+1; + p.ys = -p.ys; + } + }) + core.setAlpha('weather',1); + } + } core.animateFrame.weather.time = timestamp; @@ -1438,7 +1469,7 @@ control.prototype.snipe = function (snipes) { control.prototype.setWeather = function (type, level) { // 非雨雪 - if (type!='rain' && type!='snow') { + if (type!='rain' && type!='snow' && type!='fog') { core.clearMap('weather') core.animateFrame.weather.type = null; core.animateFrame.weather.level = 0; @@ -1485,6 +1516,18 @@ control.prototype.setWeather = function (type, level) { }) } } + else if (type=='fog') { + if (core.animateFrame.weather.fog) { + for (var a=0;a=100) && !core.status.replay.replaying; + var displayAnimate = time>=100 && !core.status.replay.replaying; - time = time || 800; time /= 20; core.lockControl(); core.stopHero(); diff --git a/libs/loader.js b/libs/loader.js index d5a4d3d3..5ff3c386 100644 --- a/libs/loader.js +++ b/libs/loader.js @@ -238,7 +238,7 @@ loader.prototype.loadMusic = function () { console.log(ee); core.material.sounds[t] = null; } - }, function () { + }, function (e) { console.log(e); core.material.sounds[t] = null; }, null, 'arraybuffer'); diff --git a/libs/ui.js b/libs/ui.js index c6067779..1be9ee61 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -403,6 +403,11 @@ ui.prototype.calTextBoxWidth = function (canvas, content, min_width, max_width) // 如果不存在手动换行,则二分自动换行 if (allLines.length == 1) { + var w = core.canvas[canvas].measureText(allLines[0]).width; + if (w