Калькулятор производительности для мультиблоков.
Автор: kottesla004 · Обновлён:
В этом гайде хотелось бы раскрыть особенности взаимодействия модулей улучшения для мультиблоков и поделиться калькулятором для расчёта производительности.
Модули предназначены для установки в специальные места в мультиблочных механизмах. Узнать место установки можно через НЕИ (обратите внимание, что мультиблочный механизм можно вращать внутри интерфейса, для удобства рассмотрения):

Рассмотрим первую ветку с модулями параллельной обработки.

В зависимости от тира, они увеличивают число параллельно обрабатываемых рецептов в 16, 32, 64 и 128 раз. Без модуля обрабатывается только 1 рецепт за цикл.
Рассмотрим вторую ветку с модулями множителя рецепта.

Эти модули умножают количество рецептов, но ключевое отличие от предыдущих, в том, что они влияют на множитель модуля параллельности - если простыми словами, "умножают" количество механизмов в 2,4,8,16 раз. Например: мультиблок с множителем х16 по эффективности работает как 16 мультиблоков но потребляет энергию как один!
Рассмотрим третью ветку с модулями ускорения обработки.

Эти модули сокращают требуемое время на выполнение рецепта, простыми словами - ускоряют мультиблок. Сокращение времени рецепта производиться на 25, 50, 80 или 95% в зависимости от тира модуля. Например: базовое время выполнение рецепта 10 секунд, а с модулем на 95% время составит 0,5 секунды.
Рассмотрим последнюю ветку с модулями умножения выхода.

Это наименее используемая ветка, применяется (на момент написания гайда) только в фитогенном мультиблоке. Работает очень просто - умножает предмет на выходе, в 2, 3, 4 или 6 раз. Например, без модуля мультиблок выдаёт 5 картошки за цикл, а с модулем на умножение х6, будет выдавать 30 картошки за цикл.
По отдельности всё достаточно просто, но как показала практика, сложности начинаются при желании рассчитать общую производительность мультиблока при установке всех модулей.
Давайте разберём один пример расчёта прироста производительности в сравнении базового мультиблока и мультиблока со всеми топовыми модулями.
Исходные данные:
1. Базовый мультиблок без модулей, выполняет 1 рецепт за 10 секунд.
2. Улучшенный мультиблок с модулями:
Параллельная обработка х128
Множитель х16
Ускорение -95%
3. Время измерения производительности: 60 секунд.
Расчёты:
1. Базовый мультиблок выполнил 6 рецептов, за 60 секунд.
2. Топовый мультиблок выполнил 245760 рецептов за 60 секунд.
2.1 Подробно:
128х16 = 2048 (количество рецептов за цикл)
10х(1-(95/100))=0,5 секунд (время выполнения 1 цикла)
60/0,5=120 (количество выполненных циклов за измеряемый промежуток времени)
2048х120=245760 (итоговое количество рецептов за измеряемый промежуток времени)
Итог: прирост производительности в 40960%
Естесно всё это каждый раз считать не удобно, по этому я подготовил удобный калькулятор: ссылка

