diff --git a/.prettierignore b/.prettierignore
index 57af69b..ba4d211 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,4 +6,5 @@ public/project/items.js
 public/project/floors/*.js
 public/project/maps.js
 public/_server/**/*.js
-script/**/*.js
\ No newline at end of file
+script/**/*.js
+public/editor.html
\ No newline at end of file
diff --git a/public/editor.html b/public/editor.html
index 22f3209..6aebc60 100644
--- a/public/editor.html
+++ b/public/editor.html
@@ -1,5 +1,6 @@
 <!doctype html>
 <html>
+
 <head>
     <meta charset="utf-8">
     <link href="_server/css/editor.css" rel="stylesheet">
@@ -8,124 +9,121 @@
     <link id="color_css" rel="stylesheet">
     <link rel="icon" href="data:;base64,iVBORw0KGgo=">
 </head>
+
 <body>
-<script>
-    if(innerWidth<innerHeight){ //pic:1242*2208 | chrome info:1340*2380
-        confirm('高大于宽的设备请使用移动版本的editor, 点击确定跳转')?(window.location='./editor-mobile.html'):'';
-    }
-    if (location.protocol.indexOf("http")!=0) {
-        alert("请在启动服务中打开本编辑器!不然包括编辑在内的绝大多数功能都无法使用。");
-    }
-</script>
-<div class="main">
-    <div id="left" style="z-index:-1;opacity: 0;"><!-- map -->
-        <div id="arrEditor">
-            <table class="col" id='arrColMark'></table>
-            <table class="row" id='arrRowMark'></table>
-            <div id="mapEditArea">
-                <textarea cols="10" rows="10" id="pout"></textarea>
-            </div>
-            <div id="editTip">
-                <input type="button" value="新建空白地图" id='newMap'/>
-                <input id='newFileName' placeholder="新楼层id" style="width: 70px"/>
-                <span style="vertical-align: bottom">宽</span>
-                <input id='newMapWidth' style="width: 20px"/>
-                <span style="vertical-align: bottom">高</span>
-                <input id='newMapHeight' style="width: 20px"/>
-                <input type="checkbox" id='newMapStatus' checked='checked' style='vertical-align: bottom'/>
-                <span style='vertical-align: bottom; margin-left: -4px'>保留楼层属性</span>
-            </div>
-            <div id="editBtns">
-                <input type="button" value="导出并复制地图" id="exportMap"/>
-                <input type="button" value="从框中导入地图" id="importMap"/>
-                <input type="button" value="清除地图" id='clearMapButton'/>
-                <input type="button" value="删除地图" id="deleteMap"/>
-            </div>
-            <input type="button" value="批量创建空白地图 ↓" id='newMaps'/>
-            <div id='newFloors' style='display:none'>
-                <span style="vertical-align: bottom">楼层ID格式: </span>
-                <input id='newFloorIds' style="width: 70px" value='MT${i}'/>
-                <span style="vertical-align: bottom">地图中文名格式: </span>
-                <input id='newFloorTitles' style="width: 100px" value='主塔 ${i} 层'/>
-                <br/>
-                <span style="vertical-align: bottom">状态栏名称: </span>
-                <input id='newFloorNames' style="width: 70px" value='${i}'/>
-                <span style="vertical-align: bottom">宽</span>
-                <input id='newMapsWidth' style="width: 20px"/>
-                <span style="vertical-align: bottom">高</span>
-                <input id='newMapsHeight' style="width: 20px"/>
-                <input type="checkbox" id='newMapsStatus' checked='checked' style='vertical-align: bottom'/>
-                <span style='vertical-align: bottom; margin-left: -4px'>保留楼层属性</span>
-                <br/>
-                <span style="vertical-align: bottom">从 i=</span>
-                <input id='newMapsFrom' value="1" style="width: 20px"/>
-                <span style="vertical-align: bottom">到</span>
-                <input id='newMapsTo' value="5" style="width: 20px"/>
-                <input type="button" value="确认创建" id='createNewMaps'>
-            </div>
-        </div>
-    </div>
-    <div id="left1" class='leftTab' style="z-index:-1;opacity: 0;"><!-- appendpic -->
-        <h3 class="leftTabHeader">追加素材</h3>
-        <div class="leftTabContent">
-            <p>
-                <input id="selectFileBtn" type="button" value="导入文件到画板"/>
-                <select id="selectAppend"></select>
-                <!-- ["terrains", "animates", "enemys", "enemy48", "items", "npcs", "npc48"] -->
-                <input id="appendConfirm" type="button" value="追加"/>
-                <input id="quickAppendConfirm" type="button" value="快速追加"/>
-                <span style="font-size: 13px">&nbsp;&nbsp;自动注册</span><input id="appendRegister" type="checkbox" checked/>
-            </p>
-            <p><small>从V2.7.1开始,你可以直接将素材图片拖到对应的素材区,将自动追加并注册。同时,4x4的道具素材已支持快速追加一次16个。</small></p>
-            <p>
-                色相:<input id='changeColorInput' type="range" min="0" max="12" step="1" value="0" list="huelists" style="width: 60%;margin-left: 3%;vertical-align: middle">
-                <datalist id="huelists" style="display: none">
-                    <option value="0"/><option value="1"/><option value="2"/>
-                    <option value="3"/><option value="4"/><option value="5"/>
-                    <option value="6"/><option value="7"/><option value="8"/>
-                    <option value="9"/><option value="10"/><option value="11"/><option value="12"/>
-                </datalist>
-            </p>
-            <div id="appendPicCanvas" style="position:relative;overflow: auto;height:470px;">
-                <canvas style="position:absolute"></canvas><!-- 用于画出灰白相间背景 -->
-                <canvas style="position:absolute"></canvas><!-- 用于画出选中文件 -->
-                <canvas style="position:absolute;z-index:100"></canvas><!-- 用于响应鼠标点击 -->
-                <canvas style="position:absolute;display:none;"></canvas><!-- 画出追加后的sprite用于储存 -->
-                <div id="appendPicSelection">
-                    <div class="appendSelection"><span style="top: 0; left: 2px;">1</span></div>
-                    <div class="appendSelection"><span style="top: 0; left: 14px;">2</span></div>
-                    <div class="appendSelection"><span style="top: 12px; left: 2px;">3</span></div>
-                    <div class="appendSelection"><span style="top: 12px; left: 14px;">4</span></div>
+    <script>
+        if (innerWidth < innerHeight) { //pic:1242*2208 | chrome info:1340*2380
+            confirm('高大于宽的设备请使用移动版本的editor, 点击确定跳转') ? (window.location = './editor-mobile.html') : '';
+        }
+        if (location.protocol.indexOf("http") != 0) {
+            alert("请在启动服务中打开本编辑器!不然包括编辑在内的绝大多数功能都无法使用。");
+        }
+    </script>
+    <div class="main">
+        <div id="left" style="z-index:-1;opacity: 0;"><!-- map -->
+            <div id="arrEditor">
+                <table class="col" id='arrColMark'></table>
+                <table class="row" id='arrRowMark'></table>
+                <div id="mapEditArea">
+                    <textarea cols="10" rows="10" id="pout"></textarea>
+                </div>
+                <div id="editTip">
+                    <input type="button" value="新建空白地图" id='newMap' />
+                    <input id='newFileName' placeholder="新楼层id" style="width: 70px" />
+                    <span style="vertical-align: bottom">宽</span>
+                    <input id='newMapWidth' style="width: 20px" />
+                    <span style="vertical-align: bottom">高</span>
+                    <input id='newMapHeight' style="width: 20px" />
+                    <input type="checkbox" id='newMapStatus' checked='checked' style='vertical-align: bottom' />
+                    <span style='vertical-align: bottom; margin-left: -4px'>保留楼层属性</span>
+                </div>
+                <div id="editBtns">
+                    <input type="button" value="导出并复制地图" id="exportMap" />
+                    <input type="button" value="从框中导入地图" id="importMap" />
+                    <input type="button" value="清除地图" id='clearMapButton' />
+                    <input type="button" value="删除地图" id="deleteMap" />
+                </div>
+                <input type="button" value="批量创建空白地图 ↓" id='newMaps' />
+                <div id='newFloors' style='display:none'>
+                    <span style="vertical-align: bottom">楼层ID格式: </span>
+                    <input id='newFloorIds' style="width: 70px" value='MT${i}' />
+                    <span style="vertical-align: bottom">地图中文名格式: </span>
+                    <input id='newFloorTitles' style="width: 100px" value='主塔 ${i} 层' />
+                    <br />
+                    <span style="vertical-align: bottom">状态栏名称: </span>
+                    <input id='newFloorNames' style="width: 70px" value='${i}' />
+                    <span style="vertical-align: bottom">宽</span>
+                    <input id='newMapsWidth' style="width: 20px" />
+                    <span style="vertical-align: bottom">高</span>
+                    <input id='newMapsHeight' style="width: 20px" />
+                    <input type="checkbox" id='newMapsStatus' checked='checked' style='vertical-align: bottom' />
+                    <span style='vertical-align: bottom; margin-left: -4px'>保留楼层属性</span>
+                    <br />
+                    <span style="vertical-align: bottom">从 i=</span>
+                    <input id='newMapsFrom' value="1" style="width: 20px" />
+                    <span style="vertical-align: bottom">到</span>
+                    <input id='newMapsTo' value="5" style="width: 20px" />
+                    <input type="button" value="确认创建" id='createNewMaps'>
                 </div>
             </div>
         </div>
