2025-01-18 17:49:44 +08:00
|
|
|
|
editor_blocklyconfig = function () {
|
|
|
|
|
// start mark sfergsvae
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
(function () {
|
|
|
|
|
var getCategory = function (name, custom) {
|
|
|
|
|
for (var node of document.getElementById("toolbox").children) {
|
|
|
|
|
if (node.getAttribute("name") == name) return node;
|
|
|
|
|
}
|
|
|
|
|
var node = document.createElement("category");
|
|
|
|
|
node.setAttribute("name", name);
|
|
|
|
|
if (custom) node.setAttribute("custom", custom);
|
|
|
|
|
document.getElementById("toolbox").appendChild(node);
|
|
|
|
|
return node;
|
|
|
|
|
};
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
var toolboxObj = {
|
|
|
|
|
入口方块: [
|
|
|
|
|
'<label text="入口方块会根据当前类型在此数组中筛选,具体控制在editor_blockly.entranceCategoryCallback中"></label>',
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
|
|
|
|
"欢迎使用事件编辑器",
|
|
|
|
|
"本事件触发一次后会消失",
|
|
|
|
|
{ type: "hide", time: 500 },
|
2024-11-29 12:38:58 +08:00
|
|
|
|
],
|
2025-01-18 17:49:44 +08:00
|
|
|
|
"event"
|
|
|
|
|
),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
{
|
|
|
|
|
condition: "flag:__door__===2",
|
|
|
|
|
currentFloor: true,
|
|
|
|
|
priority: 0,
|
|
|
|
|
delayExecute: false,
|
|
|
|
|
multiExecute: false,
|
|
|
|
|
data: [{ type: "openDoor", loc: [10, 5] }],
|
|
|
|
|
},
|
|
|
|
|
"autoEvent"
|
|
|
|
|
),
|
|
|
|
|
MotaActionBlocks["changeFloor_m"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
id: "shop1",
|
|
|
|
|
text: "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:",
|
|
|
|
|
textInList: "1F金币商店",
|
|
|
|
|
choices: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
text: "生命+800",
|
|
|
|
|
need: "status:money>=20+2*flag:shop1",
|
|
|
|
|
action: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "comment",
|
|
|
|
|
text: "新版商店中需要手动扣减金币和增加访问次数",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "status:money",
|
|
|
|
|
operator: "-=",
|
|
|
|
|
value: "20+2*flag:shop1",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "flag:shop1",
|
|
|
|
|
operator: "+=",
|
|
|
|
|
value: "1",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "status:hp",
|
|
|
|
|
operator: "+=",
|
|
|
|
|
value: "800",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
2024-11-29 12:38:58 +08:00
|
|
|
|
],
|
2025-01-18 17:49:44 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "itemShop",
|
|
|
|
|
item: true,
|
|
|
|
|
textInList: "道具商店",
|
|
|
|
|
choices: [{ id: "yellowKey", number: 10, money: 10 }],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "keyShop1",
|
|
|
|
|
textInList: "回收钥匙商店",
|
|
|
|
|
commonEvent: "回收钥匙商店",
|
|
|
|
|
args: "",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"shop"
|
|
|
|
|
),
|
|
|
|
|
MotaActionBlocks["common_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["beforeBattle_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["afterBattle_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["afterGetItem_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["afterOpenDoor_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["firstArrive_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["eachArrive_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["level_m"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parse([["MTx", ""]], "floorPartition"),
|
|
|
|
|
MotaActionBlocks["commonEvent_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["item_m"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
title: "简单",
|
|
|
|
|
name: "Easy",
|
|
|
|
|
hard: 1,
|
|
|
|
|
action: [{ type: "comment", text: "在这里写该难度需执行的事件" }],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"levelChoose"
|
|
|
|
|
),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
{
|
|
|
|
|
type: 0,
|
|
|
|
|
value: { atk: 10 },
|
|
|
|
|
percentage: { speed: 10 },
|
|
|
|
|
},
|
|
|
|
|
"equip"
|
|
|
|
|
),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
name: "bg.jpg",
|
|
|
|
|
x: 0,
|
|
|
|
|
y: 0,
|
|
|
|
|
canvas: "bg",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
|
|
|
|
"floorImage"
|
|
|
|
|
),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
{
|
|
|
|
|
time: 160,
|
|
|
|
|
openSound: "door.mp3",
|
|
|
|
|
closeSound: "door.mp3",
|
|
|
|
|
keys: { yellowKey: 1, orangeKey: 1 },
|
|
|
|
|
},
|
|
|
|
|
"doorInfo"
|
|
|
|
|
),
|
|
|
|
|
MotaActionBlocks["faceIds_m"].xmlText(),
|
|
|
|
|
MotaActionBlocks["mainStyle_m"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
{
|
|
|
|
|
背景音乐: "bgm.mp3",
|
|
|
|
|
确定: "confirm.mp3",
|
|
|
|
|
攻击: "attack.mp3",
|
|
|
|
|
背景图: "bg.jpg",
|
|
|
|
|
领域: "zone",
|
|
|
|
|
文件名: "file.jpg",
|
|
|
|
|
},
|
|
|
|
|
"nameMap"
|
|
|
|
|
),
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[{ name: "hero.png", width: 32, height: 32, prefix: "hero_" }],
|
|
|
|
|
"splitImages"
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
显示文字: [
|
|
|
|
|
MotaActionBlocks["text_0_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["text_1_s"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parseList(
|
|
|
|
|
"\t[小妖精,fairy]\f[fairy.png,0,0]欢迎使用事件编辑器(双击方块可直接预览)"
|
|
|
|
|
),
|
|
|
|
|
MotaActionBlocks["moveTextBox_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["clearTextBox_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["comment_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["autoText_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["scrollText_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setText_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["tip_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["confirm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["choices_s"].xmlText([
|
|
|
|
|
"选择剑或者盾",
|
|
|
|
|
"流浪者",
|
|
|
|
|
"man",
|
|
|
|
|
0,
|
|
|
|
|
"",
|
|
|
|
|
MotaActionBlocks["choicesContext"].xmlText([
|
|
|
|
|
"剑",
|
|
|
|
|
"",
|
|
|
|
|
"",
|
|
|
|
|
null,
|
|
|
|
|
"",
|
|
|
|
|
"",
|
|
|
|
|
MotaActionFunctions.actionParser.parseList([
|
|
|
|
|
{ type: "openDoor", loc: [3, 3] },
|
|
|
|
|
]),
|
|
|
|
|
]),
|
|
|
|
|
]),
|
|
|
|
|
MotaActionBlocks["win_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["lose_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["restart_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
数据相关: [
|
|
|
|
|
MotaActionBlocks["setValue_s"].xmlText([
|
|
|
|
|
MotaActionBlocks["idIdList_e"].xmlText(["status", "生命"]),
|
|
|
|
|
"=",
|
|
|
|
|
"",
|
|
|
|
|
false,
|
|
|
|
|
]),
|
|
|
|
|
MotaActionBlocks["setEnemy_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setEnemyOnPoint_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["resetEnemyOnPoint_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["moveEnemyOnPoint_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["moveEnemyOnPoint_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setEquip_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setFloor_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setGlobalAttribute_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setGlobalValue_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setGlobalFlag_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setNameMap_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["input_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["input2_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["update_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["moveAction_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["changeFloor_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["changePos_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["battle_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["useItem_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["loadEquip_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["unloadEquip_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["openShop_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["disableShop_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setHeroIcon_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["follow_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["unfollow_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
地图处理: [
|
|
|
|
|
MotaActionBlocks["battle_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["openDoor_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["closeDoor_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["show_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hide_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setBlock_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setBlockOpacity_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setBlockFilter_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["turnBlock_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["moveHero_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["move_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["jumpHero_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["jumpHero_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["jump_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["jump_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showBgFgMap_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hideBgFgMap_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setBgFgBlock_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showFloorImg_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hideFloorImg_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
事件控制: [
|
|
|
|
|
MotaActionBlocks["if_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["if_s"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parseList({
|
|
|
|
|
type: "switch",
|
|
|
|
|
condition: "判别值",
|
|
|
|
|
caseList: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
action: [
|
|
|
|
|
{ type: "comment", text: "当判别值是值的场合执行此事件" },
|
|
|
|
|
],
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
case: "default",
|
|
|
|
|
action: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "comment",
|
|
|
|
|
text: "当没有符合的值的场合执行default事件",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
}),
|
|
|
|
|
MotaActionFunctions.actionParser.parseList({
|
|
|
|
|
type: "for",
|
|
|
|
|
name: "temp:A",
|
|
|
|
|
from: "0",
|
|
|
|
|
to: "12",
|
|
|
|
|
step: "1",
|
|
|
|
|
data: [],
|
|
|
|
|
}),
|
|
|
|
|
MotaActionFunctions.actionParser.parseList({
|
|
|
|
|
type: "forEach",
|
|
|
|
|
name: "temp:A",
|
|
|
|
|
list: ["status:atk", "status:def"],
|
|
|
|
|
data: [],
|
|
|
|
|
}),
|
|
|
|
|
MotaActionBlocks["while_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["dowhile_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["break_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["continue_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["exit_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["trigger_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["insert_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["insert_2_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
特效表现: [
|
|
|
|
|
MotaActionBlocks["sleep_s"].xmlText(),
|
|
|
|
|
MotaActionFunctions.actionParser.parseList({
|
|
|
|
|
type: "wait",
|
|
|
|
|
timeout: 0,
|
|
|
|
|
data: [
|
|
|
|
|
{
|
|
|
|
|
case: "keyboard",
|
|
|
|
|
keycode: "13,32",
|
|
|
|
|
action: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "comment",
|
|
|
|
|
text: "当按下回车(keycode=13)或空格(keycode=32)时执行此事件\n超时剩余时间会写入flag:timeout",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
case: "mouse",
|
|
|
|
|
px: [0, 32],
|
|
|
|
|
py: [0, 32],
|
|
|
|
|
action: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "comment",
|
|
|
|
|
text: "当点击地图左上角时执行此事件\n超时剩余时间会写入flag:timeout",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
case: "condition",
|
|
|
|
|
condition: "flag:type==0\n&&flag:keycode==13",
|
|
|
|
|
action: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "comment",
|
|
|
|
|
text: "当满足自定义条件时会执行此事件\n超时剩余时间会写入flag:timeout",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
case: "timeout",
|
|
|
|
|
action: [{ type: "comment", text: "当超时未操作时执行此事件" }],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
}),
|
|
|
|
|
MotaActionBlocks["waitAsync_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["stopAsync_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["vibrate_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["animate_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["animate_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["stopAnimate_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setViewport_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setViewport_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["lockViewport_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showStatusBar_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hideStatusBar_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setHeroOpacity_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setCurtain_0_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setCurtain_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["screenFlash_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setWeather_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["callBook_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["callSave_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["autoSave_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["forbidSave_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["callLoad_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
音像处理: [
|
|
|
|
|
MotaActionBlocks["showImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showImage_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hideImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showTextImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["moveImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["rotateImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["scaleImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["showGif_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["playBgm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["pauseBgm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["resumeBgm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["loadBgm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["freeBgm_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["playSound_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["playSound_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["stopSound_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setVolume_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setBgmSpeed_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
UI绘制: [
|
|
|
|
|
MotaActionBlocks["previewUI_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["clearMap_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setAttribute_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["setFilter_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillText_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillBoldText_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawTextContent_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillRect_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["strokeRect_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawLine_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawArrow_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillPolygon_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["strokePolygon_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillEllipse_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["strokeEllipse_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["fillArc_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["strokeArc_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawImage_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawImage_1_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawIcon_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawBackground_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawSelector_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["drawSelector_1_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
原生脚本: [
|
|
|
|
|
MotaActionBlocks["function_s"].xmlText(),
|
|
|
|
|
MotaActionBlocks["unknown_s"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
值块: [
|
|
|
|
|
MotaActionBlocks["setValue_s"].xmlText([
|
|
|
|
|
MotaActionBlocks["idIdList_e"].xmlText(["status", "生命"]),
|
|
|
|
|
"=",
|
|
|
|
|
"",
|
|
|
|
|
false,
|
|
|
|
|
]),
|
|
|
|
|
MotaActionBlocks["expression_arithmetic_0"].xmlText(),
|
|
|
|
|
MotaActionBlocks["idFlag_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["idTemp_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["negate_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["unaryOperation_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["bool_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["idString_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["idIdList_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["idFixedList_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["enemyattr_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["blockId_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["blockNumber_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["blockCls_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hasEquip_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["equip_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["nextXY_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["isReplaying_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["hasVisitedFloor_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["isShopVisited_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["canBattle_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["damage_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["damage_1_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["rand_e"].xmlText(),
|
|
|
|
|
MotaActionBlocks["evalString_e"].xmlText(),
|
|
|
|
|
],
|
|
|
|
|
常见事件模板: [
|
|
|
|
|
'<label text="检测音乐如果没有开启则系统提示开启"></label>',
|
|
|
|
|
MotaActionFunctions.actionParser.parseList({
|
|
|
|
|
type: "if",
|
|
|
|
|
condition: "!core.musicStatus.bgmStatus",
|
|
|
|
|
true: ["\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳"],
|
|
|
|
|
false: [],
|
|
|
|
|
}),
|
|
|
|
|
'<label text="仿新新魔塔一次性商人"></label>',
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
type: "if",
|
|
|
|
|
condition: "switch:A",
|
|
|
|
|
true: [
|
|
|
|
|
"\t[行商,trader]\b[this]这是购买我的道具后我给玩家的提示。",
|
|
|
|
|
{
|
|
|
|
|
type: "comment",
|
|
|
|
|
text: "下一条指令可视情况使用或不使用",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "hide",
|
|
|
|
|
remove: true,
|
|
|
|
|
time: 250,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
false: [
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "confirm",
|
|
|
|
|
text: "我有3把黄钥匙,\n你出50金币就卖给你。",
|
|
|
|
|
yes: [
|
|
|
|
|
{
|
|
|
|
|
type: "if",
|
|
|
|
|
condition: "status:money>=50",
|
|
|
|
|
true: [
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "status:money",
|
|
|
|
|
operator: "-=",
|
|
|
|
|
value: "50",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "item:yellowKey",
|
|
|
|
|
operator: "+=",
|
|
|
|
|
value: "3",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "playSound",
|
|
|
|
|
name: "确定",
|
|
|
|
|
stop: true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "switch:A",
|
|
|
|
|
value: "true",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
false: [
|
|
|
|
|
{
|
|
|
|
|
type: "playSound",
|
|
|
|
|
name: "操作失败",
|
|
|
|
|
},
|
|
|
|
|
"\t[行商,trader]\b[this]你的金币不足!",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
no: [],
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"event"
|
|
|
|
|
),
|
|
|
|
|
'<label text="全地图选中一个点"></label>',
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
type: "comment",
|
|
|
|
|
text: "全地图选中一个点,需要用鼠标或触屏操作",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "temp:X",
|
|
|
|
|
value: "status:x",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "temp:Y",
|
|
|
|
|
value: "status:y",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "tip",
|
|
|
|
|
text: "再次点击闪烁位置确认",
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "while",
|
|
|
|
|
condition: "true",
|
|
|
|
|
data: [
|
|
|
|
|
{
|
|
|
|
|
type: "drawSelector",
|
|
|
|
|
image: "winskin.png",
|
|
|
|
|
code: 1,
|
|
|
|
|
x: "32*temp:X",
|
|
|
|
|
y: "32*temp:Y",
|
|
|
|
|
width: 32,
|
|
|
|
|
height: 32,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "wait",
|
|
|
|
|
},
|
2024-11-29 12:38:58 +08:00
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "if",
|
|
|
|
|
condition: "(flag:type === 1)",
|
|
|
|
|
true: [
|
|
|
|
|
{
|
|
|
|
|
type: "if",
|
|
|
|
|
condition: "((temp:X===flag:x)&&(temp:Y===flag:y))",
|
|
|
|
|
true: [
|
|
|
|
|
{
|
|
|
|
|
type: "break",
|
|
|
|
|
n: 1,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "temp:X",
|
|
|
|
|
value: "flag:x",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "temp:Y",
|
|
|
|
|
value: "flag:y",
|
|
|
|
|
},
|
|
|
|
|
],
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
2025-01-18 17:49:44 +08:00
|
|
|
|
],
|
2024-11-29 12:38:58 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2025-01-18 17:49:44 +08:00
|
|
|
|
type: "drawSelector",
|
|
|
|
|
code: 1,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "comment",
|
|
|
|
|
text: "流程进行到这里可以对[X,Y]点进行处理,比如",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "closeDoor",
|
|
|
|
|
id: "yellowDoor",
|
|
|
|
|
loc: ["temp:X", "temp:Y"],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"event"
|
|
|
|
|
),
|
|
|
|
|
'<label text="多阶段Boss战斗"></label>',
|
|
|
|
|
MotaActionFunctions.actionParser.parse(
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
type: "comment",
|
|
|
|
|
text: "多阶段boss,请直接作为战后事件使用",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "setValue",
|
|
|
|
|
name: "switch:A",
|
|
|
|
|
operator: "+=",
|
|
|
|
|
value: "1",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
type: "switch",
|
|
|
|
|
condition: "switch:A",
|
|
|
|
|
caseList: [
|
|
|
|
|
{
|
|
|
|
|
case: "1",
|
|
|
|
|
action: [
|
|
|
|
|
{
|
|
|
|
|
type: "setBlock",
|
|
|
|
|
number: "redSlime",
|
|
|
|
|
},
|
|
|
|
|
"\t[2阶段boss,redSlime]\b[this]你以为你已经打败我了吗?没听说过史莱姆有九条命吗?",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
case: "2",
|
|
|
|
|
action: [
|
|
|
|
|
{
|
|
|
|
|
type: "setBlock",
|
|
|
|
|
number: "blackSlime",
|
|
|
|
|
},
|
|
|
|
|
"\t[3阶段boss,blackSlime]\b[this]不能消灭我的,只会让我更强大!",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
case: "3",
|
|
|
|
|
action: [
|
|
|
|
|
{
|
|
|
|
|
type: "setBlock",
|
|
|
|
|
number: "slimelord",
|
|
|
|
|
},
|
|
|
|
|
"\t[4阶段boss,slimelord]\b[this]我还能打!",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
case: "4",
|
|
|
|
|
action: ["\t[4阶段boss,slimelord]我一定会回来的!"],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
"afterBattle"
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
最近使用事件: [
|
|
|
|
|
'<label text="此处只是占位符,实际定义在editor_blockly.searchBlockCategoryCallback中"></label>',
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
var toolboxgap = '<sep gap="5"></sep>';
|
|
|
|
|
//xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event')
|
|
|
|
|
//MotaActionBlocks['idString_e'].xmlText()
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
for (var name in toolboxObj) {
|
|
|
|
|
var custom = null;
|
|
|
|
|
if (name == "最近使用事件") custom = "searchBlockCategory";
|
|
|
|
|
if (name == "入口方块") custom = "entranceCategory";
|
|
|
|
|
getCategory(name, custom).innerHTML = toolboxObj[name].join(toolboxgap);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
var blocklyArea = document.getElementById("blocklyArea");
|
|
|
|
|
var blocklyDiv = document.getElementById("blocklyDiv");
|
|
|
|
|
var workspace = Blockly.inject(blocklyDiv, {
|
|
|
|
|
media: "_server/blockly/media/",
|
|
|
|
|
toolbox: document.getElementById("toolbox"),
|
|
|
|
|
zoom: {
|
|
|
|
|
controls: true,
|
|
|
|
|
wheel: false, //滚轮改为上下(shift:左右)翻滚
|
|
|
|
|
startScale: 1.0,
|
|
|
|
|
maxScale: 3,
|
|
|
|
|
minScale: 0.3,
|
|
|
|
|
scaleSpeed: 1.08,
|
|
|
|
|
},
|
|
|
|
|
trashcan: false,
|
|
|
|
|
});
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
editor_blockly.isCommonEntry = function () {
|
|
|
|
|
var commonEntries = [
|
|
|
|
|
"beforeBattle",
|
|
|
|
|
"afterBattle",
|
|
|
|
|
"afterOpenDoor",
|
|
|
|
|
"firstArrive",
|
|
|
|
|
"eachArrive",
|
|
|
|
|
"commonEvent",
|
|
|
|
|
"item",
|
|
|
|
|
];
|
|
|
|
|
return commonEntries.indexOf(editor_blockly.entryType) >= 0;
|
|
|
|
|
};
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
editor_blockly.entranceCategoryCallback = function (workspace) {
|
|
|
|
|
var list = toolboxObj["入口方块"];
|
|
|
|
|
var xmlList = [];
|
|
|
|
|
var eventType =
|
|
|
|
|
(editor_blockly.isCommonEntry() ? "common" : editor_blockly.entryType) +
|
|
|
|
|
"_m";
|
|
|
|
|
for (var ii = 0, blockText; (blockText = list[ii]); ii++) {
|
|
|
|
|
if (new RegExp('<block type="' + eventType + '">').exec(blockText)) {
|
|
|
|
|
var block = Blockly.Xml.textToDom(
|
|
|
|
|
"<xml>" + blockText + "</xml>"
|
|
|
|
|
).firstChild;
|
|
|
|
|
block.setAttribute("gap", 5);
|
|
|
|
|
xmlList.push(block);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return xmlList;
|
|
|
|
|
};
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
workspace.registerToolboxCategoryCallback(
|
|
|
|
|
"entranceCategory",
|
|
|
|
|
editor_blockly.entranceCategoryCallback
|
|
|
|
|
);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
editor_blockly.searchBlockCategoryCallback = function (workspace) {
|
|
|
|
|
var xmlList = [];
|
|
|
|
|
var labels = editor_blockly.searchBlock();
|
|
|
|
|
for (var i = 0; i < labels.length; i++) {
|
|
|
|
|
var blockText =
|
|
|
|
|
"<xml>" + MotaActionBlocks[labels[i]].xmlText() + "</xml>";
|
|
|
|
|
var block = Blockly.Xml.textToDom(blockText).firstChild;
|
|
|
|
|
block.setAttribute("gap", 5);
|
|
|
|
|
xmlList.push(block);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
2025-01-18 17:49:44 +08:00
|
|
|
|
return xmlList;
|
|
|
|
|
};
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
workspace.registerToolboxCategoryCallback(
|
|
|
|
|
"searchBlockCategory",
|
|
|
|
|
editor_blockly.searchBlockCategoryCallback
|
|
|
|
|
);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
var onresize = function (e) {
|
|
|
|
|
blocklyDiv.style.width = blocklyArea.offsetWidth + "px";
|
|
|
|
|
blocklyDiv.style.height = blocklyArea.offsetHeight + "px";
|
|
|
|
|
Blockly.svgResize(workspace);
|
|
|
|
|
};
|
|
|
|
|
if (typeof editor !== "undefined" && !editor.isMobile)
|
|
|
|
|
window.addEventListener("resize", onresize, false);
|
|
|
|
|
onresize();
|
|
|
|
|
//Blockly.svgResize(workspace);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
//Blockly.bindEventWithChecks_(workspace.svgGroup_,"wheel",workspace,function(e){});
|
|
|
|
|
document.getElementById("blocklyDiv").onmousewheel = function (e) {
|
|
|
|
|
//console.log(e);
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
var hvScroll = e.shiftKey ? "hScroll" : "vScroll";
|
|
|
|
|
var mousewheelOffsetValue =
|
|
|
|
|
(20 / 380) * workspace.scrollbar[hvScroll].handleLength_ * 3;
|
|
|
|
|
workspace.scrollbar[hvScroll].handlePosition_ +=
|
|
|
|
|
(e.deltaY || 0) + (e.detail || 0) > 0
|
|
|
|
|
? mousewheelOffsetValue
|
|
|
|
|
: -mousewheelOffsetValue;
|
|
|
|
|
workspace.scrollbar[hvScroll].onScroll_();
|
|
|
|
|
// workspace.setScale(workspace.scale);
|
|
|
|
|
};
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
var doubleClickCheck = [[0, "abc"]];
|
|
|
|
|
function omitedcheckUpdateFunction(event) {
|
|
|
|
|
if (event.type === "create") {
|
|
|
|
|
editor_blockly.addIntoLastUsedType(event.blockId);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
2025-01-18 17:49:44 +08:00
|
|
|
|
if (event.type === "ui" && event.element == "click") {
|
|
|
|
|
var newClick = [new Date().getTime(), event.blockId];
|
|
|
|
|
var lastClick = doubleClickCheck.shift();
|
|
|
|
|
doubleClickCheck.push(newClick);
|
|
|
|
|
if (newClick[0] - lastClick[0] < 500) {
|
|
|
|
|
if (newClick[1] === lastClick[1]) {
|
|
|
|
|
editor_blockly.doubleClickBlock(newClick[1]);
|
|
|
|
|
}
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
2025-01-18 17:49:44 +08:00
|
|
|
|
}
|
|
|
|
|
// Only handle these events
|
|
|
|
|
if (["create", "move", "change", "delete"].indexOf(event.type) < 0)
|
|
|
|
|
return;
|
|
|
|
|
if (editor_blockly.workspace.topBlocks_.length >= 2) {
|
|
|
|
|
editor_blockly.setValue("入口方块只能有一个");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var eventType = editor_blockly.entryType;
|
|
|
|
|
if (editor_blockly.workspace.topBlocks_.length == 1) {
|
|
|
|
|
var blockType = editor_blockly.workspace.topBlocks_[0].type;
|
|
|
|
|
if (
|
|
|
|
|
blockType !== eventType + "_m" &&
|
|
|
|
|
!(editor_blockly.isCommonEntry() && blockType == "common_m")
|
|
|
|
|
) {
|
|
|
|
|
editor_blockly.setValue("入口方块类型错误");
|
|
|
|
|
return;
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-18 17:49:44 +08:00
|
|
|
|
try {
|
|
|
|
|
var code = Blockly.JavaScript.workspaceToCode(workspace).replace(
|
|
|
|
|
/\\(i|c|d|e|g|z)/g,
|
|
|
|
|
"\\\\$1"
|
|
|
|
|
);
|
|
|
|
|
editor_blockly.setValue(code);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
editor_blockly.setValue(String(error));
|
|
|
|
|
if (error instanceof OmitedError) {
|
|
|
|
|
var blockName = error.blockName;
|
|
|
|
|
var varName = error.varName;
|
|
|
|
|
var block = error.block;
|
|
|
|
|
}
|
|
|
|
|
// console.log(error);
|
|
|
|
|
}
|
2024-11-29 12:38:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
workspace.addChangeListener(omitedcheckUpdateFunction);
|
|
|
|
|
|
|
|
|
|
workspace.addChangeListener(Blockly.Events.disableOrphans);
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
editor_blockly.workspace = workspace;
|
2024-11-29 12:38:58 +08:00
|
|
|
|
|
2025-01-18 17:49:44 +08:00
|
|
|
|
MotaActionFunctions.workspace = function () {
|
|
|
|
|
return editor_blockly.workspace;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 因为在editor_blockly.parse里已经HTML转义过一次了,所以这里要覆盖掉以避免在注释中出现<等
|
|
|
|
|
MotaActionFunctions.xmlText = function (
|
|
|
|
|
ruleName,
|
|
|
|
|
inputs,
|
|
|
|
|
isShadow,
|
|
|
|
|
comment,
|
|
|
|
|
collapsed,
|
|
|
|
|
disabled
|
|
|
|
|
) {
|
|
|
|
|
var rule = MotaActionBlocks[ruleName];
|
|
|
|
|
var blocktext = isShadow ? "shadow" : "block";
|
|
|
|
|
var xmlText = [];
|
|
|
|
|
xmlText.push(
|
|
|
|
|
"<" +
|
|
|
|
|
blocktext +
|
|
|
|
|
' type="' +
|
|
|
|
|
ruleName +
|
|
|
|
|
'"' +
|
|
|
|
|
(collapsed ? ' collapsed="true"' : "") +
|
|
|
|
|
(disabled ? ' disabled="true"' : "") +
|
|
|
|
|
">"
|
|
|
|
|
);
|
|
|
|
|
if (!inputs) inputs = [];
|
|
|
|
|
for (var ii = 0, inputType; (inputType = rule.argsType[ii]); ii++) {
|
|
|
|
|
var input = inputs[ii];
|
|
|
|
|
var _input = "";
|
|
|
|
|
var noinput = input === null || input === undefined;
|
|
|
|
|
if (
|
|
|
|
|
noinput &&
|
|
|
|
|
inputType === "field" &&
|
|
|
|
|
MotaActionBlocks[rule.argsGrammarName[ii]].type !== "field_dropdown"
|
|
|
|
|
)
|
|
|
|
|
continue;
|
|
|
|
|
if (noinput && inputType === "field") {
|
|
|
|
|
noinput = false;
|
|
|
|
|
input = rule.fieldDefault(rule.args[ii]);
|
|
|
|
|
}
|
|
|
|
|
if (noinput) input = "";
|
|
|
|
|
if (
|
|
|
|
|
inputType === "field" &&
|
|
|
|
|
MotaActionBlocks[rule.argsGrammarName[ii]].type === "field_checkbox"
|
|
|
|
|
)
|
|
|
|
|
input = input ? "TRUE" : "FALSE";
|
|
|
|
|
if (inputType !== "field") {
|
|
|
|
|
var subList = false;
|
|
|
|
|
var subrulename = rule.argsGrammarName[ii];
|
|
|
|
|
var subrule = MotaActionBlocks[subrulename];
|
|
|
|
|
if (subrule instanceof Array) {
|
|
|
|
|
subrulename = subrule[subrule.length - 1];
|
|
|
|
|
subrule = MotaActionBlocks[subrulename];
|
|
|
|
|
subList = true;
|
|
|
|
|
}
|
|
|
|
|
_input = subrule.xmlText([], true);
|
|
|
|
|
if (noinput && !subList && !isShadow) {
|
|
|
|
|
//无输入的默认行为是: 如果语句块的备选方块只有一个,直接代入方块
|
|
|
|
|
input = subrule.xmlText();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
xmlText.push("<" + inputType + ' name="' + rule.args[ii] + '">');
|
|
|
|
|
xmlText.push(_input + input);
|
|
|
|
|
xmlText.push("</" + inputType + ">");
|
|
|
|
|
}
|
|
|
|
|
if (comment) {
|
|
|
|
|
xmlText.push("<comment>");
|
|
|
|
|
xmlText.push(comment);
|
|
|
|
|
xmlText.push("</comment>");
|
|
|
|
|
}
|
|
|
|
|
var next = inputs[rule.args.length];
|
|
|
|
|
if (next) {
|
|
|
|
|
//next
|
|
|
|
|
xmlText.push("<next>");
|
|
|
|
|
xmlText.push(next);
|
|
|
|
|
xmlText.push("</next>");
|
|
|
|
|
}
|
|
|
|
|
xmlText.push("</" + blocktext + ">");
|
|
|
|
|
return xmlText.join("");
|
|
|
|
|
};
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
// end mark sfergsvae
|
|
|
|
|
}
|
|
|
|
|
.toString()
|
|
|
|
|
.split("// start mark sfergsvae")[1]
|
|
|
|
|
.split("// end mark sfergsvae")[0];
|