事件中的强制战斗

This commit is contained in:
unanmed 2023-07-30 17:04:52 +08:00
parent 351e136775
commit fbe81fedd2
10 changed files with 549 additions and 477 deletions

View File

@ -7,3 +7,4 @@ public/project/floors/*.js
public/project/maps.js public/project/maps.js
public/_server/**/*.js public/_server/**/*.js
script/**/*.js script/**/*.js
public/editor.html

View File

@ -1,5 +1,6 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link href="_server/css/editor.css" rel="stylesheet"> <link href="_server/css/editor.css" rel="stylesheet">
@ -8,6 +9,7 @@
<link id="color_css" rel="stylesheet"> <link id="color_css" rel="stylesheet">
<link rel="icon" href="data:;base64,iVBORw0KGgo="> <link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head> </head>
<body> <body>
<script> <script>
if (innerWidth < innerHeight) { //pic:1242*2208 | chrome info:1340*2380 if (innerWidth < innerHeight) { //pic:1242*2208 | chrome info:1340*2380
@ -74,16 +76,27 @@
<!-- ["terrains", "animates", "enemys", "enemy48", "items", "npcs", "npc48"] --> <!-- ["terrains", "animates", "enemys", "enemy48", "items", "npcs", "npc48"] -->
<input id="appendConfirm" type="button" value="追加" /> <input id="appendConfirm" type="button" value="追加" />
<input id="quickAppendConfirm" type="button" value="快速追加" /> <input id="quickAppendConfirm" type="button" value="快速追加" />
<span style="font-size: 13px">&nbsp;&nbsp;自动注册</span><input id="appendRegister" type="checkbox" checked/> <span style="font-size: 13px">&nbsp;&nbsp;自动注册</span><input id="appendRegister" type="checkbox"
checked />
</p> </p>
<p><small>从V2.7.1开始你可以直接将素材图片拖到对应的素材区将自动追加并注册。同时4x4的道具素材已支持快速追加一次16个。</small></p> <p><small>从V2.7.1开始你可以直接将素材图片拖到对应的素材区将自动追加并注册。同时4x4的道具素材已支持快速追加一次16个。</small></p>
<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"> 色相:<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"> <datalist id="huelists" style="display: none">
<option value="0"/><option value="1"/><option value="2"/> <option value="0" />
<option value="3"/><option value="4"/><option value="5"/> <option value="1" />
<option value="6"/><option value="7"/><option value="8"/> <option value="2" />
<option value="9"/><option value="10"/><option value="11"/><option value="12"/> <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> </datalist>
</p> </p>
<div id="appendPicCanvas" style="position:relative;overflow: auto;height:470px;"> <div id="appendPicCanvas" style="position:relative;overflow: auto;height:470px;">
@ -101,7 +114,10 @@
</div> </div>
</div> </div>
<div id="left2" class='leftTab' style="z-index:-1;opacity: 0;"><!-- loc --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<p id='pos_a6771a78_a099_417c_828f_0a24851ebfce' style="margin-left: 15px">0,0</p> <p id='pos_a6771a78_a099_417c_828f_0a24851ebfce' style="margin-left: 15px">0,0</p>
@ -119,7 +135,11 @@
</div> </div>
</div> </div>
<div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div id="enemyItemTable"><!-- enemy and item --> <div id="enemyItemTable"><!-- enemy and item -->
@ -159,7 +179,11 @@
</div> </div>
</div> </div>
<div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -185,7 +209,10 @@
</div> </div>
</div> </div>
<div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -216,11 +243,15 @@
<div class="searchLogo"></div> <div class="searchLogo"></div>
<input type="text" id="searchBlock" placeholder="搜索事件块..." /> <input type="text" id="searchBlock" placeholder="搜索事件块..." />
</div> </div>
<button class="cpPanel" onclick="editor_blockly.selectPointFromButton()" style="margin-left:5px">地图选点</button> <button class="cpPanel" onclick="editor_blockly.selectPointFromButton()"
<button class="cpPanel" onclick="editor.uievent.searchUsedFlags()" style="margin-left:5px">变量出现位置搜索</button> style="margin-left:5px">地图选点</button>
<input type="checkbox" class="cpPanel" id="blocklyReplace" onchange="editor_blockly.triggerReplace()" style="margin-left: 10px" /> <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> <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" /> <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> <span class="cpPanel" style="margin-left: -4px; font-size: 13px">展开值块逻辑运算</span>
<xml id="toolbox" style="display:none"> <xml id="toolbox" style="display:none">
</xml> </xml>
@ -247,14 +278,18 @@
<input type="checkbox" onclick="editor_multi.toggerLint()" id="lintCheckbox" <input type="checkbox" onclick="editor_multi.toggerLint()" id="lintCheckbox"
style="vertical-align: middle;margin-left:6px" /> style="vertical-align: middle;margin-left:6px" />
<span style="vertical-align: middle; margin-left: -3px">语法检查</span> <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> <select id="codemirrorCommands" onchange="editor_multi.doCommand(this)"
style="vertical-align: middle; margin-left: 6px;"></select>
<span>字体大小</span> <span>字体大小</span>
<input style="width: 40px" type="number" onchange="editor_multi.setFontSize()" id="editor_multi_fontsize" /> <input style="width: 40px" type="number" onchange="editor_multi.setFontSize()"
id="editor_multi_fontsize" />
</div> </div>
<textarea id="multiLineCode" name="multiLineCode"></textarea> <textarea id="multiLineCode" name="multiLineCode"></textarea>
</div> </div>
<div id="left8" class='leftTab' style="z-index:-1;opacity: 0;"><!-- functions --> <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 class="leftTabHeader">脚本编辑&nbsp;&nbsp;<button
onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button
onclick="editor_multi.editCommentJs('functions')">配置表格</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -271,7 +306,11 @@
</div> </div>
</div> </div>
<div id="left9" class='leftTab' style="z-index:-1;opacity: 0;"><!-- commonevent --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -288,7 +327,11 @@
</div> </div>
</div> </div>
<div id="left10" class='leftTab' style="z-index:-1;opacity: 0;"><!-- plugins --> <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 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> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -325,7 +368,8 @@
<option value="commonevent">公共事件(,)</option> <option value="commonevent">公共事件(,)</option>
<option value="plugins">插件编写(.)</option> <option value="plugins">插件编写(.)</option>
</select> </select>
<span style="font-size: 12px"><input type="checkbox" id="showMovable" style="margin-left:0;margin-right: 2px"/>通行度</span> <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;"> <select id="editorTheme" style="margin-left: 0; font-size: 11px;">
<option value="editor_color">默认白</option> <option value="editor_color">默认白</option>
<option value="editor_color_dark">夜间黑</option> <option value="editor_color_dark">夜间黑</option>
@ -341,7 +385,8 @@
<br /> <br />
<span style="font-size: 12px"> <span style="font-size: 12px">
<input type="radio" id="layerMod2" name="layerMod" value="bgmap" />背景层 <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="layerMod" name="layerMod" value="map" checked="checked"
style="margin-left: 5px" />事件层
<input type="radio" id="layerMod3" name="layerMod" value="fgmap" style="margin-left: 5px" />前景层 <input type="radio" id="layerMod3" name="layerMod" value="fgmap" style="margin-left: 5px" />前景层
</span> </span>
<br> <br>
@ -356,12 +401,14 @@
<input type="button" value="选层" id='selectFloorBtn' /> <input type="button" value="选层" id='selectFloorBtn' />
<input type="button" value="保存地图" id='saveFloor' /> <input type="button" value="保存地图" id='saveFloor' />
<input type="button" value="后退" id="undoFloor" style="display: none;" /> <input type="button" value="后退" id="undoFloor" style="display: none;" />
<input type="button" value="帮助文档" id="openDoc" /> <input type="button" style="display: none;" value="帮助文档" id="openDoc" />
<input type="button" value="前往游戏" onclick="window.open('./index.html', '_blank')"/> <input type="button" style="display: none;" value="前往游戏"
onclick="window.open('./index.html', '_blank')" />
</div> </div>
</div> </div>
<div id="mid2"> <div id="mid2">
<p style="margin: 10px"><span id='lastUsedTitle'></span><small>Ctrl+滚轮放缩,右键置顶)</small> <button id='clearLastUsedBtn'>清除</button></p> <p style="margin: 10px"><span id='lastUsedTitle'></span><small>Ctrl+滚轮放缩,右键置顶)</small> <button
id='clearLastUsedBtn'>清除</button></p>
<div class="map" id="lastUsedDiv"> <div class="map" id="lastUsedDiv">
<canvas id='lastUsed' class="gameCanvas" style="overflow: hidden"></canvas> <canvas id='lastUsed' class="gameCanvas" style="overflow: hidden"></canvas>
</div> </div>
@ -377,13 +424,27 @@
</div> </div>
<div id="menuDiv"> <div id="menuDiv">
<div id="midMenu" style="display:none"> <div id="midMenu" style="display:none">
<div id='extraEvent' class='menuitem' style="display:none"><div class="menuitem-content"></div></div> <div id='extraEvent' class='menuitem' style="display:none">
<div id='chooseThis' class="menuitem"><div class="menuitem-content">选中此点</div></div> <div class="menuitem-content"></div>
<div id='chooseInRight' class="menuitem"><div class="menuitem-content">在素材区选中此图块</div></div> </div>
<div id='copyLoc' class="menuitem"><div class="menuitem-content">复制此事件</div></div> <div id='chooseThis' class="menuitem">
<div id='pasteLoc' class="menuitem"><div class="menuitem-content">粘贴到此事件</div></div> <div class="menuitem-content">选中此点</div>
<div id='clearEvent' class="menuitem"><div class="menuitem-content">仅清空此点事件</div></div> </div>
<div id='clearLoc' 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> </div>
</div> </div>
@ -480,4 +541,5 @@
<script src="_server/thirdparty/jsColor.js"></script> <script src="_server/thirdparty/jsColor.js"></script>
</body> </body>
</html> </html>

