Боевые борги: различия между версиями

Нет описания правки
Метка: ручная отмена
Содержимое страницы заменено на « </div> <!-- outerContainer --> <div id="printContainer"></div>»
Метки: замена визуальный редактор отключён
Строка 1: Строка 1:
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Боевые Борги Star Horizon</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }


        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
            color: #e0e0e0;
            padding: 20px;
            min-height: 100vh;
        }


        .container {
     </div> <!-- outerContainer -->
            max-width: 1600px;
    <div id="printContainer"></div>
            margin: 0 auto;
        }
 
        header {
            text-align: center;
            margin-bottom: 40px;
            padding: 20px;
            background: rgba(192, 192, 192, 0.1);
            border-left: 4px solid #c0c0c0;
            border-radius: 8px;
        }
 
        h1 {
            font-size: 2.5em;
            color: #c0c0c0;
            margin-bottom: 10px;
            text-shadow: 0 0 10px rgba(192, 192, 192, 0.5);
        }
 
        .subtitle {
            color: #a0a0a0;
            font-size: 1.1em;
        }
 
        .stats {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
            gap: 15px;
            margin-top: 20px;
        }
 
        .stat-box {
            background: rgba(192, 192, 192, 0.2);
            padding: 15px;
            border-radius: 6px;
            text-align: center;
            border: 1px solid rgba(192, 192, 192, 0.5);
        }
 
        .stat-box strong {
            color: #c0c0c0;
            font-size: 1.3em;
        }
 
        .controls {
            margin-bottom: 30px;
            display: flex;
            gap: 15px;
            flex-wrap: wrap;
            background: rgba(0, 0, 0, 0.3);
            padding: 20px;
            border-radius: 8px;
        }
 
        .control-group {
            display: flex;
            gap: 10px;
            align-items: center;
        }
 
        .control-group label {
            font-weight: bold;
            color: #e0e0e0;
        }
 
        input[type="text"],
        select {
            padding: 10px 15px;
            border: 1px solid rgba(192, 192, 192, 0.5);
            background: rgba(30, 30, 50, 0.8);
            color: #e0e0e0;
            border-radius: 4px;
            font-size: 0.95em;
        }
 
        input[type="text"]:focus,
        select:focus {
            outline: none;
            border-color: #c0c0c0;
            box-shadow: 0 0 8px rgba(192, 192, 192, 0.5);
        }
 
        button {
            padding: 10px 20px;
            background: linear-gradient(135deg, #c0c0c0 0%, #b0b0b0 100%);
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-weight: bold;
            transition: transform 0.2s, box-shadow 0.2s;
        }
 
        button:hover {
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(192, 192, 192, 0.4);
        }
 
        .table-wrapper {
            overflow-x: auto;
            background: rgba(0, 0, 0, 0.4);
            border-radius: 8px;
            padding: 20px;
            border: 1px solid rgba(192, 192, 192, 0.2);
        }
 
        table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.9em;
        }
 
        thead {
            background: rgba(192, 192, 192, 0.2);
            position: sticky;
            top: 0;
        }
 
        th {
            padding: 15px;
            text-align: left;
            border-bottom: 2px solid #c0c0c0;
            color: #e0e0e0;
            font-weight: bold;
            cursor: pointer;
            user-select: none;
            transition: background 0.2s;
        }
 
        th:hover {
            background: rgba(192, 192, 192, 0.3);
        }
 
        th::after {
            content: ' ⇅';
            font-size: 0.8em;
            opacity: 0.5;
        }
 
        td {
            padding: 12px 15px;
            border-bottom: 1px solid rgba(192, 192, 192, 0.1);
        }
 
        tr:hover {
            background: rgba(192, 192, 192, 0.1);
        }
 
        .category {
            background: rgba(192, 192, 192, 0.15);
            font-weight: bold;
            color: #e0e0e0;
        }
 
        .category td {
            padding: 15px;
            border-top: 2px solid rgba(192, 192, 192, 0.5);
        }
 
        .armor-type {
            color: #ffa07a;
            font-weight: bold;
        }
 
        .speed-fast {
            color: #90EE90;
            font-weight: bold;
        }
 
        .speed-medium {
            color: #ffeb3b;
            font-weight: bold;
        }
 
        .speed-slow {
            color: #ff9999;
            font-weight: bold;
        }
 
        .health-high {
            color: #90EE90;
        }
 
        .health-medium {
            color: #ffeb3b;
        }
 
        .health-low {
            color: #ff9999;
        }
 
        .module-badge {
            display: inline-block;
            padding: 3px 8px;
            background: rgba(100, 150, 255, 0.3);
            border: 1px solid rgba(100, 150, 255, 0.6);
            border-radius: 3px;
            font-size: 0.85em;
            margin: 2px;
            color: #64b8ff;
        }
    </style>
