diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index a831a758..fb846fdd 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1255,19 +1255,20 @@ return code; setEnemy_s - : '设置怪物属性' ':' '怪物ID' IdString '的' EnemyId_List AssignOperator_List expression Newline + : '设置怪物属性' ':' '怪物ID' IdString '的' EnemyId_List AssignOperator_List expression '不刷新显伤' Bool Newline /* setEnemy_s tooltip : setEnemy:设置某个怪物的属性 helpUrl : /_docs/#/instruction -default : ["greenSlime", "atk", "="] +default : ["greenSlime", "atk", "=", "", false] allEnemys : ['IdString_0'] colour : this.dataColor if (AssignOperator_List_0 && AssignOperator_List_0 != '=') { AssignOperator_List_0 = ', "operator": "' + AssignOperator_List_0 + '"'; } else AssignOperator_List_0 = ''; -var code = '{"type": "setEnemy", "id": "'+IdString_0+'", "name": "'+EnemyId_List_0+'"'+AssignOperator_List_0+', "value": "'+expression_0+'"},\n'; +Bool_0 = Bool_0 ? ', "norefresh": true' : ''; +var code = '{"type": "setEnemy", "id": "'+IdString_0+'", "name": "'+EnemyId_List_0+'"'+AssignOperator_List_0+', "value": "'+expression_0+'"'+Bool_0+'},\n'; return code; */; @@ -1292,13 +1293,13 @@ return code; setEnemyOnPoint_s - : '设置某点怪物属性' ':' 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? '的' EnemyPoint_List AssignOperator_List expression Newline + : '设置某点怪物属性' ':' 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? '的' EnemyPoint_List AssignOperator_List expression '不刷新显伤' Bool Newline /* setEnemyOnPoint_s tooltip : setEnemyOnPoint:设置某个点上怪物的属性 helpUrl : /_docs/#/instruction -default : ["", "", "", "atk", "="] +default : ["", "", "", "atk", "=", "", false] selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] allFloorIds : ['IdString_0'] colour : this.dataColor @@ -1307,35 +1308,37 @@ if (AssignOperator_List_0 && AssignOperator_List_0 != '=') { AssignOperator_List_0 = ', "operator": "' + AssignOperator_List_0 + '"'; } else AssignOperator_List_0 = ''; IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); -var code = '{"type": "setEnemyOnPoint"'+floorstr+IdString_0+', "name": "'+EnemyPoint_List_0+'"'+AssignOperator_List_0+', "value": "'+expression_0+'"},\n'; +Bool_0 = Bool_0 ? ', "norefresh": true' : ''; +var code = '{"type": "setEnemyOnPoint"'+floorstr+IdString_0+', "name": "'+EnemyPoint_List_0+'"'+AssignOperator_List_0+', "value": "'+expression_0+'"'+Bool_0+'},\n'; return code; */; resetEnemyOnPoint_s - : '重置某点怪物属性' ':' 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? Newline + : '重置某点怪物属性' ':' 'x' EvalString? ',' 'y' EvalString? '楼层' IdString? '不刷新显伤' Bool Newline /* resetEnemyOnPoint_s tooltip : resetEnemyOnPoint:重置某个点上怪物的属性 helpUrl : /_docs/#/instruction -default : ["", "", ""] +default : ["", "", "", false] selectPoint : ["EvalString_0", "EvalString_1", "IdString_0"] allFloorIds : ['IdString_0'] colour : this.dataColor var floorstr = MotaActionFunctions.processMultiLoc(EvalString_0, EvalString_1); IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); -var code = '{"type": "resetEnemyOnPoint"'+floorstr+IdString_0+'},\n'; +Bool_0 = Bool_0 ? ', "norefresh": true' : ''; +var code = '{"type": "resetEnemyOnPoint"'+floorstr+IdString_0+Bool_0+'},\n'; return code; */; moveEnemyOnPoint_s - : '移动某点怪物属性' ':' '起点' 'x' PosString? ',' 'y' PosString? '终点' 'x' PosString? 'y' PosString? '楼层' IdString? Newline + : '移动某点怪物属性' ':' '起点' 'x' PosString? ',' 'y' PosString? '终点' 'x' PosString? 'y' PosString? '楼层' IdString? '不刷新显伤' Bool Newline /* moveEnemyOnPoint_s tooltip : moveEnemyOnPoint:移动某个点上怪物的属性到其他点 helpUrl : /_docs/#/instruction -default : ["", "", "", "", ""] +default : ["", "", "", "", "", false] allFloorIds : ['IdString_0'] selectPoint : ["PosString_2", "PosString_3"] menu : [['选择起点位置','editor_blockly.selectPoint(block,["PosString_0", "PosString_1"])']] @@ -1343,25 +1346,27 @@ colour : this.dataColor IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); var floorstr = PosString_0 && PosString_1 ? ', "from": ['+PosString_0+','+PosString_1+']' : ''; if (PosString_2 && PosString_3) floorstr += ', "to": ['+PosString_2+','+PosString_3+']' -var code = '{"type": "moveEnemyOnPoint"'+floorstr+IdString_0+'},\n'; +Bool_0 = Bool_0 ? ', "norefresh": true' : ''; +var code = '{"type": "moveEnemyOnPoint"'+floorstr+IdString_0+Bool_0+'},\n'; return code; */; moveEnemyOnPoint_1_s - : '移动某点怪物属性' ':' '起点' 'x' PosString? ',' 'y' PosString? '增量' 'dx' PosString? 'dy' PosString? '楼层' IdString? Newline + : '移动某点怪物属性' ':' '起点' 'x' PosString? ',' 'y' PosString? '增量' 'dx' PosString? 'dy' PosString? '楼层' IdString? '不刷新显伤' Bool Newline /* moveEnemyOnPoint_1_s tooltip : moveEnemyOnPoint:移动某个点上怪物的属性到其他点 helpUrl : /_docs/#/instruction -default : ["", "", "", "", ""] +default : ["", "", "", "", "", false] allFloorIds : ['IdString_0'] selectPoint : ["PosString_0", "PosString_1"] colour : this.dataColor IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); var floorstr = PosString_0 && PosString_1 ? ', "from": ['+PosString_0+','+PosString_1+']' : ''; if (PosString_2 && PosString_3) floorstr += ', "dxy": ['+PosString_2+','+PosString_3+']' -var code = '{"type": "moveEnemyOnPoint"'+floorstr+IdString_0+'},\n'; +Bool_0 = Bool_0 ? ', "norefresh": true' : ''; +var code = '{"type": "moveEnemyOnPoint"'+floorstr+IdString_0+Bool_0+'},\n'; return code; */; diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js index ed447206..3f9d6193 100644 --- a/_server/MotaActionParser.js +++ b/_server/MotaActionParser.js @@ -750,7 +750,8 @@ ActionParser.prototype.parseAction = function() { break; case "setEnemy": this.next = MotaActionBlocks['setEnemy_s'].xmlText([ - MotaActionFunctions.replaceToName_token(data.id), data.name, data["operator"]||'=', this.expandEvalBlock([data.value]), this.next]); + MotaActionFunctions.replaceToName_token(data.id), data.name, data["operator"]||'=', this.expandEvalBlock([data.value]), + data.norefresh||false, this.next]); break; case "setEnemyOnPoint": data.loc=data.loc||[]; @@ -762,7 +763,8 @@ ActionParser.prototype.parseAction = function() { y_str.push(t[1]); }) this.next = MotaActionBlocks['setEnemyOnPoint_s'].xmlText([ - x_str.join(','),y_str.join(','),data.floorId||'',data.name, data["operator"]||'=', this.expandEvalBlock([data.value]), this.next]); + x_str.join(','),y_str.join(','),data.floorId||'',data.name, data["operator"]||'=', this.expandEvalBlock([data.value]), + data.norefresh||false, this.next]); break; case "resetEnemyOnPoint": data.loc=data.loc||[]; @@ -774,17 +776,17 @@ ActionParser.prototype.parseAction = function() { y_str.push(t[1]); }) this.next = MotaActionBlocks['resetEnemyOnPoint_s'].xmlText([ - x_str.join(','),y_str.join(','), data.floorId||'',this.next]); + x_str.join(','),y_str.join(','), data.floorId||'',data.norefresh||false,this.next]); break; case "moveEnemyOnPoint": data.from=data.from||['',''] if (data.dxy) { this.next = MotaActionBlocks['moveEnemyOnPoint_1_s'].xmlText([ - data.from[0], data.from[1], data.dxy[0], data.dxy[1], data.floorId||'',this.next]); + data.from[0], data.from[1], data.dxy[0], data.dxy[1], data.floorId||'',data.norefresh||false,this.next]); } else { data.to=data.to||['',''] this.next = MotaActionBlocks['moveEnemyOnPoint_s'].xmlText([ - data.from[0], data.from[1], data.to[0], data.to[1], data.floorId||'',this.next]); + data.from[0], data.from[1], data.to[0], data.to[1], data.floorId||'',data.norefresh||false,this.next]); } break; case "setEquip": diff --git a/libs/events.js b/libs/events.js index 7fe9678c..b4672f9d 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1871,14 +1871,14 @@ events.prototype._action_addValue = function (data, x, y, prefix) { } events.prototype._action_setEnemy = function (data, x, y, prefix) { - this.setEnemy(data.id, data.name, data.value, data.operator, prefix); + this.setEnemy(data.id, data.name, data.value, data.operator, prefix, data.norefresh); core.doAction(); } events.prototype._action_setEnemyOnPoint = function (data, x, y, prefix) { var loc = this.__action_getLoc2D(data.loc, x, y, prefix); loc.forEach(function (one) { - core.setEnemyOnPoint(one[0], one[1], data.floorId, data.name, data.value, data.operator, prefix); + core.setEnemyOnPoint(one[0], one[1], data.floorId, data.name, data.value, data.operator, prefix, data.norefresh); }); core.doAction(); } @@ -1886,7 +1886,7 @@ events.prototype._action_setEnemyOnPoint = function (data, x, y, prefix) { events.prototype._action_resetEnemyOnPoint = function (data, x, y, prefix) { var loc = this.__action_getLoc2D(data.loc, x, y, prefix); loc.forEach(function (one) { - core.resetEnemyOnPoint(one[0], one[1], data.floorId); + core.resetEnemyOnPoint(one[0], one[1], data.floorId, data.norefresh); }); core.doAction(); } @@ -1905,7 +1905,7 @@ events.prototype._action_moveEnemyOnPoint = function (data, x, y, prefix) { } else { to = this.__action_getLoc(data.to, x, y, prefix); } - this.moveEnemyOnPoint(from[0], from[1], to[0], to[1], data.floorId); + this.moveEnemyOnPoint(from[0], from[1], to[0], to[1], data.floorId, data.norefresh); core.doAction(); } @@ -2986,7 +2986,7 @@ events.prototype._setValue_setGlobal = function (name, value) { } ////// 设置一个怪物属性 ////// -events.prototype.setEnemy = function (id, name, value, operator, prefix) { +events.prototype.setEnemy = function (id, name, value, operator, prefix, norefresh) { if (!core.hasFlag('enemyInfo')) { core.setFlag('enemyInfo', {}); } @@ -2996,11 +2996,11 @@ events.prototype.setEnemy = function (id, name, value, operator, prefix) { value = this._updateValueByOperator(core.calValue(value, prefix), (core.material.enemys[id]||{})[name], operator); enemyInfo[id][name] = value; (core.material.enemys[id]||{})[name] = core.clone(value); - core.updateStatusBar(); + if (!norefresh) core.updateStatusBar(); } ////// 设置某个点上的怪物属性 ////// -events.prototype.setEnemyOnPoint = function (x, y, floorId, name, value, operator, prefix) { +events.prototype.setEnemyOnPoint = function (x, y, floorId, name, value, operator, prefix, norefresh) { floorId = floorId || core.status.floorId; var block = core.getBlock(x, y, floorId); if (block == null) return; @@ -3013,22 +3013,22 @@ events.prototype.setEnemyOnPoint = function (x, y, floorId, name, value, operato flags.enemyOnPoint[floorId] = flags.enemyOnPoint[floorId] || {}; flags.enemyOnPoint[floorId][x+","+y] = flags.enemyOnPoint[floorId][x+","+y] || {}; flags.enemyOnPoint[floorId][x+","+y][name] = value; - core.updateStatusBar(); + if (!norefresh) core.updateStatusBar(); } ////// 重置某个点上的怪物属性 ////// -events.prototype.resetEnemyOnPoint = function (x, y, floorId) { +events.prototype.resetEnemyOnPoint = function (x, y, floorId, norefresh) { delete ((flags.enemyOnPoint||{})[floorId||core.status.floorId]||{})[x+","+y]; - core.updateStatusBar(); + if (!norefresh) core.updateStatusBar(); } ////// 将某个点上已经设置的怪物属性移动到其他点 ////// -events.prototype.moveEnemyOnPoint = function (fromX, fromY, toX, toY, floorId) { +events.prototype.moveEnemyOnPoint = function (fromX, fromY, toX, toY, floorId, norefresh) { floorId = floorId || core.status.floorId; if (((flags.enemyOnPoint||{})[floorId]||{})[fromX+","+fromY]) { flags.enemyOnPoint[floorId][toX+","+toY] = flags.enemyOnPoint[floorId][fromX+","+fromY]; delete flags.enemyOnPoint[floorId][fromX+","+fromY]; - core.updateStatusBar(); + if (!norefresh) core.updateStatusBar(); } }