-    </div>
-    <div id="left2" class='leftTab' style="z-index:-1;opacity: 0;"><!-- loc -->
-        <h3 class="leftTabHeader">地图选点&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.uifunctions.addAutoEvent()">添加自动事件页</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('loc')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <p id='pos_a6771a78_a099_417c_828f_0a24851ebfce' style="margin-left: 15px">0,0</p>
-            <div class='etable'>
-                <table>
-                    <tbody id='table_3d846fc4_7644_44d1_aa04_433d266a73df'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
+        <div id="left1" class='leftTab' style="z-index:-1;opacity: 0;"><!-- appendpic -->
+            <h3 class="leftTabHeader">追加素材</h3>
+            <div class="leftTabContent">
+                <p>
+                    <input id="selectFileBtn" type="button" value="导入文件到画板" />
+                    <select id="selectAppend"></select>
+                    <!-- ["terrains", "animates", "enemys", "enemy48", "items", "npcs", "npc48"] -->
+                    <input id="appendConfirm" type="button" value="追加" />
+                    <input id="quickAppendConfirm" type="button" value="快速追加" />
+                    <span style="font-size: 13px">&nbsp;&nbsp;自动注册</span><input id="appendRegister" type="checkbox"
+                        checked />
+                </p>
+                <p><small>从V2.7.1开始,你可以直接将素材图片拖到对应的素材区,将自动追加并注册。同时,4x4的道具素材已支持快速追加一次16个。</small></p>
+                <p>
+                    色相:<input id='changeColorInput' type="range" min="0" max="12" step="1" value="0" list="huelists"
+                        style="width: 60%;margin-left: 3%;vertical-align: middle">
+                    <datalist id="huelists" style="display: none">
+                        <option value="0" />
+                        <option value="1" />
+                        <option value="2" />
+                        <option value="3" />
+                        <option value="4" />
+                        <option value="5" />
+                        <option value="6" />
+                        <option value="7" />
+                        <option value="8" />
+                        <option value="9" />
+                        <option value="10" />
+                        <option value="11" />
+                        <option value="12" />
+                    </datalist>
+                </p>
+                <div id="appendPicCanvas" style="position:relative;overflow: auto;height:470px;">
+                    <canvas style="position:absolute"></canvas><!-- 用于画出灰白相间背景 -->
+                    <canvas style="position:absolute"></canvas><!-- 用于画出选中文件 -->
+                    <canvas style="position:absolute;z-index:100"></canvas><!-- 用于响应鼠标点击 -->
+                    <canvas style="position:absolute;display:none;"></canvas><!-- 画出追加后的sprite用于储存 -->
+                    <div id="appendPicSelection">
+                        <div class="appendSelection"><span style="top: 0; left: 2px;">1</span></div>
+                        <div class="appendSelection"><span style="top: 0; left: 14px;">2</span></div>
+                        <div class="appendSelection"><span style="top: 12px; left: 2px;">3</span></div>
+                        <div class="appendSelection"><span style="top: 12px; left: 14px;">4</span></div>
+                    </div>
+                </div>
             </div>
         </div>
-    </div>
-    <div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem -->
-        <h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('enemyitem')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div id="enemyItemTable"><!-- enemy and item -->
+        <div id="left2" class='leftTab' style="z-index:-1;opacity: 0;"><!-- loc -->
+            <h3 class="leftTabHeader">地图选点&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.uifunctions.addAutoEvent()">添加自动事件页</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('loc')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <p id='pos_a6771a78_a099_417c_828f_0a24851ebfce' style="margin-left: 15px">0,0</p>
                 <div class='etable'>
                     <table>
-                        <tbody id='table_a3f03d4c_55b8_4ef6_b362_b345783acd72'>
+                        <tbody id='table_3d846fc4_7644_44d1_aa04_433d266a73df'>
                             <tr>
                                 <td>条目</td>
                                 <td>注释</td>
@@ -134,350 +132,414 @@
                         </tbody>
                     </table>
                 </div>