View File

@ -1468,11 +1468,11 @@ control.prototype.updateDamage = function (floorId, ctx) {
}; };
control.prototype._updateDamage_damage = function (floorId, onMap) { 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) { 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.
}; };
////// 重绘地图显伤 ////// ////// 重绘地图显伤 //////

View File

@ -203,7 +203,7 @@ enemys.prototype.getEnemyValue = function (enemy, name, x, y, floorId) {
////// 能否获胜 ////// ////// 能否获胜 //////
enemys.prototype.canBattle = function (enemy, 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) { enemys.prototype.getDamageString = function (enemy, x, y, floorId, hero) {

View File

@ -430,49 +430,22 @@ events.prototype._trigger_ignoreChangeFloor = function (block) {
}; };
events.prototype._sys_battle = function (data, callback) { events.prototype._sys_battle = function (data, callback) {
// todo: 重写这个函数的一部分 // Deprecated. See /src/plugin/game/enemy/battle.ts
// 检查战前事件
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);
}
}; };
////// 战斗 ////// ////// 战斗 //////
events.prototype.battle = function (id, x, y, force, callback) { 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) { 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) { 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) { events.prototype._sys_openDoor = function (data, callback) {

View File

@ -1,5 +1,10 @@
import { DamageDir, DamageEnemy, getNeedCalDir } from './damage'; import {
import { findDir, has } from './utils'; DamageDir,
DamageEnemy,
getNeedCalDir,
getSingleEnemy
} from './damage';
import { findDir, has } from '../utils';
export function getEnemy( export function getEnemy(
x: number, 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 { declare global {
interface Events { interface Events {
/** /**

View File

@ -1,6 +1,6 @@
import { equal } from './utils'; import { equal } from '../utils';
import { getHeroStatusOf, getHeroStatusOn } from './hero'; import { getHeroStatusOf, getHeroStatusOn } from '../hero';
import { Range, RangeCollection } from './range'; import { Range, RangeCollection } from '../range';
import { import {
backDir, backDir,
checkV2, checkV2,
@ -9,7 +9,7 @@ import {
has, has,
manhattan, manhattan,
ofDir ofDir
} from './utils'; } from '../utils';
interface HaloType { interface HaloType {
square: { square: {
@ -968,11 +968,11 @@ const skills: [unlock: string, condition: string][] = [
export function getNeedCalDir( export function getNeedCalDir(
x?: number, x?: number,
y?: number, y?: number,
floorId: FloorIds = core.status.floorId, floorId?: FloorIds,
hero: Partial<HeroStatus> = core.status.hero hero: Partial<HeroStatus> = core.status.hero
): (Dir | 'none')[] { ): (Dir | 'none')[] {
// 第一章或序章,或者没有指定怪物位置,或者没开自动定位,用不到这个函数 // 第一章或序章,或者没有指定怪物位置,或者没开自动定位,用不到这个函数
if (flags.chapter < 2 || !has(x) || !has(y)) { if (flags.chapter < 2 || !has(x) || !has(y) || !floorId) {
return ['none']; return ['none'];
} }
@ -1105,6 +1105,15 @@ export function ensureFloorDamage(floorId: FloorIds) {
floor.enemy ??= new EnemyCollection(floorId); 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 { declare global {
interface PluginDeclaration { interface PluginDeclaration {
damage: { damage: {

View File

@ -17,8 +17,8 @@ import * as study from './study';
import * as towerBoss from './towerBoss'; import * as towerBoss from './towerBoss';
import * as utils from './utils'; import * as utils from './utils';
import * as chase from './chase'; import * as chase from './chase';
import * as damage from './damage'; import * as damage from './enemy/damage';
import * as battle from './battle'; import * as battle from './enemy/battle';
export { export {
halo, halo,

View File

@ -1,4 +1,4 @@
import { ensureFloorDamage } from './damage'; import { ensureFloorDamage } from './enemy/damage';
core.control.updateDamage = function (floorId = core.status.floorId, ctx) { core.control.updateDamage = function (floorId = core.status.floorId, ctx) {
if (!floorId || core.status.gameOver || main.mode !== 'play') return; if (!floorId || core.status.gameOver || main.mode !== 'play') return;

View File

@ -760,6 +760,10 @@ interface Events extends EventData {
tryUseItem(itemId: ItemIdOf<'tools' | 'constants'>): void; tryUseItem(itemId: ItemIdOf<'tools' | 'constants'>): void;
_sys_battle(data: Block, callback?: () => void): 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; declare const events: new () => Events;