feat:新版道具栏 施工中
This commit is contained in:
parent
06b6975903
commit
5f25cbb48d
@ -2417,18 +2417,19 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
// 本插件全部使用自定义的布局和监听事件
|
||||
// 函数core.events._checkStatus('toolbox', fromUserAction)会导致core.status.event.id被修改,从而触发actions中的样板自带系统监听事件。
|
||||
// 不知道怎么处理,所以暂时不作相应检查,直接画,出了问题再说。
|
||||
// 复写events.openToolbox
|
||||
core.events.openToolbox = function (fromUserAction) {
|
||||
if (core.isReplaying()) return;
|
||||
drawItemBox('all');
|
||||
}
|
||||
|
||||
// 复写events.openEquipbox
|
||||
core.events.openEquipbox = function (fromUserAction) {
|
||||
if (core.isReplaying()) return;
|
||||
drawItemBox('equips');
|
||||
}
|
||||
|
||||
// 复写items._afterUseItem
|
||||
// flag:itemsUsedCount {[x:string]:boolean} 成功使用了的道具的计数
|
||||
// flag:itemsUsedCount {[itemId:string]:boolean} 成功使用了的道具的计数
|
||||
const origin__afterUseItem = items.prototype._afterUseItem;
|
||||
items.prototype._afterUseItem = function (itemId) {
|
||||
const itemsUsedCount = core.getFlag('itemsUsedCount', {});
|
||||
@ -2440,7 +2441,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
|
||||
// 复写ui.getToolboxItems
|
||||
// flag:markedItems string[] 在道具栏中置顶的道具的列表
|
||||
// flag:hideInfo {[x:string]:boolean} 手动选择了显示/隐藏的道具的列表
|
||||
// flag:hideInfo {[itemId:string]:boolean} 手动选择了显示/隐藏的道具的列表
|
||||
|
||||
core.ui.getToolboxItems = function (cls, showHide, sortFunc) {
|
||||
const markedItems = core.getFlag('markedItems', []);
|
||||
@ -2552,30 +2553,33 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
// #endregion
|
||||
// #region 绘制用到的按钮类
|
||||
class ChoiceButton extends ButtonBase {
|
||||
constructor(x, y, w, h, text) {
|
||||
constructor(x, y, w, h, text, config) {
|
||||
super(x, y, w, h);
|
||||
/** @type {'clicked'|undefined} */this.status;
|
||||
/** @type {'selected'|'none'} */this.status = 'none';
|
||||
this.text = text;
|
||||
const { fillStyle = 'rgb(204, 204, 204)', strokeStyle = 'black', fontStyle = 'black',
|
||||
selectedFillStyle = 'rgb(255, 51, 153)', selectedstrokeStyle = 'black', selectedFontStyle = 'white',
|
||||
radius = 3, lineWidth = 2 } = config || {};
|
||||
this.draw = () => {
|
||||
const ctx = this.ctx;
|
||||
core.setTextAlign(ctx, 'center');
|
||||
core.setTextBaseline(ctx, 'alphabetic');
|
||||
if (this.status === 'clicked') {
|
||||
core.fillRoundRect(ctx, x, y, w, h, 3, ' #ADD8E6');
|
||||
core.strokeRoundRect(ctx, x, y, w, h, 3, ' #FFFF00');
|
||||
core.fillText(ctx, this.text, x + w / 2, y + h / 2 + 5, ' #555555', '16px Verdana');
|
||||
if (this.status === 'selected') {
|
||||
core.fillRoundRect(ctx, x, y, w, h, radius, selectedFillStyle);
|
||||
core.strokeRoundRect(ctx, x, y, w, h, radius, selectedstrokeStyle, lineWidth);
|
||||
core.fillText(ctx, this.text, x + w / 2, y + h / 2 + 5, selectedFontStyle, '16px Verdana');
|
||||
} else {
|
||||
core.fillRoundRect(ctx, x, y, w, h, 3, 'rgb(204, 204, 204)');
|
||||
core.strokeRoundRect(ctx, x, y, w, h, 3, 'rgb(51, 102, 153)');
|
||||
core.fillText(ctx, this.text, x + w / 2, y + h / 2 + 5, ' #333333', '16px Verdana');
|
||||
core.fillRoundRect(ctx, x, y, w, h, radius, fillStyle);
|
||||
core.strokeRoundRect(ctx, x, y, w, h, radius, strokeStyle, lineWidth);
|
||||
core.fillText(ctx, this.text, x + w / 2, y + h / 2 + 5, fontStyle, '16px Verdana');
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class HideBtn extends ChoiceButton {
|
||||
constructor(x, y, w, h) {
|
||||
super(x, y, w, h, '隐藏');
|
||||
constructor(x, y, w, h, config) {
|
||||
super(x, y, w, h, '隐藏', config);
|
||||
const oriDraw = this.draw;
|
||||
this.draw = () => {
|
||||
if (core.material.items[itemId]) {
|
||||
@ -2589,8 +2593,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
}
|
||||
|
||||
class MarkBtn extends ChoiceButton {
|
||||
constructor(x, y, w, h) {
|
||||
super(x, y, w, h, '隐藏');
|
||||
constructor(x, y, w, h, config) {
|
||||
super(x, y, w, h, '隐藏', config);
|
||||
const oriDraw = this.draw;
|
||||
this.draw = () => {
|
||||
const markedItems = core.getFlag('markedItems', []);
|
||||
@ -2600,6 +2604,34 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
}
|
||||
}
|
||||
|
||||
class ClassifyBtn extends ChoiceButton {
|
||||
constructor(x, y, w, h, text, subType, config) {
|
||||
super(x, y, w, h, text, config);
|
||||
this.subType = subType;
|
||||
const oriDraw = this.draw;
|
||||
this.draw = () => {
|
||||
if (type === 'equips') return;
|
||||
if (itemBoard.subType === this.subType) this.status = 'selected';
|
||||
else this.status = "none";
|
||||
oriDraw();
|
||||
}
|
||||
this.event = () => {
|
||||
if (type === 'equips') return;
|
||||
if (itemBoard.subType !== this.subType) {
|
||||
const oldConfig = itemBoard.cache[itemBoard.subType],
|
||||
newConfig = itemBoard.cache[this.subType];
|
||||
oldConfig.page = itemBoard.page;
|
||||
oldConfig.index = itemBoard.index;
|
||||
itemBoard.page = newConfig.page;
|
||||
itemBoard.index = newConfig.index;
|
||||
itemBoard.subType = this.subType;
|
||||
itemBoard.refreshItemList();
|
||||
redraw(true);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class ShowHideBtn extends ButtonBase {
|
||||
constructor(x, y, w, h) {
|
||||
super(x, y, w, h)
|
||||
@ -2683,8 +2715,57 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
// #region 绘制用到的菜单类
|
||||
|
||||
class ItemBoxBack extends MenuBase {
|
||||
constructor(type) {
|
||||
super('itemBoxBase');
|
||||
constructor() {
|
||||
super('itemBoxBase'); // 装备栏和道具栏共用同一个光标,故所有按键事件全部写在这里处理
|
||||
this.keyEvent = (keyCode) => {
|
||||
if ([37, 38, 39, 40].includes(keyCode) && selectType === '') { // 未选中的情况下按方向s键先选择物品栏第一格
|
||||
selectType = 'toolBox';
|
||||
itemBoard.index = 0;
|
||||
return;
|
||||
}
|
||||
if (keyCode === 37) { // left
|
||||
if (selectType === 'toolBox') itemBoard.pgDown();
|
||||
else if (selectType === 'equipBox') equipTable.pgDown();
|
||||
redraw();
|
||||
}
|
||||
if (keyCode === 39) { // right
|
||||
if (selectType === 'toolBox') itemBoard.pgUp();
|
||||
else if (selectType === 'equipBox') equipTable.pgUp();
|
||||
redraw();
|
||||
}
|
||||
if (keyCode === 38) { // up
|
||||
if (selectType === 'toolBox') {
|
||||
if (itemBoard.index === 0) {
|
||||
let newIndex = Math.min(equipTable.pageCap - 1,
|
||||
core.status.globalAttribute.equipName.length - equipTable.page * equipTable.pageCap);
|
||||
equipTable.select(newIndex);
|
||||
redraw();
|
||||
}
|
||||
else {
|
||||
itemBoard.select(itemBoard.index - 1);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
else if (selectType === 'equipBox') {
|
||||
if (equipTable.index >= equipTable.rowMax) {
|
||||
equipTable.index -= equipTable.rowMax;
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (keyCode === 40) { // down
|
||||
if (selectType === 'toolBox') {
|
||||
if (itemBoard.index >= itemBoard.currItemList.length - 1) { }
|
||||
else {
|
||||
itemBoard.select(itemBoard.index + 1);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
else if (selectType === 'equipBox') {
|
||||
let newIndex = equipTable.index + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
drawContent() {
|
||||
@ -2707,12 +2788,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
constructor(x, y, w, h) {
|
||||
super('equipBox');
|
||||
this.page = 0;
|
||||
this.column = 0;
|
||||
this.columnMax = 4;
|
||||
this.row = 0;
|
||||
this.rowMax = 2;
|
||||
this.onePageEquips = this.columnMax * this.rowMax;
|
||||
this.index = 0;
|
||||
this.pageCap = this.columnMax * this.rowMax;
|
||||
|
||||
/** 选中了当前页面上的第几个装备格*/ this.index = 0;
|
||||
// 尺寸
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
@ -2727,23 +2807,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
for (let i = 0, l = this.equipPosList.length; i < l; i++) {
|
||||
const { x, y, index } = this.equipPosList[i];
|
||||
if (px > x && px < x + 32 && py > y && py < y + 32) {
|
||||
selectType = 'equipBox';
|
||||
itemBoard.index = -1;
|
||||
let needRedraw = this.index !== index || selectType !== 'equipBox';
|
||||
if (this.index === index) {
|
||||
if (core.status.hero.equipment[index])
|
||||
core.unloadEquip(index, () => {
|
||||
core.status.route.push("unEquip:" + index);
|
||||
});
|
||||
itemId = '';
|
||||
redraw();
|
||||
return;
|
||||
}
|
||||
else {
|
||||
this.index = index;
|
||||
itemId = (core.getEquip(index) == null) ? '' : core.getEquip(index);
|
||||
redraw();
|
||||
return;
|
||||
this.select(index);
|
||||
}
|
||||
if (needRedraw) redraw();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -2755,20 +2830,20 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
for (let i = 0, l = this.equipPosList.length; i < l; i++) {
|
||||
const { x, y, index } = this.equipPosList[i];
|
||||
if (px > x && px < x + 32 && py > y && py < y + 32) {
|
||||
selectType = 'equipBox';
|
||||
itemBoard.index = -1;
|
||||
if (this.index !== index) {
|
||||
this.index = index;
|
||||
itemId = (core.getEquip(index) == null) ? '' : core.getEquip(index);
|
||||
redraw();
|
||||
return;
|
||||
}
|
||||
let needRedraw = this.index !== index;
|
||||
this.select(index);
|
||||
if (needRedraw) redraw();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
getCurrPageCap() {
|
||||
const equipNameCount = core.status.globalAttribute.equipName.length;
|
||||
return Math.min(equipNameCount - this.page * this.pageCap, this.pageCap);
|
||||
}
|
||||
|
||||
drawContent() {
|
||||
const ctx = core.createCanvas(this.name, this.x, this.y, this.w, this.h, 131);
|
||||
|
||||
@ -2779,8 +2854,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
const spaceX = (this.w - columnCount * boxWidth) / (1 + columnCount),
|
||||
spaceY = (this.h - rowCount * boxHeight) / (1 + rowCount);
|
||||
let [x, y] = [spaceX, spaceY];
|
||||
for (let i = 0; i < this.onePageEquips; i++) {
|
||||
const currEquipIndex = this.page * this.onePageEquips + i;
|
||||
for (let i = 0; i < this.pageCap; i++) {
|
||||
const currEquipIndex = this.page * this.pageCap + i;
|
||||
if (currEquipIndex >= equipNameList.length) break;
|
||||
|
||||
const currBoxName = equipNameList[currEquipIndex];
|
||||
@ -2806,6 +2881,38 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
ty = y + height + lineWidth / 2 * 3 + space;
|
||||
core.fillText(ctx, text, tx, ty, color, '14px Verdana');
|
||||
}
|
||||
|
||||
/** 根据给定的index,重新选中新的装备框
|
||||
* @param {number} index
|
||||
*/
|
||||
select(index) {
|
||||
selectType = 'equipBox';
|
||||
this.index = index;
|
||||
itemBoard.index = -1;
|
||||
itemId = (core.getEquip(index) == null) ? '' : core.getEquip(index);
|
||||
const currEquipIndex = this.page * this.pageCap + this.index;
|
||||
const currEquipId = core.getEquip(currEquipIndex);
|
||||
if (core.material.items[currEquipId]) itemId = currEquipId;
|
||||
}
|
||||
|
||||
pgUp() {
|
||||
const equipNameList = core.status.globalAttribute.equipName;
|
||||
const pageMax = Math.ceil(equipNameList.length / this.pageCap);
|
||||
if (this.page < pageMax) {
|
||||
this.page++;
|
||||
let newIndex = this.index;
|
||||
const currEquipIndex = this.page * this.pageCap + newIndex;
|
||||
if (currEquipIndex >= equipNameList.length) newIndex = 0;
|
||||
this.select(newIndex);
|
||||
}
|
||||
}
|
||||
|
||||
pgDown() {
|
||||
if (this.page > 0) {
|
||||
this.page--;
|
||||
this.select(this.index);
|
||||
}
|
||||
}
|
||||
}
|
||||
class ItemInfoBox extends MenuBase {
|
||||
constructor(x, y, w, h) {
|
||||
@ -2837,11 +2944,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
core.fillText(ctx, item.name, 66, 46, 'black', 'bold 18px Verdana', 98); // 物品名字 e.g.护符
|
||||
core.fillText(ctx, "类型", 20, 75, 'crimson', '14px Verdana');
|
||||
core.fillText(ctx, "【" + getItemClsName(item) + "】", 50, 75, 'rgb(47, 49, 54)', '14px Verdana'); // 物品类型 e.g.【永久道具】
|
||||
|
||||
core.fillText(ctx, "ID", 20, 95, 'crimson', '14px Verdana');
|
||||
core.fillText(ctx, item.id, 50, 95, 'rgb(47, 49, 54)', '14px Verdana');
|
||||
core.fillText(ctx, "累计使用", 20, 113, 'crimson', '14px Verdana');
|
||||
const itemsUsedCount = core.getFlag('itemsUsedCount', {});
|
||||
core.fillText(ctx, itemsUsedCount[itemId] || 0, 80, 113, 'rgb(47, 49, 54)', '14px Verdana');
|
||||
|
||||
if (type === 'all') { // 显示物品累计使用的次数,将作为排序依据
|
||||
core.fillText(ctx, "累计使用", 20, 113, 'crimson', '14px Verdana');
|
||||
const itemsUsedCount = core.getFlag('itemsUsedCount', {});
|
||||
core.fillText(ctx, itemsUsedCount[itemId] || 0, 80, 113, 'rgb(47, 49, 54)', '14px Verdana');
|
||||
}
|
||||
|
||||
const itemText = item.text + ((type === "equips") ? this.getEquipCompareInfo(item) : ""); // 物品描述信息
|
||||
core.drawTextContent(ctx, itemText, {
|
||||
left: 20, top: 125, bold: false, color: "black",
|
||||
@ -2882,14 +2994,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
super('toolBox');
|
||||
/** @type {'all'|'equips'} */
|
||||
this.type = type;
|
||||
/** @type {'all'|'tools'|'constants'} 物品栏模式下显示哪个子菜单 */
|
||||
this.subType = 'all';
|
||||
|
||||
/** @type {number} 左侧物品栏左边的位置 */
|
||||
/** @type {number} */
|
||||
this.x = x;
|
||||
/** @type {number} 左侧物品栏顶部的位置,每次refreshItemList时将刷新 */
|
||||
/** @type {number} */
|
||||
this.y = y;
|
||||
/** @type {number} 左侧物品栏的宽度 */
|
||||
/** @type {number} */
|
||||
this.w = w;
|
||||
/** @type {number} 左侧物品栏的高度 */
|
||||
/** @type {number} */
|
||||
this.h = h;
|
||||
/** @type {number} 单个物品占据的列宽 */
|
||||
this.oneItemHeight = 30;
|
||||
@ -2902,6 +3016,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
this.index = 0;
|
||||
/** @type {string} 当前选中的物品Id 有可能不存在,每次调用都要检验*/
|
||||
this.itemId = '';
|
||||
/** 各个子页面当前选中的位置,用于在切换后显示原位置 */
|
||||
this.cache = {
|
||||
all: { page: 0, index: 0 },
|
||||
tools: { page: 0, index: 0 },
|
||||
constants: { page: 0, index: 0 }
|
||||
}
|
||||
|
||||
/** @type {string[]} 所有应当显示的物品的列表*/
|
||||
this.allItemList = [];
|
||||
@ -2920,30 +3040,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
const currIndex = Math.floor(py / this.oneItemHeight);
|
||||
if (currIndex >= this.currItemList.length) return; // 未选中有效物品时返回
|
||||
if (this.index === currIndex) {
|
||||
if (this.type === 'all') {
|
||||
if (!core.canUseItem(this.itemId)) {
|
||||
core.drawFailTip("当前无法使用" + core.material.items[this.itemId].name, this.itemId);
|
||||
return;
|
||||
}
|
||||
clearAll();
|
||||
setTimeout(() => {
|
||||
core.unlockControl();
|
||||
core.tryUseItem(this.itemId);
|
||||
}, 0);
|
||||
}
|
||||
else {
|
||||
if (!core.canEquip(this.itemId, true)) return;
|
||||
core.loadEquip(this.itemId);
|
||||
core.status.route.push("equip:" + this.itemId);
|
||||
redraw();
|
||||
}
|
||||
this.useItem(this.itemId);
|
||||
}
|
||||
else {
|
||||
this.index = currIndex;
|
||||
this.itemId = this.currItemList[this.index];
|
||||
itemId = this.itemId;
|
||||
selectType = 'toolBox';
|
||||
equipTable.index = -1;
|
||||
this.select(currIndex);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
@ -2955,11 +3055,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
const currIndex = Math.floor(py / this.oneItemHeight);
|
||||
if (currIndex >= this.currItemList.length) return; // 未选中有效物品时返回
|
||||
if (this.index !== currIndex) {
|
||||
this.index = currIndex;
|
||||
this.itemId = this.currItemList[this.index];
|
||||
itemId = this.itemId;
|
||||
selectType = 'toolBox';
|
||||
equipTable.index = -1;
|
||||
this.select(currIndex);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
@ -2969,7 +3065,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
|
||||
/*** 每次显示/隐藏道具时,翻页时,及切换道具/装备栏时调用 */
|
||||
refreshItemList() {
|
||||
this.allItemList = core.getToolboxItems(this.type, core.hasFlag('showHideItem'));
|
||||
this.allItemList = core.getToolboxItems((this.type === 'all') ? this.subType : this.type, core.hasFlag('showHideItem'));
|
||||
this.currItemList = this.allItemList.slice(this.page * this.pageCap, (this.page + 1) * this.pageCap);
|
||||
this.itemId = this.currItemList[this.index];
|
||||
this.pageMax = Math.ceil(this.allItemList.length / this.pageCap) - 1;
|
||||
@ -3017,14 +3113,23 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
core.setAlpha(ctx, 1);
|
||||
}
|
||||
|
||||
/** 选中当前itemList下的指定位置 */
|
||||
select(index) {
|
||||
selectType = 'toolBox';
|
||||
equipTable.index = -1;
|
||||
this.index = index;
|
||||
const currItemId = this.currItemList[index];
|
||||
this.itemId = currItemId;
|
||||
if (core.material.items[currItemId]) itemId = currItemId;
|
||||
}
|
||||
|
||||
pgUp() {
|
||||
if (this.page < this.pageMax) {
|
||||
this.page++;
|
||||
this.refreshItemList();
|
||||
if (this.index > this.currItemList.length) this.index = 0;
|
||||
const currItemId = this.currItemList[this.index];
|
||||
if (core.material.items[currItemId]) itemId = currItemId;
|
||||
redraw();
|
||||
let newIndex = this.index;
|
||||
if (newIndex >= this.currItemList.length) newIndex = 0;
|
||||
this.select(newIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3032,9 +3137,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
if (this.page > 0) {
|
||||
this.page--;
|
||||
this.refreshItemList();
|
||||
const currItemId = this.currItemList[this.index];
|
||||
if (core.material.items[currItemId]) itemId = currItemId;
|
||||
redraw();
|
||||
this.select(this.index);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3042,6 +3145,27 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
core.clearUIEventSelector(1);
|
||||
super.clear();
|
||||
}
|
||||
/** @param {string} itemId */
|
||||
useItem(itemId) {
|
||||
if (this.type === 'all') {
|
||||
if (!core.canUseItem(itemId)) {
|
||||
core.drawFailTip("当前无法使用" + core.material.items[itemId].name, itemId);
|
||||
return;
|
||||
}
|
||||
clearAll();
|
||||
setTimeout(() => {
|
||||
core.unlockControl();
|
||||
core.tryUseItem(itemId);
|
||||
}, 0);
|
||||
}
|
||||
else {
|
||||
if (!core.canEquip(itemId, true)) return;
|
||||
core.loadEquip(itemId);
|
||||
this.refreshItemList(); // 穿上装备会导致道具数量变化
|
||||
core.status.route.push("equip:" + itemId);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
// #endregion
|
||||
// #region 核心功能函数和全局变量
|
||||
@ -3098,20 +3222,20 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
let selectType = '';
|
||||
/** 当前选中的物品id */
|
||||
let itemId = '';
|
||||
/** @type {ToolBox} */let toolList;
|
||||
/** @type {ToolBox} */let equipList;
|
||||
/** @type {ToolBox} 左侧物品栏(显示装备) */let toolList;
|
||||
/** @type {ToolBox} 左侧物品栏(显示永久、消耗)*/let equipList;
|
||||
|
||||
/** @type {ItemBoxBack} */ let back;
|
||||
/** @type {ToolBox} */let itemBoard;
|
||||
/** @type {EquipBox} */let equipTable;
|
||||
/** @type {ItemInfoBox} */let infoBoard;
|
||||
/** @type {ItemBoxBack} 背景 */ let back;
|
||||
/** @type {ToolBox} 左侧物品栏 */let itemBoard;
|
||||
/** @type {EquipBox} 装备切换面板 */let equipTable;
|
||||
/** @type {ItemInfoBox} 右侧物品详细信息面板 */let infoBoard;
|
||||
|
||||
/** @param {'all'|'equips'} currType */
|
||||
function drawItemBox(currType) {
|
||||
core.lockControl();
|
||||
|
||||
type = currType;
|
||||
if (!back) back = new ItemBoxBack(type);
|
||||
if (!back) back = new ItemBoxBack();
|
||||
|
||||
// 切换道具栏和装备栏的按钮 @todo
|
||||
const switchModeBtn = new IconBtn(385, 5, 24, 24, (type === 'all') ? 'toolbox' : 'equipbox',
|
||||
@ -3135,8 +3259,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
itemId = itemBoard.itemId;
|
||||
redraw(true);
|
||||
}.bind(switchModeBtn);
|
||||
// 背景上的按钮不需要随着itemId切换
|
||||
const exitBtn = new ExitBtn(385, 385, 24, 24);
|
||||
back.initBtnList([['switchModeBtn', switchModeBtn], ['exitBtn', exitBtn]]); // 背景上的按钮不需要随着itemId切换
|
||||
const allBtn = new ClassifyBtn(20, 10, 44, 24, "全部", "all"),
|
||||
toolsBtn = new ClassifyBtn(80, 10, 44, 24, "消耗", "tools"),
|
||||
constantsBtn = new ClassifyBtn(140, 10, 44, 24, "永久", "constants");
|
||||
back.initBtnList([['switchModeBtn', switchModeBtn], ['exitBtn', exitBtn], ['allBtn', allBtn],
|
||||
['toolsBtn', toolsBtn], ['constantsBtn', constantsBtn]]);
|
||||
|
||||
if (!equipTable) equipTable = new EquipBox(7, 10, 240, 120);
|
||||
if (!infoBoard) infoBoard = new ItemInfoBox(240, 0, core.__PIXELS__ - 240, core.__PIXELS__);
|
||||
@ -3148,8 +3277,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
[toolList, equipList].forEach((list) => {
|
||||
const dy = (list === toolList) ? 0 : -4 * list.oneItemHeight;
|
||||
const [pgDown, pgUp] = [new ArrowBtn(5, 335 + dy, 20, 20, 'left'), new ArrowBtn(200, 335 + dy, 20, 20, 'right')];
|
||||
pgDown.event = () => list.pgDown();
|
||||
pgUp.event = () => list.pgUp();
|
||||
pgDown.event = () => { list.pgDown(); redraw(); }
|
||||
pgUp.event = () => { list.pgUp(); redraw(); }
|
||||
list.initBtnList([['pgDownBtn', pgDown], ['pgUpBtn', pgUp]]);
|
||||
})
|
||||
|
||||
@ -3924,7 +4053,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
['setHotKey', new Setting(
|
||||
() => '',
|
||||
function (num) {
|
||||
core.utils.myprompt('输入物品名。名称(例如:破墙镐)或英文ID(例如:pickaxe)均可。', null, (value) => {
|
||||
core.utils.myprompt('输入物品名。名称(例如:破墙镐)或英文ID(例如:pickaxe)均可。', '', (value) => {
|
||||
const itemInfo = core.material.items;
|
||||
if (itemInfo) {
|
||||
const aimItem = Object.values(itemInfo).find((item) => item.name === value || item.id === value);
|
||||
@ -4029,7 +4158,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
'金币': 'money', '金钱': 'money', '钱': 'money', '经验': 'exp',
|
||||
'魔力': 'mana', '魔': 'mana', '蓝': 'mana',
|
||||
}
|
||||
core.utils.myprompt('输入要修改的属性名称', null, (value) => {
|
||||
core.utils.myprompt('输入要修改的属性名称', '', (value) => {
|
||||
const heroStatus = core.status.hero;
|
||||
if (dictionary.hasOwnProperty(value)) {
|
||||
value = dictionary[value];
|
||||
@ -4057,8 +4186,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
else return value;
|
||||
},
|
||||
function () {
|
||||
core.utils.myprompt('输入要修改到的值', null, (value) => {
|
||||
value = parseInt(value);
|
||||
core.utils.myprompt('输入要修改到的值', null, (input) => {
|
||||
const value = parseInt(input);
|
||||
if (!Number.isNaN(value)) {
|
||||
core.setFlag('debug_statusValue', value);
|
||||
this.menu.drawContent();
|
||||
@ -4126,8 +4255,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||
() => core.getFlag('debug_itemValue', '??'),
|
||||
function () {
|
||||
core.setFlag('debug', true);
|
||||
core.utils.myprompt('输入要修改到的值', null, (value) => {
|
||||
value = parseInt(value);
|
||||
core.utils.myprompt('输入要修改到的值', null, (input) => {
|
||||
const value = parseInt(input);
|
||||
if (!Number.isNaN(value)) {
|
||||
core.setFlag('debug_itemValue', value);
|
||||
this.menu.drawContent();
|
||||
|
||||
15
runtime.d.ts
vendored
15
runtime.d.ts
vendored
@ -1435,6 +1435,16 @@ interface actions {
|
||||
_getClickLoc(x: number, y: number): { x: number, y: number, size: number }
|
||||
_clickSwitchs_action_moveSpeed(delta: number): void
|
||||
_clickSwitchs_action_floorChangeTime(delta: number): void
|
||||
_clickSwitchs_display_setSize(delta: number): void
|
||||
/** 高清画面开关 */_clickSwitchs_display_enableHDCanvas(): void
|
||||
/** 定点怪显开关 */_clickSwitchs_display_enableEnemyPoint(): void
|
||||
/** 怪物显伤开关 */_clickSwitchs_display_enemyDamage(): void
|
||||
/** 临界显示开关 */_clickSwitchs_display_critical(): void
|
||||
/** 领域显示开关 */_clickSwitchs_display_extraDamage(): void
|
||||
/** 领域显示模式开关 */_clickSwitchs_display_extraDamageType(): void
|
||||
/** 音乐开关 */_clickSwitchs_sounds_bgm(): void
|
||||
/** 音效开关 */_clickSwitchs_sounds_se(): void
|
||||
/** 音量调节开关 */_clickSwitchs_sounds_userVolume(delta: number): void
|
||||
|
||||
/**
|
||||
* 此函数将注册一个用户交互行为。
|
||||
@ -2991,7 +3001,7 @@ interface utils {
|
||||
* @param callback 确认时的回调
|
||||
* @param failCallback 取消时的回调,不填则默认与确认时的回调相同
|
||||
*/
|
||||
myprompt(hint: string, value: string, callback?: (data?: string) => any, failCallback?: (data?: string) => any): void
|
||||
myprompt(hint: string, value?: string | null, callback?: (data: string) => any, failCallback?: (data: string) => any): void
|
||||
|
||||
/** 动画显示某对象 */
|
||||
showWithAnimate(obj?: any, speed?: number, callback?: () => any): void
|
||||
@ -3050,7 +3060,7 @@ interface plugin {
|
||||
|
||||
type CoreMixin = {
|
||||
firstData: { [x: string]: any }
|
||||
/** 全塔属性开关 */flags: { [flagName: string]: boolean }
|
||||
/** 全塔属性开关 */flags: { [flagName: string]: boolean | number}
|
||||
/** 全局数值 */values:
|
||||
{
|
||||
/** 全局帧动画时间 */animateSpeed: number;
|
||||
@ -3170,6 +3180,7 @@ type CoreMixin = {
|
||||
/** 音量 */volume: number
|
||||
/** 缓存BGM内容 */cachedBgms: string[]
|
||||
/** 缓存的bgm数量 */cachedBgmCount: number
|
||||
/** 用户调节的音量 */userVolume: number
|
||||
}
|
||||
readonly platform: {
|
||||
/** 是否http */isOnline: boolean
|
||||
|
||||
Loading…
Reference in New Issue
Block a user