-                <div style="margin-top: -10px; margin-bottom: 10px">
-                    <button id="copyEnemyItem">复制属性</button>
-                    <button id="pasteEnemyItem">粘贴属性</button>
-                    <button id="clearEnemyItem">清空属性</button>
-                    <button id="clearAllEnemyItem">批量清空属性</button>
+            </div>
+        </div>
+        <div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem -->
+            <h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('enemyitem')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <div id="enemyItemTable"><!-- enemy and item -->
+                    <div class='etable'>
+                        <table>
+                            <tbody id='table_a3f03d4c_55b8_4ef6_b362_b345783acd72'>
+                                <tr>
+                                    <td>条目</td>
+                                    <td>注释</td>
+                                    <td>值</td>
+                                </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                    <div style="margin-top: -10px; margin-bottom: 10px">
+                        <button id="copyEnemyItem">复制属性</button>
+                        <button id="pasteEnemyItem">粘贴属性</button>
+                        <button id="clearEnemyItem">清空属性</button>
+                        <button id="clearAllEnemyItem">批量清空属性</button>
+                    </div>
+                </div>
+                <div id='newIdIdnum'><!-- id and idnum -->
+                    <input placeholder="新id(唯一标识符)" />
+                    <input placeholder="新idnum(10000以内数字)" />
+                    <button>确定</button>
+                    <br />
+                    <button style="margin-top: 10px">自动注册</button>
+                    <button style="margin-top: 10px; margin-left: 5px">删除此素材</button>
+                    <button style="margin-top: 10px; margin-left: 5px">以此素材为模板追加</button>
+                </div>
+                <div id='changeId'><!-- id and idnum -->
+                    <input placeholder="修改图块id为" style="width: 100px" />
+                    <button>确定</button>
+                    <button style="margin-left: 5px">删除此素材</button>
+                    <button style="margin-left: 5px">以此素材为模板追加</button>
                 </div>
             </div>
-            <div id='newIdIdnum'><!-- id and idnum -->
-                <input placeholder="新id(唯一标识符)"/>
-                <input placeholder="新idnum(10000以内数字)"/>
-                <button>确定</button>
-                <br/>
-                <button style="margin-top: 10px">自动注册</button>
-                <button style="margin-top: 10px; margin-left: 5px">删除此素材</button>
-                <button style="margin-top: 10px; margin-left: 5px">以此素材为模板追加</button>
-            </div>
-            <div id='changeId'><!-- id and idnum -->
-                <input placeholder="修改图块id为" style="width: 100px"/>
-                <button>确定</button>
-                <button style="margin-left: 5px">删除此素材</button>
-                <button style="margin-left: 5px">以此素材为模板追加</button>
+        </div>
+        <div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor -->
+            <h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('floor')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <div class='etable'>
+                    <table>
+                        <tbody id='table_4a3b1b09_b2fb_4bdf_b9ab_9f4cdac14c74'>
+                            <tr>
+                                <td>条目</td>
+                                <td>注释</td>
+                                <td>值</td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div id='changeFloorId'><!-- id and idnum -->
+                    <input placeholder="修改floorId为" />
+                    <button>确定</button>
+                </div>
+                <div id='changeFloorSize' style="font-size: 13px;">
+                    修改地图大小:宽<input style="width: 25px;" value="13" />,高<input style="width: 25px;" value="13" />,
+                    偏移x<input style="width: 25px;" value="0" /> y<input style="width: 25px;" value="0" />
+                    <button>确定</button>
+                </div>
             </div>
         </div>
-    </div>
-    <div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor -->
-        <h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('floor')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div class='etable'>
-                <table>
-                    <tbody id='table_4a3b1b09_b2fb_4bdf_b9ab_9f4cdac14c74'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-            <div id='changeFloorId'><!-- id and idnum -->
-                <input placeholder="修改floorId为"/>
-                <button>确定</button>
-            </div>
-            <div id='changeFloorSize' style="font-size: 13px;">
-                修改地图大小:宽<input style="width: 25px;" value="13" />,高<input style="width: 25px;" value="13" />,
-                偏移x<input style="width: 25px;" value="0" /> y<input style="width: 25px;" value="0" /> 
-                <button>确定</button>
+        <div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower -->
+            <h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('tower')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <div class='etable'>
+                    <table>
+                        <tbody id='table_b6a03e4c_5968_4633_ac40_0dfdd2c9cde5'>
+                            <tr>
+                                <td>条目</td>
+                                <td>注释</td>
+                                <td>值</td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
             </div>
         </div>
-    </div>
-    <div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower -->
-        <h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('tower')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div class='etable'>
-                <table>
-                    <tbody id='table_b6a03e4c_5968_4633_ac40_0dfdd2c9cde5'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-    </div>
-    <div id="left6" class='leftTab' style="z-index:-1;opacity: 0;">
-        <div style="position: relative; height: 95%"><!-- eventsEditor -->
-            <h3>事件编辑器 &nbsp;&nbsp;
-                <!--
+        <div id="left6" class='leftTab' style="z-index:-1;opacity: 0;">
+            <div style="position: relative; height: 95%"><!-- eventsEditor -->
+                <h3>事件编辑器 &nbsp;&nbsp;
+                    <!--
                 <button onclick="editor_blockly.showXML()">Show XML</button>
                 <button onclick="editor_blockly.runCode()">console.log(obj=code)</button>
                 -->
-                <button onclick="editor_blockly.confirm()">确认</button>
-                <button onclick="editor_blockly.confirm(true)">应用</button>
-                <button id='blocklyParse' onclick="editor_blockly.parse()">解析</button>
-                <button onclick="editor_blockly.cancel()">取消</button>
-                <div style="position: relative; display: inline-block; margin-left: 10px">
-                    <div class="searchLogo"></div>
-                    <input type="text" id="searchBlock" placeholder="搜索事件块..."/>
+                    <button onclick="editor_blockly.confirm()">确认</button>
+                    <button onclick="editor_blockly.confirm(true)">应用</button>
+                    <button id='blocklyParse' onclick="editor_blockly.parse()">解析</button>
+                    <button onclick="editor_blockly.cancel()">取消</button>
+                    <div style="position: relative; display: inline-block; margin-left: 10px">
+                        <div class="searchLogo"></div>
+                        <input type="text" id="searchBlock" placeholder="搜索事件块..." />
+                    </div>
+                    <button class="cpPanel" onclick="editor_blockly.selectPointFromButton()"
+                        style="margin-left:5px">地图选点</button>
+                    <button class="cpPanel" onclick="editor.uievent.searchUsedFlags()"
+                        style="margin-left:5px">变量出现位置搜索</button>
+                    <input type="checkbox" class="cpPanel" id="blocklyReplace"
+                        onchange="editor_blockly.triggerReplace()" style="margin-left: 10px" />
+                    <span class="cpPanel" style="margin-left: -4px; font-size: 13px">开启中文名替换</span>
+                    <input type="checkbox" class="cpPanel" id="blocklyExpandCompare"
+                        onchange="editor_blockly.triggerExpandCompare()" style="margin-left: 10px" />
+                    <span class="cpPanel" style="margin-left: -4px; font-size: 13px">展开值块逻辑运算</span>
+                    <xml id="toolbox" style="display:none">
+                    </xml>
+                </h3>
+                <div style="position: relative;height: 100%">
+                    <div id="blocklyArea">
+                        <div id="blocklyDiv"></div>
+                    </div>
+                    <textarea id="codeArea" spellcheck="false"></textarea>
                 </div>
