mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-03-04 03:37:07 +08:00
refactor: 脚本编辑部分内容
This commit is contained in:
parent
43937c9a54
commit
9adcb5543f
1
components.d.ts
vendored
1
components.d.ts
vendored
@ -17,6 +17,7 @@ declare module '@vue/runtime-core' {
|
|||||||
ASwitch: typeof import('ant-design-vue/es')['Switch']
|
ASwitch: typeof import('ant-design-vue/es')['Switch']
|
||||||
Box: typeof import('./src/components/box.vue')['default']
|
Box: typeof import('./src/components/box.vue')['default']
|
||||||
BoxAnimate: typeof import('./src/components/boxAnimate.vue')['default']
|
BoxAnimate: typeof import('./src/components/boxAnimate.vue')['default']
|
||||||
|
Changable: typeof import('./src/components/changable.vue')['default']
|
||||||
Colomn: typeof import('./src/components/colomn.vue')['default']
|
Colomn: typeof import('./src/components/colomn.vue')['default']
|
||||||
EnemyOne: typeof import('./src/components/enemyOne.vue')['default']
|
EnemyOne: typeof import('./src/components/enemyOne.vue')['default']
|
||||||
Scroll: typeof import('./src/components/scroll.vue')['default']
|
Scroll: typeof import('./src/components/scroll.vue')['default']
|
||||||
|
@ -18,7 +18,6 @@ function actions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
actions.prototype._init = function () {
|
actions.prototype._init = function () {
|
||||||
this.actionsdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.actions;
|
|
||||||
this.actions = {};
|
this.actions = {};
|
||||||
// --- onkeyDown注册
|
// --- onkeyDown注册
|
||||||
this.registerAction(
|
this.registerAction(
|
||||||
@ -531,7 +530,6 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) {
|
|||||||
|
|
||||||
actions.prototype._sys_keyUp = function (keyCode, altKey) {
|
actions.prototype._sys_keyUp = function (keyCode, altKey) {
|
||||||
if (!core.status.played) return true;
|
if (!core.status.played) return true;
|
||||||
this.actionsdata.onKeyUp(keyCode, altKey);
|
|
||||||
if (core.status.automaticRoute && core.status.automaticRoute.autoHeroMove) {
|
if (core.status.automaticRoute && core.status.automaticRoute.autoHeroMove) {
|
||||||
core.stopAutomaticRoute();
|
core.stopAutomaticRoute();
|
||||||
}
|
}
|
||||||
|
@ -471,7 +471,7 @@ events.prototype.openDoor = function (x, y, needKey, callback) {
|
|||||||
core.removeBlock(x, y);
|
core.removeBlock(x, y);
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
core.status.replay.animate = false;
|
core.status.replay.animate = false;
|
||||||
core.events.afterOpenDoor(block.event.id, x, y);
|
mota.game.hook.emit('afterOpenDoor', block.event.id, x, y);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}, 1); // +1是为了录像检测系统
|
}, 1); // +1是为了录像检测系统
|
||||||
} else {
|
} else {
|
||||||
@ -556,7 +556,7 @@ events.prototype._openDoor_animate = function (block, x, y, callback) {
|
|||||||
core.maps._removeBlockFromMap(core.status.floorId, block);
|
core.maps._removeBlockFromMap(core.status.floorId, block);
|
||||||
if (!locked) core.unlockControl();
|
if (!locked) core.unlockControl();
|
||||||
core.status.replay.animate = false;
|
core.status.replay.animate = false;
|
||||||
core.events.afterOpenDoor(block.event.id, x, y);
|
mota.game.hook.emit('afterOpenDoor', block.event.id, x, y);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -582,7 +582,7 @@ events.prototype._openDoor_animate = function (block, x, y, callback) {
|
|||||||
|
|
||||||
////// 开一个门后触发的事件 //////
|
////// 开一个门后触发的事件 //////
|
||||||
events.prototype.afterOpenDoor = function (doorId, x, y) {
|
events.prototype.afterOpenDoor = function (doorId, x, y) {
|
||||||
return this.eventdata.afterOpenDoor(doorId, x, y);
|
// Deprecated. See hook#afterOpenDoor.
|
||||||
};
|
};
|
||||||
|
|
||||||
events.prototype._sys_getItem = function (data, callback) {
|
events.prototype._sys_getItem = function (data, callback) {
|
||||||
@ -636,12 +636,12 @@ events.prototype.getItem = function (id, num, x, y, isGentleClick, callback) {
|
|||||||
itemHint.push(id);
|
itemHint.push(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.afterGetItem(id, x, y, isGentleClick);
|
mota.game.hook.emit('afterGetItem', id, x, y, isGentleClick);
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
};
|
};
|
||||||
|
|
||||||
events.prototype.afterGetItem = function (id, x, y, isGentleClick) {
|
events.prototype.afterGetItem = function (id, x, y, isGentleClick) {
|
||||||
this.eventdata.afterGetItem(id, x, y, isGentleClick);
|
// Deprecated. See hook#afterGetItem
|
||||||
};
|
};
|
||||||
|
|
||||||
////// 获得面前的物品(轻按) //////
|
////// 获得面前的物品(轻按) //////
|
||||||
|
@ -260,90 +260,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
|
|||||||
core.changeFloor(toId, stair, loc, null, callback);
|
core.changeFloor(toId, stair, loc, null, callback);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
|
||||||
afterOpenDoor: function (doorId, x, y) {
|
|
||||||
// 开一个门后触发的事件
|
|
||||||
|
|
||||||
var todo = [];
|
|
||||||
// 检查该点的获得开门后事件。
|
|
||||||
if (core.status.floorId == null) return;
|
|
||||||
var event =
|
|
||||||
core.floors[core.status.floorId].afterOpenDoor[x + ',' + y];
|
|
||||||
if (event) core.unshift(todo, event);
|
|
||||||
|
|
||||||
if (todo.length > 0) core.insertAction(todo, x, y);
|
|
||||||
|
|
||||||
if (core.status.event.id == null) core.continueAutomaticRoute();
|
|
||||||
else core.clearContinueAutomaticRoute();
|
|
||||||
},
|
|
||||||
afterGetItem: function (itemId, x, y, isGentleClick) {
|
|
||||||
// 获得一个道具后触发的事件
|
|
||||||
// itemId:获得的道具ID;x和y是该道具所在的坐标
|
|
||||||
// isGentleClick:是否是轻按触发的
|
|
||||||
if (
|
|
||||||
(itemId.endsWith('Potion') ||
|
|
||||||
itemId == 'I482' ||
|
|
||||||
itemId == 'I484' ||
|
|
||||||
itemId == 'I487' ||
|
|
||||||
itemId == 'I491') &&
|
|
||||||
core.material.items[itemId].cls == 'items'
|
|
||||||
)
|
|
||||||
core.playSound('回血');
|
|
||||||
else core.playSound('获得道具');
|
|
||||||
|
|
||||||
var todo = [];
|
|
||||||
// 检查该点的获得道具后事件。
|
|
||||||
if (core.status.floorId == null) return;
|
|
||||||
var event =
|
|
||||||
core.floors[core.status.floorId].afterGetItem[x + ',' + y];
|
|
||||||
if (
|
|
||||||
event &&
|
|
||||||
(event instanceof Array ||
|
|
||||||
!isGentleClick ||
|
|
||||||
!event.disableOnGentleClick)
|
|
||||||
) {
|
|
||||||
core.unshift(todo, event);
|
|
||||||
}
|
|
||||||
if (core.hasFlag('spring')) {
|
|
||||||
if (!core.hasFlag('springCount'))
|
|
||||||
core.setFlag('springCount', 0);
|
|
||||||
if (
|
|
||||||
itemId.endsWith('Potion') ||
|
|
||||||
itemId == 'I482' ||
|
|
||||||
itemId == 'I484' ||
|
|
||||||
itemId == 'I487' ||
|
|
||||||
itemId == 'I491'
|
|
||||||
) {
|
|
||||||
core.addFlag('springCount', 1);
|
|
||||||
}
|
|
||||||
if (core.getFlag('springCount', 0) == 50) {
|
|
||||||
core.setFlag('springCount', 0);
|
|
||||||
core.status.hero.hpmax +=
|
|
||||||
core.getNakedStatus('hpmax') * 0.1;
|
|
||||||
}
|
|
||||||
core.updateStatusBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (todo.length > 0) core.insertAction(todo, x, y);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
onKeyUp: function (keyCode, altKey) {
|
|
||||||
// 键盘按键处理,可以在这里自定义快捷键列表
|
|
||||||
// keyCode:当前按键的keyCode(每个键的keyCode自行百度)
|
|
||||||
// altKey:Alt键是否被按下,为true代表同时按下了Alt键
|
|
||||||
// 可以在这里任意增加或编辑每个按键的行为
|
|
||||||
|
|
||||||
if (core.status.lockControl) return;
|
|
||||||
|
|
||||||
// 如果处于正在行走状态,则不处理
|
|
||||||
if (core.isMoving()) return;
|
|
||||||
|
|
||||||
// Alt+0~9,快捷换上套装
|
|
||||||
if (altKey && keyCode >= 48 && keyCode <= 57) {
|
|
||||||
core.items.quickLoadEquip(keyCode - 48);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
control: {
|
control: {
|
||||||
@ -436,31 +352,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getStatusLabel: function (name) {
|
|
||||||
// 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
|
|
||||||
// 请注意此项仅影响 libs/ 下的内容(如绘制怪物手册、数据统计等)
|
|
||||||
// 自行定义的(比如获得道具效果)中用到的“攻击+3”等需要自己去对应地方修改
|
|
||||||
|
|
||||||
return (
|
|
||||||
{
|
|
||||||
name: '名称',
|
|
||||||
lv: '等级',
|
|
||||||
hpmax: '生命回复',
|
|
||||||
hp: '生命',
|
|
||||||
manamax: '魔力上限',
|
|
||||||
mana: '额外攻击',
|
|
||||||
atk: '攻击',
|
|
||||||
def: '防御',
|
|
||||||
mdef: '智慧',
|
|
||||||
money: '金币',
|
|
||||||
exp: '经验',
|
|
||||||
point: '加点',
|
|
||||||
steps: '步数',
|
|
||||||
up: '升级',
|
|
||||||
none: '无'
|
|
||||||
}[name] || name
|
|
||||||
);
|
|
||||||
},
|
|
||||||
updateStatusBar: function () {
|
updateStatusBar: function () {
|
||||||
// 更新状态栏
|
// 更新状态栏
|
||||||
|
|
||||||
|
@ -8,6 +8,14 @@ export interface GameEvent extends EmitableEvent {
|
|||||||
mounted: () => void;
|
mounted: () => void;
|
||||||
/** Emitted in plugin/ui.js */
|
/** Emitted in plugin/ui.js */
|
||||||
statusBarUpdate: () => void;
|
statusBarUpdate: () => void;
|
||||||
|
/** Emitted in libs/events.js */
|
||||||
|
afterGetItem: (
|
||||||
|
itemId: AllIdsOf<'items'>,
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
isGentleClick: boolean
|
||||||
|
) => void;
|
||||||
|
afterOpenDoor: (doorId: AllIdsOf<'animates'>, x: number, y: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const hook = new EventEmitter<GameEvent>();
|
export const hook = new EventEmitter<GameEvent>();
|
||||||
|
61
src/plugin/game/hook.ts
Normal file
61
src/plugin/game/hook.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
export {};
|
||||||
|
|
||||||
|
const potionItems: AllIdsOf<'items'>[] = [
|
||||||
|
'redPotion',
|
||||||
|
'bluePotion',
|
||||||
|
'yellowPotion',
|
||||||
|
'greenPotion',
|
||||||
|
'I482',
|
||||||
|
'I484',
|
||||||
|
'I487',
|
||||||
|
'I491'
|
||||||
|
];
|
||||||
|
|
||||||
|
mota.game.hook.on('afterGetItem', (itemId, x, y, isGentleClick) => {
|
||||||
|
// 获得一个道具后触发的事件
|
||||||
|
// itemId:获得的道具ID;x和y是该道具所在的坐标
|
||||||
|
// isGentleClick:是否是轻按触发的
|
||||||
|
if (potionItems.includes(itemId)) core.playSound('回血');
|
||||||
|
else core.playSound('获得道具');
|
||||||
|
|
||||||
|
const todo: any[] = [];
|
||||||
|
// 检查该点的获得道具后事件。
|
||||||
|
if (core.status.floorId == null) return;
|
||||||
|
const event = core.floors[core.status.floorId].afterGetItem[`${x},${y}`];
|
||||||
|
if (
|
||||||
|
event &&
|
||||||
|
(event instanceof Array ||
|
||||||
|
!isGentleClick ||
|
||||||
|
!event.disableOnGentleClick)
|
||||||
|
) {
|
||||||
|
core.unshift(todo, event as any[]);
|
||||||
|
}
|
||||||
|
if (core.hasFlag('spring')) {
|
||||||
|
if (!core.hasFlag('springCount')) core.setFlag('springCount', 0);
|
||||||
|
if (potionItems.includes(itemId)) {
|
||||||
|
core.addFlag('springCount', 1);
|
||||||
|
}
|
||||||
|
if (core.getFlag<number>('springCount', 0) === 50) {
|
||||||
|
core.setFlag('springCount', 0);
|
||||||
|
core.status.hero.hpmax += core.getNakedStatus('hpmax') * 0.1;
|
||||||
|
}
|
||||||
|
core.updateStatusBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (todo.length > 0) core.insertAction(todo, x, y);
|
||||||
|
});
|
||||||
|
|
||||||
|
mota.game.hook.on('afterOpenDoor', (doorId, x, y) => {
|
||||||
|
// 开一个门后触发的事件
|
||||||
|
|
||||||
|
const todo: any[] = [];
|
||||||
|
// 检查该点的获得开门后事件。
|
||||||
|
if (core.status.floorId == null) return;
|
||||||
|
const event = core.floors[core.status.floorId].afterOpenDoor[`${x},${y}`];
|
||||||
|
if (event) core.unshift(todo, event as any[]);
|
||||||
|
|
||||||
|
if (todo.length > 0) core.insertAction(todo, x, y);
|
||||||
|
|
||||||
|
if (core.status.event.id == null) core.continueAutomaticRoute();
|
||||||
|
else core.clearContinueAutomaticRoute();
|
||||||
|
});
|
@ -1,4 +1,4 @@
|
|||||||
import { has } from '../utils';
|
import { getStatusLabel, has } from '../utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有装备
|
* 获取所有装备
|
||||||
@ -28,9 +28,7 @@ export function getAddStatus(equip: Equip) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<span style="display: flex">
|
<span style="display: flex">
|
||||||
<span style="flex-basis: 50%">
|
<span style="flex-basis: 50%">{getStatusLabel(v)}</span>
|
||||||
{core.getStatusLabel(v)}
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span
|
<span
|
||||||
style={{
|
style={{
|
||||||
@ -84,7 +82,7 @@ export function getNowStatus(nowEquip?: Equip, onCol: boolean = false) {
|
|||||||
return (
|
return (
|
||||||
<div class="hero-status-one">
|
<div class="hero-status-one">
|
||||||
<span class="hero-status-label">
|
<span class="hero-status-label">
|
||||||
{core.getStatusLabel(v)}
|
{getStatusLabel(v)}
|
||||||
</span>
|
</span>
|
||||||
<div class="hero-status-value">
|
<div class="hero-status-value">
|
||||||
<span style="margin-right: 20%">{status}</span>
|
<span style="margin-right: 20%">{status}</span>
|
||||||
|
@ -307,3 +307,29 @@ export function generateBinary(arr: boolean[]) {
|
|||||||
});
|
});
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得某个状态的中文名
|
||||||
|
* @param name 要获取的属性名
|
||||||
|
*/
|
||||||
|
export function getStatusLabel(name: string) {
|
||||||
|
return (
|
||||||
|
{
|
||||||
|
name: '名称',
|
||||||
|
lv: '等级',
|
||||||
|
hpmax: '生命回复',
|
||||||
|
hp: '生命',
|
||||||
|
manamax: '魔力上限',
|
||||||
|
mana: '额外攻击',
|
||||||
|
atk: '攻击',
|
||||||
|
def: '防御',
|
||||||
|
mdef: '智慧',
|
||||||
|
money: '金币',
|
||||||
|
exp: '经验',
|
||||||
|
point: '加点',
|
||||||
|
steps: '步数',
|
||||||
|
up: '升级',
|
||||||
|
none: '无'
|
||||||
|
}[name] || name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -93,3 +93,21 @@
|
|||||||
z-index: 999;
|
z-index: 999;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.changable {
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.changable[change='true'] {
|
||||||
|
animation: changable-animate 1s linear alternate 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes changable-animate {
|
||||||
|
0% {
|
||||||
|
background-color: #7cc9;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #0000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
5
src/types/action.d.ts
vendored
5
src/types/action.d.ts
vendored
@ -86,11 +86,6 @@ interface Actions extends VoidedActionFuncs {
|
|||||||
*/
|
*/
|
||||||
readonly _HY_: number;
|
readonly _HY_: number;
|
||||||
|
|
||||||
/**
|
|
||||||
* 脚本编辑中的交互函数
|
|
||||||
*/
|
|
||||||
readonly actionsdata: ActionData;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 所有已注册的交互操作
|
* 所有已注册的交互操作
|
||||||
*/
|
*/
|
||||||
|
6
src/types/control.d.ts
vendored
6
src/types/control.d.ts
vendored
@ -698,12 +698,6 @@ interface Control {
|
|||||||
*/
|
*/
|
||||||
getNakedStatus(name?: keyof NumbericHeroStatus): number;
|
getNakedStatus(name?: keyof NumbericHeroStatus): number;
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得某个状态的中文名
|
|
||||||
* @param name 要获取的属性名
|
|
||||||
*/
|
|
||||||
getStatusLabel(name: string): string;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置主角某个属性的百分比修正倍率,初始值为1,
|
* 设置主角某个属性的百分比修正倍率,初始值为1,
|
||||||
* 倍率存放在flag: `__${name}_${buff}__` 中
|
* 倍率存放在flag: `__${name}_${buff}__` 中
|
||||||
|
6
src/types/function.d.ts
vendored
6
src/types/function.d.ts
vendored
@ -20,12 +20,6 @@ interface ControlData {
|
|||||||
*/
|
*/
|
||||||
loadData(data: Save, callback?: () => void): void;
|
loadData(data: Save, callback?: () => void): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取一个属性对应的中文名
|
|
||||||
* @param name 要获取的状态名称
|
|
||||||
*/
|
|
||||||
getStatusLabel(name: string): string;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 立即仅更新状态栏
|
* 立即仅更新状态栏
|
||||||
*/
|
*/
|
||||||
|
2
src/types/map.d.ts
vendored
2
src/types/map.d.ts
vendored
@ -215,7 +215,7 @@ interface ResolvedFloor<T extends FloorIds = FloorIds> extends FloorBase<T> {
|
|||||||
/**
|
/**
|
||||||
* 获得道具后事件
|
* 获得道具后事件
|
||||||
*/
|
*/
|
||||||
afterGetItem: Record<LocString, MotaEvent>;
|
afterGetItem: Record<LocString, MotaAction>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开门后事件
|
* 开门后事件
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<div id="filter">
|
<div id="filter">
|
||||||
<a-select v-model:value="norm" class="select">
|
<a-select v-model:value="norm" class="select">
|
||||||
<a-select-option v-for="t of normList" :value="t">{{
|
<a-select-option v-for="t of normList" :value="t">{{
|
||||||
t === 'none' ? '所有' : label(t)
|
t === 'none' ? '所有' : getStatusLabel(t)
|
||||||
}}</a-select-option>
|
}}</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
<a-divider type="vertical" class="divider"></a-divider>
|
<a-divider type="vertical" class="divider"></a-divider>
|
||||||
@ -191,12 +191,12 @@ import {
|
|||||||
import Scroll from '../components/scroll.vue';
|
import Scroll from '../components/scroll.vue';
|
||||||
import { getAddStatus, getEquips, getNowStatus } from '../plugin/ui/equipbox';
|
import { getAddStatus, getEquips, getNowStatus } from '../plugin/ui/equipbox';
|
||||||
import BoxAnimate from '../components/boxAnimate.vue';
|
import BoxAnimate from '../components/boxAnimate.vue';
|
||||||
import { has, keycode, tip, type } from '../plugin/utils';
|
import { has, tip, type } from '../plugin/utils';
|
||||||
import { cancelGlobalDrag, isMobile, useDrag } from '../plugin/use';
|
import { cancelGlobalDrag, isMobile, useDrag } from '../plugin/use';
|
||||||
import { hyper, sleep } from 'mutate-animate';
|
import { hyper } from 'mutate-animate';
|
||||||
import { KeyCode } from '../plugin/keyCodes';
|
|
||||||
import { GameUi } from '@/core/main/custom/ui';
|
import { GameUi } from '@/core/main/custom/ui';
|
||||||
import { gameKey } from '@/core/main/init/hotkey';
|
import { gameKey } from '@/core/main/init/hotkey';
|
||||||
|
import { getStatusLabel } from '../plugin/utils';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
num: number;
|
num: number;
|
||||||
@ -223,8 +223,6 @@ const sType = ref<'value' | 'percentage'>('value');
|
|||||||
// 攻击 防御 回血 额外攻击
|
// 攻击 防御 回血 额外攻击
|
||||||
const normList = ['none', 'atk', 'def', 'hpmax', 'mana'];
|
const normList = ['none', 'atk', 'def', 'hpmax', 'mana'];
|
||||||
|
|
||||||
const label = core.getStatusLabel;
|
|
||||||
|
|
||||||
watch(sort, n => {
|
watch(sort, n => {
|
||||||
selected.value = toShow.value.length - selected.value - 1;
|
selected.value = toShow.value.length - selected.value - 1;
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user