优化百科全书的说明

This commit is contained in:
unanmed 2023-01-01 00:06:45 +08:00
parent 25b87669ce
commit 427242c430
4 changed files with 105 additions and 42 deletions

View File

@ -18,32 +18,23 @@ main.floors.MT12=
"parallelDo": "",
"events": {
"7,1": [
"\t[原始人]\b[down,hero]欸,杰克兄弟,你怎么在这啊",
"\t[杰克,thief]\b[down,7,1]啊,是你呀",
"\t[杰克,thief]\b[down,7,1]我刚刚被一群怪物追杀,就逃到这里了",
"\t[杰克,thief]\b[down,7,1]很奇怪,为什么这几天有这么多凶猛的怪物啊",
"\t[原始人]\b[down,hero]不知道,我记得上一次这样,还是在老虎们在山间找不到食物,下山觅食的时候吧",
"\t[原始人]\b[down,hero]难道说山上发生了什么灾害吗",
"\t[杰克,thief]\b[down,7,1]好像有吧",
"\t[杰克,thief]\b[down,7,1]我前几天还看见一道雷准准地劈在了山顶上",
"\t[原始人]\b[down,hero]难道是山火吗",
"\t[原始人]\b[down,hero]不对呀,山火的话我怎么没看见烟啊",
"\t[杰克,thief]\b[down,7,1]不清楚,反正上面发生了我们不知道的事",
"\t[原始人]\b[down,hero](这山上肯定发生了什么不得了的好事,我去了说不定还能找到不少好东西呢)",
"\t[原始人]\b[down,hero]我要去山上走一遭",
"\t[杰克,thief]\b[down,7,1]哈?",
"\t[杰克,thief]\b[down,7,1]兄弟,你不是在骗我吧",
"\t[杰克,thief]\b[down,7,1]山上这么危险,去了难道不是死路一条?",
"\t[原始人]\b[down,hero]我最近力量提升很快,所以你不用担心我",
"\t[杰克,thief]\b[down,7,1]但山上的怪物的强大你也知道,我们十来个人一起去打一个都被打得落荒而逃",
"\t[原始人]\b[down,hero](我要不要把绿宝石的事告诉他呢?这一路上有很多绿宝石,他却没有提到,难道他看不见吗?)",
"\t[原始人]\b[down,hero](感觉事情很奇怪,还是别告诉他了吧)",
"\t[原始人]\b[down,hero]我有特殊的方法保命,你不需要操心太多",
"\t[杰克,thief]\b[down,7,1]那看来我也拦不住你了",
"\t[杰克,thief]\b[down,7,1]山地那边有一个地方被突然凸起来的高地挡着",
"\t[杰克,thief]\b[down,7,1]我就把我新学的技能教给你吧",
"\t[原始人]\b[down,hero]杰克?你怎么在这?",
"\t[杰克,thief]\b[down,7,1]我刚刚出山洞,就发现了一堆怪物。",
"\t[杰克,thief]\b[down,7,1]那些怪物冲着我就跑过来,我根本打不过他们。",
"\t[杰克,thief]\b[down,7,1]我就跑到了这里。",
"\t[杰克,thief]\b[down,7,1]多谢你救了我。",
"\t[原始人]\b[down,hero]不用多谢了,咱都是兄弟的。",
"\t[杰克,thief]\b[down,7,1]你来这里是要干什么?",
"\t[原始人]\b[down,hero](他好像没有注意到绿色结晶,就不要提这件事了吧)",
"\t[原始人]\b[down,hero]我要上山砍一些柴火。",
"\t[原始人]\b[down,hero]但是上山的路被强大的怪物堵死了,我根本上不去。",
"\t[杰克,thief]\b[down,7,1]这样啊。",
"\t[杰克,thief]\b[down,7,1]正好,我最近学会了一招,能让你避开那些怪物,我来教给你吧!",
"获得技能:跳跃\n快捷键2消耗200点生命值困难消耗400点一个地图只能使用3次\n如果前方为可通行的地面则不能使用该技能\n如果前方为怪物则将怪物移至勇士视线上第一个不能通行的方块后\n如果前方为障碍物则直接跳到该障碍物的后方",
"\t[原始人]\b[down,hero]多谢兄弟了!",
"\t[原始人]\b[down,hero]多谢杰克兄弟了啊。",
"\t[杰克,thief]\b[down,7,1]不过还是要小心山上的那些怪物,那些怪物都很强。",
"\t[原始人]\b[down,hero]我明白,但是我必须上山,不然都要饿死冻死了。",
"\t[杰克,thief]\b[down,7,1]那我就不打扰你了,咱们之后再见。",
"去南方那个之前过不去的地方推进游戏剧情",
"手机端可以点击右下角的难度来切换下方工具栏至数字键",
{

View File

@ -1,4 +1,30 @@
{
"tip": {
"text": "注意事项",
"condition": "true",
"desc": [
"这里显示本塔中需要注意的事项。",
"<br>",
"<br>",
"1. 本塔中<span style=\"color: gold\">几乎所有 ui </span>都可以纵向滚动,如果发现显示不全,",
"可以尝试上下拖动,就像浏览网页一样。电脑端还可以使用滚轮上下滚动。",
"大部分可以纵向滚动的 ui 都会在右方有一个滚动条,也可以拖动它进行滚动,例如本百科全书的条目列表和",
"条目说明都是可以通过上述方式滚动的。",
"<br>",
"<br>",
"2. 本百科全书的内容会<span style=\"color: gold\">随着游戏的推进而增加新内容</span>",
"同时每次增加新内容时都会有提示。",
"<br>",
"<br>",
"3. 本塔主要面向电脑端设计,",
"<span style=\"color: gold\">建议使用电脑游玩以获得更好的游戏体验</span>。但是手机依然可以游玩本塔,",
"但部分操作可能不是很方便ui 也可能不是很美观,不过依然可以完整体验本游戏。",
"<br>",
"<br>",
"4. 对于手机端,可以点击<span style=\"color: gold\">右下角的难度文字</span>来切换工具栏至数字键。",
"这样,你可以更加方便地进行使用技能等操作。"
]
},
"statusBar": {
"text": "状态栏",
"condition": "true",
@ -60,8 +86,8 @@
"<br>",
"1. 打开怪物手册,选中怪物,进入怪物更多信息栏,点击标记怪物。",
"<br>",
"2. 将鼠标移动到你想要标记的怪物上面,按下<span style=\"color: gold\">",
"M键</span>,即可标记怪物,注意浏览地图中不能用该方式标记。",
"2. 将鼠标移动到你想要标记的怪物上面,<span style=\"color: gold\">",
"按下M键</span>,即可标记怪物,注意浏览地图中不能用该方式标记。",
"手机端暂时没有快速标记怪物的方式。",
"<br>",
"<br>",
@ -99,20 +125,27 @@
"<br>",
"<br>",
"点击一个怪物或者按下回车空格后,将进入怪物详细信息界面。这个界面分为多个栏,分别是特殊属性栏,详细临界栏,更多信息栏。",
"进入怪物详细信息后默认在特殊属性栏,该栏可以查看怪物的特殊属性。注意特殊属性依然可以纵向滚动。在特殊属性下方,",
"进入怪物详细信息后默认在特殊属性栏,该栏可以查看怪物的特殊属性。<span style=\"color: gold\">",
"同时也是唯一一个会在点击后返回到怪物手册界面的栏,更多信息请查看本条目的最后一段</span>。",
"注意特殊属性依然可以纵向滚动。在特殊属性下方,",
"是怪物的临界表,可以粗略地查看怪物的临界信息。在下方,你可以点击详细临界信息进入详细临界栏。",
"<br>",
"<br>",
"在详细临界栏中,怪物的伤害会以可视化折线图的方式显示出来,从而你可以更为清晰地看出怪物减伤趋势。",
"除了查看怪物伤害曲线,你还可以规划宝石。每个折线图下方都有一个滑动条,你可以拖动来模拟吃宝石。",
"注意,拖动时,滑动条左边会显示当前的加攻或加防次数,这个数值指的是在勇士所在地图中需要吃的宝石数量。",
"例如,当前勇士所在地图中一个宝石最低加2点攻击加攻次数为3那么勇士的攻击增加量就为6。",
"注意,拖动时,滑动条左边会显示当前的加攻或加防次数,这个数值指的是在勇士所在地图中需要吃的最弱的宝石数量。",
"例如,当前勇士所在地图中最弱的宝石加2点攻击加攻次数为3那么勇士的攻击增加量就为6。",
"勇士增加的攻击数值也会在下方显示。当加攻次数和加防次数改变时,折线图也会变化。",
"当前状态下怪物的伤害以及减伤总量也会在下方显示。",
"<br>",
"<br>",
"在特殊属性栏,点击下方的怪物更多信息可以进入更多信息栏。此栏中,你可以查看怪物描述。但这不是这一栏的核心功能。",
"这一栏的核心功能是标记怪物。被标记的怪物会有一些非常方便的行为,这些行为可以在“标记怪物”说明中查看。"
"这一栏的核心功能是标记怪物。被标记的怪物会有一些非常方便的行为,这些行为可以在“标记怪物”条目中查看。",
"<br>",
"<br>",
"注意,在怪物详细信息中,只有特殊属性栏可以通过点击返回到怪物手册界面,详细临界与更多信息栏均不行。",
"如果你是电脑端,在任意栏目中<span style=\"color: gold\">按下X键</span>会退出怪物手册,返回游戏,",
"<span style=\"color: gold\">按下回车Enter键</span>会回到怪物手册界面。"
]
},
"tools": {
@ -153,13 +186,14 @@
"<span style=\"color: lightgreen\">2. 生命回复</span>",
"生命回复指的是勇士每回合回复的生命值。当与怪物战斗时,勇士每回合都会回复对应量的生命值。因此,当吃攻击时,",
"与怪物战斗的回合数可能会减少,导致生命回复的总回复量减少。不过大部分情况下不需要在意这一点,",
"减少一回合并不会对吸的血造成很大的影响。该项会显示在状态栏的生命值右方偏下的位置",
"减少一回合并不会对吸的血造成很大的影响,除了一些特殊情况。",
"该项会显示在状态栏的生命值右方偏下的位置。",
"<br>",
"<br>",
"<span style=\"color: lightcoral\">3. 额外攻击</span>",
"额外攻击指的是勇士每回合的额外造成的伤害。一般情况下,当勇士破了怪物的防御时,该项便会起作用。",
"额外攻击相当于魔攻,无法通过一般方式减免。当勇士攻击怪物时,每回合都会附加对应量的伤害,对坚固怪同样有效。",
"额外攻击会显示在状态栏的攻击右方偏下的位置"
"额外攻击会显示在状态栏的攻击右方偏下的位置"
]
},
"skillTree": {
@ -176,7 +210,7 @@
"<br>",
"<br>",
"打开技能树页面后,你可以在上方看到技能的名称与描述,下方会显示技能树,以及升级要求等。点击一个技能可以选中技能,",
"再次点击可以升级技能。",
"再次点击可以升级技能。注意,前置技能栏可以上下滚动,因此如果发现显示不全,可以尝试上下滚动前置技能栏",
"<br>",
"<br>",
"注意,技能在点开之后是无法取消的,因此,加点时请慎重加点。注意,部分技能是必点技能,这些技能会在技能说明中明确指出,",

View File

@ -1,17 +1,26 @@
import { has } from '../utils';
export default function init() {
return { splitArea };
}
type BFSFromString = `${FloorIds},${number},${number},${Dir}`;
type BFSToString = `${FloorIds},${number},${number}`;
interface MapBFSResult {
maps: FloorIds[];
link: Record<
`${FloorIds}_${number}_${number}_${Dir}`,
`${FloorIds}_${number}_${number}`
>;
link: Record<BFSFromString, BFSToString>;
}
const bfsCache: Partial<Record<FloorIds, MapBFSResult>> = {};
const arrow: Partial<Record<AllIds, Dir>> = {
leftPortal: 'left',
rightPortal: 'right',
upPortal: 'up',
downPortal: 'down'
};
export function splitArea() {}
export function getMapData(floorId: FloorIds) {}
@ -23,13 +32,42 @@ export function getMapDrawData(floorId: FloorIds) {}
* @param floorId id
* @param noCache 使
*/
function bfs(floorId: FloorIds, noCache: boolean = false) {
if (bfsCache[floorId] && !noCache) return bfsCache[floorId];
function bfs(floorId: FloorIds, noCache: boolean = false): MapBFSResult {
if (has(bfsCache[floorId]) && !noCache) return bfsCache[floorId]!;
const queue = [floorId];
const used: Partial<Record<FloorIds, boolean>> = {};
const used: Partial<Record<FloorIds, boolean>> = {
[floorId]: true
};
const floors = [floorId];
const link: Record<BFSFromString, BFSToString> = {};
while (queue.length > 0) {
const now = queue.shift()!;
const change = core.floors[now].changeFloor;
const blocks = core.getMapBlocksObj(now);
for (const [loc, ev] of Object.entries(change)) {
const target = ev.floorId as FloorIds;
if (target.startsWith(':')) continue;
const block = blocks[loc as LocString];
const id = block.event.id;
if (id in arrow) {
const from = `${now},${loc},${arrow[id]}` as BFSFromString;
const to = `${target},${ev.loc![0]},${
ev.loc![1]
}` as BFSToString;
link[from] = to;
if (!used[target]) {
queue.push(target);
floors.push(target);
}
}
}
used[now] = true;
}
return {
maps: floors,
link
};
}

2
src/types/map.d.ts vendored
View File

@ -23,7 +23,7 @@ type CompressedMap<T extends FloorIds = FloorIds> = Omit<
NotCopyPropertyInCompressedMap
>;
interface Block<N extends AllNumbers = AllNumbers> {
interface Block<N extends Exclude<AllNumbers, 0> = Exclude<AllNumbers, 0>> {
/**
*
*/