-                <button class="cpPanel" onclick="editor_blockly.selectPointFromButton()" style="margin-left:5px">地图选点</button>
-                <button class="cpPanel" onclick="editor.uievent.searchUsedFlags()" style="margin-left:5px">变量出现位置搜索</button>
-                <input type="checkbox" class="cpPanel" id="blocklyReplace" onchange="editor_blockly.triggerReplace()" style="margin-left: 10px" />
-                <span class="cpPanel" style="margin-left: -4px; font-size: 13px">开启中文名替换</span>
-                <input type="checkbox" class="cpPanel" id="blocklyExpandCompare" onchange="editor_blockly.triggerExpandCompare()" style="margin-left: 10px" />
-                <span class="cpPanel" style="margin-left: -4px; font-size: 13px">展开值块逻辑运算</span>
-                <xml id="toolbox" style="display:none">
-                </xml>
+            </div>
+        </div>
+        <div id="colorPanel" class="cpPanel" style="display: none">
+            <input class="color" id="colorPicker" value="255,215,0,1" />
+            <button onclick="confirmColor()">确定</button>
+        </div>
+        <div id="left7" style="z-index:-1;opacity: 0;"><!-- 多行文本编辑器 -->
+            <div>
+                <button onclick="editor_multi.confirm()">确认</button>
+                <button onclick="editor_multi.cancel()">取消</button>
+                <button onclick="editor_multi.confirm(true)">应用</button>
+                <button onclick="editor_multi.format()">格式化</button>
+                <button id="editor_multi_preview" style="display: none;">预览</button>
+                <input type="checkbox" onclick="editor_multi.toggerLint()" id="lintCheckbox"
+                    style="vertical-align: middle;margin-left:6px" />
+                <span style="vertical-align: middle; margin-left: -3px">语法检查</span>
+                <select id="codemirrorCommands" onchange="editor_multi.doCommand(this)"
+                    style="vertical-align: middle; margin-left: 6px;"></select>
+                <span>字体大小</span>
+                <input style="width: 40px" type="number" onchange="editor_multi.setFontSize()"
+                    id="editor_multi_fontsize" />
+            </div>
+            <textarea id="multiLineCode" name="multiLineCode"></textarea>
+        </div>
+        <div id="left8" class='leftTab' style="z-index:-1;opacity: 0;"><!-- functions -->
+            <h3 class="leftTabHeader">脚本编辑&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('functions')">配置表格</button>
             </h3>
-            <div style="position: relative;height: 100%">
-                <div id="blocklyArea">
-                    <div id="blocklyDiv"></div>
+            <div class="leftTabContent">
+                <div class='etable'>
+                    <table>
+                        <tbody id='table_e260a2be_5690_476a_b04e_dacddede78b3'>
+                            <tr>
+                                <td>条目</td>
+                                <td>注释</td>
+                                <td>值</td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div id="left9" class='leftTab' style="z-index:-1;opacity: 0;"><!-- commonevent -->
+            <h3 class="leftTabHeader">公共事件&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.table.addfunc()">添加</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('commonevent')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <div class='etable'>
+                    <table>
+                        <tbody id='table_b7bf0124_99fd_4af8_ae2f_0017f04a7c7d'>
+                            <tr>
+                                <td>条目</td>
+                                <td>注释</td>
+                                <td>值</td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div id="left10" class='leftTab' style="z-index:-1;opacity: 0;"><!-- plugins -->
+            <h3 class="leftTabHeader">插件编写&nbsp;&nbsp;<button
+                    onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
+                    onclick="editor.table.addfunc()">添加</button>&nbsp;&nbsp;<button
+                    onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button
+                    onclick="editor_multi.editCommentJs('plugins')">配置表格</button>
+            </h3>
+            <div class="leftTabContent">
+                <div class='etable'>
+                    <table>
+                        <tbody id='table_e2c034ec_47c6_48ae_8db8_4f8f32fea2d6'>
+                            <tr>
+                                <td>条目</td>
+                                <td>注释</td>
+                                <td>值</td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div id="mid">
+            <table class="col" id='mapColMark'></table>
+            <table class="row" id='mapRowMark'></table>
+            <div class="map" id="mapEdit">
+                <canvas class='gameCanvas' id='ebm'></canvas>
+                <canvas class='gameCanvas' id='efg'></canvas>
+                <canvas class='gameCanvas' id='eui' style='z-index:100'></canvas>
+            </div>
+            <div class="tools">
+                <div id="tip"></div>
+                <select id="editModeSelect" style="font-size: 12px">
+                    <option value="map">地图编辑(Z)</option>
+                    <option value="loc">地图选点(X)</option>
+                    <option value="enemyitem">图块属性(C)</option>
+                    <option value="floor">楼层属性(V)</option>
+                    <option value="tower">全塔属性(B)</option>
+                    <option value="functions">脚本编辑(N)</option>
+                    <option value="appendpic">追加素材(M)</option>
+                    <option value="commonevent">公共事件(,)</option>
+                    <option value="plugins">插件编写(.)</option>
+                </select>
+                <span style="font-size: 12px"><input type="checkbox" id="showMovable"
+                        style="margin-left:0;margin-right: 2px" />通行度</span>
+                <select id="editorTheme" style="margin-left: 0; font-size: 11px;">
+                    <option value="editor_color">默认白</option>
+                    <option value="editor_color_dark">夜间黑</option>
+                </select>
+                <br />
+                <span style="font-size: 12px;">
+                    <input type="radio" id="brushMod" name="brushMod" value="line" checked="checked" />线
+                    <input type="radio" id="brushMod2" name="brushMod" value="rectangle" />矩形
+                    <input type="radio" id="brushMod3" name="brushMod" value="tileset" />tile平铺
+                    <input type="radio" id="brushMod4" name="brushMod" value="fill" />填充
+
+                </span>
+                <br />
+                <span style="font-size: 12px">
+                    <input type="radio" id="layerMod2" name="layerMod" value="bgmap" />背景层
+                    <input type="radio" id="layerMod" name="layerMod" value="map" checked="checked"
+                        style="margin-left: 5px" />事件层
+                    <input type="radio" id="layerMod3" name="layerMod" value="fgmap" style="margin-left: 5px" />前景层
+                </span>
+                <br>
+                <div id="viewportButtons" style="margin-bottom: 7px">
+                    <input type="button" value="←" />
+                    <input type="button" value="↑" />
+                    <input type="button" value="↓" />
+                    <input type="button" value="→" />
+                    <input type="button" id='bigmapBtn' value="大地图" style="margin-left: 5px" />
+                </div>
+                <select id="selectFloor" style="margin-bottom: 5px;"></select>
+                <input type="button" value="选层" id='selectFloorBtn' />
+                <input type="button" value="保存地图" id='saveFloor' />
+                <input type="button" value="后退" id="undoFloor" style="display: none;" />
+                <input type="button" style="display: none;" value="帮助文档" id="openDoc" />
+                <input type="button" style="display: none;" value="前往游戏"
+                    onclick="window.open('./index.html', '_blank')" />
+            </div>
+        </div>
+        <div id="mid2">
+            <p style="margin: 10px"><span id='lastUsedTitle'></span><small>(Ctrl+滚轮放缩,右键置顶)</small> <button
+                    id='clearLastUsedBtn'>清除</button></p>
+            <div class="map" id="lastUsedDiv">
+                <canvas id='lastUsed' class="gameCanvas" style="overflow: hidden"></canvas>
+            </div>
+        </div>
+        <div id="right">
+            <div id="iconLib">
+                <div id="iconImages"></div>
+                <div id="selectBox">
+                    <div id='dataSelection' style="display:none"></div>
+                </div>
+            </div>
+            <button id="iconExpandBtn"></button>
+        </div>
+        <div id="menuDiv">
+            <div id="midMenu" style="display:none">
+                <div id='extraEvent' class='menuitem' style="display:none">
+                    <div class="menuitem-content"></div>
+                </div>
+                <div id='chooseThis' class="menuitem">
+                    <div class="menuitem-content">选中此点</div>
+                </div>
+                <div id='chooseInRight' class="menuitem">
+                    <div class="menuitem-content">在素材区选中此图块</div>
+                </div>
+                <div id='copyLoc' class="menuitem">
+                    <div class="menuitem-content">复制此事件</div>
+                </div>
+                <div id='pasteLoc' class="menuitem">
+                    <div class="menuitem-content">粘贴到此事件</div>
+                </div>
+                <div id='clearEvent' class="menuitem">
+                    <div class="menuitem-content">仅清空此点事件</div>
+                </div>
+                <div id='clearLoc' class="menuitem">
+                    <div class="menuitem-content">清空此点及事件</div>
                 </div>