Код калькулятора:
Скрытый текст
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Калькулятор эффективности модулей</title> <style> * { box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background-color: #2b2b2b; color: #e0e0e0; max-width: 800px; margin: 0 auto; padding: 20px; line-height: 1.6; } .container { background-color: #3c3c3c; border-radius: 10px; padding: 25px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } h1 { color: #64b5f6; text-align: center; margin-top: 0; border-bottom: 2px solid #64b5f6; padding-bottom: 10px; } .module-section { margin-bottom: 25px; padding: 15px; background-color: #4a4a4a; border-radius: 8px; } h2 { color: #81c784; margin-top: 0; font-size: 1.3em; } .input-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: bold; color: #bbbbbb; } select, input[type="number"] { width: 100%; padding: 10px; background-color: #555; color: #fff; border: 1px solid #666; border-radius: 5px; font-size: 16px; } select:focus, input[type="number"]:focus { outline: none; border-color: #64b5f6; box-shadow: 0 0 5px rgba(100, 181, 246, 0.5); } .calculate-btn { display: block; width: 100%; padding: 15px; background-color: #2196f3; color: white; border: none; border-radius: 8px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.3s; margin-top: 20px; } .calculate-btn:hover { background-color: #0d8bf2; } .results { margin-top: 30px; background-color: #4a4a4a; border-radius: 8px; padding: 20px; display: none; } .results h2 { color: #ffb74d; margin-top: 0; } .result-item { display: flex; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid #5a5a5a; } .result-item:last-child { border-bottom: none; } .result-label { font-weight: bold; color: #bbbbbb; } .result-value { font-weight: bold; color: #4fc3f7; font-size: 1.1em; } .note { font-size: 0.9em; color: #aaaaaa; margin-top: 20px; padding: 10px; background-color: #444; border-radius: 5px; border-left: 4px solid #ff9800; } .module-values { font-size: 0.9em; color: #aaa; margin-top: 5px; } .highlight { color: #ffcc80; font-weight: bold; } </style> </head> <body> <div class="container"> <h1>Калькулятор эффективности модулей</h1> <div class="module-section"> <h2>Модуль параллельной обработки</h2> <div class="module-values">Базовый: 16 | Продвинутый: 32 | Элитный: 64 | Совершенный: 128</div> <div class="input-group"> <label for="parallel">Выберите уровень модуля:</label> <select id="parallel"> <option value="0">Не установлен</option> <option value="16">Базовый</option> <option value="32">Продвинутый</option> <option value="64">Элитный</option> <option value="128">Совершенный</option> </select> </div> </div> <div class="module-section"> <h2>Модуль множителя рецептов</h2> <div class="module-values">Базовый: 2 | Продвинутый: 4 | Элитный: 8 | Совершенный: 16</div> <div class="input-group"> <label for="multiplier">Выберите уровень модуля:</label> <select id="multiplier"> <option value="1">Не установлен</option> <option value="2">Базовый</option> <option value="4">Продвинутый</option> <option value="8">Элитный</option> <option value="16">Совершенный</option> </select> </div> </div> <div class="module-section"> <h2>Модуль ускорения обработки</h2> <div class="module-values">Базовый: -25% | Продвинутый: -50% | Элитный: -80% | Совершенный: -95%</div> <div class="input-group"> <label for="speed">Выберите уровень модуля:</label> <select id="speed"> <option value="0">Не установлен</option> <option value="-0.25">Базовый</option> <option value="-0.5">Продвинутый</option> <option value="-0.8">Элитный</option> <option value="-0.95">Совершенный</option> </select> </div> </div> <div class="module-section"> <h2>Параметры рецепта</h2> <div class="input-group"> <label for="recipeTime">Время выполнения рецепта (секунды):</label> <input type="number" id="recipeTime" min="0.1" step="0.1" value="10"> </div> <div class="input-group"> <label for="calcTime">Время для расчёта производства (секунды):</label> <input type="number" id="calcTime" min="1" step="1" value="60"> </div> </div> <button class="calculate-btn" onclick="calculate()">Рассчитать эффективность</button> <div class="results" id="results"> <h2>Результаты расчётов</h2> <div class="result-item"> <span class="result-label">Итого рецептов за цикл:</span> <span class="result-value" id="totalRecipes">0</span> </div> <div class="result-item"> <span class="result-label">Итого время цикла (сек):</span> <span class="result-value" id="totalTime">0</span> </div> <div class="result-item"> <span class="result-label">Скорость (рец/сек):</span> <span class="result-value" id="speedResult">0</span> </div> <div class="result-item"> <span class="result-label">Произведено рецептов за указанное время:</span> <span class="result-value" id="producedRecipes">0</span> </div> <div class="note"> <strong>Примечание:</strong> Расчёты приведены для механизмов на которые нельзя установить модули умножения выхода - на момент написания калькулятора, это мультиблочная фитогенка. </div> </div> </div> <script> // Значения по умолчанию для модулей const parallelValues = { "0": 1, // Не установлен "16": 16, "32": 32, "64": 64, "128": 128 }; const multiplierValues = { "1": 1, // Не установлен "2": 2, "4": 4, "8": 8, "16": 16 }; // Функция для получения числового значения из выпадающего списка function getSelectValue(id) { const select = document.getElementById(id); return parseFloat(select.value); } // Основная функция расчета function calculate() { // Получаем значения модулей const parallelValue = getSelectValue('parallel'); const multiplierValue = getSelectValue('multiplier'); const speedValue = getSelectValue('speed'); // Получаем значения времени const recipeTime = parseFloat(document.getElementById('recipeTime').value); const calcTime = parseFloat(document.getElementById('calcTime').value); // Получаем фактические значения модулей const parallel = parallelValues[parallelValue] || 1; const multiplier = multiplierValues[multiplierValue] || 1; // Рассчитываем итоговое количество рецептов за цикл const totalRecipesPerCycle = parallel * multiplier; // Рассчитываем итоговое время цикла const totalCycleTime = recipeTime * (1 + speedValue); // Рассчитываем скорость (рецептов в секунду) const speedPerSecond = totalRecipesPerCycle / totalCycleTime; // Рассчитываем количество произведенных рецептов за указанное время const cycles = calcTime / totalCycleTime; const producedRecipes = cycles * totalRecipesPerCycle; // Отображаем результаты document.getElementById('totalRecipes').textContent = totalRecipesPerCycle.toFixed(2); document.getElementById('totalTime').textContent = totalCycleTime.toFixed(2); document.getElementById('speedResult').textContent = speedPerSecond.toFixed(2); document.getElementById('producedRecipes').textContent = producedRecipes.toFixed(2); // Показываем блок с результатами document.getElementById('results').style.display = 'block'; // Добавляем подсветку для высоких значений highlightResults(); } // Функция для подсветки результатов function highlightResults() { const speedValue = parseFloat(document.getElementById('speedResult').textContent); const producedValue = parseFloat(document.getElementById('producedRecipes').textContent); // Сбрасываем предыдущую подсветку const resultValues = document.querySelectorAll('.result-value'); resultValues.forEach(el => el.classList.remove('highlight')); // Подсвечиваем высокие значения скорости if (speedValue > 100) { document.getElementById('speedResult').classList.add('highlight'); } // Подсвечиваем высокие значения производства if (producedValue > 1000) { document.getElementById('producedRecipes').classList.add('highlight'); } } // Инициализация при загрузке страницы document.addEventListener('DOMContentLoaded', function() { // Рассчитываем с значениями по умолчанию calculate(); }); </script> </body> </html>