Acest script nu ar trebui instalat direct. Aceasta este o bibliotecă pentru alte scripturi care este inclusă prin directiva meta a // @require https://update.greasyfork.org/scripts/541209/1616569/alchemy%20v10.js
function updateTotalCost() {
const itemPrice = parseFloat($('#itemPrice').val()) || 0;
const catalystCost = parseFloat($('#Catalyst').val()) || 0;
const goldCost = parseFloat($('#costPerTry').val()) || 0;
const totalCost = itemPrice + catalystCost + goldCost;
$('#allcostPerTry').val(totalCost).trigger('change');
}
const CATALYST_BONUS = {
"catalyst_of_transmutation": 0.15,
"prime_catalyst": 0.25,
"": 0
};
// 计算最终成功率(全局函数)
function updateSuccessRate() {
const baseRate = parseFloat($('#nonesuccessRate').val()) || 0;
const catalystType = $('#catalystType').val();
// 核心公式:基础 × 1.05 + 基础 × 催化剂加成
const bonusMultiplier = CATALYST_BONUS[catalystType] || 0;
const finalRate = (baseRate * 1.05) + (baseRate * bonusMultiplier);
$('#successRate').val(Math.min(100, finalRate).toFixed(2));
}
$(document).ready(function() {
let currentMaterialMode = 'ask'; // 成本默认左一(ask)
let currentOutputMode = 'ask'; // 产出默认左一(ask)
const itemData = window.itemData || {};
// 催化剂价格映射(物品ID到中文名的映射)
// 转换为自动完成需要的格式 [{label: "显示名称", value: "物品ID"}]
const autocompleteData = Object.entries(itemData).map(([id, name]) => {
return { label: name, value: id.replace('/items/', '') };
});
// 为所有输入框添加自动完成功能
function setupAutocomplete(inputElement, priceMode) {
$(inputElement).autocomplete({
source: function(request, response) {
const results = $.ui.autocomplete.filter(autocompleteData, request.term);
response(results.slice(0, 10));
},
select: function(event, ui) {
$(this).val(ui.item.label);
if ($(this).hasClass('alchemy-text')) {
fetchItemPrice(ui.item.value, $('#itemPrice'), currentMaterialMode);
} else {
fetchItemPrice(
ui.item.value,
$(this).closest('tr').find('.output-price'),
currentOutputMode
);
}
return false;
},
focus: function(event, ui) {
// 高亮显示匹配部分(可选)
$(this).val(ui.item.label);
return false;
},
minLength: 1 // 输入1个字符后触发搜索
}).data("ui-autocomplete")._renderItem = function(ul, item) {
// 自定义渲染结果项(保留图标和名称)
return $("<li>")
.append(`<div> ${item.label}</div>`)
.appendTo(ul);
};
}
// 为所有相关输入框设置自动完成
$('.alchemy-text, .output-item').each(function() {
setupAutocomplete(this);
});
// 获取物品价格的函数(适配ask/bid返回格式)
function fetchItemPrice(itemId, priceInput, priceMode) {
if (!itemId || !priceInput) return;
priceInput.addClass('loading-price').prop('readonly', true);
const encodedName = encodeURIComponent(itemId);
$.getJSON(`https://mooket.qi-e.top/market/item/price?name=/items/${encodedName}`)
.always(() => {
priceInput.removeClass('loading-price').prop('readonly', false);
})
.done((data) => {
if (data) {
// 直接使用传入的priceMode参数
const price = priceMode === 'ask' ? data.ask : data.bid;
if (price !== undefined) {
priceInput.val(price).trigger('change');
updateTotalCost();
}
}
})
.fail(function() {
console.error('价格查询失败:', itemId);
// 可以添加UI提示,例如:
$(priceInput).val('?').css('color', '#ff6b6b');
setTimeout(() => $(priceInput).css('color', ''), 1000);
});
}
// 监听价格模式切换(适配ask/bid逻辑)
// 材料价格模式切换
$('select[name="materialPriceMode"]').change(function() {
currentMaterialMode = $(this).val(); // 更新当前模式
const itemName = $('.alchemy-text').val();
if (itemName) {
const itemId = findItemIdByName(itemName);
if (itemId) {
fetchItemPrice(itemId, $('#itemPrice'), currentMaterialMode);
}
}
});
// 产出价格模式切换
$('select[name="outputPriceMode"]').change(function() {
currentOutputMode = $(this).val(); // 更新当前模式
$('.output-item').each(function() {
const itemName = $(this).val();
if (itemName) {
const itemId = findItemIdByName(itemName);
if (itemId) {
fetchItemPrice(
itemId,
$(this).closest('tr').find('.output-price'),
currentOutputMode
);
}
}
});
});
// 根据中文名称查找物品ID
function findItemIdByName(name) {
const entry = autocompleteData.find(item => item.label === name);
return entry ? entry.value : null;
}
// 添加新物品行的按钮事件
$('#addItemBtn').click(function() {
const newRow = $(`
<tr>
<td><div class="autocomplete"><input type="text" class="output-item"></div></td>
<td><input type="number" class="output-probability" value="0" step="0.01"></td>
<td><input type="number" class="output-price"></td>
<td><input type="number" class="output-quantity" readonly></td>
<td><input type="number" class="output-total" readonly></td>
</tr>
`);
$('#outputItems').append(newRow);
// 为新行设置自动完成,并绑定output模式
const $outputItem = newRow.find('.output-item');
setupAutocomplete($outputItem);
// 如果默认有值,获取价格(使用output模式)
if ($outputItem.val()) {
const itemId = findItemIdByName($outputItem.val());
if (itemId) {
fetchItemPrice(itemId, newRow.find('.output-price'), 'output');
}
}
});
function updateAllPrices() {
// 更新转换物品价格
const inputItem = $('.alchemy-text').val();
if (inputItem) {
const itemId = findItemIdByName(inputItem);
if (itemId) {
fetchItemPrice(itemId, $('#itemPrice'), currentMaterialMode);
}
}
// 更新所有产出物品价格
$('.output-item').each(function() {
const itemName = $(this).val();
if (itemName) {
const itemId = findItemIdByName(itemName);
if (itemId) {
fetchItemPrice(
itemId,
$(this).closest('tr').find('.output-price'),
currentOutputMode
);
}
}
});
}
// 催化剂价格获取
function fetchCatalystPrice(itemPath, priceInput) {
if (!itemPath || !priceInput) return;
priceInput.addClass('loading-price').prop('readonly', true);
$.getJSON(`https://mooket.qi-e.top/market/item/price?name=${itemPath}`)
.always(() => {
priceInput.removeClass('loading-price').prop('readonly', false);
})
.done((data) => {
const price = currentMaterialMode === 'ask' ? data?.ask : data?.bid;
priceInput.val(price || 0).trigger('change'); // 自动处理undefined
updateTotalCost();
})
.fail(() => {
priceInput.val('?').css('color', '#ff6b6b');
setTimeout(() => priceInput.css('color', ''), 1000);
});
}
// 催化剂价格获取tigger
$('#catalystType').change(function() {
const selected = $(this).val().trim().toLowerCase(); // 标准化输入
const $input = $('#Catalyst');
if (!selected) {
$input.val(0).trigger('change');
updateSuccessRate();
return;
}
const fullPath = Object.keys(itemData).find(key => {
const normalizedKey = key.toLowerCase().replace(/^\/|\/$/g, ''); // 去除首尾斜杠
const segments = normalizedKey.split('/');
return segments[segments.length - 1] === selected; // 严格匹配最后一段
});
if (fullPath) {
fetchCatalystPrice(fullPath, $input);
updateSuccessRate();
} else {
console.warn(`未找到催化剂路径: ${selected}`);
$input.val(0).trigger('change');
updateSuccessRate();
}
});
// 监听%
$('#nonesuccessRate').on('change input', function() {
// 边界检查
this.value = Math.min(100, Math.max(0, parseFloat(this.value) || 0));
updateSuccessRate();
});
// 监听%tiger
$('#catalystType').trigger('change');
// 监听所有成本相关输入框
$('#itemPrice, #Catalyst, #costPerTry').on('change input', updateTotalCost);
// 价格刷新按钮也要触发计算
$('#refreshPricesBtn').click(function() {
// 更新转换物品价格
const inputItem = $('.alchemy-text').val();
if (inputItem) {
const itemId = findItemIdByName(inputItem);
if (itemId) {
fetchItemPrice(itemId, $('#itemPrice'), currentMaterialMode);
}
}
// 更新催化剂价格
const catalystType = $('#catalystType').val();
if (catalystType) {
$('#catalystType').trigger('change'); // 这会触发催化剂价格的重新获取
}
// 更新所有产出物品价格
$('.output-item').each(function() {
const itemName = $(this).val();
if (itemName) {
const itemId = findItemIdByName(itemName);
if (itemId) {
fetchItemPrice(
itemId,
$(this).closest('tr').find('.output-price'),
currentOutputMode
);
}
}
});
// 添加一个简单的视觉反馈
$(this).text('刷新中...').css('opacity', '0.7');
setTimeout(() => {
$(this).text('刷新价格').css('opacity', '1');
}, 500);
});
// 监听转换物品输入框的变化自动填充
});