-                <textarea id="codeArea" spellcheck="false"></textarea>
             </div>
         </div>
     </div>
-    <div id="colorPanel" class="cpPanel" style="display: none">
-        <input class="color" id="colorPicker" value="255,215,0,1"/>
-        <button onclick="confirmColor()">确定</button>
-    </div>
-    <div id="left7" style="z-index:-1;opacity: 0;"><!-- 多行文本编辑器 -->
-        <div>
-            <button onclick="editor_multi.confirm()">确认</button>
-            <button onclick="editor_multi.cancel()">取消</button>
-            <button onclick="editor_multi.confirm(true)">应用</button>
-            <button onclick="editor_multi.format()">格式化</button>
-            <button id="editor_multi_preview" style="display: none;">预览</button>
-            <input type="checkbox" onclick="editor_multi.toggerLint()" id="lintCheckbox"
-                   style="vertical-align: middle;margin-left:6px"/>
-            <span style="vertical-align: middle; margin-left: -3px">语法检查</span>
-            <select id="codemirrorCommands" onchange="editor_multi.doCommand(this)" style="vertical-align: middle; margin-left: 6px;"></select>
-            <span>字体大小</span>
-            <input style="width: 40px" type="number" onchange="editor_multi.setFontSize()" id="editor_multi_fontsize" />
-        </div>
-        <textarea id="multiLineCode" name="multiLineCode"></textarea>
-    </div>
-    <div id="left8" class='leftTab' style="z-index:-1;opacity: 0;"><!-- functions -->
-        <h3 class="leftTabHeader">脚本编辑&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('functions')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div class='etable'>
-                <table>
-                    <tbody id='table_e260a2be_5690_476a_b04e_dacddede78b3'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
+    <!-- <script>/* -->
+
+    <div id="gameInject" style='display: none'></div>
+
+    <!-- UI预览 & 地图选点 -->
+    <div id='uieventDiv' style='display: none'>
+        <div id='uieventDialog'>
+            <div id="uieventHead">
+                <span id="uieventTitle"></span>
+                <select id="uieventSelect" style="margin-left: 20px"></select>
+                <button id="uieventNo">关闭</button>
+                <button id="uieventYes">确定</button>
+            </div>
+            <hr style="clear: both; margin-top: 0" />
+            <div id='uieventBody'>
+                <canvas class='gameCanvas' id='uievent'></canvas>
+                <div id="selectPointBox"></div>
+                <div id="uieventExtraBody" style="display: none; margin-top: -10px"></div>
+            </div>
+            <div id="selectPoint">
+                <select id="selectPointFloor"></select>
+                <div id="selectPointButtons">
+                    <input type="button" value="←" />
+                    <input type="button" value="↑" />
+                    <input type="button" value="↓" />
+                    <input type="button" value="→" />
+                    <input type="button" value="切换大地图" style="margin-left: 10px;">
+                    <input type="button" value="复制楼层ID">
+                </div>
             </div>
         </div>
     </div>
-    <div id="left9" class='leftTab' style="z-index:-1;opacity: 0;"><!-- commonevent -->
-        <h3 class="leftTabHeader">公共事件&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.table.addfunc()">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('commonevent')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div class='etable'>
-                <table>
-                    <tbody id='table_b7bf0124_99fd_4af8_ae2f_0017f04a7c7d'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-    </div>
-    <div id="left10" class='leftTab' style="z-index:-1;opacity: 0;"><!-- plugins -->
-        <h3 class="leftTabHeader">插件编写&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.table.addfunc()">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>&nbsp;&nbsp;<button onclick="editor_multi.editCommentJs('plugins')">配置表格</button>
-        </h3>
-        <div class="leftTabContent">
-            <div class='etable'>
-                <table>
-                    <tbody id='table_e2c034ec_47c6_48ae_8db8_4f8f32fea2d6'>
-                    <tr>
-                        <td>条目</td>
-                        <td>注释</td>
-                        <td>值</td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-        </div>
-    </div>
-    <div id="mid">
-        <table class="col" id='mapColMark'></table>
-        <table class="row" id='mapRowMark'></table>
-        <div class="map" id="mapEdit">
-            <canvas class='gameCanvas' id='ebm'></canvas>
-            <canvas class='gameCanvas' id='efg'></canvas>
-            <canvas class='gameCanvas' id='eui' style='z-index:100'></canvas>
-        </div>
-        <div class="tools">
-            <div id="tip"></div>
-            <select id="editModeSelect" style="font-size: 12px">
-                <option value="map">地图编辑(Z)</option>
-                <option value="loc">地图选点(X)</option>
-                <option value="enemyitem">图块属性(C)</option>
-                <option value="floor">楼层属性(V)</option>
-                <option value="tower">全塔属性(B)</option>
-                <option value="functions">脚本编辑(N)</option>
-                <option value="appendpic">追加素材(M)</option>
-                <option value="commonevent">公共事件(,)</option>
-                <option value="plugins">插件编写(.)</option>
-            </select>
-            <span style="font-size: 12px"><input type="checkbox" id="showMovable" style="margin-left:0;margin-right: 2px"/>通行度</span>
-            <select id="editorTheme" style="margin-left: 0; font-size: 11px;">
-                <option value="editor_color">默认白</option>
-                <option value="editor_color_dark">夜间黑</option>
-            </select>
-            <br/>
-            <span style="font-size: 12px;">
-            <input type="radio" id="brushMod" name="brushMod" value="line" checked="checked" />线
-            <input type="radio" id="brushMod2" name="brushMod" value="rectangle" />矩形
-            <input type="radio" id="brushMod3" name="brushMod" value="tileset" />tile平铺
-            <input type="radio" id="brushMod4" name="brushMod" value="fill" />填充
-
-            </span>
-            <br/>
-            <span style="font-size: 12px">
-            <input type="radio" id="layerMod2" name="layerMod" value="bgmap" />背景层
-            <input type="radio" id="layerMod" name="layerMod" value="map" checked="checked" style="margin-left: 5px" />事件层
-            <input type="radio" id="layerMod3" name="layerMod" value="fgmap" style="margin-left: 5px" />前景层
-            </span>
-            <br>
-            <div id="viewportButtons" style="margin-bottom: 7px">
-                <input type="button" value="←"/>
-                <input type="button" value="↑"/>
-                <input type="button" value="↓"/>
-                <input type="button" value="→"/>
-                <input type="button" id='bigmapBtn' value="大地图" style="margin-left: 5px"/>
-            </div>
-            <select id="selectFloor" style="margin-bottom: 5px;"></select>
-            <input type="button" value="选层" id='selectFloorBtn'/>
-            <input type="button" value="保存地图" id='saveFloor'/>
-            <input type="button" value="后退" id="undoFloor" style="display: none;" />
-            <input type="button" value="帮助文档" id="openDoc" />
-            <input type="button" value="前往游戏" onclick="window.open('./index.html', '_blank')"/>
-        </div>
-    </div>
-    <div id="mid2">
-        <p style="margin: 10px"><span id='lastUsedTitle'></span><small>(Ctrl+滚轮放缩,右键置顶)</small> <button id='clearLastUsedBtn'>清除</button></p>
-        <div class="map" id="lastUsedDiv">
-            <canvas id='lastUsed' class="gameCanvas" style="overflow: hidden"></canvas>
-        </div>
-    </div>
-    <div id="right">
-        <div id="iconLib">
-            <div id="iconImages"></div>
-            <div id="selectBox">
-                <div id='dataSelection' style="display:none"></div>
-            </div>
-        </div>
-        <button id="iconExpandBtn"></button>
-    </div>
-    <div id="menuDiv">
-        <div id="midMenu" style="display:none">
-            <div id='extraEvent' class='menuitem' style="display:none"><div class="menuitem-content"></div></div>
-            <div id='chooseThis' class="menuitem"><div class="menuitem-content">选中此点</div></div>
-            <div id='chooseInRight' class="menuitem"><div class="menuitem-content">在素材区选中此图块</div></div>
-            <div id='copyLoc' class="menuitem"><div class="menuitem-content">复制此事件</div></div>
-            <div id='pasteLoc' class="menuitem"><div class="menuitem-content">粘贴到此事件</div></div>
-            <div id='clearEvent' class="menuitem"><div class="menuitem-content">仅清空此点事件</div></div>
-            <div id='clearLoc' class="menuitem"><div class="menuitem-content">清空此点及事件</div></div>
-        </div>
-    </div>
-</div>
-<!-- <script>/* -->
-
-<div id="gameInject" style='display: none'></div>
-
-<!-- UI预览 & 地图选点 -->
-<div id='uieventDiv' style='display: none'>
-    <div id='uieventDialog'>
-        <div id="uieventHead">
-            <span id="uieventTitle"></span>
-            <select id="uieventSelect" style="margin-left: 20px"></select>
-            <button id="uieventNo">关闭</button>
-            <button id="uieventYes">确定</button>
-        </div>
-        <hr style="clear: both; margin-top: 0"/>
-        <div id='uieventBody'>
-            <canvas class='gameCanvas' id='uievent'></canvas>
-            <div id="selectPointBox"></div>
-            <div id="uieventExtraBody" style="display: none; margin-top: -10px"></div>
-        </div>
-        <div id="selectPoint">
-            <select id="selectPointFloor"></select>
-            <div id="selectPointButtons">
-                <input type="button" value="←"/>
-                <input type="button" value="↑"/>
-                <input type="button" value="↓"/>
-                <input type="button" value="→"/>
-                <input type="button" value="切换大地图" style="margin-left: 10px;">
-                <input type="button" value="复制楼层ID">
-            </div>
-        </div>
-    </div>
-</div>
 
 
-<!-- */</script> -->
+    <!-- */</script> -->
 
