${historyStat.income > historyStat.incomeExpectation ? '高' : '低'}于期望: |
${tablePrice(Utils.formatPrice(Math.abs(historyStat.income - historyStat.incomeExpectation)))}
`));
}
return Ui.div({ style: 'padding: 5px;', id: 'lll_chestOpenPopup' },
Ui.div({ style: 'width: 100%; height: 100%; color: rgb(231, 231, 231); display: flex; flex-direction: column; gap: 12px;' }, [
Ui.div({ style: 'display: flex; width: 100%;' }, itemIcon(openedItem, 0)),
Ui.div({ style: 'display: flex; width: 100%; margin-top: 8px;' }, Ui.div({ style: 'padding: 10px; border-radius: 8px; background-color: rgb(38, 42, 58); border: 1.5px solid rgba(117, 123, 148, 1); overflow: hidden; width: 100%;' }, [
Ui.div({ style: 'background-color: rgb(66, 71, 90); text-align: center; font-size: 14px; text-align: left; color: var(--card-title-text); margin: -10px -10px 8px -10px; padding: 3px 10px;' }, '你找到了'),
Ui.div({ style: 'width: 100%; display: grid; grid-template-columns: repeat(4,60px); grid-gap: 6px; justify-content: center;' }, itemIconList),
])),
Ui.div({ style: 'display: flex; width: 100%; gap: 10px;' }, [
Ui.div({ style: 'padding: 10px; border-radius: 8px; background-color: rgb(38, 42, 58); border: 1.5px solid rgba(117, 123, 148, 1); overflow: hidden; width: 100%;' }, [
Ui.div({ style: 'background-color: rgb(66, 71, 90); text-align: center; font-size: 14px; text-align: left; color: var(--card-title-text); margin: -10px -10px 8px -10px; padding: 3px 10px;' }, '当前箱子'),
currentDiv,
]),
Ui.div({ style: 'padding: 10px; border-radius: 8px; background-color: rgb(38, 42, 58); border: 1.5px solid rgba(117, 123, 148, 1); overflow: hidden; width: 100%;' }, [
Ui.div({ style: 'background-color: rgb(66, 71, 90); text-align: center; font-size: 14px; text-align: left; color: var(--card-title-text); margin: -10px -10px 8px -10px; padding: 3px 10px;' }, '历史记录'),
historyDiv,
]),
]),
Ui.div({ style: 'display: flex; width: 100%;' }, [
Ui.elem('button', { className: 'Button_button__1Fe9z', style: 'margin: auto;', onclick: () => { this.popup.close(); } }, '关闭'),
// Ui.elem('button', { className: 'Button_button__1Fe9z', style: 'margin: auto;', onclick: () => { this.popup.close(); } }, '详细'),
]),
])
);
}
showPopup(msg) {
const formatter = item => ({ hrid: item.itemHrid, count: item.count });
const openedItem = formatter(msg.openedItem);
const gainedItems = msg.gainedItems.map(formatter);
this.popup = new PlainPopup();
this.popup.setContent(this.constructPopup(openedItem, gainedItems), '打开的战利品');
this.popup.open();
}
handleOriginalPopup(node) {
let closeBtn = node.querySelector('div.Modal_background__2B88R');
closeBtn.click?.();
}
observeOriginalPopup() {
const observer = new MutationObserver((mutationsList, observer) => {
mutationsList.forEach(mutation => {
mutation.addedNodes.forEach(addedNode => {
// @ts-ignore
if (addedNode.classList && addedNode.classList.contains('Modal_modalContainer__3B80m')) {
this.handleOriginalPopup(addedNode);
observer.disconnect();
}
});
});
});
const rootNode = document.querySelector('body');
const config = { childList: true, subtree: true };
observer.observe(rootNode, config);
}
onLootOpened(msg) {
this.observeOriginalPopup();
this.showPopup(msg);
}
};
//#endregion
const EnhanceAnalyzer = new class { };
//#region taskcard
/*
function handleTaskCard() {
function getOriTextFromElement(elem) {
if (!elem) {
console.error("getTextFromElement null elem");
return "";
}
const translatedfrom = elem.getAttribute("script_translatedfrom");
if (translatedfrom) {
return translatedfrom;
}
return elem.textContent;
}
function taskInfo(taskDiv) {
const taskInfoDivs = taskDiv.querySelector("div.RandomTask_taskInfo__1uasf").children;
const taskStr = getOriTextFromElement(taskInfoDivs[0]);
const taskProgressStr = getOriTextFromElement(taskInfoDivs[1]);
if (!taskStr.startsWith("Defeat - ") && !taskStr.startsWith("击败 - ")) {
return null;
}
let monsterName = taskStr.replace("Defeat - ", "").replace("击败 - ", "").split(' ')[0];
let actionHrid = null;
if (isCN) {
actionHrid = (
Translation.getOthersFromZhName(monsterName) ? Translation.getOthersFromZhName(monsterName) : Translation.getActionEnNameFromZhName(monsterName)
)?.replaceAll("/monsters/", "/actions/combat/");
}
let actionObj = null;
for (const action of Object.values(ClientData.get().actionDetailMap)) {
if (action.hrid.includes("/combat/")) {
if (action.hrid === actionHrid || action.name.toLowerCase() === monsterName.toLowerCase()) {
actionObj = action;
break;
} else if (action.combatZoneInfo.fightInfo.battlesPerBoss === 10) {
if (
actionHrid?.replaceAll("/actions/combat/", "/monsters/") ===
action.combatZoneInfo.fightInfo.bossSpawns[0].combatMonsterHrid ||
"/monsters/" + monsterName.toLowerCase().replaceAll(" ", "_") ===
action.combatZoneInfo.fightInfo.bossSpawns[0].combatMonsterHrid
) {
actionObj = action;
break;
}
}
}
}
const actionCategoryHrid = actionObj?.category;
const monsterHrid = actionHrid?.replace("/actions/combat/", "/monsters/");
const mapHrid = actionCategoryHrid?.replace("/action_categories/", "/actions/");
const spawns = BattleData.mapData[mapHrid].spawnInfo.expectedSpawns;
const goalCount = taskProgressStr.split(' ').pop();
const bossWave = BattleData.mapData[mapHrid].spawnInfo.bossWave;
let count = goalCount * bossWave;
if (spawns[monsterHrid]) {
const normalCount = Math.ceil(goalCount / spawns[monsterHrid]);
const bossCount = bossWave ? Math.floor((normalCount - 1) / (bossWave - 1)) : 0;
return normalCount + bossCount;
}
return {
monsterHrid: monsterHrid,
mapHrid: mapHrid,
expectedCount: count,
};
}
const taskDivs = document.querySelectorAll("div.RandomTask_randomTask__3B9fA");
let totalCount = {};
for (const taskDiv of taskDivs) {
const info = taskInfo(taskDiv);
if (!info) continue;
const { monsterHrid, mapHrid, expectedCount } = info;
totalCount[mapHrid] ??= {};
totalCount[mapHrid][monsterHrid] = (totalCount[mapHrid][monsterHrid] || 0) + expectedCount;
}
for (let [mapHrid, monsters] of Object.entries(totalCount)) {
for (let count of Object.values(monsters)) {
totalCount[mapHrid].maxCount = Math.max(totalCount[mapHrid].maxCount ?? 0, count);
}
}
for (const taskDiv of taskDivs) {
const taskInfoDivs = taskDiv.querySelector("div.RandomTask_taskInfo__1uasf").children;
if (!taskDiv.querySelector("span.script_taskMapIndex")) continue;
if (taskDiv.querySelector("span.script_taskMapCount")) continue;
const info = taskInfo(taskDiv);
if (!info) continue;
const { mapHrid, expectedCount } = info;
if (mapHrid) {
taskInfoDivs[0].insertAdjacentHTML(
"beforeend",
`