Калькулятор производительности для мультиблоков.
Автор: kottesla004 · Обновлён:

Модули улучшения
В этом гайде рассматриваются особенности взаимодействия модулей улучшения для мультиблоков и представлен калькулятор для расчёта их производительности.
Модули параллельной обработки
Модули устанавливаются в специальные слоты мультиблочных механизмов. Расположение слотов можно увидеть через интерфейс NEI. Обратите внимание, что внутри интерфейса механизм можно вращать для удобного осмотра:


Модули множителя рецепта
В зависимости от тира эти модули увеличивают количество параллельно обрабатываемых рецептов в 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 рецепт за 10 секунд.
- Улучшенный мультиблок с модулями:
- Параллельная обработка х128
- Множитель х16
- Ускорение -95%
- Время измерения производительности: 60 секунд.
Расчёты:
- Базовый мультиблок выполнил 6 рецептов за 60 секунд.
- Топовый мультиблок выполнил 245760 рецептов за 60 секунд.
2.1 Подробный расчёт:
- 128 × 16 = 2048 (количество рецептов за цикл)
- 10 × (1 - (95 / 100)) = 0,5 секунд (время выполнения 1 цикла)
- 60 / 0,5 = 120 (количество выполненных циклов за измеряемый промежуток времени)
- 2048 × 120 = 245760 (итоговое количество рецептов за измеряемый промежуток времени)
Итог: прирост производительности в 40960%.
Калькулятор
Готовый калькулятор можно запустить у себя без отдельного сайта. Скопируйте HTML-код из спойлера ниже в файл calculator.html и откройте его в браузере. При желании файл можно разместить на любом статическом хостинге и пользоваться калькулятором по собственной ссылке.

Код калькулятора
<!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>


