Are you sure you want to go to an external site to donate a monetary value?
WARNING: Some countries laws may supersede the payment processors policy such as the GDPR and PayPal. While it is highly appreciated to donate, please check with your countries privacy and identity laws regarding privacy of information first. Use at your utmost discretion.
Цикл
while (endLvl - (startLvl + 20 * lvlMult++) > 20) { var additionalResourceNames = Object.keys(item.price((startLvl + 20 * lvlMult) + 1)); for (var i = additionalResourceNames.length - 1; i >= 0; i--) { if (resourceNames.indexOf(additionalResourceNames[i]) === -1) { resourceNames.push(additionalResourceNames[i]); } } }
не собирает последний доп. ресурс, если разница между начальным и конечным уровнем меньше 20
предлагаю такой вариант:
var startTier = Math.trunc(startLvl / 20); var endTier = Math.trunc((endLvl - 1) / 20); for (var currTier = startTier; currTier <= endTier; currTier++) var additionalResourceNames = Object.keys(item.price((20 * currTier) + 1)); for (var i = additionalResourceNames.length - 1; i >= 0; i--) { if (resourceNames.indexOf(additionalResourceNames[i]) === -1) { resourceNames.push(additionalResourceNames[i]); } }
Прошу прощения, недокопипастил:
var startTier = Math.trunc(startLvl / 20); var endTier = Math.trunc((endLvl - 1) / 20); for (var currTier = startTier; currTier <= endTier; currTier++) { var additionalResourceNames = Object.keys(item.price((20 * currTier) + 1)); for (var i = additionalResourceNames.length - 1; i >= 0; i--) { if (resourceNames.indexOf(additionalResourceNames[i]) === -1) { resourceNames.push(additionalResourceNames[i]); } } }
с таким кодом, для низких уровней, показывает ресурс который нужен для текущего, например если имея шахту кри 100 уровня, попробовать посмотреть цену апа с 1 на 2, получим nanowires = 0 в выводе
Re: @fusioneer:
но я поправил и обновил
Пересмотрел ещё раз всю функцию целиком.
Переделал так:
function createCalculationForItem(item) { $("#cwas-price-calculator-calculate").click(function(){ var startLvl = parseInt($("#cwas-price-calculator-startLvl").val()); var endLvl = parseInt($("#cwas-price-calculator-endLvl").val()); var results = $("#cwas-price-calculator-results"); results.children().remove(); var resourceDict = {}; for (var updateLvl = startLvl + 1; updateLvl <= endLvl; updateLvl++) { var levelPrice = item.price(updateLvl); for (var resourceName in levelPrice) { var resourceAmount = levelPrice[resourceName]; if (resourceAmount > 0) { if (resourceDict[resourceName] === undefined) { resourceDict[resourceName] = 0; } resourceDict[resourceName] += resourceAmount; } } } for (var r in resourceDict) { if (r !== 'time') { results.append(createResourceSection(r, resourceDict[r])); } } results.append(createResourceSection('time', formatTimeFromSeconds(resourceDict.time))); }); }
За один цикл одновременно собираются и нужные ресурсы и их количество.
Проходимся только по нужным уровням.
Те уровни, на которых ресурс объявлен, но равен 0, не попадают в результат.