-<!-- =========================================================== -->
+    <!-- =========================================================== -->
 
-<!-- <script src='_server/vendor/vue.min.js'></script> -->
-<!-- <script src="https://cdn.bootcss.com/vue/2.5.13/vue.js"></script> -->
-<!-- <script src='_server/vendor/polyfill.min.js'></script> -->
-<script src='_server/fs.js'></script>
-<script src='_server/editor_config.js'></script>
-<script src='_server/editor_util.js'></script>
-<script src='_server/editor_game.js'></script>
-<script src='_server/editor_file.js'></script>
-<script src='_server/editor_table.js'></script>
-<script src='_server/editor_mode.js'></script>
-<script src='_server/editor_ui.js'></script>
-<script src='_server/editor_uievent.js'></script>
-<script src='_server/editor_mappanel.js'></script>
-<script src='_server/editor_datapanel.js'></script>
-<script src='_server/editor_materialpanel.js'></script>
-<script src='_server/editor_listen.js'></script>
-<script src='libs/thirdparty/lz-string.min.js'></script>
-<script src='libs/thirdparty/localforage.min.js'></script>
-<script src='libs/thirdparty/zip.min.js'></script>
-<script src='_server/editor.js'></script>
-<script>
-    editor.init(function () {
-        editor.listen();
-        editor.mode_listen();
-        editor.mobile_listen();
-    });
+    <!-- <script src='_server/vendor/vue.min.js'></script> -->
+    <!-- <script src="https://cdn.bootcss.com/vue/2.5.13/vue.js"></script> -->
+    <!-- <script src='_server/vendor/polyfill.min.js'></script> -->
+    <script src='_server/fs.js'></script>
+    <script src='_server/editor_config.js'></script>
+    <script src='_server/editor_util.js'></script>
+    <script src='_server/editor_game.js'></script>
+    <script src='_server/editor_file.js'></script>
+    <script src='_server/editor_table.js'></script>
+    <script src='_server/editor_mode.js'></script>
+    <script src='_server/editor_ui.js'></script>
+    <script src='_server/editor_uievent.js'></script>
+    <script src='_server/editor_mappanel.js'></script>
+    <script src='_server/editor_datapanel.js'></script>
+    <script src='_server/editor_materialpanel.js'></script>
+    <script src='_server/editor_listen.js'></script>
+    <script src='libs/thirdparty/lz-string.min.js'></script>
+    <script src='libs/thirdparty/localforage.min.js'></script>
+    <script src='libs/thirdparty/zip.min.js'></script>
+    <script src='_server/editor.js'></script>
+    <script>
+        editor.init(function () {
+            editor.listen();
+            editor.mode_listen();
+            editor.mobile_listen();
+        });
     //main.listen();