</head>
<body>
     <div class="container">
        <header>
            <h1>🤖 StarHorizon - Система Боргов</h1>
            <p class="subtitle">Справочник по киборгам и их характеристикам</p>
            <div class="stats">
                <div class="stat-box">
                    <div>Всего боргов</div>
                    <strong id="totalBorgs">16</strong>
                </div>
                <div class="stat-box">
                    <div>Всего модулей</div>
                    <strong>44</strong>
                </div>
                <div class="stat-box">
                    <div>Макс. скорость</div>
                    <strong>5.8 м/с</strong>
                </div>
                <div class="stat-box">
                    <div>Макс. здоровье</div>
                    <strong>520 HP</strong>
                </div>
            </div>
        </header>
 
        <div class="controls">
            <div class="control-group">
                <label for="searchInput">🔍 Поиск:</label>
                <input type="text" id="searchInput" placeholder="Введите название борга..." oninput="filterTable()">
            </div>
            <div class="control-group">
                <label for="categoryFilter">Категория:</label>
                <select id="categoryFilter" onchange="filterTable()">
                    <option value="all">Все категории</option>
                    <option value="borgs">Боевые борги</option>
                    <option value="standard">Небоевые борги</option>
                    <option value="combat">Боевые модули</option>
                    <option value="generic">Универсальные модули</option>
                    <option value="medical">Медицинские модули</option>
                    <option value="cargo">Грузовые модули</option>
                    <option value="engineering">Инженерные модули</option>
                    <option value="janitor">Уборочные модули</option>
                    <option value="science">Научные модули</option>
                    <option value="service">Сервисные модули</option>
                    <option value="syndicate">Синдикатские модули</option>
                </select>
            </div>
            <div class="control-group">
                <button onclick="resetFilters()">Сбросить фильтры</button>
            </div>
            <div class="control-group">
                <button onclick="sortTable(2)">Сортировать по здоровью</button>
            </div>
        </div>
 
        <div class="table-wrapper">
            <table id="borgTable">
                <thead>
                    <tr>
                        <th onclick="sortTable(0)">№</th>
                        <th onclick="sortTable(1)">Название</th>
                        <th onclick="sortTable(2)">Здоровье (Крит / Смерть)</th>
                        <th onclick="sortTable(4)">Скорость (Ходьба / Бег)</th>
                        <th onclick="sortTable(3)">Броня</th>
                        <th onclick="sortTable(5)">Совместимые модули</th>
                        <th onclick="sortTable(6)">Дефолтные модули</th>
                        <th onclick="sortTable(7)">Доп. слоты</th>
                    </tr>
                </thead>
                <tbody id="tableBody">
                    <!-- Данные будут добавлены через JavaScript -->
                </tbody>
            </table>
        </div>
 
        <div class="table-wrapper" style="margin-top: 30px;">
            <table id="moduleTable">
                <thead>
                    <tr>
                        <th onclick="sortModuleTable(0)">№</th>
                        <th onclick="sortModuleTable(1)">Название (EN)</th>
                        <th onclick="sortModuleTable(2)">Тип модуля</th>
                        <th onclick="sortModuleTable(3)">Описание (RU)</th>
                        <th onclick="sortModuleTable(4)">Встроенные предметы</th>
                    </tr>
                </thead>
                <tbody id="moduleTableBody">
                    <!-- Данные будут добавлены через JavaScript -->
                </tbody>
            </table>
        </div>
    </div>
 
    <script>
        // Данные о модулях
        const modulesData = [
            // BorgModuleCombat - боевые модули
            { category: 'combat', num: 1, nameEn: 'PKA Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с прото-кинетическим ускорителем.', items: 'протокинетический ускоритель, крушитель' },
            { category: 'combat', num: 2, nameEn: 'Combat Pistol Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с боевым пистолетом для отключения целей.', items: 'echis (x2)' },
            { category: 'combat', num: 3, nameEn: 'Advanced Laser Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с продвинутым лазерным оружием. Сбалансированная огневая мощь и дальность.', items: 'advanced laser pistol (x2)' },
            { category: 'combat', num: 4, nameEn: 'Heavy PKA Cyborg Module', type: 'BorgModuleCombat', descRu: 'Продвинутый модуль с улучшенным прото-кинетическим ускорителем повышенной мощности.', items: 'proto-kinetic accelerator cannon, крушитель' },
            { category: 'combat', num: 5, nameEn: 'PKA Railgun Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с рельсотроном прото-кинетического ускорителя. Высокопроникающее оружие дальнего действия.', items: 'протокинетическая рельса, крушитель' },
            { category: 'combat', num: 6, nameEn: 'PKA Repeater Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с автоматическим повторителем прото-кинетического ускорителя. Высокий темп огня.', items: 'протокинетический повторитель, крушитель' },
            { category: 'combat', num: 7, nameEn: 'PKA Shotgun Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с дробовиком прото-кинетического ускорителя. Мощное оружие близкого боя.', items: 'протокинетический дробовик, крушитель' },
            { category: 'combat', num: 8, nameEn: 'L6C Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с пулемётом L6C повышенной мощности.', items: 'cyborg GSW LMG-6' },
            { category: 'combat', num: 9, nameEn: 'Heavy Laser Cyborg Module', type: 'BorgModuleCombat', descRu: 'Модуль с тяжелым лазерным оружием повышенной мощности. Разрушительно против защищённых целей.', items: 'X-01 multiphase energy gun (x2)' },
            { category: 'combat', num: 10, nameEn: 'Cloaking Device Cyborg Module', type: 'BorgModuleCombat', descRu: 'Интегрированное устройство невидимости для скрытных операций. Делает невидимым на продолжительное время.', items: 'устройство маскировки' },
 
            // BorgModuleGeneric - универсальные модули
            { category: 'generic', num: 11, nameEn: 'Cable Cyborg Module', type: 'BorgModuleGeneric', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'кусачки, лом, т-лучевой сканер, моток НВ проводов, моток СВ проводов, моток ВВ проводов' },
            { category: 'generic', num: 12, nameEn: 'Fire Extinguisher Cyborg Module', type: 'BorgModuleGeneric', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'маневровый реактивный огнетушитель' },
            { category: 'generic', num: 13, nameEn: 'Tool Cyborg Module', type: 'BorgModuleGeneric', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'лом, гаечный ключ, отвёртка, кусачки, промышленный сварочный аппарат, мультитул, подъёмник для обслуживания' },
 
            // BorgModuleMedical - медицинские модули
            { category: 'medical', num: 14, nameEn: 'Diagnosis Cyborg Module', type: 'BorgModuleMedical', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'анализатор здоровья, стетоскоп' },
            { category: 'medical', num: 15, nameEn: 'Topicals Cyborg Module', type: 'BorgModuleMedical', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'анализатор здоровья, набор для ушибов, мазь, марлевый бинт, пакет крови, шприц' },
            { category: 'medical', num: 16, nameEn: 'Rescue Cyborg Module', type: 'BorgModuleMedical', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'анализатор здоровья, дефибриллятор, ручной этикетировщик' },
            { category: 'medical', num: 17, nameEn: 'Chemical Cyborg Module', type: 'BorgModuleMedical', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'анализатор здоровья, пипетка борга, шприц, пробирка (x3)' },
            { category: 'medical', num: 18, nameEn: 'Advanced Chemical Cyborg Module', type: 'BorgModuleMedical', descRu: 'Продвинутый медицинский модуль, содержащий кибернетическую адаптацию высокоценного гипоспрея. Теперь ваши киборги могут ещё быстрее вводить хлоральгидрат вредителям экипажа!', items: 'анализатор здоровья, гипоспрей борга, шприц, мензурка (x2)' },
 
            // BorgModuleCargo - грузовые модули
            { category: 'cargo', num: 19, nameEn: 'Appraisal Cyborg Module', type: 'BorgModuleCargo', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'оценочный инструмент, ящик с товарами (x2)' },
            { category: 'cargo', num: 20, nameEn: 'Mining Cyborg Module', type: 'BorgModuleCargo', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'шахтёрский бур, лопата, сканер минералов, портативная рация, мешок для руды' },
            { category: 'cargo', num: 21, nameEn: 'Advanced Mining Cyborg Module', type: 'BorgModuleCargo', descRu: 'Продвинутый грузовой модуль, содержащий продвинутое шахтёрское оборудование. Исследования показывают, что он увеличивает производительность киборга на 150%.', items: 'шахтёрский бур с алмазным покрытием, лопата, продвинутый сканер минералов, портативная рация, блюспейс мешок для руды' },
            { category: 'cargo', num: 22, nameEn: 'Grappling Gun Cyborg Module', type: 'BorgModuleCargo', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'крюк-кошка, встроенная система позиционирования, ручной сканер массы' },
 
            // BorgModuleEngineering - инженерные модули
            { category: 'engineering', num: 23, nameEn: 'Advanced Tool Cyborg Module', type: 'BorgModuleEngineering', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'челюсти жизни, электродрель, экспериментальный сварочный аппарат, мультитул, продвинутый передатчик сигналов, подъёмник для обслуживания' },
            { category: 'engineering', num: 24, nameEn: 'Construction Cyborg Module', type: 'BorgModuleEngineering', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'строительная сумка, сталь, стальная плитка, конденсатор, плоскоблок ракетного двигателя, консоль станционного учёта (машинная плата)' },
            { category: 'engineering', num: 25, nameEn: 'RCD Cyborg Module', type: 'BorgModuleEngineering', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'экспериментальный РСУ, газоанализатор, встроенный атмос голопроектор, счётчик Гейгера' },
 
            // BorgModuleJanitor - уборочные модули
            { category: 'janitor', num: 26, nameEn: 'Custodial Cyborg Module', type: 'BorgModuleJanitor', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'лампозаменитель, вантуз, лампа накаливания, мешок для мусора, мыло' },
            { category: 'janitor', num: 27, nameEn: 'Cleaning Cyborg Module', type: 'BorgModuleJanitor', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'проектор голографических знаков, швабра, ведро, распылитель, чистоната (x2)' },
            { category: 'janitor', num: 28, nameEn: 'Advanced Cleaning Cyborg Module', type: 'BorgModuleJanitor', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'продвинутая швабра, улучшенный встроенный распылитель, проектор голографических знаков, ведро, чистоната (x2)' },
 
            // BorgModuleScience - научные модули
            { category: 'science', num: 29, nameEn: 'Artifact Cyborg Module', type: 'BorgModuleScience', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'сканер узлов, газоанализатор, пипетка борга, счётчик Гейгера, пробирка, распылитель' },
            { category: 'science', num: 30, nameEn: 'Anomaly Cyborg Module', type: 'BorgModuleScience', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'сканер аномалий, локатор аномалий, широкоспектральный локатор аномалий, ручной этикетировщик, армированное стекло, плазменное армированное стекло' },
 
            // BorgModuleService - сервисные модули
            { category: 'service', num: 31, nameEn: 'Service Cyborg Module', type: 'BorgModuleService', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'ручка, ручной этикетировщик, печать ОДОБРЕНО, печать ОТКАЗАНО, пипетка борга, встроенная пробирка' },
            { category: 'service', num: 32, nameEn: 'Musique Cyborg Module', type: 'BorgModuleService', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'синтезатор, электрогитара, саксофон' },
            { category: 'service', num: 33, nameEn: 'Gardening Cyborg Module', type: 'BorgModuleService', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'маленькая тяпка, лопатка, кусачки для растений, пипетка борга, ведро, пакет семян (яблоко)' },
            { category: 'service', num: 34, nameEn: 'Harvesting Cyborg Module', type: 'BorgModuleService', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'коса, топорик, сумка для растений, яблоко, спрей от сорняков' },
            { category: 'service', num: 35, nameEn: 'Clowning Cyborg Module', type: 'BorgModuleService', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'велосипедный клаксон, клоунский рекордер, позолоченный велосипедный клаксон, банановая кожура, кремовый банановый пирог' },
            { category: 'service', num: 36, nameEn: 'Translation Cyborg Module', type: 'BorgModuleService', descRu: 'Модуль, оснащённый универсальной технологией перевода для общения на разных языках.', items: 'продвинутый переводчик' },
 
            // BorgModuleSyndicate - синдикатские модули
            { category: 'syndicate', num: 37, nameEn: 'Weapon Cyborg Module', type: 'BorgModuleSyndicate', descRu: 'Часть технологии, дающая киборгам новые способности.', items: 'echis, энергокинжал' },
            { category: 'syndicate', num: 38, nameEn: 'Operative Cyborg Module', type: 'BorgModuleSyndicate', descRu: 'Модуль, в который входят лом, криптографический секвенсор и поисковой навигатор синдиката.', items: 'лом, криптографический секвенсор, Дестабилизатор аутентификации, поисковый навигатор синдиката' },
            { category: 'syndicate', num: 39, nameEn: 'Energy Sword Cyborg Module', type: 'BorgModuleSyndicate', descRu: 'Модуль, в который входит сдвоенный энергетический меч.', items: 'сдвоенный энергетический меч, поисковый навигатор синдиката' },
            { category: 'syndicate', num: 40, nameEn: 'L6C ROW Cyborg Module', type: 'BorgModuleSyndicateAssault', descRu: 'Модуль, в который входит L6C.', items: 'cyborg GSW LMG-6, поисковый навигатор синдиката' },
            { category: 'syndicate', num: 41, nameEn: 'Martyr Cyborg Module', type: 'BorgModuleSyndicate', descRu: 'Модуль, поставляемый со взрывчаткой, с которой вы, скорее всего, не захотите связываться сами.', items: 'Самоуничтожение' },
            { category: 'syndicate', num: 42, nameEn: 'Syndicate Laser Module', type: 'BorgModuleSyndicateAssault', descRu: 'Продвинутый лазерный модуль для киборгов синдиката. Высокоэффективная система оружия.', items: 'advanced laser pistol, поисковый навигатор синдиката' },
            { category: 'syndicate', num: 43, nameEn: 'Syndicate Heavy Laser Module', type: 'BorgModuleSyndicateAssault', descRu: 'Продвинутый тяжёлый лазерный модуль с значительно повышенной огневой мощью. Разрушительный против бронированных целей.', items: 'X-01 multiphase energy gun (x2), поисковый навигатор синдиката' },
            { category: 'syndicate', num: 44, nameEn: 'Syndicate Cloaking Device Module', type: 'BorgModuleSyndicate', descRu: 'Интегрированное устройство невидимости для скрытных операций. Делает невидимым на продолжительное время.', items: 'устройство маскировки' }
        ];
 
        // Данные о боргах
        const borgsData = [
            // Боевые борги
            {
                category: 'borgs',
                num: 1,
                name: 'Assassin Cyborg',
                health: '120 / 240',
                healthValue: 240,
                armor: 'Blunt: 8%, Slash: 8%, Piercing: 5%, Shock: 15%<br>Heat: -5 (flat)',
                speed: '3.6 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleMedical',
                defaultModules: 'BorgModuleTool, BorgModuleCombatCloakingDevice, BorgModuleCombatEchis, BorgModuleJetpack',
                extraSlots: 2
            },
            {
                category: 'borgs',
                num: 2,
                name: 'Scout Cyborg',
                health: '160 / 320',
                healthValue: 320,
                armor: 'Blunt: 15%, Slash: 15%, Piercing: 10%, Shock: 20%<br>Heat: -10 (flat)',
                speed: '3.8 / 5.8',
                speedValue: 5.8,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleMedical',
                defaultModules: 'BorgModuleTool, BorgModuleCombatCloakingDevice, BorgModuleJetpack',
                extraSlots: 2
            },
            {
                category: 'borgs',
                num: 3,
                name: 'Light Crawler Cyborg',
                health: '200 / 440',
                healthValue: 440,
                armor: 'Blunt: 25%, Slash: 25%, Piercing: 25%, Shock: 25%<br>Heat: -20 (flat)',
                speed: '3.0 / 4.8',
                speedValue: 4.8,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleCargo',
                defaultModules: 'BorgModuleTool, BorgModuleCombatPKARepeater, BorgModuleJetpack',
                extraSlots: 3
            },
            {
                category: 'borgs',
                num: 4,
                name: 'Heavy Crawler Cyborg',
                health: '260 / 520',
                healthValue: 520,
                armor: 'Blunt: 30%, Slash: 30%, Piercing: 28%, Shock: 30%<br>Heat: -25 (flat)',
                speed: '2.6 / 4.3',
                speedValue: 4.3,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleCargo',
                defaultModules: 'BorgModuleTool, BorgModuleCombatPKARailgun, BorgModuleJetpack',
                extraSlots: 4
            },
            {
                category: 'borgs',
                num: 5,
                name: 'Assault Walker Cyborg',
                health: '180 / 360',
                healthValue: 360,
                armor: 'Blunt: 22%, Slash: 22%, Piercing: 18%, Shock: 20%<br>Heat: -15 (flat)',
                speed: '3.2 / 5.0',
                speedValue: 5.0,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleEngineering',
                defaultModules: 'BorgModuleTool, BorgModuleCombatLaserAdvanced, BorgModuleJetpack',
                extraSlots: 2
            },
            {
                category: 'borgs',
                num: 6,
                name: 'Heavy Strike Walker Cyborg',
                health: '240 / 480',
                healthValue: 480,
                armor: 'Blunt: 27%, Slash: 27%, Piercing: 24%, Shock: 27%<br>Heat: -22 (flat)',
                speed: '2.8 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleCombat, BorgModuleEngineering',
                defaultModules: 'BorgModuleTool, BorgModuleCombatLaserHeavy, BorgModuleJetpack',
                extraSlots: 3
            },
            {
                category: 'borgs',
                num: 7,
                name: 'Syndicate Assault Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Heat: -10 (flat)',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleSyndicate, BorgModuleSyndicateAssault'
            },
            {
                category: 'borgs',
                num: 8,
                name: 'Syndicate Medical Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Heat: -10 (flat)',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleMedical, BorgModuleSyndicate'
            },
            {
                category: 'borgs',
                num: 9,
                name: 'Syndicate Saboteur Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Heat: -10 (flat)',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleEngineering, BorgModuleSyndicate'
            },
            // Небоевые борги
            {
                category: 'standard',
                num: 10,
                name: 'Generic Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleScience',
                defaultModules: 'BorgModuleTool',
                extraSlots: 5
            },
            {
                category: 'standard',
                num: 11,
                name: 'Engineering Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleEngineering',
                defaultModules: 'BorgModuleTool',
                extraSlots: 3
            },
            {
                category: 'standard',
                num: 12,
                name: 'Mining Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleCargo',
                defaultModules: 'BorgModuleTool',
                extraSlots: 3
            },
            {
                category: 'standard',
                num: 13,
                name: 'Janitor Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleJanitor',
                defaultModules: 'BorgModuleTool',
                extraSlots: 3
            },
            {
                category: 'standard',
                num: 14,
                name: 'Medical Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleMedical',
                defaultModules: 'BorgModuleTool',
                extraSlots: 3
            },
            {
                category: 'standard',
                num: 15,
                name: 'Service Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleService',
                defaultModules: 'BorgModuleTool',
                extraSlots: 3
            },
            {
                category: 'standard',
                num: 16,
                name: 'Service Kerfus Cyborg',
                health: '100 / 200',
                healthValue: 200,
                armor: 'Нет',
                speed: '2.5 / 4.5',
                speedValue: 4.5,
                modules: 'BorgModuleGeneric, BorgModuleService',
                defaultModules: 'BorgModuleTool, BorgModuleMusique, BorgModuleTranslation, BorgModuleGardening',
                extraSlots: 2
            }
        ];
 
        let currentData = [...borgsData];
        let sortDirection = 1;
 
        // Функция рендеринга таблицы
        function renderTable(data) {
            const tbody = document.getElementById('tableBody');
            tbody.innerHTML = '';
 
            let currentCategory = '';
            data.forEach(item => {
                // Добавляем заголовок категории
                if (item.category !== currentCategory) {
                    currentCategory = item.category;
                    const categoryRow = document.createElement('tr');
                    categoryRow.className = 'category';
                    let categoryTitle = '';
                    if (item.category === 'borgs') categoryTitle = '⚔️ БОЕВЫЕ БОРГИ';
                    else if (item.category === 'standard') categoryTitle = '🛠️ НЕБОЕВЫЕ БОРГИ';
 
                    categoryRow.innerHTML = `<td colspan="8">${categoryTitle}</td>`;
                    tbody.appendChild(categoryRow);
                }
 
                // Добавляем строку данных
                const row = document.createElement('tr');
 
                // Определяем класс для здоровья
                let healthClass = '';
                if (item.healthValue >= 400) healthClass = 'health-high';
                else if (item.healthValue >= 250) healthClass = 'health-medium';
                else if (item.healthValue > 0) healthClass = 'health-low';
 
                // Определяем класс для скорости
                let speedClass = '';
                if (item.speedValue >= 5.0) speedClass = 'speed-fast';
                else if (item.speedValue >= 4.5) speedClass = 'speed-medium';
                else if (item.speedValue > 0) speedClass = 'speed-slow';
 
                // Форматируем броню с переносами строк
                const armorFormatted = item.armor === 'Нет' ? 'Нет' : item.armor.split(', ').join('<br>');
 
                // Форматируем модули с переносами строк
                const modulesFormatted = item.modules.split(', ').map(m =>
                    `<span class="module-badge">${m}</span>`
                ).join('<br>');
 
                // Форматируем дефолтные модули (если есть) с переносами строк
                const defaultModulesFormatted = item.defaultModules
                    ? item.defaultModules.split(', ').map(m => `<span class="module-badge">${m}</span>`).join('<br>')
                    : '-';
 
                // Дополнительные слоты
                const extraSlotsText = item.extraSlots ? `+${item.extraSlots}` : '-';
 
                row.innerHTML = `
                    <td>${item.num}</td>
                    <td><strong>${item.name}</strong></td>
                    <td class="${healthClass}">${item.health}</td>
                    <td class="${speedClass}">${item.speed}</td>
                    <td class="armor-type">${armorFormatted}</td>
                    <td>${modulesFormatted}</td>
                    <td style="font-size: 0.85em;">${defaultModulesFormatted}</td>
                    <td style="text-align: center;"><strong>${extraSlotsText}</strong></td>
                `;
                tbody.appendChild(row);
            });
        }
 
        // Функция рендеринга таблицы модулей
        function renderModuleTable(data) {
            const tbody = document.getElementById('moduleTableBody');
            tbody.innerHTML = '';
 
            let currentCategory = '';
            data.forEach(item => {
                // Добавляем заголовок категории
                if (item.category !== currentCategory) {
                    currentCategory = item.category;
                    const categoryRow = document.createElement('tr');
                    categoryRow.className = 'category';
                    let categoryName = '';
                    if (item.category === 'combat') categoryName = '⚔️ БОЕВЫЕ МОДУЛИ';
                    else if (item.category === 'generic') categoryName = '🔧 УНИВЕРСАЛЬНЫЕ МОДУЛИ';
                    else if (item.category === 'medical') categoryName = '⚕️ МЕДИЦИНСКИЕ МОДУЛИ';
                    else if (item.category === 'cargo') categoryName = '📦 ГРУЗОВЫЕ МОДУЛИ';
                    else if (item.category === 'engineering') categoryName = '⚙️ ИНЖЕНЕРНЫЕ МОДУЛИ';
                    else if (item.category === 'janitor') categoryName = '🧹 УБОРОЧНЫЕ МОДУЛИ';
                    else if (item.category === 'science') categoryName = '🔬 НАУЧНЫЕ МОДУЛИ';
                    else if (item.category === 'service') categoryName = '🍽️ СЕРВИСНЫЕ МОДУЛИ';
                    else if (item.category === 'syndicate') categoryName = '🔴 СИНДИКАТСКИЕ МОДУЛИ';
                    categoryRow.innerHTML = `<td colspan="5">${categoryName}</td>`;
                    tbody.appendChild(categoryRow);
                }
 
                // Добавляем строку данных
                const row = document.createElement('tr');
 
                // Форматируем встроенные предметы с переносами строк
                const itemsFormatted = item.items.split(', ').join('<br>');
 
                row.innerHTML = `
                    <td>${item.num}</td>
                    <td><strong>${item.nameEn}</strong></td>
                    <td><span class="module-badge">${item.type}</span></td>
                    <td>${item.descRu}</td>
                    <td class="armor-type">${itemsFormatted}</td>
                `;
                tbody.appendChild(row);
            });
        }
 
        // Функция фильтрации
        function filterTable() {
            const searchValue = document.getElementById('searchInput').value.toLowerCase();
            const categoryValue = document.getElementById('categoryFilter').value;
 
            // Фильтруем борги
            if (categoryValue === 'all' || categoryValue === 'borgs' || categoryValue === 'standard') {
                currentData = borgsData.filter(item => {
                    const matchesSearch = item.name.toLowerCase().includes(searchValue) ||
                                        item.modules.toLowerCase().includes(searchValue);
                    const matchesCategory = categoryValue === 'all' || item.category === categoryValue;
                    return matchesSearch && matchesCategory;
                });
                renderTable(currentData);
                document.getElementById('borgTable').parentElement.style.display = 'block';
            } else {
                document.getElementById('borgTable').parentElement.style.display = 'none';
            }
 
            // Фильтруем модули
            if (categoryValue === 'all' || categoryValue === 'combat' || categoryValue === 'generic' ||
                categoryValue === 'medical' || categoryValue === 'cargo' || categoryValue === 'engineering' ||
                categoryValue === 'janitor' || categoryValue === 'science' || categoryValue === 'service' ||
                categoryValue === 'syndicate') {
                const currentModuleData = modulesData.filter(item => {
                    const matchesSearch = item.nameEn.toLowerCase().includes(searchValue) ||
                                        item.type.toLowerCase().includes(searchValue) ||
                                        item.items.toLowerCase().includes(searchValue);
                    const matchesCategory = categoryValue === 'all' || item.category === categoryValue;
                    return matchesSearch && matchesCategory;
                });
                renderModuleTable(currentModuleData);
                document.getElementById('moduleTable').parentElement.style.display = 'block';
            } else {
                document.getElementById('moduleTable').parentElement.style.display = 'none';
            }
        }
 
        // Функция сброса фильтров
        function resetFilters() {
            document.getElementById('searchInput').value = '';
            document.getElementById('categoryFilter').value = 'all';
            filterTable();
        }
 
        // Функция сортировки модулей
        function sortModuleTable(columnIndex) {
            // Простая сортировка для модулей
            alert('Сортировка модулей по столбцу ' + columnIndex);
        }
 
        // Функция сортировки
        function sortTable(columnIndex) {
            sortDirection *= -1;
 
            currentData.sort((a, b) => {
                let aValue, bValue;
 
                switch(columnIndex) {
                    case 0: // Номер
                        aValue = a.num;
                        bValue = b.num;
                        break;
                    case 1: // Название
                        aValue = a.name;
                        bValue = b.name;
                        break;
                    case 2: // Здоровье
                        aValue = a.healthValue;
                        bValue = b.healthValue;
                        break;
                    case 4: // Скорость
                        aValue = a.speedValue;
                        bValue = b.speedValue;
                        break;
                    default:
                        return 0;
                }
 
                if (typeof aValue === 'string') {
                    return sortDirection * aValue.localeCompare(bValue);
                }
                return sortDirection * (aValue - bValue);
            });
 
            renderTable(currentData);
        }
 
        // Инициализация таблицы при загрузке страницы
        document.addEventListener('DOMContentLoaded', () => {
            renderTable(borgsData);
            renderModuleTable(modulesData);
        });
    </script>
</body>
</html>