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"> 自动注册</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">地图选点 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.uifunctions.addAutoEvent()">添加自动事件页</button> <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"> 自动注册</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">图块属性 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">地图选点 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.uifunctions.addAutoEvent()">添加自动事件页</button> <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">图块属性 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">楼层属性 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">楼层属性 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">全塔属性 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <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">全塔属性 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button> <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>事件编辑器 - <!-- + <div id="left6" class='leftTab' style="z-index:-1;opacity: 0;"> + <div style="position: relative; height: 95%"><!-- eventsEditor --> + <h3>事件编辑器 + <!-- <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">脚本编辑 <button + onclick="editor.mode.onmode('save')">保存</button> <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">公共事件 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.table.addfunc()">添加</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">插件编写 <button + onclick="editor.mode.onmode('save')">保存</button> <button + onclick="editor.table.addfunc()">添加</button> <button + onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">脚本编辑 <button onclick="editor.mode.onmode('save')">保存</button> <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">公共事件 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.table.addfunc()">添加</button> <button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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">插件编写 <button onclick="editor.mode.onmode('save')">保存</button> <button onclick="editor.table.addfunc()">添加</button> <button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button> <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;