-</script>
+    </script>
 
-<!-- hightlight textarea -->
-<script src='_server/editor_multi.js'></script>
-<!-- blockly -->
-<script src="_server/blockly/Converter.bundle.min.js"></script>
-<script src="_server/blockly/blockly_compressed.js"></script>
-<script src="_server/blockly/blocks_compressed.js"></script>
-<script src="_server/blockly/javascript_compressed.js"></script>
-<script src="_server/blockly/zh-hans.js"></script>
-<script src='_server/MotaActionParser.js'></script>
-<script src='_server/editor_blocklyconfig.js'></script>
-<script src='_server/editor_blockly.js'></script>
-<!-- codemirror -->
-<script src="_server/CodeMirror/codeMirror.bundle.min.js"></script>
-<script src="_server/CodeMirror/beautify.min.js"></script>
-<script src="_server/CodeMirror/jshint.min.js"></script>
-<script src="_server/CodeMirror/codeMirror.plugin.min.js"></script>
-<script src="_server/CodeMirror/acorn.min.js"></script>
-<script src="_server/CodeMirror/defs.js"></script>
-<script src="_server/CodeMirror/tern.min.js"></script>
-<!-- thirdparty -->
-<script src="_server/thirdparty/color.all.min.js"></script>
-<script src="_server/thirdparty/awesomplete.min.js"></script>
-<script src="_server/thirdparty/caret-position.js"></script>
-<script src="_server/thirdparty/jsColor.js"></script>
+    <!-- hightlight textarea -->
+    <script src='_server/editor_multi.js'></script>
+    <!-- blockly -->
+    <script src="_server/blockly/Converter.bundle.min.js"></script>
+    <script src="_server/blockly/blockly_compressed.js"></script>
+    <script src="_server/blockly/blocks_compressed.js"></script>
+    <script src="_server/blockly/javascript_compressed.js"></script>
+    <script src="_server/blockly/zh-hans.js"></script>
+    <script src='_server/MotaActionParser.js'></script>
+    <script src='_server/editor_blocklyconfig.js'></script>
+    <script src='_server/editor_blockly.js'></script>
+    <!-- codemirror -->
+    <script src="_server/CodeMirror/codeMirror.bundle.min.js"></script>
+    <script src="_server/CodeMirror/beautify.min.js"></script>
+    <script src="_server/CodeMirror/jshint.min.js"></script>
+    <script src="_server/CodeMirror/codeMirror.plugin.min.js"></script>
+    <script src="_server/CodeMirror/acorn.min.js"></script>
+    <script src="_server/CodeMirror/defs.js"></script>
+    <script src="_server/CodeMirror/tern.min.js"></script>
+    <!-- thirdparty -->
+    <script src="_server/thirdparty/color.all.min.js"></script>
+    <script src="_server/thirdparty/awesomplete.min.js"></script>
+    <script src="_server/thirdparty/caret-position.js"></script>
+    <script src="_server/thirdparty/jsColor.js"></script>
 
 </body>
-</html>
+
+</html>
\ No newline at end of file
diff --git a/public/libs/control.js b/public/libs/control.js
index 9f71bfb..67edf7b 100644
--- a/public/libs/control.js
+++ b/public/libs/control.js
@@ -1468,11 +1468,11 @@ control.prototype.updateDamage = function (floorId, ctx) {
 };
 
 control.prototype._updateDamage_damage = function (floorId, onMap) {
-    // Deprecated. See src/plugin/game/damage.ts EnemyCollection.render.
+    // Deprecated. See src/plugin/game/enemy/damage.ts EnemyCollection.render.
 };
 
 control.prototype._updateDamage_extraDamage = function (floorId, onMap) {
-    // Deprecated. See src/plugin/game/damage.ts EnemyCollection.render.
+    // Deprecated. See src/plugin/game/enemy/damage.ts EnemyCollection.render.
 };
 
 ////// 重绘地图显伤 //////
