From 107d155819540b88a2ac65c2259a431061b79f7d Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Sun, 17 May 2020 19:48:46 +0800 Subject: [PATCH 01/49] expend eval blocks --- _server/MotaAction.g4 | 145 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 125 insertions(+), 20 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index a7dc1ce6..fe6deb78 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -2592,10 +2592,11 @@ return [code, Blockly.JavaScript.ORDER_LOGICAL_NOT]; */; bool_e - : Bool + : ':' Bool /* bool_e +tooltip : 逻辑是否 var code = Bool_0; return [code, Blockly.JavaScript.ORDER_ATOMIC]; */; @@ -3859,53 +3860,143 @@ ActionParser.prototype.Colour = function(color) { return color?JSON.stringify(color).slice(1,-1):null; } -ActionParser.prototype.matchId = function(args, isShadow, comment) { - var rt=function(xml){ - return {xml:xml,ret:true} +ActionParser.prototype.matchId = function(args) { + var rt=function(xml,args){ + // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 + return {ret:true,xml:xml,args:args} } var match = /nothing/.exec('nothing') // 固定列表 var FixedId_List=MotaActionBlocks.idFixedList_e.json.args0[0].options; // [["生命", "status:hp"], ...] match=new RegExp('^('+FixedId_List.map(function(v){return v[1]}).join('|')+')$').exec(args[0]) if(match){ - return rt(MotaActionBlocks['idFixedList_e'].xmlText(args, isShadow, comment)); + return rt(MotaActionBlocks['idFixedList_e'].xmlText, args); } // 独立开关 match=/^switch:([A-Z])$/.exec(args[0]) if(match){ args[0]=match[1] - return rt(MotaActionBlocks['idFlag_e'].xmlText(args, isShadow, comment)); + return rt(MotaActionBlocks['idFlag_e'].xmlText, args); } // 临时变量 match=/^temp:([A-Z])$/.exec(args[0]) if(match){ args[0]=match[1] - return rt(MotaActionBlocks['idTemp_e'].xmlText(args, isShadow, comment)); + return rt(MotaActionBlocks['idTemp_e'].xmlText, args); } // id列表 var Id_List = MotaActionBlocks.idIdList_e.json.args0[0].options; // [["变量", "flag"], ...] match=new RegExp('^('+Id_List.map(function(v){return v[1]}).join('|')+'):([a-zA-Z0-9_\\u4E00-\\u9FCC]+)$').exec(args[0]) if(match){ - args=[match[1],match[2]].concat(args.slice(1)) - return rt(MotaActionBlocks['idIdList_e'].xmlText(args, isShadow, comment)); + args=[match[1],MotaActionFunctions.replaceToName_token(match[2])] + return rt(MotaActionBlocks['idIdList_e'].xmlText, args); } - return {xml:'',ret:false} + return {ret:false} +} + +ActionParser.prototype.matchEvalAtom = function(args) { + var rt=function(xml,args){ + // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 + return {ret:true,xml:xml,args:args} + } + var match = /nothing/.exec('nothing') + // 勾选框 + match = /^(true|false)$/.exec(args[0]) + if(match){ + return rt(MotaActionBlocks['bool_e'].xmlText, args); + } + // 怪物属性 + var EnemyId_List=MotaActionBlocks.enemyattr_e.json.args0[1].options; // [["生命", "hp"], ...] + match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) + if(match){ + args=[MotaActionFunctions.replaceToName_token(match[1]),MotaActionFunctions.replaceToName_token(match[2])] + return rt(MotaActionBlocks['enemyattr_e'].xmlText, args); + } + // 图块ID + match=/^blockId:(-?\d+),(-?\d+)$/.exec(args[0]) + if(match){ + args=[match[1],match[2]] + return rt(MotaActionBlocks['blockId_e'].xmlText, args); + } + // 图块类别 + match=/^blockCls:(-?\d+),(-?\d+)$/.exec(args[0]) + if(match){ + args=[match[1],match[2]] + return rt(MotaActionBlocks['blockCls_e'].xmlText, args); + } + // 装备孔 + match=/^equip:(-?\d+)$/.exec(args[0]) + if(match){ + args[0]=match[1] + return rt(MotaActionBlocks['equip_e'].xmlText, args); + } + return {ret:false} +} + +ActionParser.prototype.matchEvalCompare=function(args, isShadow){ + var raw=args[0].replace(/>/g,'>').replace(/</g,'<') + if (raw[0]+raw.slice(-1)=='()') raw=raw.slice(1,-1); + var str=raw + var xml=MotaActionBlocks['expression_arithmetic_0'].xmlText + if (!/<=|<|>=|>|==|!=/.exec(str)) return {ret:false}; + str=str.replace(/[^<>=!()]/g,' ') + // 处理括号匹配 + var old; + do { + old=str; + str=str.replace(/\([^()]*\)/g,function(v){return Array.from({length:v.length+1}).join(' ')}) + } while (old!=str); + // 按优先级依次寻找以下符号 + var oplist=['<','<=','>','>=','==','!='] + for (var index = 0,op; op=oplist[index]; index++) { + var match=new RegExp('(?<= )'+op+'(?= )').exec(str) + if (!match) continue; + args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op,this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + return {ret:true,xml:xml,args:args} + } + return {ret:false} } ActionParser.prototype.expandIdBlock = function(args, isShadow, comment) { - var ret=this.matchId(args, isShadow, comment) - if (ret.ret) return ret.xml; - return MotaActionBlocks['idString_e'].xmlText(args, isShadow, comment); + args[0]=MotaActionFunctions.replaceFromName(args[0]) + var xml=MotaActionBlocks['idString_e'].xmlText + var ret=this.matchId(args) + if (ret.ret){ + xml=ret.xml; + args=ret.args; + } else { + for (var index = 0; index < args.length; index++) { + args[index]=MotaActionFunctions.replaceToName(args[index]) + } + } + return xml(args, isShadow, comment); } ActionParser.prototype.expandEvalBlock = function(args, isShadow, comment) { - var ret=this.matchId(args, isShadow, comment) - if (ret.ret) return ret.xml; - // todo - // 1. 将「数值设置」的名称尽可能替换掉;如果是 FixedId_List 那就用它;否则如果是 独立开关/临时变量 那就用对应的;否则用 A:B 的那个框 - // 2. 将「值块」尽可能替换掉,主要是「独立开关」,「临时变量」,「非 - 独立开关」,「非-临时变量」;以及true/false替换成勾选框;对于其他变量/属性等之类也尽可能进行替换 - - return MotaActionBlocks['evalString_e'].xmlText(args, isShadow, comment); + args[0]=MotaActionFunctions.replaceFromName(args[0]) + var xml=MotaActionBlocks['evalString_e'].xmlText + var ret=this.matchId(args) + if (ret.ret){ + xml=ret.xml; + args=ret.args; + } else if( (ret=this.matchEvalAtom(args)).ret ){ + xml=ret.xml; + args=ret.args; + } else if(/^(!.*|\(!.*\))$/.exec(args[0])){ + // 非 + xml=MotaActionBlocks['negate_e'].xmlText + var content=args[0][0]=='!'?args[0].slice(1):args[0].slice(2,-1) + args[0]=this.expandEvalBlock([content],isShadow) + } else if( (ret=this.matchEvalCompare(args, isShadow)).ret ){ + // 大小比较 + xml=ret.xml; + args=ret.args; + } else { + for (var index = 0; index < args.length; index++) { + args[index]=MotaActionFunctions.replaceToName(args[index]) + } + } + return xml(args, isShadow, comment); } MotaActionFunctions.actionParser = new ActionParser(); @@ -4095,6 +4186,20 @@ MotaActionFunctions.pattern.replaceEnemyList = [ MotaActionFunctions.disableReplace = false; +MotaActionFunctions.replaceToName_token = function (str) { + if (!str || MotaActionFunctions.disableReplace) return str; + var list = []; + list=list.concat(MotaActionFunctions.pattern.replaceStatusList) + list=list.concat(MotaActionFunctions.pattern.replaceItemList) + list=list.concat(MotaActionFunctions.pattern.replaceEnemyList) + for(var index=0,pair;pair=list[index];index++){ + if (pair[0]==str) { + return pair[1] + } + } + return str; +} + MotaActionFunctions.replaceToName = function (str) { if (!str || MotaActionFunctions.disableReplace) return str; var map = {}, list = []; From ea85ac5d755e8783fe7642014d6c98af2f7f0ec9 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Mon, 18 May 2020 18:21:35 +0800 Subject: [PATCH 02/49] split g4 --- _server/MotaAction.g4 | 1325 +---------------------------------- _server/MotaActionParse.js | 1327 ++++++++++++++++++++++++++++++++++++ editor-mobile.html | 1 + editor.html | 1 + 4 files changed, 1330 insertions(+), 1324 deletions(-) create mode 100644 _server/MotaActionParse.js diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 1e23f8ff..38cf35bf 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -2942,1329 +2942,6 @@ this.block('idTemp_e').output='idString_e'; /* Functions -function ActionParser(){ -} - -ActionParser.prototype.parse = function (obj,type) { - switch (type) { - case 'event': - if(!obj)obj={}; - if(typeof(obj)===typeof('')) obj={'data':[obj]}; - if(obj instanceof Array) obj={'data':obj}; - return MotaActionBlocks['event_m'].xmlText([ - obj.trigger==='action',obj.enable,obj.noPass,obj.displayDamage,this.parseList(obj.data) - ]); - - case 'autoEvent': - if(!obj)obj={}; - return MotaActionBlocks['autoEvent_m'].xmlText([ - obj.condition,obj.priority,obj.currentFloor,obj.delayExecute,obj.multiExecute,this.parseList(obj.data) - ]); - - case 'changeFloor': - if(!obj)obj={}; - if (!obj.loc) { - obj.loc = obj.loc || ['','']; - obj.stair = obj.stair || ':now'; - } - if (obj.floorId==':before'||obj.floorId==':next'||obj.floorId==':now') { - obj.floorType=obj.floorId; - delete obj.floorId; - } - return MotaActionBlocks['changeFloor_m'].xmlText([ - obj.floorType||'floorId',obj.floorId,obj.stair||'loc',obj.loc[0],obj.loc[1],obj.direction, - obj.time,obj.ignoreChangeFloor - ]); - - case 'afterGetItem': - if (!obj) obj = []; - if (obj instanceof Array) obj = {'data': obj}; - return MotaActionBlocks['afterGetItem_m'].xmlText([ - obj.disableOnGentleClick||false, this.parseList(obj.data) - ]); - - case 'level': - if(!obj)obj={}; - var text_choices = null; - for(var ii=obj.length-1,choice;choice=obj[ii];ii--) { - text_choices=MotaActionBlocks['levelCase'].xmlText([ - this.expandEvalBlock([choice.need]),choice.title,choice.clear||false,this.parseList(choice.action),text_choices]); - } - return MotaActionBlocks['level_m'].xmlText([text_choices]); - - case 'shop': - var buildsub = function(obj,parser,next){ - var text_choices = null; - for(var ii=obj.choices.length-1,choice;choice=obj.choices[ii];ii--) { - text_choices=MotaActionBlocks['shopChoices'].xmlText([ - choice.text,choice.need||'',choice.icon,choice.color,'rgba('+choice.color+')',choice.condition,parser.parseList(choice.action),text_choices]); - } - var info = parser.getTitleAndPosition(obj.text || ''); - return MotaActionBlocks['shopsub'].xmlText([ - obj.id,obj[0],info[1],info[3],obj.textInList,obj.mustEnable,obj.disablePreview,text_choices,next - ]); - } - var buildcommentevent = function(obj,parser,next){ - if (obj.args instanceof Array) { - obj.args = JSON.stringify(obj.args); - } - else obj.args = null; - return MotaActionBlocks['shopcommonevent'].xmlText([ - obj.id,parser.EvalString(obj.textInList),obj.mustEnable,parser.EvalString(obj.commonEvent),obj.args,next - ]); - } - var builditem = function (obj,parser,next){ - var text_choices = null; - for(var ii=obj.choices.length-1,choice;choice=obj.choices[ii];ii--) { - text_choices = MotaActionBlocks['shopItemChoices'].xmlText([ - choice.id, choice.number == null ? "" : (""+choice.number), choice.money == null ? "" : (""+choice.money), - choice.sell == null ? "" : (""+choice.sell), choice.condition || "", text_choices - ]); - } - return MotaActionBlocks['shopitem'].xmlText([ - obj.id,obj.textInList,obj.mustEnable,text_choices,next - ]); - } - var next=null; - if(!obj)obj=[]; - while(obj.length){ - var shopobj=obj.pop() - if(shopobj.item) - next=builditem(shopobj,this,next); - else if(shopobj.choices) - next=buildsub(shopobj,this,next); - else if(shopobj.commonEvent) - next=buildcommentevent(shopobj,this,next); - else - throw new Error("[警告]出错啦!\n"+shopobj.id+" 无效的商店"); - } - return MotaActionBlocks['shop_m'].xmlText([next]); - - default: - return MotaActionBlocks[type+'_m'].xmlText([this.parseList(obj)]); - } -} - -////// 开始解析一系列自定义事件 ////// -ActionParser.prototype.parseList = function (list) { - if (!this.isset(list)) return MotaActionBlocks['pass_s'].xmlText([],true); - if (!(list instanceof Array)) { - list = [list]; - } - if (list.length===0) return MotaActionBlocks['pass_s'].xmlText([],true); - this.event = {'id': 'action', 'data': { - 'list': list - }} - this.next = null; - this.result = null; - this.parseAction(); - return this.result; -} - -////// 解析当前自定义事件列表中的最后一个事件 ////// -ActionParser.prototype.parseAction = function() { - - // 事件处理完毕 - if (this.event.data.list.length==0) { - this.result = this.next; - this.next = null; - return; - } - - var data = this.event.data.list.pop(); - this.event.data.current = data; - - // 不同种类的事件 - - // 如果是文字:显示 - if (typeof data == "string") { - data={"type": "text", "text": data} - } - this.event.data.type=data.type; - switch (data.type) { - case "_next": - this.result = this.next; - this.next = data.next; - return; - case "text": // 文字/对话 - var info = this.getTitleAndPosition(data.text); - if (info[0] || info[1] || info[2]) { - this.next = MotaActionBlocks['text_1_s'].xmlText([ - info[0], info[1], info[2], info[3], this.next]); - } - else { - this.next = MotaActionBlocks['text_0_s'].xmlText([info[3],this.next]); - } - break; - case "autoText": // 自动剧情文本 - var info = this.getTitleAndPosition(data.text); - this.next = MotaActionBlocks['autoText_s'].xmlText([ - info[0],info[1],info[2],data.time,info[3],this.next]); - break; - case "scrollText": - this.next = MotaActionBlocks['scrollText_s'].xmlText([ - data.time, data.lineHeight||1.4, data.async||false, this.EvalString(data.text), this.next]); - break; - case "comment": // 注释 - this.next = MotaActionBlocks['comment_s'].xmlText([this.EvalString(data.text),this.next],null,data.text); - break; - case "setText": // 设置剧情文本的属性 - data.title=this.Colour(data.title); - data.text=this.Colour(data.text); - if (!/^\w+\.png$/.test(data.background)) - data.background=this.Colour(data.background); - this.next = MotaActionBlocks['setText_s'].xmlText([ - data.position,data.offset,data.align,data.title,'rgba('+data.title+')', - data.text,'rgba('+data.text+')',data.background,'rgba('+data.background+')', - data.bold,data.titlefont,data.textfont,data.lineHeight,data.time,data.interval,this.next]); - break; - case "tip": - this.next = MotaActionBlocks['tip_s'].xmlText([ - data.text,data.icon||"",this.next]); - break; - case "show": // 显示 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['show_s'].xmlText([ - x_str.join(','),y_str.join(','),data.floorId||'',data.time,data.async||false,this.next]); - break; - case "hide": // 消失 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['hide_s'].xmlText([ - x_str.join(','),y_str.join(','),data.floorId||'',data.remove||false,data.time,data.async||false,this.next]); - break; - case "setBlock": // 设置图块 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['setBlock_s'].xmlText([ - data.number||0,x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "turnBlock": // 事件转向 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['turnBlock_s'].xmlText([ - data.direction,x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "showFloorImg": // 显示贴图 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['showFloorImg_s'].xmlText([ - x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "hideFloorImg": // 隐藏贴图 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['hideFloorImg_s'].xmlText([ - x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "showBgFgMap": // 显示图层块 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['showBgFgMap_s'].xmlText([ - data.name||'bg', x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "hideBgFgMap": // 隐藏图层块 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['hideBgFgMap_s'].xmlText([ - data.name||'bg', x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "setBgFgBlock": // 设置图块 - data.loc=data.loc||[]; - if (!(data.loc[0] instanceof Array)) - data.loc = [data.loc]; - var x_str=[],y_str=[]; - data.loc.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['setBgFgBlock_s'].xmlText([ - data.name||'bg', data.number||0, x_str.join(','),y_str.join(','),data.floorId||'',this.next]); - break; - case "setHeroIcon": // 改变勇士 - this.next = MotaActionBlocks['setHeroIcon_s'].xmlText([ - data.name||"",this.next]); - break; - case "move": // 移动事件 - data.loc=data.loc||['','']; - this.next = MotaActionBlocks['move_s'].xmlText([ - data.loc[0],data.loc[1],data.time,data.keep||false,data.async||false,this.StepString(data.steps),this.next]); - break; - case "moveAction": // 前进一格或撞击 - this.next = MotaActionBlocks['moveAction_s'].xmlText([this.next]); - break; - case "moveHero": // 无视地形移动勇士 - this.next = MotaActionBlocks['moveHero_s'].xmlText([ - data.time,data.async||false,this.StepString(data.steps),this.next]); - break; - case "jump": // 跳跃事件 - data.from=data.from||['','']; - data.to=data.to||['','']; - this.next = MotaActionBlocks['jump_s'].xmlText([ - data.from[0],data.from[1],data.to[0],data.to[1],data.time,data.keep||false,data.async||false,this.next]); - break; - case "jumpHero": // 跳跃勇士 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['jumpHero_s'].xmlText([ - data.loc[0],data.loc[1],data.time,data.async||false,this.next]); - break; - case "changeFloor": // 楼层转换 - if (!data.loc) { - data.loc = data.loc || ['','']; - data.stair = data.stair || ':now'; - } - if (data.floorId==':before'||data.floorId==':next'||data.floorId==':now') { - data.floorType=data.floorId; - delete data.floorId; - } - this.next = MotaActionBlocks['changeFloor_s'].xmlText([ - data.floorType||'floorId',data.floorId,data.stair||'loc',data.loc[0],data.loc[1],data.direction, - data.time, this.next]); - break; - case "changePos": // 直接更换勇士位置, 不切换楼层 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['changePos_s'].xmlText([ - data.loc[0],data.loc[1],data.direction,this.next]); - break; - case "follow": // 跟随勇士 - this.next = MotaActionBlocks['follow_s'].xmlText([data.name||"", this.next]); - break; - case "unfollow": // 取消跟随 - this.next = MotaActionBlocks['unfollow_s'].xmlText([data.name||"", this.next]); - break; - case "animate": // 显示动画 - var animate_loc = data.loc||''; - if(animate_loc && animate_loc!=='hero')animate_loc = animate_loc[0]+','+animate_loc[1]; - this.next = MotaActionBlocks['animate_s'].xmlText([ - data.name,animate_loc,data.alignWindow||false,data.async||false,this.next]); - break; - case "setViewport": // 设置视角 - data.loc = data.loc||['','']; - this.next = MotaActionBlocks['setViewport_s'].xmlText([ - data.loc[0],data.loc[1],this.next]); - break; - case "moveViewport": // 移动视角 - this.next = MotaActionBlocks['moveViewport_s'].xmlText([ - data.time,data.async||false,this.StepString(data.steps),this.next]); - break; - case "vibrate": // 画面震动 - this.next = MotaActionBlocks['vibrate_s'].xmlText([data.time||0, data.async||false, this.next]); - break; - case "showImage": // 显示图片 - data.loc=data.loc||['',''] - if (data.sloc) { - this.next = MotaActionBlocks['showImage_1_s'].xmlText([ - data.code,data.image||data.name,data.sloc[0],data.sloc[1],data.sloc[2],data.sloc[3],data.opacity, - data.loc[0],data.loc[1],data.loc[2],data.loc[3],data.time||0,data.async||false,this.next - ]); - } - else { - this.next = MotaActionBlocks['showImage_s'].xmlText([ - data.code,data.image||data.name,data.loc[0],data.loc[1],data.opacity,data.time||0,data.async||false,this.next]); - } - break; - case "hideImage": // 清除图片 - this.next = MotaActionBlocks['hideImage_s'].xmlText([ - data.code,data.time||0,data.async||false,this.next]); - break; - case "showTextImage": // 显示图片化文本 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['showTextImage_s'].xmlText([ - this.EvalString(data.text),data.code,data.loc[0],data.loc[1],data.lineHeight||1.4,data.opacity,data.time||0,data.async||false,this.next]); - break; - case "moveImage": // 移动图片 - data.to=data.to||['',''] - this.next = MotaActionBlocks['moveImage_s'].xmlText([ - data.code, data.to[0], data.to[1], data.opacity, data.time||0, data.async||false, this.next]); - break; - case "showGif": // 显示动图 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['showGif_s'].xmlText([ - data.name,data.loc[0],data.loc[1],this.next]); - break; - case "setCurtain": // 颜色渐变 - if(this.isset(data.color)){ - data.color = this.Colour(data.color); - this.next = MotaActionBlocks['setCurtain_0_s'].xmlText([ - data.color,'rgba('+data.color+')',data.time,data.keep||false,data.async||false,this.next]); - } else { - this.next = MotaActionBlocks['setCurtain_1_s'].xmlText([ - data.time,data.async||false,this.next]); - } - break; - case "screenFlash": // 画面闪烁 - data.color = this.Colour(data.color); - this.next = MotaActionBlocks['screenFlash_s'].xmlText([ - data.color,'rgba('+data.color+')',data.time||500,data.times,data.async||false,this.next]); - break; - case "setWeather": // 更改天气 - this.next = MotaActionBlocks['setWeather_s'].xmlText([ - data.name,data.level||1,data.keep||false,this.next]); - break; - case "openDoor": // 开一个门, 包括暗墙 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['openDoor_s'].xmlText([ - data.loc[0],data.loc[1],data.floorId||'',data.needKey||false,data.async||false,this.next]); - break; - case "closeDoor": // 关一个门,需要该点无事件 - data.loc=data.loc||['',''] - this.next = MotaActionBlocks['closeDoor_s'].xmlText([ - data.loc[0],data.loc[1],data.id,data.async||false,this.next]); - break; - case "useItem": // 使用道具 - this.next = MotaActionBlocks['useItem_s'].xmlText([ - data.id,this.next]); - break; - case "loadEquip": // 装上装备 - this.next = MotaActionBlocks['loadEquip_s'].xmlText([ - data.id,this.next]); - break; - case "unloadEquip": // 卸下装备 - this.next = MotaActionBlocks['unloadEquip_s'].xmlText([ - data.pos,this.next]); - break; - case "openShop": // 打开一个全局商店 - this.next = MotaActionBlocks['openShop_s'].xmlText([ - data.id,data.open||false,this.next]); - break; - case "disableShop": // 禁用一个全局商店 - this.next = MotaActionBlocks['disableShop_s'].xmlText([ - data.id,this.next]); - break; - case "battle": // 强制战斗 - if (data.id) { - this.next = MotaActionBlocks['battle_s'].xmlText([ - data.id,this.next]); - } - else { - data.loc = data.loc || []; - this.next = MotaActionBlocks['battle_1_s'].xmlText([ - data.loc[0],data.loc[1],this.next]); - } - break; - case "trigger": // 触发另一个事件 - data.loc = data.loc || []; - this.next = MotaActionBlocks['trigger_s'].xmlText([ - data.loc[0],data.loc[1],this.next]); - break; - case "insert": // 强制插入另一个点的事件在当前事件列表执行,当前坐标和楼层不会改变 - if (data.args instanceof Array) { - data.args = JSON.stringify(data.args); - } - else data.args = null; - if (this.isset(data.name)) { - this.next = MotaActionBlocks['insert_1_s'].xmlText([ - data.name, data.args||"", this.next]); - } - else { - data.loc = data.loc || []; - this.next = MotaActionBlocks['insert_2_s'].xmlText([ - data.loc[0],data.loc[1],data.which,data.floorId||'',data.args||"",this.next]); - } - break; - case "playSound": - this.next = MotaActionBlocks['playSound_s'].xmlText([ - data.name,data.stop,this.next]); - break; - case "playBgm": - this.next = MotaActionBlocks['playBgm_s'].xmlText([ - data.name,data.startTime||0,data.keep||false,this.next]); - break - case "pauseBgm": - this.next = MotaActionBlocks['pauseBgm_s'].xmlText([ - this.next]); - break - case "resumeBgm": - this.next = MotaActionBlocks['resumeBgm_s'].xmlText([ - data.resume||false,this.next]); - break - case "loadBgm": - this.next = MotaActionBlocks['loadBgm_s'].xmlText([ - data.name,this.next]); - break - case "freeBgm": - this.next = MotaActionBlocks['freeBgm_s'].xmlText([ - data.name,this.next]); - break - case "stopSound": - this.next = MotaActionBlocks['stopSound_s'].xmlText([ - this.next]); - break - case "setVolume": - this.next = MotaActionBlocks['setVolume_s'].xmlText([ - data.value, data.time, data.async||false, this.next]); - break - case "setValue": - this.next = MotaActionBlocks['setValue_s'].xmlText([ - this.expandIdBlock([data.name]), data["operator"]||'=', - this.expandEvalBlock([data.value]), - data.norefresh || false, - this.next]); - break; - case "setEnemy": - this.next = MotaActionBlocks['setEnemy_s'].xmlText([ - data.id, data.name, this.expandEvalBlock([data.value]), this.next]); - break; - case "setFloor": - this.next = MotaActionBlocks['setFloor_s'].xmlText([ - data.name, data.floorId||null, data.value, this.next]); - break; - case "setGlobalAttribute": - this.next = MotaActionBlocks['setGlobalAttribute_s'].xmlText([ - data.name, data.value, this.next]); - break; - case "setGlobalValue": - this.next = MotaActionBlocks['setGlobalValue_s'].xmlText([ - data.name, data.value, this.next]); - break; - case "setGlobalFlag": - this.next = MotaActionBlocks['setGlobalFlag_s'].xmlText([ - data.name, data.value, this.next]); - break; - case "input": - this.next = MotaActionBlocks['input_s'].xmlText([ - data.text,this.next]); - break; - case "input2": - this.next = MotaActionBlocks['input2_s'].xmlText([ - data.text,this.next]); - break; - case "if": // 条件判断 - if (data["false"]) { - this.next = MotaActionBlocks['if_s'].xmlText([ - this.expandEvalBlock([data.condition]), - this.insertActionList(data["true"]), - this.insertActionList(data["false"]), - this.next]); - } - else { - this.next = MotaActionBlocks['if_1_s'].xmlText([ - this.expandEvalBlock([data.condition]), - this.insertActionList(data["true"]), - this.next]); - } - break; - case "confirm": // 显示确认框 - this.next = MotaActionBlocks['confirm_s'].xmlText([ - this.EvalString(data.text), data.timeout||0, data["default"], - this.insertActionList(data["yes"]), - this.insertActionList(data["no"]), - this.next]); - break; - case "switch": // 多重条件分歧 - var case_caseList = null; - for(var ii=data.caseList.length-1,caseNow;caseNow=data.caseList[ii];ii--) { - case_caseList=MotaActionBlocks['switchCase'].xmlText([ - this.isset(caseNow.case)?this.expandEvalBlock([caseNow.case]):"值",caseNow.nobreak,this.insertActionList(caseNow.action),case_caseList]); - } - this.next = MotaActionBlocks['switch_s'].xmlText([ - this.expandEvalBlock([data.condition]), - case_caseList,this.next]); - break; - case "choices": // 提供选项 - var text_choices = null; - for(var ii=data.choices.length-1,choice;choice=data.choices[ii];ii--) { - choice.color = this.Colour(choice.color); - text_choices=MotaActionBlocks['choicesContext'].xmlText([ - choice.text,choice.icon,choice.color,'rgba('+choice.color+')',choice.condition||'',this.insertActionList(choice.action),text_choices]); - } - if (!this.isset(data.text)) data.text = ''; - var info = this.getTitleAndPosition(data.text); - this.next = MotaActionBlocks['choices_s'].xmlText([ - info[3],info[0],info[1],data.timeout||0,text_choices,this.next]); - break; - case "for": // 循环遍历 - this.next = MotaActionBlocks['for_s'].xmlText([ - this.expandEvalBlock([data.name]), - data.from || 0, data.to || 0, data.step || 0, - this.insertActionList(data.data), - this.next]); - break; - case "forEach": // 循环遍历列表 - this.next = MotaActionBlocks['forEach_s'].xmlText([ - this.expandEvalBlock([data.name]), - JSON.stringify(data.list), - this.insertActionList(data.data), - this.next]); - break; - case "while": // 前置条件循环处理 - this.next = MotaActionBlocks['while_s'].xmlText([ - this.expandEvalBlock([data.condition]), - this.insertActionList(data.data), - this.next]); - break; - case "dowhile": // 后置条件循环处理 - this.next = MotaActionBlocks['dowhile_s'].xmlText([ - this.insertActionList(data.data), - this.expandEvalBlock([data.condition]), - this.next]); - break; - case "break": // 跳出循环 - this.next = MotaActionBlocks['break_s'].xmlText([ - this.next]); - break; - case "continue": // 继续执行当前循环 - this.next = MotaActionBlocks['continue_s'].xmlText([ - this.next]); - break; - case "win": - this.next = MotaActionBlocks['win_s'].xmlText([ - data.reason,data.norank?true:false,data.noexit?true:false,this.next]); - break; - case "lose": - this.next = MotaActionBlocks['lose_s'].xmlText([ - data.reason,this.next]); - break; - case "restart": - this.next = MotaActionBlocks['restart_s'].xmlText([ - this.next]); - break; - case "function": - var func = data["function"]; - func=func.split('{').slice(1).join('{').split('}').slice(0,-1).join('}').trim().split('\n').join('\\n'); - this.next = MotaActionBlocks['function_s'].xmlText([ - data.async||false,func,this.next]); - break; - case "update": - this.next = MotaActionBlocks['update_s'].xmlText([ - this.next, this.doNotCheckAutoEvents||false]); - break; - case "showStatusBar": - this.next = MotaActionBlocks['showStatusBar_s'].xmlText([ - this.next]); - break; - case "hideStatusBar": - this.next = MotaActionBlocks['hideStatusBar_s'].xmlText([ - data.toolbox||false,this.next]); - break; - case "showHero": - this.next = MotaActionBlocks['showHero_s'].xmlText([ - this.next]); - break; - case "hideHero": - this.next = MotaActionBlocks['hideHero_s'].xmlText([ - this.next]); - break; - case "sleep": // 等待多少毫秒 - this.next = MotaActionBlocks['sleep_s'].xmlText([ - data.time||0,data.noSkip||false,this.next]); - break; - case "wait": // 等待用户操作 - var case_waitList = null; - if (data.data) { - for(var ii=data.data.length-1,caseNow;caseNow=data.data[ii];ii--) { - if (caseNow["case"] == "keyboard") { - case_waitList = MotaActionBlocks['waitContext_1'].xmlText([ - caseNow.keycode || "0", this.insertActionList(caseNow.action), case_waitList - ]); - } else if (caseNow["case"] == "mouse") { - case_waitList = MotaActionBlocks['waitContext_2'].xmlText([ - caseNow.px[0], caseNow.px[1], caseNow.py[0], caseNow.py[1], this.insertActionList(caseNow.action), case_waitList - ]); - } - } - } - this.next = MotaActionBlocks['wait_s'].xmlText([ - data.timeout||0,case_waitList, this.next]); - break; - case "waitAsync": // 等待所有异步事件执行完毕 - this.next = MotaActionBlocks['waitAsync_s'].xmlText([ - this.next]); - break; - case "callBook": // 呼出怪物手册 - this.next = MotaActionBlocks['callBook_s'].xmlText([ - this.next]); - break; - case "callSave": // 呼出存档界面 - this.next = MotaActionBlocks['callSave_s'].xmlText([ - this.next]); - break; - case "autoSave": // 自动存档 - this.next = MotaActionBlocks['autoSave_s'].xmlText([ - data.nohint||false, this.next]); - break; - case "callLoad": // 呼出读档界面 - this.next = MotaActionBlocks['callLoad_s'].xmlText([ - this.next]); - break; - case "exit": // 立刻结束事件 - this.next = MotaActionBlocks['exit_s'].xmlText([ - this.next]); - break; - case "previewUI": // UI绘制预览 - this.next = MotaActionBlocks['previewUI_s'].xmlText([ - this.insertActionList(data.action), this.next - ]); - break; - case "clearMap": // 清除画布 - if (data.x != null && data.y != null && data.width != null && data.height != null) { - this.next = MotaActionBlocks['clearMap_s'].xmlText([ - data.x, data.y, data.width, data.height, this.next - ]); - } - else { - this.next = MotaActionBlocks['clearMap_1_s'].xmlText([this.next]); - } - break; - case "setAttribute": // 设置画布属性 - data.fillStyle=this.Colour(data.fillStyle); - data.strokeStyle=this.Colour(data.strokeStyle); - this.next = MotaActionBlocks['setAttribute_s'].xmlText([ - data.font,data.fillStyle,'rgba('+data.fillStyle+')',data.strokeStyle,'rgba('+data.strokeStyle+')', - data.lineWidth,data.alpha,data.align,data.baseline,data.z,this.next]); - break; - case "fillText": // 绘制一行文本 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['fillText_s'].xmlText([ - data.x, data.y, data.style, 'rgba('+data.style+')', data.font, data.maxWidth, this.EvalString(data.text), this.next - ]); - break; - case "fillBoldText": // 绘制一行描边文本 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['fillBoldText_s'].xmlText([ - data.x, data.y, data.style, 'rgba('+data.style+')', data.strokeStyle, 'rgba('+(data.strokeStyle||"0,0,0,1")+')', - data.font, this.EvalString(data.text), this.next - ]); - break; - case "drawTextContent": // 绘制多行文本 - data.color = this.Colour(data.color); - this.next = MotaActionBlocks['drawTextContent_s'].xmlText([ - this.EvalString(data.text), data.left, data.top, data.maxWidth, data.color, 'rgba('+data.color+')', - data.align, data.fontSize, data.lineHeight, data.bold, this.next - ]); - break; - case "fillRect": // 绘制矩形 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['fillRect_s'].xmlText([ - data.x, data.y, data.width, data.height, data.radius, data.style, 'rgba('+data.style+')', this.next - ]); - break; - case "strokeRect": // 绘制矩形边框 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['strokeRect_s'].xmlText([ - data.x, data.y, data.width, data.height, data.radius, data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "drawLine": // 绘制线段 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['drawLine_s'].xmlText([ - data.x1, data.y1, data.x2, data.y2, data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "drawArrow": // 绘制线段 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['drawArrow_s'].xmlText([ - data.x1, data.y1, data.x2, data.y2, data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "fillPolygon": // 绘制多边形 - data.style = this.Colour(data.style); - var x_str=[],y_str=[]; - data.nodes.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['fillPolygon_s'].xmlText([ - x_str.join(','), y_str.join(','), data.style, 'rgba('+data.style+')', this.next - ]); - break; - case "strokePolygon": // 绘制多边形 - data.style = this.Colour(data.style); - var x_str=[],y_str=[]; - data.nodes.forEach(function (t) { - x_str.push(t[0]); - y_str.push(t[1]); - }) - this.next = MotaActionBlocks['strokePolygon_s'].xmlText([ - x_str.join(','), y_str.join(','), data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "fillEllipse": // 绘制椭圆 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['fillEllipse_s'].xmlText([ - data.x, data.y, data.a, data.b, data.angle, data.style, 'rgba('+data.style+')', this.next - ]); - break; - case "strokeEllipse": // 绘制椭圆边框 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['strokeEllipse_s'].xmlText([ - data.x, data.y, data.a, data.b, data.angle, data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "fillArc": // 绘制弧 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['fillArc_s'].xmlText([ - data.x, data.y, data.r, data.start, data.end, data.style, 'rgba('+data.style+')', this.next - ]); - break; - case "strokeArc": // 绘制弧 - data.style = this.Colour(data.style); - this.next = MotaActionBlocks['strokeArc_s'].xmlText([ - data.x, data.y, data.r, data.start, data.end, data.style, 'rgba('+data.style+')', data.lineWidth, this.next - ]); - break; - case "drawImage": // 绘制图片 - if (data.x1 != null && data.y1 != null && data.w1 != null && data.h1 != null) { - this.next = MotaActionBlocks['drawImage_1_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, data.x1, data.y1, data.w1, data.h1, this.next - ]); - } - else { - this.next = MotaActionBlocks['drawImage_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, this.next - ]); - } - break; - case "drawIcon": // 绘制图标 - this.next = MotaActionBlocks['drawIcon_s'].xmlText([ - data.id, data.frame||0, data.x, data.y, data.width, data.height, this.next - ]); - break; - case "drawBackground": // 绘制背景 - if (!/^\w+\.png$/.test(data.background)) - data.background=this.Colour(data.background); - this.next = MotaActionBlocks['drawBackground_s'].xmlText([ - data.background, 'rgba('+data.background+')', data.x, data.y, data.width, data.height, this.next - ]); - break; - case "drawSelector": // 绘制光标 - if (data.image) { - this.next = MotaActionBlocks['drawSelector_s'].xmlText([ - data.image, data.code, data.x, data.y, data.width, data.height, this.next - ]); - } - else { - this.next = MotaActionBlocks['drawSelector_1_s'].xmlText([data.code, this.next]); - } - case "animateImage": // 兼容 animateImage - break; - default: - this.next = MotaActionBlocks['unknown_s'].xmlText([ - JSON.stringify(data),this.next]); - } - this.parseAction(); - return; -} - -////// 往当前事件列表之后添加一个事件组 ////// -ActionParser.prototype.insertActionList = function (actionList) { - if (actionList.length===0) return null; - this.event.data.list.push({"type": "_next", "next": this.next}); - this.event.data.list=this.event.data.list.concat(actionList); - this.next = null; - this.parseAction(); - return this.result; -} - -////// 判断某对象是否不为undefined也不会null ////// -ActionParser.prototype.isset = function (val) { - if (val === undefined || val === null) { - return false; - } - return true -} - -ActionParser.prototype.StepString = function(steplist) { - var stepchar = { - 'up': '上', - 'down': '下', - 'left': '左', - 'right': '右', - 'forward': '前', - 'backward': '后' - } - var StepString = ''; - var last = null, number = 0; - steplist.forEach(function (v) { - if (v != last) { - if (last != null) { - StepString += stepchar[last]; - if (number > 1) StepString += number; - } - last = v; - number = 1; - } else { - number++; - } - }); - if (last != null) { - StepString += stepchar[last]; - if (number > 1) StepString += number; - } - return StepString; -} - -ActionParser.prototype.EvalString = function(EvalString) { - return EvalString.split('\b').join('\\b').split('\t').join('\\t').split('\n').join('\\n'); -} - -ActionParser.prototype.getTitleAndPosition = function (string) { - string = this.EvalString(string); - var title = '', icon = '', position = ''; - string = string.replace(/\\t\[(([^\],]+),)?([^\],]+)\]/g, function (s0, s1, s2, s3) { - if (s3) title = s3; - if (s2) { icon = s3; title = s2; } - if (icon && !/^(.*)\.(jpg|jpeg|png)$/.test(icon) - && !/^[0-9a-zA-Z_][0-9a-zA-Z_:]*$/.test(icon)) { title += "," + icon; icon = ''; } - return ""; - }).replace(/\\b\[(.*?)\]/g, function (s0, s1) { - position = s1; return ""; - }); - return [title, icon, position, string]; -} - -ActionParser.prototype.Colour = function(color) { - return color?JSON.stringify(color).slice(1,-1):null; -} - -ActionParser.prototype.matchId = function(args) { - var rt=function(xml,args){ - // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 - return {ret:true,xml:xml,args:args} - } - var match = /nothing/.exec('nothing') - // 固定列表 - var FixedId_List=MotaActionBlocks.idFixedList_e.json.args0[0].options; // [["生命", "status:hp"], ...] - match=new RegExp('^('+FixedId_List.map(function(v){return v[1]}).join('|')+')$').exec(args[0]) - if(match){ - return rt(MotaActionBlocks['idFixedList_e'].xmlText, args); - } - // 独立开关 - match=/^switch:([A-Z])$/.exec(args[0]) - if(match){ - args[0]=match[1] - return rt(MotaActionBlocks['idFlag_e'].xmlText, args); - } - // 临时变量 - match=/^temp:([A-Z])$/.exec(args[0]) - if(match){ - args[0]=match[1] - return rt(MotaActionBlocks['idTemp_e'].xmlText, args); - } - // id列表 - var Id_List = MotaActionBlocks.idIdList_e.json.args0[0].options; // [["变量", "flag"], ...] - match=new RegExp('^('+Id_List.map(function(v){return v[1]}).join('|')+'):([a-zA-Z0-9_\\u4E00-\\u9FCC]+)$').exec(args[0]) - if(match){ - args=[match[1],MotaActionFunctions.replaceToName_token(match[2])] - return rt(MotaActionBlocks['idIdList_e'].xmlText, args); - } - return {ret:false} -} - -ActionParser.prototype.matchEvalAtom = function(args) { - var rt=function(xml,args){ - // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 - return {ret:true,xml:xml,args:args} - } - var match = /nothing/.exec('nothing') - // 勾选框 - match = /^(true|false)$/.exec(args[0]) - if(match){ - return rt(MotaActionBlocks['bool_e'].xmlText, args); - } - // 怪物属性 - var EnemyId_List=MotaActionBlocks.enemyattr_e.json.args0[1].options; // [["生命", "hp"], ...] - match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) - if(match){ - args=[MotaActionFunctions.replaceToName_token(match[1]),MotaActionFunctions.replaceToName_token(match[2])] - return rt(MotaActionBlocks['enemyattr_e'].xmlText, args); - } - // 图块ID - match=/^blockId:(-?\d+),(-?\d+)$/.exec(args[0]) - if(match){ - args=[match[1],match[2]] - return rt(MotaActionBlocks['blockId_e'].xmlText, args); - } - // 图块类别 - match=/^blockCls:(-?\d+),(-?\d+)$/.exec(args[0]) - if(match){ - args=[match[1],match[2]] - return rt(MotaActionBlocks['blockCls_e'].xmlText, args); - } - // 装备孔 - match=/^equip:(-?\d+)$/.exec(args[0]) - if(match){ - args[0]=match[1] - return rt(MotaActionBlocks['equip_e'].xmlText, args); - } - return {ret:false} -} - -ActionParser.prototype.matchEvalCompare=function(args, isShadow){ - var raw=args[0].replace(/>/g,'>').replace(/</g,'<') - if (raw[0]+raw.slice(-1)=='()') raw=raw.slice(1,-1); - var str=raw - var xml=MotaActionBlocks['expression_arithmetic_0'].xmlText - if (!/<=|<|>=|>|==|!=/.exec(str)) return {ret:false}; - str=str.replace(/[^<>=!()]/g,' ') - // 处理括号匹配 - var old; - do { - old=str; - str=str.replace(/\([^()]*\)/g,function(v){return Array.from({length:v.length+1}).join(' ')}) - } while (old!=str); - // 按优先级依次寻找以下符号 - var oplist=['<','<=','>','>=','==','!='] - for (var index = 0,op; op=oplist[index]; index++) { - var match=new RegExp('(?<= )'+op+'(?= )').exec(str) - if (!match) continue; - args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op,this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] - return {ret:true,xml:xml,args:args} - } - return {ret:false} -} - -ActionParser.prototype.expandIdBlock = function(args, isShadow, comment) { - args[0]=MotaActionFunctions.replaceFromName(args[0]) - var xml=MotaActionBlocks['idString_e'].xmlText - var ret=this.matchId(args) - if (ret.ret){ - xml=ret.xml; - args=ret.args; - } else { - for (var index = 0; index < args.length; index++) { - args[index]=MotaActionFunctions.replaceToName(args[index]) - } - } - return xml(args, isShadow, comment); -} - -ActionParser.prototype.expandEvalBlock = function(args, isShadow, comment) { - args[0]=MotaActionFunctions.replaceFromName(args[0]) - var xml=MotaActionBlocks['evalString_e'].xmlText - var ret=this.matchId(args) - if (ret.ret){ - xml=ret.xml; - args=ret.args; - } else if( (ret=this.matchEvalAtom(args)).ret ){ - xml=ret.xml; - args=ret.args; - } else if(/^(!.*|\(!.*\))$/.exec(args[0])){ - // 非 - xml=MotaActionBlocks['negate_e'].xmlText - var content=args[0][0]=='!'?args[0].slice(1):args[0].slice(2,-1) - args[0]=this.expandEvalBlock([content],isShadow) - } else if( (ret=this.matchEvalCompare(args, isShadow)).ret ){ - // 大小比较 - xml=ret.xml; - args=ret.args; - } else { - for (var index = 0; index < args.length; index++) { - args[index]=MotaActionFunctions.replaceToName(args[index]) - } - } - return xml(args, isShadow, comment); -} - -MotaActionFunctions.actionParser = new ActionParser(); - -MotaActionFunctions.workspace = function(){return workspace} - -MotaActionFunctions.parse = function(obj,type) { - try { - obj = JSON.parse(MotaActionFunctions.replaceToName(JSON.stringify(obj))); - } catch (e) {} - MotaActionFunctions.workspace().clear(); - xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event'); - xml = Blockly.Xml.textToDom(''+xml_text+''); - Blockly.Xml.domToWorkspace(xml, MotaActionFunctions.workspace()); -} - -MotaActionFunctions.EvalString_pre = function(EvalString){ - if (EvalString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。'); - EvalString = MotaActionFunctions.replaceFromName(EvalString); - return EvalString.replace(/([^\\])"/g,'$1\\"').replace(/^"/g,'\\"').replace(/""/g,'"\\"'); -} - -MotaActionFunctions.JsonEvalString_pre = function (JsonEvalString) { - if (JsonEvalString == '') return ''; - JsonEvalString = MotaActionFunctions.replaceFromName(JsonEvalString); - try { - return JSON.stringify(JSON.parse(JsonEvalString)); - } catch (e) { - throw new Error('此处需要填写一个合法的JSON内容'); - } -} - -MotaActionFunctions.IntString_pre = function (IntString) { - if (!/^\d*$/.test(IntString)) throw new Error('此项必须是整数或不填'); - return IntString; -} - -MotaActionFunctions.IdString_pre = function(IdString){ - if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。'); - IdString = MotaActionFunctions.replaceFromName(IdString); - if (IdString && !(MotaActionFunctions.pattern.id.test(IdString)) && !(MotaActionFunctions.pattern.idWithoutFlag.test(IdString))) - throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符'); - return IdString; -} - -MotaActionFunctions.PosString_pre = function(PosString){ - if (!PosString || /^-?\d+$/.test(PosString)) return PosString; - //if (!(MotaActionFunctions.pattern.id.test(PosString)))throw new Error(PosString+'中包含了0-9 a-z A-Z _ 和中文之外的字符,或者是没有以flag: 开头'); - return '"'+MotaActionFunctions.replaceFromName(PosString)+'"'; -} - -MotaActionFunctions.StepString_pre = function(StepString){ - //StepString='上右3下2左上左2' - var route = StepString.replace(/上/g,'U').replace(/下/g,'D').replace(/左/g,'L').replace(/右/g,'R').replace(/前/g,'F').replace(/后/g,'B'); - - //copyed from core.js - var ans=[], index=0; - - var isset = function(a) { - if (a == undefined || a == null) { - return false; - } - return true; - } - var getNumber = function (noparse) { - var num=""; - while (index 1) StepString += number; + } + last = v; + number = 1; + } else { + number++; + } + }); + if (last != null) { + StepString += stepchar[last]; + if (number > 1) StepString += number; + } + return StepString; +} + +ActionParser.prototype.EvalString = function(EvalString) { + return EvalString.split('\b').join('\\b').split('\t').join('\\t').split('\n').join('\\n'); +} + +ActionParser.prototype.getTitleAndPosition = function (string) { + string = this.EvalString(string); + var title = '', icon = '', position = ''; + string = string.replace(/\\t\[(([^\],]+),)?([^\],]+)\]/g, function (s0, s1, s2, s3) { + if (s3) title = s3; + if (s2) { icon = s3; title = s2; } + if (icon && !/^(.*)\.(jpg|jpeg|png)$/.test(icon) + && !/^[0-9a-zA-Z_][0-9a-zA-Z_:]*$/.test(icon)) { title += "," + icon; icon = ''; } + return ""; + }).replace(/\\b\[(.*?)\]/g, function (s0, s1) { + position = s1; return ""; + }); + return [title, icon, position, string]; +} + +ActionParser.prototype.Colour = function(color) { + return color?JSON.stringify(color).slice(1,-1):null; +} + +ActionParser.prototype.matchId = function(args) { + var rt=function(xml,args){ + // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 + return {ret:true,xml:xml,args:args} + } + var match = /nothing/.exec('nothing') + // 固定列表 + var FixedId_List=MotaActionBlocks.idFixedList_e.json.args0[0].options; // [["生命", "status:hp"], ...] + match=new RegExp('^('+FixedId_List.map(function(v){return v[1]}).join('|')+')$').exec(args[0]) + if(match){ + return rt(MotaActionBlocks['idFixedList_e'].xmlText, args); + } + // 独立开关 + match=/^switch:([A-Z])$/.exec(args[0]) + if(match){ + args[0]=match[1] + return rt(MotaActionBlocks['idFlag_e'].xmlText, args); + } + // 临时变量 + match=/^temp:([A-Z])$/.exec(args[0]) + if(match){ + args[0]=match[1] + return rt(MotaActionBlocks['idTemp_e'].xmlText, args); + } + // id列表 + var Id_List = MotaActionBlocks.idIdList_e.json.args0[0].options; // [["变量", "flag"], ...] + match=new RegExp('^('+Id_List.map(function(v){return v[1]}).join('|')+'):([a-zA-Z0-9_\\u4E00-\\u9FCC]+)$').exec(args[0]) + if(match){ + args=[match[1],MotaActionFunctions.replaceToName_token(match[2])] + return rt(MotaActionBlocks['idIdList_e'].xmlText, args); + } + return {ret:false} +} + +ActionParser.prototype.matchEvalAtom = function(args) { + var rt=function(xml,args){ + // 此处刻意不写成 xml:MotaActionBlocks[str].xmlText 来方便搜索 + return {ret:true,xml:xml,args:args} + } + var match = /nothing/.exec('nothing') + // 勾选框 + match = /^(true|false)$/.exec(args[0]) + if(match){ + return rt(MotaActionBlocks['bool_e'].xmlText, args); + } + // 怪物属性 + var EnemyId_List=MotaActionBlocks.enemyattr_e.json.args0[1].options; // [["生命", "hp"], ...] + match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) + if(match){ + args=[MotaActionFunctions.replaceToName_token(match[1]),MotaActionFunctions.replaceToName_token(match[2])] + return rt(MotaActionBlocks['enemyattr_e'].xmlText, args); + } + // 图块ID + match=/^blockId:(-?\d+),(-?\d+)$/.exec(args[0]) + if(match){ + args=[match[1],match[2]] + return rt(MotaActionBlocks['blockId_e'].xmlText, args); + } + // 图块类别 + match=/^blockCls:(-?\d+),(-?\d+)$/.exec(args[0]) + if(match){ + args=[match[1],match[2]] + return rt(MotaActionBlocks['blockCls_e'].xmlText, args); + } + // 装备孔 + match=/^equip:(-?\d+)$/.exec(args[0]) + if(match){ + args[0]=match[1] + return rt(MotaActionBlocks['equip_e'].xmlText, args); + } + return {ret:false} +} + +ActionParser.prototype.matchEvalCompare=function(args, isShadow){ + var raw=args[0].replace(/>/g,'>').replace(/</g,'<') + if (raw[0]+raw.slice(-1)=='()') raw=raw.slice(1,-1); + var str=raw + var xml=MotaActionBlocks['expression_arithmetic_0'].xmlText + if (!/<=|<|>=|>|==|!=/.exec(str)) return {ret:false}; + str=str.replace(/[^<>=!()]/g,' ') + // 处理括号匹配 + var old; + do { + old=str; + str=str.replace(/\([^()]*\)/g,function(v){return Array.from({length:v.length+1}).join(' ')}) + } while (old!=str); + // 按优先级依次寻找以下符号 + var oplist=['<','<=','>','>=','==','!='] + for (var index = 0,op; op=oplist[index]; index++) { + var match=new RegExp('(?<= )'+op+'(?= )').exec(str) + if (!match) continue; + args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op,this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + return {ret:true,xml:xml,args:args} + } + return {ret:false} +} + +ActionParser.prototype.expandIdBlock = function(args, isShadow, comment) { + args[0]=MotaActionFunctions.replaceFromName(args[0]) + var xml=MotaActionBlocks['idString_e'].xmlText + var ret=this.matchId(args) + if (ret.ret){ + xml=ret.xml; + args=ret.args; + } else { + for (var index = 0; index < args.length; index++) { + args[index]=MotaActionFunctions.replaceToName(args[index]) + } + } + return xml(args, isShadow, comment); +} + +ActionParser.prototype.expandEvalBlock = function(args, isShadow, comment) { + args[0]=MotaActionFunctions.replaceFromName(args[0]) + var xml=MotaActionBlocks['evalString_e'].xmlText + var ret=this.matchId(args) + if (ret.ret){ + xml=ret.xml; + args=ret.args; + } else if( (ret=this.matchEvalAtom(args)).ret ){ + xml=ret.xml; + args=ret.args; + } else if(/^(!.*|\(!.*\))$/.exec(args[0])){ + // 非 + xml=MotaActionBlocks['negate_e'].xmlText + var content=args[0][0]=='!'?args[0].slice(1):args[0].slice(2,-1) + args[0]=this.expandEvalBlock([content],isShadow) + } else if( (ret=this.matchEvalCompare(args, isShadow)).ret ){ + // 大小比较 + xml=ret.xml; + args=ret.args; + } else { + for (var index = 0; index < args.length; index++) { + args[index]=MotaActionFunctions.replaceToName(args[index]) + } + } + return xml(args, isShadow, comment); +} + +MotaActionFunctions.actionParser = new ActionParser(); + +MotaActionFunctions.workspace = function(){return workspace} + +MotaActionFunctions.parse = function(obj,type) { + try { + obj = JSON.parse(MotaActionFunctions.replaceToName(JSON.stringify(obj))); + } catch (e) {} + MotaActionFunctions.workspace().clear(); + xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event'); + xml = Blockly.Xml.textToDom(''+xml_text+''); + Blockly.Xml.domToWorkspace(xml, MotaActionFunctions.workspace()); +} + +MotaActionFunctions.EvalString_pre = function(EvalString){ + if (EvalString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。'); + EvalString = MotaActionFunctions.replaceFromName(EvalString); + return EvalString.replace(/([^\\])"/g,'$1\\"').replace(/^"/g,'\\"').replace(/""/g,'"\\"'); +} + +MotaActionFunctions.JsonEvalString_pre = function (JsonEvalString) { + if (JsonEvalString == '') return ''; + JsonEvalString = MotaActionFunctions.replaceFromName(JsonEvalString); + try { + return JSON.stringify(JSON.parse(JsonEvalString)); + } catch (e) { + throw new Error('此处需要填写一个合法的JSON内容'); + } +} + +MotaActionFunctions.IntString_pre = function (IntString) { + if (!/^\d*$/.test(IntString)) throw new Error('此项必须是整数或不填'); + return IntString; +} + +MotaActionFunctions.IdString_pre = function(IdString){ + if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。'); + IdString = MotaActionFunctions.replaceFromName(IdString); + if (IdString && !(MotaActionFunctions.pattern.id.test(IdString)) && !(MotaActionFunctions.pattern.idWithoutFlag.test(IdString))) + throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符'); + return IdString; +} + +MotaActionFunctions.PosString_pre = function(PosString){ + if (!PosString || /^-?\d+$/.test(PosString)) return PosString; + //if (!(MotaActionFunctions.pattern.id.test(PosString)))throw new Error(PosString+'中包含了0-9 a-z A-Z _ 和中文之外的字符,或者是没有以flag: 开头'); + return '"'+MotaActionFunctions.replaceFromName(PosString)+'"'; +} + +MotaActionFunctions.StepString_pre = function(StepString){ + //StepString='上右3下2左上左2' + var route = StepString.replace(/上/g,'U').replace(/下/g,'D').replace(/左/g,'L').replace(/右/g,'R').replace(/前/g,'F').replace(/后/g,'B'); + + //copyed from core.js + var ans=[], index=0; + + var isset = function(a) { + if (a == undefined || a == null) { + return false; + } + return true; + } + var getNumber = function (noparse) { + var num=""; + while (index + diff --git a/editor.html b/editor.html index c5dcf5b9..77cb455c 100644 --- a/editor.html +++ b/editor.html @@ -610,6 +610,7 @@ + From cc46a86915572bda5d52a54dd5d65e8ee3ee2b96 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Mon, 18 May 2020 20:01:32 +0800 Subject: [PATCH 03/49] expand --- _server/MotaAction.g4 | 12 +++++------- _server/MotaActionParse.js | 14 ++++++++------ _server/config.json | 2 +- _server/editor.js | 2 ++ _server/editor_blockly.js | 11 +++++++++++ editor-mobile.html | 2 ++ editor.html | 2 ++ 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 38cf35bf..78f1cf66 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -2564,9 +2564,7 @@ expression //todo 修改recieveOrder,根据Arithmetic_List_0不同的值设定不同的recieveOrder var code = expression_0 + Arithmetic_List_0 + expression_1; var ops = { - '^': 'Math.pow('+expression_0+','+expression_1+')', - '和': expression_0+' && '+expression_1, - '或': expression_0+' || '+expression_1, + '^': 'Math.pow('+expression_0+','+expression_1+')' } if (ops[Arithmetic_List_0])code = ops[Arithmetic_List_0]; var orders = { @@ -2581,8 +2579,8 @@ var orders = { '<': Blockly.JavaScript.ORDER_RELATIONAL, '>=': Blockly.JavaScript.ORDER_RELATIONAL, '<=': Blockly.JavaScript.ORDER_RELATIONAL, - '和': Blockly.JavaScript.ORDER_LOGICAL_AND, - '或': Blockly.JavaScript.ORDER_LOGICAL_OR + '&&': Blockly.JavaScript.ORDER_LOGICAL_AND, + '||': Blockly.JavaScript.ORDER_LOGICAL_OR } return [code, orders[Arithmetic_List_0]]; */; @@ -2774,8 +2772,8 @@ ShopUse_List /*ShopUse_List ['money','exp']*/; Arithmetic_List - : '+'|'-'|'*'|'/'|'^'|'=='|'!='|'>'|'<'|'>='|'<='|'和'|'或' - ; + : '+'|'-'|'*'|'/'|'^'|'=='|'!='|'>'|'<'|'>='|'<='|'且'|'或' + /*Arithmetic_List ['+','-','*','/','^','==','!=','>','<','>=','<=','&&','||']*/; AssignOperator_List : '='|'+='|'-='|'*='|'/='|'**='|'//='|'%=' diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 4dabb99d..3b723d2e 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -997,12 +997,13 @@ ActionParser.prototype.matchEvalAtom = function(args) { } ActionParser.prototype.matchEvalCompare=function(args, isShadow){ - var raw=args[0].replace(/>/g,'>').replace(/</g,'<') + if (MotaActionFunctions.disableExpandCompare) return {ret:false}; + var raw=args[0].replace(/>/g,'>').replace(/</g,'<').replace(/"/g,'"').replace(/ /g,' ').replace(/&/g,'&') if (raw[0]+raw.slice(-1)=='()') raw=raw.slice(1,-1); var str=raw var xml=MotaActionBlocks['expression_arithmetic_0'].xmlText - if (!/<=|<|>=|>|==|!=/.exec(str)) return {ret:false}; - str=str.replace(/[^<>=!()]/g,' ') + if (!/<=|<|>=|>|==|!=|&&|\|\|/.exec(str)) return {ret:false}; + str=str.replace(/[^<>=!()&|]/g,' ') // 处理括号匹配 var old; do { @@ -1010,11 +1011,11 @@ ActionParser.prototype.matchEvalCompare=function(args, isShadow){ str=str.replace(/\([^()]*\)/g,function(v){return Array.from({length:v.length+1}).join(' ')}) } while (old!=str); // 按优先级依次寻找以下符号 - var oplist=['<','<=','>','>=','==','!='] + var oplist=['<','<=','>','>=','==','!=','&&','||'].reverse() for (var index = 0,op; op=oplist[index]; index++) { - var match=new RegExp('(?<= )'+op+'(?= )').exec(str) + var match=new RegExp('(?<= )'+(op=='||'?'\\|\\|':op)+'(?= )').exec(str) if (!match) continue; - args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op,this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),(op=='&&'?'&&':op),this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] return {ret:true,xml:xml,args:args} } return {ret:false} @@ -1248,6 +1249,7 @@ MotaActionFunctions.pattern.replaceEnemyList = [ ]; MotaActionFunctions.disableReplace = false; +MotaActionFunctions.disableExpandCompare = false; MotaActionFunctions.replaceToName_token = function (str) { if (!str || MotaActionFunctions.disableReplace) return str; diff --git a/_server/config.json b/_server/config.json index 9c9888dc..4965dae4 100644 --- a/_server/config.json +++ b/_server/config.json @@ -1 +1 @@ -{"lastUsed":[],"foldPerCol":50,"folded":false,"editorLastFloorId":"sample0","disableBlocklyReplace":false,"shortcut":{"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0}} \ No newline at end of file +{"lastUsed":[],"foldPerCol":50,"folded":false,"editorLastFloorId":"sample0","disableBlocklyReplace":false,"disableBlocklyExpandCompare":false,"shortcut":{"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0}} \ No newline at end of file diff --git a/_server/editor.js b/_server/editor.js index 6f282c4c..31d1f954 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -87,6 +87,8 @@ function editor() { ratio : 1, // blockly转义 disableBlocklyReplace: false, + // blockly展开比较 + disableBlocklyExpandCompare: false, // 绑定机关门事件相关 bindSpecialDoor: { diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index df6ed146..b7bc1166 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -497,6 +497,16 @@ function omitedcheckUpdateFunction(event) { alert("已" + (replaceCheckbox.checked ? "开启" : "关闭") + "中文变量名替换!\n关闭并重开事件编辑器以生效。"); } + editor.uivalues.disableBlocklyExpandCompare = editor.config.get("disableBlocklyExpandCompare", false); + var expandCompareCheckbox = document.getElementById('blocklyExpandCompare'); + expandCompareCheckbox.checked = !editor.uivalues.disableBlocklyExpandCompare; + + editor_blockly.triggerExpandCompare = function () { + editor.uivalues.disableBlocklyExpandCompare = !expandCompareCheckbox.checked; + editor.config.set("disableBlocklyExpandCompare", !expandCompareCheckbox.checked); + if (MotaActionFunctions) MotaActionFunctions.disableExpandCompare = !expandCompareCheckbox.checked; + } + var input_ = ''; editor_blockly.runOne = function () { //var printf = console.log; @@ -527,6 +537,7 @@ function omitedcheckUpdateFunction(event) { input_ = xhr.responseText; editor_blockly.runOne(); MotaActionFunctions.disableReplace = editor.uivalues.disableBlocklyReplace; + MotaActionFunctions.disableExpandCompare = editor.uivalues.disableBlocklyExpandCompare; } xhr.open('GET', '_server/MotaAction.g4', true); xhr.send(null); diff --git a/editor-mobile.html b/editor-mobile.html index 5fdeb1f2..37949d9b 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -234,6 +234,8 @@ 开启中文名替换 + + 展开值块逻辑运算 diff --git a/editor.html b/editor.html index 77cb455c..17ff7d97 100644 --- a/editor.html +++ b/editor.html @@ -229,6 +229,8 @@ 开启中文名替换 + + 展开值块逻辑运算 From 01b4dc2e8921f9e4cc5be02f5fa49297a44c8def Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Mon, 18 May 2020 20:03:05 +0800 Subject: [PATCH 04/49] fix expand enemy:xx:xx --- _server/MotaActionParse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 3b723d2e..b75a0331 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -972,7 +972,7 @@ ActionParser.prototype.matchEvalAtom = function(args) { var EnemyId_List=MotaActionBlocks.enemyattr_e.json.args0[1].options; // [["生命", "hp"], ...] match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) if(match){ - args=[MotaActionFunctions.replaceToName_token(match[1]),MotaActionFunctions.replaceToName_token(match[2])] + args=[match[1],match[2]] return rt(MotaActionBlocks['enemyattr_e'].xmlText, args); } // 图块ID From a0f51eee74e70d6a6598657d82f3e4a6b8f63052 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Mon, 18 May 2020 20:10:49 +0800 Subject: [PATCH 05/49] fix escape --- _server/MotaActionParse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index b75a0331..fd08d8f2 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -1015,7 +1015,7 @@ ActionParser.prototype.matchEvalCompare=function(args, isShadow){ for (var index = 0,op; op=oplist[index]; index++) { var match=new RegExp('(?<= )'+(op=='||'?'\\|\\|':op)+'(?= )').exec(str) if (!match) continue; - args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),(op=='&&'?'&&':op),this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op.replace(/&/g,'&').replace(//g,'>'),this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] return {ret:true,xml:xml,args:args} } return {ret:false} From 969bd0de12b2ed8cae714f3a56527a56928b7781 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Mon, 18 May 2020 23:11:17 +0800 Subject: [PATCH 06/49] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E4=BF=AE=E6=94=B9ID?= =?UTF-8?q?=E5=92=8C=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _docs/element.md | 2 +- _docs/event.md | 2 +- _docs/personalization.md | 10 ++--- _server/MotaAction.g4 | 6 +-- _server/MotaActionParse.js | 16 ++++---- _server/editor_blockly.js | 2 +- _server/editor_file.js | 6 +-- _server/table/data.comment.js | 6 +-- extensions/dynamicMapEditor.js | 2 +- libs/control.js | 8 ++-- libs/maps.js | 2 +- libs/utils.js | 2 +- project/data.js | 10 ++--- project/enemys.js | 10 ++--- project/events.js | 6 +-- project/floors/sample0.js | 16 ++++---- project/floors/sample1.js | 26 ++++++------- project/floors/sample3.js | 2 +- project/functions.js | 20 +++++----- project/icons.js | 51 ++++++++++++------------- project/items.js | 68 ++++++++++++++++----------------- project/maps.js | 55 +++++++++++++------------- project/materials/animates.png | Bin 35354 -> 35375 bytes project/materials/enemys.png | Bin 73550 -> 70690 bytes project/materials/ground.png | Bin 600 -> 817 bytes project/materials/icons.png | Bin 8634 -> 8414 bytes project/materials/items.png | Bin 23440 -> 18170 bytes project/materials/npcs.png | Bin 17272 -> 20746 bytes runtime.d.ts | 2 +- v2.x-final更新.txt | 4 +- v266-v2.7接档说明.txt | 7 ++-- 31 files changed, 169 insertions(+), 172 deletions(-) diff --git a/_docs/element.md b/_docs/element.md index 3b622883..2b10effc 100644 --- a/_docs/element.md +++ b/_docs/element.md @@ -139,7 +139,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数 领域怪还可以设置`range`选项代表该领域怪的范围,不写则默认为1。
**将 `flags.no_zone` 设置为 `true` 可以免疫领域效果。**
阻击怪同样需要设置value,代表阻击伤害的数值。如果勇士生命值扣减到0,则直接死亡触发lose事件。 -
**将`flags.no_snipe`设置为true可以免疫阻击效果(包括伤害和移动!)。**
+
**将`flags.no_repluse`设置为true可以免疫阻击效果(包括伤害和移动!)。**
!> 阻击怪后退的地点不能有任何事件存在,即使是已经被禁用的红绿事件或重生怪!(会导致此事件意外被重新启用)
激光怪同样需要设置value,代表激光伤害的数值。
请注意如果吸血、领域、阻击、生命光环中任何两个同时存在,则 `value` 会冲突。**因此请勿将吸血、领域、阻击或激光放置在同一个怪物身上。退化和攻防光环同理!
** diff --git a/_docs/event.md b/_docs/event.md index 87fab1b2..c27e53b2 100644 --- a/_docs/event.md +++ b/_docs/event.md @@ -2174,7 +2174,7 @@ if (core.flags.enableAddPoint && point > 0) { ``` json "shops": [{ "id": "shop1", - "text": "\t[贪婪之神,blueShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:", + "text": "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:", "textInList": "1F金币商店", "mustEnable": false, "disablePreview": false, diff --git a/_docs/personalization.md b/_docs/personalization.md index e49bde8a..82fbccaf 100644 --- a/_docs/personalization.md +++ b/_docs/personalization.md @@ -254,7 +254,7 @@ ID必须由数字字母下划线组成,数字在1000以内,且均不能和 ``` js // ratio为楼层的item_ratio值,可以进行翻倍宝石属性 -core.status.hero.atk += core.values.redJewel * ratio +core.status.hero.atk += core.values.redGem * ratio ``` 这里我们可以直接写ratio来取用该楼层中定义的`item_ratio`的值。 @@ -263,7 +263,7 @@ core.status.hero.atk += core.values.redJewel * ratio ``` js // 一个二倍线性增加的例子 -core.status.hero.atk += core.values.redJewel + 2*ratio +core.status.hero.atk += core.values.redGem + 2*ratio ``` ### 消耗类道具(cls: tools);永久类道具(cls: constants) @@ -308,11 +308,11 @@ function (enemy, hero_hp, hero_atk, hero_def, hero_mdef, x, y, floorId) { [ // 写在获得道具后事件 // 设置不同的flag可以分别无视对应的阻激夹域效果 {"type": "setValue", "name": "flag:no_zone", "value": "true"}, // 免疫领域 - {"type": "setValue", "name": "flag:no_snipe", "value": "true"}, // 免疫阻击 + {"type": "setValue", "name": "flag:no_repluse", "value": "true"}, // 免疫阻击 {"type": "setValue", "name": "flag:no_laser", "value": "true"}, // 免疫激光 {"type": "setValue", "name": "flag:no_betweenAttack", "value": "true"}, // 免疫夹击 {"type": "setValue", "name": "flag:no_ambush", "value": "true"}, // 免疫捕捉 - {"type": "setValue", "name": "item:shoes", "value": "1"} // 免疫路障 + {"type": "setValue", "name": "item:amulet", "value": "1"} // 免疫路障 ] ``` 4. 如果有更高的需求,例如想让吸血效果变成一半,则还是在上面这些地方进行对应的修改即可。 @@ -666,7 +666,7 @@ if (core.flags.statusBarItems.indexOf('enableSkill')>=0) { - **`flag:hard`**: 当前的难度标志;此flag变量在setInitData中被定义,可以直接取用来判定当前难度分歧。上传成绩时将根据此flag来对不同难度进行排序。 - **`flag:posion`**, **`flag:weak`**, **`flag:curse`**: 中毒、衰弱、诅咒状态。 -- **`flag:no_zone`**, **`flag:no_snipe`**, **`flag:no_laser`**, **`flag:no_betweenAttack`**: 是否分别免疫领域、阻击、激光、夹击效果。 +- **`flag:no_zone`**, **`flag:no_repluse`**, **`flag:no_laser`**, **`flag:no_betweenAttack`**: 是否分别免疫领域、阻击、激光、夹击效果。 - **`flag:hatred`**: 当前的仇恨数值。 - **`flag:commonTimes`**: 全局商店共用次数时的访问次数。 - **`flag:input`**: 接受用户输入的事件后,存放用户输入的结果。 diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 78f1cf66..cbb5b2bf 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -109,7 +109,7 @@ shopsub /* shopsub tooltip : 全局商店 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=%e5%85%a8%e5%b1%80%e5%95%86%e5%ba%97 -default : ["shop1","贪婪之神","blueShop","勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:","金币商店",false,false] +default : ["shop1","贪婪之神","moneyShop","勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:","金币商店",false,false] var title=''; if (EvalString_0==''){ if (IdString_1=='') title=''; @@ -1887,7 +1887,7 @@ choices_s /* choices_s tooltip : choices: 给用户提供选项 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=choices%EF%BC%9A%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%80%89%E9%A1%B9 -default : ["","流浪者","woman",0] +default : ["","流浪者","trader",0] var title=''; if (EvalString_1==''){ if (IdString_0=='')title=''; @@ -2813,7 +2813,7 @@ Global_Attribute_List Global_Value_List : '血网伤害'|'中毒伤害'|'衰弱效果'|'红宝石效果'|'蓝宝石效果'|'绿宝石效果'|'红血瓶效果'|'蓝血瓶效果'|'黄血瓶效果'|'绿血瓶效果'|'破甲比例'|'反击比例'|'净化比例'|'仇恨增加值'|'动画时间' - /*Global_Value_List ['lavaDamage','poisonDamage','weakValue', 'redJewel', 'blueJewel', 'greenJewel', 'redPotion', 'bluePotion', 'yellowPotion', 'greenPotion', 'breakArmor', 'counterAttack', 'purify', 'hatred', 'animateSpeed']*/; + /*Global_Value_List ['lavaDamage','poisonDamage','weakValue', 'redGem', 'blueGem', 'greenGem', 'redPotion', 'bluePotion', 'yellowPotion', 'greenPotion', 'breakArmor', 'counterAttack', 'purify', 'hatred', 'animateSpeed']*/; Global_Flag_List diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index fd08d8f2..72108439 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -1191,10 +1191,10 @@ MotaActionFunctions.pattern.replaceItemList = [ ["yellowKey", "黄钥匙"], ["blueKey", "蓝钥匙"], ["redKey", "红钥匙"], - ["redJewel", "红宝石"], - ["blueJewel", "蓝宝石"], - ["greenJewel", "绿宝石"], - ["yellowJewel", "黄宝石"], + ["redGem", "红宝石"], + ["blueGem", "蓝宝石"], + ["greenGem", "绿宝石"], + ["yellowGem", "黄宝石"], ["redPotion", "红血瓶"], ["bluePotion", "蓝血瓶"], ["yellowPotion", "黄血瓶"], @@ -1210,14 +1210,14 @@ MotaActionFunctions.pattern.replaceItemList = [ ["shield4", "圣盾"], ["shield5", "神圣盾"], ["superPotion", "圣水"], - ["moneyPocket", "金钱袋"], + ["silverCoin", "银币"], ["book", "怪物手册"], ["fly", "楼层传送器"], ["coin", "幸运金币"], - ["snow", "冰冻徽章"], + ["freezeBadge", "冰冻徽章"], ["cross", "十字架"], - ["knife", "屠龙匕首"], - ["shoes", "绿鞋"], + ["dagger", "屠龙匕首"], + ["amulet", "护符"], ["bigKey", "大黄门钥匙"], ["greenKey", "绿钥匙"], ["steelKey", "铁门钥匙"], diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index b7bc1166..cba4dcaf 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -39,7 +39,7 @@ editor_blockly = function () { MotaActionBlocks['changeFloor_m'].xmlText(), MotaActionFunctions.actionParser.parse([{ "id": "shop1", - "text": "\t[贪婪之神,blueShop]勇敢的武士啊, 给我\${20+2*flag:shop1}金币就可以:", + "text": "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我\${20+2*flag:shop1}金币就可以:", "textInList": "1F金币商店", "choices": [ {"text": "生命+800", "need": "status:money>=20+2*flag:shop1", "action": [ diff --git a/_server/editor_file.js b/_server/editor_file.js index edf8ae27..4229701e 100644 --- a/_server/editor_file.js +++ b/_server/editor_file.js @@ -499,7 +499,7 @@ editor_file = function (editor, callback) { /*actionList:[ ["change","['items']['name']","红宝石的新名字"], ["add","['items']['新的和name同级的属性']",123], - ["change","['itemEffectTip']","',攻击力+'+editor.core.values.redJewel"], + ["change","['itemEffectTip']","',攻击力+'+editor.core.values.redGem"], ] 为[]时只查询不修改 */ @@ -574,7 +574,7 @@ editor_file = function (editor, callback) { editor.file.editMapBlocksInfo = function (idnum, actionList, callback) { /*actionList:[ - ["change","['events']",["\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]], + ["change","['events']",["\t[老人,wizard]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]], ["change","['afterBattle']",null], ] 为[]时只查询不修改 @@ -618,7 +618,7 @@ editor_file = function (editor, callback) { editor.file.editLoc = function (x, y, actionList, callback) { /*actionList:[ - ["change","['events']",["\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]], + ["change","['events']",["\t[老人,wizard]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。"]], ["change","['afterBattle']",null], ] 为[]时只查询不修改 diff --git a/_server/table/data.comment.js b/_server/table/data.comment.js index 7e0a246f..e99b0fd1 100644 --- a/_server/table/data.comment.js +++ b/_server/table/data.comment.js @@ -456,19 +456,19 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_docs": "衰弱效果", "_data": "衰弱状态下攻防减少的数值\n如果此项不小于1,则作为实际下降的数值(比如10就是攻防各下降10)\n如果在0到1之间则为下降的比例(比如0.3就是下降30%的攻防)" }, - "redJewel": { + "redGem": { "_leaf": true, "_type": "textarea", "_docs": "红宝石效果", "_data": "红宝石加攻击的数值" }, - "blueJewel": { + "blueGem": { "_leaf": true, "_type": "textarea", "_docs": "蓝宝石效果", "_data": "蓝宝石加防御的数值" }, - "greenJewel": { + "greenGem": { "_leaf": true, "_type": "textarea", "_docs": "绿宝石效果", diff --git a/extensions/dynamicMapEditor.js b/extensions/dynamicMapEditor.js index 83690a51..eff1ec7c 100644 --- a/extensions/dynamicMapEditor.js +++ b/extensions/dynamicMapEditor.js @@ -8,7 +8,7 @@ function dynamicMapEditor() { // 所有显示的ID this.displayIds = [ 'none', 'yellowWall', 'blueWall', 'whiteWall', 'yellowDoor', 'blueDoor', 'redDoor', 'star', 'lava', 'lavaNet', - 'yellowKey', 'blueKey', 'redKey', 'redJewel', 'blueJewel', 'greenJewel', 'yellowJewel', + 'yellowKey', 'blueKey', 'redKey', 'redGem', 'blueGem', 'greenGem', 'yellowGem', 'redPotion', 'bluePotion', 'yellowPotion', 'greenPotion', 'pickaxe', 'bomb', 'centerFly', 'cls:autotile', 'cls:enemys', 'cls:enemy48' ]; diff --git a/libs/control.js b/libs/control.js index 40527187..5590d0b7 100644 --- a/libs/control.js +++ b/libs/control.js @@ -984,7 +984,7 @@ control.prototype.checkBlock = function () { core.updateStatusBar(); } } - this._checkBlock_snipe(core.status.checkBlock.snipe[loc]); + this._checkBlock_repluse(core.status.checkBlock.repluse[loc]); this._checkBlock_ambush(core.status.checkBlock.ambush[loc]); } @@ -998,10 +998,10 @@ control.prototype._checkBlock_disableQuickShop = function () { } ////// 阻击 ////// -control.prototype._checkBlock_snipe = function (snipe) { - if (!snipe || snipe.length == 0) return; +control.prototype._checkBlock_repluse = function (repluse) { + if (!repluse || repluse.length == 0) return; var actions = []; - snipe.forEach(function (t) { + repluse.forEach(function (t) { actions.push({"type": "move", "loc": [t[0],t[1]], "steps": [t[3]], "time": 250, "keep": true, "async": true}); }); actions.push({"type": "waitAsync"}); diff --git a/libs/maps.js b/libs/maps.js index ae76cecb..438d30f8 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -688,7 +688,7 @@ maps.prototype._automaticRoute_deepAdd = function (x, y) { // 绕过路障 if (id.endsWith("Net")) deepAdd += 100; // 绕过血瓶和绿宝石 - if (core.hasFlag('__potionNoRouting__') && (id.endsWith("Potion") || id == 'greenJewel')) deepAdd += 100; + if (core.hasFlag('__potionNoRouting__') && (id.endsWith("Potion") || id == 'greenGem')) deepAdd += 100; // 绕过传送点 // if (block.block.event.trigger == 'changeFloor') deepAdd+=10; } diff --git a/libs/utils.js b/libs/utils.js index 1698c02e..7eaba683 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -1149,7 +1149,7 @@ utils.prototype._export = function (floorIds) { }) // values - content += ["redJewel", "blueJewel", "greenJewel", "redPotion", "bluePotion", + content += ["redGem", "blueGem", "greenGem", "redPotion", "bluePotion", "yellowPotion", "greenPotion", "sword1", "shield1"].map(function (x) { return core.values[x] || 0; }).join(" ") + "\n\n"; diff --git a/project/data.js b/project/data.js index 4f33fa23..9e84f565 100644 --- a/project/data.js +++ b/project/data.js @@ -303,7 +303,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "shops": [ { "id": "shop1", - "text": "\t[贪婪之神,blueShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:", + "text": "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:", "textInList": "1F金币商店", "mustEnable": false, "disablePreview": false, @@ -368,7 +368,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = }, { "id": "shop2", - "text": "\t[贪婪之神,pinkShop]勇敢的武士啊, 给我一定经验就可以:", + "text": "\t[贪婪之神,expShop]勇敢的武士啊, 给我一定经验就可以:", "textInList": "1F经验商店", "mustEnable": false, "disablePreview": true, @@ -465,9 +465,9 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "lavaDamage": 100, "poisonDamage": 10, "weakValue": 20, - "redJewel": 3, - "blueJewel": 3, - "greenJewel": 5, + "redGem": 3, + "blueGem": 3, + "greenGem": 5, "redPotion": 100, "bluePotion": 250, "yellowPotion": 500, diff --git a/project/enemys.js b/project/enemys.js index f5e49f15..c3de9b33 100644 --- a/project/enemys.js +++ b/project/enemys.js @@ -36,7 +36,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"experience":0,"point":0,"special":6,"n":8}, "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"experience":0,"point":0,"special":12}, "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, + "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":18,"value":20}, @@ -70,7 +70,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blueSkeleton": {"name":"蓝骷髅","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, + "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "crismonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, @@ -80,9 +80,5 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "greenGT": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "goldBat": {"name":"金蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "pinkSoldier": {"name":"红战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "pinkGhostSoldier": {"name":"红队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenSoldier": {"name":"青战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenGhostSoldier": {"name":"青队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0} + "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0} } \ No newline at end of file diff --git a/project/events.js b/project/events.js index af347cde..8847951f 100644 --- a/project/events.js +++ b/project/events.js @@ -175,7 +175,7 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 = "data": [ { "type": "choices", - "text": "\t[商人,woman]你有多余的钥匙想要出售吗?", + "text": "\t[商人,trader]你有多余的钥匙想要出售吗?", "choices": [ { "text": "黄钥匙(10金币)", @@ -204,7 +204,7 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 = } ], "false": [ - "\t[商人,woman]你没有黄钥匙!" + "\t[商人,trader]你没有黄钥匙!" ] } ] @@ -236,7 +236,7 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 = } ], "false": [ - "\t[商人,woman]你没有蓝钥匙!" + "\t[商人,trader]你没有蓝钥匙!" ] } ] diff --git a/project/floors/sample0.js b/project/floors/sample0.js index 4af03e43..7d70dcd8 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -46,8 +46,8 @@ main.floors.sample0= } ], "10,11": [ - "\t[老人,woman]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", - "\t[老人,woman]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + "\t[老人,trader]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。", + "\t[老人,trader]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", { "type": "hide", "time": 500 @@ -63,24 +63,24 @@ main.floors.sample0= } ], "2,8": [ - "\t[老人,magician]这些都是各种各样的怪物,所有怪物的数据都在enemys.js中设置。", - "\t[老人,magician]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", - "\t[老人,magician]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", + "\t[老人,wizard]这些都是各种各样的怪物,所有怪物的数据都在enemys.js中设置。", + "\t[老人,wizard]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。", + "\t[老人,wizard]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。", { "type": "hide", "time": 500 } ], "2,5": [ - "\t[老人,magician]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", + "\t[老人,wizard]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,可参见样板中黑暗大法师的写法。", { "type": "hide", "time": 500 } ], "2,3": [ - "\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", - "\t[老人,magician]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", + "\t[老人,wizard]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。", + "\t[老人,wizard]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。", { "type": "hide", "time": 500 diff --git a/project/floors/sample1.js b/project/floors/sample1.js index 9c769745..a3468def 100644 --- a/project/floors/sample1.js +++ b/project/floors/sample1.js @@ -419,23 +419,23 @@ main.floors.sample1= { "case": "0", "action": [ - "\t[老人,woman]这是个很复杂的例子,它将教会你如何使用if 语句进行条件判断,以及 choices 提供选项来供用户进行选择。", - "\t[老人,woman]第一次访问我将显示这段文字;从第二次开始将会向你出售钥匙。\n钥匙价格将随着访问次数递增。\n当合计出售了七把钥匙后,将送你一把大黄门钥匙,并消失不再出现。", - "\t[老人,woman]这部分的逻辑比较长,请细心看样板的写法,是很容易看懂并理解的。" + "\t[老人,trader]这是个很复杂的例子,它将教会你如何使用if 语句进行条件判断,以及 choices 提供选项来供用户进行选择。", + "\t[老人,trader]第一次访问我将显示这段文字;从第二次开始将会向你出售钥匙。\n钥匙价格将随着访问次数递增。\n当合计出售了七把钥匙后,将送你一把大黄门钥匙,并消失不再出现。", + "\t[老人,trader]这部分的逻辑比较长,请细心看样板的写法,是很容易看懂并理解的。" ] }, { "case": "8", "action": [ - "\t[老人,woman]你购买的钥匙已经够多了,再继续卖给你的话我会有危险的。", - "\t[老人,woman]看在你贡献给我这么多钱的份上,送你一把大黄门钥匙吧,希望你能好好用它。", + "\t[老人,trader]你购买的钥匙已经够多了,再继续卖给你的话我会有危险的。", + "\t[老人,trader]看在你贡献给我这么多钱的份上,送你一把大黄门钥匙吧,希望你能好好用它。", { "type": "setValue", "name": "item:bigKey", "operator": "+=", "value": "1" }, - "\t[老人,woman]我先走了,拜拜~", + "\t[老人,trader]我先走了,拜拜~", { "type": "hide", "time": 500 @@ -450,7 +450,7 @@ main.floors.sample1= "action": [ { "type": "choices", - "text": "\t[老人,woman]少年,你需要钥匙吗?\n我这里有大把的!", + "text": "\t[老人,trader]少年,你需要钥匙吗?\n我这里有大把的!", "choices": [ { "text": "黄钥匙(${9+flag:woman_times}金币)", @@ -473,7 +473,7 @@ main.floors.sample1= } ], "false": [ - "\t[老人,woman]你的金钱不足!" + "\t[老人,trader]你的金钱不足!" ] } ] @@ -502,7 +502,7 @@ main.floors.sample1= } ], "false": [ - "\t[老人,woman]你的金钱不足!" + "\t[老人,trader]你的金钱不足!" ] } ] @@ -528,7 +528,7 @@ main.floors.sample1= } ], "false": [ - "\t[老人,woman]你的金钱不足!", + "\t[老人,trader]你的金钱不足!", { "type": "continue" } @@ -560,8 +560,8 @@ main.floors.sample1= } ], "12,11": [ - "\t[老人,womanMagician]使用 {\"type\":\"function\"} 可以写自定义的JS脚本。\n本塔支持的所有主要API会在doc文档内给出。", - "\t[老人,womanMagician]例如这个例子:即将弹出一个输入窗口,然后会将你的输入结果直接加到你的攻击力上。", + "\t[老人,recluse]使用 {\"type\":\"function\"} 可以写自定义的JS脚本。\n本塔支持的所有主要API会在doc文档内给出。", + "\t[老人,recluse]例如这个例子:即将弹出一个输入窗口,然后会将你的输入结果直接加到你的攻击力上。", { "type": "input", "text": "请输入你要加攻击力的数值:" @@ -584,7 +584,7 @@ main.floors.sample1= ], "false": [] }, - "\t[老人,womanMagician]具体可参见样板中本事件的写法。" + "\t[老人,recluse]具体可参见样板中本事件的写法。" ] }, "changeFloor": { diff --git a/project/floors/sample3.js b/project/floors/sample3.js index a3b996b0..a1a6e12d 100644 --- a/project/floors/sample3.js +++ b/project/floors/sample3.js @@ -871,7 +871,7 @@ main.floors.sample3= "\t[hero]好温暖……", { "type": "setValue", - "name": "item:yellowJewel", + "name": "item:yellowGem", "value": "1" }, { diff --git a/project/functions.js b/project/functions.js index 145d6ead..4a4dd7d0 100644 --- a/project/functions.js +++ b/project/functions.js @@ -432,7 +432,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = return [ [1, "先攻", "怪物首先攻击"], [2, "魔攻", "怪物无视勇士的防御"], - [3, "坚固", "勇士每回合最多只能对怪物造成1点伤害"], + [3, "坚固", "怪物防御不小于勇士攻击-1"], [4, "2连击", "怪物每回合攻击2次"], [5, "3连击", "怪物每回合攻击3次"], [6, function (enemy) { return (enemy.n || '') + "连击"; }, function (enemy) { return "怪物每回合攻击" + (enemy.n || 4) + "次"; }], @@ -833,7 +833,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = break; case 52: // 快捷键4:破冰/冰冻/地震/上下楼器/... 其他道具依次判断 { - var list = ["icePickaxe", "snow", "earthquake", "upFly", "downFly", "jumpShoes", "lifeWand", "poisonWine", "weakWine", "curseWine", "superWine"]; + var list = ["icePickaxe", "freezeBadge", "earthquake", "upFly", "downFly", "jumpShoes", "lifeWand", "poisonWine", "weakWine", "curseWine", "superWine"]; for (var i = 0; i < list.length; i++) { var itemId = list[i]; if (core.canUseItem(itemId)) { @@ -1051,7 +1051,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var damage = {}, // 每个点的伤害值 type = {}, // 每个点的伤害类型 - snipe = {}, // 每个点的阻击怪信息 + repluse = {}, // 每个点的阻击怪信息 ambush = {}; // 每个点的捕捉信息 // 计算血网和领域、阻击、激光的伤害,计算捕捉信息 @@ -1065,7 +1065,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = type[loc] = type[loc] || {}; // 血网 - if (id == 'lavaNet' && !core.hasItem('shoes')) { + if (id == 'lavaNet' && !core.hasItem('amulet')) { damage[loc] = (damage[loc] || 0) + core.values.lavaDamage; type[loc]["血网伤害"] = true; } @@ -1096,8 +1096,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } // 阻击 - // 如果要防止阻击伤害,可以直接简单的将 flag:no_snipe 设为true - if (enemy && core.hasSpecial(enemy.special, 18) && !core.hasFlag('no_snipe')) { + // 如果要防止阻击伤害,可以直接简单的将 flag:no_repluse 设为true + if (enemy && core.hasSpecial(enemy.special, 18) && !core.hasFlag('no_repluse')) { for (var dir in core.utils.scan) { var nx = x + core.utils.scan[dir].x, ny = y + core.utils.scan[dir].y, @@ -1112,7 +1112,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var rnx = x + core.utils.scan[rdir].x, rny = y + core.utils.scan[rdir].y; if (rnx >= 0 && rnx < width && rny >= 0 && rny < height && core.getBlock(rnx, rny, floorId) == null) { - snipe[currloc] = (snipe[currloc] || []).concat([ + repluse[currloc] = (repluse[currloc] || []).concat([ [x, y, id, rdir] ]); } @@ -1207,7 +1207,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.status.checkBlock = { damage: damage, type: type, - snipe: snipe, + repluse: repluse, ambush: ambush, cache: {} // clear cache }; @@ -1391,9 +1391,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = return [ 'yellowDoor', 'blueDoor', 'redDoor', 'greenDoor', 'steelDoor', 'yellowKey', 'blueKey', 'redKey', 'greenKey', 'steelKey', - 'redJewel', 'blueJewel', 'greenJewel', 'yellowJewel', + 'redGem', 'blueGem', 'greenGem', 'yellowGem', 'redPotion', 'bluePotion', 'greenPotion', 'yellowPotion', 'superPotion', - 'pickaxe', 'bomb', 'centerFly', 'icePickaxe', 'snow', + 'pickaxe', 'bomb', 'centerFly', 'icePickaxe', 'freezeBadge', 'earthquake', 'upFly', 'downFly', 'jumpShoes', 'lifeWand', 'poisonWine', 'weakWine', 'curseWine', 'superWine', 'sword1', 'sword2', 'sword3', 'sword4', 'sword5', diff --git a/project/icons.js b/project/icons.js index f821a482..c8988970 100644 --- a/project/icons.js +++ b/project/icons.js @@ -97,23 +97,26 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "steelDoor2": 27, "steelDoor3": 28, "iceDoor": 29, - "iceDoor2": 30 + "iceDoor2": 30, + "magentaWall": 31 }, "npcs": { "man": 0, - "woman": 1, + "trader": 1, "thief": 2, "fairy": 3, - "magician": 4, - "womanMagician": 5, - "oldMan": 6, - "child": 7, - "wood": 8, - "pinkShop": 9, - "blueShop": 10, + "wizard": 4, + "recluse": 5, + "king": 6, + "youngMan": 7, + "sign": 8, + "expShop": 9, + "moneyShop": 10, "princess": 11, - "man2": 28, - "woman2": 29, + "greenMan": 28, + "blueTrader": 29, + "redMSNpc": 30, + "blackTrader": 31, "octopusLeftTop": 12, "octopusTop": 13, "octopusRightTop": 14, @@ -173,7 +176,7 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "redSwordsman": 53, "poisonZombie": 55, "octopus": 57, - "greenKnight": 59, + "princessEnemy": 59, "skeletonWarrior": 9, "frozenSkeleton": 69, "silverSlimelord": 60, @@ -202,20 +205,16 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "evilFairy": 51, "blueRock": 63, "skeletonLite": 64, - "blueSkeleton": 65, + "greenKnight": 65, "bowman": 66, "liteBowman": 67, "crismonZombie": 68, "watcherSlime": 70, "mutantSlimeman": 71, - "goldBat": 72, + "frostBat": 72, "devilKnight": 73, "grayPriest": 74, "greenGT": 75, - "pinkGhostSoldier": 77, - "greenSoldier": 78, - "greenGhostSoldier": 79, - "pinkSoldier": 76, "ghostSoldier": 11, "evilHero": 40 }, @@ -232,10 +231,10 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "greenKey": 3, "steelKey": 4, "bigKey": 6, - "redJewel": 16, - "blueJewel": 17, - "greenJewel": 18, - "yellowJewel": 19, + "redGem": 16, + "blueGem": 17, + "greenGem": 18, + "yellowGem": 19, "redPotion": 20, "bluePotion": 21, "greenPotion": 22, @@ -262,7 +261,7 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "upFly": 15, "downFly": 14, "coin": 11, - "snow": 41, + "freezeBadge": 41, "cross": 40, "superPotion": 29, "earthquake": 8, @@ -270,9 +269,9 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "weakWine": 25, "curseWine": 27, "superWine": 28, - "knife": 42, - "moneyPocket": 46, - "shoes": 47, + "dagger": 42, + "silverCoin": 46, + "amulet": 47, "hammer": 48, "jumpShoes": 49, "skill1": 30, diff --git a/project/items.js b/project/items.js index 0a68a3f0..86c61b84 100644 --- a/project/items.js +++ b/project/items.js @@ -19,22 +19,22 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "可以打开一扇红门", "hideInToolbox": true }, - "redJewel": { + "redGem": { "cls": "items", "name": "红宝石", - "text": "',攻击+${core.values.redJewel}'" + "text": "',攻击+${core.values.redGem}'" }, - "blueJewel": { + "blueGem": { "cls": "items", "name": "蓝宝石", - "text": "',防御+${core.values.blueJewel}'" + "text": "',防御+${core.values.blueGem}'" }, - "greenJewel": { + "greenGem": { "cls": "items", "name": "绿宝石", - "text": "',护盾+${core.values.greenJewel}'" + "text": "',护盾+${core.values.greenGem}'" }, - "yellowJewel": { + "yellowGem": { "cls": "items", "name": "黄宝石", "text": "可以进行加点" @@ -178,9 +178,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "圣水" }, - "moneyPocket": { + "silverCoin": { "cls": "items", - "name": "金钱袋" + "name": "银币" }, "book": { "cls": "constants", @@ -200,7 +200,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "name": "幸运金币", "text": "持有时打败怪物可得双倍金币" }, - "snow": { + "freezeBadge": { "cls": "constants", "name": "冰冻徽章", "text": "可以将面前的熔岩变成平地" @@ -210,14 +210,14 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "name": "十字架", "text": "持有后无视怪物的无敌属性" }, - "knife": { + "dagger": { "cls": "constants", "name": "屠龙匕首", "text": "该道具尚未被定义" }, - "shoes": { + "amulet": { "cls": "constants", - "name": "绿鞋", + "name": "护符", "text": "持有时无视负面地形" }, "bigKey": { @@ -317,10 +317,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = } }, "itemEffect": { - "redJewel": "core.status.hero.atk += core.values.redJewel * ratio", - "blueJewel": "core.status.hero.def += core.values.blueJewel * ratio", - "greenJewel": "core.status.hero.mdef += core.values.greenJewel * ratio", - "yellowJewel": "core.status.hero.hp+=1000;core.status.hero.atk+=6;core.status.hero.def+=6;core.status.hero.mdef+=10;", + "redGem": "core.status.hero.atk += core.values.redGem * ratio", + "blueGem": "core.status.hero.def += core.values.blueGem * ratio", + "greenGem": "core.status.hero.mdef += core.values.greenGem * ratio", + "yellowGem": "core.status.hero.hp+=1000;core.status.hero.atk+=6;core.status.hero.def+=6;core.status.hero.mdef+=10;", "redPotion": "core.status.hero.hp += core.values.redPotion * ratio", "bluePotion": "core.status.hero.hp += core.values.bluePotion * ratio", "yellowPotion": "core.status.hero.hp += core.values.yellowPotion * ratio", @@ -339,13 +339,13 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "shield5": "core.status.hero.def += 100;core.status.hero.mdef += 100", "bigKey": "core.status.hero.items.keys.yellowKey++;core.status.hero.items.keys.blueKey++;core.status.hero.items.keys.redKey++;", "superPotion": "core.status.hero.hp *= 2", - "moneyPocket": "core.status.hero.money += 500" + "silverCoin": "core.status.hero.money += 500" }, "itemEffectTip": { - "redJewel": "',攻击+'+core.values.redJewel * ratio", - "blueJewel": "',防御+'+core.values.blueJewel * ratio", - "greenJewel": "',护盾+'+core.values.greenJewel * ratio", - "yellowJewel": "',全属性提升'", + "redGem": "',攻击+'+core.values.redGem * ratio", + "blueGem": "',防御+'+core.values.blueGem * ratio", + "greenGem": "',护盾+'+core.values.greenGem * ratio", + "yellowGem": "',全属性提升'", "redPotion": "',生命+'+core.values.redPotion * ratio", "bluePotion": "',生命+'+core.values.bluePotion * ratio", "yellowPotion": "',生命+'+core.values.yellowPotion * ratio", @@ -364,7 +364,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "shield5": "',防御+100,护盾+100'", "bigKey": "',全钥匙+1'", "superPotion": "',生命值翻倍'", - "moneyPocket": "',金币+500'" + "silverCoin": "',金币+500'" }, "useItemEffect": { "book": "core.ui.drawBook(0);", @@ -372,7 +372,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "earthquake": "(function () {\n\tvar indexes = [];\n\tfor (var index in core.status.thisMap.blocks) {\n\t\tvar block = core.status.thisMap.blocks[index];\n\t\tif (!block.disable && block.event.canBreak) {\n\t\t\tindexes.push(index);\n\t\t}\n\t}\n\tcore.removeBlockByIndexes(indexes);\n\tcore.drawMap(core.status.floorId, function () {\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t});\n})();", "pickaxe": "(function () {\n\tvar canBreak = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.block.disable) return false;\n\t\treturn block.block.event.canBreak;\n\t};\n\n\tvar success = false;\n\tvar pickaxeFourDirections = false; // 是否四方向破;如果是将其改成true\n\tif (pickaxeFourDirections) {\n\t\t// 四方向破\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (canBreak(nx, ny)) {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 仅破当前\n\t\tif (canBreak(core.nextX(), core.nextY())) {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.playSound('pickaxe.mp3');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\t// 无法使用\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", "icePickaxe": "(function () {\n\tcore.removeBlock(core.nextX(), core.nextY());\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();", - "snow": "(function () {\n\tvar success = false;\n\n\tvar snowFourDirections = false; // 是否四方向雪花;如果是将其改成true\n\tif (snowFourDirections) {\n\t\t// 四方向雪花\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (core.getBlockId(nx, ny) == 'lava') {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (core.getBlockId(core.nextX(), core.nextY()) == 'lava') {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", + "freezeBadge": "(function () {\n\tvar success = false;\n\n\tvar snowFourDirections = false; // 是否四方向雪花;如果是将其改成true\n\tif (snowFourDirections) {\n\t\t// 四方向雪花\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (core.getBlockId(nx, ny) == 'lava') {\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (core.getBlockId(core.nextX(), core.nextY()) == 'lava') {\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\n\tif (success) {\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\tcore.drawTip(\"当前无法使用\" + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n})();", "bigKey": "(function () {\n\tvar actions = core.searchBlock(\"yellowDoor\").map(function (block) {\n\t\treturn { \"type\": \"openDoor\", \"loc\": [block.x, block.y], \"async\": true };\n\t});\n\tactions.push({ \"type\": \"waitAsync\" });\n\tactions.push({ \"type\": \"tip\", \"text\": core.material.items[itemId].name + \"使用成功\" });\n\tcore.insertAction(actions);\n})();", "bomb": "(function () {\n\tvar canBomb = function (x, y) {\n\t\tvar block = core.getBlock(x, y);\n\t\tif (block == null || block.block.disable || block.block.event.cls.indexOf('enemy') != 0) return false;\n\t\tvar enemy = core.material.enemys[block.block.event.id];\n\t\treturn enemy && !enemy.notBomb;\n\t};\n\n\tvar bombList = []; // 炸掉的怪物坐标列表\n\tvar bombFourDirections = false; // 是否四方向可炸;如果是将其改成true。\n\tif (bombFourDirections) {\n\t\t// 四方向炸\n\t\tfor (var direction in core.utils.scan) {\n\t\t\tvar delta = core.utils.scan[direction];\n\t\t\tvar nx = core.getHeroLoc('x') + delta.x,\n\t\t\t\tny = core.getHeroLoc('y') + delta.y;\n\t\t\tif (canBomb(nx, ny)) {\n\t\t\t\tbombList.push([nx, ny]);\n\t\t\t\tcore.removeBlock(nx, ny);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 仅炸当前\n\t\tif (canBomb(core.nextX(), core.nextY())) {\n\t\t\tbombList.push([core.nextX(), core.nextY()]);\n\t\t\tcore.removeBlock(core.nextX(), core.nextY());\n\t\t}\n\t}\n\n\tif (bombList.length > 0) {\n\t\tcore.playSound('bomb.mp3');\n\t\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\t} else {\n\t\tcore.drawTip('当前无法使用' + core.material.items[itemId].name);\n\t\tcore.addItem(itemId, 1);\n\t\treturn;\n\t}\n\n\t// 炸弹后事件\n\t// 这是一个使用炸弹也能开门的例子\n\t/*\n\tif (core.status.floorId=='xxx' && core.terrainExists(x0,y0,'specialDoor') // 某个楼层,该机关门存在\n\t\t&& !core.enemyExists(x1,y1) && !core.enemyExists(x2,y2)) // 且守门的怪物都不存在\n\t{\n\t\tcore.insertAction([ // 插入事件\n\t\t\t{\"type\": \"openDoor\", \"loc\": [x0,y0]} // 开门\n\t\t])\n\t}\n\t*/\n})();", "centerFly": "core.playSound('centerFly.mp3');\ncore.clearMap('hero');\ncore.setHeroLoc('x', core.bigmap.width - 1 - core.getHeroLoc('x'));\ncore.setHeroLoc('y', core.bigmap.height - 1 - core.getHeroLoc('y'));\ncore.drawHero();\ncore.drawTip(core.material.items[itemId].name + '使用成功');", @@ -388,10 +388,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "bluePotion": "core.status.hero.hp += core.values.bluePotion", "greenPotion": "core.status.hero.hp += core.values.greenPotion", "yellowPotion": "core.status.hero.hp += core.values.yellowPotion", - "redJewel": "core.status.hero.atk += core.values.redJewel", - "blueJewel": "core.status.hero.def += core.values.blueJewel", - "greenJewel": "core.status.hero.mdef += core.values.greenJewel", - "yellowJewel": null, + "redGem": "core.status.hero.atk += core.values.redGem", + "blueGem": "core.status.hero.def += core.values.blueGem", + "greenGem": "core.status.hero.mdef += core.values.greenGem", + "yellowGem": null, "skill1": "// 二倍斩的flag:skill为1\nif (core.getFlag('skill', 0)==0) { // 判断当前是否已经开了技能\n\tif (core.getStatus('mana')>=5) { // 这里要写当前能否开技能的条件判断,比如魔力值至少要多少\n\t\tcore.setFlag('skill', 1); // 开技能1\n\t\tcore.setFlag('skillName', '二倍斩'); // 设置技能名\n\t}\n\telse {\n\t\tcore.drawTip(\"魔力不足,无法开启技能\");\n\t}\n}\nelse { // 关闭技能\n\tcore.setFlag('skill', 0); // 关闭技能状态\n\tcore.setFlag('skillName', '无');\n}" }, "canUseItemEffect": { @@ -404,7 +404,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "centerFly": "(function () {\n\tvar toX = core.bigmap.width - 1 - core.getHeroLoc('x'),\n\t\ttoY = core.bigmap.height - 1 - core.getHeroLoc('y');\n\tvar id = core.getBlockId(toX, toY);\n\treturn id == null;\n})();", "upFly": "(function () {\n\tvar floorId = core.status.floorId,\n\t\tindex = core.floorIds.indexOf(floorId);\n\tif (index < core.floorIds.length - 1) {\n\t\tvar toId = core.floorIds[index + 1],\n\t\t\ttoX = core.getHeroLoc('x'),\n\t\t\ttoY = core.getHeroLoc('y');\n\t\tvar mw = core.floors[toId].width,\n\t\t\tmh = core.floors[toId].height;\n\t\tif (toX >= 0 && toX < mw && toY >= 0 && toY < mh && core.getBlock(toX, toY, toId) == null) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n})();", "downFly": "(function () {\n\tvar floorId = core.status.floorId,\n\t\tindex = core.floorIds.indexOf(floorId);\n\tif (index > 0) {\n\t\tvar toId = core.floorIds[index - 1],\n\t\t\ttoX = core.getHeroLoc('x'),\n\t\t\ttoY = core.getHeroLoc('y');\n\t\tvar mw = core.floors[toId].width,\n\t\t\tmh = core.floors[toId].height;\n\t\tif (toX >= 0 && toX < mw && toY >= 0 && toY < mh && core.getBlock(toX, toY, toId) == null) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n})();", - "snow": "true", + "freezeBadge": "true", "bigKey": "(function () {\n\treturn core.searchBlock('yellowDoor').length > 0;\n})();", "poisonWine": "core.hasFlag('poison');", "weakWine": "core.hasFlag('weak');", @@ -416,15 +416,15 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "bluePotion": "true", "greenPotion": "true", "yellowPotion": "true", - "redJewel": "true", - "blueJewel": "true", - "greenJewel": "true", - "yellowJewel": "true", + "redGem": "true", + "blueGem": "true", + "greenGem": "true", + "yellowGem": "true", "skill1": "true" }, "equipCondition": {}, "useItemEvent": { - "yellowJewel": [ + "yellowGem": [ { "type": "choices", "choices": [ diff --git a/project/maps.js b/project/maps.js index c09ef345..7d297646 100644 --- a/project/maps.js +++ b/project/maps.js @@ -11,9 +11,9 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "9": {"cls":"terrains","id":"pinkShopLeft"}, "10": {"cls":"terrains","id":"pinkShopRight"}, "11": {"cls":"animates","id":"lavaNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 血网的伤害效果移动到 checkBlock 中处理\n\n\t// 如果要做一次性血网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})();","name":"血网"}, - "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行毒处理\n\tif (!core.hasItem('shoes')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [0] });\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"}, - "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行衰处理\n\tif (!core.hasItem('shoes')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [1] });\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"}, - "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行咒处理\n\tif (!core.hasItem('shoes')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [2] });\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"}, + "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行毒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [0] });\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"}, + "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行衰处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [1] });\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"}, + "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行咒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [2] });\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"}, "15": {"cls":"animates","id":"blueWater"}, "16": {"cls":"animates","id":"water"}, "20": {"cls":"autotile","id":"autotile"}, @@ -23,10 +23,10 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "24": {"cls":"items","id":"greenKey"}, "25": {"cls":"items","id":"steelKey"}, "26": {"cls":"items","id":"bigKey"}, - "27": {"cls":"items","id":"redJewel"}, - "28": {"cls":"items","id":"blueJewel"}, - "29": {"cls":"items","id":"greenJewel"}, - "30": {"cls":"items","id":"yellowJewel"}, + "27": {"cls":"items","id":"redGem"}, + "28": {"cls":"items","id":"blueGem"}, + "29": {"cls":"items","id":"greenGem"}, + "30": {"cls":"items","id":"yellowGem"}, "31": {"cls":"items","id":"redPotion"}, "32": {"cls":"items","id":"bluePotion"}, "33": {"cls":"items","id":"greenPotion"}, @@ -50,7 +50,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "51": {"cls":"items","id":"upFly"}, "52": {"cls":"items","id":"downFly"}, "53": {"cls":"items","id":"coin"}, - "54": {"cls":"items","id":"snow"}, + "54": {"cls":"items","id":"freezeBadge"}, "55": {"cls":"items","id":"cross"}, "56": {"cls":"items","id":"superPotion"}, "57": {"cls":"items","id":"earthquake"}, @@ -58,9 +58,9 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "59": {"cls":"items","id":"weakWine"}, "60": {"cls":"items","id":"curseWine"}, "61": {"cls":"items","id":"superWine"}, - "62": {"cls":"items","id":"knife"}, - "63": {"cls":"items","id":"moneyPocket"}, - "64": {"cls":"items","id":"shoes"}, + "62": {"cls":"items","id":"dagger"}, + "63": {"cls":"items","id":"silverCoin"}, + "64": {"cls":"items","id":"amulet"}, "65": {"cls":"items","id":"hammer"}, "68": {"cls":"items","id":"lifeWand"}, "69": {"cls":"items","id":"jumpShoes"}, @@ -90,22 +90,27 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "106": {"cls":"animates","id":"steelDoor3","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, "107": {"cls":"animates","id":"iceDoor","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, "108": {"cls":"animates","id":"iceDoor2","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, + "109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":[null,"door.mp3","door.mp3"]}, "121": {"cls":"npcs","id":"man"}, - "122": {"cls":"npcs","id":"woman"}, + "122": {"cls":"npcs","id":"trader"}, "123": {"cls":"npcs","id":"thief"}, "124": {"cls":"npcs","id":"fairy"}, - "125": {"cls":"npcs","id":"magician"}, - "126": {"cls":"npcs","id":"womanMagician"}, - "127": {"cls":"npcs","id":"oldMan"}, - "128": {"cls":"npcs","id":"child"}, - "129": {"cls":"npcs","id":"wood"}, - "130": {"cls":"npcs","id":"pinkShop"}, - "131": {"cls":"npcs","id":"blueShop"}, + "125": {"cls":"npcs","id":"wizard"}, + "126": {"cls":"npcs","id":"recluse"}, + "127": {"cls":"npcs","id":"king"}, + "128": {"cls":"npcs","id":"youngMan"}, + "129": {"cls":"npcs","id":"sign"}, + "130": {"cls":"npcs","id":"expShop"}, + "131": {"cls":"npcs","id":"moneyShop"}, "132": {"cls":"npcs","id":"princess"}, "133": {"cls":"npc48","id":"npc0","faceIds":{"down":"npc0","left":"npc1","right":"npc2","up":"npc3"}}, "134": {"cls":"npc48","id":"npc1","faceIds":{"down":"npc0","left":"npc1","right":"npc2","up":"npc3"}}, "135": {"cls":"npc48","id":"npc2","faceIds":{"down":"npc0","left":"npc1","right":"npc2","up":"npc3"}}, "136": {"cls":"npc48","id":"npc3","faceIds":{"down":"npc0","left":"npc1","right":"npc2","up":"npc3"}}, + "137": {"cls":"npcs","id":"greenMan"}, + "138": {"cls":"npcs","id":"blueTrader"}, + "139": {"cls":"npcs","id":"redMSNpc"}, + "140": {"cls":"npcs","id":"blackTrader"}, "151": {"cls":"autotile","id":"autotile1"}, "152": {"cls":"autotile","id":"autotile2"}, "153": {"cls":"autotile","id":"autotile3"}, @@ -135,8 +140,6 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "194": {"cls":"npcs","id":"dragonRight"}, "195": {"cls":"npcs","id":"dragonLeftBottom"}, "196": {"cls":"npcs","id":"dragonRightBottom"}, - "197": {"cls":"npcs","id":"man2"}, - "198": {"cls":"npcs","id":"woman2"}, "201": {"cls":"enemys","id":"greenSlime"}, "202": {"cls":"enemys","id":"redSlime"}, "203": {"cls":"enemys","id":"blackSlime"}, @@ -196,7 +199,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "257": {"cls":"enemys","id":"dragon"}, "258": {"cls":"enemys","id":"octopus"}, "259": {"cls":"enemys","id":"fairyEnemy"}, - "260": {"cls":"enemys","id":"greenKnight"}, + "260": {"cls":"enemys","id":"princessEnemy"}, "261": {"cls":"enemy48","id":"angel"}, "262": {"cls":"enemy48","id":"elemental"}, "263": {"cls":"enemy48","id":"steelGuard"}, @@ -206,21 +209,17 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "267": {"cls":"enemys","id":"grayRock"}, "268": {"cls":"enemys","id":"blueRock"}, "269": {"cls":"enemys","id":"skeletonLite"}, - "270": {"cls":"enemys","id":"blueSkeleton"}, + "270": {"cls":"enemys","id":"greenKnight"}, "271": {"cls":"enemys","id":"bowman"}, "272": {"cls":"enemys","id":"liteBowman"}, "273": {"cls":"enemys","id":"crismonZombie"}, "274": {"cls":"enemys","id":"frozenSkeleton"}, "275": {"cls":"enemys","id":"watcherSlime"}, "276": {"cls":"enemys","id":"mutantSlimeman"}, - "277": {"cls":"enemys","id":"goldBat"}, + "277": {"cls":"enemys","id":"frostBat"}, "278": {"cls":"enemys","id":"devilKnight"}, "279": {"cls":"enemys","id":"grayPriest"}, "280": {"cls":"enemys","id":"greenGT"}, - "281": {"cls":"enemys","id":"pinkSoldier"}, - "282": {"cls":"enemys","id":"pinkGhostSoldier"}, - "283": {"cls":"enemys","id":"greenSoldier"}, - "284": {"cls":"enemys","id":"greenGhostSoldier"}, "300": {"cls":"terrains","id":"ground"}, "301": {"cls":"terrains","id":"grass"}, "302": {"cls":"terrains","id":"grass2"}, diff --git a/project/materials/animates.png b/project/materials/animates.png index 774a7990301db6b08a75304b7581550a5cc141ab..e3b74ee96223657f806ec07f83bd5c633290fe56 100644 GIT binary patch literal 35375 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 literal 35354 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 m0OZ{_N&bBJ<>TRk#!iiC8h)F2@#og*bRv><-- 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 zⅅ?Tj7OH* zoa=oeznP_NJo6ULh#d2gm`t3Qj0K|SY~eZ%FY%a>b3Q}W4Ojchc8@cdFD%?8CoX1f z4}uyPWr2P{4fotOSWNXy*0uZm-h61Bs#hL!9yr1lB!>8263guhZG35)3=`I3f2+N*-AcnBpfA5L- zETVkRE2(WmoxsndA?NYI-)w-^gR_)wcNaq-?gwrMeG1hsrBogGyGN{n5c%tZnTA}x z_%er74zEZr)cozkgM*eJP9;v4O>8`lR1M~0ls86gp(fI31F3KcjEBRyR(|GTLfpyP9_HxSKY?QR(voW_fvs2fUA2x*%&9=pU`dj z&ap$UHo2W3D+i1}(w?vU>z2yBmOusJev~)DP{R6wRdZ&ex>FY5;?^3nON$m`MT>K@ zek9S`N7k9�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%0Dup25~} zSOZ$~ULD|mF zLVure%fP<}m<@&vD+|YPjS=_=L*xkOLpvMv@1`1GnVIzcySdq&oPx+^p%6=> z>=I&MpAbn0Hd9&ZRVZ@{ULpVpSeDl-~G-t|O%hlYE9y_O zBkFw#kO`sMtPzIt>T^}pb629t^j~nNzpSi!Sy=Pqx@ZEpI=hW}g}cJU_9wFV2^Geg z&@+fQ;^nI**+LZgYDcsyP{1*P5`tVO!=&Z09X8OJQA}Uu*o7JyS*4^g2MyX%q7aEa z+LO!cPDt3=&Ehn1<{?N+ena^Pi3IgAvc=Y66g5lKSYEh5ZuIZrbq}98xFxRF>X{Ji zF9xa(DzMF%+0U<-&iFgl=5vCgmlU`i6sq##mMhYXNfRJzg8^Wk8TS)!p-=raugMDa zT@KyIz zFe&S+vY0qrWwf17R6yMMNjEYp-YasxEAgJwOfA9M^_135oe54_fVA9|O5&@uSsEEq zDPS4`q~#WgR$W;FADjoJ6a)F3WpGx&v;;^48#e&d>vbtZ8l>7NnSUfe-2H`dAe1k- zx3{;kt$3pNE@Y@wDv4cHz)1nMT8-6eHD>{8wVJa4u81ghLrc!J?`e#XZ91GFz%-yv z!m8SoTK}Hr-G)*DCX3bUbs~;u5ujG9$ylJ*?;0b<@g$YshKO*LN(GHZL;e>~kDL0x zMry1>uM3DOA+Dk7HGgq32yXov69l&h0IL;>&04hal}ZKbkSC7Uw40K)#;ezf@1l;) zS_P}hlT2#k)v~5~8jXgrk5fvma;tUfoFhTdWIbK0NdlLz7Jo$aB{B7v-h=>?UI#G2l$>Qn z=0|5EKXRriVj4(Vj}-iAjo_>RoBQdQh8MVUXHi083{Z!iBmo3OUj)WqCUr0Q^}k9!tsh&N7Jp(F z0J4wyE`RCiaq~}gWp+|`hmM>71b?5A%0r9PGQdq0{M% zEm$1COFoc>-zw1hHh+*wtyDDL_szQi+k+=Pgc8*2(|U!8U;U9+6Z9d{h2NS7tX0>D zs?DUvtLIcN$+~6Cqs)|A#)xD1QS@puVEqpKC%M-+6M!nLG(2N;u$a zfhK3Y4b}3?6T2UPUuTq3r{QPy{ver<{Y>M;=rb?Ei)vR$Ss!NmYVp15PGtS$zK z#D4(WjRqCA2Aa<4!rJN=1}J0n-5+`#al@SLr@;Y0uU{x!DnJ)bzYVUA?u=03DbW;}lNuj)PF049KS_Sw0I>=Xg@2al zl8m53LAHQk;DR$-*2Yg_jj)VzW_}&I0jzTY5io)vz*evo8AAnGFtarzFVaYvNO#G2 z*GOFN#7{^0)&DlcPKH#$x0F7nTQ&#+1f3vKMz15S5>x{?@du;)E(VBn0X0~d5(`_V zWm>MbAx)Ri18)}oBm<1RL&TO*C4U7e{TkD{y{TRmHUo^qZ{koPCnHJgZLX^^w(mOB zsjA?P3u5E&+v;7bt|k3AnOP~iHIlUMGB0;s@XW#=CzI2&!zye;n=RnD3Z*M4&MUI; z+l&yqD5`$9ZA3PeF$tMvQS>PI6NkZ7`QoF|-Pdc?H6kiDxun?Jn-xdFpMQ9FcuSdR zq{-|ib*FgR{Kgm{+|L$SZCZ`nB)z`9&eGl(IST#}1*pNt7HN}$knK7bB^)(>qzkCz zOUkS8#4!_rdOqnomBWPN;2-e-QBdU7CfF=MDUH3(rC%O3|A+#zjN9Vo#Uz5>QS<-* Y^*P4Kf$F#e00000NkvXXt^-0~f;jUd&;S4c delta 72045 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

593-r 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 YzY|fV?SZ~t1ONa407*qoM6N<$f)wg7XaE2J delta 575 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 nNaqlOgtQwK1(;88?2V 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 diff --git a/project/materials/npcs.png b/project/materials/npcs.png index 9f02067ae1c84f9eac7ff558fee18607e2a96bde..9647d7d9d55d67330ab8ccc4554d1824c76e3990 100644 GIT binary patch literal 20746 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 z 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 J5i}g4{sT_{nUMeh literal 17272 zcmb4qXH-*N(DhA1sG&=5p((utq!}ReE=4*>kY$ zrCBJ_1q1>Dp}sudTHpWo{gHKZlC|!+XYQOid(Z57VRloGmYS0q003G8eQk@&D+&N0 zI7;%%Z%<_-UtL~60Tz0iK=las`sIMkQ^Q090P3(br>@Y;F_oXbT>t>kb^rGP_4$^e z0YHn^KwHBy*lFvDQCXlv(4_Zwrp_eFr=@V0Yl+ih8ro%ijErOQWGv26AFbAftSgeq zBrW|3Rd8DtH#-nNPyEjdYeH!o)=b3K%=UsMT*&2D7(P?u#&>;Ah00IA++M3rk|w7Y zl~)~o&M#U|a31QDjsXd~iN44cN1yG0$B$3K{xKZ&`Vek@Uz9QO5XJe=eTv-D#$xm5 zr0F9FeUBk`-hzc3I7a|46pX^P87#zi;nWsfhrl>3@+JO)V(h48j^42m6rV|L_jqzM zX=!9v0r+c+pZ7PvZp46agdnI(CRqESacISA4rtYLh(bPdgoBm5fd$8&^}_V?Dmw=q zV2acNA#|^PypLdbzkv9h13En1e!VkRj>&shoctD|qVWu*Ox`{xjm;#cC+tZN!N?Dguum}x@ z83;2|woD7-5htqw3ST&dZ8a@NQEA_N>u#CTDhM@8f`J|Z1LH)DHUE-l=4@%j3g!k4 zCZTqaUGzC9Tk?V$m|+O{H&Z?{$;}Co04jSWz`uOfm^&Qt5G}x*PcuITT{J=2m+Nx#S~@9I^mC5 zDMi~69BPBdoXi$o(v?Ht0#^;|zgLBHMMlAz6^HIp^C5=40XO@g=nLe&lah88g0%|X6yQQj&x7kB|!}Kp!^}0Qu9*=3X7RcbR zKdTJSEPf?dCQ#8jc_E6_ZS2wJs*z8!}I!S$;H@Wo-*m=z%cLh~q`x#2T zZqR3DN?wr>^|*m0nfPLb5s-f-T@Ry}_kxbvCOw21we@!v?6s`CdQ%+BD$4NM`Hf&S zuI~OovZ7(eqH`wlUPMc^F1g3b4oZJm`azapjoh!2J(HO-rGuIJ_9YoyeN2JQUTt)) z0LRWz_{b6WwpYs|$8sHy1^*O{?T1C3y?3cA`_g+}=IMbMKz*?E5K1?mW&Cw5N=+6Z z*v~uvHL1w$;yg%ql-C55RD9uVX^qnu05a!F{QFvVlIJ+l2yKBLijGRLY zsBRR-(B9R1i~2dODJy6=xT?|Rxu^Na%M*RJ_c6lGKUj2iwf(=Pilks;^$aaF$~gH3 zq@&DsBQjq~0x~7_^A7ha2b~6sSi@2TtjSkNVotS##qVOSbqIt(;eTk_QlEx+R=Sj$if|=ViuC%@~robhBm>Nlij2H z4CHrW1*}Md?$W)t5?pD9=Hy)o4)6rTXC1XD8O`(F6HdxgN!ULcDu_I4n@`G_xw>b; z33j>PUY>g)otuP1ix0hrfIjJ4{W~}8&kZ9LSPPcjeJmdc0rJ}tBrf2{Xs|N*AYWq| zg5e;t0Xqm~E|JJiPz@eS7nMU~)ALX8>6pc2m5@}AuIPnkR zMgC+oZwK@`z4C(k;@X6vATK+r-*;dRcRixoq?8@c>tXGuhH2p*F^xVk!Mu;}Q#vU~ zydCsh;B0@R=tmO8x@MGN;E8>w{;{VOC(-EPsViOIu_p1QcRhRzRp!k|xqdTi{bD%b z)CToikzcPlM!bTTGa!0r7AgHI!rM~1U^+BUW_}xD_a4$wZGLZbbQQ$_$-9rFz(d>O zL?elWwLU`w)RJ{N8ESTz1q5I1o6h2rX+eDB9wh^)(T!E*a4oXL)c`wh>q!WpD#fOn zNteo4mS)}alL0rqtV_=P>dM>pRU}4Sc|Yk5W`9M5lx_4=`<^JAcI*J;&V&|x$kR!i z+6UabTbri+tDGpS{p+t~^*TotFS(0NmSjwQ*k+3FOsPr~c|cBQY7cckx_5sn)`cB? z19d-dIYi<^Zumjt&l=ck%p(m>y#JCYZoc)AQE_n;cF(78Mz$q2z0&YyB=?H2x*fS3 zm2?Hhdc`losAlu@%|mVhM9x-~w!Hd*G=Gl~YkVgq#@a_Ta`QdTlH^3`@?nC<=h^dM zr=OvRkN!N|pJ>hAayMD-6)pCz(41`RM^&-#rC@Ac+fn(LF9~-#>C_vTeXU}7^ba}A zJk3A&_nxKjd`KgS!_nwN5fGdfQl}IR3VS-`3j8Ab#n8gJD?++*U;h61 z-^DkCBr?}>2m?Smret`l;-Zr;RX9F%ONtQwK><8}X6Z?9_UQ)hgkPR%#KzkzWblW( zz5(LqIfFf(Ui>cH>hgsk#HvA^z>XT=EUO6w(~%%sCe$y|>gimrrAJQO6f@PG7b?a4 z6uNx?m71IUU3YX6VhT%ga|o=74B3lL(^Y*0nQLivDr@ybVXo8oxQZ zd!1eEas{jXv50?C*Y;Ih$RM|Wr9df-D>}c2w9~E8#q_gRg2$%E`mlbevOQx!2BsJ5 z=vApOPmWvWD;Oc-?om``%rn#CoLJz@Y0^-LM+je7lDEpx{(1jf@ot5{A^9cg??XW- zIlq#dd0QCspr0!tI*dnuLbkBjlHqKz3yq_!?VI>T#<&txOaD31PEFOCCn=TCYif>S zk8Gn`WSQq#&bxq-xUMp2(L~Czz-RDt%Y6<{n)vsp_t?5+uNd*mIz;K5FVDG8+hp<4 zu7-D$^f;YH48F1`eRA}icgyTUhrJGNLZ9x~eKZ`l#%z;6Ded4{m4e7fXvZP*JWq$M zap{qw4My*o>G%JxuonpC{{WQqqkMq=TlHhDOQ1gdRHLaiWEiq|CGL|B5Ab%whQQ|S zT-o8`x-P8#E?``F-W+6o&wz?3zbz&! zQZ&eett?pM7H(^j8t4y^FEQ3C%9!2f4*_aDzboi+=v1@u+528h|Ghh$-Ar^qQ*40R zcR%(|fr3xRG@nce0s0~?!*2Hr|7;yK3oFvH8O?35{9SA#BwIk&^W`%NUu~?dp~@NvcO)gw+bmVUrqL&rOom${OVJM~lvK5JBe=m%B*usD zq%{_mex4u4>VHm(aVoak)<3DW#&A90trWC7Tblvmm{r}hG5+GT~5 zcZ;-=pWcQg1KjU1P}Eg6$wJ5TYh8YT0CZaLbk4KHm6CXx5KuiHFoa?7a9R^22EMW2)gODcsnh7H#PE?V%w> zA>A*!P%t!xyRY_+QJ+kp!B8XAo9@S5Fuye~ZD|Ue@ZszEcJsq4HBbhT_xo(c^=mmxhCXw=Qza`qI z8A2OBI2-li;UPctactOQepxUhQ)yI#pQ$GhC^(99c!3m7naN=cm;b5 zmOfY}elYAdHmK;Ysjd0RtnFTL7b%{cqbT=w;OK_|6J(v$T!dNQbC|2JWGxt{sgq?NT>4#%WpF*!5}Q)RDTXUYKqmfFWGW z8zgZpWBT3@mknvSuv1Hu^%G&&b;m-RA*>mbJ~5~CIX#ExImgHcBF9-)0?vO_zJuZ= z_lFs_?#ei`ce>Hf{opxKoB*9ZX{VqM4>E|uKiJG=R}X6yA^P1Lz{Y4~{{haO7`Tkd z1puNdmaix3Jsn(Y_s8OC!12CvR#BkmN*CqvUC!591z6zn@SRpNM4qxZkb2xtBbVf# z^%6tc0pmb`D+*q#$ZGF&S2p5V?;@!RWgGzXDqU-@@J)0&fB*6HcjKwYV;_(ymwteLX;?-^boEnd@RZ1|C(uJ+wk%l?b0X%CA$evNgm#Gah^7Ci3$ z+#d1dwHy-sGz8PP$Sv=wKtB|O;{ory;%g5qrg+i|Z#(#|m??2l@Of`Fi=zE4fs%|< z%Z-F2F9Kg4c@jx?gc*S21YWcR$LG_tzie4k`y6~(fMtT-4B0GU<{K zWCM)!3IgGIm($oC@3o{uVo%NKY!jS+%m%zKIphY?+&%~5Pv_-ot^arD`cv;A%ih9Nm@UV~>ZUF%T|!MNAZx_%=b~*6B z6AvHZsG})xjMSHgr_SPaStQv#0~BQ^u2QbA4q!F?Vo%?2p^pa;{dI(wJ95`L8L5YY zFf^D-upSswxV?^H0gN@LsqWC>R`d^csxna3qP2|i+!&uYYtmJKEP9h{w?P%8G!EJ* zXJF%)K9j9K;z-&uz}S*YlI-^~3YOFud2yZOB&=WY-4yGv;P=qV*%aHW@N=#eE! z!jbaPBBcpGXs>kDjWVloRS!x`a__DgUoUsd-f&ES~{62TzQjl_M*eT zxX=IfPI%5smeRvVbR3tol!KVn;t4s*Y2R6yJ1&XugaMZ>$_|7$v5=W4JO>Yy4N5nl z#Bj6PfGw4R6Bq-7FFT)3(ce_R*t?LagkA15fjGgXcN(Ktjv$dcGcR~yKuBlkC_Ard zz(P2OFnc(8!iaAM7Vg1QYvC-0>m6-yM<(&VX^pKDSQ;oJ_W#rf7M64W$hwxdTe@@A}r{`f{ISwRcnap{e8qsvZ9bs(TB!;&o--->z-1& znzmcwH^10Ue4}dDx}kKLy5VUIB@D==?bN><%IsJ(Ff0^6mxVLvBc*&CgMQv4Jy!q6 z9C^C07)hj;q_@^p+uJpL^5>RoGl6qt@zM)Gg%3<4xKhr(={A(GX>1Zxt_#ASjm&& z!}=<{vujey&%~EbDT$19wqcM`o~t4>dCB$zpavcW1mGs)eJdoJW%aoXrtz2RSUP`* z(t=<6`9GV8gMIb$t*I%BcHeL9>y0zS?Q=rpc_J;ae@+ugyhaakz4U$}Aliv_K5Oj= z5&=H-UlXjSw*dHHsDp6MYpu@8k6XfXcP`FrF8q(%BQLODu@~pBogI4b687!(ac!~= z=bGMNlv=;|K8N|Qu!E#0tIp@YuR5}`qdV_iX0#-+Y!`p{UiYK6H1@_;Be&mO9D{)l zPh}=d&ZUp{!!3mNjNL+c$zZD>1vSB}e;X+#tHq~K%q-P1Y3}%4WMobn(xfKxA71@K z+f_RuN3hJTh?k%$>bvt6US9n3vM#2i$E67@`0uOSCshO{%zrEFbv|mKF)^q!ComQY zr3K*bk>Ytv$yDR&xhqcF!h@1rliWk!Qe2ZJ+2<2X=+N@z%NIn{8 zOfsT#sqsI!`c#*rVmQX&GDJXu_od4zhDo+~z6{hZ4x!`_(MqlFS8v=YWd=^Bjmj@a z4|FW{#-_2*qD|d4KTO_{%#$Iz^aOTX`|)fYVb6$sD1Gh-*-H`}_Y{XvF#Kcb35mK|Y~0@ypk=Tp^chLxq$tM|v;B&JeTm`1uq8H3QhF zf=Lqk(tMBch^)t9(i?Gtm+8w$(EM=ZPF5C+plZMjQjBUO)46}D1~>Y6`+~H-uuI5X zeLQ(cUvr(=YxBloM|kK7TSqhUYmD00-a(StWXWa-aa--^-v?8^&!mI(k`J>p$giIJ zaN#kT(2LH!=Wa)Zgr(`nP8TeJH`TUFR=4v#@Es>R!@kmn=W9LmH~He9lSQ?WI$vFQ zaA4gc_s=exqjwLa&j-QmQJt%Mw&}Zm31~t_WM6((Z$o|M{BKhH?mIa%w0wR5n1MI( z;sBu=ZM0e=(IVrUd7AicTEv2ZMYDWwRf*iW#FY!owonJ`U^bRlvCGn)w$64vgK8aAE zcG^YAQ$t>8v4kdKm-lFb_em7Lk0=Tvl?v3}P5r#3E%CcF8`Sn2X>`uhCq@hZ(*Q0# z?c<9KKOW=qmB2D1*HpnM^8ASX-Sx$jy$iOG#jKGF=)uENNZb_QrAje)P1P#_%AV!|sNZ@VvIqZR!n_QNLR{%1K#<{L5}4J3bLt z7i}M_5vX|-?9)0B7{)IjCB{-;>TTy(A=+x&1`PumPiX;tjhVl?y`g2e0J{ii%Qa*+bbk^zhF1u2rI)Z75kuagfIoJCN6=|A?^Z&K=RT8D%oG z(_nu5B7!)K5CI)6tVXWn{pujv(tf_vriLx5V+CdqWgv#v;`m~6OkTH1w6V$1xh0*u z-4{ZmVUe(gq^Fl_SHZ)>wZQj}VB#Ri{D2L}g|j~O%3D^FE*N?@8(d z2Eh5A(j*)AWH)1vTj$7^8uub9l^c0uXjSb$+mnx-%w#w84h-eJuK9W}_A%FN4i zXUBW=Hwgui!J!*fSOvm9hpN6SS=6k0_sQ|bc3D96>XVIo3-^`2SO0JKuDqh}U7X&IywDS8ubJy;2bzJNfW0<&Oj63`Wq6w28xJOrWf6+u zO;mr~za~lfZo)+&f8=(rW7LUKQ1j)ss%w@VDwBKaa-wYz)yeUJMPIG7g3VxZPjFKkh$;;+14>7PSb)h?3f)Zuxls;Mb%4rS{$4u=vYEf-EW{6Edh4LHFtT5D5?|YtD8de9fAWShRVlWf z&`a}fDAN}+&xP($*gSqZ-@|Z+*8S)Wl}g9KUwWKOw-A0HMf|BH(|ddkDd&+;Nh{T2 z%Vc&paR!uK$VPsummNp`u*)7PVU+82_w&WM-HSafpHeiF8@-vEHlk^Sx&6_Ef!M0! z0LvN8)o)g6>4!HCx=yl!GPN+V0eo;DQZpOonZEbC0o!WuX4H1aQKZdlq2U+&IHD?~ zp-%`hntz=_#-dUvH15Yjq8?$WFts)Bon+FaQir_7>Y=4@FkOYlxYtYnI^(_7Nly_i zJm^ul_tU1gWQ+Cx&Vd7gUT=j@__kza(*~^-DrJu?Nb`$7-5JG8XUlKjJv)H}%fKX4KUvJIw6VU>m&H_DUVA-X` zmNrE^HS8GM60ZN_Ry(rF6&4z z+z|ap4RT4(DsCo=wn(_7FHIQ+B=T5mF8V2Je$F8aYkt!hAR5#_mHg@RU@*5sN(}dt+K!Qq!R8WogWexh1?aKz`Oy`y=8FwhP+4!}Hblh2=HrsM>w;KqSCpVgX< z-!U1T!Ft_qc8RBVr7oYq;=CuGjRx2ss$nDpYpNZ!AhCoR%;o*PkQcA+(^9Sr%X1U7 zP;zkN#~5;eBNmPfJGkdcsqWLer_2JB?#gld&5HaQFQDx+gLgZhZU+SC@$KhMW8nP( z^{y_ULS>Xnl>2Y>=Xwrae_@bq^r`o*e%Ed%5WMOU>$9&u4&vguj;)XSc}$dxOd9lP zmx>xt!gOO_%M60VfK&^#e1@t*zH?e9=NTe@s&~jA)elDGg#zRlXY7s|wI|@A>@uNa zF@6W-yO-wPX-?;t0}sF$TUIrGK%xAwk8s6Ut68DtLvqmSe{%sNuYgtOv{vU_fsH_) zgAcY1-t|)T*LUn{iimIgHir~|9gvyKuVAI!Vh(~yN;=_YXHwIRD^11{Kfao5eQM)a zfNn}!PZrhEaJgs9*M&#OQCdgVa7d_gEkJX^BseBlf8E?^D}WYVhoL=lQm*CT0QvRN z#V7ZnHg8;)&M1@rzLa+WRqgBQ8qI&|8ZAFdVX_aoTU6N8lDa{gcrbnxh*u2M0<~>(%;eSKgcDWG z>os4)+j7Rhz($&T)c!{?b#S5Bw>=du(@Q3bY`#wKVWik5>VUvdg#0f_-V zT9j_^7Yr{jNMyu}HGU!@D_z?eM%mNelNIgehLaak1R4idu6d}n<}fT_SOLey4BCka zkRYg^)0q~;xqaQ!YEh9W2?!MFyIR7D;YLi_w;Rh#pY96i{V?pf_x?F7F4lhe0TfmA zq!|{<4+rT-5vCaDLqq_ZZ}bVe?T#zBXy1%rT+vhNJL$OC=8iI&(Wg9c54wgzziydSs-gsOMFt` z@{$OU+NvknEje&ad#)%l9fF`D8LooQh8fBzKXd+Aj56Yt(V|h&s03H-)_{{uV&7Mb z$3@12+TNBa3H%5iK!-Q6Z;->iRJEWOs0mOQevOnIyyF^0UOw&O#X@_F6`UPyT;nwCxr{%Ind>(D?8!+i4~ zL|)CV6V+0mQnGJ(~T`HOHPd4w9RKez|=Ta<7XH_&Y+vBP8 zv#ii>Pd_mZ8?#E#CvS4AF3OW0t1>s|$G>bG84KVYEC2(46%N_Q!=ym6EEp$e+Ug3SX)BtKQr;of_vhPK2G{vB#KT>A4(^N>s?;sME3 z(b&=~?@eqvehQ$6x@IzEI+AGw{?>nFpUy5k_mRL)25f(<9z`CHHv~!Mr>CzbCi8&^ z2+I?6o|mBq#@p&nZ1}#KQ>f`Ou>RiK&_l#a76|l8A=K9~rw8QTY%H^PkG9l=Sl=qP zQA5;F0V>|~!u7!ZAa-rLS3N{KKF4xX#5tg3uaYF8`)`miI_KV?^QtzSY;F(V8(4D+ z10FDC8TDtDPM2t7PyZhEF?hYXQ^UjvI2DZYTyO$T7B6!P?w%eFVzb$<;>yAHh;=K? zA3X!sZ}fx8-_Bfjm?2K_zSG_`Td(oSM#a8avaK|vq znFI_er%9o4Vswj&S*c=N(j&;Qd-5|`g42W-Bk=(@jWLyNg9LI*7rYa7IP?S37nF9l6& z1w%1j8&yqmCZO7^9SI<;d4(Scqn@L|7>dkZW>n0mqNtBeQ$f-+fSoFWtmWfT(biX4 zqjLOWI`{>Rj4f15rF2P;jo;zvHV4>_VGz*%)EJCxP);>R{V2xQ%0M)A&##h+0SOkU zXIbB(K&b={&sYF{oVjaH*sche-X_&&YERPdo-A?WS}$rDjzJ^#<$J@p3isbimDDEWT4Z=*7HS zn|NuWNNzbA`qIr87W~qwYWk5I3R?Al`%`@kW?OBdrc>i_KbH;@v>;FszTNU~+;&^L zYBlUbRpUsG^7bF%(U{YYl)F33i^px?_QmSjEJ}N72VwKrApyJe0GN)+Oaad<+ATKh zRVl;6x}2!d%iGsS&^RZsb90CVhoSo=$+*evwPeyD#itEr6XiI3K19DGiySabv8M1kq`|+Opha1NIox^sdM&T) z0y|5df4Pt_j4{&QyO0GS>u4f-t_<(SIO#k9*gJ$XLF(OYGB62x^p!G8uu%#xNsGx9 z3uXdBolRm@iO+?)c%cj!7*CUS*#O_L+F|CA6I9IA4}#JtoB~x11!Q%zP$zkytPcEu za_XNzi^LNLRoB3Wc6yD2R$6dzORlN%ep-ytwQ1@I@f{nOmz9e)-CBw&8HV?=YOt14 z6&RiI=BO*07ut4Hra~Wk>LrN-T3@?h!81*mcbDS_$5=EV6)VzE;yRnUPY&EGG8)ZR z*8j&yQ){BXAB-8Z5M@Up*&%ajnrHas++e)>tnnl3rc zhqo-f!;mfxm+3mz#9t0_;qV!&Rb=*gSl}v*oq+k^(`fWCQ3s>bJ-pkTQcO_KU(djM)I`5cH_;Kg{wI z>65S@8&1krAok@mR(f>%c2sH8Dl4-IP)rnFS098}ZF@>@zXQb~8LqR>{xPng^xy4y zX;1TB^y^<97!4eYSWWZ#-*JmRjhl4rdK#I<49e5kdZ_K@=fnFFR9 zeD&^jDht#Yk%KY6#Lth~n8=ZOR}W@DV@%)6%{cWp9PPIElxm_}8PLW1B3?Zay(boI zSXztcv_Sr$?0GRu`Wwu06zqs&+kuLOhY>t~-_5&@O_u*oRMY%;SD8S;Y6iK{wMucd z#Av40{yh${yS#B?rca+(@eB#qY`!gDbMx1NT&K4+sF(tA@E8N7JJx`_SaBzUtPyIR z9xOMMj`LkfK#sb#tw1fW(x7_#y%NZ~SRjq1*TKL5**<0!!#MllIAfw(KZe(*f?X;^58*sW8;{*rYwrh(F8eFK) ziur`dFM@mp5f<7A{P$%Yh9F4cZ&2$8kF6e0P#oGvg1z4Fdp9IQX-LMDMlT+^97rR6 zV-UjrHRW*GP^LKY3%Dli3$JI%lo!2a8x{z5_#^)=({pIK3dP%ZI|}U{K;W`pd2n0H zYpB664;oGJkyY%KOx@iY%dVH*o99tF8u(9k48;ex9sc;*jxI(q{Gwq|r9J?g{X4fx zx@(1^fk;y6z>C818@ybCK&A4Oj29HM5g`rL18{IJE-8M%iI1;`zy1gm{yCKLLT~Lm~rhYbe@!_3$|Vwh2w2K|D!&3frvWj4SNx~x4cei zmDgWBkRnj;j3Q_c-~(6{EUlfshGwu}cKG^tPzFG5d^_%@y#hwe>guuvL#``+%0$F5L?~QzlgG|C+1z@`t78WTv#ZDz;5>>MFif(jt zuKS1*Ap5OP+Ms`D$+F|+yG(-x-CFY5#~1o?@V&0sVse`tS>l!^={OwN(0LU_Hfwqf z+5(ns>J||>=c-*)$xeVSz5@&|uC;`7N@Mi^?Y+cIXKW z+|$JE0a8xEAM_rS+VZ=}0)3w7uk7i!Gx!iVBF3?`NPy$JHBhU`^kLe5SrIhqgM5u0 z$jZC{x`eSq>_pMn%=7Bt8V9uF ze$u;jyTgF~HlBTm`j8#2fqJ9IF$cvo1vtp6(EwrUkhYAS4nGU z;@FZYcW*m~h-a&wxHurAPc9&{&-VWPUKd{&q2hkrT^3=%8V&}Plq;lJY^3k6;t{cw z+e{ARwVRb~Fa}#uiNYFI)c4Ph-xAP?S;DZ@L>OT(4)ZW-Uh3w-l08kXRX^vo#H?RS zA~}qUexPR3;E-2MScM{Of-&>0htVGN&wh=^h49?|Hqj*FHt>~IGlL{onf7`Kj45>u zG*2puC$FpBbWjnN5E?&x`$5H*|KfAkbID~30`%JMM;h99g3 zyY_tM1Wy{qvta$TWBq$SImKBrHDsM#=fEc=HyeKwx%>3#(`LPZ;SyHLup2HAOlhfS zqt$PDU9?;qd33Kf{%df=B*OI1sR3AwA($9?UU?`ulVidCRF4fvITU0FC2T`cY0h_0H6ZClk`#bQYi3V2$e)Rw z6qqy0vw4C^&}en45i6`Zlnbz3mI$v$e7Pas}rzD~fv&I=zOvcG75#G`LqGdbRwIgnJdBO_Odc zVZRm@;Q9TBDo-*PlU@mC$S5$5zYV$)pnvsV@Lwn(U0sqr`LP3Li&)o@7#PZ#U~%ub z0t`LEe5Webw6hFLowNi7*XpF7FGVOeTtUC)>p;MO<|WXJ|ZVmYncjrjQy#))^3s z2euqakU5hch9$y0B_lV%`6MdZZ{5UDnzZ%2ikh)I#iPGX@o%fTyw71kCIw@HvDDb+ zI=FD^#0t<2D_E|9yF|}te@lJAou%RY>KzMEbuG?6ZsqJMfRsivi-nuBT{-Q02W4~`wq}!B$aYb+ zFD-|A87WPbcxj_^IpSAk_+VH46}z+GCTeY5nDCAtfGla69v13^?Ql}sQNY|$P~dNm zAf#l`Do1Jd{?jJjJhiW(JJ!Owh{E!2pRqgo5L|gT493^zXtYgG8}-I;U*R88Pw*$ zOJWTKx99>FrUqYsw?i_Qnx+M2*lg|WlH%?Eib3S)riYYYg2rWx811@rL1qte*T9!; zO%DX_4S=d(wI6#V{xz74h2DmLdRHwObmVwHCRROu1)H=8re5yfYy2fHeeN6rjJEJn z#3~v&T#_b~I7D}#12p<4%3O9@EK&vH0g*9`Sht?Yl*k+S!b|hk8ssA=_ort0vxD}Y zms+dRS5(uW%M#`a1Wj*d)xw66D71Pmc}S5^STM=p9`sDWrG9@q#hJWNXMHU%&O8jU zlL3K)Z@DEt9K7&h~bEmJQ9L! z*3)7I`>p98z%oW46VZyIf!K;ZUfNAz3R|aSo@ricebQ!}(+rb#Bjf8QP}~@Gf9WHY ziy}JCHSow@uZ~*riz35)s)X(BEnWBw5ar1C`{h_d>H4?7MMyD=o<{rL#R4 zULLW4Tz{cA9OJcfxfr0W2gZlLsy6JhZoB9Fp!rLQuBxcn1K)*W zC@uO@Xb}0R`1wSp5pL?Zf7@lg-K*Z>hCA{vS=xK`ChXAucOb=L6sO_znNwh!DuUwewemnQ*BBo5N9RVbu zH3k^7HyfE!*FP2`=QA`+Bbu+hUjoTdS$nMohO-`0Kl+WQHR$?wQjRrf_R07IotZF_72@_&2`?O{99 z=;1V1x9^Opyo_D;SF_>{0kemg6*9X&UDoUkp1r}ez>a>^8y3!rxu@(p7t<= zxBwe6T_AT=T^iHA{Bf!zKb#bRF59Ncw6pt!kRLyJV`k(IHOoGX4OSGljmebPeFn_$sm{RvKb&D^I{w{FO0HKAVwIS;@?W# z?XA|d8=sDMm8AE2(f=~wex+kkD54E{Mc8)S;C0w#B9zV)j5`$FOU$)ed~;Y5Fa8{u z7mcF!dYoYc>IV~4S^+046w?V*S?Gm zQ(l@eUX0xwt>(|(J$C{uJG1b+x+InRw#Tc7H~?I{O(0p6CFtj z*o)rj48M2j8T0hCpsgfA85h@k3>rm#nnIi!W-k3;X?Q~+8kCy{JNg8m9K2d4vtEg{ z%oW^r(u3C}h#h?bVV;Em+RxmvB?%HoB>|%=*IG+|x8!m!2d2Aj*=f(yPxLrQHa{r0 zR^aovDXx18 zTE+2Ma=?60tJsfnSiRzmk^lsy!?=$O?ff3iIgC<}dSWI1@tM;vWNn$})5pCa$&<&5 zfK*4uOLf{Z6<2wP5YhaIyA$}Z_=5{m_Nxu#_t{F)FjiF=?vL|tAnHq(rV)hUk|cj` zhpm+HtUX;{ej7Hmu}Q0q^CutA{sCUQU6=M*vgW8yA~@*|_PXYVve6b-RaE|502)IV zGRRy?*~aTuWq=PO^sYF4pxkmusPj+Wo83J3>pCs*Kfcm9aj0pYf8*llzr_fci{B^Qwtay9V&Qk(mMB5ooW*NP zZ`?Qzi2*hjo^D$GR7Fd}`MV~!?uCW&|Isizkb>`&+ADXtRrast!vm;ZyB~(94Z*0q zg)-G?F{*9zx4)nP`=%_l+MdYI$$iX7!sqi znWIn5pFKeYkO3T)x4na+7;gJWo8~LIK86VLI8jS$8~%L~{*moKVMpPDHp+$%G+U5N zcy6a)1j;;_J@dI18oqxT5wdfls`!A_&r=Ll|7HP(A^+m1Fl3EcTAcI$fqx1*ilp`) zT7&-hbN2t+zTp!8+qUl@(!0Tua}RNhtQ2!WIQF7CApPvJ_jZ0b`98RIZuiIo_KK{X=8M&^g9=f4Tf9zNfF9Gtg0b!_lCDA!I0Zszo zMKqbooj0dOv$*mEBh`$q*@EDSSplO+G0LCrV;EHy7i9}70;peeX1{+{2!dmwoW6qq zI`($snbqxCaC;$io4**z)&WuV@u8^WJ^0-lNg!Kz+2IPvnJKk(GyQN|`7c6Pm z7#f*=Dtrz7d)5b;OeOlwHF*jfe6P0L!YV=zD7jLmQfQH4;o{ZQ@e&!7AX*d+l3ca{ zcLrH5`(Ad@1l#s~iq-PY7rrQ0ul;yqd++KJ%hksI2mcdI0`}=R7 zZ)LO}d&{3TKO6ncZ~pd)9^d`$?{6ObIfAo`vNJqDGTA`Qcm@N<&^bc^nB{>8@aXsu z5N3Kn%0@?^=cR*)4MSKEAsij=@jx_p_IQsDcQZX;-HTNHycvKj!qK=^1@N9Ed2fQe zENCIv0@}?{@?J%GlO*SY=9{IWght2l zomDCvU~x9IG7jn6L$6@#t$t!?or*Q9mPjMsVu>=Zqa z(t=^2)WMRkZHpr-%CalQN1i}BRurikKNN(K0JM6-stQ#WG;NPtvEL&6NC1Xs{-`W@ z>wcN3tK}z3z!}-C;IB V2.7 接档说明: 5. 使用VSCode分别打开接档后的V2.7和纯净的V2.7的【project/items.js】,并执行以下操作: - 将三色钥匙的cls从"keys"改成"tools",并新增 "hideInToolbox": true - 如下道具的【useItemEffect】和【canUseItemEffect】有所改变,请直接从纯净的V2.7覆盖到你要接档的V2.7: - - earthquake, pickaxe, icePickaxe, snow, bigKey, bomb, upFly, downFly + - earthquake, pickaxe, icePickaxe, freezeBadge, bigKey, bomb, upFly, downFly - 如果确认你的塔不会使用该道具,可忽略 - 黄宝石和生命魔杖增加了【useItemEvent】;如需使用请进行复制 @@ -49,7 +49,7 @@ V2.6.6 -> V2.7 接档说明: - 找到【terrains】中的三色墙和六色门,删除对应的这几行 - yellowWall, blueWall, whiteWall, yellowDoor, blueDoor, redDoor, greenDoor, specialDoor, steelDoor - (在V2.7中,terrains不再保留门的引用,门效果仅由animates决定) - - 将【terrains】中的 blueShop-left, blueShop-right, pinkShop-left, pinkShop-right 分别重命名为 + - 将【terrains】中的 moneyShop-left, moneyShop-right, expShop-left, expShop-right 分别重命名为 blueShopLeft, blueShopRight, pinkShopLeft, pinkShopRight 7. 使用VSCode分别打开接档后的V2.7和纯净的V2.7的【project/maps.js】,并执行以下操作: @@ -87,5 +87,6 @@ V2.6.6 -> V2.7 接档说明: - 「重启当前事件」已经被删除并且无法在游戏中使用。请替换成等价的循环处理或者插入事件 - 在V2.7中,所有的experience全部改名exp;请检查所有对经验值进行操作的地方 - +其他: +Jewel改名Gem From 54e5ec83054317f027f531e6c87cd4cd02912afd Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Mon, 18 May 2020 23:31:05 +0800 Subject: [PATCH 07/49] repluse->repulse --- _docs/element.md | 2 +- _docs/personalization.md | 4 ++-- libs/control.js | 8 ++++---- project/functions.js | 10 +++++----- v2.x-final更新.txt | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/_docs/element.md b/_docs/element.md index 2b10effc..099a9fca 100644 --- a/_docs/element.md +++ b/_docs/element.md @@ -139,7 +139,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数 领域怪还可以设置`range`选项代表该领域怪的范围,不写则默认为1。
**将 `flags.no_zone` 设置为 `true` 可以免疫领域效果。**
阻击怪同样需要设置value,代表阻击伤害的数值。如果勇士生命值扣减到0,则直接死亡触发lose事件。 -
**将`flags.no_repluse`设置为true可以免疫阻击效果(包括伤害和移动!)。**
+
**将`flags.no_repulse`设置为true可以免疫阻击效果(包括伤害和移动!)。**
!> 阻击怪后退的地点不能有任何事件存在,即使是已经被禁用的红绿事件或重生怪!(会导致此事件意外被重新启用)
激光怪同样需要设置value,代表激光伤害的数值。
请注意如果吸血、领域、阻击、生命光环中任何两个同时存在,则 `value` 会冲突。**因此请勿将吸血、领域、阻击或激光放置在同一个怪物身上。退化和攻防光环同理!
** diff --git a/_docs/personalization.md b/_docs/personalization.md index 82fbccaf..ac7ff766 100644 --- a/_docs/personalization.md +++ b/_docs/personalization.md @@ -308,7 +308,7 @@ function (enemy, hero_hp, hero_atk, hero_def, hero_mdef, x, y, floorId) { [ // 写在获得道具后事件 // 设置不同的flag可以分别无视对应的阻激夹域效果 {"type": "setValue", "name": "flag:no_zone", "value": "true"}, // 免疫领域 - {"type": "setValue", "name": "flag:no_repluse", "value": "true"}, // 免疫阻击 + {"type": "setValue", "name": "flag:no_repulse", "value": "true"}, // 免疫阻击 {"type": "setValue", "name": "flag:no_laser", "value": "true"}, // 免疫激光 {"type": "setValue", "name": "flag:no_betweenAttack", "value": "true"}, // 免疫夹击 {"type": "setValue", "name": "flag:no_ambush", "value": "true"}, // 免疫捕捉 @@ -666,7 +666,7 @@ if (core.flags.statusBarItems.indexOf('enableSkill')>=0) { - **`flag:hard`**: 当前的难度标志;此flag变量在setInitData中被定义,可以直接取用来判定当前难度分歧。上传成绩时将根据此flag来对不同难度进行排序。 - **`flag:posion`**, **`flag:weak`**, **`flag:curse`**: 中毒、衰弱、诅咒状态。 -- **`flag:no_zone`**, **`flag:no_repluse`**, **`flag:no_laser`**, **`flag:no_betweenAttack`**: 是否分别免疫领域、阻击、激光、夹击效果。 +- **`flag:no_zone`**, **`flag:no_repulse`**, **`flag:no_laser`**, **`flag:no_betweenAttack`**: 是否分别免疫领域、阻击、激光、夹击效果。 - **`flag:hatred`**: 当前的仇恨数值。 - **`flag:commonTimes`**: 全局商店共用次数时的访问次数。 - **`flag:input`**: 接受用户输入的事件后,存放用户输入的结果。 diff --git a/libs/control.js b/libs/control.js index 5590d0b7..502d2f32 100644 --- a/libs/control.js +++ b/libs/control.js @@ -984,7 +984,7 @@ control.prototype.checkBlock = function () { core.updateStatusBar(); } } - this._checkBlock_repluse(core.status.checkBlock.repluse[loc]); + this._checkBlock_repulse(core.status.checkBlock.repulse[loc]); this._checkBlock_ambush(core.status.checkBlock.ambush[loc]); } @@ -998,10 +998,10 @@ control.prototype._checkBlock_disableQuickShop = function () { } ////// 阻击 ////// -control.prototype._checkBlock_repluse = function (repluse) { - if (!repluse || repluse.length == 0) return; +control.prototype._checkBlock_repulse = function (repulse) { + if (!repulse || repulse.length == 0) return; var actions = []; - repluse.forEach(function (t) { + repulse.forEach(function (t) { actions.push({"type": "move", "loc": [t[0],t[1]], "steps": [t[3]], "time": 250, "keep": true, "async": true}); }); actions.push({"type": "waitAsync"}); diff --git a/project/functions.js b/project/functions.js index 4a4dd7d0..da5802df 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1051,7 +1051,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var damage = {}, // 每个点的伤害值 type = {}, // 每个点的伤害类型 - repluse = {}, // 每个点的阻击怪信息 + repulse = {}, // 每个点的阻击怪信息 ambush = {}; // 每个点的捕捉信息 // 计算血网和领域、阻击、激光的伤害,计算捕捉信息 @@ -1096,8 +1096,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } // 阻击 - // 如果要防止阻击伤害,可以直接简单的将 flag:no_repluse 设为true - if (enemy && core.hasSpecial(enemy.special, 18) && !core.hasFlag('no_repluse')) { + // 如果要防止阻击伤害,可以直接简单的将 flag:no_repulse 设为true + if (enemy && core.hasSpecial(enemy.special, 18) && !core.hasFlag('no_repulse')) { for (var dir in core.utils.scan) { var nx = x + core.utils.scan[dir].x, ny = y + core.utils.scan[dir].y, @@ -1112,7 +1112,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var rnx = x + core.utils.scan[rdir].x, rny = y + core.utils.scan[rdir].y; if (rnx >= 0 && rnx < width && rny >= 0 && rny < height && core.getBlock(rnx, rny, floorId) == null) { - repluse[currloc] = (repluse[currloc] || []).concat([ + repulse[currloc] = (repulse[currloc] || []).concat([ [x, y, id, rdir] ]); } @@ -1207,7 +1207,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.status.checkBlock = { damage: damage, type: type, - repluse: repluse, + repulse: repulse, ambush: ambush, cache: {} // clear cache }; diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 0e601735..540ae267 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -62,7 +62,7 @@ ------------- -(不处理) 0. 部分文案的修改,如“地图编辑器”(启动服务.exe中)、“enemys”、“repluse” +(不处理) 0. 部分文案的修改,如“地图编辑器”(启动服务.exe中)、“enemys”、“repulse” (造塔工具相关都给鹿神) 1. 便捷PS工具希望加入自定义单位宽高功能,希望把“白底转透明”增强为“纯色底转透明”(弹窗由作者输入RGB或RGBA值)。 (已修复) 2. 请求修复(如果还没修复)新建单张空白地图无法自定义宽高的bug (文档相关给秋橙) 3. 希望给M键“追加素材”功能写个更详细的说明,在线文档中没有所以离线文档中也没写成 From 47b083e3a5fd8e32c434b0cf4887b233a0f05273 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 10:09:08 +0800 Subject: [PATCH 08/49] =?UTF-8?q?=E6=94=AF=E6=8C=8132x48=E7=9A=84=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/events.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libs/events.js b/libs/events.js index b7601032..9add168b 100644 --- a/libs/events.js +++ b/libs/events.js @@ -441,7 +441,7 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { } // 是否存在门或暗墙 - if (core.material.icons.animates[id] == null) { + if (core.material.icons.animates[id] == null && core.material.icons.npc48[id] == null) { return clearAndReturn(); } @@ -475,17 +475,23 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { } events.prototype._openDoor_animate = function (id, x, y, callback) { - var door = core.material.icons.animates[id]; + var blockInfo = core.getBlockInfo(id); + var image = blockInfo.image, posX = blockInfo.posX, posY = blockInfo.posY, height = blockInfo.height; + var speed = 40; var locked = core.status.lockControl; core.lockControl(); core.status.replay.animate = true; core.removeBlock(x, y); - core.drawImage('event', core.material.images.animates, 0, 32 * door, 32, 32, 32 * x, 32 * y, 32, 32); + core.drawImage('event', image, 0, posY * height + height - 32, 32, 32, x * 32, y * 32, 32, 32); + if (height > 32) + core.drawImage('event2', image, 0, posY * height, 32, height - 32, x * 32, y * 32 + 32 - height, 32, height - 32); var state = 0; var animate = window.setInterval(function () { core.clearMap('event', 32 * x, 32 * y, 32, 32); + if (height > 32) + core.clearMap('event2', x * 32, y * 32 + 32 - height, 32, height - 32) state++; if (state == 4) { clearInterval(animate); @@ -496,7 +502,9 @@ events.prototype._openDoor_animate = function (id, x, y, callback) { if (callback) callback(); return; } - core.drawImage('event', core.material.images.animates, 32 * state, 32 * door, 32, 32, 32 * x, 32 * y, 32, 32); + core.drawImage('event', image, 32 * state, posY * height + height - 32, 32, 32, x * 32, y * 32, 32, 32); + if (height > 32) + core.drawImage('event2', image, 32 * state, posY * height, 32, height - 32, x * 32, y * 32 + 32 - height, 32, height - 32); }, core.status.replay.speed == 24 ? 1 : speed / Math.max(core.status.replay.speed, 1)); core.animateFrame.asyncId[animate] = true; } From c2f8c37983935c11752e6a10ec9659997d8d7f3a Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 12:58:31 +0800 Subject: [PATCH 09/49] =?UTF-8?q?=E9=9A=BE=E5=BA=A6=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=88=86=E6=AD=A7=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 41 ++++++++++++- _server/MotaActionParse.js | 9 +++ _server/editor_blockly.js | 5 ++ _server/table/data.comment.js | 19 +------ editor-mobile.html | 1 + editor.html | 1 + libs/control.js | 4 -- libs/core.js | 1 - libs/events.js | 17 ++++++ libs/maps.js | 2 +- libs/ui.js | 2 +- main.js | 12 ++-- project/data.js | 101 +++++++++------------------------ project/functions.js | 1 + project/materials/animates.png | Bin 35375 -> 35445 bytes runtime.d.ts | 1 - v2.x-final更新.txt | 4 +- 17 files changed, 112 insertions(+), 109 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index cbb5b2bf..ca76409d 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -322,6 +322,43 @@ var code = '[\n'+action_0+']\n'; return code; */; +// levelChoose 事件编辑器入口之一 +levelChoose_m + : '难度分歧' BGNL? levelChooseList+ BEND + + +/* levelChoose_m +tooltip : 难度分歧 +helpUrl : https://h5mota.com/games/template/_docs/#/event +var code = '[\n'+levelChooseList_0+']\n'; +return code; +*/; + +levelChooseList + : levelChooseChoice + | levelChooseEmpty; + +levelChooseEmpty + : Newline + +/* levelChooseEmpty +var code = ' \n'; +return code; +*/; + +levelChooseChoice + : '难度分歧项' '名称' EvalString '简写' EvalString '变量:hard值' Int '颜色' ColorString? Colour BGNL Newline action+ BEND + +/* levelChooseChoice +tooltip : 难度分歧项 +helpUrl : https://h5mota.com/games/template/_docs/#/event +default : ['简单','Easy',1,''] +ColorString_0 = ColorString_0 ? (', "color": [' + ColorString_0 + ']') : ''; +var code = '{"title": "'+EvalString_0+'", "name": "'+EvalString_1+'", "hard": '+Int_0+ColorString_0+', "action": [\n'+action_0+']},\n'; +return code; +*/; + + //为了避免关键字冲突,全部加了_s //动作 action @@ -2808,8 +2845,8 @@ Floor_Meta_List /*Floor_Meta_List ['title','name','canFlyTo', 'canUseQuickShop', 'cannotViewMap', 'cannotMoveDirectly', 'defaultGround', 'images', 'item_ratio', 'upFloor', 'downFloor', 'bgm', 'color', 'weather', 'underGround']*/; Global_Attribute_List - : '全局字体'|'横屏左侧状态栏背景'|'竖屏上方状态栏背景'|'竖屏下方道具栏背景'|'边框颜色'|'状态栏文字色'|'难度显示文字色'|'楼层转换背景'|'楼层转换文字色'|'装备列表' - /*Global_Attribute_List ['font','statusLeftBackground','statusTopBackground', 'toolsBackground', 'borderColor', 'statusBarColor', 'hardLabelColor', 'floorChangingBackground', 'floorChangingTextColor', 'equipName']*/; + : '全局字体'|'横屏左侧状态栏背景'|'竖屏上方状态栏背景'|'竖屏下方道具栏背景'|'边框颜色'|'状态栏文字色'|'楼层转换背景'|'楼层转换文字色'|'装备列表' + /*Global_Attribute_List ['font','statusLeftBackground','statusTopBackground', 'toolsBackground', 'borderColor', 'statusBarColor', 'floorChangingBackground', 'floorChangingTextColor', 'equipName']*/; Global_Value_List : '血网伤害'|'中毒伤害'|'衰弱效果'|'红宝石效果'|'蓝宝石效果'|'绿宝石效果'|'红血瓶效果'|'蓝血瓶效果'|'黄血瓶效果'|'绿血瓶效果'|'破甲比例'|'反击比例'|'净化比例'|'仇恨增加值'|'动画时间' diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 72108439..5654bd52 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -49,6 +49,15 @@ ActionParser.prototype.parse = function (obj,type) { } return MotaActionBlocks['level_m'].xmlText([text_choices]); + case 'levelChoose': + if(!obj) obj=[]; + var text_choices = null; + for(var ii=obj.length-1,choice;choice=obj[ii];ii--) { + text_choices=MotaActionBlocks['levelChooseChoice'].xmlText([ + choice.title, choice.name, choice.hard||0, choice.color, 'rgba('+choice.color+')', this.parseList(choice.action), text_choices]); + } + return MotaActionBlocks['levelChoose_m'].xmlText([text_choices]); + case 'shop': var buildsub = function(obj,parser,next){ var text_choices = null; diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index cba4dcaf..4a7cfd49 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -70,6 +70,11 @@ editor_blockly = function () { MotaActionBlocks['level_m'].xmlText(), MotaActionBlocks['commonEvent_m'].xmlText(), MotaActionBlocks['item_m'].xmlText(), + MotaActionFunctions.actionParser.parse([ + {"title":"简单", "name": "Easy", "hard": 1, "action": [ + {"type": "comment", "text": "在这里写该难度需执行的事件"} + ]} + ], 'levelChoose'), ], '显示文字':[ MotaActionBlocks['text_0_s'].xmlText(), diff --git a/_server/table/data.comment.js b/_server/table/data.comment.js index e99b0fd1..7b168af0 100644 --- a/_server/table/data.comment.js +++ b/_server/table/data.comment.js @@ -132,10 +132,10 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "levelChoose": { "_leaf": true, - "_type": "textarea", - "_range": "thiseval instanceof Array && thiseval.length>=1 && thiseval[0] instanceof Array && thiseval[0].length==2", + "_type": "event", + "_event": "levelChoose", "_docs": "难度分歧", - "_data": "难度选择:每个数组的第一个是其在标题界面显示的难度,第二个是在游戏内部传输的字符串,会显示在状态栏,修改此处后需要在project/functions中作相应更改。\n如果需直接开始游戏将下面的startDirectly开关打开即可。" + "_data": "难度分歧定义和对应的事件;此处留空数组表示将直接开始游戏" }, "equipName": { "_leaf": true, @@ -188,13 +188,6 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_docs": "状态栏文字色", "_data": "状态栏的文字颜色,默认是白色" }, - "hardLabelColor": { - "_leaf": true, - "_type": "textarea", - "_string": true, - "_docs": "难度标签色", - "_data": "难度显示的颜色,默认是红色" - }, "floorChangingBackground": { "_leaf": true, "_type": "textarea", @@ -647,12 +640,6 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_docs": "标题事件化", "_data": "是否开始菜单canvas化;如果此项为true,则将使用canvas来绘制开始菜单" }, - "startDirectly": { - "_leaf": true, - "_type": "checkbox", - "_docs": "不选择难度", - "_data": "点击“开始游戏”后是否立刻开始游戏而不显示难度选择界面" - }, "statusCanvas": { "_leaf": true, "_type": "checkbox", diff --git a/editor-mobile.html b/editor-mobile.html index 37949d9b..df00077d 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -217,6 +217,7 @@ + diff --git a/editor.html b/editor.html index 17ff7d97..6f552c7c 100644 --- a/editor.html +++ b/editor.html @@ -213,6 +213,7 @@ + diff --git a/libs/control.js b/libs/control.js index 502d2f32..226165ac 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2521,9 +2521,6 @@ control.prototype.updateGlobalAttribute = function (name) { texts[i].style.color = attribute[name]; break; } - case 'hardLabelColor': - core.dom.hard.style.color = attribute[name]; - break; case 'floorChangingBackground': core.dom.floorMsgGroup.style.background = attribute[name]; break; @@ -2844,7 +2841,6 @@ control.prototype._resize_tools = function (obj) { style.marginTop = 6 * core.domStyle.scale + "px" } core.dom.hard.style.lineHeight = toolsHeight + "px"; - core.dom.hard.style.color = obj.globalAttribute.hardLabelColor; if (core.domStyle.isVertical) { core.dom.hard.style.width = obj.outerSize - 9 * toolsMarginLeft - 8.5 * toolsHeight - 12 + "px"; } diff --git a/libs/core.js b/libs/core.js index d853edbc..dc5ee70d 100644 --- a/libs/core.js +++ b/libs/core.js @@ -195,7 +195,6 @@ function core() { "toolsBackground": main.toolsBackground || "url(project/materials/ground.png) repeat", "borderColor": main.borderColor || "white", "statusBarColor": main.statusBarColor || "white", - "hardLabelColor": main.hardLabelColor || "red", "floorChangingBackground": main.floorChangingBackground || "black", "floorChangingTextColor": main.floorChangingTextColor || "white", "font": main.font || "Verdana" diff --git a/libs/events.js b/libs/events.js index 9add168b..694adc68 100644 --- a/libs/events.js +++ b/libs/events.js @@ -61,6 +61,7 @@ events.prototype._startGame_start = function (hard, seed, route, callback) { core.dom.musicBtn.style.display = 'block'; core.push(todo, core.firstData.startCanvas); } + core.push(todo, {"type": "function", "function": "function() { core.events._startGame_setHard(); }"}) core.push(todo, core.firstData.startText); this.insertAction(todo, null, null, function () { core.events._startGame_afterStart(nowLoc, callback); @@ -69,6 +70,22 @@ events.prototype._startGame_start = function (hard, seed, route, callback) { if (route != null) core.startReplay(route); } +events.prototype._startGame_setHard = function () { + // 根据难度设置flag:hard + // 这一段应当在startCanvas之后,startText之前做 + var hardValue = 0; + var hardColor = 'red'; + main.levelChoose.forEach(function (one) { + if (one.name == core.status.hard) { + hardValue = one.hard; + hardColor = core.arrayToRGBA(one.color || [255,0,0,1]); + core.insertAction(one.action); + } + }); + core.setFlag('hard', 0); + core.setFlag('__hardColor__', hardColor); +} + events.prototype._startGame_afterStart = function (nowLoc, callback) { core.ui.closePanel(); this._startGame_statusBar(); diff --git a/libs/maps.js b/libs/maps.js index 438d30f8..69491d9e 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1238,7 +1238,7 @@ maps.prototype._drawThumbnail_realDrawTempCanvas = function (floorId, blocks, op this.drawEvents(floorId, blocks, tempCanvas); // 缩略图:勇士 if (options.heroLoc) { - options.heroIcon = options.heroIcon || core.status.hero.image; + options.heroIcon = options.heroIcon || core.status.hero.image || 'hero.png'; options.heroIcon = core.getMappedName(options.heroIcon); var icon = core.material.icons.hero[options.heroLoc.direction]; var height = core.material.images.images[options.heroIcon].height / 4; diff --git a/libs/ui.js b/libs/ui.js index 204796d0..690f9984 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2636,7 +2636,7 @@ ui.prototype._drawSLPanel_drawRecord = function(title, data, x, y, size, cho, hi }); if (core.isPlaying() && core.getFlag("hard") != data.hero.flags.hard) { core.fillRect('ui', x-size/2, y+15, size, size, [0, 0, 0, 0.4], 2); - core.fillText('ui', data.hard, x, parseInt(y+22+size/2), core.dom.hard.style.color, this._buildFont(30,true)); + core.fillText('ui', data.hard, x, parseInt(y+22+size/2), data.hero.flags.__hardColor__ || 'red', this._buildFont(30,true)); } var v = core.formatBigNumber(data.hero.hp,true)+"/"+core.formatBigNumber(data.hero.atk,true)+"/"+core.formatBigNumber(data.hero.def,true); var v2 = "/"+core.formatBigNumber(data.hero.mdef,true); diff --git a/main.js b/main.js index 71421aca..3f51a8c7 100644 --- a/main.js +++ b/main.js @@ -203,15 +203,16 @@ main.prototype.init = function (mode, callback) { main.dom.startBackground.src = main.startBackground; main.dom.startLogo.style=main.startLogoStyle; main.dom.startButtonGroup.style = main.startButtonsStyle; - main.levelChoose.forEach(function(value){ + main.levelChoose = main.levelChoose || []; + main.levelChoose.forEach(function (value) { var span = document.createElement('span'); span.setAttribute('class','startButton'); - span.innerText=value[0]; + span.innerText=value.title || ''; (function(span,str_){ span.onclick = function () { core.events.startGame(str_); } - })(span,value[1]); + })(span,value.name||''); main.dom.levelChooseButtons.appendChild(span); }); main.createOnChoiceAnimation(); @@ -724,10 +725,9 @@ main.dom.playGame.onclick = function () { main.dom.startButtons.style.display='none'; main.core.control.checkBgm(); - if (main.core.isset(main.core.flags.startDirectly) && main.core.flags.startDirectly) { + if (main.levelChoose.length == 0) { core.events.startGame(""); - } - else { + } else { main.dom.levelChooseButtons.style.display='block'; main.selectedButton = null; main.selectButton(0); diff --git a/project/data.js b/project/data.js index 9e84f565..49707788 100644 --- a/project/data.js +++ b/project/data.js @@ -44,22 +44,29 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "startBackground": "project/images/bg.jpg", "startLogoStyle": "color: black", "levelChoose": [ - [ - "简单", - "Easy" - ], - [ - "普通", - "Normal" - ], - [ - "困难", - "Hard" - ], - [ - "噩梦", - "Hell" - ] + { + "title": "简单", + "name": "Easy", + "hard": 1, + "action": [ + { + "type": "comment", + "text": "在这里写该难度需执行的事件" + } + ] + }, + { + "title": "普通", + "name": "Normal", + "hard": 2, + "color": [ + 0, + 255, + 0, + 1 + ], + "action": [] + } ], "equipName": [ "武器", @@ -71,7 +78,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "toolsBackground": "url(project/materials/ground.png) repeat", "borderColor": "#CCCCCC", "statusBarColor": "white", - "hardLabelColor": "red", "floorChangingBackground": "black", "floorChangingTextColor": "white", "font": "Verdana", @@ -158,7 +164,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = }, { "type": "if", - "condition": "core.flags.startDirectly", + "condition": "main.levelChoose.length == 0", "true": [ { "type": "comment", @@ -172,7 +178,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = }, { "type": "function", - "function": "function(){\nvar choices = [];\nmain.levelChoose.forEach(function (one) {\n\tchoices.push({\n\t\t\"text\": one[0],\n\t\t\"action\": [\n\t\t\t{ \"type\": \"function\", \"function\": \"function() { core.status.hard = '\" + one[1] + \"'; }\" }\n\t\t]\n\t});\n})\ncore.insertAction({ \"type\": \"choices\", \"choices\": choices });\n}" + "function": "function(){\nvar choices = [];\nmain.levelChoose.forEach(function (one) {\n\tchoices.push({\n\t\t\"text\": one.title || '',\n\t\t\"action\": [\n\t\t\t{ \"type\": \"function\", \"function\": \"function() { core.status.hard = '\" + (one.name || '') + \"'; }\" }\n\t\t]\n\t});\n})\ncore.insertAction({ \"type\": \"choices\", \"choices\": choices });\n}" } ] }, @@ -219,7 +225,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = }, { "type": "if", - "condition": "!core.isReplaying()", + "condition": "(!core.isReplaying())", "true": [ { "type": "function", @@ -239,60 +245,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = } ], "startText": [ - { - "type": "comment", - "text": "根据难度分歧设置并给其他初始值" - }, - { - "type": "switch", - "condition": "core.status.hard", - "caseList": [ - { - "case": "'Easy'", - "action": [ - { - "type": "setValue", - "name": "flag:hard", - "value": "1" - }, - { - "type": "comment", - "text": "可以在这里修改初始道具或属性,比如赠送黄钥匙等" - } - ] - }, - { - "case": "'Normal'", - "action": [ - { - "type": "setValue", - "name": "flag:hard", - "value": "2" - } - ] - }, - { - "case": "'Hard'", - "action": [ - { - "type": "setValue", - "name": "flag:hard", - "value": "3" - } - ] - }, - { - "case": "'Hell'", - "action": [ - { - "type": "setValue", - "name": "flag:hard", - "value": "4" - } - ] - } - ] - }, { "type": "comment", "text": "初始剧情" @@ -499,7 +451,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "betweenAttackMax": false, "useLoop": false, "startUsingCanvas": false, - "startDirectly": false, "statusCanvas": false, "displayEnemyDamage": true, "displayCritical": true, diff --git a/project/functions.js b/project/functions.js index da5802df..cfa557c9 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1032,6 +1032,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 难度 core.statusBar.hard.innerText = core.status.hard; + core.statusBar.hard.style.color = core.getFlag('__hardColor__', 'red'); // 自定义状态栏绘制 core.drawStatusBar(); diff --git a/project/materials/animates.png b/project/materials/animates.png index e3b74ee96223657f806ec07f83bd5c633290fe56..01305fd67a20b69be859e161643fe688d4000c50 100644 GIT binary patch literal 35445 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
*GQks$N+z@OMn4^q2eGTcMR)A%^YLCE2=#( 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 literal 35375 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 diff --git a/runtime.d.ts b/runtime.d.ts index 013a574b..ee8de756 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -221,7 +221,6 @@ type gameStatus = { toolsBackground: string borderColor: string statusBarColor: string - hardLabelColor: string floorChangingBackground: string floorChangingTextColor: string font: string diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 540ae267..acd4a0bc 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -56,8 +56,8 @@ 合并items.js (已完成!) 增加fonts目录,全塔属性增加fonts引用 (已完成!) 右边框输入完后解析按钮高亮 -32x48的门 -难度分歧的图块(颜色,含SL界面) +(已完成!) 32x48的门 +(已完成!) 难度分歧的图块(颜色,含SL界面) 装备同时加属性和比例 ------------- From 53b95ab199c8387a17bae2b1007b8f58a528939f Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 13:02:56 +0800 Subject: [PATCH 10/49] =?UTF-8?q?=E6=94=AF=E6=8C=81npc48=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E9=97=A8=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/events.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/events.js b/libs/events.js index 694adc68..7c5fc405 100644 --- a/libs/events.js +++ b/libs/events.js @@ -493,7 +493,7 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { events.prototype._openDoor_animate = function (id, x, y, callback) { var blockInfo = core.getBlockInfo(id); - var image = blockInfo.image, posX = blockInfo.posX, posY = blockInfo.posY, height = blockInfo.height; + var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; var speed = 40; @@ -2599,7 +2599,8 @@ events.prototype.setGlobalFlag = function (name, value) { events.prototype.closeDoor = function (x, y, id, callback) { id = id || ""; - if (core.material.icons.animates[id] == null || core.getBlock(x, y) != null) { + if ((core.material.icons.animates[id] == null && core.material.icons.npc48[id] == null) + || core.getBlock(x, y) != null) { if (callback) callback(); return; } @@ -2611,19 +2612,23 @@ events.prototype.closeDoor = function (x, y, id, callback) { // 关门动画 core.playSound(doorInfo[2] || 'door.mp3'); - var door = core.material.icons.animates[id]; + var blockInfo = core.getBlockInfo(id); + var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; + var speed = 40, state = 0; var animate = window.setInterval(function () { state++; if (state == 4) { clearInterval(animate); delete core.animateFrame.asyncId[animate]; - core.setBlock(core.getNumberById(id), x, y); + core.setBlock(id, x, y); if (callback) callback(); return; } core.clearMap('event', 32 * x, 32 * y, 32, 32); - core.drawImage('event', core.material.images.animates, 32 * (4-state), 32 * door, 32, 32, 32 * x, 32 * y, 32, 32); + core.drawImage('event', image, 32 * (4-state), posY * height + height - 32, 32, 32, x * 32, y * 32, 32, 32); + if (height > 32) + core.drawImage('event2', image, 32 * (4-state), posY * height, 32, height - 32, x * 32, y * 32 + 32 - height, 32, height - 32); }, core.status.replay.speed == 24 ? 1 : speed / Math.max(core.status.replay.speed, 1)); core.animateFrame.asyncId[animate] = true; } From b45afe0ae4c3263a9d006c9ee5210a6557c15e05 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 13:09:35 +0800 Subject: [PATCH 11/49] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=BC=80=E9=97=A8?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/table/comment.js | 2 +- libs/events.js | 8 ++++---- project/maps.js | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_server/table/comment.js b/_server/table/comment.js index c6c622ea..702e54a8 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -338,7 +338,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_leaf": true, "_type": "textarea", "_docs": "门信息", - "_data": "该图块的门信息,是一个三元数组。\n第一项为所需要的钥匙信息,第二项为开此门时的音效,第三项为关此门时的音效。仅对animates生效。" + "_data": "该图块的门信息,是一个四元数组。\n第一项为所需要的钥匙信息,第二项为开关门的毫秒数,第三项为开此门时的音效,第四项为关此门时的音效。仅对animates生效。" }, "faceIds": { "_leaf": true, diff --git a/libs/events.js b/libs/events.js index 7c5fc405..ce13f142 100644 --- a/libs/events.js +++ b/libs/events.js @@ -487,7 +487,7 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { core.removeItem(keyName, keyInfo[keyName]); } } - core.playSound(doorInfo[1] || 'door.mp3'); + core.playSound(doorInfo[2] || 'door.mp3'); return true; } @@ -495,7 +495,7 @@ events.prototype._openDoor_animate = function (id, x, y, callback) { var blockInfo = core.getBlockInfo(id); var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; - var speed = 40; + var speed = (core.getBlockById(id).event.doorInfo[1] || 160) / 4; var locked = core.status.lockControl; core.lockControl(); @@ -2611,11 +2611,11 @@ events.prototype.closeDoor = function (x, y, id, callback) { } // 关门动画 - core.playSound(doorInfo[2] || 'door.mp3'); + core.playSound(doorInfo[3] || 'door.mp3'); var blockInfo = core.getBlockInfo(id); var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; - var speed = 40, state = 0; + var speed = (doorInfo[1] || 160) / 4, state = 0; var animate = window.setInterval(function () { state++; if (state == 4) { diff --git a/project/maps.js b/project/maps.js index 7d297646..09a10db7 100644 --- a/project/maps.js +++ b/project/maps.js @@ -1,8 +1,8 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = { - "1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":[null,"door.mp3","door.mp3"]}, - "2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":[null,"door.mp3","door.mp3"]}, - "3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":[null,"door.mp3","door.mp3"]}, + "1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, + "2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, + "3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, "4": {"cls":"animates","id":"star","name":"星空"}, "5": {"cls":"animates","id":"lava","name":"岩浆"}, "6": {"cls":"terrains","id":"ice"}, @@ -68,12 +68,12 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "71": {"cls":"items","id":"shield0"}, "72": {"cls":"items","id":"skill1"}, "73": {"cls":"items","id":"wand"}, - "81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":[{"yellowKey":1},"door.mp3","door.mp3"],"name":"黄门"}, - "82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":[{"blueKey":1},"door.mp3","door.mp3"],"name":"蓝门"}, - "83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":[{"redKey":1},"door.mp3","door.mp3"],"name":"红门"}, - "84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":[{"greenKey":1},"door.mp3","door.mp3"],"name":"绿门"}, - "85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":[null,"door.mp3","door.mp3"],"name":"机关门"}, - "86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":[{"steelKey":1},"door.mp3","door.mp3"],"name":"铁门"}, + "81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":[{"yellowKey":1},160,"door.mp3","door.mp3"],"name":"黄门"}, + "82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":[{"blueKey":1},160,"door.mp3","door.mp3"],"name":"蓝门"}, + "83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":[{"redKey":1},160,"door.mp3","door.mp3"],"name":"红门"}, + "84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":[{"greenKey":1},160,"door.mp3","door.mp3"],"name":"绿门"}, + "85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"],"name":"机关门"}, + "86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":[{"steelKey":1},160,"door.mp3","door.mp3"],"name":"铁门"}, "87": {"cls":"terrains","id":"upFloor","canPass":true}, "88": {"cls":"terrains","id":"downFloor","canPass":true}, "89": {"cls":"animates","id":"portal","canPass":true}, From 91e4e40fc0fc7894d3b0907b64dbb51a9c4db29d Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 14:00:57 +0800 Subject: [PATCH 12/49] =?UTF-8?q?=E8=BD=AC=E5=8F=98=E5=9B=BE=E5=9D=97?= =?UTF-8?q?=E5=B8=A6=E6=B7=A1=E5=85=A5=E6=B7=A1=E5=87=BA=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=92=8C=E5=BC=82=E6=AD=A5=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 8 ++-- _server/MotaActionParse.js | 2 +- libs/events.js | 14 ++++-- libs/maps.js | 97 ++++++++++++++++++++++++++++++++++++++ v2.x-final更新.txt | 5 +- 5 files changed, 116 insertions(+), 10 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index ca76409d..9dfa9686 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -848,14 +848,14 @@ return code; */; setBlock_s - : '转变图块为' EvalString 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? Newline + : '转变图块为' EvalString 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? '动画时间' IntString? '不等待执行完毕' Bool Newline /* setBlock_s tooltip : setBlock:设置某个图块,忽略坐标楼层则为当前事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setblock%EF%BC%9A%E8%AE%BE%E7%BD%AE%E6%9F%90%E4%B8%AA%E5%9B%BE%E5%9D%97 colour : this.mapColor -default : ["yellowDoor","","",""] +default : ["yellowDoor","","","","",false] var floorstr = ''; if (EvalString_1 && EvalString_2) { var pattern1 = MotaActionFunctions.pattern.id; @@ -874,7 +874,9 @@ if (EvalString_1 && EvalString_2) { floorstr = ', "loc": ['+EvalString_1.join(',')+']'; } IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); -var code = '{"type": "setBlock", "number": "'+EvalString_0+'"'+floorstr+IdString_0+'},\n'; +IntString_0 = IntString_0 && (', "time": ' + IntString_0); +Bool_0 = Bool_0 ? (', "async": true') : ''; +var code = '{"type": "setBlock", "number": "'+EvalString_0+'"'+floorstr+IdString_0+IntString_0+Bool_0+'},\n'; return code; */; diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 5654bd52..b961eec6 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -222,7 +222,7 @@ ActionParser.prototype.parseAction = function() { y_str.push(t[1]); }) this.next = MotaActionBlocks['setBlock_s'].xmlText([ - data.number||0,x_str.join(','),y_str.join(','),data.floorId||'',this.next]); + data.number||0,x_str.join(','),y_str.join(','),data.floorId||'',data.time,data.async||false,this.next]); break; case "turnBlock": // 事件转向 data.loc=data.loc||[]; diff --git a/libs/events.js b/libs/events.js index ce13f142..8d366adc 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1306,10 +1306,16 @@ events.prototype._action_hide = function (data, x, y, prefix) { events.prototype._action_setBlock = function (data, x, y, prefix) { data.loc = this.__action_getLoc2D(data.loc, x, y, prefix); - data.loc.forEach(function (t) { - core.setBlock(data.number, t[0], t[1], data.floorId); - }); - core.doAction(); + data.time = data.time || 0; + data.floorId = data.floorId || core.status.floorId; + if (data.time > 0 && data.floorId == core.status.floorId) { + this.__action_doAsyncFunc(data.async, core.animateSetBlocks, data.number, data.loc, data.floorId, data.time); + } else { + data.loc.forEach(function (loc) { + core.setBlock(data.number, loc[0], loc[1], data.floorId); + }); + core.doAction(); + } } events.prototype._action_turnBlock = function (data, x, y, prefix) { diff --git a/libs/maps.js b/libs/maps.js index 69491d9e..a2477497 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1638,6 +1638,103 @@ maps.prototype.setBlock = function (number, x, y, floorId) { } } +maps.prototype.animateSetBlock = function (number, x, y, floorId, time, callback) { + floorId = floorId || core.status.floorId; + time = time || 0; + if (floorId != core.status.floorId || time == 0) { + // 不在当前楼层,直接忽略 + this.setBlock(number, x, y, floorId); + if (callback) callback(); + return; + } + if (typeof number == 'string') { + if (/^\d+$/.test(number)) number = parseInt(number); + else number = core.getNumberById(number); + } + var originBlock = core.getBlock(x, y, floorId, true); + var block = this.initBlock(x, y, number, true, core.floors[floorId]); + + // 如果原本是启用的 + if (originBlock != null && !originBlock.block.disable) { + return this._animateSetBlock_originEnabled(block, number, x, y, floorId, time, callback); + } + + // 如果原本不存在 + if (originBlock == null) { + return this._animateSetBlock_originNotExists(block, number, x, y, floorId, time, callback); + } + + // 如果原本存在且禁用;应当直接设置,没有动画 + if (originBlock != null && originBlock.block.disable) { + return this._animateSetBlock_originDisabled(number, x, y, floorId, callback); + } + if (callback) callback(); +} + +maps.prototype._animateSetBlock_originEnabled = function (block, number, x, y, floorId, time, callback) { + // 情况1:设置到0 + if (block.id == 0) { + // 如果该点红点没有事件 - 直接删除 + if (!block.event.trigger) { + return this.animateBlock([x, y], 'remove', time, callback); + } else { + // 如果该点红点有事件;则设置到0,但是需启用 + return this.animateBlock([x, y], 'hide', time, function () { + core.setBlock(0, x, y, floorId); + core.showBlock(x, y, floorId); + if (callback) callback(); + }); + } + } + // 情况2:设置到非0 + else { + return this.animateBlock([x, y], 'hide', time / 2, function () { + core.setBlock(number, x, y, floorId); + core.animateBlock([x, y], 'show', time / 2, callback); + }) + } +} + +maps.prototype._animateSetBlock_originNotExists = function (block, number, x, y, floorId, time, callback) { + // 情况1:设置到0;没有动画效果 + if (block.id == 0) { + core.setBlock(number, x, y, floorId); + if (callback) callback(); + } + else { + // 情况2:设置到非0,有淡入动画 + core.setBlock(number, x, y, floorId); + core.hideBlock(x, y, floorId); + core.animateBlock([x, y], 'show', time, callback); + return; + } +} + +maps.prototype._animateSetBlock_originDisabled = function (number, x, y, floorId, callback) { + core.setBlock(number, x, y, floorId); + if (callback) callback(); +} + +maps.prototype.animateSetBlocks = function (number, locs, floorId, time, callback) { + if (!(locs instanceof Array)) { + if (callback) callback(); + return; + } + if (typeof locs[0] == 'number' && typeof locs[1] == 'number') + locs = [locs]; + + var count = locs.length; + var _afterSet = function () { + count--; + if (count == 0) { + if (callback) callback(); + } + } + locs.forEach(function (loc) { + core.animateSetBlock(number, loc[0], loc[1], floorId, time, _afterSet); + }); +} + ////// 事件转向 ////// maps.prototype.turnBlock = function (direction, x, y, floorId) { var id = core.getBlockId(x, y, floorId, true); diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index acd4a0bc..19e78220 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -8,7 +8,7 @@ (已完成!) 7. 建议把core.playBgm(bgm, startTime)的startTime参数在事件中也提供出来,以用于一些演出(比如适当的剧情处直接从高潮开始)。同理可以让“暂停背景音乐”记录下当前播放到了第几秒,并在“恢复背景音乐”中自动从这个秒数恢复。作者还可以手动配合音量渐变效果 (已完成!) 8. 系统设置菜单中“音量”和“步时”的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化 (已完成!) 9. 建议给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”,用来实现一些如新新2的QTE,录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支 -10. 建议给“转变图块”事件增加一个淡入时间参数,用于原本是空地或空气墙的情况,目前这种效果必须借助存在安全隐患的红点 +(已完成!) 10. 建议给“转变图块”事件增加一个淡入时间参数,用于原本是空地或空气墙的情况,目前这种效果必须借助存在安全隐患的红点 (已完成!) 11. 建议修复勇士后退时跟随者的鬼畜行为,并推出一套能够对跟随者位置和朝向进行读写的API甚至事件,且允许这些信息被计入存档,以实现一些演出效果甚至游戏要素,如新新2用公主占位防冰块 (已完成!) 12. “设置怪物属性”事件的下拉框目前只支持一部分,另一部分只能通过手敲json再解析来得到,希望提供完整支持 (已完成!) 13. 建议给core.moveAction(callback)提供对应的事件,用于在事件中让勇士像事件外一样移动,从而正常触发跑毒和阻激夹域捕等 @@ -49,6 +49,7 @@ (已完成!) 素材列表选择 (已完成!) 油漆桶,动态更改地图大小 地图拉框选择复制剪切删除 +额外素材区拖动选择一个区域 (已完成!) 素材替换 大屏幕下放大游戏界面 (已完成!) 最近使用/最常使用的图块 @@ -116,7 +117,7 @@ (已修复!) 49. 系统设置菜单中音量和步时的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化 (不处理) 50. 建议给录像播放时的N键提供一个对应的移动端操作,以方便移动端作者 (已完成!) 51. 希望给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”,用来实现一些QTE,录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支 -52. 希望给“转变图块”加一个淡入时间参数(显隐和转变图层块也希望加个淡入淡出时间参数,图层块也希望提供移动和跳跃事件),专门用于原本是空地或空气墙的情况。目前要实现这样的效果必须使用红点,然而红点有着“推箱子、阻击、捕捉、重生、炸锤和afterXxx事件”的系列问题,且会导致core.removeBlock()(隐藏事件)退化为core.hideBlock() +(已完成!) 52. 希望给“转变图块”加一个淡入时间参数(显隐和转变图层块也希望加个淡入淡出时间参数,图层块也希望提供移动和跳跃事件),专门用于原本是空地或空气墙的情况。目前要实现这样的效果必须使用红点,然而红点有着“推箱子、阻击、捕捉、重生、炸锤和afterXxx事件”的系列问题,且会导致core.removeBlock()(隐藏事件)退化为core.hideBlock() (不处理) 53. 希望“移动事件”的移速和淡出速度拆开成两个参数,目前这样捆绑在一起不太自由 (已完成) 54. 建议把图块属性的noPass改为勾选框而不是下拉框,因为null一定表示不可通行(道具根本没有noPass) (不处理,可以转变图块) 55. “移动事件”和“跳跃事件”会导致本来勾选了不显伤的怪物突然有了显伤,非常难看,建议优化 From fa61c25cf8bba4fd5ab65640d9a989f2d53311d2 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 14:24:08 +0800 Subject: [PATCH 13/49] highlight savefloor button --- _server/editor.js | 1 + _server/editor_mappanel.js | 17 +++++++++++++++++ _server/editor_ui.js | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/_server/editor.js b/_server/editor.js index 31d1f954..4717dbdb 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -282,6 +282,7 @@ editor.prototype.changeFloor = function (floorId, callback) { editor.viewportLoc = editor.viewportLoc || {}; var loc = editor.viewportLoc[floorId] || [], x = loc[0] || 0, y = loc[1] || 0; editor.setViewport(x, y); + editor.uifunctions.unhighlightSaveFloorButton(); editor.config.set('editorLastFloorId', floorId, function() { if (callback) callback(); diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index f6c7687c..3c8c86e1 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -274,6 +274,7 @@ editor_mappanel_wrapper = function (editor) { editor.uivalues.holdingPath = 0; editor.uivalues.stepPostfix = []; editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); + editor.uifunctions.highlightSaveFloorButton(); } return false; } @@ -465,6 +466,7 @@ editor_mappanel_wrapper = function (editor) { editor.drawEventBlock(); editor_mode.showMode('loc'); printf('添加楼梯事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); return true; } @@ -525,6 +527,7 @@ editor_mappanel_wrapper = function (editor) { editor.drawPosSelection(); editor_mode.showMode('loc'); printf('绑定机关门事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); bindSpecialDoor.loc = null; bindSpecialDoor.enemys = []; @@ -577,6 +580,7 @@ editor_mappanel_wrapper = function (editor) { throw (err) } ; printf('复制事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); } @@ -591,6 +595,7 @@ editor_mappanel_wrapper = function (editor) { editor.savePreMap(); editor_mode.onmode(''); editor.exchangePos(editor.pos, editor.uivalues.lastRightButtonPos[1]); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -600,6 +605,7 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.clearEvent_click = function (e) { e.stopPropagation(); editor.clearPos(false); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -609,6 +615,7 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.clearLoc_click = function (e) { e.stopPropagation(); editor.clearPos(true); + editor.uifunctions.unhighlightSaveFloorButton(); } /** @@ -765,6 +772,15 @@ editor_mappanel_wrapper = function (editor) { }); } + editor.uifunctions.highlightSaveFloorButton=function(){ + var saveFloor = document.getElementById('saveFloor'); + saveFloor.style.background='#FFCCAA'; + } + + editor.uifunctions.unhighlightSaveFloorButton=function(){ + var saveFloor = document.getElementById('saveFloor'); + saveFloor.style.background=''; + } editor.uifunctions.saveFloor_func = function () { var saveFloor = document.getElementById('saveFloor'); @@ -776,6 +792,7 @@ editor_mappanel_wrapper = function (editor) { throw (err) } ; printf('保存成功'); + editor.uifunctions.unhighlightSaveFloorButton() }); } saveFloor.onclick = editor_mode.saveFloor; diff --git a/_server/editor_ui.js b/_server/editor_ui.js index cc9588ed..c316d200 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -318,6 +318,7 @@ editor_ui_wrapper = function (editor) { editor.bgmap = JSON.parse(JSON.stringify(data.bgmap)); editor.updateMap(); editor.uivalues.postMapData.push(data); + editor.uifunctions.highlightSaveFloorButton(); printf("已撤销此操作,你可能需要重新保存地图。"); } return; @@ -332,6 +333,7 @@ editor_ui_wrapper = function (editor) { editor.bgmap = JSON.parse(JSON.stringify(data.bgmap)); editor.updateMap(); editor.uivalues.preMapData.push(data); + editor.uifunctions.highlightSaveFloorButton(); printf("已重做此操作,你可能需要重新保存地图。"); } return; @@ -349,6 +351,7 @@ editor_ui_wrapper = function (editor) { editor.uivalues.copyedInfo = editor.copyFromPos(); editor.clearPos(true, null, function () { printf('该点事件已剪切'); + editor.uifunctions.unhighlightSaveFloorButton(); }) return; } @@ -366,6 +369,7 @@ editor_ui_wrapper = function (editor) { throw (err) } ; printf('粘贴事件成功'); + editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); return; @@ -373,6 +377,7 @@ editor_ui_wrapper = function (editor) { // DELETE if (e.keyCode == 46 && !selectBox.isSelected()) { editor.clearPos(true); + editor.uifunctions.unhighlightSaveFloorButton(); return; } // ESC From eca70afcc4abcc7451db55a2a9a95dfc8dd90cc9 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 16:27:32 +0800 Subject: [PATCH 14/49] fix missing in exchangePos --- _server/editor_mappanel.js | 1 + 1 file changed, 1 insertion(+) diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 3c8c86e1..93d57fed 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -202,6 +202,7 @@ editor_mappanel_wrapper = function (editor) { editor.exchangeBgFg(editor.uivalues.startPos, editor.uivalues.endPos, editor.layerMod); editor.uivalues.startPos = editor.uivalues.endPos = null; editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); + editor.uifunctions.unhighlightSaveFloorButton(); return false; } editor.uivalues.holdingPath = 0; From 1567b736e1dc6d70bccce6f4502b235f9f646ace Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 17:00:18 +0800 Subject: [PATCH 15/49] show/hideHero with time --- _server/MotaAction.g4 | 14 +++++++--- _server/MotaActionParse.js | 4 +-- libs/control.js | 54 ++++++++++++++++++++++++++++++++++---- libs/events.js | 22 +++++++++++----- v2.x-final更新.txt | 2 +- 5 files changed, 78 insertions(+), 18 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 9dfa9686..725b71f4 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1123,26 +1123,32 @@ return code; */; showHero_s - : '显示勇士' Newline + : '显示勇士' '动画时间' IntString? '不等待执行完毕' Bool Newline /* showHero_s tooltip : showHero: 显示勇士 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showHero%3a+%e6%98%be%e7%a4%ba%e5%8b%87%e5%a3%ab +default : ['',false] colour : this.soundColor -var code = '{"type": "showHero"},\n'; +IntString_0 = IntString_0 && (', "time": ' + IntString_0); +Bool_0 = Bool_0 ? (', "async": true') : ''; +var code = '{"type": "showHero"'+IntString_0+Bool_0+'},\n'; return code; */; hideHero_s - : '隐藏勇士' Newline + : '隐藏勇士' '动画时间' IntString? '不等待执行完毕' Bool Newline /* hideHero_s tooltip : hideHero: 隐藏勇士 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=hideHero%ef%bc%9a%e9%9a%90%e8%97%8f%e5%8b%87%e5%a3%ab +default : ['',false] colour : this.soundColor -var code = '{"type": "hideHero"},\n'; +IntString_0 = IntString_0 && (', "time": ' + IntString_0); +Bool_0 = Bool_0 ? (', "async": true') : ''; +var code = '{"type": "hideHero"'+IntString_0+Bool_0+'},\n'; return code; */; diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index b961eec6..3a639310 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -654,11 +654,11 @@ ActionParser.prototype.parseAction = function() { break; case "showHero": this.next = MotaActionBlocks['showHero_s'].xmlText([ - this.next]); + data.time, data.async||false, this.next]); break; case "hideHero": this.next = MotaActionBlocks['hideHero_s'].xmlText([ - this.next]); + data.time, data.async||false, this.next]); break; case "sleep": // 等待多少毫秒 this.next = MotaActionBlocks['sleep_s'].xmlText([ diff --git a/libs/control.js b/libs/control.js index 226165ac..381584ee 100644 --- a/libs/control.js +++ b/libs/control.js @@ -783,17 +783,61 @@ control.prototype.drawHero = function (status, offset) { core.status.heroCenter.py = 32 * y + offsetY + 32 - core.material.icons.hero.height / 2; if (!core.hasFlag('hideHero')) { - this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (block) { - core.drawImage('hero', block.img, block.heroIcon[block.status]*block.width, - block.heroIcon.loc * block.height, block.width, block.height, - block.posx+(32-block.width)/2, block.posy+32-block.height, block.width, block.height); - }); + this._drawHero_draw(direction, x, y, status, offset); } core.control.updateViewport(); core.setGameCanvasTranslate('hero', 0, 0); } +control.prototype._drawHero_draw = function (direction, x, y, status, offset) { + this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (block) { + core.drawImage('hero', block.img, block.heroIcon[block.status]*block.width, + block.heroIcon.loc * block.height, block.width, block.height, + block.posx+(32-block.width)/2, block.posy+32-block.height, block.width, block.height); + }); +} + +control.prototype.triggerHero = function (type, time, callback) { + if (type == null) { + type = core.hasFlag('hideHero') ? 'show' : 'hide'; + } + if ((core.hasFlag('hideHero') && type != 'show') || (!core.hasFlag('hideHero') && type != 'hide')) { + if (callback) callback(); + return; + } + if (type == 'show') core.removeFlag('hideHero'); + else core.setFlag('hideHero', true); + + time = time || 0; + if (time == 0) { + core.drawHero(); + if (callback) callback(); + return; + } + time /= Math.max(core.status.replay.speed, 1) + this._triggerHero_animate(type, 10 / time, callback); +} + +control.prototype._triggerHero_animate = function (type, delta, callback) { + var opacity = type != 'show' ? 1 : 0; + var animate = setInterval(function () { + opacity += type != 'show' ? -delta : delta; + core.clearMap('hero'); + core.setAlpha('hero', opacity); + core.control._drawHero_draw(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop', 0); + core.setAlpha('hero', 1); + if (opacity >= 1 || opacity <= 0) { + delete core.animateFrame.asyncId[animate]; + clearInterval(animate); + core.drawHero(); + if (callback) callback(); + } + }, 10); + + core.animateFrame.asyncId[animate] = true; +} + control.prototype._drawHero_getDrawObjs = function (direction, x, y, status, offset) { var heroIconArr = core.material.icons.hero, drawObjs = [], index = 0; drawObjs.push({ diff --git a/libs/events.js b/libs/events.js index 8d366adc..3e2e46f6 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2011,15 +2011,25 @@ events.prototype._action_hideStatusBar = function (data, x, y, prefix) { } events.prototype._action_showHero = function (data, x, y, prefix) { - core.removeFlag('hideHero'); - core.drawHero(); - core.doAction(); + data.time = data.time || 0; + if (data.time > 0) { + this.__action_doAsyncFunc(data.async, core.triggerHero, 'show', data.time); + } else { + core.removeFlag('hideHero'); + core.drawHero(); + core.doAction(); + } } events.prototype._action_hideHero = function (data, x, y, prefix) { - core.setFlag('hideHero', true); - core.drawHero(); - core.doAction(); + data.time = data.time || 0; + if (data.time > 0) { + this.__action_doAsyncFunc(data.async, core.triggerHero, 'hide', data.time); + } else { + core.setFlag('hideHero', true); + core.drawHero(); + core.doAction(); + } } events.prototype._action_vibrate = function (data, x, y, prefix) { diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 19e78220..a6d4e1d7 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -135,7 +135,7 @@ (不处理) 67. “画面震动”事件希望不要光左右晃,至少做成QQ窗口抖动的效果吧w (不处理) 68. “自动存档”事件希望加一个“读此档后打断当前事件”的勾选项,否则这种自动存档用于强制战斗之前就没什么意义了,读了档还是会强制战斗。录像兼容性方面,不知道如果这种自动存档只用于事件开头是不是就不会有问题 (已修复!) 69. “等待用户操作”虽然提供了场合块但还不支持将多个按键的场合合并(比如空格、回车和C键一般会被作者予以合并,执行内容如果只是大致相同也值得合并,在块内再行分歧),希望支持一下 -70. “显隐勇士”事件指令希望加个淡入淡出时间参数 +(已完成!) 70. “显隐勇士”事件指令希望加个淡入淡出时间参数 (不处理,请用等待事件) 1. 希望给core.drawTip()和core.playSound()出个同步版本,目前只有异步版本,后者如果要模拟同步就得绑在一个透明动画上 (已完成!) 72. “绘制描边文本”事件希望加一个“描边颜色”参数,目前只能描黑边 (已完成!) 73. 画弧既然有现成的API,那建议也作为UI绘制事件提供。甚至希望提供画椭圆功能(长短轴水平或铅直的那种)参数为中心坐标和长短轴长度 From 0bd37974a24696c8852c19dcefeeedcb3a046cad Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 17:12:01 +0800 Subject: [PATCH 16/49] fix regexp format for moblie --- _server/MotaActionParse.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 5654bd52..1ad9682a 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -1022,9 +1022,9 @@ ActionParser.prototype.matchEvalCompare=function(args, isShadow){ // 按优先级依次寻找以下符号 var oplist=['<','<=','>','>=','==','!=','&&','||'].reverse() for (var index = 0,op; op=oplist[index]; index++) { - var match=new RegExp('(?<= )'+(op=='||'?'\\|\\|':op)+'(?= )').exec(str) + var match=new RegExp(' '+(op=='||'?'\\|\\|':op)+' ').exec(str) if (!match) continue; - args=[this.expandEvalBlock([raw.slice(0,match.index)],isShadow),op.replace(/&/g,'&').replace(//g,'>'),this.expandEvalBlock([raw.slice(match.index+op.length)],isShadow)] + args=[this.expandEvalBlock([raw.slice(0,match.index+1)],isShadow),op.replace(/&/g,'&').replace(//g,'>'),this.expandEvalBlock([raw.slice(match.index+1+op.length)],isShadow)] return {ret:true,xml:xml,args:args} } return {ret:false} From bdca4fdd553f9414a874861c8afdf114d237f908 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 20:24:08 +0800 Subject: [PATCH 17/49] =?UTF-8?q?=E6=A1=86=E9=80=89tileset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 2 + _server/editor_listen.js | 2 + _server/editor_materialpanel.js | 72 ++++++++++++++++++++++++++++----- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index 4717dbdb..de9c25ce 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -105,6 +105,7 @@ function editor() { // tile tileSize: [1,1], + startLoc: {"x":0,"y":0}, lockMode: false, // 最近使用的图块 @@ -683,6 +684,7 @@ editor.prototype.setSelectBoxFromInfo=function(thisevent, scrollTo){ editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; editor.dom.dataSelection.style.height = ysize - 6 + 'px'; + editor.dom.dataSelection.style.width = 32 - 6 + 'px'; setTimeout(function(){ selectBox.isSelected(true); editor.updateLastUsedMap(); diff --git a/_server/editor_listen.js b/_server/editor_listen.js index f5994f4e..115d37d5 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -24,6 +24,8 @@ editor_listen_wrapper = function (editor) { editor.dom.iconExpandBtn.onclick = editor.uifunctions.fold_material_click editor.dom.iconLib.onmousedown = editor.uifunctions.material_ondown + editor.dom.iconLib.onmousemove = editor.uifunctions.material_onmove + editor.dom.iconLib.onmouseup = editor.uifunctions.material_onup editor.dom.iconLib.oncontextmenu = function (e) { e.preventDefault() } editor.dom.extraEvent.onmousedown = editor.uifunctions.extraEvent_click diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js index 51752b9c..7aa54339 100644 --- a/_server/editor_materialpanel.js +++ b/_server/editor_materialpanel.js @@ -62,13 +62,41 @@ editor_materialpanel_wrapper = function (editor) { } } + var lastmoveE=null; /** * editor.dom.iconLib.onmousedown - * 素材区的单击事件 + * 素材区的单击/拖拽事件 */ editor.uifunctions.material_ondown = function (e) { e.stopPropagation(); e.preventDefault(); + lastmoveE=e; + if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + editor.uivalues.startLoc={ + 'x': scrollLeft + e.clientX + editor.dom.iconLib.scrollLeft - right.offsetLeft - editor.dom.iconLib.offsetLeft, + 'y': scrollTop + e.clientY + editor.dom.iconLib.scrollTop - right.offsetTop - editor.dom.iconLib.offsetTop, + 'size': 32 + }; + } + + /** + * editor.dom.iconLib.onmousemove + * 素材区的单击/拖拽事件 + */ + editor.uifunctions.material_onmove = function (e) { + e.stopPropagation(); + e.preventDefault(); + lastmoveE=e; + } + + /** + * editor.dom.iconLib.onmouseup + * 素材区的单击/拖拽事件 + */ + editor.uifunctions.material_onup = function (ee) { + var e=lastmoveE; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; @@ -79,6 +107,7 @@ editor_materialpanel_wrapper = function (editor) { }; editor.loc = loc; editor.uivalues.tileSize = [1,1]; + var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); var pos = editor.uifunctions.locToPos(loc); for (var spriter in editor.widthsX) { if (pos.x >= editor.widthsX[spriter][1] && pos.x < editor.widthsX[spriter][2]) { @@ -115,6 +144,7 @@ editor_materialpanel_wrapper = function (editor) { editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; editor.dom.dataSelection.style.height = ysize - 6 + 'px'; + editor.dom.dataSelection.style.width = 32 - 6 + 'px'; if (pos.x == 0 && pos.y == 0) { // editor.info={idnum:0, id:'empty','images':'清除块', 'y':0}; @@ -133,21 +163,21 @@ editor_materialpanel_wrapper = function (editor) { editor.info = { 'images': pos.images, 'y': y } } - for (var ii = 0; ii < editor.ids.length; ii++) { - if ((core.tilesets.indexOf(pos.images) != -1 && editor.info.images == editor.ids[ii].images - && editor.info.y == editor.ids[ii].y && editor.info.x == editor.ids[ii].x) - || (Object.prototype.hasOwnProperty.call(autotiles, pos.images) && editor.info.images == editor.ids[ii].id - && editor.info.y == editor.ids[ii].y) - || (core.tilesets.indexOf(pos.images) == -1 && editor.info.images == editor.ids[ii].images - && editor.info.y == editor.ids[ii].y) + for (var idindex = 0; idindex < editor.ids.length; idindex++) { + if ((core.tilesets.indexOf(pos.images) != -1 && editor.info.images == editor.ids[idindex].images + && editor.info.y == editor.ids[idindex].y && editor.info.x == editor.ids[idindex].x) + || (Object.prototype.hasOwnProperty.call(autotiles, pos.images) && editor.info.images == editor.ids[idindex].id + && editor.info.y == editor.ids[idindex].y) + || (core.tilesets.indexOf(pos.images) == -1 && editor.info.images == editor.ids[idindex].images + && editor.info.y == editor.ids[idindex].y) ) { - editor.info = editor.ids[ii]; + editor.info = editor.ids[idindex]; break; } } - if (editor.info.isTile && e.button == 2) { + if (editor.info.isTile && e.button == 2) { //这段改一改之类的应该能给手机用,就不删了 var v = prompt("请输入该额外素材区域绑定宽高,以逗号分隔", "1,1"); if (v != null && /^\d+,\d+$/.test(v)) { v = v.split(","); @@ -157,9 +187,31 @@ editor_materialpanel_wrapper = function (editor) { alert("不合法的输入范围,已经越界"); } else { editor.uivalues.tileSize = [x, y]; + editor.dom.dataSelection.style.left = pos.x * 32 + 'px'; + editor.dom.dataSelection.style.top = pos.y * ysize + 'px'; + editor.dom.dataSelection.style.height = ysize*y - 6 + 'px'; + editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; } } } + if (editor.info.isTile && e.button != 2) { //左键拖拽框选 + + var x = pos.x-pos0.x+1, y = pos.y-pos0.y+1; + var widthX = editor.widthsX[editor.info.images]; + // 懒得仔细处理了, 只允许左上往右下拉 + if (x <= 0 || y <= 0 || pos0.x < widthX[1]){ + + } else { + editor.info = editor.ids[idindex-(x-1)-(y-1)*(widthX[2]-widthX[1])]; + editor.uifunctions.locToPos(editor.uivalues.startLoc); //重置editor.pos + editor.uivalues.tileSize = [x, y]; + editor.dom.dataSelection.style.left = pos0.x * 32 + 'px'; + editor.dom.dataSelection.style.top = pos0.y * ysize + 'px'; + editor.dom.dataSelection.style.height = ysize*y - 6 + 'px'; + editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; + } + + } } tip.infos(JSON.parse(JSON.stringify(editor.info))); From ebbb4b8b46be2b152ec033ec0aba44938a336790 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 20:30:07 +0800 Subject: [PATCH 18/49] fix unhighlight button --- _server/editor_listen.js | 8 ++++++++ _server/editor_ui.js | 1 + 2 files changed, 9 insertions(+) diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 115d37d5..7a3b83b1 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -134,6 +134,14 @@ editor_listen_wrapper = function (editor) { editor.dom.moveLoc.onmousedown = null editor.dom.clearLoc.ontouchstart = editor.dom.clearLoc.onmousedown editor.dom.clearLoc.onmousedown = null + + // 不使用以下6语句, 会使得素材区手机无法拖动, 手机的框选素材只能放弃, 要通过弹框实现框选 + // editor.dom.iconLib.ontouchstart = editor.dom.iconLib.onmousedown + // editor.dom.iconLib.onmousedown = null + // editor.dom.iconLib.ontouchmove = editor.dom.iconLib.onmousemove + // editor.dom.iconLib.onmousemove = null + // editor.dom.iconLib.ontouchend = editor.dom.iconLib.onmouseup + // editor.dom.iconLib.onmouseup = null } editor.constructor.prototype.mode_listen = function (callback) { diff --git a/_server/editor_ui.js b/_server/editor_ui.js index c316d200..1bcd019d 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -236,6 +236,7 @@ editor_ui_wrapper = function (editor) { throw (err) } ; printf('地图保存成功'); + editor.uifunctions.unhighlightSaveFloorButton(); }); } selectBox.isSelected(false); From 9143d687d4639ec3eecac0342d87abe9fabae61a Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 21:11:50 +0800 Subject: [PATCH 19/49] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=94=BE=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/actions.js | 83 +++++++++++++++++++++++++++++++--------------- libs/control.js | 56 ++++++++++++++++++------------- libs/core.js | 5 +++ libs/ui.js | 7 ++-- styles.css | 2 +- v2.x-final更新.txt | 6 ++-- 6 files changed, 103 insertions(+), 56 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 0a9ed824..a05d286a 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1919,7 +1919,7 @@ actions.prototype._clickSwitchs = function (x, y) { var topIndex = this.HSIZE - parseInt((choices.length - 1) / 2) + (core.status.event.ui.offset || 0); var selection = y - topIndex; if (x < this.CHOICES_LEFT || x > this.CHOICES_RIGHT) { - if (selection != 2 && selection != 3 && selection != 4) return; + if (selection != 1 && selection != 2 && selection != 3 && selection != 4) return; } var width = choices[selection].width; var leftPos = (core.__PIXELS__ - width) / 2, rightPos = (core.__PIXELS__ + width) / 2; @@ -1928,32 +1928,32 @@ actions.prototype._clickSwitchs = function (x, y) { core.status.event.selection = selection; switch (selection) { case 0: - return this._clickSwitchs_bgm(); + return this._clickSwitchs_bgmSound(); case 1: - return this._clickSwitchs_sound(); - case 2: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_userVolume(-1); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_userVolume(1); return; - case 3: + case 2: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_moveSpeed(-10); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_moveSpeed(10); return; - case 4: + case 3: if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_floorChangeTime(-100); if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_floorChangeTime(100); return; + case 4: + if (x == leftGrid || x == leftGrid + 1) return this._clickSwitchs_setSize(-1); + if (x == rightGrid || x == rightGrid + 1) return this._clickSwitchs_setSize(1); + return; case 5: return this._clickSwitchs_displayEnemyDamage(); case 6: - return this._clickSwitchs_displayCritical(); + return this._clickSwitchs_displayCriticalExtra(); case 7: - return this._clickSwitchs_displayExtraDamage(); - case 8: return this._clickSwitchs_potionNoRouting(); - case 9: + case 8: return this._clickSwitchs_clickMove(); - case 10: + case 9: core.status.event.selection = 0; core.ui.drawSettings(); break; @@ -1961,13 +1961,23 @@ actions.prototype._clickSwitchs = function (x, y) { } } -actions.prototype._clickSwitchs_bgm = function () { - core.triggerBgm(); - core.ui.drawSwitchs(); -} - -actions.prototype._clickSwitchs_sound = function () { - core.musicStatus.soundStatus = !core.musicStatus.soundStatus; +actions.prototype._clickSwitchs_bgmSound = function () { + var bgm = core.musicStatus.bgmStatus; + var sound = core.musicStatus.soundStatus; + if (bgm && sound) { + sound = false; + } else if (bgm && !sound) { + bgm = false; + sound = true; + } else if (!bgm && sound) { + sound = false; + } else { + bgm = true; + sound = true; + } + if (bgm != core.musicStatus.bgmStatus) + core.triggerBgm(); + core.musicStatus.soundStatus = sound; core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); core.ui.drawSwitchs(); } @@ -1995,6 +2005,17 @@ actions.prototype._clickSwitchs_floorChangeTime = function (delta) { core.ui.drawSwitchs(); } +actions.prototype._clickSwitchs_setSize = function (delta) { + var index = core.domStyle.availableScale.indexOf(core.domStyle.scale); + if (index < 0) return; + index += delta; + if (index < 0 || index >= core.domStyle.availableScale.length); + core.domStyle.scale = core.domStyle.availableScale[index]; + core.setLocalStorage('scale', core.domStyle.scale); + core.resize(); + core.ui.drawSwitchs(); +} + actions.prototype._clickSwitchs_displayEnemyDamage = function () { core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; core.updateDamage(); @@ -2002,16 +2023,26 @@ actions.prototype._clickSwitchs_displayEnemyDamage = function () { core.ui.drawSwitchs(); } -actions.prototype._clickSwitchs_displayCritical = function () { - core.flags.displayCritical = !core.flags.displayCritical; +actions.prototype._clickSwitchs_displayCriticalExtra = function () { + var critical = core.flags.displayCritical; + var extra = core.flags.displayExtraDamage; + if (critical && extra) { + extra = false; + } else if (critical && !extra) { + critical = false; + extra = true; + } else if (!critical && extra) { + critical = false; + extra = false; + } else { + critical = true; + extra = true; + } + + core.flags.displayCritical = critical; + core.flags.displayExtraDamage = extra; core.updateDamage(); core.setLocalStorage('critical', core.flags.displayCritical); - core.ui.drawSwitchs(); -} - -actions.prototype._clickSwitchs_displayExtraDamage = function () { - core.flags.displayExtraDamage = !core.flags.displayExtraDamage; - core.updateDamage(); core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); core.ui.drawSwitchs(); } diff --git a/libs/control.js b/libs/control.js index 381584ee..caa6189f 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2679,17 +2679,28 @@ control.prototype._doResize = function (obj) { control.prototype.resize = function() { if (main.mode=='editor')return; var clientWidth = main.dom.body.clientWidth, clientHeight = main.dom.body.clientHeight; - var CANVAS_WIDTH = core.__PIXELS__ + 6, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31) + 3; + var CANVAS_WIDTH = core.__PIXELS__, BAR_WIDTH = Math.round(core.__PIXELS__ * 0.31); + var BORDER = 3; - if (clientWidth >= CANVAS_WIDTH + BAR_WIDTH || (clientWidth > clientHeight && clientHeight < CANVAS_WIDTH)) { + if (clientWidth - 3 * BORDER >= CANVAS_WIDTH + BAR_WIDTH || (clientWidth > clientHeight && clientHeight - 2 * BORDER < CANVAS_WIDTH)) { // 横屏 core.domStyle.isVertical = false; - core.domStyle.scale = Math.min(1, clientHeight / CANVAS_WIDTH); + + core.domStyle.availableScale = []; + [1, 1.25, 1.5, 2].forEach(function (v) { + if (clientWidth - 3 * BORDER >= v*(CANVAS_WIDTH + BAR_WIDTH) && clientHeight - 2 * BORDER >= v * CANVAS_WIDTH) { + core.domStyle.availableScale.push(v); // 64x64 + } + }); + if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) { + core.domStyle.scale = Math.min(1, (clientHeight - 2 * BORDER) / CANVAS_WIDTH); + } } else { // 竖屏 core.domStyle.isVertical = true; - core.domStyle.scale = Math.min(1, clientWidth / CANVAS_WIDTH); + core.domStyle.scale = Math.min(1, (clientWidth - 2 * BORDER) / CANVAS_WIDTH); + core.domStyle.availableScale = []; } var statusDisplayArr = this._shouldDisplayStatus(), count = statusDisplayArr.length; @@ -2705,15 +2716,16 @@ control.prototype.resize = function() { clientWidth: clientWidth, clientHeight: clientHeight, CANVAS_WIDTH: CANVAS_WIDTH, + BORDER: BORDER, BAR_WIDTH: BAR_WIDTH, - outerSize: CANVAS_WIDTH * core.domStyle.scale, + outerSize: CANVAS_WIDTH * core.domStyle.scale + 2 * BORDER, globalAttribute: globalAttribute, border: '3px ' + globalAttribute.borderColor + ' solid', statusDisplayArr: statusDisplayArr, count: count, col: col, - statusBarHeightInVertical: core.domStyle.isVertical ? (32 * col + 6) * core.domStyle.scale + 6 : 0, - toolbarHeightInVertical: core.domStyle.isVertical ? 44 * core.domStyle.scale + 6 : 0, + statusBarHeightInVertical: core.domStyle.isVertical ? (32 * col + 6) * core.domStyle.scale + 2 * BORDER : 0, + toolbarHeightInVertical: core.domStyle.isVertical ? 44 * core.domStyle.scale + 2 * BORDER : 0, is15x15: core.__SIZE__ == 15 }; @@ -2730,7 +2742,7 @@ control.prototype._resize_gameGroup = function (obj) { totalHeight = obj.outerSize + obj.statusBarHeightInVertical + obj.toolbarHeightInVertical } else { - totalWidth = (obj.CANVAS_WIDTH + obj.BAR_WIDTH) * core.domStyle.scale; + totalWidth = obj.outerSize + obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER; totalHeight = obj.outerSize; } gameGroup.style.width = totalWidth + "px"; @@ -2739,8 +2751,8 @@ control.prototype._resize_gameGroup = function (obj) { gameGroup.style.top = (obj.clientHeight - totalHeight) / 2 + "px"; // floorMsgGroup var floorMsgGroup = core.dom.floorMsgGroup; - floorMsgGroup.style.width = obj.outerSize - 6 + "px"; - floorMsgGroup.style.height = totalHeight - 6 + "px"; + floorMsgGroup.style.width = obj.outerSize - 2 * obj.BORDER + "px"; + floorMsgGroup.style.height = totalHeight - 2 * obj.BORDER + "px"; floorMsgGroup.style.background = obj.globalAttribute.floorChangingBackground; floorMsgGroup.style.color = obj.globalAttribute.floorChangingTextColor; // musicBtn @@ -2754,7 +2766,7 @@ control.prototype._resize_gameGroup = function (obj) { } control.prototype._resize_canvas = function (obj) { - var innerSize = (obj.outerSize - 6) + "px"; + var innerSize = (obj.CANVAS_WIDTH * core.domStyle.scale) + "px"; for (var i = 0; i < core.dom.gameCanvas.length; ++i) core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[i].style.height = innerSize; core.dom.gif.style.width = core.dom.gif.style.height = innerSize; @@ -2779,8 +2791,6 @@ control.prototype._resize_canvas = function (obj) { // resize next main.dom.next.style.width = main.dom.next.style.height = 5 * core.domStyle.scale + "px"; main.dom.next.style.borderBottomWidth = main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px"; - - } control.prototype._resize_statusBar = function (obj) { @@ -2793,7 +2803,7 @@ control.prototype._resize_statusBar = function (obj) { statusBar.style.fontSize = 16 * core.domStyle.scale + "px"; } else { - statusBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + statusBar.style.width = (obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER) + "px"; statusBar.style.height = obj.outerSize + "px"; statusBar.style.background = obj.globalAttribute.statusLeftBackground; // --- 计算文字大小 @@ -2805,22 +2815,22 @@ control.prototype._resize_statusBar = function (obj) { statusBar.style.borderBottom = core.domStyle.isVertical ? '' : obj.border; // 自绘状态栏 if (core.domStyle.isVertical) { - core.dom.statusCanvas.style.width = obj.outerSize - 6 + "px"; - core.dom.statusCanvas.width = core.__PIXELS__; + core.dom.statusCanvas.style.width = obj.CANVAS_WIDTH + "px"; + core.dom.statusCanvas.width = obj.CANVAS_WIDTH; core.dom.statusCanvas.style.height = obj.statusBarHeightInVertical - 3 + "px"; core.dom.statusCanvas.height = obj.col * 32 + 9; } else { - core.dom.statusCanvas.style.width = obj.BAR_WIDTH * core.domStyle.scale - 3 + "px"; - core.dom.statusCanvas.width = obj.BAR_WIDTH - 3; - core.dom.statusCanvas.style.height = obj.outerSize - 6 + "px"; - core.dom.statusCanvas.height = core.__PIXELS__; + core.dom.statusCanvas.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + core.dom.statusCanvas.width = obj.BAR_WIDTH; + core.dom.statusCanvas.style.height = obj.outerSize - 2 * obj.BORDER + "px"; + core.dom.statusCanvas.height = obj.CANVAS_WIDTH; } core.dom.statusCanvas.style.display = core.flags.statusCanvas ? "block" : "none"; } control.prototype._resize_status = function (obj) { - var statusHeight = (core.domStyle.isVertical ? 1 : (core.__HALF_SIZE__ + 3) / obj.count) * 32 * core.domStyle.scale * 0.8; + var statusHeight = (core.domStyle.isVertical ? 1 : (core.__HALF_SIZE__ + obj.BORDER) / obj.count) * 32 * core.domStyle.scale * 0.8; // status for (var i = 0; i < core.dom.status.length; ++i) { var id = core.dom.status[i].id, style = core.dom.status[i].style; @@ -2828,7 +2838,7 @@ control.prototype._resize_status = function (obj) { style.display = core.flags.statusCanvas || obj.statusDisplayArr.indexOf(id) < 0 ? 'none': 'block'; style.margin = 3 * core.domStyle.scale + "px"; style.height = statusHeight + "px"; - style.maxWidth = obj.BAR_WIDTH * core.domStyle.scale * (core.domStyle.isVertical ? 0.95 : 1) + "px"; + style.maxWidth = obj.BAR_WIDTH * core.domStyle.scale * (core.domStyle.isVertical ? 0.95 : 1) + obj.BORDER + "px"; if (obj.is15x15 && !core.domStyle.isVertical) style.marginLeft = 11 * core.domStyle.scale + "px"; } @@ -2860,7 +2870,7 @@ control.prototype._resize_toolBar = function (obj) { toolBar.style.background = obj.globalAttribute.toolsBackground; } else { - toolBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + "px"; + toolBar.style.width = obj.BAR_WIDTH * core.domStyle.scale + obj.BORDER + "px"; toolBar.style.top = 0.718 * obj.outerSize + "px"; toolBar.style.height = 0.281 * obj.outerSize + "px"; toolBar.style.background = 'transparent'; diff --git a/libs/core.js b/libs/core.js index dc5ee70d..0d9281f4 100644 --- a/libs/core.js +++ b/libs/core.js @@ -84,6 +84,7 @@ function core() { // 样式 this.domStyle = { scale: 1.0, + availableScale: [], isVertical: false, showStatusBar: true, toolbarBtn: false, @@ -291,6 +292,10 @@ core.prototype._init_sys_flags = function () { // 行走速度 core.values.moveSpeed = core.getLocalStorage('moveSpeed', 100); core.values.floorChangeTime = core.getLocalStorage('floorChangeTime', 500); + core.domStyle.scale = core.getLocalStorage('scale', 1); + if (core.domStyle.scale != 1) { + core.resize(); + } } core.prototype._init_platform = function () { diff --git a/libs/ui.js b/libs/ui.js index 690f9984..79836eee 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1655,16 +1655,15 @@ ui.prototype.drawWaiting = function(text) { ui.prototype.drawSwitchs = function() { core.status.event.id = 'switchs'; var choices = [ - "背景音乐: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]"), - "背景音效: "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), + "音乐/音效: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]") + " "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), //显示为 0~10 十挡 " < 音量:" + Math.round(Math.sqrt(100 * core.musicStatus.userVolume)) + " > ", //数值越大耗时越长 " < 步时:" + core.values.moveSpeed + " > ", " < 转场:" + core.values.floorChangeTime + " > ", + " < 放缩:" + Math.max(core.domStyle.scale, 1) + "x > ", "怪物显伤: "+(core.flags.displayEnemyDamage ? "[ON]" : "[OFF]"), - "临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"), - "领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), + "临界/领域: "+(core.flags.displayCritical ? "[ON]" : "[OFF]")+" "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), "血瓶绕路: "+(core.hasFlag('__potionNoRouting__') ? "[ON]":"[OFF]"), "单击瞬移: "+(!core.hasFlag("__noClickMove__") ? "[ON]":"[OFF]"), "返回主菜单" diff --git a/styles.css b/styles.css index d981dfdf..999e30f4 100644 --- a/styles.css +++ b/styles.css @@ -74,7 +74,7 @@ color: #fff; font-size: 0.6rem; position: absolute; - top: 8%; + top: 10%; left: 5%; z-index: 15; } diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index a6d4e1d7..ba14b148 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -51,7 +51,7 @@ 地图拉框选择复制剪切删除 额外素材区拖动选择一个区域 (已完成!) 素材替换 -大屏幕下放大游戏界面 +(已完成!) 大屏幕下放大游戏界面 (已完成!) 最近使用/最常使用的图块 (已完成!) loader并行加载 合并items.js @@ -60,6 +60,8 @@ (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) 装备同时加属性和比例 +removeMap和resumeMap + ------------- @@ -93,7 +95,7 @@ (已完成!) 27. 勇士后退时跟随者很鬼畜,建议优化(每步聚集算是一种简陋的办法) (不处理) 28. 勇士的移动帧只有2,建议改为允许作者指定 (不处理) 29. 建议加一对“勇士开始抖动”和“勇士停止抖动”事件指令,来让勇士像图块一样原地抖动(即全局动画)。目前这个效果还只能通过隐藏勇士(或切换透明行走图)并转变图块/图层块来实现且只能用于事件处理中QAQ -30. 建议加一个“视角锁定”事件指令,从而允许用事件改变勇士位置、朝向或行走图时不会使视角重置到以其为中心,用于一些演出效果 +(不处理) 30. 建议加一个“视角锁定”事件指令,从而允许用事件改变勇士位置、朝向或行走图时不会使视角重置到以其为中心,用于一些演出效果 (已完成!) 31. 楼层切换事件(绿点)一旦使用blockly编辑就会无视全塔属性的切换时间,只能手动在表格中删除时间(数据相关“楼层切换”事件指令也有这个问题,有群友还希望这个默认时间能像步时和音量一样由玩家设定来节约拆塔时间)。使用blockly编辑也无法做出“ignore:true”的效果(用来覆盖全塔属性的禁止穿透),建议优化 (已完成!) 32. (关于CC的来回回档优化版)据其称,清空存档后会出现bug,此外他使用了W键导致二倍斩失效了(js的switch语句遇到duplicate cases居然不报错吗...) (已完成!) 33. (疑似已被CC修复)楼传平面塔模式在记录离开位置时会错误地把读档也算作离开 From dc5ff0e309f3ce37d41f0a5be891fc3b7319af67 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 21:56:25 +0800 Subject: [PATCH 20/49] =?UTF-8?q?=E9=A2=9D=E5=A4=96=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E6=8B=96=E6=A1=86=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 2 +- _server/editor_mappanel.js | 6 +++--- _server/editor_materialpanel.js | 21 +++++++++++++++++++-- libs/core.js | 8 +++++--- v2.x-final更新.txt | 4 ++-- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index de9c25ce..c2843696 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -105,7 +105,7 @@ function editor() { // tile tileSize: [1,1], - startLoc: {"x":0,"y":0}, + startLoc: null, lockMode: false, // 最近使用的图块 diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 93d57fed..144e54ac 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -655,9 +655,9 @@ editor_mappanel_wrapper = function (editor) { * 切换画笔模式 */ editor.uifunctions.brushMod3_onchange = function () { - if (!editor.config.get('alertTileMode') && - !confirm("从V2.6.6开始,tileset贴图模式已被废弃。\n请右键额外素材,并输入所需要绘制的宽高,然后单击地图以绘制一个区域。\n\n点取消将不再显示此提示。")) { - editor.config.set('alertTileMode', true); + if (!editor.config.get('alertTileModeV2.7') && + !confirm("从V2.7开始,请直接素材区拖框进行绘制区域。\n\n点取消将不再显示此提示。")) { + editor.config.set('alertTileModeV2.7', true); } // tip.showHelp(5) tip.isSelectedBlock(false) diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js index 7aa54339..8a6704fa 100644 --- a/_server/editor_materialpanel.js +++ b/_server/editor_materialpanel.js @@ -77,6 +77,8 @@ editor_materialpanel_wrapper = function (editor) { editor.uivalues.startLoc={ 'x': scrollLeft + e.clientX + editor.dom.iconLib.scrollLeft - right.offsetLeft - editor.dom.iconLib.offsetLeft, 'y': scrollTop + e.clientY + editor.dom.iconLib.scrollTop - right.offsetTop - editor.dom.iconLib.offsetTop, + 'px': e.clientX, + 'py': e.clientY, 'size': 32 }; } @@ -89,6 +91,14 @@ editor_materialpanel_wrapper = function (editor) { e.stopPropagation(); e.preventDefault(); lastmoveE=e; + if (!editor.uivalues.startLoc) return; + var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); + + editor.dom.dataSelection.style.left = 32 * pos0.x + 'px'; + editor.dom.dataSelection.style.top = 32 * pos0.y + 'px'; + editor.dom.dataSelection.style.width = e.clientX - editor.uivalues.startLoc.px + 'px'; + editor.dom.dataSelection.style.height = e.clientY - editor.uivalues.startLoc.py + 'px'; + editor.dom.dataSelection.style.display = 'block'; } /** @@ -96,6 +106,9 @@ editor_materialpanel_wrapper = function (editor) { * 素材区的单击/拖拽事件 */ editor.uifunctions.material_onup = function (ee) { + var startLoc = editor.uivalues.startLoc; + editor.uivalues.startLoc = null; + var e=lastmoveE; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; @@ -107,7 +120,7 @@ editor_materialpanel_wrapper = function (editor) { }; editor.loc = loc; editor.uivalues.tileSize = [1,1]; - var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); + var pos0 = editor.uifunctions.locToPos(startLoc); var pos = editor.uifunctions.locToPos(loc); for (var spriter in editor.widthsX) { if (pos.x >= editor.widthsX[spriter][1] && pos.x < editor.widthsX[spriter][2]) { @@ -178,6 +191,9 @@ editor_materialpanel_wrapper = function (editor) { } if (editor.info.isTile && e.button == 2) { //这段改一改之类的应该能给手机用,就不删了 + // 废弃好了 + alert('V2.7后右键已被废弃,请直接素材区拖框选中区域。'); + /* var v = prompt("请输入该额外素材区域绑定宽高,以逗号分隔", "1,1"); if (v != null && /^\d+,\d+$/.test(v)) { v = v.split(","); @@ -193,6 +209,7 @@ editor_materialpanel_wrapper = function (editor) { editor.dom.dataSelection.style.width = 32*x - 6 + 'px'; } } + */ } if (editor.info.isTile && e.button != 2) { //左键拖拽框选 @@ -203,7 +220,7 @@ editor_materialpanel_wrapper = function (editor) { } else { editor.info = editor.ids[idindex-(x-1)-(y-1)*(widthX[2]-widthX[1])]; - editor.uifunctions.locToPos(editor.uivalues.startLoc); //重置editor.pos + editor.uifunctions.locToPos(startLoc); //重置editor.pos editor.uivalues.tileSize = [x, y]; editor.dom.dataSelection.style.left = pos0.x * 32 + 'px'; editor.dom.dataSelection.style.top = pos0.y * ysize + 'px'; diff --git a/libs/core.js b/libs/core.js index 0d9281f4..de495399 100644 --- a/libs/core.js +++ b/libs/core.js @@ -292,9 +292,11 @@ core.prototype._init_sys_flags = function () { // 行走速度 core.values.moveSpeed = core.getLocalStorage('moveSpeed', 100); core.values.floorChangeTime = core.getLocalStorage('floorChangeTime', 500); - core.domStyle.scale = core.getLocalStorage('scale', 1); - if (core.domStyle.scale != 1) { - core.resize(); + if (main.mode != 'editor') { + core.domStyle.scale = core.getLocalStorage('scale', 1); + if (core.domStyle.scale != 1) { + core.resize(); + } } } diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index ba14b148..5eb614cf 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -44,12 +44,12 @@ (已完成!) 重构全局商店! (已完成!) 读档时色调数据丢失 (已完成!) 圆角边框 -像素高分辨率问题 +(不处理) 像素高分辨率问题 (已完成!) 道具效果优化,删除部分道具相关的开关 (已完成!) 素材列表选择 (已完成!) 油漆桶,动态更改地图大小 地图拉框选择复制剪切删除 -额外素材区拖动选择一个区域 +(已完成!) 额外素材区拖动选择一个区域 (已完成!) 素材替换 (已完成!) 大屏幕下放大游戏界面 (已完成!) 最近使用/最常使用的图块 From 075390df0a8cf878362d4dacab341815e843bcd6 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Tue, 19 May 2020 22:57:24 +0800 Subject: [PATCH 21/49] =?UTF-8?q?tileset=E5=B9=B3=E9=93=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _docs/personalization.md | 2 +- _server/editor_mappanel.js | 11 +++++------ _server/editor_ui.js | 2 +- editor-mobile.html | 2 +- editor.html | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/_docs/personalization.md b/_docs/personalization.md index ac7ff766..356bb46a 100644 --- a/_docs/personalization.md +++ b/_docs/personalization.md @@ -236,7 +236,7 @@ ID必须由数字字母下划线组成,数字在1000以内,且均不能和 除此之外,额外素材在游戏中的使用和正式素材都是一致的,也能在前景或背景图层绘制。 -额外素材可以使用“tileset贴图”的方式进行绘制,一次绘制一个矩形区域。 +额外素材可以使用“tileset平铺”的方式进行绘制,一次绘制一个矩形区域。 “辅助工具”中提供了“额外素材合并”,如果使用此功能,请不要对额外素材进行基于ID、索引和数字的判定和读写等操作,如确有此需求,可以创建一些玩家不可达也不可预览的隐藏样板层,然后用等量代换的办法去从样板层取用。 ## 自定义道具效果 diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 144e54ac..f2f850ac 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -240,12 +240,11 @@ editor_mappanel_wrapper = function (editor) { var x0 = editor.uivalues.stepPostfix[0].x; var y0 = editor.uivalues.stepPostfix[0].y; var idnum = editor.info.idnum; + var pmod=function(a,b){return (a%b+b)%b;} for (var ii = 0; ii < editor.uivalues.stepPostfix.length; ii++) { - if (editor.uivalues.stepPostfix[ii].y != y0) { - y0++; - idnum += imgWidth; - } - editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.ids[editor.indexs[idnum + editor.uivalues.stepPostfix[ii].x - x0]]; + var dx=pmod(editor.uivalues.stepPostfix[ii].x-x0,editor.uivalues.tileSize[0]); + var dy=pmod(editor.uivalues.stepPostfix[ii].y-y0,editor.uivalues.tileSize[1]); + editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.ids[editor.indexs[idnum + dx+dy*imgWidth]]; } } else { // 检测是否是填充模式 @@ -661,7 +660,7 @@ editor_mappanel_wrapper = function (editor) { } // tip.showHelp(5) tip.isSelectedBlock(false) - tip.msgs[11] = String('tileset贴图模式下可以按选中tileset素材,并在地图上拖动来一次绘制一个区域'); + tip.msgs[11] = String('tileset平铺模式下可以按选中tileset素材,并在地图上拖动来一次绘制一个区域'); tip.whichShow(12); editor.brushMod = editor.dom.brushMod3.value; } diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 1bcd019d..3d528f20 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -30,7 +30,7 @@ editor_ui_wrapper = function (editor) { '双击事件编辑器的图块可以进行长文本编辑/脚本编辑/地图选点/UI绘制预览等操作', 'ESC或点击空白处可以自动保存当前修改', 'H键可以打开操作帮助哦', - 'tileset贴图模式可以在地图上拖动来一次绘制一个区域;右键额外素材也可以绑定宽高', + 'tileset平铺模式可以在地图上拖动来平铺框选的图形', '可以拖动地图上的图块和事件,或按Ctrl+C, Ctrl+X和Ctrl+V进行复制,剪切和粘贴,Delete删除', 'Alt+数字键保存图块,数字键读取保存的图块', ]; diff --git a/editor-mobile.html b/editor-mobile.html index df00077d..8bc87798 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -386,7 +386,7 @@ 线 矩形 - tileset贴图 + tileset平铺 填充 From fb49beb1fdeb6083e4deeedf8d386be49f6b4c67 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 19 May 2020 23:03:53 +0800 Subject: [PATCH 22/49] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A0=8D=E5=B1=82?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/table/plugins.comment.js | 6 +++++ libs/events.js | 2 +- libs/maps.js | 23 ++++------------- project/materials/icons.png | Bin 8414 -> 8832 bytes project/materials/icons_old.png | Bin 0 -> 26359 bytes project/plugins.js | 43 +++++++++++++++++++++++++++++++ 6 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 project/materials/icons_old.png diff --git a/_server/table/plugins.comment.js b/_server/table/plugins.comment.js index f012cdc1..059b7e5d 100644 --- a/_server/table/plugins.comment.js +++ b/_server/table/plugins.comment.js @@ -26,6 +26,12 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_range": "typeof(thiseval)=='string' || thiseval==null", "_data": "灯光效果" }, + "removeMap": { + "_leaf": true, + "_type": "textarea", + "_range": "typeof(thiseval)=='string' || thiseval==null", + "_data": "砍层插件" + }, "itemShop": { "_leaf": true, "_type": "textarea", diff --git a/libs/events.js b/libs/events.js index 3e2e46f6..6fa74489 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2067,7 +2067,7 @@ events.prototype._action_wait = function (data, x, y, prefix) { } else if (data.timeout) { core.status.event.interval = setTimeout(function() { core.status.route.push("input:none"); - core.removeFlag("type"); + core.setFlag("type", -1); core.doAction(); }, data.timeout); } diff --git a/libs/maps.js b/libs/maps.js index a2477497..9254a1cc 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -42,6 +42,10 @@ maps.prototype.loadFloor = function (floorId, map) { if (notCopy.indexOf(name) == -1 && map[name] != null) content[name] = core.clone(map[name]); } + if (map.deleted) { + content['blocks'] = []; + return content; + } map = this.decompressMap(map.map, floorId); // 事件处理 content['blocks'] = this._mapIntoBlocks(map, floor, floorId); @@ -267,7 +271,7 @@ maps.prototype.saveMap = function (floorId) { } // 砍层状态:直接返回 if (main.mode == 'play' && (flags.__removed__ || []).indexOf(floorId) >= 0) { - return { canFlyTo: false, cannotViewMap: true }; + return { deleted: true, canFlyTo: false, cannotViewMap: true }; } var map = maps[floorId], floor = core.floors[floorId]; @@ -305,23 +309,6 @@ maps.prototype.loadMap = function (data, floorId) { return this.loadFloor(floorId, data[floorId]); } -////// 删除地图,不计入存档 ////// -maps.prototype.removeMaps = function (fromId, toId) { - if (!core.isPlaying()) return; - toId = toId || fromId; - var fromIndex = core.floorIds.indexOf(fromId), - toIndex = core.floorIds.indexOf(toId); - if (toIndex < 0) toIndex = core.floorIds.length - 1; - flags.__removed__ = flags.__removed__ || []; - for (var i = fromIndex; i <= toIndex; ++i) { - var floorId = core.floorIds[i]; - delete flags.__visited__[floorId]; - flags.__removed__.push(floorId); - core.status.maps[floorId].canFlyTo = false; - core.status.maps[floorId].cannotViewMap = true; - } -} - ////// 更改地图画布的尺寸 maps.prototype.resizeMap = function (floorId) { floorId = floorId || core.status.floorId; diff --git a/project/materials/icons.png b/project/materials/icons.png index 2a602bf3af825442d1c84375209eb8ff114c90e8..a24d21eb6d742cb2ad45b9255c545ecfe189f22d 100644 GIT binary patch literal 8832 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 Date: Tue, 19 May 2020 23:27:35 +0800 Subject: [PATCH 23/49] enemy.experience->exp --- project/enemys.js | 162 ++++++++++++++++++++++----------------------- v2.x-final更新.txt | 4 +- 2 files changed, 84 insertions(+), 82 deletions(-) diff --git a/project/enemys.js b/project/enemys.js index c3de9b33..cf035ecf 100644 --- a/project/enemys.js +++ b/project/enemys.js @@ -1,84 +1,84 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = { - "greenSlime": {"name":"绿头怪","hp":100,"atk":120,"def":0,"money":1,"experience":1,"point":0,"special":[1,5,7,8]}, - "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":[16,18],"value":10}, - "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"experience":0,"point":0,"special":[1,9]}, - "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"experience":0,"point":0,"special":1}, - "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redBat": {"name":"红蝙蝠","hp":100,"atk":120,"def":0,"money":5,"experience":0,"point":0,"special":4}, - "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "rock": {"name":"石头人","hp":100,"atk":120,"def":0,"money":4,"experience":0,"point":0,"special":3}, - "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"experience":0,"point":1,"special":2}, - "redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"experience":0,"point":0,"special":15,"value":100,"range":2}, - "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"experience":0,"point":0,"special":15,"value":200,"zoneSquare":true}, - "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"experience":0,"point":0,"special":[5,23]}, - "soldier": {"name":"冥战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redKnight": {"name":"红骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"experience":0,"point":0,"special":8}, - "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "poisonSkeleton": {"name":"紫骷髅","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"experience":0,"point":0,"special":13}, - "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"experience":0,"point":0,"special":18,"value":20}, - "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"experience":0,"point":0,"special":14}, - "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"experience":0,"point":0,"special":6,"n":8}, - "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"experience":0,"point":0,"special":12}, - "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":18,"value":20}, - "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":1,"def":0,"money":0,"experience":0,"point":0,"special":[2,3]}, - "frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ghostWarrior": {"name":"冥队长","hp":100,"atk":120,"def":0,"money":8,"experience":0,"point":0,"special":7}, - "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"experience":0,"point":0,"special":[10,21],"atkValue":2,"defValue":3}, - "yellowGT": {"name":"初级卫兵","hp":100,"atk":120,"def":0,"money":10,"experience":0,"point":0,"special":0}, - "blueGT": {"name":"中级卫兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "redGT": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blackMS": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"experience":1000,"point":0,"special":0,"notBomb":true}, - "yellowMS": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenMS": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"experience":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true}, - "blueMS": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"experience":0,"point":0,"special":16}, - "redMS": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilPrincess": {"name":"痛苦魔女","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "crismonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "mutantSlimeman": {"name":"变异战士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "greenGT": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0}, - "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"experience":0,"point":0,"special":0} + "greenSlime": {"name":"绿头怪","hp":100,"atk":120,"def":0,"money":1,"exp":1,"point":0,"special":[1,5,7,8]}, + "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[16,18],"value":10}, + "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":[1,9]}, + "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":1}, + "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redBat": {"name":"红蝙蝠","hp":100,"atk":120,"def":0,"money":5,"exp":0,"point":0,"special":4}, + "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "rock": {"name":"石头人","hp":100,"atk":120,"def":0,"money":4,"exp":0,"point":0,"special":3}, + "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":2}, + "redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"exp":0,"point":0,"special":15,"value":100,"range":2}, + "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true}, + "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":0,"point":0,"special":[5,23]}, + "soldier": {"name":"冥战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redKnight": {"name":"红骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8}, + "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "poisonSkeleton": {"name":"紫骷髅","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13}, + "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20}, + "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14}, + "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"exp":0,"point":0,"special":6,"n":8}, + "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":12}, + "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20}, + "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":1,"def":0,"money":0,"exp":0,"point":0,"special":[2,3]}, + "frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ghostWarrior": {"name":"冥队长","hp":100,"atk":120,"def":0,"money":8,"exp":0,"point":0,"special":7}, + "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[10,21],"atkValue":2,"defValue":3}, + "yellowGT": {"name":"初级卫兵","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":0}, + "blueGT": {"name":"中级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "redGT": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blackMS": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true}, + "yellowMS": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenMS": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true}, + "blueMS": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":16}, + "redMS": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilPrincess": {"name":"痛苦魔女","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "crismonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "mutantSlimeman": {"name":"变异战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "greenGT": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, + "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0} } \ No newline at end of file diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 5eb614cf..1d0849d9 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -60,7 +60,9 @@ (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) 装备同时加属性和比例 -removeMap和resumeMap +(已完成!) removeMap和resumeMap +右键图块选择复制/粘贴事件 +showImage, drawImage等加上对称选项 ------------- From 9818065eae9515b3bec841aec10ff822e37faf23 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 11:14:19 +0800 Subject: [PATCH 24/49] Update _drawHero_updateViewport --- libs/control.js | 4 ++++ project/plugins.js | 43 ++++++------------------------------------- 2 files changed, 10 insertions(+), 37 deletions(-) diff --git a/libs/control.js b/libs/control.js index 381584ee..2007912a 100644 --- a/libs/control.js +++ b/libs/control.js @@ -786,6 +786,10 @@ control.prototype.drawHero = function (status, offset) { this._drawHero_draw(direction, x, y, status, offset); } + this._drawHero_updateViewport(); +} + +control.prototype._drawHero_updateViewport = function () { core.control.updateViewport(); core.setGameCanvasTranslate('hero', 0, 0); } diff --git a/project/plugins.js b/project/plugins.js index b8a4776e..58445b73 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -618,41 +618,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }; }; - // 其实只注释了最后一行,只能这样了 - control.drawHero = function (status, offset) { - if (!core.isPlaying() || !core.status.floorId || core.status.gameOver) return; - var x = core.getHeroLoc('x'), - y = core.getHeroLoc('y'), - direction = core.getHeroLoc('direction'); - status = status || 'stop'; - offset = offset || 0; - var way = core.utils.scan[direction]; - var dx = way.x, - dy = way.y, - offsetX = dx * offset, - offsetY = dy * offset; - core.bigmap.offsetX = core.clamp((x - core.__HALF_SIZE__) * 32 + offsetX, 0, 32 * core.bigmap.width - core.__PIXELS__); - core.bigmap.offsetY = core.clamp((y - core.__HALF_SIZE__) * 32 + offsetY, 0, 32 * core.bigmap.height - core.__PIXELS__); - core.clearAutomaticRouteNode(x + dx, y + dy); - core.clearMap('hero'); - - if (!core.hasFlag('hideHero')) { - this._drawHero_getDrawObjs(direction, x, y, status, offset).forEach(function (block) { - core.drawImage('hero', block.img, block.heroIcon[block.status] * block.width, - block.heroIcon.loc * block.height, block.width, block.height, - block.posx + (32 - block.width) / 2, block.posy + 32 - block.height, block.width, block.height); - }); - } - - core.control.updateViewport(); - //core.setGameCanvasTranslate('hero', 0, 0); - }; - - // 复写转发 - core.drawHero = function (status, offset) { - return core.control.drawHero(status, offset); - }; - // 创建摄像机对象 this.camera = new this.Camera(); @@ -661,13 +626,17 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = this.camera.update(); }; + core.control._drawHero_updateViewport = function () { + core.control.updateViewport(); + } + // 代理原本的镜头事件 - control.updateViewport = function () { + core.control.updateViewport = function () { core.plugin.camera.requestCameraUpdate(); }; // 更变楼层的行为追加,重置镜头 - events.prototype.changingFloor = function (floorId, heroLoc) { + core.events.changingFloor = function (floorId, heroLoc) { this.eventdata.changingFloor(floorId, heroLoc); core.plugin.camera.resetCamera(); }; From d1edf27dde922759fa9d60ac3995f15c4505f22a Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 11:28:56 +0800 Subject: [PATCH 25/49] fix core.status.floorId in afterXXX --- project/functions.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/project/functions.js b/project/functions.js index cfa557c9..313cbd28 100644 --- a/project/functions.js +++ b/project/functions.js @@ -358,7 +358,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } // 如果该点存在事件 -- V2.5.4 以后阻击怪也可以有战后事件了 - core.push(todo, core.floors[core.status.floorId].afterBattle[x + "," + y]); + if (core.status.floorId != null) { + core.push(todo, core.floors[core.status.floorId].afterBattle[x + "," + y]); + } // 在这里增加其他的自定义事件需求 /* @@ -385,6 +387,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var todo = []; // 检查该点的获得开门后事件。 + if (core.status.floorId == null) return; var event = core.floors[core.status.floorId].afterOpenDoor[x + "," + y]; if (event) core.unshift(todo, event); @@ -403,6 +406,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var todo = []; // 检查该点的获得道具后事件。 + if (core.status.floorId == null) return; var event = core.floors[core.status.floorId].afterGetItem[x + "," + y]; if (event && (event instanceof Array || !isGentleClick || !event.disableOnGentleClick)) { core.unshift(todo, event); From 7b54f0d3d35373c74124e65cb61218987260cc43 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 13:58:42 +0800 Subject: [PATCH 26/49] =?UTF-8?q?=E8=A3=85=E5=A4=87=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=95=B0=E5=80=BC=E5=92=8C=E7=99=BE=E5=88=86?= =?UTF-8?q?=E6=AF=94=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 62 ++++++++++++++++++++++++++++++++++++-- _server/MotaActionParse.js | 16 ++++++++++ _server/editor_blockly.js | 5 ++- _server/table/comment.js | 6 ++-- editor-mobile.html | 1 + editor.html | 1 + libs/items.js | 44 ++++++++++----------------- libs/ui.js | 40 +++++++++++------------- project/items.js | 62 ++++++++++++++++++++++++++------------ 9 files changed, 161 insertions(+), 76 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 725b71f4..023bd8fa 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -358,6 +358,60 @@ var code = '{"title": "'+EvalString_0+'", "name": "'+EvalString_1+'", "hard": '+ return code; */; +// equip 事件编辑器入口之一 +equip_m + : '装备' '类型' EvalString '装备动画(第一个装备格有效)' IdString? BGNL? '数值提升项' equipList+ '百分比提升项' equipList+ BEND + + +/* equip_m +tooltip : 装备 +default : ['0', ''] +helpUrl : https://h5mota.com/games/template/_docs/#/event +if (!/^\d+$/.test(EvalString_0)) { + EvalString_0 = '"' + EvalString_0 + '"'; +} +IdString_0 = IdString_0 && (', "animate": "'+IdString_0+'"'); +var code = '{"type": '+EvalString_0+IdString_0+', "value": {\n'+equipList_0+'\n}, "percentage": {\n'+equipList_1+'\n}}'; +return code; +*/; + +equipList + : equipKnown + | equipUnknown + | equipEmpty; + + +equipKnown + : Equip_List ':' Number BEND + + +/* equipKnown +tooltip : 装备项 +default : ['atk', 10] +helpUrl : https://h5mota.com/games/template/_docs/#/event +return '"'+Equip_List_0+'": '+Number_0+', '; +*/; + +equipUnknown + : EvalString ':' Number BEND + + +/* equipUnknown +tooltip : 装备项 +default : ['speed', 10] +helpUrl : https://h5mota.com/games/template/_docs/#/event +return '"'+EvalString_0+'": '+Number_0+', '; +*/; + + +equipEmpty + : Newline + +/* equipEmpty +var code = ' \n'; +return code; +*/; + //为了避免关键字冲突,全部加了_s //动作 @@ -2908,8 +2962,8 @@ IdString ; FixedId_List - : '生命'|'攻击'|'防御'|'护盾'|'黄钥匙'|'蓝钥匙'|'红钥匙'|'金币'|'经验' - /*FixedId_List ['status:hp','status:atk','status:def','status:mdef','item:yellowKey','item:blueKey','item:redKey','status:money','status:exp']*/; + : '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'黄钥匙'|'蓝钥匙'|'红钥匙'|'金币'|'经验'|'魔力'|'魔力上限' + /*FixedId_List ['status:hp','status:hpmax','status:atk','status:def','status:mdef','item:yellowKey','item:blueKey','item:redKey','status:money','status:exp','status:mana','status:manamax']*/; Id_List : '变量' | '状态' | '物品' | '独立开关' | '临时变量' |'全局存储' @@ -2919,6 +2973,10 @@ EnemyId_List : '生命'|'攻击'|'防御'|'金币'|'经验'|'加点'|'属性'|'名称'|'映射名'|'value'|'atkValue'|'defValue'|'notBomb'|'zoneSquare'|'range'|'n'|'add'|'damage' /*EnemyId_List ['hp','atk','def','money','exp','point','special','name','displayInBook','value','atkValue','defValue','notBomb','zoneSquare','range','n','add','damage']*/; +Equip_List + : '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'魔力'|'魔力上限' + /*Equip_List ['hp','hpmax','atk','def','mdef','mana','manamax']*/; + //转blockly后不保留需要加" EvalString : Equote_double (ESC_double | ~["\\])* Equote_double diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 5c9ab9c1..b67de2ab 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -58,6 +58,22 @@ ActionParser.prototype.parse = function (obj,type) { } return MotaActionBlocks['levelChoose_m'].xmlText([text_choices]); + case 'equip': + if(!obj) obj={}; + var buildEquip = function (obj) { + obj = obj || {}; + var text_choices = null; + var knownKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) + Object.keys(obj).sort().forEach(function (key) { + var one = knownKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; + text_choices = MotaActionBlocks[one].xmlText([ + key, obj.key, text_choices + ]); + }) + return text_choices; + } + return MotaActionBlocks['equip_m'].xmlText([obj.type, obj.animate, buildEquip(obj.value), buildEquip(obj.percentage)]); + case 'shop': var buildsub = function(obj,parser,next){ var text_choices = null; diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 4a7cfd49..74325011 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -75,6 +75,9 @@ editor_blockly = function () { {"type": "comment", "text": "在这里写该难度需执行的事件"} ]} ], 'levelChoose'), + MotaActionFunctions.actionParser.parse({ + "type": 0, "value": {"atk": 10}, "percentage": {"speed": 10}, + }, 'equip'), ], '显示文字':[ MotaActionBlocks['text_0_s'].xmlText(), @@ -1067,7 +1070,7 @@ function omitedcheckUpdateFunction(event) { } // 对动画进行补全 - if (type == 'animate_s' && name == 'IdString_0') { + if ((type == 'animate_s' && name == 'IdString_0') || (type == 'equip_m' && name == 'IdString_0')) { return filter(allAnimates, content); } diff --git a/_server/table/comment.js b/_server/table/comment.js index 702e54a8..5b92b2f1 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -49,9 +49,9 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "equip": { "_leaf": true, - "_type": "textarea", - "_docs": "道具的装备属性", - "_data": "装备属性设置,仅对cls为equips有效。\n如果此项不为null,需要是一个对象,里面可含\"type\",\"atk\",\"def\",\"mdef\",\"animate\"五项,分别对应装备部位、攻防护盾和动画。\n具体详见文档(元件说明-装备)和已有的几个装备的写法。" + "_type": "event", + "_event": "equip", + "_docs": "道具的装备属性" }, "hideInReplay": { "_leaf": true, diff --git a/editor-mobile.html b/editor-mobile.html index 8bc87798..b82d63df 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -218,6 +218,7 @@ + diff --git a/editor.html b/editor.html index 5e0f8560..5c00ccf8 100644 --- a/editor.html +++ b/editor.html @@ -214,6 +214,7 @@ + diff --git a/libs/items.js b/libs/items.js index 41c9d61c..f332c4dd 100644 --- a/libs/items.js +++ b/libs/items.js @@ -292,53 +292,41 @@ items.prototype.unloadEquip = function (equipType, callback) { } items.prototype.compareEquipment = function (compareEquipId, beComparedEquipId) { - var result = {}; + var result = {"value": {}, "percentage": {}}; var first = core.material.items[compareEquipId], second = core.material.items[beComparedEquipId]; - for (var name in core.status.hero) { - if (typeof core.status.hero[name] == 'number') { - var ans = 0; - if (first) ans += (first.equip || {})[name] || 0; - if (second) ans -= (second.equip || {})[name] || 0; - if (ans != 0) result[name] = ans; + for (var one in result) { + for (var name in core.status.hero) { + if (typeof core.status.hero[name] == 'number') { + var ans = 0; + if (first) ans += ((first.equip || {})[one] || {})[name] || 0; + if (second) ans -= ((second.equip || {})[one] || {})[name] || 0; + if (ans != 0) result[one][name] = ans; + } } } return result; } ////// 实际换装的效果 ////// -items.prototype._loadEquipEffect = function (equipId, unloadEquipId, isPercentage) { +items.prototype._loadEquipEffect = function (equipId, unloadEquipId) { // 比较能力值 var result = core.compareEquipment(equipId, unloadEquipId); - if (isPercentage) { - for (var name in result) - core.addBuff(name, result[name] / 100); - } - else { - for (var name in result) - core.status.hero[name] += result[name]; - } + for (var name in result.percentage) + core.addBuff(name, result.percentage[name] / 100); + + for (var name in result.value) + core.status.hero[name] += result.value[name]; } items.prototype._realLoadEquip = function (type, loadId, unloadId, callback) { var loadEquip = core.material.items[loadId] || {}, unloadEquip = core.material.items[unloadId] || {}; - loadEquip.equip = loadEquip.equip || {}; - unloadEquip.equip = unloadEquip.equip || {} - - var loadPercentage = loadEquip.equip.percentage, unloadPercentage = unloadEquip.equip.percentage; - - if (loadId && unloadId && (loadPercentage || false) != (unloadPercentage || false)) { - this.unloadEquip(type); - this.loadEquip(loadId); - if (callback) callback(); - return; - } // --- 音效 this._realLoadEquip_playSound(); // --- 实际换装 - this._loadEquipEffect(loadId, unloadId, loadPercentage == null ? unloadPercentage : loadPercentage); + this._loadEquipEffect(loadId, unloadId); // --- 加减 if (loadId) core.removeItem(loadId); diff --git a/libs/ui.js b/libs/ui.js index 79836eee..7a8aee74 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2459,23 +2459,17 @@ ui.prototype._drawEquipbox_description = function (info, max_height) { } ui.prototype._drawEquipbox_getStatusChanged = function (info, equip, equipType, y) { - var compare, differentMode = null; - if (info.index < this.LAST) compare = core.compareEquipment(null, info.selectId); - else { - if (equipType<0) differentMode = '<当前没有该装备的空位,请先卸下装备>'; - else { - var last = core.material.items[info.equipEquipment[equipType]]||{}; - if (last.equip && (last.equip.percentage || false) != (equip.equip.percentage || false)) - differentMode = '<数值和比例模式之间的切换不显示属性变化>'; - else - compare = core.compareEquipment(info.selectId, info.equipEquipment[equipType]); - } + if (info.index < this.LAST) { + // 光标在装备栏上:查询卸下装备属性 + return core.compareEquipment(null, info.selectId); } - if (differentMode != null) { - core.fillText('ui', differentMode, 10, y, '#CCCCCC', this._buildFont(14, false)); - return; + if (equipType < 0) { + // 没有空位 + core.fillText('ui', '<当前没有该装备的空位,请先卸下装备>', 10, y, '#CCCCCC', this._buildFont(14, false)); + return null; } - return compare; + // 光标在装备上:查询装上后的属性变化 + return core.compareEquipment(info.selectId, info.equipEquipment[equipType]); } ui.prototype._drawEquipbox_drawStatusChanged = function (info, y, equip, equipType) { @@ -2485,19 +2479,19 @@ ui.prototype._drawEquipbox_drawStatusChanged = function (info, y, equip, equipTy // --- 变化值... core.setFont('ui', this._buildFont(14, true)); - for (var name in compare) { + for (var name in core.status.hero) { + if (typeof core.status.hero[name] != 'number') continue; + var nowValue = core.getRealStatus(name); + // 查询新值 + var newValue = (core.getStatus(name) + (compare.value[name] || 0)) + * (core.getBuff(name) + (compare.percentage[name] || 0) / 100); + if (nowValue == newValue) continue; var text = this._drawEquipbox_getStatusName(name); this._drawEquipbox_drawStatusChanged_draw(text + " ", '#CCCCCC', obj); - var nowValue = core.getStatus(name) * core.getBuff(name), newValue = (core.getStatus(name) + compare[name]) * core.getBuff(name); - if (equip.equip.percentage) { - var nowBuff = core.getBuff(name), newBuff = nowBuff + compare[name] / 100; - nowValue = Math.floor(nowBuff * core.getStatus(name)); - newValue = Math.floor(newBuff * core.getStatus(name)); - } nowValue = core.formatBigNumber(nowValue); newValue = core.formatBigNumber(newValue); this._drawEquipbox_drawStatusChanged_draw(nowValue+"->", '#CCCCCC', obj); - this._drawEquipbox_drawStatusChanged_draw(newValue, compare[name]>0?'#00FF00':'#FF0000', obj); + this._drawEquipbox_drawStatusChanged_draw(newValue, newValue>nowValue?'#00FF00':'#FF0000', obj); obj.drawOffset += 8; } } diff --git a/project/items.js b/project/items.js index 86c61b84..68c39d06 100644 --- a/project/items.js +++ b/project/items.js @@ -65,8 +65,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把已经生锈的剑", "equip": { "type": 0, - "atk": 0, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 0 + } } }, "sword1": { @@ -75,8 +77,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把很普通的铁剑", "equip": { "type": 0, - "atk": 10, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 10 + } } }, "sword2": { @@ -85,8 +89,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把很普通的银剑", "equip": { "type": 0, - "atk": 20, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 20 + } } }, "sword3": { @@ -95,8 +101,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把很普通的骑士剑", "equip": { "type": 0, - "atk": 40, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 40 + } } }, "sword4": { @@ -105,8 +113,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把很普通的圣剑", "equip": { "type": 0, - "atk": 80, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 80 + } } }, "sword5": { @@ -115,8 +125,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一把很普通的神圣剑", "equip": { "type": 0, - "atk": 100, - "animate": "sword" + "animate": "sword", + "value": { + "atk": 160 + } } }, "shield0": { @@ -125,7 +137,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很破旧的铁盾", "equip": { "type": 1, - "def": 0 + "value": { + "def": 0 + } } }, "shield1": { @@ -134,7 +148,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很普通的铁盾", "equip": { "type": 1, - "def": 10 + "value": { + "def": 10 + } } }, "shield2": { @@ -143,7 +159,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很普通的银盾", "equip": { "type": 1, - "def": 20 + "value": { + "def": 20 + } } }, "shield3": { @@ -152,7 +170,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很普通的骑士盾", "equip": { "type": 1, - "def": 40 + "value": { + "def": 40 + } } }, "shield4": { @@ -161,7 +181,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很普通的圣盾", "equip": { "type": 1, - "def": 80 + "value": { + "def": 80 + } } }, "shield5": { @@ -170,8 +192,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "text": "一个很普通的神圣盾", "equip": { "type": 1, - "def": 100, - "mdef": 100 + "value": { + "def": 100, + "mdef": 100 + } } }, "superPotion": { From 4c94ce4edb9352b03a4726c5e33b1c9d1d1f7d95 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Wed, 20 May 2020 14:49:05 +0800 Subject: [PATCH 27/49] =?UTF-8?q?=E9=80=89=E4=B8=AD=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 7 ++-- _server/editor_mappanel.js | 64 ++++++++++++++++++++++++--------- _server/editor_materialpanel.js | 7 ++-- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index c2843696..bc64fe95 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -69,6 +69,11 @@ function editor() { mouseOutCheck : 2, startPos:null, endPos:null, + lastMoveE:{buttons:0,clientX:0,clientY:0}, + // 材料区拖动有关 + lastMoveMaterE:null, + tileSize: [1,1], + startLoc: null, // 撤销/恢复 preMapData : [], preMapMax: 10, @@ -104,8 +109,6 @@ function editor() { }, // tile - tileSize: [1,1], - startLoc: null, lockMode: false, // 最近使用的图块 diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index f2f850ac..a397f535 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -75,6 +75,7 @@ editor_mappanel_wrapper = function (editor) { * + 绘图时画个矩形在那个位置 */ editor.uifunctions.map_ondown = function (e) { + editor.uivalues.lastMoveE=e; var loc = editor.uifunctions.eToLoc(e); var pos = editor.uifunctions.locToPos(loc, true); if (editor.uivalues.bindSpecialDoor.loc != null) { @@ -89,10 +90,10 @@ editor_mappanel_wrapper = function (editor) { } return false; } - if (e.button == 2) { - editor.uifunctions.showMidMenu(e.clientX, e.clientY); - return false; - } + // if (e.buttons == 2) { // 挪到onup + // editor.uifunctions.showMidMenu(e.clientX, e.clientY); + // return false; + // } if (!selectBox.isSelected()) { editor_mode.onmode('nextChange'); editor_mode.onmode('loc'); @@ -122,6 +123,7 @@ editor_mappanel_wrapper = function (editor) { * + 绘图模式时找到与队列尾相邻的鼠标方向的点画个矩形 */ editor.uifunctions.map_onmove = function (e) { + editor.uivalues.lastMoveE=e; if (!selectBox.isSelected()) { if (editor.uivalues.startPos == null) return; //tip.whichShow(1); @@ -136,9 +138,25 @@ editor_mappanel_wrapper = function (editor) { editor.uivalues.endPos = pos; if (editor.uivalues.startPos != null) { if (editor.uivalues.startPos.x != editor.uivalues.endPos.x || editor.uivalues.startPos.y != editor.uivalues.endPos.y) { - core.drawArrow('eui', - 32 * editor.uivalues.startPos.x + 16 - core.bigmap.offsetX, 32 * editor.uivalues.startPos.y + 16 - core.bigmap.offsetY, - 32 * editor.uivalues.endPos.x + 16 - core.bigmap.offsetX, 32 * editor.uivalues.endPos.y + 16 - core.bigmap.offsetY); + if (e.buttons == 2) { + // 右键拖拽: 画选的区域 + var x0 = editor.uivalues.startPos.x; + var y0 = editor.uivalues.startPos.y; + var x1 = editor.uivalues.endPos.x; + var y1 = editor.uivalues.endPos.y; + if (x0 > x1) { x0 ^= x1; x1 ^= x0; x0 ^= x1; }//swap + if (y0 > y1) { y0 ^= y1; y1 ^= y0; y0 ^= y1; }//swap + // draw rect + editor.dom.euiCtx.clearRect(0, 0, editor.dom.euiCtx.canvas.width, editor.dom.euiCtx.canvas.height); + editor.dom.euiCtx.fillStyle = 'rgba(0, 127, 255, 0.4)'; + editor.dom.euiCtx.fillRect(32 * x0 - core.bigmap.offsetX, 32 * y0 - core.bigmap.offsetY, + 32 * (x1 - x0) + 32, 32 * (y1 - y0) + 32); + }else{ + // 左键拖拽: 画箭头 + core.drawArrow('eui', + 32 * editor.uivalues.startPos.x + 16 - core.bigmap.offsetX, 32 * editor.uivalues.startPos.y + 16 - core.bigmap.offsetY, + 32 * editor.uivalues.endPos.x + 16 - core.bigmap.offsetX, 32 * editor.uivalues.endPos.y + 16 - core.bigmap.offsetY); + } } } // editor_mode.onmode('nextChange'); @@ -192,17 +210,31 @@ editor_mappanel_wrapper = function (editor) { * + 非绘图模式时, 交换首末点的内容 * + 绘图模式时, 根据画线/画矩形/画tileset 做对应的绘制 */ - editor.uifunctions.map_onup = function (e) { + editor.uifunctions.map_onup = function (ee) { + console.log(1) + var e=editor.uivalues.lastMoveE; if (!selectBox.isSelected()) { - //tip.whichShow(1); - // editor.movePos(editor.uivalues.startPos, editor.uivalues.endPos); - if (editor.layerMod == 'map') - editor.exchangePos(editor.uivalues.startPos, editor.uivalues.endPos); - else - editor.exchangeBgFg(editor.uivalues.startPos, editor.uivalues.endPos, editor.layerMod); - editor.uivalues.startPos = editor.uivalues.endPos = null; + if (e.buttons == 2) { + if (editor.uivalues.endPos==null || editor.uivalues.startPos.x == editor.uivalues.endPos.x && editor.uivalues.startPos.y == editor.uivalues.endPos.y){ + // 右键点击: 弹菜单 + editor.uifunctions.showMidMenu(e.clientX, e.clientY); + } else { + // 右键拖拽: 选中区域 + printf('已经选中该区域') + // 后续的处理 + } + } else { + // 左键拖拽: 交换 + //tip.whichShow(1); + // editor.movePos(editor.uivalues.startPos, editor.uivalues.endPos); + if (editor.layerMod == 'map') + editor.exchangePos(editor.uivalues.startPos, editor.uivalues.endPos); + else + editor.exchangeBgFg(editor.uivalues.startPos, editor.uivalues.endPos, editor.layerMod); + editor.uifunctions.unhighlightSaveFloorButton(); + } editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); - editor.uifunctions.unhighlightSaveFloorButton(); + editor.uivalues.startPos = editor.uivalues.endPos = null; return false; } editor.uivalues.holdingPath = 0; diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js index 8a6704fa..d7607b82 100644 --- a/_server/editor_materialpanel.js +++ b/_server/editor_materialpanel.js @@ -62,7 +62,6 @@ editor_materialpanel_wrapper = function (editor) { } } - var lastmoveE=null; /** * editor.dom.iconLib.onmousedown * 素材区的单击/拖拽事件 @@ -70,7 +69,7 @@ editor_materialpanel_wrapper = function (editor) { editor.uifunctions.material_ondown = function (e) { e.stopPropagation(); e.preventDefault(); - lastmoveE=e; + editor.uivalues.lastMoveMaterE=e; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; @@ -90,7 +89,7 @@ editor_materialpanel_wrapper = function (editor) { editor.uifunctions.material_onmove = function (e) { e.stopPropagation(); e.preventDefault(); - lastmoveE=e; + editor.uivalues.lastMoveMaterE=e; if (!editor.uivalues.startLoc) return; var pos0 = editor.uifunctions.locToPos(editor.uivalues.startLoc); @@ -109,7 +108,7 @@ editor_materialpanel_wrapper = function (editor) { var startLoc = editor.uivalues.startLoc; editor.uivalues.startLoc = null; - var e=lastmoveE; + var e=editor.uivalues.lastMoveMaterE; if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; From b2b60b133eec68ce8147451b2050e7633cc43c20 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 17:48:17 +0800 Subject: [PATCH 28/49] =?UTF-8?q?:x,=20:y,=20:o=20=E7=BF=BB=E8=BD=AC?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 38 ++++++++---- _server/MotaActionParse.js | 12 ++-- _server/table/comment.js | 2 +- libs/control.js | 6 +- libs/events.js | 9 ++- libs/maps.js | 37 ++++++------ libs/ui.js | 116 +++++++++++++++++++++---------------- libs/utils.js | 4 +- project/functions.js | 2 +- v2.x-final更新.txt | 6 +- 10 files changed, 135 insertions(+), 97 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 023bd8fa..6449f4d5 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1498,23 +1498,26 @@ return code; */; showImage_s - : '显示图片' '图片编号' Int '图片' EvalString BGNL? + : '显示图片' '图片编号' Int '图片' EvalString '翻转' Reverse_List BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '不透明度' Number '时间' Int '不等待执行完毕' Bool Newline /* showImage_s tooltip : showImage:显示图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showImage%ef%bc%9a%e6%98%be%e7%a4%ba%e5%9b%be%e7%89%87 -default : [1,"bg.jpg","0","0",1,0,false] +default : [1,"bg.jpg","null","0","0",1,0,false] colour : this.printColor if(Int_0<=0 || Int_0>50) throw new Error('图片编号在1~50之间'); +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; var async = Bool_0?', "async": true':''; -var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'", "loc": ['+PosString_0+','+PosString_1+'], "opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; +var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'"'+Reverse_List_0+', "loc": ['+PosString_0+','+PosString_1+'], "opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; return code; */; showImage_1_s - : '显示图片' '图片编号' Int '图片' EvalString BGNL? + : '显示图片' '图片编号' Int '图片' EvalString '翻转' Reverse_List BGNL? '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? '不透明度' Number BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? '时间' Int '不等待执行完毕' Bool Newline @@ -1522,11 +1525,14 @@ showImage_1_s /* showImage_1_s tooltip : showImage_1:显示图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showImage%ef%bc%9a%e6%98%be%e7%a4%ba%e5%9b%be%e7%89%87 -default : [1,"bg.jpg","0","0","","",1,"0","0","","",0,false] +default : [1,"bg.jpg","null","0","0","","",1,"0","0","","",0,false] colour : this.printColor if(Int_0<=0 || Int_0>50) throw new Error('图片编号在1~50之间'); +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; var async = Bool_0?', "async": true':''; -var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'", '+ +var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'"'+Reverse_List_0+', '+ '"sloc": ['+PosString_0+','+PosString_1+','+PosString_2+','+PosString_3+'], '+ '"loc": ['+PosString_4+','+PosString_5+','+PosString_6+','+PosString_7+'], '+ '"opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; @@ -2506,22 +2512,25 @@ return code; drawImage_s - : '绘制图片' EvalString '起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? Newline + : '绘制图片' EvalString '翻转' Reverse_List '起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? Newline /* drawImage_s tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 -default : ["bg.jpg","0","0","",""] +default : ["bg.jpg","null","0","0","",""] colour : this.subColor +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; PosString_2 = PosString_2 ? (', "w": '+PosString_2) : ''; PosString_3 = PosString_3 ? (', "h": '+PosString_3) : ''; -var code = '{"type": "drawImage", "image": "'+EvalString_0+'", "x": '+PosString_0+', "y": '+PosString_1+PosString_2+PosString_3+'},\n'; +var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+Reverse_List_0+', "x": '+PosString_0+', "y": '+PosString_1+PosString_2+PosString_3+'},\n'; return code; */; drawImage_1_s - : '绘制图片' EvalString '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString BGNL? + : '绘制图片' EvalString '翻转' Reverse_List '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString Newline @@ -2530,7 +2539,10 @@ tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 default : ["bg.jpg","0","0","32","32","0","0","32","32"] colour : this.subColor -var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+ +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; +var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+Reverse_List_0+ ', "x": '+PosString_0+', "y": '+PosString_1+', "w": '+PosString_2+', "h": '+PosString_3+ ', "x1": '+PosString_4+', "y1": '+PosString_5+', "w1": '+PosString_6+', "h1": '+PosString_7+'},\n'; return code; @@ -2866,6 +2878,10 @@ TextBaseline_List : '不改变'|'顶部'|'悬挂'|'居中'|'标准值'|'ideographic'|'底部' /*TextBaseline_List ['null','top','hanging','middle','alphabetic','ideographic','bottom']*/; +Reverse_List + : '不改变'|'左右翻转'|'上下翻转'|'中心翻转' + /*Reverse_List ['null',':x',':y',':o']*/; + ShopUse_List : '金币' | '经验' /*ShopUse_List ['money','exp']*/; diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index b67de2ab..5dc47b83 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -63,9 +63,9 @@ ActionParser.prototype.parse = function (obj,type) { var buildEquip = function (obj) { obj = obj || {}; var text_choices = null; - var knownKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) + var knownEquipListKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) Object.keys(obj).sort().forEach(function (key) { - var one = knownKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; + var one = knownEquipListKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; text_choices = MotaActionBlocks[one].xmlText([ key, obj.key, text_choices ]); @@ -385,13 +385,13 @@ ActionParser.prototype.parseAction = function() { data.loc=data.loc||['',''] if (data.sloc) { this.next = MotaActionBlocks['showImage_1_s'].xmlText([ - data.code,data.image||data.name,data.sloc[0],data.sloc[1],data.sloc[2],data.sloc[3],data.opacity, + data.code,data.image||data.name,data.reverse,data.sloc[0],data.sloc[1],data.sloc[2],data.sloc[3],data.opacity, data.loc[0],data.loc[1],data.loc[2],data.loc[3],data.time||0,data.async||false,this.next ]); } else { this.next = MotaActionBlocks['showImage_s'].xmlText([ - data.code,data.image||data.name,data.loc[0],data.loc[1],data.opacity,data.time||0,data.async||false,this.next]); + data.code,data.image||data.name,data.reverse,data.loc[0],data.loc[1],data.opacity,data.time||0,data.async||false,this.next]); } break; case "hideImage": // 清除图片 @@ -837,12 +837,12 @@ ActionParser.prototype.parseAction = function() { case "drawImage": // 绘制图片 if (data.x1 != null && data.y1 != null && data.w1 != null && data.h1 != null) { this.next = MotaActionBlocks['drawImage_1_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, data.x1, data.y1, data.w1, data.h1, this.next + data.image, data.reverse, data.x, data.y, data.w, data.h, data.x1, data.y1, data.w1, data.h1, this.next ]); } else { this.next = MotaActionBlocks['drawImage_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, this.next + data.image, data.reverse, data.x, data.y, data.w, data.h, this.next ]); } break; diff --git a/_server/table/comment.js b/_server/table/comment.js index 5b92b2f1..753dc71d 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -393,7 +393,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "canFlyTo": { "_leaf": true, "_type": "checkbox", - "_docs": "可飞", + "_docs": "可楼传", "_data": "该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器)" }, "canUseQuickShop": { diff --git a/libs/control.js b/libs/control.js index 5b6602c1..e1ea103b 100644 --- a/libs/control.js +++ b/libs/control.js @@ -260,7 +260,7 @@ control.prototype._animationFrame_weather_fog = function () { var w = core.__PIXELS__, h = core.__PIXELS__; core.setAlpha('weather', 0.5); core.animateFrame.weather.nodes.forEach(function (p) { - ctx.drawImage(core.animateFrame.weather.fog, p.x - ox, p.y - oy, w, h); + core.drawImage(ctx, 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) { @@ -2515,10 +2515,10 @@ control.prototype.updateHeroIcon = function (name) { var ratio = Math.min(w / h, 1), width = 32 * ratio, left = 16 - width/2; var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var ctx = canvas.getContext("2d"); canvas.width = 32; canvas.height = 32; - context.drawImage(image, 0, 0, w, h, left, 0, width, 32); + core.drawImage(ctx, image, 0, 0, w, h, left, 0, width, 32); core.statusBar.image.name.src = canvas.toDataURL("image/png"); } diff --git a/libs/events.js b/libs/events.js index 6fa74489..c03d7379 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1455,7 +1455,7 @@ events.prototype._action_changePos = function (data, x, y, prefix) { events.prototype._action_showImage = function (data, x, y, prefix) { if (core.isReplaying()) data.time = 0; 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.reverse || ''), data.sloc, data.loc, data.opacity, data.time); } events.prototype._precompile_showImage = function (data) { @@ -2651,7 +2651,12 @@ events.prototype.closeDoor = function (x, y, id, callback) { ////// 显示图片 ////// events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, callback) { + var imageName = null; if (typeof image == 'string') { + imageName = image; + if (image.endsWith(':x') || image.endsWith(':y') || image.endsWith(':o')) { + image = image.substring(0, image.length - 2); + } image = core.getMappedName(image); image = core.material.images.images[image]; } @@ -2673,7 +2678,7 @@ events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, time = time || 0; var name = "image" + zIndex; var ctx = core.createCanvas(name, x, y, w, h, zIndex); - ctx.drawImage(image, sx, sy, sw, sh, 0, 0, w, h); + core.drawImage(ctx, imageName == null ? image : imageName, sx, sy, sw, sh, 0, 0, w, h); if (time == 0) { core.setOpacity(name, opacityVal); if (callback) callback(); diff --git a/libs/maps.js b/libs/maps.js index 9254a1cc..f7a94593 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -815,7 +815,7 @@ maps.prototype._drawBg_drawBackground = function (floorId, ctx) { if (groundInfo != null) { for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { - ctx.drawImage(groundInfo.image, 32 * groundInfo.posX, groundInfo.height * groundInfo.posY, 32, 32, i * 32, j * 32, 32, 32); + core.drawImage(ctx, groundInfo.image, 32 * groundInfo.posX, groundInfo.height * groundInfo.posY, 32, 32, i * 32, j * 32, 32, 32); } } } @@ -899,6 +899,9 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat images.forEach(function (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); + if (imageName.endsWith(':x') || imageName.endsWith(':y') || imageName.endsWith(':o')) { + imageName = imageName.substring(0, imageName.length - 2); + } imageName = core.getMappedName(imageName); var image = core.material.images.images[imageName]; if (redraw && frame == 1) return; // 不重绘 @@ -911,7 +914,7 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat this._drawFloorImages_gif(image, dx, dy); return; } - core.maps._drawFloorImage(ctx, name, t[3], image, offsetX, width, dx, dy, redraw); + core.maps._drawFloorImage(ctx, name, t[3], t[2], image, offsetX, width, dx, dy, redraw); } }); } @@ -941,11 +944,11 @@ maps.prototype._drawFloorImages_gif = function (image, dx, dy) { return; } -maps.prototype._drawFloorImage = function (ctx, name, type, image, offsetX, width, dx, dy, redraw) { +maps.prototype._drawFloorImage = function (ctx, name, type, imageName, image, offsetX, width, dx, dy, redraw) { var height = image.height; var _draw = function () { if (redraw) core.clearMap(ctx, dx, dy, width, height); - core.drawImage(ctx, image, offsetX, 0, width, height, dx, dy, width, height); + core.drawImage(ctx, imageName, offsetX, 0, width, height, dx, dy, width, height); } if (!type) { if (name != 'bg') return; @@ -958,11 +961,11 @@ maps.prototype._drawFloorImage = function (ctx, name, type, image, offsetX, widt if (type == 2) { if (name == 'bg') { if (redraw) core.clearMap(ctx, dx, dy + height - 32, width, 32); - core.drawImage('bg', image, offsetX, height - 32, width, 32, dx, dy + height - 32, width, 32); + core.drawImage('bg', imageName, offsetX, height - 32, width, 32, dx, dy + height - 32, width, 32); } else if (name == 'fg') { if (redraw) core.clearMap(ctx, dx, dy, width, height - 32); - core.drawImage('fg', image, offsetX, 0, width, height - 32, dx, dy, width, height - 32); + core.drawImage('fg', imageName, offsetX, 0, width, height - 32, dx, dy, width, height - 32); } return; } @@ -1035,7 +1038,7 @@ maps.prototype._drawAutotile_render = function(canvas, x, y, size, autotile, sta ]; var data = indexData[index]; if(index>=16){ // 拐角直接绘制 - canvas.drawImage(autotile, data[0][0], data[0][1], data[0][2], data[0][3], data[0][4], data[0][5], size/2, size/2); + core.drawImage(canvas, autotile, data[0][0], data[0][1], data[0][2], data[0][3], data[0][4], data[0][5], size/2, size/2); }else{ // 非拐角要根据是否已经绘制进行切分后绘制 this._drawAutotile_renderCut(canvas, autotile, x, y, size, data, done); } @@ -1076,7 +1079,7 @@ maps.prototype._drawAutotile_renderCut = function(canvas, autotile, x, y, size, } for(var i = 0; i<4; i++){ var dt = drawData[i];if(!dt)continue; - canvas.drawImage(autotile, dt[0], dt[1], 16, 16, x + (i % 2) * size / 2, y + parseInt(i / 2) * size / 2, size/2, size/2); + core.drawImage(canvas, autotile, dt[0], dt[1], 16, 16, x + (i % 2) * size / 2, y + parseInt(i / 2) * size / 2, size/2, size/2); }; } @@ -1086,7 +1089,7 @@ maps.prototype._drawAutotile_drawBlockByIndex = function (ctx, dx, dy, autotileI var sx = 16 * ((index - 1) % 6), sy = 16 * (~~((index - 1) / 6)); status = status || 0; status %= parseInt(autotileImg.width / 96); - ctx.drawImage(autotileImg, sx + 96 * status, sy, 16, 16, dx, dy, size / 2, size / 2); + core.drawImage(ctx, autotileImg, sx + 96 * status, sy, 16, 16, dx, dy, size / 2, size / 2); } maps.prototype._drawAutotile_getAutotileAroundId = function (currId, x, y, mapArr) { @@ -1157,16 +1160,16 @@ maps.prototype._makeAutotileEdges = function () { var n = core.maps.getNumberById(t); core.material.autotileEdges[n] = [n]; - ctx.clearRect(0, 0, 32, 32); - ctx.drawImage(core.material.images.autotile[t], 0, 0, 32, 32, 0, 0, 32, 32); + core.clearMap(ctx, 0, 0, 32, 32); + core.drawImage(ctx, core.material.images.autotile[t], 0, 0, 32, 32, 0, 0, 32, 32); var data = canvas.toDataURL("image/png"); autotileIds.forEach(function (t2) { if (t == t2) return; var n2 = core.maps.getNumberById(t2); - ctx.clearRect(0, 0, 32, 32); - ctx.drawImage(core.material.images.autotile[t2], 32, 0, 32, 32, 0, 0, 32, 32); + core.clearMap(ctx, 0, 0, 32, 32); + core.drawImage(ctx, core.material.images.autotile[t2], 32, 0, 32, 32, 0, 0, 32, 32); if (data == canvas.toDataURL("image/png")) { core.material.autotileEdges[n].push(n2); } @@ -1229,7 +1232,7 @@ maps.prototype._drawThumbnail_realDrawTempCanvas = function (floorId, blocks, op options.heroIcon = core.getMappedName(options.heroIcon); var icon = core.material.icons.hero[options.heroLoc.direction]; 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, + core.drawImage(tempCanvas, core.material.images.images[options.heroIcon], icon.stop * 32, icon.loc * height, 32, height, 32 * options.heroLoc.x, 32 * options.heroLoc.y + 32 - height, 32, height); } // 缩略图:前景 @@ -1259,21 +1262,21 @@ maps.prototype._drawThumbnail_drawToTarget = function (floorId, toDraw) { var side = (size - realWidth) / 2; core.fillRect(ctx, x, y, side, realHeight, '#000000'); core.fillRect(ctx, x + size - side, y, side, realHeight); - ctx.drawImage(tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x + side, y, realWidth, realHeight); + core.drawImage(ctx, tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x + side, y, realWidth, realHeight); } else { var realWidth = size, realHeight = realWidth * tempHeight / tempWidth; var side = (size - realHeight) / 2; core.fillRect(ctx, x, y, realWidth, side, '#000000'); core.fillRect(ctx, x, y + size - side, realWidth, side); - ctx.drawImage(tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x, y + side, realWidth, realHeight); + core.drawImage(ctx, tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x, y + side, realWidth, realHeight); } } else { // 只绘制可见窗口 var offsetX = core.clamp(centerX - core.__HALF_SIZE__, 0, width - core.__SIZE__), offsetY = core.clamp(centerY - core.__HALF_SIZE__, 0, height - core.__SIZE__); - ctx.drawImage(tempCanvas.canvas, offsetX * 32, offsetY * 32, core.__PIXELS__, core.__PIXELS__, x, y, size, size); + core.drawImage(ctx, tempCanvas.canvas, offsetX * 32, offsetY * 32, core.__PIXELS__, core.__PIXELS__, x, y, size, size); } } diff --git a/libs/ui.js b/libs/ui.js index 7a8aee74..f07c2d3b 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -507,32 +507,61 @@ ui.prototype.splitLines = function (name, text, maxWidth, font) { ////// 绘制一张图片 ////// ui.prototype.drawImage = function (name, image, x, y, w, h, x1, y1, w1, h1) { + // 检测文件名以 :x, :y, :o 结尾,表示左右翻转,上下翻转和中心翻转 var ctx = this.getContextByName(name); if (!ctx) return; + var reverse = null; if (typeof image == 'string') { + if (image.endsWith(':x') || image.endsWith(':y') || image.endsWith(':o')) { + reverse = image.charAt(image.length - 1); + image = image.substring(0, image.length - 2); + } image = core.getMappedName(image); image = core.material.images.images[image]; - if (!image) return; + if (!image || !(image instanceof Image)) return; } + var scale = { + 'x': [-1, 1], + 'y': [1, -1], + 'o': [-1, -1] + }; + // 只能接受2, 4, 8个参数 if (x != null && y != null) { - if (w != null && h != null) { - if (x1 != null && y1 != null && w1 != null && h1 != null) { + if (w == null || h == null) { + // 两个参数变成四个参数 + w = image.width; + h = image.height; + } + if (x1 != null && y1 != null && w1 != null && h1 != null) { + if (reverse == null) { ctx.drawImage(image, x, y, w, h, x1, y1, w1, h1); - return; + } else { + ctx.save(); + ctx.translate(x1 + w1 / 2, y1 + h1 / 2); + ctx.scale(scale[reverse][0], scale[reverse][1]); + ctx.drawImage(image, x, y, w, h, -w1 / 2, -h1 / 2, w1, h1); + ctx.restore(); } - ctx.drawImage(image, x, y, w, h); return; } - ctx.drawImage(image, x, y); + if (reverse == null) { + ctx.drawImage(image, x, y, w, h); + } else { + ctx.save(); + ctx.translate(x + w / 2, y + h / 2); + ctx.scale(scale[reverse][0], scale[reverse][1]); + ctx.drawImage(image, -w / 2, -h / 2, w, h); + ctx.restore(); + } return; } } ui.prototype._uievent_drawImage = function (data) { this._createUIEvent(); - this.drawImage('uievent', data.image, core.calValue(data.x), core.calValue(data.y), core.calValue(data.w), core.calValue(data.h), + this.drawImage('uievent', data.image + (data.reverse || ''), core.calValue(data.x), core.calValue(data.y), core.calValue(data.w), core.calValue(data.h), core.calValue(data.x1), core.calValue(data.y1), core.calValue(data.w1), core.calValue(data.h1)); } @@ -547,7 +576,7 @@ ui.prototype.drawIcon = function (name, id, x, y, w, h, frame) { info = {image: core.statusBar.icons[id], posX: 0, posY: 0, height: 32}; else return; } - ctx.drawImage(info.image, 32 * (info.posX + frame), info.height * info.posY, 32, info.height, x, y, w || 32, h || info.height); + core.drawImage(ctx, info.image, 32 * (info.posX + frame), info.height * info.posY, 32, info.height, x, y, w || 32, h || info.height); } ui.prototype._uievent_drawIcon = function (data) { @@ -792,64 +821,53 @@ ui.prototype._clearUIEventSelector = function (codes) { ui.prototype._drawSelector = function (ctx, background, w, h, left, top) { left = left || 0; top = top || 0; - ctx = this.getContextByName(ctx); - if (!ctx) return; - if (typeof background == 'string') - background = core.material.images.images[background]; - if (!(background instanceof Image)) return; // back - ctx.drawImage(background, 130, 66, 28, 28, left+2, top+2, w-4, h-4); + core.drawImage(ctx, background, 130, 66, 28, 28, left+2, top+2, w-4, h-4); // corner - ctx.drawImage(background, 128, 64, 2, 2, left, top, 2, 2); - ctx.drawImage(background, 158, 64, 2, 2, left+w-2, top, 2, 2); - ctx.drawImage(background, 128, 94, 2, 2, left, top+h-2, 2, 2); - ctx.drawImage(background, 158, 94, 2, 2, left+w-2, top+h-2, 2, 2); + core.drawImage(ctx, background, 128, 64, 2, 2, left, top, 2, 2); + core.drawImage(ctx, background, 158, 64, 2, 2, left+w-2, top, 2, 2); + core.drawImage(ctx, background, 128, 94, 2, 2, left, top+h-2, 2, 2); + core.drawImage(ctx, background, 158, 94, 2, 2, left+w-2, top+h-2, 2, 2); // border - ctx.drawImage(background, 130, 64, 28, 2, left+2, top, w-4, 2); - ctx.drawImage(background, 130, 94, 28, 2, left+2, top+h-2, w-4, 2); - ctx.drawImage(background, 128, 66, 2, 28, left, top+2, 2,h-4); - ctx.drawImage(background, 158, 66, 2, 28, left+w-2, top+2, 2,h-4); + core.drawImage(ctx, background, 130, 64, 28, 2, left+2, top, w-4, 2); + core.drawImage(ctx, background, 130, 94, 28, 2, left+2, top+h-2, w-4, 2); + core.drawImage(ctx, background, 128, 66, 2, 28, left, top+2, 2,h-4); + core.drawImage(ctx, background, 158, 66, 2, 28, left+w-2, top+2, 2,h-4); } ////// 绘制 WindowSkin ui.prototype.drawWindowSkin = function(background, ctx, x, y, w, h, direction, px, py) { background = background || core.status.textAttribute.background; - if (typeof background == 'string') { - background = core.getMappedName(background); - background = core.material.images.images[background]; - } // 仿RM窗口皮肤 ↓ - var dstImage = core.getContextByName(ctx); - if (!dstImage) return; // 绘制背景 - dstImage.drawImage(background, 0, 0, 128, 128, x+2, y+2, w-4, h-4); + core.drawImage(ctx, background, 0, 0, 128, 128, x+2, y+2, w-4, h-4); // 绘制边框 // 上方 - dstImage.drawImage(background, 128, 0, 16, 16, x, y, 16, 16); + core.drawImage(ctx, background, 128, 0, 16, 16, x, y, 16, 16); for (var dx = 0; dx < w - 64; dx += 32) { - dstImage.drawImage(background, 144, 0, 32, 16,x+dx+16, y, 32, 16); - dstImage.drawImage(background, 144,48, 32, 16,x+dx+16, y+h-16, 32, 16); + core.drawImage(ctx, background, 144, 0, 32, 16,x+dx+16, y, 32, 16); + core.drawImage(ctx, background, 144,48, 32, 16,x+dx+16, y+h-16, 32, 16); } - dstImage.drawImage(background, 144, 0,w-dx-32, 16,x+dx+16, y,w-dx-32, 16); - dstImage.drawImage(background, 144,48,w-dx-32, 16,x+dx+16, y+h-16,w-dx-32, 16); - dstImage.drawImage(background, 176, 0, 16, 16, x+w-16, y, 16, 16); + core.drawImage(ctx, background, 144, 0,w-dx-32, 16,x+dx+16, y,w-dx-32, 16); + core.drawImage(ctx, background, 144,48,w-dx-32, 16,x+dx+16, y+h-16,w-dx-32, 16); + core.drawImage(ctx, background, 176, 0, 16, 16, x+w-16, y, 16, 16); // 左右 for (var dy = 0; dy < h - 64; dy += 32) { - dstImage.drawImage(background, 128,16, 16, 32, x,y+dy+16, 16, 32); - dstImage.drawImage(background, 176,16, 16, 32, x+w-16,y+dy+16, 16, 32); + core.drawImage(ctx, background, 128,16, 16, 32, x,y+dy+16, 16, 32); + core.drawImage(ctx, background, 176,16, 16, 32, x+w-16,y+dy+16, 16, 32); } - dstImage.drawImage(background, 128,16, 16,h-dy-32, x,y+dy+16, 16,h-dy-32); - dstImage.drawImage(background, 176,16, 16,h-dy-32, x+w-16,y+dy+16, 16,h-dy-32); + core.drawImage(ctx, background, 128,16, 16,h-dy-32, x,y+dy+16, 16,h-dy-32); + core.drawImage(ctx, background, 176,16, 16,h-dy-32, x+w-16,y+dy+16, 16,h-dy-32); // 下方 - dstImage.drawImage(background, 128,48, 16, 16, x, y+h-16, 16, 16); - dstImage.drawImage(background, 176,48, 16, 16, x+w-16, y+h-16, 16, 16); + core.drawImage(ctx, background, 128,48, 16, 16, x, y+h-16, 16, 16); + core.drawImage(ctx, background, 176,48, 16, 16, x+w-16, y+h-16, 16, 16); // arrow if(px != null && py != null){ if(direction == 'up'){ - dstImage.drawImage(background,128,96,32,32,px,y+h-3,32,32); + core.drawImage(ctx, background,128,96,32,32,px,y+h-3,32,32); }else if(direction == 'down') { - dstImage.drawImage(background,160,96,32,32,px,y-29,32,32); + core.drawImage(ctx, background,160,96,32,32,px,y-29,32,32); } } // 仿RM窗口皮肤 ↑ @@ -1045,7 +1063,7 @@ ui.prototype._drawTextContent_draw = function (ctx, tempCtx, content, config) { if (config.index >= config.blocks.length) return false; var block = config.blocks[config.index++]; if (block != null) { - ctx.drawImage(tempCtx.canvas, block.left, block.top, block.width, block.height, + core.drawImage(ctx, tempCtx.canvas, block.left, block.top, block.width, block.height, config.left + block.left + block.marginLeft, config.top + block.top + block.marginTop, block.width, block.height); } @@ -1283,18 +1301,14 @@ ui.prototype.drawTextBox = function(content, showAll) { ui.prototype._drawTextBox_drawImages = function (content) { return content.replace(/(\f|\\f)\[(.*?)]/g, function (text, sympol, str) { var ss = str.split(","); - 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]]; - if (!img) return ""; // 绘制 if (ss.length==3) - core.drawImage('ui', img, parseFloat(ss[1]), parseFloat(ss[2])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2])); else if (ss.length==5) - core.drawImage('ui', img, 0, 0, img.width, img.height, parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4])); else if (ss.length==9 || ss.length==10) { if (ss.length==10) core.setAlpha('ui', parseFloat(ss[9])); - core.drawImage('ui', img, parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4]), parseFloat(ss[5]), parseFloat(ss[6]), parseFloat(ss[7]), parseFloat(ss[8])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4]), parseFloat(ss[5]), parseFloat(ss[6]), parseFloat(ss[7]), parseFloat(ss[8])); core.setAlpha('ui', 1); } return ""; diff --git a/libs/utils.js b/libs/utils.js index 7eaba683..96dc5b38 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -352,13 +352,13 @@ utils.prototype.splitImage = function (image, width, height) { width = width || 32; height = height || width; var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var ctx = canvas.getContext("2d"); var ans = []; for (var j = 0; j < image.height; j += height) { for (var i = 0; i < image.width; i += width) { var w = Math.min(width, image.width - i), h = Math.min(height, image.height - j); canvas.width = w; canvas.height = h; - context.drawImage(image, i, j, w, h, 0, 0, w, h); + core.drawImage(ctx, image, i, j, w, h, 0, 0, w, h); var img = new Image(); img.src = canvas.toDataURL("image/png"); ans.push(img); diff --git a/project/functions.js b/project/functions.js index 313cbd28..220ffe03 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1360,7 +1360,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 绘制下一个数据 var name = toDraw[index]; // 图片大小25x25 - ctx.drawImage(core.statusBar.icons[name], leftOffset, topOffset, 25, 25); + core.drawImage(ctx, core.statusBar.icons[name], leftOffset, topOffset, 25, 25); // 文字内容 var text = (core.statusBar[name] || {}).innerText || " "; // 斜体判定:如果不是纯数字和字母,斜体会非常难看,需要取消 diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 1d0849d9..a66af87d 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -59,11 +59,11 @@ (已完成!) 右边框输入完后解析按钮高亮 (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) -装备同时加属性和比例 +(已完成!) 装备同时加属性和比例 (已完成!) removeMap和resumeMap 右键图块选择复制/粘贴事件 -showImage, drawImage等加上对称选项 - +(已完成!) showImage, drawImage,立绘等加上对称选项 +更多的图块blockly化 ------------- From 9f42963db8d5df6287f52ff2580ffe1f9f0e15e0 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 22:35:08 +0800 Subject: [PATCH 29/49] =?UTF-8?q?=E5=8F=B3=E9=94=AE=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E7=B2=98=E8=B4=B4=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor.js | 5 +--- _server/editor_listen.js | 6 ++--- _server/editor_mappanel.js | 48 +++++++++++++++++++------------------- editor-mobile.html | 2 +- editor.html | 2 +- v2.x-final更新.txt | 2 +- 6 files changed, 31 insertions(+), 34 deletions(-) diff --git a/_server/editor.js b/_server/editor.js index c2843696..ea23b9c7 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -20,7 +20,7 @@ function editor() { chooseThis : document.getElementById('chooseThis'), chooseInRight : document.getElementById('chooseInRight'), copyLoc : document.getElementById('copyLoc'), - moveLoc : document.getElementById('moveLoc'), + pasteLoc : document.getElementById('pasteLoc'), clearEvent : document.getElementById('clearEvent'), clearLoc : document.getElementById('clearLoc'), brushMod:document.getElementById('brushMod'), @@ -80,9 +80,6 @@ function editor() { scrollBarHeight :0, folded:false, foldPerCol: 50, - // 画图区菜单 - lastRightButtonPos:[{x:0,y:0},{x:0,y:0}], - lastCopyedInfo : [null, null], // ratio : 1, // blockly转义 diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 7a3b83b1..ebbf0369 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -32,7 +32,7 @@ editor_listen_wrapper = function (editor) { editor.dom.chooseThis.onmousedown = editor.uifunctions.chooseThis_click editor.dom.chooseInRight.onmousedown = editor.uifunctions.chooseInRight_click editor.dom.copyLoc.onmousedown = editor.uifunctions.copyLoc_click - editor.dom.moveLoc.onmousedown = editor.uifunctions.moveLoc_click + editor.dom.pasteLoc.onmousedown = editor.uifunctions.pasteLoc_click editor.dom.clearEvent.onmousedown = editor.uifunctions.clearEvent_click editor.dom.clearLoc.onmousedown = editor.uifunctions.clearLoc_click @@ -130,8 +130,8 @@ editor_listen_wrapper = function (editor) { editor.dom.chooseInRight.onmousedown = null editor.dom.copyLoc.ontouchstart = editor.dom.copyLoc.onmousedown editor.dom.copyLoc.onmousedown = null - editor.dom.moveLoc.ontouchstart = editor.dom.moveLoc.onmousedown - editor.dom.moveLoc.onmousedown = null + editor.dom.pasteLoc.ontouchstart = editor.dom.pasteLoc.onmousedown + editor.dom.pasteLoc.onmousedown = null editor.dom.clearLoc.ontouchstart = editor.dom.clearLoc.onmousedown editor.dom.clearLoc.onmousedown = null diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index f2f850ac..854514d2 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -342,12 +342,7 @@ editor_mappanel_wrapper = function (editor) { * 显示右键菜单 */ editor.uifunctions.showMidMenu = function (x, y) { - editor.uivalues.lastRightButtonPos = JSON.parse(JSON.stringify( - [editor.pos, editor.uivalues.lastRightButtonPos[0]] - )); // --- copy - editor.uivalues.lastCopyedInfo = [editor.copyFromPos(), editor.uivalues.lastCopyedInfo[0]]; - var locStr = '(' + editor.uivalues.lastRightButtonPos[1].x + ',' + editor.uivalues.lastRightButtonPos[1].y + ')'; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; @@ -386,8 +381,8 @@ editor_mappanel_wrapper = function (editor) { else editor.dom.extraEvent.style.display = 'none'; editor.dom.chooseThis.children[0].innerHTML = '选中此点' + '(' + editor.pos.x + ',' + editor.pos.y + ')' - editor.dom.copyLoc.children[0].innerHTML = '复制事件' + locStr + '到此处'; - editor.dom.moveLoc.children[0].innerHTML = '交换事件' + locStr + '与此事件的位置'; + editor.dom.copyLoc.children[0].innerHTML = '复制此事件'; + editor.dom.pasteLoc.children[0].innerHTML = '粘贴到此事件'; editor.dom.midMenu.style = 'top:' + (y + scrollTop) + 'px;left:' + (x + scrollLeft) + 'px;'; } @@ -568,34 +563,39 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.copyLoc_click = function (e) { editor.uifunctions.hideMidMenu(); e.stopPropagation(); + e.preventDefault(); + editor_mode.onmode(''); + editor.uivalues.copyedInfo = editor.copyFromPos(); + printf('该点事件已复制'); + return; + } + + /** + * editor.dom.pasteLoc.onmousedown + * 菜单 移动此事件 + */ + editor.uifunctions.pasteLoc_click = function (e) { + editor.uifunctions.hideMidMenu(); + e.stopPropagation(); + e.preventDefault(); + if (!editor.uivalues.copyedInfo) { + printe("没有复制的事件"); + return; + } editor.savePreMap(); editor_mode.onmode(''); - var now = editor.pos, last = editor.uivalues.lastRightButtonPos[1]; - if (now.x == last.x && now.y == last.y) return; - editor.pasteToPos(editor.uivalues.lastCopyedInfo[1]); + editor.pasteToPos(editor.uivalues.copyedInfo); editor.updateMap(); editor.file.saveFloorFile(function (err) { if (err) { printe(err); throw (err) } - ; printf('复制事件成功'); + ; printf('粘贴到事件成功'); editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); - } - - /** - * editor.dom.moveLoc.onmousedown - * 菜单 移动此事件 - */ - editor.uifunctions.moveLoc_click = function (e) { - editor.uifunctions.hideMidMenu(); - e.stopPropagation(); - editor.savePreMap(); - editor_mode.onmode(''); - editor.exchangePos(editor.pos, editor.uivalues.lastRightButtonPos[1]); - editor.uifunctions.unhighlightSaveFloorButton(); + return; } /** diff --git a/editor-mobile.html b/editor-mobile.html index b82d63df..d5a712f2 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -367,7 +367,7 @@ - + diff --git a/editor.html b/editor.html index 5c00ccf8..3a4ffe01 100644 --- a/editor.html +++ b/editor.html @@ -390,7 +390,7 @@ - + diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index a66af87d..bec76390 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -61,7 +61,7 @@ (已完成!) 难度分歧的图块(颜色,含SL界面) (已完成!) 装备同时加属性和比例 (已完成!) removeMap和resumeMap -右键图块选择复制/粘贴事件 +(已完成!) 右键图块选择复制/粘贴事件 (已完成!) showImage, drawImage,立绘等加上对称选项 更多的图块blockly化 From 803b7c3cc42aa851eeeb5f949a0b8f536f0feaf6 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 23:52:02 +0800 Subject: [PATCH 30/49] =?UTF-8?q?=E6=A5=BC=E5=B1=82=E8=89=B2=E8=B0=83?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E9=80=89=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/editor_blockly.js | 3 +-- _server/editor_table.js | 17 +++++++++++++++++ _server/table/comment.js | 2 +- _server/thirdparty/jsColor.js | 36 ++++++++++++++++------------------- editor-mobile.html | 8 ++++---- editor.html | 8 ++++---- 6 files changed, 43 insertions(+), 31 deletions(-) diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 74325011..3d906c17 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -1169,9 +1169,8 @@ Blockly.FieldColour.prototype.createWidget_ = function() { setTimeout(function () { document.getElementById("colorPicker").value = getValue(); - window.jsColorPicker.confirm = setValue; // 设置位置 - triggerColorPicker(Blockly.WidgetDiv.DIV.style.left, Blockly.WidgetDiv.DIV.style.top); + openColorPicker(Blockly.WidgetDiv.DIV.style.left, Blockly.WidgetDiv.DIV.style.top, setValue); }); return document.createElement('table'); diff --git a/_server/editor_table.js b/_server/editor_table.js index d36d1da2..1e2e9e93 100644 --- a/_server/editor_table.js +++ b/_server/editor_table.js @@ -412,6 +412,7 @@ editor_table_wrapper = function (editor) { if (cobj._type === 'event') editor_blockly.import(guid, { type: cobj._event }); if (cobj._type === 'textarea') editor_multi.import(guid, { lint: cobj._lint, string: cobj._string }); if (cobj._type === 'material') editor.table.selectMaterial(input, cobj); + if (cobj._type === 'color') editor.table.selectColor(input); } /** @@ -426,6 +427,7 @@ editor_table_wrapper = function (editor) { if (cobj._type === 'event') editor_blockly.import(guid, { type: cobj._event }); if (cobj._type === 'textarea') editor_multi.import(guid, { lint: cobj._lint, string: cobj._string }); if (cobj._type === 'material') editor.table.selectMaterial(input, cobj); + if (cobj._type === 'color') editor.table.selectColor(input); } else if (editor_mode.doubleClickMode === 'add') { editor_mode.doubleClickMode = 'change'; editor.table.addfunc(guid, obj, commentObj, thisTr, input, field, cobj, modeNode) @@ -446,6 +448,21 @@ editor_table_wrapper = function (editor) { }) } + editor_table.prototype.selectColor = function (input) { + if (input.value != null) { + var str = input.value.toString().replace(/[^\d.,]/g, ''); + if (/^(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d),(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(,0(\.\d+)?|,1)?$/.test(str)) { + document.getElementById('colorPicker').value = str; + } + } + var boundingBox = input.getBoundingClientRect(); + openColorPicker(boundingBox.x, boundingBox.y + boundingBox.height, function (value) { + value = value.replace(/[^\d.,]/g, ''); + input.value = '[' + value +']'; + input.onchange(); + }) + } + /** * 删除表格项 */ diff --git a/_server/table/comment.js b/_server/table/comment.js index 753dc71d..4cc774d4 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -464,7 +464,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "color": { "_leaf": true, - "_type": "textarea", + "_type": "color", "_docs": "色调", "_data": "该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组如[255,0,0,0.3]" }, diff --git a/_server/thirdparty/jsColor.js b/_server/thirdparty/jsColor.js index cbd9dee6..0d85e920 100644 --- a/_server/thirdparty/jsColor.js +++ b/_server/thirdparty/jsColor.js @@ -121,7 +121,7 @@ colorPickers.current = colorPickers[index]; } }, - createListener = function(e) { + createListener = function() { elm = document.getElementById("colorPicker"); var input = elm, position = window.ColorPicker.getOrigin(input), @@ -268,9 +268,19 @@ jsColorPicker('input.color', { size: 1, }); -function openColorFromButton() { - delete window.jsColorPicker.confirm; - triggerColorPicker('414px', '53px'); +function openColorPicker(px, py, callback) { + window.jsColorPicker.confirm = callback; + var colorPanel = document.getElementById('colorPanel'); + if (colorPanel.style.display=='none' && px != null && py != null) { + colorPanel.style.display = "inline-block"; + colorPanel.style.left = px + 'px'; + colorPanel.style.top = py + 'px'; + window.jsColorPicker.create(); + } + else { + colorPanel.style.display = 'none'; + delete window.jsColorPicker.confirm; + } } function confirmColor() { @@ -287,22 +297,8 @@ function confirmColor() { colorPicker.select(); document.execCommand("Copy"); } - - triggerColorPicker(); -} - -function triggerColorPicker(left, top) { - var colorPanel = document.getElementById('colorPanel'); - if (colorPanel.style.display=='none' && left && top) { - colorPanel.style.display = "inline-block"; - colorPanel.style.left = left; - colorPanel.style.top = top; - window.jsColorPicker.create(); - } - else { - colorPanel.style.display = 'none'; - delete window.jsColorPicker.confirm; - } + colorPanel.style.display = 'none'; + delete window.jsColorPicker.confirm; } // ------ AutoCompletion ------ diff --git a/editor-mobile.html b/editor-mobile.html index d5a712f2..cc699088 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -228,10 +228,6 @@ - @@ -249,6 +245,10 @@ +
diff --git a/editor.html b/editor.html index 3a4ffe01..afde3eb3 100644 --- a/editor.html +++ b/editor.html @@ -223,10 +223,6 @@
- @@ -244,6 +240,10 @@ +
From e6b4c7811441dc025e4b90253cc53d8b269b6b52 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 21 May 2020 10:58:20 +0800 Subject: [PATCH 31/49] =?UTF-8?q?=E6=A5=BC=E5=B1=82=E8=B4=B4=E5=9B=BE?= =?UTF-8?q?=E5=9B=BE=E5=9D=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 49 +++++++++++++++++++++ _server/MotaActionParse.js | 11 +++++ _server/editor_blockly.js | 3 ++ _server/table/comment.js | 3 +- editor-mobile.html | 1 + editor.html | 1 + libs/events.js | 2 + libs/maps.js | 89 ++++++++++++++++++-------------------- project/floors/sample1.js | 22 +++++----- project/functions.js | 1 + v2.x-final更新.txt | 3 ++ 11 files changed, 126 insertions(+), 59 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 6449f4d5..48b6854c 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -412,6 +412,51 @@ var code = ' \n'; return code; */; +floorImage_m + : '楼层贴图' BGNL? Newline floorImageList+ BEND + + +/* floorImage_m +tooltip : 楼层贴图 +helpUrl : https://h5mota.com/games/template/_docs/#/event +var code = '[\n'+floorImageList_0+']\n'; +return code; +*/; + +floorImageList + : floorOneImage + | floorEmptyImage; + +floorOneImage + : '图片名' EvalString '翻转' Reverse_List '图层' Bg_Fg2_List '绘制坐标' 'x' Int 'y' Int '初始禁用' Bool BGNL? Newline + '裁剪起点坐标' 'x' IntString? 'y' IntString? '宽' IntString? '高' IntString? '帧数' IntString? BEND + + +/* floorOneImage +tooltip : 楼层贴图 +default : ["bg.jpg","null","bg",0,0,false,"","","","",""] +helpUrl : https://h5mota.com/games/template/_docs/#/event +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; +Bool_0 = Bool_0 ? (', "disable": true') : ''; +IntString_0 = IntString_0 && (', "sx": '+IntString_0); +IntString_1 = IntString_1 && (', "sy": '+IntString_1); +IntString_2 = IntString_2 && (', "w": '+IntString_2); +IntString_3 = IntString_3 && (', "h": '+IntString_3); +IntString_4 = IntString_4 && (', "frame": '+IntString_4); +return '{"name": "'+EvalString_0+'"'+Reverse_List_0+', "canvas": "'+Bg_Fg2_List_0+'", "x": '+Int_0+', "y": '+Int_1+Bool_0+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+'},\n'; +*/; + +floorEmptyImage + : Newline + +/* floorEmptyImage +var code = ' \n'; +return code; +*/; + + //为了避免关键字冲突,全部加了_s //动作 @@ -2910,6 +2955,10 @@ Bg_Fg_List : '背景层'|'前景层' /*Bg_Fg_List ['bg','fg']*/; +Bg_Fg2_List + : '背景层'|'前景层'|'自适配' + /*Bg_Fg2_List ['bg','fg','auto']*/; + IgnoreChangeFloor_List : '全局默认值' | '可穿透' | '不可穿透' /*IgnoreChangeFloor_List ['null','true','false']*/; diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index 5dc47b83..acfb4dcf 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -74,6 +74,17 @@ ActionParser.prototype.parse = function (obj,type) { } return MotaActionBlocks['equip_m'].xmlText([obj.type, obj.animate, buildEquip(obj.value), buildEquip(obj.percentage)]); + case 'floorImage': + if(!obj) obj=[]; + var text_choices = null; + for(var ii=obj.length-1,choice;choice=obj[ii];ii--) { + text_choices=MotaActionBlocks['floorOneImage'].xmlText([ + choice.name, choice.reverse, choice.canvas||'bg', choice.x||0, choice.y||0, choice.disable||false, + choice.sx, choice.sy, choice.w, choice.h, choice.frame, text_choices]); + } + return MotaActionBlocks['floorImage_m'].xmlText([text_choices]); + + case 'shop': var buildsub = function(obj,parser,next){ var text_choices = null; diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 74325011..d4cee0f8 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -78,6 +78,9 @@ editor_blockly = function () { MotaActionFunctions.actionParser.parse({ "type": 0, "value": {"atk": 10}, "percentage": {"speed": 10}, }, 'equip'), + MotaActionFunctions.actionParser.parse([{ + "name": "bg.jpg", "x": 0, "y": 0, "canvas": "bg" + }], 'floorImage'), ], '显示文字':[ MotaActionBlocks['text_0_s'].xmlText(), diff --git a/_server/table/comment.js b/_server/table/comment.js index 753dc71d..a10b93aa 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -458,7 +458,8 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "images": { "_leaf": true, - "_type": "textarea", + "_type": "event", + "_event": "floorImage", "_docs": "楼层贴图", "_data": "背景/前景图;你可以选择若干张图片来作为背景/前景素材。详细用法请参见文档“自定义素材”中的说明。" }, diff --git a/editor-mobile.html b/editor-mobile.html index b82d63df..ac036b3f 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -219,6 +219,7 @@ + diff --git a/editor.html b/editor.html index 5c00ccf8..eaa90de5 100644 --- a/editor.html +++ b/editor.html @@ -215,6 +215,7 @@ + diff --git a/libs/events.js b/libs/events.js index c03d7379..66e9922b 100644 --- a/libs/events.js +++ b/libs/events.js @@ -928,6 +928,8 @@ events.prototype.doAction = function (keepUI) { } events.prototype._doAction_finishEvents = function () { + if (core.status.gameOver) return true; + // 事件处理完毕 if (core.status.event.data.list.length == 0) { // 检测并执行延迟自动事件 diff --git a/libs/maps.js b/libs/maps.js index f7a94593..b95d77b6 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -22,6 +22,17 @@ maps.prototype._setFloorSize = function (floorId) { core.floors[floorId].height = core.floors[floorId].height || core.__SIZE__; } +maps.prototype._resetFloorImages = function () { + for (var floorId in core.status.maps) { + (core.status.maps[floorId].images || []).forEach(function (one) { + var flag = "__floorImg__" + floorId + "_" + one.x + "_" + one.y; + if (core.getFlag(flag) == null) { + if (one.disabled) core.setFlag(flag, true); + } + }) + } +} + // ------ 加载地图与地图的存档读档(压缩与解压缩) ------ // ////// 加载某个楼层(从剧本或存档中) ////// @@ -896,39 +907,25 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat floorId = floorId || core.status.floorId; if (!images) images = this._getFloorImages(floorId); var redraw = currStatus != null; - images.forEach(function (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); - if (imageName.endsWith(':x') || imageName.endsWith(':y') || imageName.endsWith(':o')) { - imageName = imageName.substring(0, imageName.length - 2); - } - imageName = core.getMappedName(imageName); - var image = core.material.images.images[imageName]; + images.forEach(function (one) { + var image = core.material.images.images[core.getMappedName(one.name)]; + var frame = one.frame || 1; + if (!image) return; + var flag = "__floorImg__" + floorId + "_" + one.x + "_" + one.y; + if (core.hasFlag(flag)) return; if (redraw && frame == 1) return; // 不重绘 - if (core.isset(dx) && core.isset(dy) && image && - !core.hasFlag("__floorImg__" + floorId + "_" + dx + "_" + dy)) { - var width = parseInt(image.width / frame), offsetX = (currStatus || 0) % frame * width; - if (/.*\.gif/i.test(imageName) && main.mode == 'play') { - if (redraw) return; // 忽略gif - this._drawFloorImages_gif(image, dx, dy); - return; - } - core.maps._drawFloorImage(ctx, name, t[3], t[2], image, offsetX, width, dx, dy, redraw); + if (/.*\.gif/i.test(one.name)) { + if (redraw) return; + this._drawFloorImages_gif(image, one.x, one.y); + return; } - }); + this._drawFloorImage(ctx, name, one, image, currStatus); + }, this); } maps.prototype._getFloorImages = function (floorId) { - floorId = floorId || core.status.floorId; - var images = []; - if ((core.status.maps || core.floors)[floorId].images) { - images = (core.status.maps || core.floors)[floorId].images; - if (typeof images == 'string') { - images = [[0, 0, images]]; - } - } - return images; + return ((core.status.maps || core.floors)[floorId || core.status.floorId] || {}).images || []; } maps.prototype._drawFloorImages_gif = function (image, dx, dy) { @@ -944,30 +941,26 @@ maps.prototype._drawFloorImages_gif = function (image, dx, dy) { return; } -maps.prototype._drawFloorImage = function (ctx, name, type, imageName, image, offsetX, width, dx, dy, redraw) { +maps.prototype._drawFloorImage = function (ctx, name, one, image, currStatus) { var height = image.height; - var _draw = function () { - if (redraw) core.clearMap(ctx, dx, dy, width, height); - core.drawImage(ctx, imageName, offsetX, 0, width, height, dx, dy, width, height); - } - if (!type) { - if (name != 'bg') return; - return _draw(); - } - if (type == 1) { - if (name != 'fg') return; - return _draw(); - } - if (type == 2) { + var imageName = one.name + (one.reverse||''); + var width = parseInt((one.w == null ? image.width : one.w) / (one.frame || 1)); + var height = one.h == null ? image.height : one.h; + var sx = (one.sx || 0) + (currStatus || 0) % (one.frame || 1) * width; + var sy = one.sy || 0; + + if (one.canvas != 'auto' && one.canvas != name) return; + if (one.canvas != 'auto') { + if (currStatus != null) core.clearMap(ctx, one.x, one.y, width, height); + core.drawImage(ctx, imageName, sx, sy, width, height, one.x, one.y, width, height); + } else { if (name == 'bg') { - if (redraw) core.clearMap(ctx, dx, dy + height - 32, width, 32); - core.drawImage('bg', imageName, offsetX, height - 32, width, 32, dx, dy + height - 32, width, 32); + if (currStatus != null) core.clearMap(ctx, one.x, one.y + height - 32, width, 32); + core.drawImage(ctx, imageName, sx, sy + height - 32, width, 32, one.x, one.y+height - 32, width, 32); + } else if (name == 'fg') { + if (currStatus != null) core.clearMap(ctx, one.x, one.y, width, height - 32); + core.drawImage(ctx, imageName, sx, sy, width, height - 32, one.x, one.y, width, height - 32); } - else if (name == 'fg') { - if (redraw) core.clearMap(ctx, dx, dy, width, height - 32); - core.drawImage('fg', imageName, offsetX, 0, width, height - 32, dx, dy, width, height - 32); - } - return; } } diff --git a/project/floors/sample1.js b/project/floors/sample1.js index a3468def..14361334 100644 --- a/project/floors/sample1.js +++ b/project/floors/sample1.js @@ -7,12 +7,14 @@ main.floors.sample1= "canUseQuickShop": true, "defaultGround": "grass", "images": [ - [ - 0, - 0, - "bg.jpg", - 0 - ] + { + "name": "bg.jpg", + "canvas": "bg", + "x": 0, + "y": 0, + "w": 416, + "h": 416 + } ], "weather": [ "snow", @@ -263,13 +265,13 @@ main.floors.sample1= } ], "10,4": [ - "\t[blackKing]你终于还是来了。", + "\t[blackMS]你终于还是来了。", "\t[hero]放开我们的公主!", - "\t[blackKing]如果我不愿意呢?", + "\t[blackMS]如果我不愿意呢?", "\t[hero]无需多说,拔剑吧!", { "type": "battle", - "id": "blackKing" + "id": "blackMS" }, { "type": "hide", @@ -285,7 +287,7 @@ main.floors.sample1= 7 ] }, - "\t[blackKing]没想到你已经变得这么强大了... 算你厉害。\n公主就交给你了,请好好对她。", + "\t[blackMS]没想到你已经变得这么强大了... 算你厉害。\n公主就交给你了,请好好对她。", { "type": "hide" } diff --git a/project/functions.js b/project/functions.js index 220ffe03..2ba7ca99 100644 --- a/project/functions.js +++ b/project/functions.js @@ -26,6 +26,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 初始化地图 core.status.floorId = floorId; core.status.maps = maps; + core.maps._resetFloorImages(); // 初始化怪物和道具 core.material.enemys = core.enemys.getEnemys(); core.material.items = core.items.getItems(); diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index a66af87d..c9ebdcbd 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -64,6 +64,9 @@ 右键图块选择复制/粘贴事件 (已完成!) showImage, drawImage,立绘等加上对称选项 更多的图块blockly化 +勇士帧抖动 +怪物名和特殊属性自动缩小 + ------------- From 237b6a492641c0ae215783170ca3e2399184a7b2 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 21 May 2020 12:32:33 +0800 Subject: [PATCH 32/49] =?UTF-8?q?=E9=97=A8=E4=BF=A1=E6=81=AF&=E6=9C=9D?= =?UTF-8?q?=E5=90=91=E7=9A=84=E5=9B=BE=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 73 ++++++++++++++++++++++++++++++++++++++ _server/MotaActionParse.js | 19 ++++++++++ _server/editor_blockly.js | 12 +++++-- _server/table/comment.js | 6 ++-- editor-mobile.html | 2 ++ editor.html | 2 ++ libs/events.js | 19 +++++----- project/maps.js | 28 +++++++-------- 8 files changed, 133 insertions(+), 28 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 48b6854c..b117d948 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -457,6 +457,75 @@ return code; */; +// doorInfo 事件编辑器入口之一 +doorInfo_m + : '门信息' '开关门时间' Int '开门音效' EvalString? '关门音效' EvalString? BGNL? Newline '需要钥匙' doorKeyList+ BEND + + +/* doorInfo_m +tooltip : 开门信息 +default : [160, 'door.mp3', 'door.mp3'] +helpUrl : https://h5mota.com/games/template/_docs/#/event +EvalString_0 = EvalString_0 && (', "openSound": "' + EvalString_0 + '"'); +EvalString_1 = EvalString_1 && (', "closeSound": "' + EvalString_1 + '"'); +var code = '{"time": '+Int_0+EvalString_0+EvalString_1+', "keys": {\n'+doorKeyList_0+'\n}}'; +return code; +*/; + +doorKeyList + : doorKeyKnown + | doorKeyUnknown + | doorKeyEmpty; + + +doorKeyKnown + : Key_List ':' Int BEND + + +/* doorKeyKnown +tooltip : 需要钥匙 +default : ['yellowKey', 1] +helpUrl : https://h5mota.com/games/template/_docs/#/event +return '"'+Key_List_0+'": '+Int_0+', '; +*/; + +doorKeyUnknown + : IdString ':' Int BEND + + +/* doorKeyUnknown +tooltip : 需要钥匙 +default : ['orangeKey', 1] +helpUrl : https://h5mota.com/games/template/_docs/#/event +return '"'+IdString_0+'": '+Int_0+', '; +*/; + + +doorKeyEmpty + : Newline + +/* doorKeyEmpty +var code = ' \n'; +return code; +*/; + + +faceIds_m + : '行走图朝向:' BGNL? Newline '向上ID' IdString? '向下ID' IdString? '向左ID' IdString? '向右ID' IdString? BEND + + +/* faceIds_m +tooltip : 行走图朝向 +default : ["","","",""] +helpUrl : https://h5mota.com/games/template/_docs/#/event +return '{' + [ + IdString_0 && ('"up": "' + IdString_0 +'"'), + IdString_1 && ('"down": "' + IdString_1 +'"'), + IdString_2 && ('"left": "' + IdString_2 +'"'), + IdString_3 && ('"right": "' + IdString_3 +'"'), +].join(', ') + '}\n'; +*/; + //为了避免关键字冲突,全部加了_s //动作 @@ -3042,6 +3111,10 @@ Equip_List : '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'魔力'|'魔力上限' /*Equip_List ['hp','hpmax','atk','def','mdef','mana','manamax']*/; +Key_List + : '黄钥匙'|'蓝钥匙'|'红钥匙'|'绿钥匙'|'铁门钥匙' + /*Key_List ['yellowKey','blueKey','redKey','greenKey','steelKey']*/; + //转blockly后不保留需要加" EvalString : Equote_double (ESC_double | ~["\\])* Equote_double diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index acfb4dcf..0724ec9a 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -74,6 +74,22 @@ ActionParser.prototype.parse = function (obj,type) { } return MotaActionBlocks['equip_m'].xmlText([obj.type, obj.animate, buildEquip(obj.value), buildEquip(obj.percentage)]); + case 'doorInfo': + if(!obj) obj={}; + var buildKeys = function (obj) { + obj = obj || {}; + var text_choices = null; + var knownListKeys = MotaActionBlocks.doorKeyKnown.json.args0[0].options.map(function (one) {return one[1];}) + Object.keys(obj).sort().forEach(function (key) { + var one = knownListKeys.indexOf(key) >= 0 ? 'doorKeyKnown' : 'doorKeyUnknown'; + text_choices = MotaActionBlocks[one].xmlText([ + key, obj.key, text_choices + ]); + }) + return text_choices; + } + return MotaActionBlocks['doorInfo_m'].xmlText([obj.time || 160, obj.openSound, obj.closeSound, buildKeys(obj.keys)]); + case 'floorImage': if(!obj) obj=[]; var text_choices = null; @@ -84,6 +100,9 @@ ActionParser.prototype.parse = function (obj,type) { } return MotaActionBlocks['floorImage_m'].xmlText([text_choices]); + case 'faceIds': + if(!obj) obj={}; + return MotaActionBlocks['faceIds_m'].xmlText([obj.up||"", obj.down||"", obj.left||"", obj.right||""]); case 'shop': var buildsub = function(obj,parser,next){ diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 1d319b71..f857c66f 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -81,6 +81,10 @@ editor_blockly = function () { MotaActionFunctions.actionParser.parse([{ "name": "bg.jpg", "x": 0, "y": 0, "canvas": "bg" }], 'floorImage'), + MotaActionFunctions.actionParser.parse({ + "time": 160, "openSound": "door.mp3", "closeSound": "door.mp3", "keys": {"yellowKey": 1, "orangeKey": 1} + }, 'doorInfo'), + MotaActionBlocks['faceIds_m'].xmlText(), ], '显示文字':[ MotaActionBlocks['text_0_s'].xmlText(), @@ -1052,7 +1056,8 @@ function omitedcheckUpdateFunction(event) { || (type == 'choices_s' && name == 'IdString_0') || (type == 'choicesContext' && name == 'IdString_0') || (type == 'closeDoor_s' && name == 'IdString_0') || (type == 'setBlock_s' && name == 'EvalString_0') || (type == 'setBgFgBlock_s' && name == 'EvalString_0') || (type == 'drawIcon_s' && name == 'IdString_0') - || (type == 'shopsub' && name == 'IdString_1') || (type == 'shopChoices' && name == 'IdString_0')) { + || (type == 'shopsub' && name == 'IdString_1') || (type == 'shopChoices' && name == 'IdString_0') + || type == 'faceIds_m') { return filter(allIds, content); } @@ -1062,13 +1067,14 @@ function omitedcheckUpdateFunction(event) { } // 对道具ID进行补全 - if ((type == 'useItem_s' || type == 'loadEquip_s') && name == 'IdString_0') { + if ((type == 'useItem_s' || type == 'loadEquip_s' || type == 'doorKeyUnknown') && name == 'IdString_0') { return filter(allItems, content); } // 对图片名进行补全 if ((type == 'showImage_s' || type == 'showImage_1_s' || type == 'showGif_s' || type == 'setHeroIcon_s' - || type == 'follow_s' || type == 'unfollow_s' || type == 'drawImage_s' || type == 'drawImage_1_s') && name == 'EvalString_0') { + || type == 'follow_s' || type == 'unfollow_s' || type == 'drawImage_s' || type == 'drawImage_1_s' + || type == 'floorOneImage') && name == 'EvalString_0') { return filter(allImages, content); } diff --git a/_server/table/comment.js b/_server/table/comment.js index ca63b022..bdf74943 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -336,13 +336,15 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { }, "doorInfo": { "_leaf": true, - "_type": "textarea", + "_type": "event", + "_event": "doorInfo", "_docs": "门信息", "_data": "该图块的门信息,是一个四元数组。\n第一项为所需要的钥匙信息,第二项为开关门的毫秒数,第三项为开此门时的音效,第四项为关此门时的音效。仅对animates生效。" }, "faceIds": { "_leaf": true, - "_type": "textarea", + "_type": "event", + "_event": "faceIds", "_docs": "行走图朝向", "_data": "行走图朝向,仅对NPC有效。可以在这里定义同一个NPC的多个朝向行走图。\n比如 {\"up\":\"N333\",\"down\":\"N334\",\"left\":\"N335\",\"right\":\"N336\"} 就将该素材的上下左右朝向分别绑定到N333,N334,N335和N336四个图块。\n在勇士撞上NPC时,或NPC在移动时,会自动选择最合适的朝向图块(如果存在定义)来进行绘制。" } diff --git a/editor-mobile.html b/editor-mobile.html index e73794aa..ea13578b 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -220,6 +220,8 @@ + + diff --git a/editor.html b/editor.html index daba251b..3ede676b 100644 --- a/editor.html +++ b/editor.html @@ -216,6 +216,8 @@ + + diff --git a/libs/events.js b/libs/events.js index 66e9922b..412f20b3 100644 --- a/libs/events.js +++ b/libs/events.js @@ -469,13 +469,14 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { return clearAndReturn(); doorInfo = doorInfo.doorInfo; // Check all keys - var keyInfo = doorInfo[0]; + var keyInfo = doorInfo.keys || {}; if (needKey) { - if (keyInfo == null) { - core.drawTip("无法开启此门"); - return clearAndReturn(); - } for (var keyName in keyInfo) { + // --- 如果是一个不存在的道具,则直接认为无法开启 + if (!core.material.items[keyName]) { + core.drawTip("无法开启此门"); + return clearAndReturn(); + } var keyValue = keyInfo[keyName]; if (core.itemCount(keyName) < keyValue) { core.drawTip("你没有" + ((core.material.items[keyName] || {}).name || "钥匙"), null, true); @@ -487,7 +488,7 @@ events.prototype._openDoor_check = function (id, x, y, needKey) { core.removeItem(keyName, keyInfo[keyName]); } } - core.playSound(doorInfo[2] || 'door.mp3'); + core.playSound(doorInfo.openSound); return true; } @@ -495,7 +496,7 @@ events.prototype._openDoor_animate = function (id, x, y, callback) { var blockInfo = core.getBlockInfo(id); var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; - var speed = (core.getBlockById(id).event.doorInfo[1] || 160) / 4; + var speed = (core.getBlockById(id).event.doorInfo.time || 160) / 4; var locked = core.status.lockControl; core.lockControl(); @@ -2629,11 +2630,11 @@ events.prototype.closeDoor = function (x, y, id, callback) { } // 关门动画 - core.playSound(doorInfo[3] || 'door.mp3'); + core.playSound(doorInfo.closeDoor); var blockInfo = core.getBlockInfo(id); var image = blockInfo.image, posY = blockInfo.posY, height = blockInfo.height; - var speed = (doorInfo[1] || 160) / 4, state = 0; + var speed = (doorInfo.time || 160) / 4, state = 0; var animate = window.setInterval(function () { state++; if (state == 4) { diff --git a/project/maps.js b/project/maps.js index 09a10db7..0883429d 100644 --- a/project/maps.js +++ b/project/maps.js @@ -1,8 +1,8 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = { - "1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, - "2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, - "3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"]}, + "1": {"cls":"animates","id":"yellowWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}}, + "2": {"cls":"animates","id":"whiteWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}}, + "3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}}, "4": {"cls":"animates","id":"star","name":"星空"}, "5": {"cls":"animates","id":"lava","name":"岩浆"}, "6": {"cls":"terrains","id":"ice"}, @@ -68,12 +68,12 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "71": {"cls":"items","id":"shield0"}, "72": {"cls":"items","id":"skill1"}, "73": {"cls":"items","id":"wand"}, - "81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":[{"yellowKey":1},160,"door.mp3","door.mp3"],"name":"黄门"}, - "82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":[{"blueKey":1},160,"door.mp3","door.mp3"],"name":"蓝门"}, - "83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":[{"redKey":1},160,"door.mp3","door.mp3"],"name":"红门"}, - "84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":[{"greenKey":1},160,"door.mp3","door.mp3"],"name":"绿门"}, - "85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":[null,160,"door.mp3","door.mp3"],"name":"机关门"}, - "86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":[{"steelKey":1},160,"door.mp3","door.mp3"],"name":"铁门"}, + "81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"yellowKey":1}},"name":"黄门"}, + "82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"blueKey":1}},"name":"蓝门"}, + "83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"redKey":1}},"name":"红门"}, + "84": {"cls":"animates","id":"greenDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"greenKey":1}},"name":"绿门"}, + "85": {"cls":"animates","id":"specialDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"specialKey":1}},"name":"机关门"}, + "86": {"cls":"animates","id":"steelDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"steelKey":1}},"name":"铁门"}, "87": {"cls":"terrains","id":"upFloor","canPass":true}, "88": {"cls":"terrains","id":"downFloor","canPass":true}, "89": {"cls":"animates","id":"portal","canPass":true}, @@ -86,11 +86,11 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "102": {"cls":"animates","id":"crystalBottom"}, "103": {"cls":"animates","id":"fire"}, "104": {"cls":"animates","id":"switch"}, - "105": {"cls":"animates","id":"steelDoor2","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, - "106": {"cls":"animates","id":"steelDoor3","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, - "107": {"cls":"animates","id":"iceDoor","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, - "108": {"cls":"animates","id":"iceDoor2","doorInfo":[{},"door.mp3","door.mp3"],"animate":1,"trigger":"openDoor"}, - "109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":[null,"door.mp3","door.mp3"]}, + "105": {"cls":"animates","id":"steelDoor2","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"}, + "106": {"cls":"animates","id":"steelDoor3","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"}, + "107": {"cls":"animates","id":"iceDoor","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"}, + "108": {"cls":"animates","id":"iceDoor2","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"}, + "109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}}, "121": {"cls":"npcs","id":"man"}, "122": {"cls":"npcs","id":"trader"}, "123": {"cls":"npcs","id":"thief"}, From 012c8d7d80289df5146f66d4df6aaff09a808747 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Thu, 21 May 2020 22:04:21 +0800 Subject: [PATCH 33/49] =?UTF-8?q?=E6=9B=B4=E6=96=B0keyboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/materials/keyboard.png | Bin 26517 -> 26429 bytes styles.css | 5 ----- v2.x-final更新.txt | 3 ++- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/project/materials/keyboard.png b/project/materials/keyboard.png index 46500bcb201d93b1822aa62eed4b22ae5370ca27..0a89fc5275120078cf4c59c19dfd215c4fd417f9 100644 GIT binary patch literal 26429 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 diff --git a/styles.css b/styles.css index 999e30f4..0a12763a 100644 --- a/styles.css +++ b/styles.css @@ -295,27 +295,22 @@ p#name { #bg { z-index: 10; - image-rendering: pixelated; } #event { z-index: 30; - image-rendering: pixelated; } #hero { z-index: 40; - image-rendering: pixelated; } #event2 { z-index: 50; - image-rendering: pixelated; } #fg { z-index: 60; - image-rendering: pixelated; } #damage { diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index c2c2bc15..30fc8cbf 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -63,9 +63,10 @@ (已完成!) removeMap和resumeMap (已完成!) 右键图块选择复制/粘贴事件 (已完成!) showImage, drawImage,立绘等加上对称选项 -更多的图块blockly化 +(已完成!) 更多的图块blockly化 勇士帧抖动 怪物名和特殊属性自动缩小 +行走动画? ------------- From 53f98f7b3af6a248dc31925ad3b9f9e77040dd0f Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 22 May 2020 09:47:32 +0800 Subject: [PATCH 34/49] update converter.bundle --- _server/blockly/Converter.bundle.min.js | 2 +- _server/editor_blockly.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/_server/blockly/Converter.bundle.min.js b/_server/blockly/Converter.bundle.min.js index fa99a635..82b274ba 100644 --- a/_server/blockly/Converter.bundle.min.js +++ b/_server/blockly/Converter.bundle.min.js @@ -1 +1 @@ -!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=32)}([function(t,e){function n(t){return"["+t.join(", ")+"]"}function r(t,e){return t.equals(e)}function i(t){return t.hashCode()}function o(t,e){return this.data={},this.hashFunction=t||i,this.equalsFunction=e||r,this}function s(){return this.data=[],this}function a(t,e){return this.data={},this.hashFunction=t||i,this.equalsFunction=e||r,this}function l(){return this.data={},this}function u(){return this}function c(){return this.count=0,this.hash=0,this}String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32)),String.prototype.hashCode=function(){var t,e,n,r,i,o,s,a,l=this.toString();for(t=3&l.length,e=l.length-t,n=String.prototype.seed,i=3432918353,o=461845907,a=0;a>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295)<<13|n>>>19))+((5*(n>>>16)&65535)<<16)&4294967295))+((58964+(r>>>16)&65535)<<16);switch(s=0,t){case 3:s^=(255&l.charCodeAt(a+2))<<16;case 2:s^=(255&l.charCodeAt(a+1))<<8;case 1:n^=s=(65535&(s=(s=(65535&(s^=255&l.charCodeAt(a)))*i+(((s>>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295}return n^=l.length,n=2246822507*(65535&(n^=n>>>16))+((2246822507*(n>>>16)&65535)<<16)&4294967295,n=3266489909*(65535&(n^=n>>>13))+((3266489909*(n>>>16)&65535)<<16)&4294967295,(n^=n>>>16)>>>0},Object.defineProperty(o.prototype,"length",{get:function(){var t=0;for(var e in this.data)0===e.indexOf("hash_")&&(t+=this.data[e].length);return t}}),o.prototype.add=function(t){var e="hash_"+this.hashFunction(t);if(e in this.data){for(var n=this.data[e],r=0;r>>17,n*=461845907,this.count=this.count+1;var r=this.hash^n;r=5*(r=r<<13|r>>>19)+3864292196,this.hash=r}}},c.prototype.finish=function(){var t=this.hash^4*this.count;return t^=t>>>16,t*=2246822507,t^=t>>>13,t*=3266489909,t^=t>>>16},u.prototype.get=function(t,e){var n=this[t]||null;return null===n?null:n[e]||null},u.prototype.set=function(t,e,n){var r=this[t]||null;null===r&&(r={},this[t]=r),r[e]=n},e.Hash=c,e.Set=o,e.Map=a,e.BitSet=s,e.AltDict=l,e.DoubleDict=u,e.hashStuff=function(){var t=new c;return t.update.apply(arguments),t.finish()},e.escapeWhitespace=function(t,e){return t=(t=(t=t.replace("\t","\\t")).replace("\n","\\n")).replace("\r","\\r"),e&&(t=t.replace(" ","·")),t},e.arrayToString=n,e.titleCase=function(t){return t.replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1)})},e.equalArrays=function(t,e){if(!Array.isArray(t)||!Array.isArray(e))return!1;if(t==e)return!0;if(t.length!=e.length)return!1;for(var n=0;n"},set:function(t){this._text=t}}),r.prototype.toString=function(){var t=this.text;return t=null!==t?t.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+t+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"},e.Token=n,e.CommonToken=r},function(t,e,n){var r=n(1).Token;function i(t,e){return this.start=t,this.stop=e,this}function o(){this.intervals=null,this.readOnly=!1}i.prototype.contains=function(t){return t>=this.start&&t=n.stop?(this.intervals.pop(t+1),this.reduce(t)):e.stop>=n.start&&(this.intervals[t]=new i(e.start,n.stop),this.intervals.pop(t+1))}},o.prototype.complement=function(t,e){var n=new o;n.addInterval(new i(t,e+1));for(var r=0;rr.start&&t.stop=r.stop?(this.intervals.splice(e,1),e-=1):t.start"):t.push("'"+String.fromCharCode(n.start)+"'"):t.push("'"+String.fromCharCode(n.start)+"'..'"+String.fromCharCode(n.stop-1)+"'")}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toIndexString=function(){for(var t=[],e=0;e"):t.push(n.start.toString()):t.push(n.start.toString()+".."+(n.stop-1).toString())}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toTokenString=function(t,e){for(var n=[],r=0;r1?"{"+n.join(", ")+"}":n[0]},o.prototype.elementName=function(t,e,n){return n===r.EOF?"":n===r.EPSILON?"":t[n]||e[n]},e.Interval=i,e.IntervalSet=o},function(t,e){function n(){return this.atn=null,this.stateNumber=n.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function r(){return n.call(this),this.stateType=n.BASIC,this}function i(){return n.call(this),this.decision=-1,this.nonGreedy=!1,this}function o(){return i.call(this),this.endState=null,this}function s(){return o.call(this),this.stateType=n.BLOCK_START,this}function a(){return n.call(this),this.stateType=n.BLOCK_END,this.startState=null,this}function l(){return n.call(this),this.stateType=n.RULE_STOP,this}function u(){return n.call(this),this.stateType=n.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function c(){return i.call(this),this.stateType=n.PLUS_LOOP_BACK,this}function h(){return o.call(this),this.stateType=n.PLUS_BLOCK_START,this.loopBackState=null,this}function p(){return o.call(this),this.stateType=n.STAR_BLOCK_START,this}function f(){return n.call(this),this.stateType=n.STAR_LOOP_BACK,this}function d(){return i.call(this),this.stateType=n.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function y(){return n.call(this),this.stateType=n.LOOP_END,this.loopBackState=null,this}function g(){return i.call(this),this.stateType=n.TOKEN_START,this}n.INVALID_TYPE=0,n.BASIC=1,n.RULE_START=2,n.BLOCK_START=3,n.PLUS_BLOCK_START=4,n.STAR_BLOCK_START=5,n.TOKEN_START=6,n.RULE_STOP=7,n.BLOCK_END=8,n.STAR_LOOP_BACK=9,n.STAR_LOOP_ENTRY=10,n.PLUS_LOOP_BACK=11,n.LOOP_END=12,n.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],n.INVALID_STATE_NUMBER=-1,n.prototype.toString=function(){return this.stateNumber},n.prototype.equals=function(t){return t instanceof n&&this.stateNumber===t.stateNumber},n.prototype.isNonGreedyExitState=function(){return!1},n.prototype.addTransition=function(t,e){void 0===e&&(e=-1),0===this.transitions.length?this.epsilonOnlyTransitions=t.isEpsilon:this.epsilonOnlyTransitions!==t.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===e?this.transitions.push(t):this.transitions.splice(e,1,t)},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,i.prototype=Object.create(n.prototype),i.prototype.constructor=i,o.prototype=Object.create(i.prototype),o.prototype.constructor=o,s.prototype=Object.create(o.prototype),s.prototype.constructor=s,a.prototype=Object.create(n.prototype),a.prototype.constructor=a,l.prototype=Object.create(n.prototype),l.prototype.constructor=l,u.prototype=Object.create(n.prototype),u.prototype.constructor=u,c.prototype=Object.create(i.prototype),c.prototype.constructor=c,h.prototype=Object.create(o.prototype),h.prototype.constructor=h,p.prototype=Object.create(o.prototype),p.prototype.constructor=p,f.prototype=Object.create(n.prototype),f.prototype.constructor=f,d.prototype=Object.create(i.prototype),d.prototype.constructor=d,y.prototype=Object.create(n.prototype),y.prototype.constructor=y,g.prototype=Object.create(i.prototype),g.prototype.constructor=g,e.ATNState=n,e.BasicState=r,e.DecisionState=i,e.BlockStartState=o,e.BlockEndState=a,e.LoopEndState=y,e.RuleStartState=u,e.RuleStopState=l,e.TokensStartState=g,e.PlusLoopbackState=c,e.StarLoopbackState=f,e.StarLoopEntryState=d,e.PlusBlockStartState=h,e.StarBlockStartState=p,e.BasicBlockStartState=s},function(t,e,n){var r=n(1).Token,i=n(2).Interval,o=new i(-1,-2);n(0);function s(){return this}function a(){return s.call(this),this}function l(){return a.call(this),this}function u(){return l.call(this),this}function c(){return l.call(this),this}function h(){return c.call(this),this}function p(){return this}function f(){return this}function d(t){return c.call(this),this.parentCtx=null,this.symbol=t,this}function y(t){return d.call(this,t),this}function g(){return this}a.prototype=Object.create(s.prototype),a.prototype.constructor=a,l.prototype=Object.create(a.prototype),l.prototype.constructor=l,u.prototype=Object.create(l.prototype),u.prototype.constructor=u,c.prototype=Object.create(l.prototype),c.prototype.constructor=c,h.prototype=Object.create(c.prototype),h.prototype.constructor=h,p.prototype.visit=function(t){return Array.isArray(t)?t.map(function(t){return t.accept(this)},this):t.accept(this)},p.prototype.visitChildren=function(t){return this.visit(t.children)},p.prototype.visitTerminal=function(t){},p.prototype.visitErrorNode=function(t){},f.prototype.visitTerminal=function(t){},f.prototype.visitErrorNode=function(t){},f.prototype.enterEveryRule=function(t){},f.prototype.exitEveryRule=function(t){},d.prototype=Object.create(c.prototype),d.prototype.constructor=d,d.prototype.getChild=function(t){return null},d.prototype.getSymbol=function(){return this.symbol},d.prototype.getParent=function(){return this.parentCtx},d.prototype.getPayload=function(){return this.symbol},d.prototype.getSourceInterval=function(){if(null===this.symbol)return o;var t=this.symbol.tokenIndex;return new i(t,t)},d.prototype.getChildCount=function(){return 0},d.prototype.accept=function(t){return t.visitTerminal(this)},d.prototype.getText=function(){return this.symbol.text},d.prototype.toString=function(){return this.symbol.type===r.EOF?"":this.symbol.text},y.prototype=Object.create(d.prototype),y.prototype.constructor=y,y.prototype.isErrorNode=function(){return!0},y.prototype.accept=function(t){return t.visitErrorNode(this)},g.prototype.walk=function(t,e){if(e instanceof h||void 0!==e.isErrorNode&&e.isErrorNode())t.visitErrorNode(e);else if(e instanceof c)t.visitTerminal(e);else{this.enterRule(t,e);for(var n=0;n=0&&this.startIndexe.returnState&&(f[0]=e.returnState,f[1]=t.returnState);var d=[p,p],y=new u(d,f);return null!==r&&r.set(t,e,y),y}var f=[t.returnState,e.returnState],d=[t.parentCtx,e.parentCtx];t.returnState>e.returnState&&(f[0]=e.returnState,f[1]=t.returnState,d=[e.parentCtx,t.parentCtx]);var g=new u(d,f);return null!==r&&r.set(t,e,g),g}(t,e,n,r);if(n){if(t instanceof l)return t;if(e instanceof l)return e}return t instanceof a&&(t=new u([t.getParent()],[t.returnState])),e instanceof a&&(e=new u([e.getParent()],[e.returnState])),function(t,e,n,r){if(null!==r){var i=r.get(t,e);if(null!==i)return i;if(null!==(i=r.get(e,t)))return i}var s=0,l=0,h=0,p=[],f=[];for(;s0&&(t+=", "),this.returnStates[e]!==o.EMPTY_RETURN_STATE?(t+=this.returnStates[e],null!==this.parents[e]?t=t+" "+this.parents[e]:t+="null"):t+="$";return t+"]"},e.merge=c,e.PredictionContext=o,e.PredictionContextCache=s,e.SingletonPredictionContext=a,e.predictionContextFromRuleContext=function t(e,n){if(void 0!==n&&null!==n||(n=r.EMPTY),null===n.parentCtx||n===r.EMPTY)return o.EMPTY;var i=t(e,n.parentCtx),s=e.states[n.invokingState].transitions[0];return a.create(i,s.followState.stateNumber)},e.getCachedPredictionContext=function t(e,n,r){if(e.isEmpty())return e;var i=r[e]||null;if(null!==i)return i;if(null!==(i=n.get(e)))return r[e]=i,i;for(var s=!1,l=[],c=0;c=this.states.length)throw"Invalid state number.";var n=this.states[t],r=this.nextTokens(n);if(!r.contains(s.EPSILON))return r;var o=new i;for(o.addSet(r),o.removeOne(s.EPSILON);null!==e&&e.invokingState>=0&&r.contains(s.EPSILON);){var a=this.states[e.invokingState].transitions[0];r=this.nextTokens(a.followState),o.addSet(r),o.removeOne(s.EPSILON),e=e.parentCtx}return r.contains(s.EPSILON)&&o.addOne(s.EOF),o},o.INVALID_ALT_NUMBER=0,e.ATN=o},function(t,e,n){var r=n(1).Token,i=(n(2).Interval,n(2).IntervalSet),o=n(10).Predicate,s=n(10).PrecedencePredicate;function a(t){if(void 0===t||null===t)throw"target cannot be null.";return this.target=t,this.isEpsilon=!1,this.label=null,this}function l(t,e){return a.call(this,t),this.label_=e,this.label=this.makeLabel(),this.serializationType=a.ATOM,this}function u(t,e,n,r){return a.call(this,t),this.ruleIndex=e,this.precedence=n,this.followState=r,this.serializationType=a.RULE,this.isEpsilon=!0,this}function c(t,e){return a.call(this,t),this.serializationType=a.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=e,this}function h(t,e,n){return a.call(this,t),this.serializationType=a.RANGE,this.start=e,this.stop=n,this.label=this.makeLabel(),this}function p(t){return a.call(this,t),this}function f(t,e,n,r){return p.call(this,t),this.serializationType=a.PREDICATE,this.ruleIndex=e,this.predIndex=n,this.isCtxDependent=r,this.isEpsilon=!0,this}function d(t,e,n,r){return a.call(this,t),this.serializationType=a.ACTION,this.ruleIndex=e,this.actionIndex=void 0===n?-1:n,this.isCtxDependent=void 0!==r&&r,this.isEpsilon=!0,this}function y(t,e){return a.call(this,t),this.serializationType=a.SET,void 0!==e&&null!==e?this.label=e:(this.label=new i,this.label.addOne(r.INVALID_TYPE)),this}function g(t,e){return y.call(this,t,e),this.serializationType=a.NOT_SET,this}function v(t){return a.call(this,t),this.serializationType=a.WILDCARD,this}function x(t,e){return p.call(this,t),this.serializationType=a.PRECEDENCE,this.precedence=e,this.isEpsilon=!0,this}a.EPSILON=1,a.RANGE=2,a.RULE=3,a.PREDICATE=4,a.ATOM=5,a.ACTION=6,a.SET=7,a.NOT_SET=8,a.WILDCARD=9,a.PRECEDENCE=10,a.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"],a.serializationTypes={EpsilonTransition:a.EPSILON,RangeTransition:a.RANGE,RuleTransition:a.RULE,PredicateTransition:a.PREDICATE,AtomTransition:a.ATOM,ActionTransition:a.ACTION,SetTransition:a.SET,NotSetTransition:a.NOT_SET,WildcardTransition:a.WILDCARD,PrecedencePredicateTransition:a.PRECEDENCE},l.prototype=Object.create(a.prototype),l.prototype.constructor=l,l.prototype.makeLabel=function(){var t=new i;return t.addOne(this.label_),t},l.prototype.matches=function(t,e,n){return this.label_===t},l.prototype.toString=function(){return this.label_},u.prototype=Object.create(a.prototype),u.prototype.constructor=u,u.prototype.matches=function(t,e,n){return!1},c.prototype=Object.create(a.prototype),c.prototype.constructor=c,c.prototype.matches=function(t,e,n){return!1},c.prototype.toString=function(){return"epsilon"},h.prototype=Object.create(a.prototype),h.prototype.constructor=h,h.prototype.makeLabel=function(){var t=new i;return t.addRange(this.start,this.stop),t},h.prototype.matches=function(t,e,n){return t>=this.start&&t<=this.stop},h.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},p.prototype=Object.create(a.prototype),p.prototype.constructor=p,f.prototype=Object.create(p.prototype),f.prototype.constructor=f,f.prototype.matches=function(t,e,n){return!1},f.prototype.getPredicate=function(){return new o(this.ruleIndex,this.predIndex,this.isCtxDependent)},f.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},d.prototype=Object.create(a.prototype),d.prototype.constructor=d,d.prototype.matches=function(t,e,n){return!1},d.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},y.prototype=Object.create(a.prototype),y.prototype.constructor=y,y.prototype.matches=function(t,e,n){return this.label.contains(t)},y.prototype.toString=function(){return this.label.toString()},g.prototype=Object.create(y.prototype),g.prototype.constructor=g,g.prototype.matches=function(t,e,n){return t>=e&&t<=n&&!y.prototype.matches.call(this,t,e,n)},g.prototype.toString=function(){return"~"+y.prototype.toString.call(this)},v.prototype=Object.create(a.prototype),v.prototype.constructor=v,v.prototype.matches=function(t,e,n){return t>=e&&t<=n},v.prototype.toString=function(){return"."},x.prototype=Object.create(p.prototype),x.prototype.constructor=x,x.prototype.matches=function(t,e,n){return!1},x.prototype.getPredicate=function(){return new s(this.precedence)},x.prototype.toString=function(){return this.precedence+" >= _p"},e.Transition=a,e.AtomTransition=l,e.SetTransition=y,e.NotSetTransition=g,e.RuleTransition=u,e.ActionTransition=d,e.EpsilonTransition=c,e.RangeTransition=h,e.WildcardTransition=v,e.PredicateTransition=f,e.PrecedencePredicateTransition=x,e.AbstractPredicateTransition=p},function(t,e,n){var r=n(7).ATN,i=n(0),o=i.Hash,s=i.Set,a=n(10).SemanticContext,l=n(6).merge;function u(t){return t.hashCodeForConfigSet()}function c(t,e){return t===e||null!==t&&null!==e&&t.equalsForConfigSet(e)}function h(t){return this.configLookup=new s(u,c),this.fullCtx=void 0===t||t,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1,this}function p(){return h.call(this),this.configLookup=new s,this}h.prototype.add=function(t,e){if(void 0===e&&(e=null),this.readOnly)throw"This set is readonly";t.semanticContext!==a.NONE&&(this.hasSemanticContext=!0),t.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);var n=this.configLookup.add(t);if(n===t)return this.cachedHashCode=-1,this.configs.push(t),!0;var r=!this.fullCtx,i=l(n.context,t.context,r,e);return n.reachesIntoOuterContext=Math.max(n.reachesIntoOuterContext,t.reachesIntoOuterContext),t.precedenceFilterSuppressed&&(n.precedenceFilterSuppressed=!0),n.context=i,!0},h.prototype.getStates=function(){for(var t=new s,e=0;e0){var s=null;i.map(function(t){(null===s||t.precedence0){var s=i.sort(function(t,e){return t.compareTo(e)}),l=s[s.length-1];n.add(l)}return this.opnds=n.values(),this}o.prototype.hashCode=function(){var t=new i;return this.updateHashCode(t),t.finish()},o.prototype.evaluate=function(t,e){},o.prototype.evalPrecedence=function(t,e){return this},o.andContext=function(t,e){if(null===t||t===o.NONE)return e;if(null===e||e===o.NONE)return t;var n=new l(t,e);return 1===n.opnds.length?n.opnds[0]:n},o.orContext=function(t,e){if(null===t)return e;if(null===e)return t;if(t===o.NONE||e===o.NONE)return o.NONE;var n=new u(t,e);return 1===n.opnds.length?n.opnds[0]:n},s.prototype=Object.create(o.prototype),s.prototype.constructor=s,o.NONE=new s,s.prototype.evaluate=function(t,e){var n=this.isCtxDependent?e:null;return t.sempred(n,this.ruleIndex,this.predIndex)},s.prototype.updateHashCode=function(t){t.update(this.ruleIndex,this.predIndex,this.isCtxDependent)},s.prototype.equals=function(t){return this===t||t instanceof s&&(this.ruleIndex===t.ruleIndex&&this.predIndex===t.predIndex&&this.isCtxDependent===t.isCtxDependent)},s.prototype.toString=function(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"},a.prototype=Object.create(o.prototype),a.prototype.constructor=a,a.prototype.evaluate=function(t,e){return t.precpred(e,this.precedence)},a.prototype.evalPrecedence=function(t,e){return t.precpred(e,this.precedence)?o.NONE:null},a.prototype.compareTo=function(t){return this.precedence-t.precedence},a.prototype.updateHashCode=function(t){t.update(31)},a.prototype.equals=function(t){return this===t||t instanceof a&&this.precedence===t.precedence},a.prototype.toString=function(){return"{"+this.precedence+">=prec}?"},a.filterPrecedencePredicates=function(t){var e=[];return t.values().map(function(t){t instanceof a&&e.push(t)}),e},l.prototype=Object.create(o.prototype),l.prototype.constructor=l,l.prototype.equals=function(t){return this===t||t instanceof l&&this.opnds===t.opnds},l.prototype.updateHashCode=function(t){t.update(this.opnds,"AND")},l.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},u.prototype=Object.create(o.prototype),u.prototype.constructor=u,u.prototype.constructor=function(t){return this===t||t instanceof u&&this.opnds===t.opnds},u.prototype.updateHashCode=function(t){t.update(this.opnds,"OR")},u.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},e.SemanticContext=o,e.PrecedencePredicate=a,e.Predicate=s},function(t,e,n){var r=n(9).ATNConfigSet,i=n(0),o=i.Hash,s=i.Set;function a(t,e){return this.alt=e,this.pred=t,this}function l(t,e){return null===t&&(t=-1),null===e&&(e=new r),this.stateNumber=t,this.configs=e,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}a.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},l.prototype.getAltSet=function(){var t=new s;if(null!==this.configs)for(var e=0;e0?",up="+this.reachesIntoOuterContext:"")+")"},l.prototype=Object.create(a.prototype),l.prototype.constructor=l,l.prototype.updateHashCode=function(t){t.update(this.state.stateNumber,this.alt,this.context,this.semanticContext,this.passedThroughNonGreedyDecision,this.lexerActionExecutor)},l.prototype.equals=function(t){return this===t||t instanceof l&&this.passedThroughNonGreedyDecision==t.passedThroughNonGreedyDecision&&(this.lexerActionExecutor?this.lexerActionExecutor.equals(t.lexerActionExecutor):!t.lexerActionExecutor)&&a.prototype.equals.call(this,t)},l.prototype.hashCodeForConfigSet=l.prototype.hashCode,l.prototype.equalsForConfigSet=l.prototype.equals,l.prototype.checkNonGreedyDecision=function(t,e){return t.passedThroughNonGreedyDecision||e instanceof r&&e.nonGreedy},e.ATNConfig=a,e.LexerATNConfig=l},function(t,e,n){var r=n(4).RuleNode,i=n(4).INVALID_INTERVAL,o=n(7).INVALID_ALT_NUMBER;function s(t,e){return r.call(this),this.parentCtx=t||null,this.invokingState=e||-1,this}s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.depth=function(){for(var t=0,e=this;null!==e;)e=e.parentCtx,t+=1;return t},s.prototype.isEmpty=function(){return-1===this.invokingState},s.prototype.getSourceInterval=function(){return i},s.prototype.getRuleContext=function(){return this},s.prototype.getPayload=function(){return this},s.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(t){return t.getText()}).join("")},s.prototype.getAltNumber=function(){return o},s.prototype.setAltNumber=function(t){},s.prototype.getChild=function(t){return null},s.prototype.getChildCount=function(){return 0},s.prototype.accept=function(t){return t.visitChildren(this)},e.RuleContext=s;var a=n(21).Trees;s.prototype.toStringTree=function(t,e){return a.toStringTree(this,t,e)},s.prototype.toString=function(t,e){t=t||null,e=e||null;for(var n=this,r="[";null!==n&&n!==e;){if(null===t)n.isEmpty()||(r+=n.invokingState);else{var i=n.ruleIndex;r+=i>=0&&i":"\n"===t?"\\n":"\t"===t?"\\t":"\r"===t?"\\r":t},l.prototype.getCharErrorDisplay=function(t){return"'"+this.getErrorDisplayForChar(t)+"'"},l.prototype.recover=function(t){this._input.LA(1)!==r.EOF&&(t instanceof a?this._interp.consume(this._input):this._input.consume())},e.Lexer=l},function(t,e){function n(){return this}function r(){return n.call(this),this}function i(t){if(n.call(this),null===t)throw"delegates";return this.delegates=t,this}n.prototype.syntaxError=function(t,e,n,r,i,o){},n.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){},n.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){},n.prototype.reportContextSensitivity=function(t,e,n,r,i,o){},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.INSTANCE=new r,r.prototype.syntaxError=function(t,e,n,r,i,o){console.error("line "+n+":"+r+" "+i)},i.prototype=Object.create(n.prototype),i.prototype.constructor=i,i.prototype.syntaxError=function(t,e,n,r,i,o){this.delegates.map(function(s){s.syntaxError(t,e,n,r,i,o)})},i.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){this.delegates.map(function(a){a.reportAmbiguity(t,e,n,r,i,o,s)})},i.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportAttemptingFullContext(t,e,n,r,i,o)})},i.prototype.reportContextSensitivity=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportContextSensitivity(t,e,n,r,i,o)})},e.ErrorListener=n,e.ConsoleErrorListener=r,e.ProxyErrorListener=i},function(t,e){function n(t,e,n){return this.dfa=t,this.literalNames=e||[],this.symbolicNames=n||[],this}function r(t){return n.call(this,t,null),this}n.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var t="",e=this.dfa.sortedStates(),n=0;n")).concat(this.getStateString(s))).concat("\n"))}}return 0===t.length?null:t},n.prototype.getEdgeLabel=function(t){return 0===t?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[t-1]||this.symbolicNames[t-1]:String.fromCharCode(t-1)},n.prototype.getStateString=function(t){var e=(t.isAcceptState?":":"")+"s"+t.stateNumber+(t.requiresFullContext?"^":"");return t.isAcceptState?null!==t.predicates?e+"=>"+t.predicates.toString():e+"=>"+t.prediction.toString():e},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.prototype.getEdgeLabel=function(t){return"'"+String.fromCharCode(t)+"'"},e.DFASerializer=n,e.LexerDFASerializer=r},function(t,e,n){var r=n(14).RuleContext,i=n(4),o=i.INVALID_INTERVAL,s=i.TerminalNode,a=i.TerminalNodeImpl,l=i.ErrorNodeImpl,u=n(2).Interval;function c(t,e){t=t||null,e=e||null,r.call(this,t,e),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}function h(t,e,n){return c.call(t,e),this.ruleIndex=n,this}c.prototype=Object.create(r.prototype),c.prototype.constructor=c,c.prototype.copyFrom=function(t){this.parentCtx=t.parentCtx,this.invokingState=t.invokingState,this.children=null,this.start=t.start,this.stop=t.stop,t.children&&(this.children=[],t.children.map(function(t){t instanceof l&&(this.children.push(t),t.parentCtx=this)},this))},c.prototype.enterRule=function(t){},c.prototype.exitRule=function(t){},c.prototype.addChild=function(t){return null===this.children&&(this.children=[]),this.children.push(t),t},c.prototype.removeLastChild=function(){null!==this.children&&this.children.pop()},c.prototype.addTokenNode=function(t){var e=new a(t);return this.addChild(e),e.parentCtx=this,e},c.prototype.addErrorNode=function(t){var e=new l(t);return this.addChild(e),e.parentCtx=this,e},c.prototype.getChild=function(t,e){if(e=e||null,null===this.children||t<0||t>=this.children.length)return null;if(null===e)return this.children[t];for(var n=0;n=this.children.length)return null;for(var n=0;n=this._size)throw"cannot consume EOF";this._index+=1},i.prototype.LA=function(t){if(0===t)return 0;t<0&&(t+=1);var e=this._index+t-1;return e<0||e>=this._size?r.EOF:this.data[e]},i.prototype.LT=function(t){return this.LA(t)},i.prototype.mark=function(){return-1},i.prototype.release=function(t){},i.prototype.seek=function(t){t<=this._index?this._index=t:this._index=Math.min(t,this._size)},i.prototype.getText=function(t,e){if(e>=this._size&&(e=this._size-1),t>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var n="",r=t;r<=e;r++)n+=String.fromCodePoint(this.data[r]);return n}return this.strdata.slice(t,e+1)},i.prototype.toString=function(){return this.strdata},e.InputStream=i},function(t,e,n){var r=n(12);function i(){return r.tree.ParseTreeVisitor.call(this),this}i.prototype=Object.create(r.tree.ParseTreeVisitor.prototype),i.prototype.constructor=i,i.prototype.visitGrammarFile=function(t){return this.visitChildren(t)},i.prototype.visitGrammerDecl=function(t){return this.visitChildren(t)},i.prototype.visitStatExprSplit=function(t){return this.visitChildren(t)},i.prototype.visitStatList=function(t){return this.visitChildren(t)},i.prototype.visitStatValue=function(t){return this.visitChildren(t)},i.prototype.visitExprExpression=function(t){return this.visitChildren(t)},i.prototype.visitExprValue=function(t){return this.visitChildren(t)},i.prototype.visitArithmeticRuleCollection=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomExpr=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomParserId=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomLexerId=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomStr=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleCollection=function(t){return this.visitChildren(t)},i.prototype.visitMeaningfulSplit=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleStrings=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleList=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleComplex=function(t){return this.visitChildren(t)},i.prototype.visitStrings=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleExpr=function(t){return this.visitChildren(t)},e.BlocklyGrammerVisitor=i},function(t,e,n){var r=n(0),i=n(1).Token,o=(n(4).RuleNode,n(4).ErrorNode),s=n(4).TerminalNode,a=n(18).ParserRuleContext,l=n(14).RuleContext,u=n(7).INVALID_ALT_NUMBER;function c(){}c.toStringTree=function(t,e,n){e=e||null,null!==(n=n||null)&&(e=n.ruleNames);var i=c.getNodeText(t,e);i=r.escapeWhitespace(i,!1);var o=t.getChildCount();if(0===o)return i;var s="("+i+" ";o>0&&(i=c.toStringTree(t.getChild(0),e),s=s.concat(i));for(var a=1;a=n},W.prototype.deserialize=function(t){this.reset(t),this.checkVersion(),this.checkUUID();var e=this.readATN();this.readStates(e),this.readRules(e),this.readModes(e);var n=[];return this.readSets(e,n,this.readInt.bind(this)),this.isFeatureSupported(Y,this.uuid)&&this.readSets(e,n,this.readInt32.bind(this)),this.readEdges(e,n),this.readDecisions(e),this.readLexerActions(e),this.markPrecedenceDecisions(e),this.verifyATN(e),this.deserializationOptions.generateRuleBypassTransitions&&e.grammarType===o.PARSER&&(this.generateRuleBypassTransitions(e),this.verifyATN(e)),e},W.prototype.reset=function(t){var e=t.split("").map(function(t){var e=t.charCodeAt(0);return e>1?e-2:-1});e[0]=t.charCodeAt(0),this.data=e,this.pos=0},W.prototype.checkVersion=function(){var t=this.readInt();if(3!==t)throw"Could not deserialize ATN with version "+t+" (expected 3)."},W.prototype.checkUUID=function(){var t=this.readUUID();if(K.indexOf(t)<0)throw"59627784-3BE5-417A-B9EB-8131A7286089";this.uuid=t},W.prototype.readATN=function(){var t=this.readInt(),e=this.readInt();return new i(t,e)},W.prototype.readStates=function(t){for(var e,n,r,i=[],o=[],s=this.readInt(),l=0;l0;)i.addTransition(p.transitions[f-1]),p.transitions=p.transitions.slice(-1);t.ruleToStartState[e].addTransition(new I(i)),o.addTransition(new I(a));var d=new l;t.addState(d),d.addTransition(new C(o,t.ruleToTokenType[e])),i.addTransition(new I(d))},W.prototype.stateIsEndStateFor=function(t,e){if(t.ruleIndex!==e)return null;if(!(t instanceof x))return null;var n=t.transitions[t.transitions.length-1].target;return n instanceof p&&n.epsilonOnlyTransitions&&n.transitions[0].target instanceof d?t:null},W.prototype.markPrecedenceDecisions=function(t){for(var e=0;e=0):this.checkCondition(n.transitions.length<=1||n instanceof d)}},W.prototype.checkCondition=function(t,e){if(!t)throw void 0!==e&&null!==e||(e="IllegalState"),e},W.prototype.readInt=function(){return this.data[this.pos++]},W.prototype.readInt32=function(){return this.readInt()|this.readInt()<<16},W.prototype.readLong=function(){return 4294967295&this.readInt32()|this.readInt32()<<32};var X=function(){for(var t=[],e=0;e<256;e++)t[e]=(e+256).toString(16).substr(1).toUpperCase();return t}();W.prototype.readUUID=function(){for(var t=[],e=7;e>=0;e--){var n=this.readInt();t[2*e+1]=255&n,t[2*e]=n>>8&255}return X[t[0]]+X[t[1]]+X[t[2]]+X[t[3]]+"-"+X[t[4]]+X[t[5]]+"-"+X[t[6]]+X[t[7]]+"-"+X[t[8]]+X[t[9]]+"-"+X[t[10]]+X[t[11]]+X[t[12]]+X[t[13]]+X[t[14]]+X[t[15]]},W.prototype.edgeFactory=function(t,e,n,i,o,s,a,l){var u=t.states[i];switch(e){case E.EPSILON:return new I(u);case E.RANGE:return new R(u,0!==a?r.EOF:o,s);case E.RULE:return new k(t.states[o],s,a,u);case E.PREDICATE:return new O(u,o,s,0!==a);case E.PRECEDENCE:return new P(u,o);case E.ATOM:return new C(u,0!==a?r.EOF:o);case E.ACTION:return new L(u,o,s,0!==a);case E.SET:return new A(u,l[o]);case E.NOT_SET:return new b(u,l[o]);case E.WILDCARD:return new N(u);default:throw"The specified transition type: "+e+" is not valid."}},W.prototype.stateFactory=function(t,e){if(null===this.stateFactories){var n=[];n[a.INVALID_TYPE]=null,n[a.BASIC]=function(){return new l},n[a.RULE_START]=function(){return new f},n[a.BLOCK_START]=function(){return new T},n[a.PLUS_BLOCK_START]=function(){return new m},n[a.STAR_BLOCK_START]=function(){return new _},n[a.TOKEN_START]=function(){return new y},n[a.RULE_STOP]=function(){return new d},n[a.BLOCK_END]=function(){return new h},n[a.STAR_LOOP_BACK]=function(){return new v},n[a.STAR_LOOP_ENTRY]=function(){return new x},n[a.PLUS_LOOP_BACK]=function(){return new g},n[a.LOOP_END]=function(){return new p},this.stateFactories=n}if(t>this.stateFactories.length||null===this.stateFactories[t])throw"The specified state type "+t+" is not valid.";var r=this.stateFactories[t]();if(null!==r)return r.ruleIndex=e,r},W.prototype.lexerActionFactory=function(t,e,n){if(null===this.actionFactories){var r=[];r[j.CHANNEL]=function(t,e){return new B(t)},r[j.CUSTOM]=function(t,e){return new U(t,e)},r[j.MODE]=function(t,e){return new G(t)},r[j.MORE]=function(t,e){return V.INSTANCE},r[j.POP_MODE]=function(t,e){return q.INSTANCE},r[j.PUSH_MODE]=function(t,e){return new z(t)},r[j.SKIP]=function(t,e){return M.INSTANCE},r[j.TYPE]=function(t,e){return new H(t)},this.actionFactories=r}if(t>this.actionFactories.length||null===this.actionFactories[t])throw"The specified lexer action type "+t+" is not valid.";return this.actionFactories[t](e,n)},e.ATNDeserializer=W},function(t,e){function n(t){return void 0===t&&(t=null),this.readOnly=!1,this.verifyATN=null===t||t.verifyATN,this.generateRuleBypassTransitions=null!==t&&t.generateRuleBypassTransitions,this}n.defaultOptions=new n,n.defaultOptions.readOnly=!0,e.ATNDeserializationOptions=n},function(t,e){function n(){}function r(t){return this.actionType=t,this.isPositionDependent=!1,this}function i(){return r.call(this,n.SKIP),this}function o(t){return r.call(this,n.TYPE),this.type=t,this}function s(t){return r.call(this,n.PUSH_MODE),this.mode=t,this}function a(){return r.call(this,n.POP_MODE),this}function l(){return r.call(this,n.MORE),this}function u(t){return r.call(this,n.MODE),this.mode=t,this}function c(t,e){return r.call(this,n.CUSTOM),this.ruleIndex=t,this.actionIndex=e,this.isPositionDependent=!0,this}function h(t){return r.call(this,n.CHANNEL),this.channel=t,this}function p(t,e){return r.call(this,e.actionType),this.offset=t,this.action=e,this.isPositionDependent=!0,this}n.CHANNEL=0,n.CUSTOM=1,n.MODE=2,n.MORE=3,n.POP_MODE=4,n.PUSH_MODE=5,n.SKIP=6,n.TYPE=7,r.prototype.hashCode=function(){var t=new Hash;return this.updateHashCode(t),t.finish()},r.prototype.updateHashCode=function(t){t.update(this.actionType)},r.prototype.equals=function(t){return this===t},i.prototype=Object.create(r.prototype),i.prototype.constructor=i,i.INSTANCE=new i,i.prototype.execute=function(t){t.skip()},i.prototype.toString=function(){return"skip"},o.prototype=Object.create(r.prototype),o.prototype.constructor=o,o.prototype.execute=function(t){t.type=this.type},o.prototype.updateHashCode=function(t){t.update(this.actionType,this.type)},o.prototype.equals=function(t){return this===t||t instanceof o&&this.type===t.type},o.prototype.toString=function(){return"type("+this.type+")"},s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.execute=function(t){t.pushMode(this.mode)},s.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},s.prototype.equals=function(t){return this===t||t instanceof s&&this.mode===t.mode},s.prototype.toString=function(){return"pushMode("+this.mode+")"},a.prototype=Object.create(r.prototype),a.prototype.constructor=a,a.INSTANCE=new a,a.prototype.execute=function(t){t.popMode()},a.prototype.toString=function(){return"popMode"},l.prototype=Object.create(r.prototype),l.prototype.constructor=l,l.INSTANCE=new l,l.prototype.execute=function(t){t.more()},l.prototype.toString=function(){return"more"},u.prototype=Object.create(r.prototype),u.prototype.constructor=u,u.prototype.execute=function(t){t.mode(this.mode)},u.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},u.prototype.equals=function(t){return this===t||t instanceof u&&this.mode===t.mode},u.prototype.toString=function(){return"mode("+this.mode+")"},c.prototype=Object.create(r.prototype),c.prototype.constructor=c,c.prototype.execute=function(t){t.action(null,this.ruleIndex,this.actionIndex)},c.prototype.updateHashCode=function(t){t.update(this.actionType,this.ruleIndex,this.actionIndex)},c.prototype.equals=function(t){return this===t||t instanceof c&&(this.ruleIndex===t.ruleIndex&&this.actionIndex===t.actionIndex)},h.prototype=Object.create(r.prototype),h.prototype.constructor=h,h.prototype.execute=function(t){t._channel=this.channel},h.prototype.updateHashCode=function(t){t.update(this.actionType,this.channel)},h.prototype.equals=function(t){return this===t||t instanceof h&&this.channel===t.channel},h.prototype.toString=function(){return"channel("+this.channel+")"},p.prototype=Object.create(r.prototype),p.prototype.constructor=p,p.prototype.execute=function(t){this.action.execute(t)},p.prototype.updateHashCode=function(t){t.update(this.actionType,this.offset,this.action)},p.prototype.equals=function(t){return this===t||t instanceof p&&(this.offset===t.offset&&this.action===t.action)},e.LexerActionType=n,e.LexerSkipAction=i,e.LexerChannelAction=h,e.LexerCustomAction=c,e.LexerIndexedCustomAction=p,e.LexerMoreAction=l,e.LexerTypeAction=o,e.LexerPushModeAction=s,e.LexerPopModeAction=a,e.LexerModeAction=u},function(t,e,n){var r=n(1).Token,i=n(16).ConsoleErrorListener,o=n(16).ProxyErrorListener;function s(){return this._listeners=[i.INSTANCE],this._interp=null,this._stateNumber=-1,this}s.tokenTypeMapCache={},s.ruleIndexMapCache={},s.prototype.checkVersion=function(t){"4.7"!==t&&console.log("ANTLR runtime and generated code versions disagree: 4.7!="+t)},s.prototype.addErrorListener=function(t){this._listeners.push(t)},s.prototype.removeErrorListeners=function(){this._listeners=[]},s.prototype.getTokenTypeMap=function(){var t=this.getTokenNames();if(null===t)throw"The current recognizer does not provide a list of token names.";var e=this.tokenTypeMapCache[t];return void 0===e&&((e=t.reduce(function(t,e,n){t[e]=n})).EOF=r.EOF,this.tokenTypeMapCache[t]=e),e},s.prototype.getRuleIndexMap=function(){var t=this.ruleNames;if(null===t)throw"The current recognizer does not provide a list of rule names.";var e=this.ruleIndexMapCache[t];return void 0===e&&(e=t.reduce(function(t,e,n){t[e]=n}),this.ruleIndexMapCache[t]=e),e},s.prototype.getTokenType=function(t){var e=this.getTokenTypeMap()[t];return void 0!==e?e:r.INVALID_TYPE},s.prototype.getErrorHeader=function(t){return"line "+t.getOffendingToken().line+":"+t.getOffendingToken().column},s.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),"'"+(e=e.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},s.prototype.getErrorListenerDispatch=function(){return new o(this._listeners)},s.prototype.sempred=function(t,e,n){return!0},s.prototype.precpred=function(t,e){return!0},Object.defineProperty(s.prototype,"state",{get:function(){return this._stateNumber},set:function(t){this._stateNumber=t}}),e.Recognizer=s},function(t,e,n){var r=n(11).DFAState,i=n(9).ATNConfigSet,o=n(6).getCachedPredictionContext;function s(t,e){return this.atn=t,this.sharedContextCache=e,this}s.ERROR=new r(2147483647,new i),s.prototype.getCachedContext=function(t){if(null===this.sharedContextCache)return t;return o(t,this.sharedContextCache,{})},e.ATNSimulator=s},function(t,e,n){n(0).Set;var r=n(0).Map,i=n(0).BitSet,o=n(0).AltDict,s=n(7).ATN,a=n(3).RuleStopState,l=n(9).ATNConfigSet,u=n(13).ATNConfig,c=n(10).SemanticContext,h=(n(0).Hash,n(0).hashStuff);n(0).equalArrays;function p(){return this}p.SLL=0,p.LL=1,p.LL_EXACT_AMBIG_DETECTION=2,p.hasSLLConflictTerminatingPrediction=function(t,e){if(p.allConfigsInRuleStopStates(e))return!0;if(t===p.SLL&&e.hasSemanticContext){for(var n=new l,r=0;r1)return!0}return!1},p.allSubsetsEqual=function(t){for(var e=null,n=0;n=n)){var i,o=e.charCodeAt(r);return o>=55296&&o<=56319&&n>r+1&&(i=e.charCodeAt(r+1))>=56320&&i<=57343?1024*(o-55296)+i-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}()},function(t,e){var n,r,i,o;String.fromCodePoint||(n=function(){try{var t={},e=Object.defineProperty,n=e(t,t,t)&&e}catch(t){}return n}(),r=String.fromCharCode,i=Math.floor,o=function(t){var e,n,o=[],s=-1,a=arguments.length;if(!a)return"";for(var l="";++s1114111||i(u)!=u)throw RangeError("Invalid code point: "+u);u<=65535?o.push(u):(e=55296+((u-=65536)>>10),n=u%1024+56320,o.push(e,n)),(s+1==a||o.length>16384)&&(l+=r.apply(null,o),o.length=0)}return l},n?n(String,"fromCodePoint",{value:o,configurable:!0,writable:!0}):String.fromCodePoint=o)},function(t,e,n){var r=n(1).Token,i=n(5),o=i.NoViableAltException,s=i.InputMismatchException,a=i.FailedPredicateException,l=i.ParseCancellationException,u=n(3).ATNState,c=n(2).Interval,h=n(2).IntervalSet;function p(){}function f(){return p.call(this),this.errorRecoveryMode=!1,this.lastErrorIndex=-1,this.lastErrorStates=null,this}function d(){return f.call(this),this}p.prototype.reset=function(t){},p.prototype.recoverInline=function(t){},p.prototype.recover=function(t,e){},p.prototype.sync=function(t){},p.prototype.inErrorRecoveryMode=function(t){},p.prototype.reportError=function(t){},f.prototype=Object.create(p.prototype),f.prototype.constructor=f,f.prototype.reset=function(t){this.endErrorCondition(t)},f.prototype.beginErrorCondition=function(t){this.errorRecoveryMode=!0},f.prototype.inErrorRecoveryMode=function(t){return this.errorRecoveryMode},f.prototype.endErrorCondition=function(t){this.errorRecoveryMode=!1,this.lastErrorStates=null,this.lastErrorIndex=-1},f.prototype.reportMatch=function(t){this.endErrorCondition(t)},f.prototype.reportError=function(t,e){this.inErrorRecoveryMode(t)||(this.beginErrorCondition(t),e instanceof o?this.reportNoViableAlternative(t,e):e instanceof s?this.reportInputMismatch(t,e):e instanceof a?this.reportFailedPredicate(t,e):(console.log("unknown recognition error type: "+e.constructor.name),console.log(e.stack),t.notifyErrorListeners(e.getOffendingToken(),e.getMessage(),e)))},f.prototype.recover=function(t,e){this.lastErrorIndex===t.getInputStream().index&&null!==this.lastErrorStates&&this.lastErrorStates.indexOf(t.state)>=0&&t.consume(),this.lastErrorIndex=t._input.index,null===this.lastErrorStates&&(this.lastErrorStates=[]),this.lastErrorStates.push(t.state);var n=this.getErrorRecoverySet(t);this.consumeUntil(t,n)},f.prototype.sync=function(t){if(!this.inErrorRecoveryMode(t)){var e=t._interp.atn.states[t.state],n=t.getTokenStream().LA(1),i=t.atn.nextTokens(e);if(!i.contains(r.EPSILON)&&!i.contains(n))switch(e.stateType){case u.BLOCK_START:case u.STAR_BLOCK_START:case u.PLUS_BLOCK_START:case u.STAR_LOOP_ENTRY:if(null!==this.singleTokenDeletion(t))return;throw new s(t);case u.PLUS_LOOP_BACK:case u.STAR_LOOP_BACK:this.reportUnwantedToken(t);var o=new h;o.addSet(t.getExpectedTokens());var a=o.addSet(this.getErrorRecoverySet(t));this.consumeUntil(t,a)}}},f.prototype.reportNoViableAlternative=function(t,e){var n,i=t.getTokenStream();n=null!==i?e.startToken.type===r.EOF?"":i.getText(new c(e.startToken,e.offendingToken)):"";var o="no viable alternative at input "+this.escapeWSAndQuote(n);t.notifyErrorListeners(o,e.offendingToken,e)},f.prototype.reportInputMismatch=function(t,e){var n="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportFailedPredicate=function(t,e){var n="rule "+t.ruleNames[t._ctx.ruleIndex]+" "+e.message;t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportUnwantedToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="extraneous input "+this.getTokenErrorDisplay(e)+" expecting "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e,null)}},f.prototype.reportMissingToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="missing "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames)+" at "+this.getTokenErrorDisplay(e);t.notifyErrorListeners(n,e,null)}},f.prototype.recoverInline=function(t){var e=this.singleTokenDeletion(t);if(null!==e)return t.consume(),e;if(this.singleTokenInsertion(t))return this.getMissingSymbol(t);throw new s(t)},f.prototype.singleTokenInsertion=function(t){var e=t.getTokenStream().LA(1),n=t._interp.atn,r=n.states[t.state].transitions[0].target;return!!n.nextTokens(r,t._ctx).contains(e)&&(this.reportMissingToken(t),!0)},f.prototype.singleTokenDeletion=function(t){var e=t.getTokenStream().LA(2);if(this.getExpectedTokens(t).contains(e)){this.reportUnwantedToken(t),t.consume();var n=t.getCurrentToken();return this.reportMatch(t),n}return null},f.prototype.getMissingSymbol=function(t){var e,n=t.getCurrentToken(),i=this.getExpectedTokens(t).first();e=i===r.EOF?"":"";var o=n,s=t.getTokenStream().LT(-1);return o.type===r.EOF&&null!==s&&(o=s),t.getTokenFactory().create(o.source,i,e,r.DEFAULT_CHANNEL,-1,-1,o.line,o.column)},f.prototype.getExpectedTokens=function(t){return t.getExpectedTokens()},f.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(e)},f.prototype.escapeWSAndQuote=function(t){return"'"+(t=(t=(t=t.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},f.prototype.getErrorRecoverySet=function(t){for(var e=t._interp.atn,n=t._ctx,i=new h;null!==n&&n.invokingState>=0;){var o=e.states[n.invokingState].transitions[0],s=e.nextTokens(o.followState);i.addSet(s),n=n.parentCtx}return i.removeOne(r.EPSILON),i},f.prototype.consumeUntil=function(t,e){for(var n=t.getTokenStream().LA(1);n!==r.EOF&&!e.contains(n);)t.consume(),n=t.getTokenStream().LA(1)},d.prototype=Object.create(f.prototype),d.prototype.constructor=d,d.prototype.recover=function(t,e){for(var n=t._ctx;null!==n;)n.exception=e,n=n.parentCtx;throw new l(e)},d.prototype.recoverInline=function(t){this.recover(t,new s(t))},d.prototype.sync=function(t){},e.BailErrorStrategy=d,e.DefaultErrorStrategy=f},function(t,e){},function(t,e,n){Converter=n(33).Converter},function(module,exports,__webpack_require__){antlr4=__webpack_require__(12);var BlocklyGrammerVisitor=__webpack_require__(20).BlocklyGrammerVisitor,BlocklyGrammerLexer=__webpack_require__(51).BlocklyGrammerLexer,BlocklyGrammerParser=__webpack_require__(52).BlocklyGrammerParser,Visitors=__webpack_require__(53),SymbolVisitor=Visitors.SymbolVisitor,EvalVisitor=Visitors.EvalVisitor,tpl=__webpack_require__(54);function Converter(){return this}Converter.prototype.constructor=Converter,Converter.prototype.init=function(){return this.toolboxGap=5,this.toolboxId="toolbox",this.blocklyDivId="blocklyDiv",this.workSpaceName="workspace",this.codeAreaId="codeArea",this},Converter.prototype.main=function(t,e,n){return this.init(),this.generBlocks(t,e),this.renderGrammerName(),this.generToolbox(),this.generMainFile(),this.writeMainFile(n),this},Converter.prototype.generBlocks=function(grammerFile,functions){functions||(functions=[]);var temp_consoleError=console.error;console.error=function(t){throw new Error(t)};var chars=new antlr4.InputStream(grammerFile),lexer=new BlocklyGrammerLexer(chars),tokens=new antlr4.CommonTokenStream(lexer),parser=new BlocklyGrammerParser(tokens);parser.buildParseTrees=!0;var tree=parser.grammarFile();console.error=temp_consoleError;var svisitor=(new SymbolVisitor).init();this.svisitor=svisitor,svisitor.visit(tree),console.log(svisitor),svisitor.checkSymbol();var evisitor=(new EvalVisitor).init(svisitor,grammerFile);return this.evisitor=evisitor,eval(this.evisitor.matchInject("Function_0")),functions[0]&&functions[0].call(this),evisitor.visit(tree),eval(this.evisitor.matchInject("Function_1")),functions[1]&&functions[1].call(this),evisitor.generBlocks(),console.log(evisitor),this.blocks=evisitor.blocks,eval(this.evisitor.matchInject("Function_2")),functions[2]&&functions[2].call(this),this},Converter.prototype.renderGrammerName=function(){this.grammerName=this.svisitor.grammerName,this.generLanguage=this.evisitor.generLanguage;var t=this.grammerName,e=this.generLanguage;return this.OmitedError=tpl.OmitedError(),this.Functions_pre=tpl.Functions_pre(t),this.Functions_xmlText=tpl.Functions_xmlText(t),this.Functions_blocksIniter=tpl.Functions_blocksIniter(t,e),this.mainFileTPL=tpl.mainFileTPL,this},Converter.prototype.generToolbox=function(){eval(this.grammerName+"Functions={};"),eval(this.Functions_xmlText),eval(this.blocks),eval("var blocksobj = "+this.grammerName+"Blocks;"),console.log(blocksobj);var text=[];for(var key in text.push('"),this.toolbox=this.textToPrettyText(text.join("")),this},Converter.prototype.generMainFile=function(){var t=[],e=this.grammerName;t.push(this.blocks),t.push("\n\n"),t.push(this.OmitedError),t.push("\n\n"),t.push(e+"Functions={}\n\n"),t.push(this.evisitor.matchInject("Functions")),t.push("\n\n"),t.push(this.Functions_pre),t.push("\n\n"),t.push(this.Functions_xmlText),t.push("\n\n"),t.push(this.Functions_blocksIniter),t.push("\n\n"),t.push(e+"Functions.blocksIniter();\n\n"),this.mainFile=this.mainFileTPL(e,this.generLanguage,this.blocklyDivId,this.codeAreaId,this.toolbox,this.workSpaceName,this.toolboxId,t.join(""))},Converter.prototype.writeMainFile=function(t){t||(t=this.grammerName+"index.html"),this.createAndDownloadFile(this.mainFile.join(""),t,"html")},Converter.prototype.block=function(t){var e=this.evisitor.expressionRules[t];return e||(e=this.evisitor.statementRules[t]),e&&1!==e.checklength?e.blockjs:null},Converter.prototype.textToPrettyText=function(t){for(var e=t.split("<"),n="",r=1;r"!=i.slice(-2)&&(n+=" ")}var o=e.join("\n");return(o=o.replace(/(<(\w+)\b[^>]*>[^\n]*)\n *<\/\2>/g,"$1")).replace(/^\n/,"")},Converter.prototype.createAndDownloadFile=function(t,e,n){var r=new Blob([t],{type:"text/"+n}),i=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1}),o=document.createElement("a");o.href=window.URL.createObjectURL(r),o.download=e,o.textContent="Download file!",o.dispatchEvent(i)},exports.Converter=Converter},function(t,e,n){e.ATN=n(7).ATN,e.ATNDeserializer=n(22).ATNDeserializer,e.LexerATNSimulator=n(37).LexerATNSimulator,e.ParserATNSimulator=n(40).ParserATNSimulator,e.PredictionMode=n(27).PredictionMode},function(t,e,n){var r=n(0).Set,i=n(0).BitSet,o=n(1).Token,s=n(13).ATNConfig,a=(n(2).Interval,n(2).IntervalSet),l=n(3).RuleStopState,u=n(8).RuleTransition,c=n(8).NotSetTransition,h=n(8).WildcardTransition,p=n(8).AbstractPredicateTransition,f=n(6),d=f.predictionContextFromRuleContext,y=f.PredictionContext,g=f.SingletonPredictionContext;function v(t){this.atn=t}v.HIT_PRED=o.INVALID_TYPE,v.prototype.getDecisionLookahead=function(t){if(null===t)return null;for(var e=t.transitions.length,n=[],o=0;ox.MAX_DFA_EDGE)return null;var n=t.edges[e-x.MIN_DFA_EDGE];return void 0===n&&(n=null),x.debug&&null!==n&&console.log("reuse state "+t.stateNumber+" edge to "+n.stateNumber),n},x.prototype.computeTargetState=function(t,e,n){var r=new l;return this.getReachableConfigSet(t,e.configs,r,n),0===r.items.length?(r.hasSemanticContext||this.addDFAEdge(e,n,s.ERROR),s.ERROR):this.addDFAEdge(e,n,null,r)},x.prototype.failOrAccept=function(t,e,n,i){if(null!==this.prevAccept.dfaState){var o=t.dfaState.lexerActionExecutor;return this.accept(e,o,this.startIndex,t.index,t.line,t.column),t.dfaState.prediction}if(i===r.EOF&&e.index===this.startIndex)return r.EOF;throw new y(this.recog,e,this.startIndex,n)},x.prototype.getReachableConfigSet=function(t,e,n,i){for(var s=o.INVALID_ALT_NUMBER,a=0;ax.MAX_DFA_EDGE?n:(x.debug&&console.log("EDGE "+t+" -> "+n+" upon "+e),null===t.edges&&(t.edges=[]),t.edges[e-x.MIN_DFA_EDGE]=n,n)},x.prototype.addDFAState=function(t){for(var e=new a(null,t),n=null,r=0;r0&&(o=this.getAltThatFinishedDecisionEntryRule(i))!==a.INVALID_ALT_NUMBER?o:a.INVALID_ALT_NUMBER},I.prototype.getAltThatFinishedDecisionEntryRule=function(t){for(var e=[],n=0;n0||r.state instanceof x&&r.context.hasEmptyPath())&&e.indexOf(r.alt)<0&&e.push(r.alt)}return 0===e.length?a.INVALID_ALT_NUMBER:Math.min.apply(null,e)},I.prototype.splitAccordingToSemanticValidity=function(t,e){for(var n=new c(t.fullCtx),r=new c(t.fullCtx),i=0;i50))throw"problem";if(t.state instanceof x){if(!t.context.isEmpty()){for(var a=0;a=0&&(p+=1);this.closureCheckingStopState(h,e,n,c,i,p,s)}}},I.prototype.canDropLoopEntryEdgeInLeftRecursiveRule=function(t){var e=t.state;if(e.stateType!=l.STAR_LOOP_ENTRY)return!1;if(e.stateType!=l.STAR_LOOP_ENTRY||!e.isPrecedenceDecision||t.context.isEmpty()||t.context.hasEmptyPath())return!1;for(var n=t.context.length,r=0;r=0?this.parser.ruleNames[t]:""},I.prototype.getEpsilonTarget=function(t,e,n,r,i,o){switch(e.serializationType){case S.RULE:return this.ruleTransition(t,e);case S.PRECEDENCE:return this.precedenceTransition(t,e,n,r,i);case S.PREDICATE:return this.predTransition(t,e,n,r,i);case S.ACTION:return this.actionTransition(t,e);case S.EPSILON:return new u({state:e.target},t);case S.ATOM:case S.RANGE:case S.SET:return o&&e.matches(h.EOF,0,1)?new u({state:e.target},t):null;default:return null}},I.prototype.actionTransition=function(t,e){if(this.debug){var n=-1==e.actionIndex?65535:e.actionIndex;console.log("ACTION edge "+e.ruleIndex+":"+n)}return new u({state:e.target},t)},I.prototype.precedenceTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&i)if(o){var a=this._input.index;this._input.seek(this._startIndex);var l=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(a),l&&(s=new u({state:e.target},t))}else{var c=v.andContext(t.semanticContext,e.getPredicate());s=new u({state:e.target,semanticContext:c},t)}else s=new u({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},I.prototype.predTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.ruleIndex+":"+e.predIndex+", ctx dependent="+e.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&(e.isCtxDependent&&i||!e.isCtxDependent))if(o){var a=this._input.index;this._input.seek(this._startIndex);var l=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(a),l&&(s=new u({state:e.target},t))}else{var c=v.andContext(t.semanticContext,e.getPredicate());s=new u({state:e.target,semanticContext:c},t)}else s=new u({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},I.prototype.ruleTransition=function(t,e){this.debug&&console.log("CALL rule "+this.getRuleName(e.target.ruleIndex)+", ctx="+t.context);var n=e.followState,r=R.create(t.context,n.stateNumber);return new u({state:e.target,context:r},t)},I.prototype.getConflictingAlts=function(t){var e=y.getConflictingAltSubsets(t);return y.getAlts(e)},I.prototype.getConflictingAltsOrUniqueAlt=function(t){var e=null;return t.uniqueAlt!==a.INVALID_ALT_NUMBER?(e=new o).add(t.uniqueAlt):e=t.conflictingAlts,e},I.prototype.getTokenName=function(t){if(t===h.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},I.prototype.getLookaheadName=function(t){return this.getTokenName(t.LA(1))},I.prototype.dumpDeadEndConfigs=function(t){console.log("dead end configs: ");for(var e=t.getDeadEndConfigs(),n=0;n0){var o=r.state.transitions[0];if(o instanceof AtomTransition)i="Atom "+this.getTokenName(o.label);else if(o instanceof E){i=(o instanceof C?"~":"")+"Set "+o.set}}console.error(r.toString(this.parser,!0)+":"+i)}},I.prototype.noViableAlt=function(t,e,n,r){return new k(this.parser,t,t.get(r),t.LT(1),n,e)},I.prototype.getUniqueAlt=function(t){for(var e=a.INVALID_ALT_NUMBER,n=0;n "+r+" upon "+this.getTokenName(n)),null===r)return null;if(r=this.addDFAState(t,r),null===e||n<-1||n>this.atn.maxTokenType)return r;if(null===e.edges&&(e.edges=[]),e.edges[n+1]=r,this.debug){var i=null===this.parser?null:this.parser.literalNames,o=null===this.parser?null:this.parser.symbolicNames;console.log("DFA=\n"+t.toString(i,o))}return r},I.prototype.addDFAState=function(t,e){if(e==d.ERROR)return e;var n=t.states.get(e);return null!==n?n:(e.stateNumber=t.states.length,e.configs.readOnly||(e.configs.optimizeConfigs(this),e.configs.setReadonly(!0)),t.states.add(e),this.debug&&console.log("adding new DFA state: "+e),e)},I.prototype.reportAttemptingFullContext=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new _(r,i+1);console.log("reportAttemptingFullContext decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,t,r,i,e,n)},I.prototype.reportContextSensitivity=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new _(r,i+1);console.log("reportContextSensitivity decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,t,r,i,e,n)},I.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){if(this.debug||this.retry_debug){var a=new _(n,r+1);console.log("reportAmbiguity "+o+":"+s+", input="+this.parser.getTokenStream().getText(a))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,t,n,r,i,o,s)},e.ParserATNSimulator=I},function(t,e,n){e.DFA=n(42).DFA,e.DFASerializer=n(17).DFASerializer,e.LexerDFASerializer=n(17).LexerDFASerializer,e.PredPrediction=n(11).PredPrediction},function(t,e,n){var r=n(0).Set,i=n(11).DFAState,o=n(3).StarLoopEntryState,s=n(9).ATNConfigSet,a=n(17).DFASerializer,l=n(17).LexerDFASerializer;function u(t,e){if(void 0===e&&(e=0),this.atnStartState=t,this.decision=e,this._states=new r,this.s0=null,this.precedenceDfa=!1,t instanceof o&&t.isPrecedenceDecision){this.precedenceDfa=!0;var n=new i(null,new s);n.edges=[],n.isAcceptState=!1,n.requiresFullContext=!1,this.s0=n}return this}u.prototype.getPrecedenceStartState=function(t){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return t<0||t>=this.s0.edges.length?null:this.s0.edges[t]||null},u.prototype.setPrecedenceStartState=function(t,e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";t<0||(this.s0.edges[t]=e)},u.prototype.setPrecedenceDfa=function(t){if(this.precedenceDfa!==t){if(this._states=new DFAStatesSet,t){var e=new i(null,new s);e.edges=[],e.isAcceptState=!1,e.requiresFullContext=!1,this.s0=e}else this.s0=null;this.precedenceDfa=t}},Object.defineProperty(u.prototype,"states",{get:function(){return this._states}}),u.prototype.sortedStates=function(){return this._states.values().sort(function(t,e){return t.stateNumber-e.stateNumber})},u.prototype.toString=function(t,e){return t=t||null,e=e||null,null===this.s0?"":new a(this,t,e).toString()},u.prototype.toLexerString=function(){return null===this.s0?"":new l(this).toString()},e.DFA=u},function(t,e,n){var r=n(4);e.Trees=n(21).Trees,e.RuleNode=r.RuleNode,e.ParseTreeListener=r.ParseTreeListener,e.ParseTreeVisitor=r.ParseTreeVisitor,e.ParseTreeWalker=r.ParseTreeWalker},function(t,e,n){e.RecognitionException=n(5).RecognitionException,e.NoViableAltException=n(5).NoViableAltException,e.LexerNoViableAltException=n(5).LexerNoViableAltException,e.InputMismatchException=n(5).InputMismatchException,e.FailedPredicateException=n(5).FailedPredicateException,e.DiagnosticErrorListener=n(45).DiagnosticErrorListener,e.BailErrorStrategy=n(30).BailErrorStrategy,e.ErrorListener=n(16).ErrorListener},function(t,e,n){var r=n(0).BitSet,i=n(16).ErrorListener,o=n(2).Interval;function s(t){return i.call(this),t=t||!0,this.exactOnly=t,this}s.prototype=Object.create(i.prototype),s.prototype.constructor=s,s.prototype.reportAmbiguity=function(t,e,n,r,i,s,a){if(!this.exactOnly||i){var l="reportAmbiguity d="+this.getDecisionDescription(t,e)+": ambigAlts="+this.getConflictingAlts(s,a)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(l)}},s.prototype.reportAttemptingFullContext=function(t,e,n,r,i,s){var a="reportAttemptingFullContext d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(a)},s.prototype.reportContextSensitivity=function(t,e,n,r,i,s){var a="reportContextSensitivity d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(a)},s.prototype.getDecisionDescription=function(t,e){var n=e.decision,r=e.atnStartState.ruleIndex,i=t.ruleNames;if(r<0||r>=i.length)return""+n;var o=i[r]||null;return null===o||0===o.length?""+n:n+" ("+o+")"},s.prototype.getConflictingAlts=function(t,e){if(null!==t)return t;for(var n=new r,i=0;i=0&&(this.fetchedEOF?this.index0)||this.fetch(e)>=e},a.prototype.fetch=function(t){if(this.fetchedEOF)return 0;for(var e=0;e=this.tokens.length&&(e=this.tokens.length-1);for(var o=t;o=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[e]},a.prototype.adjustSeekIndex=function(t){return t},a.prototype.lazyInit=function(){-1===this.index&&this.setup()},a.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},a.prototype.setTokenSource=function(t){this.tokenSource=t,this.tokens=[],this.index=-1,this.fetchedEOF=!1},a.prototype.nextTokenOnChannel=function(t,e){if(this.sync(t),t>=this.tokens.length)return-1;for(var n=this.tokens[t];n.channel!==this.channel;){if(n.type===r.EOF)return-1;t+=1,this.sync(t),n=this.tokens[t]}return t},a.prototype.previousTokenOnChannel=function(t,e){for(;t>=0&&this.tokens[t].channel!==e;)t-=1;return t},a.prototype.getHiddenTokensToRight=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.nextTokenOnChannel(t+1,i.DEFAULT_TOKEN_CHANNEL),r=t+1,o=-1===n?this.tokens.length-1:n;return this.filterForChannel(r,o,e)},a.prototype.getHiddenTokensToLeft=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.previousTokenOnChannel(t-1,i.DEFAULT_TOKEN_CHANNEL);if(n===t-1)return null;var r=n+1,o=t-1;return this.filterForChannel(r,o,e)},a.prototype.filterForChannel=function(t,e,n){for(var r=[],o=t;o=this.tokens.length&&(n=this.tokens.length-1);for(var i="",s=e;s=0&&this._parseListeners.splice(e,1),0===this._parseListeners.length&&(this._parseListeners=null)}},p.prototype.removeParseListeners=function(){this._parseListeners=null},p.prototype.triggerEnterRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.map(function(e){e.enterEveryRule(t),t.enterRule(e)})}},p.prototype.triggerExitRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.slice(0).reverse().map(function(e){t.exitRule(e),e.exitEveryRule(t)})}},p.prototype.getTokenFactory=function(){return this._input.tokenSource._factory},p.prototype.setTokenFactory=function(t){this._input.tokenSource._factory=t},p.prototype.getATNWithBypassAlts=function(){var t=this.getSerializedATN();if(null===t)throw"The current parser does not support an ATN with bypass alternatives.";var e=this.bypassAltsAtnCache[t];if(null===e){var n=new l;n.generateRuleBypassTransitions=!0,e=new a(n).deserialize(t),this.bypassAltsAtnCache[t]=e}return e};var f=n(15).Lexer;p.prototype.compileParseTreePattern=function(t,e,n){if(null===(n=n||null)&&null!==this.getTokenStream()){var r=this.getTokenStream().tokenSource;r instanceof f&&(n=r)}if(null===n)throw"Parser can't discover a lexer to use";return new ParseTreePatternMatcher(n,this).compile(t,e)},p.prototype.getInputStream=function(){return this.getTokenStream()},p.prototype.setInputStream=function(t){this.setTokenStream(t)},p.prototype.getTokenStream=function(){return this._input},p.prototype.setTokenStream=function(t){this._input=null,this.reset(),this._input=t},p.prototype.getCurrentToken=function(){return this._input.LT(1)},p.prototype.notifyErrorListeners=function(t,e,n){e=e||null,n=n||null,null===e&&(e=this.getCurrentToken()),this._syntaxErrors+=1;var r=e.line,i=e.column;this.getErrorListenerDispatch().syntaxError(this,e,r,i,t,n)},p.prototype.consume=function(){var t=this.getCurrentToken();t.type!==r.EOF&&this.getInputStream().consume();var e,n=null!==this._parseListeners&&this._parseListeners.length>0;(this.buildParseTrees||n)&&((e=this._errHandler.inErrorRecoveryMode(this)?this._ctx.addErrorNode(t):this._ctx.addTokenNode(t)).invokingState=this.state,n&&this._parseListeners.map(function(t){e instanceof c||void 0!==e.isErrorNode&&e.isErrorNode()?t.visitErrorNode(e):e instanceof u&&t.visitTerminal(e)}));return t},p.prototype.addContextToParseTree=function(){null!==this._ctx.parentCtx&&this._ctx.parentCtx.addChild(this._ctx)},p.prototype.enterRule=function(t,e,n){this.state=e,this._ctx=t,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.exitRule=function(){this._ctx.stop=this._input.LT(-1),null!==this._parseListeners&&this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx},p.prototype.enterOuterAlt=function(t,e){t.setAltNumber(e),this.buildParseTrees&&this._ctx!==t&&null!==this._ctx.parentCtx&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(t)),this._ctx=t},p.prototype.getPrecedence=function(){return 0===this._precedenceStack.length?-1:this._precedenceStack[this._precedenceStack.length-1]},p.prototype.enterRecursionRule=function(t,e,n,r){this.state=e,this._precedenceStack.push(r),this._ctx=t,this._ctx.start=this._input.LT(1),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.pushNewRecursionContext=function(t,e,n){var r=this._ctx;r.parentCtx=t,r.invokingState=e,r.stop=this._input.LT(-1),this._ctx=t,this._ctx.start=r.start,this.buildParseTrees&&this._ctx.addChild(r),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.unrollRecursionContexts=function(t){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);var e=this._ctx;if(null!==this._parseListeners)for(;this._ctx!==t;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=t;e.parentCtx=t,this.buildParseTrees&&null!==t&&t.addChild(e)},p.prototype.getInvokingContext=function(t){for(var e=this._ctx;null!==e;){if(e.ruleIndex===t)return e;e=e.parentCtx}return null},p.prototype.precpred=function(t,e){return e>=this._precedenceStack[this._precedenceStack.length-1]},p.prototype.inContext=function(t){return!1},p.prototype.isExpectedToken=function(t){var e=this._interp.atn,n=this._ctx,i=e.states[this.state],o=e.nextTokens(i);if(o.contains(t))return!0;if(!o.contains(r.EPSILON))return!1;for(;null!==n&&n.invokingState>=0&&o.contains(r.EPSILON);){var s=e.states[n.invokingState].transitions[0];if((o=e.nextTokens(s.followState)).contains(t))return!0;n=n.parentCtx}return!(!o.contains(r.EPSILON)||t!==r.EOF)},p.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},p.prototype.getExpectedTokensWithinCurrentRule=function(){var t=this._interp.atn,e=t.states[this.state];return t.nextTokens(e)},p.prototype.getRuleIndex=function(t){var e=this.getRuleIndexMap()[t];return null!==e?e:-1},p.prototype.getRuleInvocationStack=function(t){null===(t=t||null)&&(t=this._ctx);for(var e=[];null!==t;){var n=t.ruleIndex;n<0?e.push("n/a"):e.push(this.ruleNames[n]),t=t.parentCtx}return e},p.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},p.prototype.dumpDFA=function(){for(var t=!1,e=0;e0&&(t&&console.log(),this.printer.println("Decision "+n.decision+":"),this.printer.print(n.toString(this.literalNames,this.symbolicNames)),t=!0)}},p.prototype.getSourceName=function(){return this._input.sourceName},p.prototype.setTrace=function(t){t?(null!==this._tracer&&this.removeParseListener(this._tracer),this._tracer=new h(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)},e.Parser=p},function(t,e,n){var r=n(12),i=["悋Ꜫ脳맭䅼㯧瞆奤","ŝ\b\t\t","\t\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v","\f\t\f\r\t\r\t\t","\t\t\t\t","\t\t\t","\t\t\t\t","\t\t\t","\t\t \t ","","","","","","","","","","","","","","\b\b\t\t\n\n","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\f\f\r\r","","Ó\n\fÖ","\v","Ü\n\fß\v","ã\n\fæ\v","ê\n","ï\n\fò","\v","ù\n","þ\n\fā\v","Ĉ\n","","","ę\n","Ĝ\n","ġ\n\rĢ","","ī\n\fĮ\v","","","Ŀ\n\fł","\v","Ō\n\f","ŏ\v ","    ŗ\n \f  Ś\v  "," ÔĬŀ!","\t\v\r\b\t\n\v\f\r","!#%","')+-/13579",";=?__C\\","2;C\\aac|c|$$^^\n$$11^^dd","hhppttvv))^^\n))11^^ddhhppttvv2;CHch",'\v\v""\f\f==~~',"ũ","\t","\v\r","","","","","!","#%","35","79;","=?","AI","K\t„","\v†\rˆ","“•","—™","ÄÆ","ÈÊ","Ì!Ù","#à%é'ë",")õ+ú","-Ą/ĉ","1ď3đ","5ě7Ġ","9Ħ;Ĵ=Ň","?ŒABi","BCtCDcDEo","EFoFGcGHtH","IJ=J","KLuLMvMNc","NOvOPGPQzQR","rRStSTUTUr","UVnVWkWXv",'XY"YZ<Z["[\\',")\\]?]^?^_",'?_`"`auabv',"bcccdvdeg","efofggghphi",'vij"jk`kl"',"lm?mn?no?",'op"pqgqrzrs',"rstttuguvu","vwuwxkxyq",'yzpz{"{|x|}','"}~?~?',"€?€)‚",'"‚ƒ=ƒ\b',"„…<…\n","†‡~‡\f","ˆ‰g‰ŠzŠ","‹r‹ŒtŒ","gŽuŽ","uk‘q","‘’p’","“”A”","•–-–","—˜,˜","™šOš›g","›œcœp","žkžŸpŸ ","i ¡h¡¢","w¢£n£¤U","¤¥r¥¦n","¦§k§¨v¨",'©"©ª<ª«','"«¬)¬­',"?­®?®¯?",'¯°"°±o',"±²g²³c³","´p´µkµ¶","p¶·i·¸","h¸¹w¹ºn",'º»"»¼`','¼½"½¾?¾',"¿?¿À?ÀÁ",')ÁÂ"ÂÃ',"=ÃÄÅ","*ÅÆÇ","+ÇÈÉ","€ÉÊË","0ËÌÔ","]ÍÎ^ÎÓ^","ÏÐ^ÐÓ_","ÑÓ\nÒÍ","ÒÏÒÑ","ÓÖÔÕ","ÔÒÕ×","ÖÔר_","Ø ÙÝ\tÚ","Ü\tÛÚÜ","ßÝÛÝ",'ÞÞ"ß',"Ýàä\tá","ã\tâáã","æäâä","åå$æ","äçê+è","ê'éçé","èê&ë","ð$ìï)íï","\nîìîí","ïòðî","ðññó","òðóô","$ô(õø","^öù\t÷ù/","øöø÷","ù*úÿ)","ûþ-üþ\n\býû","ýüþā","ÿýÿĀ","ĀĂāÿ","Ăă)ă,","Ąć^ąĈ\t\t","ĆĈ/ćą","ćĆĈ.","ĉĊwĊċ1","ċČ1Čč1č","Ď1Ď0ďĐ","\t\nĐ2đĒ%","Ēē!ēĔ","Ĕĕ\bĕ4","ĖĘėę\f","ĘėĘę","ęĜĚĜ\f","ěĖěĚ","ĜĝĝĞ\b","Ğ6ğġ\t\vĠ","ğġĢĢ","ĠĢģģ","ĤĤĥ\bĥ","8Ħħ1ħĨ",",ĨĬĩī","\vĪĩīĮ","ĬĭĬĪ","ĭįĮĬ","įİ,İı","1ıIJIJij","\bij:Ĵĵ","hĵĶtĶķc","ķĸiĸĹo","ĹĺgĺĻpĻ","ļvļŀĽ","Ŀ\vľĽĿ","łŀŁŀ","ľŁŃł","ŀŃń=ń","ŅŅņ\bņ","<Ňň1ňʼn","1ʼnōŊŌ","\n\fŋŊŌŏ","ōŋōŎ","ŎŐŏō","Őő\bő>","Œœ/œŔ@","ŔŘŕŗ\n\r","ŖŕŗŚ","ŘŖŘř","řśŚŘ","śŜ\b Ŝ@","ÒÔÝäéîðøýÿćĘ","ěĢĬŀōŘ\b"].join(""),o=(new r.atn.ATNDeserializer).deserialize(i),s=o.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)});function a(t){return r.Lexer.call(this,t),this._interp=new r.atn.LexerATNSimulator(this,o,s,new r.PredictionContextCache),this}a.prototype=Object.create(r.Lexer.prototype),a.prototype.constructor=a,a.EOF=r.Token.EOF,a.T__0=1,a.T__1=2,a.T__2=3,a.T__3=4,a.T__4=5,a.T__5=6,a.T__6=7,a.T__7=8,a.T__8=9,a.T__9=10,a.T__10=11,a.T__11=12,a.T__12=13,a.T__13=14,a.Brackets=15,a.LexerIdentifier=16,a.ParserIdentifier=17,a.String=18,a.LabelForParserRule=19,a.Newline=20,a.WhiteSpace=21,a.BlockComment=22,a.FragmentComment=23,a.LineComment=24,a.ArrowComment=25,a.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],a.prototype.modeNames=["DEFAULT_MODE"],a.prototype.literalNames=[null,"'grammar'","';'","'statExprSplit : '=== statement ^ === expression v ===' ;'","':'","'|'","'expression'","'?'","'+'","'*'","'MeaningfulSplit : '=== meaningful ^ ===' ;'","'('","')'","'~'","'.'"],a.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Brackets","LexerIdentifier","ParserIdentifier","String","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],a.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","Brackets","LexerIdentifier","ParserIdentifier","String","STRING_double","ESC_double","STRING_single","ESC_single","UNICODE","HEX","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],a.prototype.grammarFileName="BlocklyGrammer.g4",e.BlocklyGrammerLexer=a},function(t,e,n){var r=n(12),i=n(20).BlocklyGrammerVisitor,o=["悋Ꜫ脳맭䅼㯧瞆奤","Õ\t\t","\t\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v\f\t\f","\r\t\r\n\f"," \v$\n","\f'\v","","","8\n\r9","@\n\fC\v","F\n","L\n","Q\nS\n\fV\v","\\","\n\f_\vb\n","f\n\f","i\v\b\b\b\bn\n\b\bp\n\b","\b\b\b\bu\n\b\bw\n\b\b\b\b","\b|\n\b\b~\n\b\b\b\b\bƒ\n\b","\b…\n\b\b‡\n\b\t\tŠ\n\t\f\t","\t\v\t\n\n\v\v\v","\v\v\v\v\v\v","\v\v›\n\v\r\v\vœ","\v\v\v\v\v\v","\v\v¦\n\v\f\f\f\f«","\n\f\f­\n\f\f¯\n\f\r\f\f°\r","\r\r\r\r\r\r\r\r\r","\r\r\r\r\r\rÂ\n\r\r\r","\r\r\r\r\r\r\r\r","\rÎ\n\r\rÐ\n\r\f\r\rÓ\v\r\r","%‹\b\n\f","\t\v","\n\vð,","0\bE","\na\fc†","‹Ž","¥®","Á","\b"," ","!"," !%",'"$\n#"$\'',"%&%#","&('%()","\t)*\n*+\t+",",--../","/01","12334","4756","687589","979::;",";F<==A",">@\b?>@","CA?AB","BDCADF","E2E<F\t","GH\bHK","IL\fJLKI","KJLTMP","NQ\fOQPN","POQS","RMSVTR","TUUWVT","WbXYY]","Z\\\b[Z","\\_][]^","^`_]`b","aGaX","b\vcg\bdf","\bedfige","ghh\r","igjo\bkm\t","ln\tmlmn","npokop","p‡qv","rt\tsu\tts","tuuwvr","vww‡x}","y{\tz|\t{z","{||~","}y}~~‡","„€‚\t","ƒ\t‚","‚ƒƒ…","„€„…","…‡†j","†q†x","†‡","ˆŠ\v‰ˆ","Š‹Œ","‹‰Œ","‹Ž\f","‘","‘’’“\f","“””¦","•––—","—š\f˜™","™›\fš˜","›œœš","œž","žŸŸ¦"," ¡¡¢","¢£\r£¤","¤¦¥","¥•¥ ","¦§¬","¨ª\t©«\t","ª©ª«","«­¬¨","¬­­¯","®§¯°","°®°±","±²³\b\r³","´\r´µ\rµ¶","¶Â·¸","¸Â\r\b¹Â","º»»¼","¼½½Â","¾Â¿Â","ÀÂÁ²","Á·Á¹","ÁºÁ¾","Á¿ÁÀ","ÂÑÃÄ\f","\vÄÅÅÐ","\r\fÆÇ\f\nÇÐ\r\v","ÈÉ\f\rÉÐ\tÊË","\f\fËÍ\tÌÎ\t","ÍÌÍÎ","ÎÐÏÃ","ÏÆÏÈ","ÏÊÐÓ","ÑÏÑÒ","ÒÓÑ"," %9AEKPT]agmotv{}‚„†‹œ¥","ª¬°ÁÍÏÑ"].join(""),s=(new r.atn.ATNDeserializer).deserialize(o),a=s.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)}),l=new r.PredictionContextCache,u=[null,"'grammar'","';'","'statExprSplit : '=== statement ^ === expression v ===' ;'","':'","'|'","'expression'","'?'","'+'","'*'","'MeaningfulSplit : '=== meaningful ^ ===' ;'","'('","')'","'~'","'.'"],c=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Brackets","LexerIdentifier","ParserIdentifier","String","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],h=["grammarFile","grammerDecl","statExprSplit","statementRule","expressionRule","arithmeticRuleCollection","parserRuleAtom","lexerRuleCollection","meaningfulSplit","lexerRule","strings","lexerRuleExpr"];function p(t){return r.Parser.call(this,t),this._interp=new r.atn.ParserATNSimulator(this,s,a,l),this.ruleNames=h,this.literalNames=u,this.symbolicNames=c,this}function f(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_grammarFile,this}function d(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_grammerDecl,this}function y(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_statExprSplit,this}function g(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_statementRule,this}function v(t,e){return g.call(this,t),g.prototype.copyFrom.call(this,e),this}function x(t,e){return g.call(this,t),g.prototype.copyFrom.call(this,e),this}function m(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_expressionRule,this}function _(t,e){return m.call(this,t),m.prototype.copyFrom.call(this,e),this}function T(t,e){return m.call(this,t),m.prototype.copyFrom.call(this,e),this}function S(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_arithmeticRuleCollection,this}function E(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_parserRuleAtom,this}function C(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function A(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function b(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function k(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function R(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRuleCollection,this}function L(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_meaningfulSplit,this}function I(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRule,this}function N(t,e){return I.call(this,t),I.prototype.copyFrom.call(this,e),this}function O(t,e){return I.call(this,t),I.prototype.copyFrom.call(this,e),this}function P(t,e){return I.call(this,t),I.prototype.copyFrom.call(this,e),this}function w(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_strings,this}function F(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRuleExpr,this}p.prototype=Object.create(r.Parser.prototype),p.prototype.constructor=p,Object.defineProperty(p.prototype,"atn",{get:function(){return s}}),p.EOF=r.Token.EOF,p.T__0=1,p.T__1=2,p.T__2=3,p.T__3=4,p.T__4=5,p.T__5=6,p.T__6=7,p.T__7=8,p.T__8=9,p.T__9=10,p.T__10=11,p.T__11=12,p.T__12=13,p.T__13=14,p.Brackets=15,p.LexerIdentifier=16,p.ParserIdentifier=17,p.String=18,p.LabelForParserRule=19,p.Newline=20,p.WhiteSpace=21,p.BlockComment=22,p.FragmentComment=23,p.LineComment=24,p.ArrowComment=25,p.RULE_grammarFile=0,p.RULE_grammerDecl=1,p.RULE_statExprSplit=2,p.RULE_statementRule=3,p.RULE_expressionRule=4,p.RULE_arithmeticRuleCollection=5,p.RULE_parserRuleAtom=6,p.RULE_lexerRuleCollection=7,p.RULE_meaningfulSplit=8,p.RULE_lexerRule=9,p.RULE_strings=10,p.RULE_lexerRuleExpr=11,f.prototype=Object.create(r.ParserRuleContext.prototype),f.prototype.constructor=f,f.prototype.grammerDecl=function(){return this.getTypedRuleContext(d,0)},f.prototype.statExprSplit=function(){return this.getTypedRuleContext(y,0)},f.prototype.lexerRuleCollection=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(R):this.getTypedRuleContext(R,t)},f.prototype.meaningfulSplit=function(){return this.getTypedRuleContext(L,0)},f.prototype.statementRule=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(g):this.getTypedRuleContext(g,t)},f.prototype.expressionRule=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(m):this.getTypedRuleContext(m,t)},f.prototype.accept=function(t){return t instanceof i?t.visitGrammarFile(this):t.visitChildren(this)},p.GrammarFileContext=f,p.prototype.grammarFile=function(){var t=new f(this,this._ctx,this.state);this.enterRule(t,0,p.RULE_grammarFile);try{this.enterOuterAlt(t,1),this.state=24,this.grammerDecl(),this.state=28,this._errHandler.sync(this);for(var e=this._interp.adaptivePredict(this._input,0,this._ctx);1!=e&&e!=r.atn.ATN.INVALID_ALT_NUMBER;)2===e&&(this.state=25,this.statementRule()),this.state=30,this._errHandler.sync(this),e=this._interp.adaptivePredict(this._input,0,this._ctx);this.state=31,this.statExprSplit(),this.state=35,this._errHandler.sync(this);for(e=this._interp.adaptivePredict(this._input,1,this._ctx);1!=e&&e!=r.atn.ATN.INVALID_ALT_NUMBER;)2===e&&(this.state=32,this.expressionRule()),this.state=37,this._errHandler.sync(this),e=this._interp.adaptivePredict(this._input,1,this._ctx);this.state=38,this.lexerRuleCollection(),this.state=39,this.meaningfulSplit(),this.state=40,this.lexerRuleCollection()}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},d.prototype=Object.create(r.ParserRuleContext.prototype),d.prototype.constructor=d,d.prototype.LexerIdentifier=function(){return this.getToken(p.LexerIdentifier,0)},d.prototype.accept=function(t){return t instanceof i?t.visitGrammerDecl(this):t.visitChildren(this)},p.GrammerDeclContext=d,p.prototype.grammerDecl=function(){var t=new d(this,this._ctx,this.state);this.enterRule(t,2,p.RULE_grammerDecl);try{this.enterOuterAlt(t,1),this.state=42,this.match(p.T__0),this.state=43,this.match(p.LexerIdentifier),this.state=44,this.match(p.T__1)}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},y.prototype=Object.create(r.ParserRuleContext.prototype),y.prototype.constructor=y,y.prototype.accept=function(t){return t instanceof i?t.visitStatExprSplit(this):t.visitChildren(this)},p.StatExprSplitContext=y,p.prototype.statExprSplit=function(){var t=new y(this,this._ctx,this.state);this.enterRule(t,4,p.RULE_statExprSplit);try{this.enterOuterAlt(t,1),this.state=46,this.match(p.T__2)}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},g.prototype=Object.create(r.ParserRuleContext.prototype),g.prototype.constructor=g,g.prototype.copyFrom=function(t){r.ParserRuleContext.prototype.copyFrom.call(this,t)},v.prototype=Object.create(g.prototype),v.prototype.constructor=v,p.StatValueContext=v,v.prototype.ParserIdentifier=function(){return this.getToken(p.ParserIdentifier,0)},v.prototype.parserRuleAtom=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(E):this.getTypedRuleContext(E,t)},v.prototype.accept=function(t){return t instanceof i?t.visitStatValue(this):t.visitChildren(this)},x.prototype=Object.create(g.prototype),x.prototype.constructor=x,p.StatListContext=x,x.prototype.ParserIdentifier=function(t){return void 0===t&&(t=null),null===t?this.getTokens(p.ParserIdentifier):this.getToken(p.ParserIdentifier,t)},x.prototype.accept=function(t){return t instanceof i?t.visitStatList(this):t.visitChildren(this)},p.StatementRuleContext=g,p.prototype.statementRule=function(){var t=new g(this,this._ctx,this.state);this.enterRule(t,6,p.RULE_statementRule);var e=0;try{switch(this.state=67,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,4,this._ctx)){case 1:t=new x(this,t),this.enterOuterAlt(t,1),this.state=48,this.match(p.ParserIdentifier),this.state=49,this.match(p.T__3),this.state=50,this.match(p.ParserIdentifier),this.state=53,this._errHandler.sync(this),e=this._input.LA(1);do{this.state=51,this.match(p.T__4),this.state=52,this.match(p.ParserIdentifier),this.state=55,this._errHandler.sync(this),e=this._input.LA(1)}while(e===p.T__4);this.state=57,this.match(p.T__1);break;case 2:for(t=new v(this,t),this.enterOuterAlt(t,2),this.state=58,this.match(p.ParserIdentifier),this.state=59,this.match(p.T__3),this.state=63,this._errHandler.sync(this),e=this._input.LA(1);0==(-32&e)&&0!=(1<1)for(var i,o=0;i=t[1][o];o++)e[i]&&this.error("语句 "+i+" 同时在两个语句集合 "+e[i]+" 和 "+t[0]+" 中出现了"),e[i]=t[0],n(this.statementRules,i).length>1&&this.error(t[0]+" 下的子规则 "+i+' 包含了"|"');var s;for(r=0;s=this.expressionRules[r];r++)s[1].length>1&&"expression"!==s[0]&&this.error("表达式 "+s[0]+' 包含了"|"')},SymbolVisitor.prototype.visitGrammarFile=function(t){return this.visit(t.grammerDecl()),this.visit(t.statementRule()),this.visit(t.expressionRule()),this.visit(t.lexerRuleCollection(0)),this},SymbolVisitor.prototype.visitGrammerDecl=function(t){this.grammerName=t.children[1].getText()},SymbolVisitor.prototype.visitStatList=function(t){for(var e,n=t.ParserIdentifier(),r=0;e=n[r];r++)n[r]=e.getText();var i=n.shift();this.statementRules.push([i,n])},SymbolVisitor.prototype.visitStatValue=function(t){var e=t.ParserIdentifier(0).getText();this.statementRules.push([e,[e]])},SymbolVisitor.prototype.visitExprExpression=function(t){var e=[];this.expression_arithmetic_num=t.arithmeticRuleCollection().length;for(var n=0;n1){this.notEntry[t[e]]=!0;for(var n,r=0;n=o.check[r];r++){var i=this.getRule("statement",n);i.blockjs.nextStatement=o.check,this.setRule("statement",n,i),this.notEntry[n]=!0}}for(e=0;o=this.statementRules[t[e]];e++)this.notEntry[t[e]]||(this.notEntry[t[e]]=!1,delete o.blockjs.previousStatement,delete o.blockjs.nextStatement,delete o.blockjs.inputsInline,o.blockjs.colour=this.entryColor);var o,s=[],a=[];for(e=0;o=this.statementRules[t[e]];e++)if(o.check.length>1)a.push([t[e],o]);else{s.push(o),o.type="statement";var l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))},h="Blockly."+this.generLanguage+".";l.push(u+"function(block) {\n"),c(1);for(r=0;y=o.blockobj.args[r];r++){var p=this.varPrefix+o.blockobj.vars[r];if(y.id)"value"===y.blockType?(l.push(u+"var "+p+" = "+h+"valueToCode(block, '"),l.push(p+"', \n "+u+h+this.recieveOrder+")")):"statement"===y.blockType?(l.push(u+"var "+p+" = "+h+"statementToCode(block, '"),l.push(p+"')")):(l.push(u+"var "+p+" = block.getFieldValue('"),l.push(p+"')")),"field_checkbox"===y.data.type&&l.push(" === 'TRUE'"),l.push(";\n"),y.multi,{field_checkbox:!0,field_dropdown:!0,field_number:!0,field_colour:!0,field_angle:!0,field_image:!0}[y.data.type]||y.omitted||(l.push(u+"if ("+p+"==='') {\n"),c(1),l.push(u+"throw new OmitedError(block,'"+p+"','"),l.push(t[e]+"');\n"),c(-1),l.push(u+"}\n")),"field"===y.blockType&&(l.push(u+p+" = "+this.grammerName+"Functions.pre('"),l.push(y.id+"')("+p+");\n"))}o.blockobj.inject.generFunc?(o.blockobj.inject.override&&(c(-9999),(l=[]).push(u+"function(block) {\n"),c(1)),l.push(u+o.blockobj.inject.generFunc.split("\n").join("\n"+u)),l.push("\n")):(l.push(u+"var code = '1111111111;\\n';\n"),l.push(u+"return code;\n")),c(-1),l.push(u+"}"),o.generFunc=l.join("")}t=Object.keys(this.expressionRules);var f;for(e=0;f=this.expressionRules[t[e]];e++)if(f.check.length>1)a.push([t[e],f]);else{s.push(f),f.type="value";l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))},h="Blockly."+this.generLanguage+".";l.push(u+"function(block) {\n"),c(1);for(r=0;y=f.blockobj.args[r];r++){p=this.varPrefix+f.blockobj.vars[r];if(y.id)"value"===y.blockType?(l.push(u+"var "+p+" = "+h+"valueToCode(block, '"),l.push(p+"', \n "+u+h+this.recieveOrder+")")):"statement"===y.blockType?(l.push(u+"var "+p+" = "+h+"statementToCode(block, '"),l.push(p+"')")):(l.push(u+"var "+p+" = block.getFieldValue('"),l.push(p+"')")),"field_checkbox"===y.data.type&&l.push(" === 'TRUE'"),l.push(";\n"),y.multi,{field_checkbox:!0,field_dropdown:!0,field_number:!0,field_colour:!0,field_angle:!0,field_image:!0}[y.data.type]||y.omitted||(l.push(u+"if ("+p+"==='') {\n"),c(1),l.push(u+"throw new OmitedError(block,'"+p+"','"),l.push(t[e]+"');\n"),c(-1),l.push(u+"}\n")),"field"===y.blockType&&(l.push(u+p+" = "+this.grammerName+"Functions.pre('"),l.push(y.id+"')("+p+");\n"))}f.blockobj.inject.generFunc?(f.blockobj.inject.override&&(c(-9999),(l=[]).push(u+"function(block) {\n"),c(1)),l.push(u+f.blockobj.inject.generFunc.split("\n").join("\n"+u)),l.push("\n")):(l.push(u+"var code = 0000000000;\n"),l.push(u+"return [code, "+h+this.sendOrder+"];\n")),c(-1),l.push(u+"}"),f.generFunc=l.join("")}var d;for(e=0;d=s[e];e++){d.args=[],d.argsType=[],d.fieldDefault=[];var y;for(r=0;y=d.blockobj.args[r];r++)y.id&&(d.args.push(d.blockobj.vars[r]),d.argsType.push(y.blockType),d.fieldDefault.push(d.blockobj.fieldDefault[r]));l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))};var g=this.grammerName,v=d.check[0];l.push(u+"function (inputs,isShadow,comment) {\n"),c(1),l.push(u+"return "+g+"Functions.xmlText('"),l.push(v+"',inputs,isShadow,comment);\n"),c(-1),l.push(u+"}"),d.xmlText=l.join("")}this.temp_xml=s,this.temp_collection=a},EvalVisitor.prototype.generBlocks=function(){var t=[],e="",n=function(t){t>0&&(e+=Array(2*t+1).join(" ")),t<0&&(e=e.slice(0,2*t))};temp_xml=this.temp_xml,delete this.temp_xml,temp_collection=this.temp_collection,delete this.temp_collection,t.push(e+this.grammerName+"Blocks = {\n"),n(1);for(var r,i=0;r=temp_collection[i];i++)t.push(e+'"'+r[0]+'": '),t.push(JSON.stringify(r[1].check,null,2).split("\n").join("\n"+e)),t.push(",\n");function o(t,e,n){var r=e.blockjs,i=JSON.stringify(r).split("\n").join("\n"+n),o={};r=JSON.parse(i);for(var s,a=0;s=e.blockobj.args[a];a++)if(s.id){var l=t.getRule(s.blockType,s.id);l&&1!==l.check.length&&(r.args0[a].check="1_fry2_3_inrgv"+s.id,o['"1_fry2_3_inrgv'+s.id+'"']=t.grammerName+"Blocks."+s.id)}if(r.nextStatement)for(var u,c=0;u=temp_collection[c];c++)if(-1!==u[1].check.indexOf(r.type)){r.nextStatement="1_fry2_3_inrgv"+u[0],o['"1_fry2_3_inrgv'+u[0]+'"']=t.grammerName+"Blocks."+u[0];break}for(var h in i=JSON.stringify(r,null,2).split("\n").join("\n"+n),o)i=i.split(h).join(o[h]);return i}t.pop(),t.push("\n"),n(-1),t.push(e+"}\n"),t.push(e+this.grammerName+"Blocks = Object.assign("),t.push(this.grammerName+"Blocks,{\n"),n(1);var s;for(i=0;s=temp_xml[i];i++)t.push(e+'"'+s.check[0]+'": {\n'),n(1),t.push(e+'"type": "'+s.type+'",\n'),t.push(e+'"json": '),t.push(o(this,s,e)),t.push(",\n"),t.push(e+'"generFunc": '),t.push(s.generFunc.split("\n").join("\n"+e)),t.push(",\n"),t.push(e+'"args": '),t.push(JSON.stringify(s.args,null,2).split("\n").join("\n"+e)),t.push(",\n"),t.push(e+'"argsType": '),t.push(JSON.stringify(s.argsType,null,0)),t.push(",\n"),t.push(e+'"fieldDefault": '),t.push(JSON.stringify(s.fieldDefault,null,0)),t.push(",\n"),t.push(e+'"xmlText": '),t.push(s.xmlText.split("\n").join("\n"+e)),t.push("\n"),n(-1),t.push(e+"},\n");t.pop(),t.push(e+"}\n"),n(-1),t.push(e+"});\n"),this.blocks=t.join("")},EvalVisitor.prototype.SpeicalLexerRule=function(t){var e={};return"Bool"===t?(e={type:"field_checkbox",checked:!0},this.setRule("lexer",t,e),!0):"Int"===t?(e={type:"field_number",value:0,min:0,precision:1},this.setRule("lexer",t,e),!0):"Number"===t?(e={type:"field_number",value:0},this.setRule("lexer",t,e),!0):"Colour"===t?(e={type:"field_colour",colour:"#ffffff"},this.setRule("lexer",t,e),!0):"Angle"===t?(e={type:"field_angle",angle:90},this.setRule("lexer",t,e),!0):"BGNL"===t&&(e={type:"input_dummy"},this.setRule("lexer",t,e),!0)},EvalVisitor.prototype.visitGrammarFile=function(t){this.visit(t.lexerRuleCollection(0)),this.visit(t.statementRule()),this.expression_arithmetic_num=0,this.visit(t.expressionRule()),this.assemble()},EvalVisitor.prototype.visitStrings=function(t){for(var e,n=t.String(),r=0;e=n[r];r++)n[r]=this.escapeString(e.getText());return n.join(" ")},EvalVisitor.prototype.visitLexerRuleStrings=function(t){var e=t.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(e)){var n=this.visit(t.strings(0));this.setRule("lexer",e,n)}},EvalVisitor.prototype.visitLexerRuleList=function(ctx){var lexerId=ctx.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(lexerId))if("_List"===lexerId.slice(-5)||"_Img"===lexerId.slice(-4)){var strings=ctx.strings(),values=this.matchInject(lexerId);values=values?eval(values):[];for(var ii=0,value;value=strings[ii];ii++){var string_=this.visit(value);strings[ii]=[string_,null==values[ii]?string_:values[ii]]}if("_List"===lexerId.slice(-5))var lexervalue={type:"field_dropdown",options:strings};else var lexervalue={type:"field_image",src:strings[0][0],width:strings[1]&&strings[1][0]||0,height:strings[2]&&strings[2][0]||0,alt:"*"};this.setRule("lexer",lexerId,lexervalue)}else this.visitLexerRuleComplex(ctx)},EvalVisitor.prototype.visitLexerRuleComplex=function(t){var e=t.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(e)){var n={type:"field_input",text:e+"_default"};this.setRule("lexer",e,n)}},EvalVisitor.prototype.visitStatValue=function(t){this.status={name:t.ParserIdentifier(0).getText(),type:"statement",message:[],args:[]},this.visitChildren(t);var e=this.status;delete this.status,this.initAssemble(e)},BlocklyGrammerVisitor.prototype.visitArithmeticRuleCollection=function(t){this.status={name:"expression",type:"value",message:["%1"],args:[{id:"expression",blockType:"value",omitted:!1,data:{type:"input_value"}}]},this.visitChildren(t),this.status.name="expression_arithmetic_"+this.expression_arithmetic_num,this.expression_arithmetic_num++;var e=this.status;delete this.status,this.initAssemble(e)},BlocklyGrammerVisitor.prototype.visitExprValue=function(t){this.status={name:t.ParserIdentifier(0).getText(),type:"value",message:[],args:[]},this.visitChildren(t);var e=this.status;delete this.status,this.initAssemble(e)},EvalVisitor.prototype.visitParserAtomExpr=function(t){var e={id:"expression",blockType:"value",omitted:t.children.length>1,data:{type:"input_value"}};this.status.args.push(e),this.status.message.push("%"+this.status.args.length)},EvalVisitor.prototype.visitParserAtomParserId=function(t){var e=t.children[0].getText(),n=t.children.length>1&&t.children[1].getText()||"",r=this.getRule("value",e)?"value":"statement",i={id:e,blockType:r,omitted:"?"===n||"*"===n,multi:"+"===n||"*"===n,data:{type:"input_"+r}};"value"===r&&i.multi&&this.error(this.status.name+" 下出现了复数组合的表达式 "+e+n),this.status.args.push(i),this.status.message.push("%"+this.status.args.length)},EvalVisitor.prototype.visitParserAtomLexerId=function(t){var e=t.children[0].getText(),n=this.getRule("lexer",e);if(n){var r={id:e,blockType:"field",omitted:t.children.length>1,data:n};"BGNL"===e&&(r={data:n}),"string"!=typeof n?(this.status.args.push(r),this.status.message.push("%"+this.status.args.length)):this.status.message.push(n)}},EvalVisitor.prototype.visitParserAtomStr=function(t){var e=this.escapeString(t.String().getText());this.status.message.push(e)},exports.SymbolVisitor=SymbolVisitor,exports.EvalVisitor=EvalVisitor},function(t,e){e.OmitedError=function(){return"//生成代码中,当一个不允许省略的值或块省略时,会抛出这个错误\nfunction OmitedError(block, var_, rule, fileName, lineNumber) {\n var message = 'no omitted '+var_+' at '+rule;\n var instance = new Error(message, fileName, lineNumber);\n instance.block = block;\n instance.varName = var_;\n instance.blockName = rule;\n instance.name = 'OmitedError';\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n if (Error.captureStackTrace) {\n Error.captureStackTrace(instance, OmitedError);\n }\n return instance;\n}\n\nOmitedError.prototype = Object.create(Error.prototype);\nOmitedError.prototype.constructor = OmitedError;\n//处理此错误的omitedcheckUpdateFunction定义在下面"},e.Functions_pre=function(t){return`${t}Functions.Int_pre = function(intstr) {\n return parseInt(intstr);\n}\n\n${t}Functions.Number_pre = function(intstr) {\n return parseFloat(intstr);\n}\n\n//返回各LexerRule文本域的预处理函数,方便用来统一转义等等\n${t}Functions.pre = function(LexerId) {\n if (${t}Functions.hasOwnProperty(LexerId+'_pre')) {\n return ${t}Functions[LexerId+'_pre'];\n }\n return function(obj){return obj}\n}`},e.Functions_xmlText=function(t){return`//构造这个方法是为了能够不借助workspace,从语法树直接构造图块结构\n//inputs的第i个元素是第i个args的xmlText,null或undefined表示空\n//inputs的第rule.args.length个元素是其下一个语句的xmlText\n${t}Functions.xmlText = function (ruleName,inputs,isShadow,comment) {\n var rule = ${t}Blocks[ruleName];\n var blocktext = isShadow?'shadow':'block';\n var xmlText = [];\n xmlText.push('<'+blocktext+' type="'+ruleName+'">');\n if(!inputs)inputs=[];\n for (var ii=0,inputType;inputType=rule.argsType[ii];ii++) {\n var input = inputs[ii];\n var _input = '';\n var noinput = (input===null || input===undefined);\n if(noinput && inputType==='field') continue;\n if(noinput) input = '';\n if(inputType!=='field') {\n var subList = false;\n var subrulename = rule.args[ii];\n subrulename=subrulename.split('_').slice(0,-1).join('_');\n var subrule = ${t}Blocks[subrulename];\n if (subrule instanceof Array) {\n subrulename=subrule[subrule.length-1];\n subrule = ${t}Blocks[subrulename];\n subList = true;\n }\n _input = subrule.xmlText([],true);\n if(noinput && !subList && !isShadow) {\n //无输入的默认行为是: 如果语句块的备选方块只有一个,直接代入方块\n input = subrule.xmlText();\n }\n }\n xmlText.push('<'+inputType+' name="'+rule.args[ii]+'">');\n xmlText.push(_input+input);\n xmlText.push('');\n }\n if(comment){\n xmlText.push('/g,'] ] >'));\n xmlText.push(']]>');\n }\n var next = inputs[rule.args.length];\n if (next) {//next\n xmlText.push('');\n xmlText.push(next);\n xmlText.push('');\n }\n xmlText.push('');\n return xmlText.join('');\n}`},e.Functions_blocksIniter=function(t,e){return`//把各方块的信息注册到Blockly中\n${t}Functions.blocksIniter = function(){\n var blocksobj = ${t}Blocks;\n for(var key in blocksobj) {\n var value = blocksobj[key];\n if(value instanceof Array)continue;\n (function(key,value){\n Blockly.Blocks[key] = {\n init: function() {this.jsonInit(value.json);}\n }\n })(key,value);\n Blockly.${e}[key] = value.generFunc;\n }\n}`},e.mainFileTPL=function(t,e,n,r,i,o,s,a){return[`\n\n\n${t} --antlr-blockly`,'\n + diff --git a/editor.html b/editor.html index b9cf59a7..cdaa3916 100644 --- a/editor.html +++ b/editor.html @@ -599,6 +599,7 @@ + From cd27054679e26326e56b71bc6dfdafa8531557e8 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 22 May 2020 16:38:13 +0800 Subject: [PATCH 38/49] =?UTF-8?q?=E6=9B=B4=E6=8D=A2options=E7=9A=84?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaActionParse.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index b251288a..7ec82631 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -63,7 +63,7 @@ ActionParser.prototype.parse = function (obj,type) { var buildEquip = function (obj) { obj = obj || {}; var text_choices = null; - var knownEquipListKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) + var knownEquipListKeys = MotaActionBlocks['Equip_List'].options.map(function (one) {return one[1];}) Object.keys(obj).sort().forEach(function (key) { var one = knownEquipListKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; text_choices = MotaActionBlocks[one].xmlText([ @@ -79,7 +79,7 @@ ActionParser.prototype.parse = function (obj,type) { var buildKeys = function (obj) { obj = obj || {}; var text_choices = null; - var knownListKeys = MotaActionBlocks.doorKeyKnown.json.args0[0].options.map(function (one) {return one[1];}) + var knownListKeys = MotaActionBlocks['Key_List'].options.map(function (one) {return one[1];}) Object.keys(obj).sort().forEach(function (key) { var one = knownListKeys.indexOf(key) >= 0 ? 'doorKeyKnown' : 'doorKeyUnknown'; text_choices = MotaActionBlocks[one].xmlText([ @@ -985,7 +985,7 @@ ActionParser.prototype.matchId = function(args) { } var match = /nothing/.exec('nothing') // 固定列表 - var FixedId_List=MotaActionBlocks.idFixedList_e.json.args0[0].options; // [["生命", "status:hp"], ...] + var FixedId_List=MotaActionBlocks['FixedId_List'].options; // [["生命", "status:hp"], ...] match=new RegExp('^('+FixedId_List.map(function(v){return v[1]}).join('|')+')$').exec(args[0]) if(match){ return rt(MotaActionBlocks['idFixedList_e'].xmlText, args); @@ -1003,7 +1003,7 @@ ActionParser.prototype.matchId = function(args) { return rt(MotaActionBlocks['idTemp_e'].xmlText, args); } // id列表 - var Id_List = MotaActionBlocks.idIdList_e.json.args0[0].options; // [["变量", "flag"], ...] + var Id_List = MotaActionBlocks['Id_List'].options; // [["变量", "flag"], ...] match=new RegExp('^('+Id_List.map(function(v){return v[1]}).join('|')+'):([a-zA-Z0-9_\\u4E00-\\u9FCC]+)$').exec(args[0]) if(match){ args=[match[1],MotaActionFunctions.replaceToName_token(match[2])] @@ -1024,7 +1024,7 @@ ActionParser.prototype.matchEvalAtom = function(args) { return rt(MotaActionBlocks['bool_e'].xmlText, args); } // 怪物属性 - var EnemyId_List=MotaActionBlocks.enemyattr_e.json.args0[1].options; // [["生命", "hp"], ...] + var EnemyId_List=MotaActionBlocks['EnemyId_List'].options; // [["生命", "hp"], ...] match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) if(match){ args=[match[1],match[2]] From a22c80e5bd060fd75fea7c3fff6eff2b774c348f Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Fri, 22 May 2020 18:38:10 +0800 Subject: [PATCH 39/49] =?UTF-8?q?=E5=8F=B3=E9=94=AE=E6=8B=89=E6=A1=86?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E5=89=AA=E5=88=87=E7=B2=98=E8=B4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 2 +- _server/editor.js | 1 + _server/editor_mappanel.js | 78 ++++++++++++++++++++++++++++---------- _server/editor_ui.js | 18 +++++---- v2.x-final更新.txt | 4 +- 5 files changed, 72 insertions(+), 31 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 4e88d5d6..81291140 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -523,7 +523,7 @@ return '{' + [ IdString_1 && ('"down": "' + IdString_1 +'"'), IdString_2 && ('"left": "' + IdString_2 +'"'), IdString_3 && ('"right": "' + IdString_3 +'"'), -].join(', ') + '}\n'; +].filter(function (x) { return x; }).join(', ') + '}\n'; */; diff --git a/_server/editor.js b/_server/editor.js index 2a6fc1b7..ac96b53b 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -70,6 +70,7 @@ function editor() { startPos:null, endPos:null, lastMoveE:{buttons:0,clientX:0,clientY:0}, + selectedArea: null, // 材料区拖动有关 lastMoveMaterE:null, tileSize: [1,1], diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 2406177e..8cce7cc2 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -75,6 +75,7 @@ editor_mappanel_wrapper = function (editor) { * + 绘图时画个矩形在那个位置 */ editor.uifunctions.map_ondown = function (e) { + editor.uivalues.selectedArea = null; editor.uivalues.lastMoveE=e; var loc = editor.uifunctions.eToLoc(e); var pos = editor.uifunctions.locToPos(loc, true); @@ -211,16 +212,20 @@ editor_mappanel_wrapper = function (editor) { * + 绘图模式时, 根据画线/画矩形/画tileset 做对应的绘制 */ editor.uifunctions.map_onup = function (ee) { - console.log(1) + editor.uivalues.selectedArea = null; + ee.preventDefault(); + ee.stopPropagation(); var e=editor.uivalues.lastMoveE; if (!selectBox.isSelected()) { if (e.buttons == 2) { - if (editor.uivalues.endPos==null || editor.uivalues.startPos.x == editor.uivalues.endPos.x && editor.uivalues.startPos.y == editor.uivalues.endPos.y){ + if (editor.uivalues.endPos==null || (editor.uivalues.startPos.x == editor.uivalues.endPos.x && editor.uivalues.startPos.y == editor.uivalues.endPos.y)) { // 右键点击: 弹菜单 editor.uifunctions.showMidMenu(e.clientX, e.clientY); + editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); } else { // 右键拖拽: 选中区域 printf('已经选中该区域') + editor.uivalues.selectedArea = Object.assign({}, editor.uivalues.startPos, {x1: editor.uivalues.endPos.x, y1: editor.uivalues.endPos.y}); // 后续的处理 } } else { @@ -232,8 +237,8 @@ editor_mappanel_wrapper = function (editor) { else editor.exchangeBgFg(editor.uivalues.startPos, editor.uivalues.endPos, editor.layerMod); editor.uifunctions.unhighlightSaveFloorButton(); + editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); } - editor.dom.euiCtx.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); editor.uivalues.startPos = editor.uivalues.endPos = null; return false; } @@ -876,30 +881,51 @@ editor_mappanel_wrapper = function (editor) { editor.constructor.prototype.copyFromPos = function (pos) { var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); pos = pos || editor.pos; - var map = core.clone(editor.map[pos.y][pos.x]); - var events = {}; - fields.forEach(function(v){ - events[v] = core.clone(editor.currentFloorData[v][pos.x+','+pos.y]); - }) - return {map: map, events: events}; + var x0 = pos.x, y0 = pos.y, x1 = pos.x1, y1 = pos.y1; + if (x1 == null) x1 = x0; + if (y1 == null) y1 = y0; + if (x0 > x1) { x0 ^= x1; x1 ^= x0; x0 ^= x1; }//swap + if (y0 > y1) { y0 ^= y1; y1 ^= y0; y0 ^= y1; }//swap + var result = {w: x1 - x0 + 1, h: y1 - y0 + 1, layer: editor.layerMod, data: []}; + for (var i = x0; i <= x1; ++i) { + for (var j = y0; j<= y1; ++j) { + var map = core.clone(editor[editor.layerMod][j][i]); + var events = {}; + fields.forEach(function(v){ + events[v] = core.clone(editor.currentFloorData[v][i+','+j]); + }) + result.data.push({map: map, events: events}); + } + } + return result; } editor.constructor.prototype.pasteToPos = function (info, pos) { if (info == null) return; var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); pos = pos || editor.pos; - editor.map[pos.y][pos.x] = core.clone(info.map); - fields.forEach(function(v){ - if (info.events[v] == null) delete editor.currentFloorData[v][pos.x+","+pos.y]; - else editor.currentFloorData[v][pos.x+","+pos.y] = core.clone(info.events[v]); - }); + var w = info.w || 1, h = info.h || 1, layer = info.layer || 'map'; + var data = core.clone(info.data || []); + for (var i = pos.x; i < pos.x+w; ++i) { + for (var j = pos.y; j < pos.y+h; ++j) { + var one = data.shift(); + if (j >= editor[editor.layerMod].length || i >= editor[editor.layerMod][0].length) continue; + editor[editor.layerMod][j][i] = core.clone(one.map); + if (layer == 'map' && editor.layerMod == 'map') { + fields.forEach(function(v){ + if (one.events[v] == null) delete editor.currentFloorData[v][i+","+j]; + else editor.currentFloorData[v][i+","+j] = core.clone(one.events[v]); + }); + } + } + } } editor.constructor.prototype.movePos = function (startPos, endPos, callback) { if (!startPos || !endPos) return; if (startPos.x == endPos.x && startPos.y == endPos.y) return; var copyed = editor.copyFromPos(startPos); - editor.pasteToPos({map:0, events: {}}, startPos); + editor.pasteToPos({w: 1, h: 1, layer: 'map', data: [{map:0, events: {}}]}, startPos); editor.pasteToPos(copyed, endPos); editor.updateMap(); editor.file.saveFloorFile(function (err) { @@ -986,16 +1012,28 @@ editor_mappanel_wrapper = function (editor) { editor.constructor.prototype.clearPos = function (clearPos, pos, callback) { var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); pos = pos || editor.pos; + var x0 = pos.x, y0 = pos.y, x1 = pos.x1, y1 = pos.y1; + if (x1 == null) x1 = x0; + if (y1 == null) y1 = y0; + if (x0 > x1) { x0 ^= x1; x1 ^= x0; x0 ^= x1; }//swap + if (y0 > y1) { y0 ^= y1; y1 ^= y0; y0 ^= y1; }//swap editor.uifunctions.hideMidMenu(); editor.savePreMap(); editor.info = 0; editor_mode.onmode(''); - if (clearPos) - editor.map[pos.y][pos.x]=editor.info; + for (var i = x0; i <= x1; ++i) { + for (var j = y0; j <= y1; ++j) { + if (j >= editor[editor.layerMod].length || i >= editor[editor.layerMod][0].length) continue; + if (clearPos) + editor[editor.layerMod][j][i] = 0; + if (editor.layerMod == 'map') { + fields.forEach(function(v){ + delete editor.currentFloorData[v][i+","+j]; + }); + } + } + } editor.updateMap(); - fields.forEach(function(v){ - delete editor.currentFloorData[v][pos.x+','+pos.y]; - }) editor.file.saveFloorFile(function (err) { if (err) { printe(err); diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 3d528f20..fff57c1b 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -343,15 +343,15 @@ editor_ui_wrapper = function (editor) { // Ctrl+C, Ctrl+X, Ctrl+V if (e.ctrlKey && e.keyCode == 67 && !selectBox.isSelected()) { e.preventDefault(); - editor.uivalues.copyedInfo = editor.copyFromPos(); - printf('该点事件已复制'); + editor.uivalues.copyedInfo = editor.copyFromPos(editor.uivalues.selectedArea); + printf('该点事件已复制;请注意右键地图拉框可以复制一个区域;若有时复制失灵请多点几下空白处'); return; } if (e.ctrlKey && e.keyCode == 88 && !selectBox.isSelected()) { e.preventDefault(); - editor.uivalues.copyedInfo = editor.copyFromPos(); - editor.clearPos(true, null, function () { - printf('该点事件已剪切'); + editor.uivalues.copyedInfo = editor.copyFromPos(editor.uivalues.selectedArea); + editor.clearPos(true, editor.uivalues.selectedArea, function () { + printf('该点事件已剪切;请注意右键地图拉框可以剪切一个区域;若有时剪切失灵请多点几下空白处'); editor.uifunctions.unhighlightSaveFloorButton(); }) return; @@ -369,7 +369,7 @@ editor_ui_wrapper = function (editor) { printe(err); throw (err) } - ; printf('粘贴事件成功'); + ; printf('粘贴事件成功;若有时粘贴失灵请多点几下空白处'); editor.uifunctions.unhighlightSaveFloorButton(); editor.drawPosSelection(); }); @@ -377,8 +377,10 @@ editor_ui_wrapper = function (editor) { } // DELETE if (e.keyCode == 46 && !selectBox.isSelected()) { - editor.clearPos(true); - editor.uifunctions.unhighlightSaveFloorButton(); + editor.clearPos(true, editor.uivalues.selectedArea, function () { + printf('该点事件已删除;请注意右键地图拉框可以删除一个区域;;若有时删除失灵请多点几下空白处'); + editor.uifunctions.unhighlightSaveFloorButton(); + }) return; } // ESC diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 13079805..aadfea45 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -65,8 +65,8 @@ (已完成!) showImage, drawImage,立绘等加上对称选项 (已完成!) 更多的图块blockly化 (已完成!) 勇士帧动画 -行走动画? - +(不处理;现在静止状态可以有帧动画了,所以不考虑行走过程动画) 行走动画 +\t[this], 勇士朝下,flag:arg清理,瞬移扣血 ------------- From c41887bb1908ff2246102f4f1c39da757e5df419 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Fri, 22 May 2020 18:44:27 +0800 Subject: [PATCH 40/49] MotaActionParse -> MotaActionParser --- _server/MotaAction.g4 | 2 +- _server/{MotaActionParse.js => MotaActionParser.js} | 2 +- editor-mobile.html | 2 +- editor.html | 2 +- v2.x-final更新.txt | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) rename _server/{MotaActionParse.js => MotaActionParser.js} (99%) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index b257861a..5d4ef2a5 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -3184,6 +3184,6 @@ this.block('idTemp_e').output='idString_e'; /* Functions -MotaActionParse() +MotaActionParser() */ \ No newline at end of file diff --git a/_server/MotaActionParse.js b/_server/MotaActionParser.js similarity index 99% rename from _server/MotaActionParse.js rename to _server/MotaActionParser.js index b251288a..9889e46e 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParser.js @@ -1,4 +1,4 @@ -MotaActionParse=function(){ +MotaActionParser=function(){ function ActionParser(){ } diff --git a/editor-mobile.html b/editor-mobile.html index a7ce7570..de06dc87 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -614,7 +614,7 @@ - + diff --git a/editor.html b/editor.html index cdaa3916..a03d70db 100644 --- a/editor.html +++ b/editor.html @@ -598,7 +598,7 @@ - + diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index aadfea45..1c49d733 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -66,6 +66,7 @@ (已完成!) 更多的图块blockly化 (已完成!) 勇士帧动画 (不处理;现在静止状态可以有帧动画了,所以不考虑行走过程动画) 行走动画 +合并main中一些设置内容 \t[this], 勇士朝下,flag:arg清理,瞬移扣血 ------------- From 363d451f50605e9085a03b118976df7d8a69b6a4 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Fri, 22 May 2020 19:45:43 +0800 Subject: [PATCH 41/49] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=B8=8E=E6=80=AA?= =?UTF-8?q?=E7=89=A9=E5=90=8D=E7=9A=84=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 2 +- _server/MotaActionParser.js | 146 ++++++++++++++++++++---------------- _server/editor_blockly.js | 20 ++++- _server/table/comment.js | 2 +- 4 files changed, 103 insertions(+), 67 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 5d4ef2a5..6bb5db27 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -3108,7 +3108,7 @@ Id_List EnemyId_List : '生命'|'攻击'|'防御'|'金币'|'经验'|'加点'|'属性'|'名称'|'映射名'|'value'|'atkValue'|'defValue'|'notBomb'|'zoneSquare'|'range'|'n'|'add'|'damage' - /*EnemyId_List ['hp','atk','def','money','exp','point','special','name','displayInBook','value','atkValue','defValue','notBomb','zoneSquare','range','n','add','damage']*/; + /*EnemyId_List ['hp','atk','def','money','exp','point','special','name','displayInBook','属性值','退化扣攻','退化扣防','不可炸','九宫格领域','领域范围','连击数','吸血到自身','固伤值']*/; Equip_List : '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'魔力'|'魔力上限' diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js index dbe5580d..86b03897 100644 --- a/_server/MotaActionParser.js +++ b/_server/MotaActionParser.js @@ -67,7 +67,7 @@ ActionParser.prototype.parse = function (obj,type) { Object.keys(obj).sort().forEach(function (key) { var one = knownEquipListKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; text_choices = MotaActionBlocks[one].xmlText([ - key, obj.key, text_choices + key, obj[key], text_choices ]); }) return text_choices; @@ -83,7 +83,7 @@ ActionParser.prototype.parse = function (obj,type) { Object.keys(obj).sort().forEach(function (key) { var one = knownListKeys.indexOf(key) >= 0 ? 'doorKeyKnown' : 'doorKeyUnknown'; text_choices = MotaActionBlocks[one].xmlText([ - key, obj.key, text_choices + one == 'doorKeyUnknown' ? MotaActionFunctions.replaceToName_token(key) : key, obj[key], text_choices ]); }) return text_choices; @@ -474,11 +474,11 @@ ActionParser.prototype.parseAction = function() { break; case "useItem": // 使用道具 this.next = MotaActionBlocks['useItem_s'].xmlText([ - data.id,this.next]); + MotaActionFunctions.replaceToName_token(data.id),this.next]); break; case "loadEquip": // 装上装备 this.next = MotaActionBlocks['loadEquip_s'].xmlText([ - data.id,this.next]); + MotaActionFunctions.replaceToName_token(data.id),this.next]); break; case "unloadEquip": // 卸下装备 this.next = MotaActionBlocks['unloadEquip_s'].xmlText([ @@ -495,7 +495,7 @@ ActionParser.prototype.parseAction = function() { case "battle": // 强制战斗 if (data.id) { this.next = MotaActionBlocks['battle_s'].xmlText([ - data.id,this.next]); + MotaActionFunctions.replaceToName_token(data.id),this.next]); } else { data.loc = data.loc || []; @@ -564,7 +564,7 @@ ActionParser.prototype.parseAction = function() { break; case "setEnemy": this.next = MotaActionBlocks['setEnemy_s'].xmlText([ - data.id, data.name, this.expandEvalBlock([data.value]), this.next]); + MotaActionFunctions.replaceToName_token(data.id), data.name, this.expandEvalBlock([data.value]), this.next]); break; case "setFloor": this.next = MotaActionBlocks['setFloor_s'].xmlText([ @@ -1027,7 +1027,7 @@ ActionParser.prototype.matchEvalAtom = function(args) { var EnemyId_List=MotaActionBlocks['EnemyId_List'].options; // [["生命", "hp"], ...] match=new RegExp("^enemy:([a-zA-Z0-9_]+):(" + EnemyId_List.map(function(v){return v[1]}).join('|') + ")$").exec(args[0]) if(match){ - args=[match[1],match[2]] + args=[MotaActionFunctions.replaceToName_token(match[1]),match[2]] return rt(MotaActionBlocks['enemyattr_e'].xmlText, args); } // 图块ID @@ -1156,6 +1156,7 @@ MotaActionFunctions.IntString_pre = function (IntString) { MotaActionFunctions.IdString_pre = function(IdString){ if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。'); IdString = MotaActionFunctions.replaceFromName(IdString); + IdString = MotaActionFunctions.replaceFromName_token(IdString); if (IdString && !(MotaActionFunctions.pattern.id.test(IdString)) && !(MotaActionFunctions.pattern.idWithoutFlag.test(IdString))) throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符'); return IdString; @@ -1241,59 +1242,46 @@ MotaActionFunctions.pattern.replaceStatusList = [ ["steps", "步数"], ]; -MotaActionFunctions.pattern.replaceItemList = [ - // 保证顺序! - ["yellowKey", "黄钥匙"], - ["blueKey", "蓝钥匙"], - ["redKey", "红钥匙"], - ["redGem", "红宝石"], - ["blueGem", "蓝宝石"], - ["greenGem", "绿宝石"], - ["yellowGem", "黄宝石"], - ["redPotion", "红血瓶"], - ["bluePotion", "蓝血瓶"], - ["yellowPotion", "黄血瓶"], - ["greenPotion", "绿血瓶"], - ["sword1", "铁剑"], - ["sword2", "银剑"], - ["sword3", "骑士剑"], - ["sword4", "圣剑"], - ["sword5", "神圣剑"], - ["shield1", "铁盾"], - ["shield2", "银盾"], - ["shield3", "骑士盾"], - ["shield4", "圣盾"], - ["shield5", "神圣盾"], - ["superPotion", "圣水"], - ["silverCoin", "银币"], - ["book", "怪物手册"], - ["fly", "楼层传送器"], - ["coin", "幸运金币"], - ["freezeBadge", "冰冻徽章"], - ["cross", "十字架"], - ["dagger", "屠龙匕首"], - ["amulet", "护符"], - ["bigKey", "大黄门钥匙"], - ["greenKey", "绿钥匙"], - ["steelKey", "铁门钥匙"], - ["pickaxe", "破墙镐"], - ["icePickaxe", "破冰镐"], - ["bomb", "炸弹"], - ["centerFly", "中心对称飞行器"], - ["upFly", "上楼器"], - ["downFly", "下楼器"], - ["earthquake", "地震卷轴"], - ["poisonWine", "解毒药水"], - ["weakWine", "解衰药水"], - ["curseWine", "解咒药水"], - ["superWine", "万能药水"], - ["hammer", "圣锤"], - ["lifeWand", "生命魔杖"], - ["jumpShoes", "跳跃靴"], -]; -MotaActionFunctions.pattern.replaceEnemyList = [ +(function() { + // 读道具列表 + MotaActionFunctions.pattern.replaceItemList = []; + for (var id in core.material.items) { + var name = core.material.items[id].name; + if (id && name && name != '新物品') { + var hasPrefix = false; + MotaActionFunctions.pattern.replaceItemList.forEach(function (one) { + if (one[0].startsWith(id) || id.startsWith(one[0]) || one[1].startsWith(name) || name.startsWith(one[1])) { + hasPrefix = true; + } + }); + if (!hasPrefix) { + MotaActionFunctions.pattern.replaceItemList.push([id, name]); + } + } + } + + MotaActionFunctions.pattern.replaceEnemyList = []; + for (var id in core.material.enemys) { + var name = core.material.enemys[id].name; + if (id && name && name != '新敌人') { + var hasPrefix = false; + MotaActionFunctions.pattern.replaceEnemyList.forEach(function (one) { + if (one[0].startsWith(id) || id.startsWith(one[0]) || one[1].startsWith(name) || name.startsWith(one[1])) { + hasPrefix = true; + } + }); + if (!hasPrefix) { + MotaActionFunctions.pattern.replaceEnemyList.push([id, name]); + } + } + } + +})(); + +MotaActionFunctions.pattern.replaceEnemyValueList = [ // 保证顺序! + ["hp", "生命"], ["name", "名称"], ["atk", "攻击"], ["def", "防御"], @@ -1312,6 +1300,7 @@ MotaActionFunctions.replaceToName_token = function (str) { list=list.concat(MotaActionFunctions.pattern.replaceStatusList) list=list.concat(MotaActionFunctions.pattern.replaceItemList) list=list.concat(MotaActionFunctions.pattern.replaceEnemyList) + list=list.concat(MotaActionFunctions.pattern.replaceEnemyValueList) for(var index=0,pair;pair=list[index];index++){ if (pair[0]==str) { return pair[1] @@ -1320,6 +1309,21 @@ MotaActionFunctions.replaceToName_token = function (str) { return str; } +MotaActionFunctions.replaceFromName_token = function (str) { + if (!str || MotaActionFunctions.disableReplace) return str; + var list = []; + list=list.concat(MotaActionFunctions.pattern.replaceStatusList) + list=list.concat(MotaActionFunctions.pattern.replaceItemList) + list=list.concat(MotaActionFunctions.pattern.replaceEnemyList) + list=list.concat(MotaActionFunctions.pattern.replaceEnemyValueList) + for(var index=0,pair;pair=list[index];index++){ + if (pair[1]==str) { + return pair[0] + } + } + return str; +} + MotaActionFunctions.replaceToName = function (str) { if (!str || MotaActionFunctions.disableReplace) return str; var map = {}, list = []; @@ -1338,12 +1342,20 @@ MotaActionFunctions.replaceToName = function (str) { }).replace(/item:/g, "物品:"); str = str.replace(/flag:/g, "变量:").replace(/switch:/g, "独立开关:").replace(/global:/g, "全局存储:").replace(/temp:/g, "临时变量:"); + + MotaActionFunctions.pattern.replaceEnemyValueList.forEach(function (v) { + map[v[0]] = v[1]; list.push(v[0]); + }); + str = str.replace(new RegExp("enemy:([a-zA-Z0-9_]+)[.:](" + list.join("|") + ")", "g"), function (a, b, c) { + return map[c] ? ("enemy:" + b + ":" + map[c]) : c; + }).replace(/(enemy:[a-zA-Z0-9_]+)[.::]/g, '$1:'); + map = {}; list = []; MotaActionFunctions.pattern.replaceEnemyList.forEach(function (v) { map[v[0]] = v[1]; list.push(v[0]); }); - str = str.replace(new RegExp("enemy:([a-zA-Z0-9_]+).(" + list.join("|") + ")", "g"), function (a, b, c) { - return map[c] ? ("怪物:" + b + ":" + map[c]) : c; + str = str.replace(new RegExp("enemy:(" + list.join("|") + ")", "g"), function (a, b) { + return map[b] ? ("怪物:" + map[b]) : b; }).replace(/enemy:/g, "怪物:"); str = str.replace(/blockId:/g, "图块ID:").replace(/blockCls:/g, "图块类别:").replace(/equip:/g, "装备孔:"); @@ -1366,16 +1378,24 @@ MotaActionFunctions.replaceFromName = function (str) { str = str.replace(new RegExp("物品[::](" + list.join("|") + ")", "g"), function (a, b) { return map[b] ? ("item:" + map[b]) : b; }).replace(/物品[::]/g, "item:"); - str = str.replace(/临时变量[::]/g, "temp:").replace(/变量[::]/g, "flag:").replace(/独立开关[::]/g, "switch:").replace(/全局存储[::]/g, "global:"); + str = str.replace(/临时变量[::]/g, "temp d:").replace(/变量[::]/g, "flag:").replace(/独立开关[::]/g, "switch:").replace(/全局存储[::]/g, "global:"); map = {}; list = []; MotaActionFunctions.pattern.replaceEnemyList.forEach(function (v) { map[v[1]] = v[0]; list.push(v[1]); }); - str = str.replace(new RegExp("(enemy:|怪物[::])([a-zA-Z0-9_]+)[::](" + list.join("|") + ")", "g"), function (a, b, c, d) { - return map[d] ? ("enemy:" + c + ":" + map[d]) : d; + str = str.replace(new RegExp("(enemy:|怪物[::])(" + list.join("|") + ")", "g"), function (a, b, c, d) { + return map[c] ? ("enemy:" + map[c]) : c; }).replace(/怪物[::]/g, "enemy:"); + map = {}; list = []; + MotaActionFunctions.pattern.replaceEnemyValueList.forEach(function (v) { + map[v[1]] = v[0]; list.push(v[1]); + }); + str = str.replace(new RegExp("enemy:([a-zA-Z0-9_]+)[::](" + list.join("|") + ")", "g"), function (a, b, c, d) { + return map[c] ? ("enemy:" + b + ":" + map[c]) : c; + }).replace(/(enemy:[a-zA-Z0-9_]+)[::]/g, '$1:'); + str = str.replace(/图块I[dD][::]/g, "blockId:").replace(/图块类别[::]/g, "blockCls:").replace(/装备孔[::]/g, "equip:"); return str; diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 47ca3675..6ed9762f 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -472,7 +472,13 @@ editor_blockly = function () { return one != token && one.startsWith(token); }).sort(); } else if (before.endsWith("怪物") || (ch == ':' && before.endsWith("enemy"))) { - return Object.keys(core.material.enemys).filter(function (one) { + var list = Object.keys(core.material.enemys); + if (before.endsWith("怪物") && MotaActionFunctions) { + list = MotaActionFunctions.pattern.replaceEnemyList.map(function (v) { + return v[1]; + }).concat(list); + } + return list.filter(function (one) { return one != token && one.startsWith(token); }) } else { @@ -483,7 +489,7 @@ editor_blockly = function () { if (before.endsWith("怪物") || (ch == ':' && ch2 == ':' && before.endsWith("enemy"))) { var list = ["name", "hp", "atk", "def", "money", "exp", "point", "special"]; if (before.endsWith("怪物") && MotaActionFunctions) { - list = MotaActionFunctions.pattern.replaceEnemyList.map(function (v) { + list = MotaActionFunctions.pattern.replaceEnemyValueList.map(function (v) { return v[1]; }).concat(list); } @@ -536,7 +542,17 @@ editor_blockly = function () { })); var allImages = Object.keys(core.material.images.images); var allEnemys = Object.keys(core.material.enemys); + if (MotaActionFunctions && !MotaActionFunctions.disableReplace) { + allEnemys = allEnemys.concat(MotaActionFunctions.pattern.replaceEnemyList.map(function (x) { + return x[1]; + })) + } var allItems = Object.keys(core.material.items); + if (MotaActionFunctions && !MotaActionFunctions.disableReplace) { + allItems = allItems.concat(MotaActionFunctions.pattern.replaceItemList.map(function (x) { + return x[1]; + })) + } var allAnimates = Object.keys(core.material.animates); var allBgms = Object.keys(core.material.bgms); var allSounds = Object.keys(core.material.sounds); diff --git a/_server/table/comment.js b/_server/table/comment.js index 58c89856..60af0a61 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -108,7 +108,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { } } }, - "items_template": { 'cls': 'items', 'name': '新物品', 'canPass': true }, + "items_template": { 'cls': 'items', 'name': '新物品' }, // --------------------------- 【怪物】相关的表格配置 --------------------------- // From daa014b7b35816c94b17690a78797d6d377fb15f Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 22 May 2020 19:49:05 +0800 Subject: [PATCH 42/49] =?UTF-8?q?update=20converter.bundle&=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E5=8F=8C=E5=87=BBblockly=E7=9A=84=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 65 +++++++++++++++++++++++++ _server/blockly/Converter.bundle.min.js | 2 +- _server/editor_blockly.js | 59 +++------------------- 3 files changed, 73 insertions(+), 53 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index b8f36b55..46aa1678 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1,6 +1,16 @@ // 编辑此文件用的vscode插件: https://marketplace.visualstudio.com/items?itemName=zhaouv.vscode-mota-js-extension // 此文件通过antlr-blockly生成编辑器中的图块, 相关帮助说明: https://zhaouv.github.io/antlr-blockly/docs/#/README + +/* +特殊注入demo +doubleclicktext : EvalString_1 +previewBlock : true +// [x, y, floorId, forceFloor] +selectPoint : ["PosString_0", "PosString_1", "IdString_0", true] +*/ + + grammar MotaAction; //===============parser=============== @@ -110,6 +120,7 @@ shopsub /* shopsub tooltip : 全局商店 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=%e5%85%a8%e5%b1%80%e5%95%86%e5%ba%97 +doubleclicktext : EvalString_1 default : ["shop1","贪婪之神","moneyShop","勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:","金币商店",false,false] var title=''; if (EvalString_0==''){ @@ -279,6 +290,7 @@ changeFloor_m tooltip : 楼梯, 传送门, 如果目标楼层有多个楼梯, 写upFloor或downFloor可能会导致到达的楼梯不确定, 这时候请使用loc方式来指定具体的点位置 helpUrl : https://h5mota.com/games/template/_docs/#/element?id=%e8%b7%af%e9%9a%9c%ef%bc%8c%e6%a5%bc%e6%a2%af%ef%bc%8c%e4%bc%a0%e9%80%81%e9%97%a8 default : [null,"MTx",null,"","",null,"",null] +selectPoint : ["PosString_0", "PosString_1", "IdString_0", true] var toFloorId = IdString_0; if (Floor_List_0!='floorId') toFloorId = Floor_List_0; var loc = ''; @@ -661,6 +673,7 @@ text_0_s /* text_0_s tooltip : text:显示一段文字(剧情) helpUrl : https://h5mota.com/games/template/_docs/#/event?id=text%EF%BC%9A%E6%98%BE%E7%A4%BA%E4%B8%80%E6%AE%B5%E6%96%87%E5%AD%97%EF%BC%88%E5%89%A7%E6%83%85%EF%BC%89 +doubleclicktext : EvalString_0 default : ["欢迎使用事件编辑器(双击方块进入多行编辑)"] var code = '"'+EvalString_0+'",\n'; return code; @@ -673,6 +686,7 @@ text_1_s /* text_1_s tooltip : text:显示一段文字(剧情),选项较多请右键点击帮助 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=text%EF%BC%9A%E6%98%BE%E7%A4%BA%E4%B8%80%E6%AE%B5%E6%96%87%E5%AD%97%EF%BC%88%E5%89%A7%E6%83%85%EF%BC%89 +doubleclicktext : EvalString_3 default : ["小妖精","fairy","","欢迎使用事件编辑器(双击方块进入多行编辑)"] var title=''; if (EvalString_0==''){ @@ -697,6 +711,7 @@ comment_s /* comment_s tooltip : comment:添加一段会被游戏跳过的注释内容 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=comment%ef%bc%9a%e6%b7%bb%e5%8a%a0%e6%b3%a8%e9%87%8a +doubleclicktext : EvalString_0 default : ["可以在这里写添加任何注释内容"] colour : this.commentColor var code = '{"type": "comment", "text": "'+EvalString_0+'"},\n'; @@ -710,6 +725,7 @@ autoText_s /* autoText_s tooltip : autoText:自动剧情文本,用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=autotext%EF%BC%9A%E8%87%AA%E5%8A%A8%E5%89%A7%E6%83%85%E6%96%87%E6%9C%AC +doubleclicktext : EvalString_2 default : ["小妖精","fairy","",3000,"用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示"] var title=''; if (EvalString_0==''){ @@ -734,6 +750,7 @@ scrollText_s /* scrollText_s tooltip : scrollText:滚动剧情文本,将从下到上进行滚动显示。 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=scrollText%ef%bc%9a%e6%bb%9a%e5%8a%a8%e5%89%a7%e6%83%85%e6%96%87%e6%9c%ac +doubleclicktext : EvalString_0 default : [5000,1.4,false,"时间是总时间,可以使用setText事件来控制字体、颜色、大小、偏移量等"] Bool_0 = Bool_0?', "async": true':''; var code = '{"type": "scrollText", "text": "'+EvalString_0+'"'+Bool_0+', "time" :'+Int_0+', "lineHeight": '+Number_0+'},\n'; @@ -884,6 +901,7 @@ show_s tooltip : show: 将禁用事件启用,楼层和动画时间可不填,xy可用逗号分隔表示多个点 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=show%EF%BC%9A%E5%B0%86%E4%B8%80%E4%B8%AA%E7%A6%81%E7%94%A8%E4%BA%8B%E4%BB%B6%E5%90%AF%E7%94%A8 default : ["","","","",false] +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] colour : this.mapColor var floorstr = ''; if (EvalString_0 && EvalString_1) { @@ -917,6 +935,7 @@ hide_s tooltip : hide: 隐藏事件,同时可删除 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=hide%EF%BC%9A%E5%B0%86%E4%B8%80%E4%B8%AA%E5%90%AF%E7%94%A8%E4%BA%8B%E4%BB%B6%E7%A6%81%E7%94%A8 default : ["","","",true,"",false] +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] colour : this.mapColor var floorstr = ''; if (EvalString_0 && EvalString_1) { @@ -951,6 +970,7 @@ trigger_s tooltip : trigger: 立即触发另一个地点的事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=trigger%EF%BC%9A%E7%AB%8B%E5%8D%B3%E8%A7%A6%E5%8F%91%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%9C%B0%E7%82%B9%E7%9A%84%E4%BA%8B%E4%BB%B6 default : ["",""] +selectPoint : ["PosString_0", "PosString_1"] colour : this.eventColor var floorstr = ''; if (PosString_0 && PosString_1) { @@ -987,6 +1007,7 @@ tooltip : insert: 立即插入另一个地点的事件执行,当前事件不 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=insert%ef%bc%9a%e6%8f%92%e5%85%a5%e5%85%ac%e5%85%b1%e4%ba%8b%e4%bb%b6%e6%88%96%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e7%82%b9%e7%9a%84%e4%ba%8b%e4%bb%b6%e5%b9%b6%e6%89%a7%e8%a1%8c default : ["0","0",null,"",""] colour : this.eventColor +selectPoint : ["PosString_0", "PosString_1", "IdString_0"] IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); if (JsonEvalString_0) { if (!(JSON.parse(JsonEvalString_0) instanceof Array)) @@ -1025,6 +1046,7 @@ tooltip : setBlock:设置某个图块,忽略坐标楼层则为当前事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setblock%EF%BC%9A%E8%AE%BE%E7%BD%AE%E6%9F%90%E4%B8%AA%E5%9B%BE%E5%9D%97 colour : this.mapColor default : ["yellowDoor","","","","",false] +selectPoint : ["EvalString_1", "EvalString_2", "IdString_0"] var floorstr = ''; if (EvalString_1 && EvalString_2) { var pattern1 = MotaActionFunctions.pattern.id; @@ -1058,6 +1080,7 @@ tooltip : turnBlock:事件转向;自动检索faceIds helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setblock%EF%BC%9A%E8%AE%BE%E7%BD%AE%E6%9F%90%E4%B8%AA%E5%9B%BE%E5%9D%97 colour : this.mapColor default : [null,"","",""] +selectPoint : ["EvalString_1", "EvalString_2", "IdString_0"] var floorstr = ''; if (EvalString_0 && EvalString_1) { var pattern1 = MotaActionFunctions.pattern.id; @@ -1090,6 +1113,7 @@ showFloorImg_s tooltip : showFloorImg: 显示一个贴图,xy为左上角坐标,可用逗号分隔表示多个点 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showFloorImg%ef%bc%9a%e6%98%be%e7%a4%ba%e8%b4%b4%e5%9b%be default : ["","",""] +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] colour : this.mapColor var floorstr = ''; if (EvalString_0 && EvalString_1) { @@ -1122,6 +1146,7 @@ tooltip : hideFloorImg: 隐藏一个贴图,xy为左上角坐标,可用逗号 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=hideFloorImg%ef%bc%9a%e9%9a%90%e8%97%8f%e8%b4%b4%e5%9b%be default : ["","",""] colour : this.mapColor +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] var floorstr = ''; if (EvalString_0 && EvalString_1) { var pattern1 = MotaActionFunctions.pattern.id; @@ -1152,6 +1177,7 @@ showBgFgMap_s tooltip : showBgFgMap: 显示图层块,即背景图层/前景图层的某些图块,xy为左上角坐标,可用逗号分隔表示多个点 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showFloorImg%ef%bc%9a%e6%98%be%e7%a4%ba%e8%b4%b4%e5%9b%be default : ["bg","","",""] +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] colour : this.mapColor var floorstr = ''; if (EvalString_0 && EvalString_1) { @@ -1184,6 +1210,7 @@ tooltip : hideBgFgMap: 隐藏图层块,即背景图层/前景图层的某些 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=hideFloorImg%ef%bc%9a%e9%9a%90%e8%97%8f%e8%b4%b4%e5%9b%be default : ["bg","","",""] colour : this.mapColor +selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] var floorstr = ''; if (EvalString_0 && EvalString_1) { var pattern1 = MotaActionFunctions.pattern.id; @@ -1214,6 +1241,7 @@ setBgFgBlock_s tooltip : setBgFgBlock:设置某个图层块,忽略坐标楼层则为当前点 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setblock%EF%BC%9A%E8%AE%BE%E7%BD%AE%E6%9F%90%E4%B8%AA%E5%9B%BE%E5%9D%97 colour : this.mapColor +selectPoint : ["EvalString_1", "EvalString_2", "IdString_0"] default : ["bg","yellowDoor","","",""] var floorstr = ''; if (EvalString_1 && EvalString_2) { @@ -1375,6 +1403,7 @@ openDoor_s tooltip : openDoor: 开门,楼层可不填表示当前层 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=opendoor%EF%BC%9A%E5%BC%80%E9%97%A8 default : ["","","",false,false] +selectPoint : ["PosString_0", "PosString_1", "IdString_0"] colour : this.mapColor IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); var floorstr = ''; @@ -1395,6 +1424,7 @@ closeDoor_s tooltip : closeDoor: 关门事件,需要该点本身无事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=opendoor%EF%BC%9A%E5%BC%80%E9%97%A8 default : ["","","yellowDoor",false] +selectPoint : ["PosString_0", "PosString_1"] colour : this.mapColor var floorstr = ''; if (PosString_0 && PosString_1) { @@ -1413,6 +1443,7 @@ changeFloor_s tooltip : changeFloor: 楼层切换,动画时间可不填 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=changefloor%EF%BC%9A%E6%A5%BC%E5%B1%82%E5%88%87%E6%8D%A2 default : [null,"",null,"","",null,"",null] +selectPoint : ["PosString_0", "PosString_1", "IdString_0", true] colour : this.dataColor var toFloorId = IdString_0; if (Floor_List_0!='floorId') toFloorId = Floor_List_0; @@ -1438,6 +1469,7 @@ changePos_s tooltip : changePos: 当前位置切换 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=changepos%EF%BC%9A%E5%BD%93%E5%89%8D%E4%BD%8D%E7%BD%AE%E5%88%87%E6%8D%A2%E5%8B%87%E5%A3%AB%E8%BD%AC%E5%90%91 default : ["","",null] +selectPoint : ["PosString_0", "PosString_1"] colour : this.dataColor var loc = (PosString_0 && PosString_1) ? (', "loc": ['+PosString_0+','+PosString_1+']') : ''; if (DirectionEx_List_0 == 'null') DirectionEx_List_0 = ''; @@ -1562,6 +1594,7 @@ animate_s tooltip : animate:显示动画,位置填hero或者1,2形式的位置,或者不填代表当前事件点 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=animate%EF%BC%9A%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB default : ["zone","hero",false,false] +selectPoint : ["EvalString_0", "EvalString_0"] colour : this.soundColor if (EvalString_0) { if(MotaActionFunctions.pattern.id2.test(EvalString_0)) { @@ -1588,6 +1621,7 @@ setViewport_s tooltip : setViewport: 设置视角 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=changepos%EF%BC%9A%E5%BD%93%E5%89%8D%E4%BD%8D%E7%BD%AE%E5%88%87%E6%8D%A2%E5%8B%87%E5%A3%AB%E8%BD%AC%E5%90%91 default : ["",""] +selectPoint : ["PosString_0", "PosString_1"] colour : this.soundColor var loc = ''; if (PosString_0 && PosString_1) { @@ -1662,6 +1696,7 @@ showTextImage_s /* showTextImage_s tooltip : showTextImage:显示图片化文本 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showTextImage%ef%bc%9a%e6%98%be%e7%a4%ba%e6%96%87%e6%9c%ac%e5%8c%96%e5%9b%be%e7%89%87 +doubleclicktext : EvalString_0 colour : this.printColor default : ["可以使用setText事件来控制字体、颜色、大小、偏移量等",1,"0","0",1.4,1,0,false] if(Int_0<=0 || Int_0>50) throw new Error('图片编号在1~50之间'); @@ -1790,6 +1825,7 @@ move_s tooltip : move: 让某个NPC/怪物移动,位置可不填代表当前事件 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=move%EF%BC%9A%E8%AE%A9%E6%9F%90%E4%B8%AAnpc%E6%80%AA%E7%89%A9%E7%A7%BB%E5%8A%A8 default : ["","",500,false,false,"上右3下2后4左前2"] +selectPoint : ["PosString_0", "PosString_1"] colour : this.mapColor var floorstr = ''; if (PosString_0 && PosString_1) { @@ -1838,7 +1874,10 @@ jump_s tooltip : jump: 让某个NPC/怪物跳跃 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=jump%EF%BC%9A%E8%AE%A9%E6%9F%90%E4%B8%AANPC%2F%E6%80%AA%E7%89%A9%E8%B7%B3%E8%B7%83 default : ["","","","",500,true,false] +selectPoint : ["PosString_2", "PosString_3"] colour : this.mapColor + +// selectPoint 跳跃暂时只考虑终点 var floorstr = ''; if (PosString_0 && PosString_1) { floorstr += ', "from": ['+PosString_0+','+PosString_1+']'; @@ -1861,6 +1900,7 @@ jumpHero_s tooltip : jumpHero: 跳跃勇士 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=jumpHero%EF%BC%9A%E8%B7%B3%E8%B7%83%E5%8B%87%E5%A3%AB default : ["","",500,false] +selectPoint : ["PosString_0", "PosString_1"] colour : this.dataColor var floorstr = ''; if (PosString_0 && PosString_1) { @@ -2107,6 +2147,7 @@ choices_s /* choices_s tooltip : choices: 给用户提供选项 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=choices%EF%BC%9A%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%80%89%E9%A1%B9 +doubleclicktext : EvalString_0 default : ["","流浪者","trader",0] var title=''; if (EvalString_1==''){ @@ -2148,6 +2189,7 @@ confirm_s tooltip : 弹出确认框 helpUrl : https://h5mota.com/games/template/_docs/#/ default : ["确认要xxx吗?",0,false] +doubleclicktext : EvalString_0 Bool_0 = Bool_0?', "default": true':'' Int_0 = Int_0 ? (', "timeout": '+Int_0) : ''; var code = ['{"type": "confirm"'+Int_0+Bool_0+', "text": "',EvalString_0,'",\n', @@ -2279,6 +2321,7 @@ waitContext_2 tooltip : wait: 等待用户操作并获得按键或点击信息 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=wait%EF%BC%9A%E7%AD%89%E5%BE%85%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C default : [0,32,0,32] +previewBlock : true colour : this.subColor var code = '{"case": "mouse", "px": [' + PosString_0 + ',' + PosString_1 + '], "py": [' + PosString_2 + ',' + PosString_3 + '], "action": [\n' + action_0 + ']},\n'; return code; @@ -2365,6 +2408,7 @@ previewUI_s /* previewUI_s tooltip : previewUI: ui绘制并预览 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=previewUI%ef%bc%9aUI%e7%bb%98%e5%88%b6%e5%b9%b6%e9%a2%84%e8%a7%88 +previewBlock : true var code = ['{"type": "previewUI", "action": [\n', action_0,']},\n'].join(''); return code; */; @@ -2378,6 +2422,7 @@ tooltip : clearMap: 清除画布 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=clearMap%ef%bc%9a%e6%b8%85%e9%99%a4%e7%94%bb%e5%b8%83 colour : this.subColor default : ["0", "0", "100", "100"] +previewBlock : true var code = '{"type": "clearMap", "x": ' + PosString_0 + ', "y": ' + PosString_1 + ', "width": ' + PosString_2 + ', "height": ' + PosString_3 + '},\n'; return code; @@ -2390,6 +2435,7 @@ clearMap_1_s /* clearMap_1_s tooltip : clearMap: 清除画布 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=clearMap%ef%bc%9a%e6%b8%85%e9%99%a4%e7%94%bb%e5%b8%83 +previewBlock : true colour : this.subColor var code = '{"type": "clearMap"},\n'; return code; @@ -2402,6 +2448,7 @@ setAttribute_s /* setAttribute_s tooltip : setAttribute:设置画布属性 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setAttribute%ef%bc%9a%e8%ae%be%e7%bd%ae%e7%94%bb%e5%b8%83%e5%b1%9e%e6%80%a7 +previewBlock : true colour : this.subColor default : ["","",'rgba(255,255,255,1)',"",'rgba(255,255,255,1)',"","",null,null,""] TextAlign_List_0 = TextAlign_List_0==='null'?'': ', "align": "'+TextAlign_List_0+'"'; @@ -2428,6 +2475,7 @@ fillText_s tooltip : fillText:绘制一行文本;可以设置最大宽度进行放缩 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=fillText%ef%bc%9a%e7%bb%98%e5%88%b6%e6%96%87%e6%9c%ac colour : this.subColor +previewBlock : true default : ["0","0","",'rgba(255,255,255,1)',"","","绘制一行文本"] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; FontString_0 = FontString_0 ? (', "font": "' + FontString_0 + '"') : ''; @@ -2443,6 +2491,7 @@ fillBoldText_s tooltip : fillBoldText:绘制一行描边文本 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=fillBoldText%ef%bc%9a%e7%bb%98%e5%88%b6%e6%8f%8f%e8%be%b9%e6%96%87%e6%9c%ac colour : this.subColor +previewBlock : true default : ["0","0","",'rgba(255,255,255,1)',"",'rgba(0,0,0,1)',"","绘制一行描边文本"] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; ColorString_1 = ColorString_1 ? (', "strokeStyle": ['+ColorString_1+']') : ''; @@ -2457,6 +2506,7 @@ drawTextContent_s /* drawTextContent_s tooltip : drawTextContent:绘制多行文本 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawTextContent%ef%bc%9a%e7%bb%98%e5%88%b6%e5%a4%9a%e8%a1%8c%e6%96%87%e6%9c%ac +doubleclicktext : EvalString_0 colour : this.subColor default : ["绘制多行文本\\n可双击编辑","0","0","","",'rgba(255,255,255,1)',null,"","",false] TextAlign_List_0 = TextAlign_List_0==='null'?'': ', "align": "'+TextAlign_List_0+'"'; @@ -2476,6 +2526,7 @@ fillRect_s tooltip : fillRect:绘制矩形 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=fillRect%ef%bc%9a%e7%bb%98%e5%88%b6%e7%9f%a9%e5%bd%a2 colour : this.subColor +previewBlock : true default : ["0","0","flag:x","300","","",null] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; PosString_4 = PosString_4 ? (', "radius": '+PosString_4) : ''; @@ -2490,6 +2541,7 @@ strokeRect_s tooltip : strokeRect:绘制矩形边框 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=strokeRect%ef%bc%9a%e7%bb%98%e5%88%b6%e7%9f%a9%e5%bd%a2%e8%be%b9%e6%a1%86 colour : this.subColor +previewBlock : true default : ["0","0","flag:x","300","","",null,""] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; IntString_0 = IntString_0 ? (', "lineWidth": '+IntString_0) : ''; @@ -2505,6 +2557,7 @@ drawLine_s tooltip : drawLine:绘制线段 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawLine%ef%bc%9a%e7%bb%98%e5%88%b6%e7%ba%bf%e6%ae%b5 colour : this.subColor +previewBlock : true default : ["0","0","flag:x","300","",null,""] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; IntString_0 = IntString_0 ? (', "lineWidth": '+IntString_0) : ''; @@ -2519,6 +2572,7 @@ drawArrow_s tooltip : drawArrow:绘制箭头 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawArrow%ef%bc%9a%e7%bb%98%e5%88%b6%e7%ae%ad%e5%a4%b4 colour : this.subColor +previewBlock : true default : ["0","0","flag:x","300","",null,""] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; IntString_0 = IntString_0 ? (', "lineWidth": '+IntString_0) : ''; @@ -2534,6 +2588,7 @@ fillPolygon_s tooltip : fillPolygon:绘制多边形 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=fillPolygon%ef%bc%9a%e7%bb%98%e5%88%b6%e5%a4%9a%e8%be%b9%e5%bd%a2 colour : this.subColor +previewBlock : true default : ["0,0,100","0,100,0","",null] var pattern2 = /^([+-]?\d+)(,[+-]?\d+)*$/; if(!pattern2.test(EvalString_0) || !pattern2.test(EvalString_1))throw new Error('坐标格式错误,请右键点击帮助查看格式'); @@ -2554,6 +2609,7 @@ strokePolygon_s tooltip : strokePolygon:绘制多边形边框 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=strokePolygon%ef%bc%9a%e7%bb%98%e5%88%b6%e5%a4%9a%e8%be%b9%e5%bd%a2%e8%be%b9%e6%a1%86 colour : this.subColor +previewBlock : true default : ["0,0,100","0,100,0","",null,""] var pattern2 = /^([+-]?\d+)(,[+-]?\d+)*$/; if(!pattern2.test(EvalString_0) || !pattern2.test(EvalString_1))throw new Error('坐标格式错误,请右键点击帮助查看格式'); @@ -2574,6 +2630,7 @@ fillEllipse_s tooltip : fillEllipse:绘制椭圆 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=fillEllipse%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9c%86 colour : this.subColor +previewBlock : true default : ["0","0","100","100","0","",null] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; PosString_4 = PosString_4 ? (', "angle": ' + PosString_4) : ''; @@ -2588,6 +2645,7 @@ strokeEllipse_s tooltip : strokeEllipse:绘制椭圆边框 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=strokeEllipse%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9c%86%e8%be%b9%e6%a1%86 colour : this.subColor +previewBlock : true default : ["0","0","100","100","0","",null,""] ColorString_0 = ColorString_0 ? (', "style": ['+ColorString_0+']') : ''; IntString_0 = IntString_0 ? (', "lineWidth": '+IntString_0) : ''; @@ -2633,6 +2691,7 @@ drawImage_s /* drawImage_s tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 +previewBlock : true default : ["bg.jpg","null","0","0","",""] colour : this.subColor if (Reverse_List_0 && Reverse_List_0 != 'null') { @@ -2654,6 +2713,7 @@ tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 default : ["bg.jpg","0","0","32","32","0","0","32","32"] colour : this.subColor +previewBlock : true if (Reverse_List_0 && Reverse_List_0 != 'null') { Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; } else Reverse_List_0 = ''; @@ -2671,6 +2731,7 @@ drawIcon_s tooltip : drawIcon:绘制图标 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawIcon%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e6%a0%87 default : ["yellowKey",0,"0","0","",""] +previewBlock : true colour : this.subColor Int_0 = Int_0 ? (', "frame": '+Int_0) : ''; PosString_2 = PosString_2 ? (', "width": '+PosString_2) : ''; @@ -2688,6 +2749,7 @@ tooltip : drawBackground:绘制背景 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawBackground%ef%bc%9a%e7%bb%98%e5%88%b6%e8%83%8c%e6%99%af%e5%9b%be default : ["winskin.png",null,"0","0","100","100"] colour : this.subColor +previewBlock : true var colorRe = MotaActionFunctions.pattern.colorRe; if (colorRe.test(EvalString_0)) { EvalString_0 = ', "background": ['+EvalString_0+']'; @@ -2709,6 +2771,7 @@ drawSelector_s /* drawSelector_s tooltip : drawSelector:绘制闪烁光标 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawSelector%ef%bc%9a%e7%bb%98%e5%88%b6%e9%97%aa%e7%83%81%e5%85%89%e6%a0%87 +previewBlock : true default : ["winskin.png","1","0","0","100","100"] colour : this.subColor var code = '{"type": "drawSelector", "image": "'+EvalString_0+'", "code": '+Int_0+', "x": '+PosString_0+', "y": '+PosString_1+', "width": '+PosString_2+', "height": '+PosString_3+'},\n'; @@ -2723,6 +2786,7 @@ drawSelector_1_s tooltip : drawSelector:清除闪烁光标 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showImage%ef%bc%9a%e6%98%be%e7%a4%ba%e5%9b%be%e7%89%87 default : ["1"] +previewBlock : true colour : this.subColor var code = '{"type": "drawSelector", "code": '+Int_0+'},\n'; return code; @@ -2753,6 +2817,7 @@ tooltip : 可双击多行编辑,请勿使用异步代码。常见API参见文 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=function%EF%BC%9A%E8%87%AA%E5%AE%9A%E4%B9%89js%E8%84%9A%E6%9C%AC default : [false,"alert(core.getStatus(\"atk\"));"] colour : this.dataColor +doubleclicktext : RawEvalString_0 Bool_0 = Bool_0?', "async": true':''; var code = '{"type": "function"'+Bool_0+', "function": "function(){\\n'+JSON.stringify(RawEvalString_0).slice(1,-1).split('\\\\n').join('\\n')+'\\n}"},\n'; return code; diff --git a/_server/blockly/Converter.bundle.min.js b/_server/blockly/Converter.bundle.min.js index 82b274ba..25aa6fe7 100644 --- a/_server/blockly/Converter.bundle.min.js +++ b/_server/blockly/Converter.bundle.min.js @@ -1 +1 @@ -!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=32)}([function(t,e){function n(t){return"["+t.join(", ")+"]"}function r(t,e){return t.equals(e)}function i(t){return t.hashCode()}function o(t,e){return this.data={},this.hashFunction=t||i,this.equalsFunction=e||r,this}function s(){return this.data=[],this}function a(t,e){return this.data={},this.hashFunction=t||i,this.equalsFunction=e||r,this}function l(){return this.data={},this}function u(){return this}function c(){return this.count=0,this.hash=0,this}String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32)),String.prototype.hashCode=function(){var t,e,n,r,i,o,s,a,l=this.toString();for(t=3&l.length,e=l.length-t,n=String.prototype.seed,i=3432918353,o=461845907,a=0;a>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295)<<13|n>>>19))+((5*(n>>>16)&65535)<<16)&4294967295))+((58964+(r>>>16)&65535)<<16);switch(s=0,t){case 3:s^=(255&l.charCodeAt(a+2))<<16;case 2:s^=(255&l.charCodeAt(a+1))<<8;case 1:n^=s=(65535&(s=(s=(65535&(s^=255&l.charCodeAt(a)))*i+(((s>>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295}return n^=l.length,n=2246822507*(65535&(n^=n>>>16))+((2246822507*(n>>>16)&65535)<<16)&4294967295,n=3266489909*(65535&(n^=n>>>13))+((3266489909*(n>>>16)&65535)<<16)&4294967295,(n^=n>>>16)>>>0},Object.defineProperty(o.prototype,"length",{get:function(){var t=0;for(var e in this.data)0===e.indexOf("hash_")&&(t+=this.data[e].length);return t}}),o.prototype.add=function(t){var e="hash_"+this.hashFunction(t);if(e in this.data){for(var n=this.data[e],r=0;r>>17,n*=461845907,this.count=this.count+1;var r=this.hash^n;r=5*(r=r<<13|r>>>19)+3864292196,this.hash=r}}},c.prototype.finish=function(){var t=this.hash^4*this.count;return t^=t>>>16,t*=2246822507,t^=t>>>13,t*=3266489909,t^=t>>>16},u.prototype.get=function(t,e){var n=this[t]||null;return null===n?null:n[e]||null},u.prototype.set=function(t,e,n){var r=this[t]||null;null===r&&(r={},this[t]=r),r[e]=n},e.Hash=c,e.Set=o,e.Map=a,e.BitSet=s,e.AltDict=l,e.DoubleDict=u,e.hashStuff=function(){var t=new c;return t.update.apply(arguments),t.finish()},e.escapeWhitespace=function(t,e){return t=(t=(t=t.replace("\t","\\t")).replace("\n","\\n")).replace("\r","\\r"),e&&(t=t.replace(" ","·")),t},e.arrayToString=n,e.titleCase=function(t){return t.replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1)})},e.equalArrays=function(t,e){if(!Array.isArray(t)||!Array.isArray(e))return!1;if(t==e)return!0;if(t.length!=e.length)return!1;for(var n=0;n"},set:function(t){this._text=t}}),r.prototype.toString=function(){var t=this.text;return t=null!==t?t.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+t+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"},e.Token=n,e.CommonToken=r},function(t,e,n){var r=n(1).Token;function i(t,e){return this.start=t,this.stop=e,this}function o(){this.intervals=null,this.readOnly=!1}i.prototype.contains=function(t){return t>=this.start&&t=n.stop?(this.intervals.pop(t+1),this.reduce(t)):e.stop>=n.start&&(this.intervals[t]=new i(e.start,n.stop),this.intervals.pop(t+1))}},o.prototype.complement=function(t,e){var n=new o;n.addInterval(new i(t,e+1));for(var r=0;rr.start&&t.stop=r.stop?(this.intervals.splice(e,1),e-=1):t.start"):t.push("'"+String.fromCharCode(n.start)+"'"):t.push("'"+String.fromCharCode(n.start)+"'..'"+String.fromCharCode(n.stop-1)+"'")}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toIndexString=function(){for(var t=[],e=0;e"):t.push(n.start.toString()):t.push(n.start.toString()+".."+(n.stop-1).toString())}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toTokenString=function(t,e){for(var n=[],r=0;r1?"{"+n.join(", ")+"}":n[0]},o.prototype.elementName=function(t,e,n){return n===r.EOF?"":n===r.EPSILON?"":t[n]||e[n]},e.Interval=i,e.IntervalSet=o},function(t,e){function n(){return this.atn=null,this.stateNumber=n.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function r(){return n.call(this),this.stateType=n.BASIC,this}function i(){return n.call(this),this.decision=-1,this.nonGreedy=!1,this}function o(){return i.call(this),this.endState=null,this}function s(){return o.call(this),this.stateType=n.BLOCK_START,this}function a(){return n.call(this),this.stateType=n.BLOCK_END,this.startState=null,this}function l(){return n.call(this),this.stateType=n.RULE_STOP,this}function u(){return n.call(this),this.stateType=n.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function c(){return i.call(this),this.stateType=n.PLUS_LOOP_BACK,this}function h(){return o.call(this),this.stateType=n.PLUS_BLOCK_START,this.loopBackState=null,this}function p(){return o.call(this),this.stateType=n.STAR_BLOCK_START,this}function f(){return n.call(this),this.stateType=n.STAR_LOOP_BACK,this}function d(){return i.call(this),this.stateType=n.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function y(){return n.call(this),this.stateType=n.LOOP_END,this.loopBackState=null,this}function g(){return i.call(this),this.stateType=n.TOKEN_START,this}n.INVALID_TYPE=0,n.BASIC=1,n.RULE_START=2,n.BLOCK_START=3,n.PLUS_BLOCK_START=4,n.STAR_BLOCK_START=5,n.TOKEN_START=6,n.RULE_STOP=7,n.BLOCK_END=8,n.STAR_LOOP_BACK=9,n.STAR_LOOP_ENTRY=10,n.PLUS_LOOP_BACK=11,n.LOOP_END=12,n.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],n.INVALID_STATE_NUMBER=-1,n.prototype.toString=function(){return this.stateNumber},n.prototype.equals=function(t){return t instanceof n&&this.stateNumber===t.stateNumber},n.prototype.isNonGreedyExitState=function(){return!1},n.prototype.addTransition=function(t,e){void 0===e&&(e=-1),0===this.transitions.length?this.epsilonOnlyTransitions=t.isEpsilon:this.epsilonOnlyTransitions!==t.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===e?this.transitions.push(t):this.transitions.splice(e,1,t)},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,i.prototype=Object.create(n.prototype),i.prototype.constructor=i,o.prototype=Object.create(i.prototype),o.prototype.constructor=o,s.prototype=Object.create(o.prototype),s.prototype.constructor=s,a.prototype=Object.create(n.prototype),a.prototype.constructor=a,l.prototype=Object.create(n.prototype),l.prototype.constructor=l,u.prototype=Object.create(n.prototype),u.prototype.constructor=u,c.prototype=Object.create(i.prototype),c.prototype.constructor=c,h.prototype=Object.create(o.prototype),h.prototype.constructor=h,p.prototype=Object.create(o.prototype),p.prototype.constructor=p,f.prototype=Object.create(n.prototype),f.prototype.constructor=f,d.prototype=Object.create(i.prototype),d.prototype.constructor=d,y.prototype=Object.create(n.prototype),y.prototype.constructor=y,g.prototype=Object.create(i.prototype),g.prototype.constructor=g,e.ATNState=n,e.BasicState=r,e.DecisionState=i,e.BlockStartState=o,e.BlockEndState=a,e.LoopEndState=y,e.RuleStartState=u,e.RuleStopState=l,e.TokensStartState=g,e.PlusLoopbackState=c,e.StarLoopbackState=f,e.StarLoopEntryState=d,e.PlusBlockStartState=h,e.StarBlockStartState=p,e.BasicBlockStartState=s},function(t,e,n){var r=n(1).Token,i=n(2).Interval,o=new i(-1,-2);n(0);function s(){return this}function a(){return s.call(this),this}function l(){return a.call(this),this}function u(){return l.call(this),this}function c(){return l.call(this),this}function h(){return c.call(this),this}function p(){return this}function f(){return this}function d(t){return c.call(this),this.parentCtx=null,this.symbol=t,this}function y(t){return d.call(this,t),this}function g(){return this}a.prototype=Object.create(s.prototype),a.prototype.constructor=a,l.prototype=Object.create(a.prototype),l.prototype.constructor=l,u.prototype=Object.create(l.prototype),u.prototype.constructor=u,c.prototype=Object.create(l.prototype),c.prototype.constructor=c,h.prototype=Object.create(c.prototype),h.prototype.constructor=h,p.prototype.visit=function(t){return Array.isArray(t)?t.map(function(t){return t.accept(this)},this):t.accept(this)},p.prototype.visitChildren=function(t){return this.visit(t.children)},p.prototype.visitTerminal=function(t){},p.prototype.visitErrorNode=function(t){},f.prototype.visitTerminal=function(t){},f.prototype.visitErrorNode=function(t){},f.prototype.enterEveryRule=function(t){},f.prototype.exitEveryRule=function(t){},d.prototype=Object.create(c.prototype),d.prototype.constructor=d,d.prototype.getChild=function(t){return null},d.prototype.getSymbol=function(){return this.symbol},d.prototype.getParent=function(){return this.parentCtx},d.prototype.getPayload=function(){return this.symbol},d.prototype.getSourceInterval=function(){if(null===this.symbol)return o;var t=this.symbol.tokenIndex;return new i(t,t)},d.prototype.getChildCount=function(){return 0},d.prototype.accept=function(t){return t.visitTerminal(this)},d.prototype.getText=function(){return this.symbol.text},d.prototype.toString=function(){return this.symbol.type===r.EOF?"":this.symbol.text},y.prototype=Object.create(d.prototype),y.prototype.constructor=y,y.prototype.isErrorNode=function(){return!0},y.prototype.accept=function(t){return t.visitErrorNode(this)},g.prototype.walk=function(t,e){if(e instanceof h||void 0!==e.isErrorNode&&e.isErrorNode())t.visitErrorNode(e);else if(e instanceof c)t.visitTerminal(e);else{this.enterRule(t,e);for(var n=0;n=0&&this.startIndexe.returnState&&(f[0]=e.returnState,f[1]=t.returnState);var d=[p,p],y=new u(d,f);return null!==r&&r.set(t,e,y),y}var f=[t.returnState,e.returnState],d=[t.parentCtx,e.parentCtx];t.returnState>e.returnState&&(f[0]=e.returnState,f[1]=t.returnState,d=[e.parentCtx,t.parentCtx]);var g=new u(d,f);return null!==r&&r.set(t,e,g),g}(t,e,n,r);if(n){if(t instanceof l)return t;if(e instanceof l)return e}return t instanceof a&&(t=new u([t.getParent()],[t.returnState])),e instanceof a&&(e=new u([e.getParent()],[e.returnState])),function(t,e,n,r){if(null!==r){var i=r.get(t,e);if(null!==i)return i;if(null!==(i=r.get(e,t)))return i}var s=0,l=0,h=0,p=[],f=[];for(;s0&&(t+=", "),this.returnStates[e]!==o.EMPTY_RETURN_STATE?(t+=this.returnStates[e],null!==this.parents[e]?t=t+" "+this.parents[e]:t+="null"):t+="$";return t+"]"},e.merge=c,e.PredictionContext=o,e.PredictionContextCache=s,e.SingletonPredictionContext=a,e.predictionContextFromRuleContext=function t(e,n){if(void 0!==n&&null!==n||(n=r.EMPTY),null===n.parentCtx||n===r.EMPTY)return o.EMPTY;var i=t(e,n.parentCtx),s=e.states[n.invokingState].transitions[0];return a.create(i,s.followState.stateNumber)},e.getCachedPredictionContext=function t(e,n,r){if(e.isEmpty())return e;var i=r[e]||null;if(null!==i)return i;if(null!==(i=n.get(e)))return r[e]=i,i;for(var s=!1,l=[],c=0;c=this.states.length)throw"Invalid state number.";var n=this.states[t],r=this.nextTokens(n);if(!r.contains(s.EPSILON))return r;var o=new i;for(o.addSet(r),o.removeOne(s.EPSILON);null!==e&&e.invokingState>=0&&r.contains(s.EPSILON);){var a=this.states[e.invokingState].transitions[0];r=this.nextTokens(a.followState),o.addSet(r),o.removeOne(s.EPSILON),e=e.parentCtx}return r.contains(s.EPSILON)&&o.addOne(s.EOF),o},o.INVALID_ALT_NUMBER=0,e.ATN=o},function(t,e,n){var r=n(1).Token,i=(n(2).Interval,n(2).IntervalSet),o=n(10).Predicate,s=n(10).PrecedencePredicate;function a(t){if(void 0===t||null===t)throw"target cannot be null.";return this.target=t,this.isEpsilon=!1,this.label=null,this}function l(t,e){return a.call(this,t),this.label_=e,this.label=this.makeLabel(),this.serializationType=a.ATOM,this}function u(t,e,n,r){return a.call(this,t),this.ruleIndex=e,this.precedence=n,this.followState=r,this.serializationType=a.RULE,this.isEpsilon=!0,this}function c(t,e){return a.call(this,t),this.serializationType=a.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=e,this}function h(t,e,n){return a.call(this,t),this.serializationType=a.RANGE,this.start=e,this.stop=n,this.label=this.makeLabel(),this}function p(t){return a.call(this,t),this}function f(t,e,n,r){return p.call(this,t),this.serializationType=a.PREDICATE,this.ruleIndex=e,this.predIndex=n,this.isCtxDependent=r,this.isEpsilon=!0,this}function d(t,e,n,r){return a.call(this,t),this.serializationType=a.ACTION,this.ruleIndex=e,this.actionIndex=void 0===n?-1:n,this.isCtxDependent=void 0!==r&&r,this.isEpsilon=!0,this}function y(t,e){return a.call(this,t),this.serializationType=a.SET,void 0!==e&&null!==e?this.label=e:(this.label=new i,this.label.addOne(r.INVALID_TYPE)),this}function g(t,e){return y.call(this,t,e),this.serializationType=a.NOT_SET,this}function v(t){return a.call(this,t),this.serializationType=a.WILDCARD,this}function x(t,e){return p.call(this,t),this.serializationType=a.PRECEDENCE,this.precedence=e,this.isEpsilon=!0,this}a.EPSILON=1,a.RANGE=2,a.RULE=3,a.PREDICATE=4,a.ATOM=5,a.ACTION=6,a.SET=7,a.NOT_SET=8,a.WILDCARD=9,a.PRECEDENCE=10,a.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"],a.serializationTypes={EpsilonTransition:a.EPSILON,RangeTransition:a.RANGE,RuleTransition:a.RULE,PredicateTransition:a.PREDICATE,AtomTransition:a.ATOM,ActionTransition:a.ACTION,SetTransition:a.SET,NotSetTransition:a.NOT_SET,WildcardTransition:a.WILDCARD,PrecedencePredicateTransition:a.PRECEDENCE},l.prototype=Object.create(a.prototype),l.prototype.constructor=l,l.prototype.makeLabel=function(){var t=new i;return t.addOne(this.label_),t},l.prototype.matches=function(t,e,n){return this.label_===t},l.prototype.toString=function(){return this.label_},u.prototype=Object.create(a.prototype),u.prototype.constructor=u,u.prototype.matches=function(t,e,n){return!1},c.prototype=Object.create(a.prototype),c.prototype.constructor=c,c.prototype.matches=function(t,e,n){return!1},c.prototype.toString=function(){return"epsilon"},h.prototype=Object.create(a.prototype),h.prototype.constructor=h,h.prototype.makeLabel=function(){var t=new i;return t.addRange(this.start,this.stop),t},h.prototype.matches=function(t,e,n){return t>=this.start&&t<=this.stop},h.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},p.prototype=Object.create(a.prototype),p.prototype.constructor=p,f.prototype=Object.create(p.prototype),f.prototype.constructor=f,f.prototype.matches=function(t,e,n){return!1},f.prototype.getPredicate=function(){return new o(this.ruleIndex,this.predIndex,this.isCtxDependent)},f.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},d.prototype=Object.create(a.prototype),d.prototype.constructor=d,d.prototype.matches=function(t,e,n){return!1},d.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},y.prototype=Object.create(a.prototype),y.prototype.constructor=y,y.prototype.matches=function(t,e,n){return this.label.contains(t)},y.prototype.toString=function(){return this.label.toString()},g.prototype=Object.create(y.prototype),g.prototype.constructor=g,g.prototype.matches=function(t,e,n){return t>=e&&t<=n&&!y.prototype.matches.call(this,t,e,n)},g.prototype.toString=function(){return"~"+y.prototype.toString.call(this)},v.prototype=Object.create(a.prototype),v.prototype.constructor=v,v.prototype.matches=function(t,e,n){return t>=e&&t<=n},v.prototype.toString=function(){return"."},x.prototype=Object.create(p.prototype),x.prototype.constructor=x,x.prototype.matches=function(t,e,n){return!1},x.prototype.getPredicate=function(){return new s(this.precedence)},x.prototype.toString=function(){return this.precedence+" >= _p"},e.Transition=a,e.AtomTransition=l,e.SetTransition=y,e.NotSetTransition=g,e.RuleTransition=u,e.ActionTransition=d,e.EpsilonTransition=c,e.RangeTransition=h,e.WildcardTransition=v,e.PredicateTransition=f,e.PrecedencePredicateTransition=x,e.AbstractPredicateTransition=p},function(t,e,n){var r=n(7).ATN,i=n(0),o=i.Hash,s=i.Set,a=n(10).SemanticContext,l=n(6).merge;function u(t){return t.hashCodeForConfigSet()}function c(t,e){return t===e||null!==t&&null!==e&&t.equalsForConfigSet(e)}function h(t){return this.configLookup=new s(u,c),this.fullCtx=void 0===t||t,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1,this}function p(){return h.call(this),this.configLookup=new s,this}h.prototype.add=function(t,e){if(void 0===e&&(e=null),this.readOnly)throw"This set is readonly";t.semanticContext!==a.NONE&&(this.hasSemanticContext=!0),t.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);var n=this.configLookup.add(t);if(n===t)return this.cachedHashCode=-1,this.configs.push(t),!0;var r=!this.fullCtx,i=l(n.context,t.context,r,e);return n.reachesIntoOuterContext=Math.max(n.reachesIntoOuterContext,t.reachesIntoOuterContext),t.precedenceFilterSuppressed&&(n.precedenceFilterSuppressed=!0),n.context=i,!0},h.prototype.getStates=function(){for(var t=new s,e=0;e0){var s=null;i.map(function(t){(null===s||t.precedence0){var s=i.sort(function(t,e){return t.compareTo(e)}),l=s[s.length-1];n.add(l)}return this.opnds=n.values(),this}o.prototype.hashCode=function(){var t=new i;return this.updateHashCode(t),t.finish()},o.prototype.evaluate=function(t,e){},o.prototype.evalPrecedence=function(t,e){return this},o.andContext=function(t,e){if(null===t||t===o.NONE)return e;if(null===e||e===o.NONE)return t;var n=new l(t,e);return 1===n.opnds.length?n.opnds[0]:n},o.orContext=function(t,e){if(null===t)return e;if(null===e)return t;if(t===o.NONE||e===o.NONE)return o.NONE;var n=new u(t,e);return 1===n.opnds.length?n.opnds[0]:n},s.prototype=Object.create(o.prototype),s.prototype.constructor=s,o.NONE=new s,s.prototype.evaluate=function(t,e){var n=this.isCtxDependent?e:null;return t.sempred(n,this.ruleIndex,this.predIndex)},s.prototype.updateHashCode=function(t){t.update(this.ruleIndex,this.predIndex,this.isCtxDependent)},s.prototype.equals=function(t){return this===t||t instanceof s&&(this.ruleIndex===t.ruleIndex&&this.predIndex===t.predIndex&&this.isCtxDependent===t.isCtxDependent)},s.prototype.toString=function(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"},a.prototype=Object.create(o.prototype),a.prototype.constructor=a,a.prototype.evaluate=function(t,e){return t.precpred(e,this.precedence)},a.prototype.evalPrecedence=function(t,e){return t.precpred(e,this.precedence)?o.NONE:null},a.prototype.compareTo=function(t){return this.precedence-t.precedence},a.prototype.updateHashCode=function(t){t.update(31)},a.prototype.equals=function(t){return this===t||t instanceof a&&this.precedence===t.precedence},a.prototype.toString=function(){return"{"+this.precedence+">=prec}?"},a.filterPrecedencePredicates=function(t){var e=[];return t.values().map(function(t){t instanceof a&&e.push(t)}),e},l.prototype=Object.create(o.prototype),l.prototype.constructor=l,l.prototype.equals=function(t){return this===t||t instanceof l&&this.opnds===t.opnds},l.prototype.updateHashCode=function(t){t.update(this.opnds,"AND")},l.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},u.prototype=Object.create(o.prototype),u.prototype.constructor=u,u.prototype.constructor=function(t){return this===t||t instanceof u&&this.opnds===t.opnds},u.prototype.updateHashCode=function(t){t.update(this.opnds,"OR")},u.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},e.SemanticContext=o,e.PrecedencePredicate=a,e.Predicate=s},function(t,e,n){var r=n(9).ATNConfigSet,i=n(0),o=i.Hash,s=i.Set;function a(t,e){return this.alt=e,this.pred=t,this}function l(t,e){return null===t&&(t=-1),null===e&&(e=new r),this.stateNumber=t,this.configs=e,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}a.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},l.prototype.getAltSet=function(){var t=new s;if(null!==this.configs)for(var e=0;e0?",up="+this.reachesIntoOuterContext:"")+")"},l.prototype=Object.create(a.prototype),l.prototype.constructor=l,l.prototype.updateHashCode=function(t){t.update(this.state.stateNumber,this.alt,this.context,this.semanticContext,this.passedThroughNonGreedyDecision,this.lexerActionExecutor)},l.prototype.equals=function(t){return this===t||t instanceof l&&this.passedThroughNonGreedyDecision==t.passedThroughNonGreedyDecision&&(this.lexerActionExecutor?this.lexerActionExecutor.equals(t.lexerActionExecutor):!t.lexerActionExecutor)&&a.prototype.equals.call(this,t)},l.prototype.hashCodeForConfigSet=l.prototype.hashCode,l.prototype.equalsForConfigSet=l.prototype.equals,l.prototype.checkNonGreedyDecision=function(t,e){return t.passedThroughNonGreedyDecision||e instanceof r&&e.nonGreedy},e.ATNConfig=a,e.LexerATNConfig=l},function(t,e,n){var r=n(4).RuleNode,i=n(4).INVALID_INTERVAL,o=n(7).INVALID_ALT_NUMBER;function s(t,e){return r.call(this),this.parentCtx=t||null,this.invokingState=e||-1,this}s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.depth=function(){for(var t=0,e=this;null!==e;)e=e.parentCtx,t+=1;return t},s.prototype.isEmpty=function(){return-1===this.invokingState},s.prototype.getSourceInterval=function(){return i},s.prototype.getRuleContext=function(){return this},s.prototype.getPayload=function(){return this},s.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(t){return t.getText()}).join("")},s.prototype.getAltNumber=function(){return o},s.prototype.setAltNumber=function(t){},s.prototype.getChild=function(t){return null},s.prototype.getChildCount=function(){return 0},s.prototype.accept=function(t){return t.visitChildren(this)},e.RuleContext=s;var a=n(21).Trees;s.prototype.toStringTree=function(t,e){return a.toStringTree(this,t,e)},s.prototype.toString=function(t,e){t=t||null,e=e||null;for(var n=this,r="[";null!==n&&n!==e;){if(null===t)n.isEmpty()||(r+=n.invokingState);else{var i=n.ruleIndex;r+=i>=0&&i":"\n"===t?"\\n":"\t"===t?"\\t":"\r"===t?"\\r":t},l.prototype.getCharErrorDisplay=function(t){return"'"+this.getErrorDisplayForChar(t)+"'"},l.prototype.recover=function(t){this._input.LA(1)!==r.EOF&&(t instanceof a?this._interp.consume(this._input):this._input.consume())},e.Lexer=l},function(t,e){function n(){return this}function r(){return n.call(this),this}function i(t){if(n.call(this),null===t)throw"delegates";return this.delegates=t,this}n.prototype.syntaxError=function(t,e,n,r,i,o){},n.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){},n.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){},n.prototype.reportContextSensitivity=function(t,e,n,r,i,o){},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.INSTANCE=new r,r.prototype.syntaxError=function(t,e,n,r,i,o){console.error("line "+n+":"+r+" "+i)},i.prototype=Object.create(n.prototype),i.prototype.constructor=i,i.prototype.syntaxError=function(t,e,n,r,i,o){this.delegates.map(function(s){s.syntaxError(t,e,n,r,i,o)})},i.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){this.delegates.map(function(a){a.reportAmbiguity(t,e,n,r,i,o,s)})},i.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportAttemptingFullContext(t,e,n,r,i,o)})},i.prototype.reportContextSensitivity=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportContextSensitivity(t,e,n,r,i,o)})},e.ErrorListener=n,e.ConsoleErrorListener=r,e.ProxyErrorListener=i},function(t,e){function n(t,e,n){return this.dfa=t,this.literalNames=e||[],this.symbolicNames=n||[],this}function r(t){return n.call(this,t,null),this}n.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var t="",e=this.dfa.sortedStates(),n=0;n")).concat(this.getStateString(s))).concat("\n"))}}return 0===t.length?null:t},n.prototype.getEdgeLabel=function(t){return 0===t?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[t-1]||this.symbolicNames[t-1]:String.fromCharCode(t-1)},n.prototype.getStateString=function(t){var e=(t.isAcceptState?":":"")+"s"+t.stateNumber+(t.requiresFullContext?"^":"");return t.isAcceptState?null!==t.predicates?e+"=>"+t.predicates.toString():e+"=>"+t.prediction.toString():e},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.prototype.getEdgeLabel=function(t){return"'"+String.fromCharCode(t)+"'"},e.DFASerializer=n,e.LexerDFASerializer=r},function(t,e,n){var r=n(14).RuleContext,i=n(4),o=i.INVALID_INTERVAL,s=i.TerminalNode,a=i.TerminalNodeImpl,l=i.ErrorNodeImpl,u=n(2).Interval;function c(t,e){t=t||null,e=e||null,r.call(this,t,e),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}function h(t,e,n){return c.call(t,e),this.ruleIndex=n,this}c.prototype=Object.create(r.prototype),c.prototype.constructor=c,c.prototype.copyFrom=function(t){this.parentCtx=t.parentCtx,this.invokingState=t.invokingState,this.children=null,this.start=t.start,this.stop=t.stop,t.children&&(this.children=[],t.children.map(function(t){t instanceof l&&(this.children.push(t),t.parentCtx=this)},this))},c.prototype.enterRule=function(t){},c.prototype.exitRule=function(t){},c.prototype.addChild=function(t){return null===this.children&&(this.children=[]),this.children.push(t),t},c.prototype.removeLastChild=function(){null!==this.children&&this.children.pop()},c.prototype.addTokenNode=function(t){var e=new a(t);return this.addChild(e),e.parentCtx=this,e},c.prototype.addErrorNode=function(t){var e=new l(t);return this.addChild(e),e.parentCtx=this,e},c.prototype.getChild=function(t,e){if(e=e||null,null===this.children||t<0||t>=this.children.length)return null;if(null===e)return this.children[t];for(var n=0;n=this.children.length)return null;for(var n=0;n=this._size)throw"cannot consume EOF";this._index+=1},i.prototype.LA=function(t){if(0===t)return 0;t<0&&(t+=1);var e=this._index+t-1;return e<0||e>=this._size?r.EOF:this.data[e]},i.prototype.LT=function(t){return this.LA(t)},i.prototype.mark=function(){return-1},i.prototype.release=function(t){},i.prototype.seek=function(t){t<=this._index?this._index=t:this._index=Math.min(t,this._size)},i.prototype.getText=function(t,e){if(e>=this._size&&(e=this._size-1),t>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var n="",r=t;r<=e;r++)n+=String.fromCodePoint(this.data[r]);return n}return this.strdata.slice(t,e+1)},i.prototype.toString=function(){return this.strdata},e.InputStream=i},function(t,e,n){var r=n(12);function i(){return r.tree.ParseTreeVisitor.call(this),this}i.prototype=Object.create(r.tree.ParseTreeVisitor.prototype),i.prototype.constructor=i,i.prototype.visitGrammarFile=function(t){return this.visitChildren(t)},i.prototype.visitGrammerDecl=function(t){return this.visitChildren(t)},i.prototype.visitStatExprSplit=function(t){return this.visitChildren(t)},i.prototype.visitStatList=function(t){return this.visitChildren(t)},i.prototype.visitStatValue=function(t){return this.visitChildren(t)},i.prototype.visitExprExpression=function(t){return this.visitChildren(t)},i.prototype.visitExprValue=function(t){return this.visitChildren(t)},i.prototype.visitArithmeticRuleCollection=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomExpr=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomParserId=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomLexerId=function(t){return this.visitChildren(t)},i.prototype.visitParserAtomStr=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleCollection=function(t){return this.visitChildren(t)},i.prototype.visitMeaningfulSplit=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleStrings=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleList=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleComplex=function(t){return this.visitChildren(t)},i.prototype.visitStrings=function(t){return this.visitChildren(t)},i.prototype.visitLexerRuleExpr=function(t){return this.visitChildren(t)},e.BlocklyGrammerVisitor=i},function(t,e,n){var r=n(0),i=n(1).Token,o=(n(4).RuleNode,n(4).ErrorNode),s=n(4).TerminalNode,a=n(18).ParserRuleContext,l=n(14).RuleContext,u=n(7).INVALID_ALT_NUMBER;function c(){}c.toStringTree=function(t,e,n){e=e||null,null!==(n=n||null)&&(e=n.ruleNames);var i=c.getNodeText(t,e);i=r.escapeWhitespace(i,!1);var o=t.getChildCount();if(0===o)return i;var s="("+i+" ";o>0&&(i=c.toStringTree(t.getChild(0),e),s=s.concat(i));for(var a=1;a=n},W.prototype.deserialize=function(t){this.reset(t),this.checkVersion(),this.checkUUID();var e=this.readATN();this.readStates(e),this.readRules(e),this.readModes(e);var n=[];return this.readSets(e,n,this.readInt.bind(this)),this.isFeatureSupported(Y,this.uuid)&&this.readSets(e,n,this.readInt32.bind(this)),this.readEdges(e,n),this.readDecisions(e),this.readLexerActions(e),this.markPrecedenceDecisions(e),this.verifyATN(e),this.deserializationOptions.generateRuleBypassTransitions&&e.grammarType===o.PARSER&&(this.generateRuleBypassTransitions(e),this.verifyATN(e)),e},W.prototype.reset=function(t){var e=t.split("").map(function(t){var e=t.charCodeAt(0);return e>1?e-2:-1});e[0]=t.charCodeAt(0),this.data=e,this.pos=0},W.prototype.checkVersion=function(){var t=this.readInt();if(3!==t)throw"Could not deserialize ATN with version "+t+" (expected 3)."},W.prototype.checkUUID=function(){var t=this.readUUID();if(K.indexOf(t)<0)throw"59627784-3BE5-417A-B9EB-8131A7286089";this.uuid=t},W.prototype.readATN=function(){var t=this.readInt(),e=this.readInt();return new i(t,e)},W.prototype.readStates=function(t){for(var e,n,r,i=[],o=[],s=this.readInt(),l=0;l0;)i.addTransition(p.transitions[f-1]),p.transitions=p.transitions.slice(-1);t.ruleToStartState[e].addTransition(new N(i)),o.addTransition(new N(a));var d=new l;t.addState(d),d.addTransition(new C(o,t.ruleToTokenType[e])),i.addTransition(new N(d))},W.prototype.stateIsEndStateFor=function(t,e){if(t.ruleIndex!==e)return null;if(!(t instanceof x))return null;var n=t.transitions[t.transitions.length-1].target;return n instanceof p&&n.epsilonOnlyTransitions&&n.transitions[0].target instanceof d?t:null},W.prototype.markPrecedenceDecisions=function(t){for(var e=0;e=0):this.checkCondition(n.transitions.length<=1||n instanceof d)}},W.prototype.checkCondition=function(t,e){if(!t)throw void 0!==e&&null!==e||(e="IllegalState"),e},W.prototype.readInt=function(){return this.data[this.pos++]},W.prototype.readInt32=function(){return this.readInt()|this.readInt()<<16},W.prototype.readLong=function(){return 4294967295&this.readInt32()|this.readInt32()<<32};var X=function(){for(var t=[],e=0;e<256;e++)t[e]=(e+256).toString(16).substr(1).toUpperCase();return t}();W.prototype.readUUID=function(){for(var t=[],e=7;e>=0;e--){var n=this.readInt();t[2*e+1]=255&n,t[2*e]=n>>8&255}return X[t[0]]+X[t[1]]+X[t[2]]+X[t[3]]+"-"+X[t[4]]+X[t[5]]+"-"+X[t[6]]+X[t[7]]+"-"+X[t[8]]+X[t[9]]+"-"+X[t[10]]+X[t[11]]+X[t[12]]+X[t[13]]+X[t[14]]+X[t[15]]},W.prototype.edgeFactory=function(t,e,n,i,o,s,a,l){var u=t.states[i];switch(e){case E.EPSILON:return new N(u);case E.RANGE:return new R(u,0!==a?r.EOF:o,s);case E.RULE:return new b(t.states[o],s,a,u);case E.PREDICATE:return new O(u,o,s,0!==a);case E.PRECEDENCE:return new P(u,o);case E.ATOM:return new C(u,0!==a?r.EOF:o);case E.ACTION:return new L(u,o,s,0!==a);case E.SET:return new A(u,l[o]);case E.NOT_SET:return new k(u,l[o]);case E.WILDCARD:return new I(u);default:throw"The specified transition type: "+e+" is not valid."}},W.prototype.stateFactory=function(t,e){if(null===this.stateFactories){var n=[];n[a.INVALID_TYPE]=null,n[a.BASIC]=function(){return new l},n[a.RULE_START]=function(){return new f},n[a.BLOCK_START]=function(){return new T},n[a.PLUS_BLOCK_START]=function(){return new m},n[a.STAR_BLOCK_START]=function(){return new _},n[a.TOKEN_START]=function(){return new y},n[a.RULE_STOP]=function(){return new d},n[a.BLOCK_END]=function(){return new h},n[a.STAR_LOOP_BACK]=function(){return new v},n[a.STAR_LOOP_ENTRY]=function(){return new x},n[a.PLUS_LOOP_BACK]=function(){return new g},n[a.LOOP_END]=function(){return new p},this.stateFactories=n}if(t>this.stateFactories.length||null===this.stateFactories[t])throw"The specified state type "+t+" is not valid.";var r=this.stateFactories[t]();if(null!==r)return r.ruleIndex=e,r},W.prototype.lexerActionFactory=function(t,e,n){if(null===this.actionFactories){var r=[];r[j.CHANNEL]=function(t,e){return new B(t)},r[j.CUSTOM]=function(t,e){return new U(t,e)},r[j.MODE]=function(t,e){return new G(t)},r[j.MORE]=function(t,e){return V.INSTANCE},r[j.POP_MODE]=function(t,e){return q.INSTANCE},r[j.PUSH_MODE]=function(t,e){return new z(t)},r[j.SKIP]=function(t,e){return M.INSTANCE},r[j.TYPE]=function(t,e){return new H(t)},this.actionFactories=r}if(t>this.actionFactories.length||null===this.actionFactories[t])throw"The specified lexer action type "+t+" is not valid.";return this.actionFactories[t](e,n)},e.ATNDeserializer=W},function(t,e){function n(t){return void 0===t&&(t=null),this.readOnly=!1,this.verifyATN=null===t||t.verifyATN,this.generateRuleBypassTransitions=null!==t&&t.generateRuleBypassTransitions,this}n.defaultOptions=new n,n.defaultOptions.readOnly=!0,e.ATNDeserializationOptions=n},function(t,e){function n(){}function r(t){return this.actionType=t,this.isPositionDependent=!1,this}function i(){return r.call(this,n.SKIP),this}function o(t){return r.call(this,n.TYPE),this.type=t,this}function s(t){return r.call(this,n.PUSH_MODE),this.mode=t,this}function a(){return r.call(this,n.POP_MODE),this}function l(){return r.call(this,n.MORE),this}function u(t){return r.call(this,n.MODE),this.mode=t,this}function c(t,e){return r.call(this,n.CUSTOM),this.ruleIndex=t,this.actionIndex=e,this.isPositionDependent=!0,this}function h(t){return r.call(this,n.CHANNEL),this.channel=t,this}function p(t,e){return r.call(this,e.actionType),this.offset=t,this.action=e,this.isPositionDependent=!0,this}n.CHANNEL=0,n.CUSTOM=1,n.MODE=2,n.MORE=3,n.POP_MODE=4,n.PUSH_MODE=5,n.SKIP=6,n.TYPE=7,r.prototype.hashCode=function(){var t=new Hash;return this.updateHashCode(t),t.finish()},r.prototype.updateHashCode=function(t){t.update(this.actionType)},r.prototype.equals=function(t){return this===t},i.prototype=Object.create(r.prototype),i.prototype.constructor=i,i.INSTANCE=new i,i.prototype.execute=function(t){t.skip()},i.prototype.toString=function(){return"skip"},o.prototype=Object.create(r.prototype),o.prototype.constructor=o,o.prototype.execute=function(t){t.type=this.type},o.prototype.updateHashCode=function(t){t.update(this.actionType,this.type)},o.prototype.equals=function(t){return this===t||t instanceof o&&this.type===t.type},o.prototype.toString=function(){return"type("+this.type+")"},s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.execute=function(t){t.pushMode(this.mode)},s.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},s.prototype.equals=function(t){return this===t||t instanceof s&&this.mode===t.mode},s.prototype.toString=function(){return"pushMode("+this.mode+")"},a.prototype=Object.create(r.prototype),a.prototype.constructor=a,a.INSTANCE=new a,a.prototype.execute=function(t){t.popMode()},a.prototype.toString=function(){return"popMode"},l.prototype=Object.create(r.prototype),l.prototype.constructor=l,l.INSTANCE=new l,l.prototype.execute=function(t){t.more()},l.prototype.toString=function(){return"more"},u.prototype=Object.create(r.prototype),u.prototype.constructor=u,u.prototype.execute=function(t){t.mode(this.mode)},u.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},u.prototype.equals=function(t){return this===t||t instanceof u&&this.mode===t.mode},u.prototype.toString=function(){return"mode("+this.mode+")"},c.prototype=Object.create(r.prototype),c.prototype.constructor=c,c.prototype.execute=function(t){t.action(null,this.ruleIndex,this.actionIndex)},c.prototype.updateHashCode=function(t){t.update(this.actionType,this.ruleIndex,this.actionIndex)},c.prototype.equals=function(t){return this===t||t instanceof c&&(this.ruleIndex===t.ruleIndex&&this.actionIndex===t.actionIndex)},h.prototype=Object.create(r.prototype),h.prototype.constructor=h,h.prototype.execute=function(t){t._channel=this.channel},h.prototype.updateHashCode=function(t){t.update(this.actionType,this.channel)},h.prototype.equals=function(t){return this===t||t instanceof h&&this.channel===t.channel},h.prototype.toString=function(){return"channel("+this.channel+")"},p.prototype=Object.create(r.prototype),p.prototype.constructor=p,p.prototype.execute=function(t){this.action.execute(t)},p.prototype.updateHashCode=function(t){t.update(this.actionType,this.offset,this.action)},p.prototype.equals=function(t){return this===t||t instanceof p&&(this.offset===t.offset&&this.action===t.action)},e.LexerActionType=n,e.LexerSkipAction=i,e.LexerChannelAction=h,e.LexerCustomAction=c,e.LexerIndexedCustomAction=p,e.LexerMoreAction=l,e.LexerTypeAction=o,e.LexerPushModeAction=s,e.LexerPopModeAction=a,e.LexerModeAction=u},function(t,e,n){var r=n(1).Token,i=n(16).ConsoleErrorListener,o=n(16).ProxyErrorListener;function s(){return this._listeners=[i.INSTANCE],this._interp=null,this._stateNumber=-1,this}s.tokenTypeMapCache={},s.ruleIndexMapCache={},s.prototype.checkVersion=function(t){"4.7"!==t&&console.log("ANTLR runtime and generated code versions disagree: 4.7!="+t)},s.prototype.addErrorListener=function(t){this._listeners.push(t)},s.prototype.removeErrorListeners=function(){this._listeners=[]},s.prototype.getTokenTypeMap=function(){var t=this.getTokenNames();if(null===t)throw"The current recognizer does not provide a list of token names.";var e=this.tokenTypeMapCache[t];return void 0===e&&((e=t.reduce(function(t,e,n){t[e]=n})).EOF=r.EOF,this.tokenTypeMapCache[t]=e),e},s.prototype.getRuleIndexMap=function(){var t=this.ruleNames;if(null===t)throw"The current recognizer does not provide a list of rule names.";var e=this.ruleIndexMapCache[t];return void 0===e&&(e=t.reduce(function(t,e,n){t[e]=n}),this.ruleIndexMapCache[t]=e),e},s.prototype.getTokenType=function(t){var e=this.getTokenTypeMap()[t];return void 0!==e?e:r.INVALID_TYPE},s.prototype.getErrorHeader=function(t){return"line "+t.getOffendingToken().line+":"+t.getOffendingToken().column},s.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),"'"+(e=e.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},s.prototype.getErrorListenerDispatch=function(){return new o(this._listeners)},s.prototype.sempred=function(t,e,n){return!0},s.prototype.precpred=function(t,e){return!0},Object.defineProperty(s.prototype,"state",{get:function(){return this._stateNumber},set:function(t){this._stateNumber=t}}),e.Recognizer=s},function(t,e,n){var r=n(11).DFAState,i=n(9).ATNConfigSet,o=n(6).getCachedPredictionContext;function s(t,e){return this.atn=t,this.sharedContextCache=e,this}s.ERROR=new r(2147483647,new i),s.prototype.getCachedContext=function(t){if(null===this.sharedContextCache)return t;return o(t,this.sharedContextCache,{})},e.ATNSimulator=s},function(t,e,n){n(0).Set;var r=n(0).Map,i=n(0).BitSet,o=n(0).AltDict,s=n(7).ATN,a=n(3).RuleStopState,l=n(9).ATNConfigSet,u=n(13).ATNConfig,c=n(10).SemanticContext,h=(n(0).Hash,n(0).hashStuff);n(0).equalArrays;function p(){return this}p.SLL=0,p.LL=1,p.LL_EXACT_AMBIG_DETECTION=2,p.hasSLLConflictTerminatingPrediction=function(t,e){if(p.allConfigsInRuleStopStates(e))return!0;if(t===p.SLL&&e.hasSemanticContext){for(var n=new l,r=0;r1)return!0}return!1},p.allSubsetsEqual=function(t){for(var e=null,n=0;n=n)){var i,o=e.charCodeAt(r);return o>=55296&&o<=56319&&n>r+1&&(i=e.charCodeAt(r+1))>=56320&&i<=57343?1024*(o-55296)+i-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}()},function(t,e){var n,r,i,o;String.fromCodePoint||(n=function(){try{var t={},e=Object.defineProperty,n=e(t,t,t)&&e}catch(t){}return n}(),r=String.fromCharCode,i=Math.floor,o=function(t){var e,n,o=[],s=-1,a=arguments.length;if(!a)return"";for(var l="";++s1114111||i(u)!=u)throw RangeError("Invalid code point: "+u);u<=65535?o.push(u):(e=55296+((u-=65536)>>10),n=u%1024+56320,o.push(e,n)),(s+1==a||o.length>16384)&&(l+=r.apply(null,o),o.length=0)}return l},n?n(String,"fromCodePoint",{value:o,configurable:!0,writable:!0}):String.fromCodePoint=o)},function(t,e,n){var r=n(1).Token,i=n(5),o=i.NoViableAltException,s=i.InputMismatchException,a=i.FailedPredicateException,l=i.ParseCancellationException,u=n(3).ATNState,c=n(2).Interval,h=n(2).IntervalSet;function p(){}function f(){return p.call(this),this.errorRecoveryMode=!1,this.lastErrorIndex=-1,this.lastErrorStates=null,this}function d(){return f.call(this),this}p.prototype.reset=function(t){},p.prototype.recoverInline=function(t){},p.prototype.recover=function(t,e){},p.prototype.sync=function(t){},p.prototype.inErrorRecoveryMode=function(t){},p.prototype.reportError=function(t){},f.prototype=Object.create(p.prototype),f.prototype.constructor=f,f.prototype.reset=function(t){this.endErrorCondition(t)},f.prototype.beginErrorCondition=function(t){this.errorRecoveryMode=!0},f.prototype.inErrorRecoveryMode=function(t){return this.errorRecoveryMode},f.prototype.endErrorCondition=function(t){this.errorRecoveryMode=!1,this.lastErrorStates=null,this.lastErrorIndex=-1},f.prototype.reportMatch=function(t){this.endErrorCondition(t)},f.prototype.reportError=function(t,e){this.inErrorRecoveryMode(t)||(this.beginErrorCondition(t),e instanceof o?this.reportNoViableAlternative(t,e):e instanceof s?this.reportInputMismatch(t,e):e instanceof a?this.reportFailedPredicate(t,e):(console.log("unknown recognition error type: "+e.constructor.name),console.log(e.stack),t.notifyErrorListeners(e.getOffendingToken(),e.getMessage(),e)))},f.prototype.recover=function(t,e){this.lastErrorIndex===t.getInputStream().index&&null!==this.lastErrorStates&&this.lastErrorStates.indexOf(t.state)>=0&&t.consume(),this.lastErrorIndex=t._input.index,null===this.lastErrorStates&&(this.lastErrorStates=[]),this.lastErrorStates.push(t.state);var n=this.getErrorRecoverySet(t);this.consumeUntil(t,n)},f.prototype.sync=function(t){if(!this.inErrorRecoveryMode(t)){var e=t._interp.atn.states[t.state],n=t.getTokenStream().LA(1),i=t.atn.nextTokens(e);if(!i.contains(r.EPSILON)&&!i.contains(n))switch(e.stateType){case u.BLOCK_START:case u.STAR_BLOCK_START:case u.PLUS_BLOCK_START:case u.STAR_LOOP_ENTRY:if(null!==this.singleTokenDeletion(t))return;throw new s(t);case u.PLUS_LOOP_BACK:case u.STAR_LOOP_BACK:this.reportUnwantedToken(t);var o=new h;o.addSet(t.getExpectedTokens());var a=o.addSet(this.getErrorRecoverySet(t));this.consumeUntil(t,a)}}},f.prototype.reportNoViableAlternative=function(t,e){var n,i=t.getTokenStream();n=null!==i?e.startToken.type===r.EOF?"":i.getText(new c(e.startToken,e.offendingToken)):"";var o="no viable alternative at input "+this.escapeWSAndQuote(n);t.notifyErrorListeners(o,e.offendingToken,e)},f.prototype.reportInputMismatch=function(t,e){var n="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportFailedPredicate=function(t,e){var n="rule "+t.ruleNames[t._ctx.ruleIndex]+" "+e.message;t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportUnwantedToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="extraneous input "+this.getTokenErrorDisplay(e)+" expecting "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e,null)}},f.prototype.reportMissingToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="missing "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames)+" at "+this.getTokenErrorDisplay(e);t.notifyErrorListeners(n,e,null)}},f.prototype.recoverInline=function(t){var e=this.singleTokenDeletion(t);if(null!==e)return t.consume(),e;if(this.singleTokenInsertion(t))return this.getMissingSymbol(t);throw new s(t)},f.prototype.singleTokenInsertion=function(t){var e=t.getTokenStream().LA(1),n=t._interp.atn,r=n.states[t.state].transitions[0].target;return!!n.nextTokens(r,t._ctx).contains(e)&&(this.reportMissingToken(t),!0)},f.prototype.singleTokenDeletion=function(t){var e=t.getTokenStream().LA(2);if(this.getExpectedTokens(t).contains(e)){this.reportUnwantedToken(t),t.consume();var n=t.getCurrentToken();return this.reportMatch(t),n}return null},f.prototype.getMissingSymbol=function(t){var e,n=t.getCurrentToken(),i=this.getExpectedTokens(t).first();e=i===r.EOF?"":"";var o=n,s=t.getTokenStream().LT(-1);return o.type===r.EOF&&null!==s&&(o=s),t.getTokenFactory().create(o.source,i,e,r.DEFAULT_CHANNEL,-1,-1,o.line,o.column)},f.prototype.getExpectedTokens=function(t){return t.getExpectedTokens()},f.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(e)},f.prototype.escapeWSAndQuote=function(t){return"'"+(t=(t=(t=t.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},f.prototype.getErrorRecoverySet=function(t){for(var e=t._interp.atn,n=t._ctx,i=new h;null!==n&&n.invokingState>=0;){var o=e.states[n.invokingState].transitions[0],s=e.nextTokens(o.followState);i.addSet(s),n=n.parentCtx}return i.removeOne(r.EPSILON),i},f.prototype.consumeUntil=function(t,e){for(var n=t.getTokenStream().LA(1);n!==r.EOF&&!e.contains(n);)t.consume(),n=t.getTokenStream().LA(1)},d.prototype=Object.create(f.prototype),d.prototype.constructor=d,d.prototype.recover=function(t,e){for(var n=t._ctx;null!==n;)n.exception=e,n=n.parentCtx;throw new l(e)},d.prototype.recoverInline=function(t){this.recover(t,new s(t))},d.prototype.sync=function(t){},e.BailErrorStrategy=d,e.DefaultErrorStrategy=f},function(t,e){},function(t,e,n){Converter=n(33).Converter},function(module,exports,__webpack_require__){antlr4=__webpack_require__(12);var BlocklyGrammerVisitor=__webpack_require__(20).BlocklyGrammerVisitor,BlocklyGrammerLexer=__webpack_require__(51).BlocklyGrammerLexer,BlocklyGrammerParser=__webpack_require__(52).BlocklyGrammerParser,Visitors=__webpack_require__(53),SymbolVisitor=Visitors.SymbolVisitor,EvalVisitor=Visitors.EvalVisitor,tpl=__webpack_require__(54);function Converter(){return this}Converter.prototype.constructor=Converter,Converter.prototype.init=function(){return this.toolboxGap=5,this.toolboxId="toolbox",this.blocklyDivId="blocklyDiv",this.workSpaceName="workspace",this.codeAreaId="codeArea",this},Converter.prototype.main=function(t,e,n){return this.init(),this.generBlocks(t,e),this.renderGrammerName(),this.generToolbox(),this.generMainFile(e),this.writeMainFile(n),this},Converter.prototype.generBlocks=function(grammerFile,functions){functions||(functions={});var temp_consoleError=console.error;console.error=function(t){throw new Error(t)};var chars=new antlr4.InputStream(grammerFile),lexer=new BlocklyGrammerLexer(chars),tokens=new antlr4.CommonTokenStream(lexer),parser=new BlocklyGrammerParser(tokens);parser.buildParseTrees=!0;var tree=parser.grammarFile();console.error=temp_consoleError;var svisitor=(new SymbolVisitor).init();this.svisitor=svisitor,svisitor.visit(tree),console.log(svisitor),svisitor.checkSymbol();var evisitor=(new EvalVisitor).init(svisitor,grammerFile);return this.evisitor=evisitor,eval(this.evisitor.matchInject("Function_0")),functions.Function_0&&functions.Function_0.call(this),evisitor.visit(tree),eval(this.evisitor.matchInject("Function_1")),functions.Function_1&&functions.Function_1.call(this),evisitor.generBlocks(),console.log(evisitor),this.blocks=evisitor.blocks,eval(this.evisitor.matchInject("Function_2")),functions.Function_2&&functions.Function_2.call(this),this},Converter.prototype.renderGrammerName=function(){this.grammerName=this.svisitor.grammerName,this.generLanguage=this.evisitor.generLanguage;var t=this.grammerName,e=this.generLanguage;return this.OmitedError=tpl.OmitedError(),this.Functions_pre=tpl.Functions_pre(t),this.Functions_xmlText=tpl.Functions_xmlText(t),this.Functions_blocksIniter=tpl.Functions_blocksIniter(t,e),this.mainFileTPL=tpl.mainFileTPL,this},Converter.prototype.generToolbox=function(){eval(this.grammerName+"Functions={};"),eval(this.Functions_xmlText),eval(this.blocks),eval("var blocksobj = "+this.grammerName+"Blocks;"),console.log(blocksobj);var text=[];for(var key in text.push('"),this.toolbox=this.textToPrettyText(text.join("")),this},Converter.prototype.generMainFile=function(t){t||(t={});var e=[],n=this.grammerName;e.push(this.blocks),e.push("\n\n"),e.push(this.OmitedError),e.push("\n\n"),e.push(n+"Functions={}\n\n"),e.push(this.evisitor.matchInject("Functions")),t.Functions&&e.push(t.Functions),e.push("\n\n"),e.push(this.Functions_pre),e.push("\n\n"),e.push(this.Functions_xmlText),e.push("\n\n"),e.push(this.Functions_blocksIniter),e.push("\n\n"),e.push(n+"Functions.blocksIniter();\n\n"),this.mainFile=this.mainFileTPL(n,this.generLanguage,this.blocklyDivId,this.codeAreaId,this.toolbox,this.workSpaceName,this.toolboxId,e.join(""))},Converter.prototype.writeMainFile=function(t){t||(t=this.grammerName+"index.html"),this.createAndDownloadFile(this.mainFile.join(""),t,"html")},Converter.prototype.block=function(t){var e=this.evisitor.expressionRules[t];return e||(e=this.evisitor.statementRules[t]),e&&1!==e.checklength?e.blockjs:null},Converter.prototype.textToPrettyText=function(t){for(var e=t.split("<"),n="",r=1;r"!=i.slice(-2)&&(n+=" ")}var o=e.join("\n");return(o=o.replace(/(<(\w+)\b[^>]*>[^\n]*)\n *<\/\2>/g,"$1")).replace(/^\n/,"")},Converter.prototype.createAndDownloadFile=function(t,e,n){var r=new Blob([t],{type:"text/"+n}),i=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1}),o=document.createElement("a");o.href=window.URL.createObjectURL(r),o.download=e,o.textContent="Download file!",o.dispatchEvent(i)},exports.Converter=Converter},function(t,e,n){e.ATN=n(7).ATN,e.ATNDeserializer=n(22).ATNDeserializer,e.LexerATNSimulator=n(37).LexerATNSimulator,e.ParserATNSimulator=n(40).ParserATNSimulator,e.PredictionMode=n(27).PredictionMode},function(t,e,n){var r=n(0).Set,i=n(0).BitSet,o=n(1).Token,s=n(13).ATNConfig,a=(n(2).Interval,n(2).IntervalSet),l=n(3).RuleStopState,u=n(8).RuleTransition,c=n(8).NotSetTransition,h=n(8).WildcardTransition,p=n(8).AbstractPredicateTransition,f=n(6),d=f.predictionContextFromRuleContext,y=f.PredictionContext,g=f.SingletonPredictionContext;function v(t){this.atn=t}v.HIT_PRED=o.INVALID_TYPE,v.prototype.getDecisionLookahead=function(t){if(null===t)return null;for(var e=t.transitions.length,n=[],o=0;ox.MAX_DFA_EDGE)return null;var n=t.edges[e-x.MIN_DFA_EDGE];return void 0===n&&(n=null),x.debug&&null!==n&&console.log("reuse state "+t.stateNumber+" edge to "+n.stateNumber),n},x.prototype.computeTargetState=function(t,e,n){var r=new l;return this.getReachableConfigSet(t,e.configs,r,n),0===r.items.length?(r.hasSemanticContext||this.addDFAEdge(e,n,s.ERROR),s.ERROR):this.addDFAEdge(e,n,null,r)},x.prototype.failOrAccept=function(t,e,n,i){if(null!==this.prevAccept.dfaState){var o=t.dfaState.lexerActionExecutor;return this.accept(e,o,this.startIndex,t.index,t.line,t.column),t.dfaState.prediction}if(i===r.EOF&&e.index===this.startIndex)return r.EOF;throw new y(this.recog,e,this.startIndex,n)},x.prototype.getReachableConfigSet=function(t,e,n,i){for(var s=o.INVALID_ALT_NUMBER,a=0;ax.MAX_DFA_EDGE?n:(x.debug&&console.log("EDGE "+t+" -> "+n+" upon "+e),null===t.edges&&(t.edges=[]),t.edges[e-x.MIN_DFA_EDGE]=n,n)},x.prototype.addDFAState=function(t){for(var e=new a(null,t),n=null,r=0;r0&&(o=this.getAltThatFinishedDecisionEntryRule(i))!==a.INVALID_ALT_NUMBER?o:a.INVALID_ALT_NUMBER},N.prototype.getAltThatFinishedDecisionEntryRule=function(t){for(var e=[],n=0;n0||r.state instanceof x&&r.context.hasEmptyPath())&&e.indexOf(r.alt)<0&&e.push(r.alt)}return 0===e.length?a.INVALID_ALT_NUMBER:Math.min.apply(null,e)},N.prototype.splitAccordingToSemanticValidity=function(t,e){for(var n=new c(t.fullCtx),r=new c(t.fullCtx),i=0;i50))throw"problem";if(t.state instanceof x){if(!t.context.isEmpty()){for(var a=0;a=0&&(p+=1);this.closureCheckingStopState(h,e,n,c,i,p,s)}}},N.prototype.canDropLoopEntryEdgeInLeftRecursiveRule=function(t){var e=t.state;if(e.stateType!=l.STAR_LOOP_ENTRY)return!1;if(e.stateType!=l.STAR_LOOP_ENTRY||!e.isPrecedenceDecision||t.context.isEmpty()||t.context.hasEmptyPath())return!1;for(var n=t.context.length,r=0;r=0?this.parser.ruleNames[t]:""},N.prototype.getEpsilonTarget=function(t,e,n,r,i,o){switch(e.serializationType){case S.RULE:return this.ruleTransition(t,e);case S.PRECEDENCE:return this.precedenceTransition(t,e,n,r,i);case S.PREDICATE:return this.predTransition(t,e,n,r,i);case S.ACTION:return this.actionTransition(t,e);case S.EPSILON:return new u({state:e.target},t);case S.ATOM:case S.RANGE:case S.SET:return o&&e.matches(h.EOF,0,1)?new u({state:e.target},t):null;default:return null}},N.prototype.actionTransition=function(t,e){if(this.debug){var n=-1==e.actionIndex?65535:e.actionIndex;console.log("ACTION edge "+e.ruleIndex+":"+n)}return new u({state:e.target},t)},N.prototype.precedenceTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&i)if(o){var a=this._input.index;this._input.seek(this._startIndex);var l=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(a),l&&(s=new u({state:e.target},t))}else{var c=v.andContext(t.semanticContext,e.getPredicate());s=new u({state:e.target,semanticContext:c},t)}else s=new u({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},N.prototype.predTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.ruleIndex+":"+e.predIndex+", ctx dependent="+e.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&(e.isCtxDependent&&i||!e.isCtxDependent))if(o){var a=this._input.index;this._input.seek(this._startIndex);var l=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(a),l&&(s=new u({state:e.target},t))}else{var c=v.andContext(t.semanticContext,e.getPredicate());s=new u({state:e.target,semanticContext:c},t)}else s=new u({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},N.prototype.ruleTransition=function(t,e){this.debug&&console.log("CALL rule "+this.getRuleName(e.target.ruleIndex)+", ctx="+t.context);var n=e.followState,r=R.create(t.context,n.stateNumber);return new u({state:e.target,context:r},t)},N.prototype.getConflictingAlts=function(t){var e=y.getConflictingAltSubsets(t);return y.getAlts(e)},N.prototype.getConflictingAltsOrUniqueAlt=function(t){var e=null;return t.uniqueAlt!==a.INVALID_ALT_NUMBER?(e=new o).add(t.uniqueAlt):e=t.conflictingAlts,e},N.prototype.getTokenName=function(t){if(t===h.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},N.prototype.getLookaheadName=function(t){return this.getTokenName(t.LA(1))},N.prototype.dumpDeadEndConfigs=function(t){console.log("dead end configs: ");for(var e=t.getDeadEndConfigs(),n=0;n0){var o=r.state.transitions[0];if(o instanceof AtomTransition)i="Atom "+this.getTokenName(o.label);else if(o instanceof E){i=(o instanceof C?"~":"")+"Set "+o.set}}console.error(r.toString(this.parser,!0)+":"+i)}},N.prototype.noViableAlt=function(t,e,n,r){return new b(this.parser,t,t.get(r),t.LT(1),n,e)},N.prototype.getUniqueAlt=function(t){for(var e=a.INVALID_ALT_NUMBER,n=0;n "+r+" upon "+this.getTokenName(n)),null===r)return null;if(r=this.addDFAState(t,r),null===e||n<-1||n>this.atn.maxTokenType)return r;if(null===e.edges&&(e.edges=[]),e.edges[n+1]=r,this.debug){var i=null===this.parser?null:this.parser.literalNames,o=null===this.parser?null:this.parser.symbolicNames;console.log("DFA=\n"+t.toString(i,o))}return r},N.prototype.addDFAState=function(t,e){if(e==d.ERROR)return e;var n=t.states.get(e);return null!==n?n:(e.stateNumber=t.states.length,e.configs.readOnly||(e.configs.optimizeConfigs(this),e.configs.setReadonly(!0)),t.states.add(e),this.debug&&console.log("adding new DFA state: "+e),e)},N.prototype.reportAttemptingFullContext=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new _(r,i+1);console.log("reportAttemptingFullContext decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,t,r,i,e,n)},N.prototype.reportContextSensitivity=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new _(r,i+1);console.log("reportContextSensitivity decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,t,r,i,e,n)},N.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){if(this.debug||this.retry_debug){var a=new _(n,r+1);console.log("reportAmbiguity "+o+":"+s+", input="+this.parser.getTokenStream().getText(a))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,t,n,r,i,o,s)},e.ParserATNSimulator=N},function(t,e,n){e.DFA=n(42).DFA,e.DFASerializer=n(17).DFASerializer,e.LexerDFASerializer=n(17).LexerDFASerializer,e.PredPrediction=n(11).PredPrediction},function(t,e,n){var r=n(0).Set,i=n(11).DFAState,o=n(3).StarLoopEntryState,s=n(9).ATNConfigSet,a=n(17).DFASerializer,l=n(17).LexerDFASerializer;function u(t,e){if(void 0===e&&(e=0),this.atnStartState=t,this.decision=e,this._states=new r,this.s0=null,this.precedenceDfa=!1,t instanceof o&&t.isPrecedenceDecision){this.precedenceDfa=!0;var n=new i(null,new s);n.edges=[],n.isAcceptState=!1,n.requiresFullContext=!1,this.s0=n}return this}u.prototype.getPrecedenceStartState=function(t){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return t<0||t>=this.s0.edges.length?null:this.s0.edges[t]||null},u.prototype.setPrecedenceStartState=function(t,e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";t<0||(this.s0.edges[t]=e)},u.prototype.setPrecedenceDfa=function(t){if(this.precedenceDfa!==t){if(this._states=new DFAStatesSet,t){var e=new i(null,new s);e.edges=[],e.isAcceptState=!1,e.requiresFullContext=!1,this.s0=e}else this.s0=null;this.precedenceDfa=t}},Object.defineProperty(u.prototype,"states",{get:function(){return this._states}}),u.prototype.sortedStates=function(){return this._states.values().sort(function(t,e){return t.stateNumber-e.stateNumber})},u.prototype.toString=function(t,e){return t=t||null,e=e||null,null===this.s0?"":new a(this,t,e).toString()},u.prototype.toLexerString=function(){return null===this.s0?"":new l(this).toString()},e.DFA=u},function(t,e,n){var r=n(4);e.Trees=n(21).Trees,e.RuleNode=r.RuleNode,e.ParseTreeListener=r.ParseTreeListener,e.ParseTreeVisitor=r.ParseTreeVisitor,e.ParseTreeWalker=r.ParseTreeWalker},function(t,e,n){e.RecognitionException=n(5).RecognitionException,e.NoViableAltException=n(5).NoViableAltException,e.LexerNoViableAltException=n(5).LexerNoViableAltException,e.InputMismatchException=n(5).InputMismatchException,e.FailedPredicateException=n(5).FailedPredicateException,e.DiagnosticErrorListener=n(45).DiagnosticErrorListener,e.BailErrorStrategy=n(30).BailErrorStrategy,e.ErrorListener=n(16).ErrorListener},function(t,e,n){var r=n(0).BitSet,i=n(16).ErrorListener,o=n(2).Interval;function s(t){return i.call(this),t=t||!0,this.exactOnly=t,this}s.prototype=Object.create(i.prototype),s.prototype.constructor=s,s.prototype.reportAmbiguity=function(t,e,n,r,i,s,a){if(!this.exactOnly||i){var l="reportAmbiguity d="+this.getDecisionDescription(t,e)+": ambigAlts="+this.getConflictingAlts(s,a)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(l)}},s.prototype.reportAttemptingFullContext=function(t,e,n,r,i,s){var a="reportAttemptingFullContext d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(a)},s.prototype.reportContextSensitivity=function(t,e,n,r,i,s){var a="reportContextSensitivity d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(a)},s.prototype.getDecisionDescription=function(t,e){var n=e.decision,r=e.atnStartState.ruleIndex,i=t.ruleNames;if(r<0||r>=i.length)return""+n;var o=i[r]||null;return null===o||0===o.length?""+n:n+" ("+o+")"},s.prototype.getConflictingAlts=function(t,e){if(null!==t)return t;for(var n=new r,i=0;i=0&&(this.fetchedEOF?this.index0)||this.fetch(e)>=e},a.prototype.fetch=function(t){if(this.fetchedEOF)return 0;for(var e=0;e=this.tokens.length&&(e=this.tokens.length-1);for(var o=t;o=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[e]},a.prototype.adjustSeekIndex=function(t){return t},a.prototype.lazyInit=function(){-1===this.index&&this.setup()},a.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},a.prototype.setTokenSource=function(t){this.tokenSource=t,this.tokens=[],this.index=-1,this.fetchedEOF=!1},a.prototype.nextTokenOnChannel=function(t,e){if(this.sync(t),t>=this.tokens.length)return-1;for(var n=this.tokens[t];n.channel!==this.channel;){if(n.type===r.EOF)return-1;t+=1,this.sync(t),n=this.tokens[t]}return t},a.prototype.previousTokenOnChannel=function(t,e){for(;t>=0&&this.tokens[t].channel!==e;)t-=1;return t},a.prototype.getHiddenTokensToRight=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.nextTokenOnChannel(t+1,i.DEFAULT_TOKEN_CHANNEL),r=t+1,o=-1===n?this.tokens.length-1:n;return this.filterForChannel(r,o,e)},a.prototype.getHiddenTokensToLeft=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.previousTokenOnChannel(t-1,i.DEFAULT_TOKEN_CHANNEL);if(n===t-1)return null;var r=n+1,o=t-1;return this.filterForChannel(r,o,e)},a.prototype.filterForChannel=function(t,e,n){for(var r=[],o=t;o=this.tokens.length&&(n=this.tokens.length-1);for(var i="",s=e;s=0&&this._parseListeners.splice(e,1),0===this._parseListeners.length&&(this._parseListeners=null)}},p.prototype.removeParseListeners=function(){this._parseListeners=null},p.prototype.triggerEnterRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.map(function(e){e.enterEveryRule(t),t.enterRule(e)})}},p.prototype.triggerExitRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.slice(0).reverse().map(function(e){t.exitRule(e),e.exitEveryRule(t)})}},p.prototype.getTokenFactory=function(){return this._input.tokenSource._factory},p.prototype.setTokenFactory=function(t){this._input.tokenSource._factory=t},p.prototype.getATNWithBypassAlts=function(){var t=this.getSerializedATN();if(null===t)throw"The current parser does not support an ATN with bypass alternatives.";var e=this.bypassAltsAtnCache[t];if(null===e){var n=new l;n.generateRuleBypassTransitions=!0,e=new a(n).deserialize(t),this.bypassAltsAtnCache[t]=e}return e};var f=n(15).Lexer;p.prototype.compileParseTreePattern=function(t,e,n){if(null===(n=n||null)&&null!==this.getTokenStream()){var r=this.getTokenStream().tokenSource;r instanceof f&&(n=r)}if(null===n)throw"Parser can't discover a lexer to use";return new ParseTreePatternMatcher(n,this).compile(t,e)},p.prototype.getInputStream=function(){return this.getTokenStream()},p.prototype.setInputStream=function(t){this.setTokenStream(t)},p.prototype.getTokenStream=function(){return this._input},p.prototype.setTokenStream=function(t){this._input=null,this.reset(),this._input=t},p.prototype.getCurrentToken=function(){return this._input.LT(1)},p.prototype.notifyErrorListeners=function(t,e,n){e=e||null,n=n||null,null===e&&(e=this.getCurrentToken()),this._syntaxErrors+=1;var r=e.line,i=e.column;this.getErrorListenerDispatch().syntaxError(this,e,r,i,t,n)},p.prototype.consume=function(){var t=this.getCurrentToken();t.type!==r.EOF&&this.getInputStream().consume();var e,n=null!==this._parseListeners&&this._parseListeners.length>0;(this.buildParseTrees||n)&&((e=this._errHandler.inErrorRecoveryMode(this)?this._ctx.addErrorNode(t):this._ctx.addTokenNode(t)).invokingState=this.state,n&&this._parseListeners.map(function(t){e instanceof c||void 0!==e.isErrorNode&&e.isErrorNode()?t.visitErrorNode(e):e instanceof u&&t.visitTerminal(e)}));return t},p.prototype.addContextToParseTree=function(){null!==this._ctx.parentCtx&&this._ctx.parentCtx.addChild(this._ctx)},p.prototype.enterRule=function(t,e,n){this.state=e,this._ctx=t,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.exitRule=function(){this._ctx.stop=this._input.LT(-1),null!==this._parseListeners&&this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx},p.prototype.enterOuterAlt=function(t,e){t.setAltNumber(e),this.buildParseTrees&&this._ctx!==t&&null!==this._ctx.parentCtx&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(t)),this._ctx=t},p.prototype.getPrecedence=function(){return 0===this._precedenceStack.length?-1:this._precedenceStack[this._precedenceStack.length-1]},p.prototype.enterRecursionRule=function(t,e,n,r){this.state=e,this._precedenceStack.push(r),this._ctx=t,this._ctx.start=this._input.LT(1),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.pushNewRecursionContext=function(t,e,n){var r=this._ctx;r.parentCtx=t,r.invokingState=e,r.stop=this._input.LT(-1),this._ctx=t,this._ctx.start=r.start,this.buildParseTrees&&this._ctx.addChild(r),null!==this._parseListeners&&this.triggerEnterRuleEvent()},p.prototype.unrollRecursionContexts=function(t){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);var e=this._ctx;if(null!==this._parseListeners)for(;this._ctx!==t;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=t;e.parentCtx=t,this.buildParseTrees&&null!==t&&t.addChild(e)},p.prototype.getInvokingContext=function(t){for(var e=this._ctx;null!==e;){if(e.ruleIndex===t)return e;e=e.parentCtx}return null},p.prototype.precpred=function(t,e){return e>=this._precedenceStack[this._precedenceStack.length-1]},p.prototype.inContext=function(t){return!1},p.prototype.isExpectedToken=function(t){var e=this._interp.atn,n=this._ctx,i=e.states[this.state],o=e.nextTokens(i);if(o.contains(t))return!0;if(!o.contains(r.EPSILON))return!1;for(;null!==n&&n.invokingState>=0&&o.contains(r.EPSILON);){var s=e.states[n.invokingState].transitions[0];if((o=e.nextTokens(s.followState)).contains(t))return!0;n=n.parentCtx}return!(!o.contains(r.EPSILON)||t!==r.EOF)},p.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},p.prototype.getExpectedTokensWithinCurrentRule=function(){var t=this._interp.atn,e=t.states[this.state];return t.nextTokens(e)},p.prototype.getRuleIndex=function(t){var e=this.getRuleIndexMap()[t];return null!==e?e:-1},p.prototype.getRuleInvocationStack=function(t){null===(t=t||null)&&(t=this._ctx);for(var e=[];null!==t;){var n=t.ruleIndex;n<0?e.push("n/a"):e.push(this.ruleNames[n]),t=t.parentCtx}return e},p.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},p.prototype.dumpDFA=function(){for(var t=!1,e=0;e0&&(t&&console.log(),this.printer.println("Decision "+n.decision+":"),this.printer.print(n.toString(this.literalNames,this.symbolicNames)),t=!0)}},p.prototype.getSourceName=function(){return this._input.sourceName},p.prototype.setTrace=function(t){t?(null!==this._tracer&&this.removeParseListener(this._tracer),this._tracer=new h(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)},e.Parser=p},function(t,e,n){var r=n(12),i=["悋Ꜫ脳맭䅼㯧瞆奤","ŝ\b\t\t","\t\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v","\f\t\f\r\t\r\t\t","\t\t\t\t","\t\t\t","\t\t\t\t","\t\t\t","\t\t \t ","","","","","","","","","","","","","","\b\b\t\t\n\n","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\v\v\v\v\v","\v\f\f\r\r","","Ó\n\fÖ","\v","Ü\n\fß\v","ã\n\fæ\v","ê\n","ï\n\fò","\v","ù\n","þ\n\fā\v","Ĉ\n","","","ę\n","Ĝ\n","ġ\n\rĢ","","ī\n\fĮ\v","","","Ŀ\n\fł","\v","Ō\n\f","ŏ\v ","    ŗ\n \f  Ś\v  "," ÔĬŀ!","\t\v\r\b\t\n\v\f\r","!#%","')+-/13579",";=?__C\\","2;C\\aac|c|$$^^\n$$11^^dd","hhppttvv))^^\n))11^^ddhhppttvv2;CHch",'\v\v""\f\f==~~',"ũ","\t","\v\r","","","","","!","#%","35","79;","=?","AI","K\t„","\v†\rˆ","“•","—™","ÄÆ","ÈÊ","Ì!Ù","#à%é'ë",")õ+ú","-Ą/ĉ","1ď3đ","5ě7Ġ","9Ħ;Ĵ=Ň","?ŒABi","BCtCDcDEo","EFoFGcGHtH","IJ=J","KLuLMvMNc","NOvOPGPQzQR","rRStSTUTUr","UVnVWkWXv",'XY"YZ<Z["[\\',")\\]?]^?^_",'?_`"`auabv',"bcccdvdeg","efofggghphi",'vij"jk`kl"',"lm?mn?no?",'op"pqgqrzrs',"rstttuguvu","vwuwxkxyq",'yzpz{"{|x|}','"}~?~?',"€?€)‚",'"‚ƒ=ƒ\b',"„…<…\n","†‡~‡\f","ˆ‰g‰ŠzŠ","‹r‹ŒtŒ","gŽuŽ","uk‘q","‘’p’","“”A”","•–-–","—˜,˜","™šOš›g","›œcœp","žkžŸpŸ ","i ¡h¡¢","w¢£n£¤U","¤¥r¥¦n","¦§k§¨v¨",'©"©ª<ª«','"«¬)¬­',"?­®?®¯?",'¯°"°±o',"±²g²³c³","´p´µkµ¶","p¶·i·¸","h¸¹w¹ºn",'º»"»¼`','¼½"½¾?¾',"¿?¿À?ÀÁ",')ÁÂ"ÂÃ',"=ÃÄÅ","*ÅÆÇ","+ÇÈÉ","€ÉÊË","0ËÌÔ","]ÍÎ^ÎÓ^","ÏÐ^ÐÓ_","ÑÓ\nÒÍ","ÒÏÒÑ","ÓÖÔÕ","ÔÒÕ×","ÖÔר_","Ø ÙÝ\tÚ","Ü\tÛÚÜ","ßÝÛÝ",'ÞÞ"ß',"Ýàä\tá","ã\tâáã","æäâä","åå$æ","äçê+è","ê'éçé","èê&ë","ð$ìï)íï","\nîìîí","ïòðî","ðññó","òðóô","$ô(õø","^öù\t÷ù/","øöø÷","ù*úÿ)","ûþ-üþ\n\býû","ýüþā","ÿýÿĀ","ĀĂāÿ","Ăă)ă,","Ąć^ąĈ\t\t","ĆĈ/ćą","ćĆĈ.","ĉĊwĊċ1","ċČ1Čč1č","Ď1Ď0ďĐ","\t\nĐ2đĒ%","Ēē!ēĔ","Ĕĕ\bĕ4","ĖĘėę\f","ĘėĘę","ęĜĚĜ\f","ěĖěĚ","ĜĝĝĞ\b","Ğ6ğġ\t\vĠ","ğġĢĢ","ĠĢģģ","ĤĤĥ\bĥ","8Ħħ1ħĨ",",ĨĬĩī","\vĪĩīĮ","ĬĭĬĪ","ĭįĮĬ","įİ,İı","1ıIJIJij","\bij:Ĵĵ","hĵĶtĶķc","ķĸiĸĹo","ĹĺgĺĻpĻ","ļvļŀĽ","Ŀ\vľĽĿ","łŀŁŀ","ľŁŃł","ŀŃń=ń","ŅŅņ\bņ","<Ňň1ňʼn","1ʼnōŊŌ","\n\fŋŊŌŏ","ōŋōŎ","ŎŐŏō","Őő\bő>","Œœ/œŔ@","ŔŘŕŗ\n\r","ŖŕŗŚ","ŘŖŘř","řśŚŘ","śŜ\b Ŝ@","ÒÔÝäéîðøýÿćĘ","ěĢĬŀōŘ\b"].join(""),o=(new r.atn.ATNDeserializer).deserialize(i),s=o.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)});function a(t){return r.Lexer.call(this,t),this._interp=new r.atn.LexerATNSimulator(this,o,s,new r.PredictionContextCache),this}a.prototype=Object.create(r.Lexer.prototype),a.prototype.constructor=a,a.EOF=r.Token.EOF,a.T__0=1,a.T__1=2,a.T__2=3,a.T__3=4,a.T__4=5,a.T__5=6,a.T__6=7,a.T__7=8,a.T__8=9,a.T__9=10,a.T__10=11,a.T__11=12,a.T__12=13,a.T__13=14,a.Brackets=15,a.LexerIdentifier=16,a.ParserIdentifier=17,a.String=18,a.LabelForParserRule=19,a.Newline=20,a.WhiteSpace=21,a.BlockComment=22,a.FragmentComment=23,a.LineComment=24,a.ArrowComment=25,a.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],a.prototype.modeNames=["DEFAULT_MODE"],a.prototype.literalNames=[null,"'grammar'","';'","'statExprSplit : '=== statement ^ === expression v ===' ;'","':'","'|'","'expression'","'?'","'+'","'*'","'MeaningfulSplit : '=== meaningful ^ ===' ;'","'('","')'","'~'","'.'"],a.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Brackets","LexerIdentifier","ParserIdentifier","String","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],a.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","Brackets","LexerIdentifier","ParserIdentifier","String","STRING_double","ESC_double","STRING_single","ESC_single","UNICODE","HEX","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],a.prototype.grammarFileName="BlocklyGrammer.g4",e.BlocklyGrammerLexer=a},function(t,e,n){var r=n(12),i=n(20).BlocklyGrammerVisitor,o=["悋Ꜫ脳맭䅼㯧瞆奤","Õ\t\t","\t\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v\f\t\f","\r\t\r\n\f"," \v$\n","\f'\v","","","8\n\r9","@\n\fC\v","F\n","L\n","Q\nS\n\fV\v","\\","\n\f_\vb\n","f\n\f","i\v\b\b\b\bn\n\b\bp\n\b","\b\b\b\bu\n\b\bw\n\b\b\b\b","\b|\n\b\b~\n\b\b\b\b\bƒ\n\b","\b…\n\b\b‡\n\b\t\tŠ\n\t\f\t","\t\v\t\n\n\v\v\v","\v\v\v\v\v\v","\v\v›\n\v\r\v\vœ","\v\v\v\v\v\v","\v\v¦\n\v\f\f\f\f«","\n\f\f­\n\f\f¯\n\f\r\f\f°\r","\r\r\r\r\r\r\r\r\r","\r\r\r\r\r\rÂ\n\r\r\r","\r\r\r\r\r\r\r\r","\rÎ\n\r\rÐ\n\r\f\r\rÓ\v\r\r","%‹\b\n\f","\t\v","\n\vð,","0\bE","\na\fc†","‹Ž","¥®","Á","\b"," ","!"," !%",'"$\n#"$\'',"%&%#","&('%()","\t)*\n*+\t+",",--../","/01","12334","4756","687589","979::;",";F<==A",">@\b?>@","CA?AB","BDCADF","E2E<F\t","GH\bHK","IL\fJLKI","KJLTMP","NQ\fOQPN","POQS","RMSVTR","TUUWVT","WbXYY]","Z\\\b[Z","\\_][]^","^`_]`b","aGaX","b\vcg\bdf","\bedfige","ghh\r","igjo\bkm\t","ln\tmlmn","npokop","p‡qv","rt\tsu\tts","tuuwvr","vww‡x}","y{\tz|\t{z","{||~","}y}~~‡","„€‚\t","ƒ\t‚","‚ƒƒ…","„€„…","…‡†j","†q†x","†‡","ˆŠ\v‰ˆ","Š‹Œ","‹‰Œ","‹Ž\f","‘","‘’’“\f","“””¦","•––—","—š\f˜™","™›\fš˜","›œœš","œž","žŸŸ¦"," ¡¡¢","¢£\r£¤","¤¦¥","¥•¥ ","¦§¬","¨ª\t©«\t","ª©ª«","«­¬¨","¬­­¯","®§¯°","°®°±","±²³\b\r³","´\r´µ\rµ¶","¶Â·¸","¸Â\r\b¹Â","º»»¼","¼½½Â","¾Â¿Â","ÀÂÁ²","Á·Á¹","ÁºÁ¾","Á¿ÁÀ","ÂÑÃÄ\f","\vÄÅÅÐ","\r\fÆÇ\f\nÇÐ\r\v","ÈÉ\f\rÉÐ\tÊË","\f\fËÍ\tÌÎ\t","ÍÌÍÎ","ÎÐÏÃ","ÏÆÏÈ","ÏÊÐÓ","ÑÏÑÒ","ÒÓÑ"," %9AEKPT]agmotv{}‚„†‹œ¥","ª¬°ÁÍÏÑ"].join(""),s=(new r.atn.ATNDeserializer).deserialize(o),a=s.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)}),l=new r.PredictionContextCache,u=[null,"'grammar'","';'","'statExprSplit : '=== statement ^ === expression v ===' ;'","':'","'|'","'expression'","'?'","'+'","'*'","'MeaningfulSplit : '=== meaningful ^ ===' ;'","'('","')'","'~'","'.'"],c=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"Brackets","LexerIdentifier","ParserIdentifier","String","LabelForParserRule","Newline","WhiteSpace","BlockComment","FragmentComment","LineComment","ArrowComment"],h=["grammarFile","grammerDecl","statExprSplit","statementRule","expressionRule","arithmeticRuleCollection","parserRuleAtom","lexerRuleCollection","meaningfulSplit","lexerRule","strings","lexerRuleExpr"];function p(t){return r.Parser.call(this,t),this._interp=new r.atn.ParserATNSimulator(this,s,a,l),this.ruleNames=h,this.literalNames=u,this.symbolicNames=c,this}function f(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_grammarFile,this}function d(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_grammerDecl,this}function y(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_statExprSplit,this}function g(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_statementRule,this}function v(t,e){return g.call(this,t),g.prototype.copyFrom.call(this,e),this}function x(t,e){return g.call(this,t),g.prototype.copyFrom.call(this,e),this}function m(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_expressionRule,this}function _(t,e){return m.call(this,t),m.prototype.copyFrom.call(this,e),this}function T(t,e){return m.call(this,t),m.prototype.copyFrom.call(this,e),this}function S(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_arithmeticRuleCollection,this}function E(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_parserRuleAtom,this}function C(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function A(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function k(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function b(t,e){return E.call(this,t),E.prototype.copyFrom.call(this,e),this}function R(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRuleCollection,this}function L(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_meaningfulSplit,this}function N(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRule,this}function I(t,e){return N.call(this,t),N.prototype.copyFrom.call(this,e),this}function O(t,e){return N.call(this,t),N.prototype.copyFrom.call(this,e),this}function P(t,e){return N.call(this,t),N.prototype.copyFrom.call(this,e),this}function w(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_strings,this}function F(t,e,n){return void 0===e&&(e=null),void 0!==n&&null!==n||(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=p.RULE_lexerRuleExpr,this}p.prototype=Object.create(r.Parser.prototype),p.prototype.constructor=p,Object.defineProperty(p.prototype,"atn",{get:function(){return s}}),p.EOF=r.Token.EOF,p.T__0=1,p.T__1=2,p.T__2=3,p.T__3=4,p.T__4=5,p.T__5=6,p.T__6=7,p.T__7=8,p.T__8=9,p.T__9=10,p.T__10=11,p.T__11=12,p.T__12=13,p.T__13=14,p.Brackets=15,p.LexerIdentifier=16,p.ParserIdentifier=17,p.String=18,p.LabelForParserRule=19,p.Newline=20,p.WhiteSpace=21,p.BlockComment=22,p.FragmentComment=23,p.LineComment=24,p.ArrowComment=25,p.RULE_grammarFile=0,p.RULE_grammerDecl=1,p.RULE_statExprSplit=2,p.RULE_statementRule=3,p.RULE_expressionRule=4,p.RULE_arithmeticRuleCollection=5,p.RULE_parserRuleAtom=6,p.RULE_lexerRuleCollection=7,p.RULE_meaningfulSplit=8,p.RULE_lexerRule=9,p.RULE_strings=10,p.RULE_lexerRuleExpr=11,f.prototype=Object.create(r.ParserRuleContext.prototype),f.prototype.constructor=f,f.prototype.grammerDecl=function(){return this.getTypedRuleContext(d,0)},f.prototype.statExprSplit=function(){return this.getTypedRuleContext(y,0)},f.prototype.lexerRuleCollection=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(R):this.getTypedRuleContext(R,t)},f.prototype.meaningfulSplit=function(){return this.getTypedRuleContext(L,0)},f.prototype.statementRule=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(g):this.getTypedRuleContext(g,t)},f.prototype.expressionRule=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(m):this.getTypedRuleContext(m,t)},f.prototype.accept=function(t){return t instanceof i?t.visitGrammarFile(this):t.visitChildren(this)},p.GrammarFileContext=f,p.prototype.grammarFile=function(){var t=new f(this,this._ctx,this.state);this.enterRule(t,0,p.RULE_grammarFile);try{this.enterOuterAlt(t,1),this.state=24,this.grammerDecl(),this.state=28,this._errHandler.sync(this);for(var e=this._interp.adaptivePredict(this._input,0,this._ctx);1!=e&&e!=r.atn.ATN.INVALID_ALT_NUMBER;)2===e&&(this.state=25,this.statementRule()),this.state=30,this._errHandler.sync(this),e=this._interp.adaptivePredict(this._input,0,this._ctx);this.state=31,this.statExprSplit(),this.state=35,this._errHandler.sync(this);for(e=this._interp.adaptivePredict(this._input,1,this._ctx);1!=e&&e!=r.atn.ATN.INVALID_ALT_NUMBER;)2===e&&(this.state=32,this.expressionRule()),this.state=37,this._errHandler.sync(this),e=this._interp.adaptivePredict(this._input,1,this._ctx);this.state=38,this.lexerRuleCollection(),this.state=39,this.meaningfulSplit(),this.state=40,this.lexerRuleCollection()}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},d.prototype=Object.create(r.ParserRuleContext.prototype),d.prototype.constructor=d,d.prototype.LexerIdentifier=function(){return this.getToken(p.LexerIdentifier,0)},d.prototype.accept=function(t){return t instanceof i?t.visitGrammerDecl(this):t.visitChildren(this)},p.GrammerDeclContext=d,p.prototype.grammerDecl=function(){var t=new d(this,this._ctx,this.state);this.enterRule(t,2,p.RULE_grammerDecl);try{this.enterOuterAlt(t,1),this.state=42,this.match(p.T__0),this.state=43,this.match(p.LexerIdentifier),this.state=44,this.match(p.T__1)}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},y.prototype=Object.create(r.ParserRuleContext.prototype),y.prototype.constructor=y,y.prototype.accept=function(t){return t instanceof i?t.visitStatExprSplit(this):t.visitChildren(this)},p.StatExprSplitContext=y,p.prototype.statExprSplit=function(){var t=new y(this,this._ctx,this.state);this.enterRule(t,4,p.RULE_statExprSplit);try{this.enterOuterAlt(t,1),this.state=46,this.match(p.T__2)}catch(e){if(!(e instanceof r.error.RecognitionException))throw e;t.exception=e,this._errHandler.reportError(this,e),this._errHandler.recover(this,e)}finally{this.exitRule()}return t},g.prototype=Object.create(r.ParserRuleContext.prototype),g.prototype.constructor=g,g.prototype.copyFrom=function(t){r.ParserRuleContext.prototype.copyFrom.call(this,t)},v.prototype=Object.create(g.prototype),v.prototype.constructor=v,p.StatValueContext=v,v.prototype.ParserIdentifier=function(){return this.getToken(p.ParserIdentifier,0)},v.prototype.parserRuleAtom=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(E):this.getTypedRuleContext(E,t)},v.prototype.accept=function(t){return t instanceof i?t.visitStatValue(this):t.visitChildren(this)},x.prototype=Object.create(g.prototype),x.prototype.constructor=x,p.StatListContext=x,x.prototype.ParserIdentifier=function(t){return void 0===t&&(t=null),null===t?this.getTokens(p.ParserIdentifier):this.getToken(p.ParserIdentifier,t)},x.prototype.accept=function(t){return t instanceof i?t.visitStatList(this):t.visitChildren(this)},p.StatementRuleContext=g,p.prototype.statementRule=function(){var t=new g(this,this._ctx,this.state);this.enterRule(t,6,p.RULE_statementRule);var e=0;try{switch(this.state=67,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,4,this._ctx)){case 1:t=new x(this,t),this.enterOuterAlt(t,1),this.state=48,this.match(p.ParserIdentifier),this.state=49,this.match(p.T__3),this.state=50,this.match(p.ParserIdentifier),this.state=53,this._errHandler.sync(this),e=this._input.LA(1);do{this.state=51,this.match(p.T__4),this.state=52,this.match(p.ParserIdentifier),this.state=55,this._errHandler.sync(this),e=this._input.LA(1)}while(e===p.T__4);this.state=57,this.match(p.T__1);break;case 2:for(t=new v(this,t),this.enterOuterAlt(t,2),this.state=58,this.match(p.ParserIdentifier),this.state=59,this.match(p.T__3),this.state=63,this._errHandler.sync(this),e=this._input.LA(1);0==(-32&e)&&0!=(1<1)for(var i,o=0;i=t[1][o];o++)e[i]&&this.error("语句 "+i+" 同时在两个语句集合 "+e[i]+" 和 "+t[0]+" 中出现了"),e[i]=t[0],n(this.statementRules,i).length>1&&this.error(t[0]+" 下的子规则 "+i+' 包含了"|"');var s;for(r=0;s=this.expressionRules[r];r++)s[1].length>1&&"expression"!==s[0]&&this.error("表达式 "+s[0]+' 包含了"|"')},SymbolVisitor.prototype.visitGrammarFile=function(t){return this.visit(t.grammerDecl()),this.visit(t.statementRule()),this.visit(t.expressionRule()),this.visit(t.lexerRuleCollection(0)),this},SymbolVisitor.prototype.visitGrammerDecl=function(t){this.grammerName=t.children[1].getText()},SymbolVisitor.prototype.visitStatList=function(t){for(var e,n=t.ParserIdentifier(),r=0;e=n[r];r++)n[r]=e.getText();var i=n.shift();this.statementRules.push([i,n])},SymbolVisitor.prototype.visitStatValue=function(t){var e=t.ParserIdentifier(0).getText();this.statementRules.push([e,[e]])},SymbolVisitor.prototype.visitExprExpression=function(t){var e=[];this.expression_arithmetic_num=t.arithmeticRuleCollection().length;for(var n=0;n1){this.notEntry[t[e]]=!0;for(var n,r=0;n=o.check[r];r++){var i=this.getRule("statement",n);i.blockjs.nextStatement=o.check,this.setRule("statement",n,i),this.notEntry[n]=!0}}for(e=0;o=this.statementRules[t[e]];e++)this.notEntry[t[e]]||(this.notEntry[t[e]]=!1,delete o.blockjs.previousStatement,delete o.blockjs.nextStatement,delete o.blockjs.inputsInline,o.blockjs.colour=this.entryColor);var o,s=[],a=[];for(e=0;o=this.statementRules[t[e]];e++)if(o.check.length>1)a.push([t[e],o]);else{s.push(o),o.type="statement";var l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))},h="Blockly."+this.generLanguage+".";l.push(u+"function(block) {\n"),c(1);for(r=0;y=o.blockobj.args[r];r++){var p=this.varPrefix+o.blockobj.vars[r];if(y.id&&"field_image"!=y.data.type)"value"===y.blockType?(l.push(u+"var "+p+" = "+h+"valueToCode(block, '"),l.push(p+"', \n "+u+h+this.recieveOrder+")")):"statement"===y.blockType?(l.push(u+"var "+p+" = "+h+"statementToCode(block, '"),l.push(p+"')")):(l.push(u+"var "+p+" = block.getFieldValue('"),l.push(p+"')")),"field_checkbox"===y.data.type&&l.push(" === 'TRUE'"),l.push(";\n"),y.multi,{field_checkbox:!0,field_dropdown:!0,field_number:!0,field_colour:!0,field_angle:!0,field_image:!0}[y.data.type]||y.omitted||(l.push(u+"if ("+p+"==='') {\n"),c(1),l.push(u+"throw new OmitedError(block,'"+p+"','"),l.push(t[e]+"');\n"),c(-1),l.push(u+"}\n")),"field"===y.blockType&&(l.push(u+p+" = "+this.grammerName+"Functions.pre('"),l.push(y.id+"')("+p+");\n"))}o.blockobj.inject.generFunc?(o.blockobj.inject.override&&(c(-9999),(l=[]).push(u+"function(block) {\n"),c(1)),l.push(u+o.blockobj.inject.generFunc.split("\n").join("\n"+u)),l.push("\n")):(l.push(u+"var code = '1111111111;\\n';\n"),l.push(u+"return code;\n")),c(-1),l.push(u+"}"),o.generFunc=l.join("")}t=Object.keys(this.expressionRules);var f;for(e=0;f=this.expressionRules[t[e]];e++)if(f.check.length>1)a.push([t[e],f]);else{s.push(f),f.type="value";l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))},h="Blockly."+this.generLanguage+".";l.push(u+"function(block) {\n"),c(1);for(r=0;y=f.blockobj.args[r];r++){p=this.varPrefix+f.blockobj.vars[r];if(y.id)"value"===y.blockType?(l.push(u+"var "+p+" = "+h+"valueToCode(block, '"),l.push(p+"', \n "+u+h+this.recieveOrder+")")):"statement"===y.blockType?(l.push(u+"var "+p+" = "+h+"statementToCode(block, '"),l.push(p+"')")):(l.push(u+"var "+p+" = block.getFieldValue('"),l.push(p+"')")),"field_checkbox"===y.data.type&&l.push(" === 'TRUE'"),l.push(";\n"),y.multi,{field_checkbox:!0,field_dropdown:!0,field_number:!0,field_colour:!0,field_angle:!0,field_image:!0}[y.data.type]||y.omitted||(l.push(u+"if ("+p+"==='') {\n"),c(1),l.push(u+"throw new OmitedError(block,'"+p+"','"),l.push(t[e]+"');\n"),c(-1),l.push(u+"}\n")),"field"===y.blockType&&(l.push(u+p+" = "+this.grammerName+"Functions.pre('"),l.push(y.id+"')("+p+");\n"))}f.blockobj.inject.generFunc?(f.blockobj.inject.override&&(c(-9999),(l=[]).push(u+"function(block) {\n"),c(1)),l.push(u+f.blockobj.inject.generFunc.split("\n").join("\n"+u)),l.push("\n")):(l.push(u+"var code = 0000000000;\n"),l.push(u+"return [code, "+h+this.sendOrder+"];\n")),c(-1),l.push(u+"}"),f.generFunc=l.join("")}var d;for(e=0;d=s[e];e++){d.args=[],d.argsType=[],d.argsGrammarName=[],d.fieldDefault=[];var y;for(r=0;y=d.blockobj.args[r];r++)y.id&&"field_image"!=y.data.type&&(d.args.push(d.blockobj.vars[r]),d.argsType.push(y.blockType),d.argsGrammarName.push(y.id),d.fieldDefault.push(d.blockobj.fieldDefault[r]));l=[],u="",c=function(t){t>0&&(u+=Array(2*t+1).join(" ")),t<0&&(u=u.slice(0,2*t))};var g=this.grammerName,v=d.check[0];l.push(u+"function (inputs,isShadow,comment) {\n"),c(1),l.push(u+"return "+g+"Functions.xmlText('"),l.push(v+"',inputs,isShadow,comment);\n"),c(-1),l.push(u+"}"),d.xmlText=l.join("")}this.temp_xml=s,this.temp_collection=a},EvalVisitor.prototype.generBlocks=function(){var t=[],e="",n=function(t){t>0&&(e+=Array(2*t+1).join(" ")),t<0&&(e=e.slice(0,2*t))};temp_xml=this.temp_xml,delete this.temp_xml,temp_collection=this.temp_collection,delete this.temp_collection,t.push(e+"// 语句集合和表达式集合\n"),t.push(e+this.grammerName+"Blocks = {\n"),n(1);for(var r,i=0;r=temp_collection[i];i++)t.push(e+'"'+r[0]+'": '),t.push(JSON.stringify(r[1].check,null,2).split("\n").join("\n"+e)),t.push(",\n");function o(t,e,n){var r=e.blockjs,i=JSON.stringify(r).split("\n").join("\n"+n),o={};r=JSON.parse(i);for(var s,a=0;s=e.blockobj.args[a];a++)if(s.id){var l=t.getRule(s.blockType,s.id);l&&1!==l.check.length&&(r.args0[a].check="1_fry2_3_inrgv"+s.id,o['"1_fry2_3_inrgv'+s.id+'"']=t.grammerName+"Blocks."+s.id)}if(r.nextStatement)for(var u,c=0;u=temp_collection[c];c++)if(-1!==u[1].check.indexOf(r.type)){r.nextStatement="1_fry2_3_inrgv"+u[0],o['"1_fry2_3_inrgv'+u[0]+'"']=t.grammerName+"Blocks."+u[0];break}for(var h in i=JSON.stringify(r,null,2).split("\n").join("\n"+n),o)i=i.split(h).join(o[h]);return i}t.pop(),t.push("\n"),n(-1),t.push(e+"}\n"),t.push(e+"// 域,提供外部引用_List和_Img,修改生成的此处的代码是不会实际修改域的,这一段可以删除\n"),t.push(e+this.grammerName+"Blocks = Object.assign("),t.push(this.grammerName+"Blocks,"),t.push(JSON.stringify(this.lexerRules,null,2).split("\n").join("\n"+e)),t.push(e+");\n"),t.push(e+"// 所有方块的实际内容\n"),t.push(e+this.grammerName+"Blocks = Object.assign("),t.push(this.grammerName+"Blocks,{\n"),n(1);var s;for(i=0;s=temp_xml[i];i++)t.push(e+'"'+s.check[0]+'": {\n'),n(1),t.push(e+'"type": "'+s.type+'",\n'),t.push(e+'"json": '),t.push(o(this,s,e)),t.push(",\n"),t.push(e+'"generFunc": '),t.push(s.generFunc.split("\n").join("\n"+e)),t.push(",\n"),t.push(e+'"args": '),t.push(JSON.stringify(s.args,null,2).split("\n").join("\n"+e)),t.push(",\n"),t.push(e+'"argsType": '),t.push(JSON.stringify(s.argsType,null,0)),t.push(",\n"),t.push(e+'"argsGrammarName": '),t.push(JSON.stringify(s.argsGrammarName,null,0)),t.push(",\n"),t.push(e+'"fieldDefault": '),t.push(JSON.stringify(s.fieldDefault,null,0)),t.push(",\n"),t.push(e+'"menu": '),t.push(s.blockobj.inject.menu||"[]"),t.push(",\n"),t.push(e+'"xmlText": '),t.push(s.xmlText.split("\n").join("\n"+e)),t.push("\n"),n(-1),t.push(e+"},\n");t.pop(),t.push(e+"}\n"),n(-1),t.push(e+"});\n"),this.blocks=t.join("")},EvalVisitor.prototype.SpeicalLexerRule=function(t){var e={};return"Bool"===t?(e={type:"field_checkbox",checked:!0},this.setRule("lexer",t,e),!0):"Int"===t?(e={type:"field_number",value:0,min:0,precision:1},this.setRule("lexer",t,e),!0):"Number"===t?(e={type:"field_number",value:0},this.setRule("lexer",t,e),!0):"Colour"===t?(e={type:"field_colour",colour:"#ff0000"},this.setRule("lexer",t,e),!0):"Angle"===t?(e={type:"field_angle",angle:90},this.setRule("lexer",t,e),!0):"BGNL"===t&&(e={type:"input_dummy"},this.setRule("lexer",t,e),!0)},EvalVisitor.prototype.visitGrammarFile=function(t){this.visit(t.lexerRuleCollection(0)),this.visit(t.statementRule()),this.expression_arithmetic_num=0,this.visit(t.expressionRule()),this.assemble()},EvalVisitor.prototype.visitStrings=function(t){for(var e,n=t.String(),r=0;e=n[r];r++)n[r]=this.escapeString(e.getText());return n.join(" ")},EvalVisitor.prototype.visitLexerRuleStrings=function(t){var e=t.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(e)){var n=this.visit(t.strings(0));this.setRule("lexer",e,n)}},EvalVisitor.prototype.visitLexerRuleList=function(ctx){var lexerId=ctx.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(lexerId))if("_List"===lexerId.slice(-5)||"_Img"===lexerId.slice(-4)){var strings=ctx.strings(),values=this.matchInject(lexerId);values=values?eval(values):[];for(var ii=0,value;value=strings[ii];ii++){var string_=this.visit(value);strings[ii]=[string_,null==values[ii]?string_:values[ii]]}if("_List"===lexerId.slice(-5))var lexervalue={type:"field_dropdown",options:strings};else var lexervalue={type:"field_image",src:strings[0][0],width:strings[1]&&strings[1][0]||0,height:strings[2]&&strings[2][0]||0,alt:"*"};this.setRule("lexer",lexerId,lexervalue)}else this.visitLexerRuleComplex(ctx)},EvalVisitor.prototype.visitLexerRuleComplex=function(t){var e=t.LexerIdentifier(0).getText();if(!this.SpeicalLexerRule(e)){var n={type:"field_input",text:e+"_default"};this.setRule("lexer",e,n)}},EvalVisitor.prototype.visitStatValue=function(t){this.status={name:t.ParserIdentifier(0).getText(),type:"statement",message:[],args:[]},this.visitChildren(t);var e=this.status;delete this.status,this.initAssemble(e)},BlocklyGrammerVisitor.prototype.visitArithmeticRuleCollection=function(t){this.status={name:"expression",type:"value",message:["%1"],args:[{id:"expression",blockType:"value",omitted:!1,data:{type:"input_value"}}]},this.visitChildren(t),this.status.name="expression_arithmetic_"+this.expression_arithmetic_num,this.expression_arithmetic_num++;var e=this.status;delete this.status,this.initAssemble(e)},BlocklyGrammerVisitor.prototype.visitExprValue=function(t){this.status={name:t.ParserIdentifier(0).getText(),type:"value",message:[],args:[]},this.visitChildren(t);var e=this.status;delete this.status,this.initAssemble(e)},EvalVisitor.prototype.visitParserAtomExpr=function(t){var e={id:"expression",blockType:"value",omitted:t.children.length>1,data:{type:"input_value"}};this.status.args.push(e),this.status.message.push("%"+this.status.args.length)},EvalVisitor.prototype.visitParserAtomParserId=function(t){var e=t.children[0].getText(),n=t.children.length>1&&t.children[1].getText()||"",r=this.getRule("value",e)?"value":"statement",i={id:e,blockType:r,omitted:"?"===n||"*"===n,multi:"+"===n||"*"===n,data:{type:"input_"+r}};"value"===r&&i.multi&&this.error(this.status.name+" 下出现了复数组合的表达式 "+e+n),this.status.args.push(i),this.status.message.push("%"+this.status.args.length)},EvalVisitor.prototype.visitParserAtomLexerId=function(t){var e=t.children[0].getText(),n=this.getRule("lexer",e);if(n){var r={id:e,blockType:"field",omitted:t.children.length>1,data:n};"BGNL"===e&&(r={data:n}),"string"!=typeof n?(this.status.args.push(r),this.status.message.push("%"+this.status.args.length)):this.status.message.push(n)}},EvalVisitor.prototype.visitParserAtomStr=function(t){var e=this.escapeString(t.String().getText());this.status.message.push(e)},exports.SymbolVisitor=SymbolVisitor,exports.EvalVisitor=EvalVisitor},function(t,e){e.OmitedError=function(){return"//生成代码中,当一个不允许省略的值或块省略时,会抛出这个错误\nfunction OmitedError(block, var_, rule, fileName, lineNumber) {\n var message = 'no omitted '+var_+' at '+rule;\n var instance = new Error(message, fileName, lineNumber);\n instance.block = block;\n instance.varName = var_;\n instance.blockName = rule;\n instance.name = 'OmitedError';\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n if (Error.captureStackTrace) {\n Error.captureStackTrace(instance, OmitedError);\n }\n return instance;\n}\n\nOmitedError.prototype = Object.create(Error.prototype);\nOmitedError.prototype.constructor = OmitedError;\n//处理此错误的omitedcheckUpdateFunction定义在下面"},e.Functions_pre=function(t){return`${t}Functions.Int_pre = function(intstr) {\n return parseInt(intstr);\n}\n\n${t}Functions.Number_pre = function(intstr) {\n return parseFloat(intstr);\n}\n\n//返回各LexerRule文本域的预处理函数,方便用来统一转义等等\n${t}Functions.pre = function(LexerId) {\n if (${t}Functions.hasOwnProperty(LexerId+'_pre')) {\n return ${t}Functions[LexerId+'_pre'];\n }\n return function(obj){return obj}\n}`},e.Functions_xmlText=function(t){return`//构造这个方法是为了能够不借助workspace,从语法树直接构造图块结构\n//inputs的第i个元素是第i个args的xmlText,null或undefined表示空\n//inputs的第rule.args.length个元素是其下一个语句的xmlText\n${t}Functions.xmlText = function (ruleName,inputs,isShadow,comment) {\n var rule = ${t}Blocks[ruleName];\n var blocktext = isShadow?'shadow':'block';\n var xmlText = [];\n xmlText.push('<'+blocktext+' type="'+ruleName+'">');\n if(!inputs)inputs=[];\n for (var ii=0,inputType;inputType=rule.argsType[ii];ii++) {\n var input = inputs[ii];\n var _input = '';\n var noinput = (input===null || input===undefined);\n if(noinput && inputType==='field') continue;\n if(noinput) input = '';\n if(inputType!=='field') {\n var subList = false;\n var subrulename = rule.argsGrammarName[ii];\n var subrule = ${t}Blocks[subrulename];\n if (subrule instanceof Array) {\n subrulename=subrule[subrule.length-1];\n subrule = ${t}Blocks[subrulename];\n subList = true;\n }\n _input = subrule.xmlText([],true);\n if(noinput && !subList && !isShadow) {\n //无输入的默认行为是: 如果语句块的备选方块只有一个,直接代入方块\n input = subrule.xmlText();\n }\n }\n xmlText.push('<'+inputType+' name="'+rule.args[ii]+'">');\n xmlText.push(_input+input);\n xmlText.push('');\n }\n if(comment){\n xmlText.push('/g,'] ] >'));\n xmlText.push(']]>');\n }\n var next = inputs[rule.args.length];\n if (next) {//next\n xmlText.push('');\n xmlText.push(next);\n xmlText.push('');\n }\n xmlText.push('');\n return xmlText.join('');\n}`},e.Functions_blocksIniter=function(t,e){return`//把各方块的信息注册到Blockly中\n${t}Functions.blocksIniter = function(){\n var blocksobj = ${t}Blocks;\n for(var key in blocksobj) {\n var value = blocksobj[key];\n if(value instanceof Array)continue;\n if(/^[A-Z].*$/.exec(key))continue;\n (function(key,value){\n if (value.menu && value.menu.length) {\n var menuRegisterMixin={\n customContextMenu: function(options) {\n for(var ii=0,op;op=value.menu[ii];ii++){\n var option = {enabled: true};\n option.text = op[0];\n var check = 'function('\n if (option.text.slice(0,check.length)==check){\n option.text=eval('('+option.text+')(this)');\n }\n (function(block,fstr){\n option.callback = function(){\n eval(fstr)\n }\n })(this,op[1]);\n options.push(option);\n }\n }\n };\n value.json.extensions=value.json.extensions||[];\n var mixinName = 'contextMenu_${t}_'+value.json.type\n value.json.extensions.push(mixinName)\n Blockly.Extensions.registerMixin(mixinName,menuRegisterMixin);\n }\n Blockly.Blocks[key] = {\n init: function() {this.jsonInit(value.json);}\n }\n Blockly.${e}[key] = value.generFunc;\n })(key,value);\n }\n}`},e.mainFileTPL=function(t,e,n,r,i,o,s,a){return[`\n\n\n${t} --antlr-blockly`,'\n