diff --git a/public/libs/enemys.js b/public/libs/enemys.js
index c20e3a8..b68a2a4 100644
--- a/public/libs/enemys.js
+++ b/public/libs/enemys.js
@@ -203,7 +203,7 @@ enemys.prototype.getEnemyValue = function (enemy, name, x, y, floorId) {
 
 ////// 能否获胜 //////
 enemys.prototype.canBattle = function (enemy, x, y, floorId) {
-    // Deprecated. See src/plugin/game/battle.ts
+    // Deprecated. See src/plugin/game/enemy/battle.ts
 };
 
 enemys.prototype.getDamageString = function (enemy, x, y, floorId, hero) {
diff --git a/public/libs/events.js b/public/libs/events.js
index ad50f18..412be57 100644
--- a/public/libs/events.js
+++ b/public/libs/events.js
@@ -430,49 +430,22 @@ events.prototype._trigger_ignoreChangeFloor = function (block) {
 };
 
 events.prototype._sys_battle = function (data, callback) {
-    // todo: 重写这个函数的一部分
-
-    // 检查战前事件
-    var beforeBattle = [];
-    core.push(
-        beforeBattle,
-        core.floors[core.status.floorId].beforeBattle[data.x + ',' + data.y]
-    );
-    core.push(
-        beforeBattle,
-        (core.material.enemys[data.event.id] || {}).beforeBattle
-    );
-    if (beforeBattle.length > 0) {
-        core.push(beforeBattle, [{ type: 'battle', x: data.x, y: data.y }]);
-        core.clearContinueAutomaticRoute();
-
-        // 自动存档
-        var inAction = core.status.event.id == 'action';
-        if (inAction) {
-            core.insertAction(beforeBattle, data.x, data.y);
-            core.doAction();
-        } else {
-            core.autosave(true);
-            core.insertAction(beforeBattle, data.x, data.y, callback);
-        }
-    } else {
-        this.battle(data.event.id, data.x, data.y, false, callback);
-    }
+    // Deprecated. See /src/plugin/game/enemy/battle.ts
 };
 
 ////// 战斗 //////
 events.prototype.battle = function (id, x, y, force, callback) {
-    // Deprecated. See src/plugin/game/battle.ts
+    // Deprecated. See src/plugin/game/enemy/battle.ts
 };
 
 ////// 战斗前触发的事件 //////
 events.prototype.beforeBattle = function (enemyId, x, y) {
-    // Deprecated. See src/plugin/game/battle.ts
+    // Deprecated. See src/plugin/game/enemy/battle.ts
 };
 
 ////// 战斗结束后触发的事件 //////
 events.prototype.afterBattle = function (enemyId, x, y) {
-    // Deprecated. See src/plugin/game/battle.ts
+    // Deprecated. See src/plugin/game/enemy/battle.ts
 };
 
 events.prototype._sys_openDoor = function (data, callback) {
diff --git a/src/plugin/game/battle.ts b/src/plugin/game/enemy/battle.ts
similarity index 90%
rename from src/plugin/game/battle.ts
rename to src/plugin/game/enemy/battle.ts
index f1d49d0..5e2a912 100644
--- a/src/plugin/game/battle.ts
+++ b/src/plugin/game/enemy/battle.ts
@@ -1,5 +1,10 @@
-import { DamageDir, DamageEnemy, getNeedCalDir } from './damage';
-import { findDir, has } from './utils';
+import {
+    DamageDir,
+    DamageEnemy,
+    getNeedCalDir,
+    getSingleEnemy
+} from './damage';
+import { findDir, has } from '../utils';
 
 export function getEnemy(
     x: number,
@@ -205,6 +210,24 @@ core.events._sys_battle = function (data: Block, callback?: () => void) {
     }
 };
 
+core.events._action_battle = function (data, x, y, prefix) {
+    if (data.id) {
+        const enemy = getSingleEnemy(data.id as EnemyIds);
+        // todo: 与不在地图上的怪物战斗
+    } else {
+        if (data.floorId != core.status.floorId) {
+            core.doAction();
+            return;
+        }
+        const [ex, ey] = this.__action_getLoc(data.loc, x, y, prefix) as LocArr;
+        const dir = findDir(core.status.hero.loc, {
+            x: ex,
+            y: ey
+        }) as DamageDir;
+        this.battle(ex, ey, dir, true, core.doAction);
+    }
+};
+
 declare global {
     interface Events {
         /**
diff --git a/src/plugin/game/damage.ts b/src/plugin/game/enemy/damage.ts
similarity index 98%
rename from src/plugin/game/damage.ts
rename to src/plugin/game/enemy/damage.ts
index 2f057a0..514efb9 100644
--- a/src/plugin/game/damage.ts
+++ b/src/plugin/game/enemy/damage.ts
@@ -1,6 +1,6 @@
-import { equal } from './utils';
-import { getHeroStatusOf, getHeroStatusOn } from './hero';
-import { Range, RangeCollection } from './range';
+import { equal } from '../utils';
+import { getHeroStatusOf, getHeroStatusOn } from '../hero';
+import { Range, RangeCollection } from '../range';
 import {
     backDir,
     checkV2,
@@ -9,7 +9,7 @@ import {
     has,
     manhattan,
     ofDir
-} from './utils';
+} from '../utils';
 
 interface HaloType {
     square: {
@@ -968,11 +968,11 @@ const skills: [unlock: string, condition: string][] = [
 export function getNeedCalDir(
     x?: number,
     y?: number,
-    floorId: FloorIds = core.status.floorId,
+    floorId?: FloorIds,
     hero: Partial<HeroStatus> = core.status.hero
 ): (Dir | 'none')[] {
     // 第一章或序章,或者没有指定怪物位置,或者没开自动定位,用不到这个函数
-    if (flags.chapter < 2 || !has(x) || !has(y)) {
+    if (flags.chapter < 2 || !has(x) || !has(y) || !floorId) {
         return ['none'];
     }
 
@@ -1105,6 +1105,15 @@ export function ensureFloorDamage(floorId: FloorIds) {
     floor.enemy ??= new EnemyCollection(floorId);
 }
 
+export function getSingleEnemy(id: EnemyIds) {
+    const e = core.material.enemys[id];
+    const enemy = new DamageEnemy(e);
+    enemy.calAttribute();
+    enemy.getRealInfo();
+    enemy.calDamage(core.status.hero, false)[0];
+    return enemy;
+}
+
 declare global {
     interface PluginDeclaration {
         damage: {
diff --git a/src/plugin/game/index.js b/src/plugin/game/index.js
index 66daccf..3f8340f 100644
--- a/src/plugin/game/index.js
+++ b/src/plugin/game/index.js
@@ -17,8 +17,8 @@ import * as study from './study';
 import * as towerBoss from './towerBoss';
 import * as utils from './utils';
 import * as chase from './chase';
-import * as damage from './damage';
-import * as battle from './battle';
+import * as damage from './enemy/damage';
+import * as battle from './enemy/battle';
 
 export {
     halo,
diff --git a/src/plugin/game/itemDetail.ts b/src/plugin/game/itemDetail.ts
index b0feccf..f4e448b 100644
--- a/src/plugin/game/itemDetail.ts
+++ b/src/plugin/game/itemDetail.ts
@@ -1,4 +1,4 @@
-import { ensureFloorDamage } from './damage';
+import { ensureFloorDamage } from './enemy/damage';
 
 core.control.updateDamage = function (floorId = core.status.floorId, ctx) {
     if (!floorId || core.status.gameOver || main.mode !== 'play') return;
diff --git a/src/types/event.d.ts b/src/types/event.d.ts
index 3f34d22..1b6b42b 100644
--- a/src/types/event.d.ts
+++ b/src/types/event.d.ts
@@ -760,6 +760,10 @@ interface Events extends EventData {
     tryUseItem(itemId: ItemIdOf<'tools' | 'constants'>): void;
 
     _sys_battle(data: Block, callback?: () => void): void;
+
+    _action_battle(data: any, x?: number, y?: number, prefix?: any): void;
+
+    __action_getLoc(data: any, x?: number, y?: number, prefix?: any): any;
 }
 
 declare const events: new () => Events;