Перейти к содержимому
Zone of Games Forum
SerGEAnt

Сообщение добавлено пользователем SerGEAnt

Рекомендованные сообщения

5 часов назад, Chillstream сказал:

Надеюсь в ближайшее время сделаю, там прикол в движке, что надо строку делать где-то не больше 63 символа, либо текст не влезет в колонку в игре eysvDGD.png 

Накидал скрипт на html для валидации длины строк.
X9HyqOl.png

Пример работы:

qmVRpsx.png

 

Можно щёлкнуть по строке для редактирования, попытаться сократить и сохранить.

Wd3Qxlm.png

Там будет видно, улучшилась ситуация или нет. Если всё нормально — можно нажать кнопку копировать и скопировать себе в таблицу или туда, где вы там проводите редактуру. Будут скопированы все строки из блока (ячейки).

Также можно нажать кнопку “Сохранить всё”, чтобы сохранить все отредактированные строки на рабочий стол в txt файл.

Le6DHPC.png

Затем содержимое файла можно скопировать и вставить на таблицу.

 

Скрытый текст

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Валидатор длины текста</title>
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            margin: 0;
            padding: 20px;
            background-color: #f5f5f5;
            color: #333;
        }
        h1 {
            color: #2c3e50;
            text-align: center;
            margin-bottom: 30px;
        }
        .container {
            display: flex;
            gap: 30px;
            margin: 0 auto;
            max-width: 1200px;
            background: white;
            padding: 25px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        textarea {
            width: 100%;
            height: 400px;
            font-family: 'Consolas', monospace;
            padding: 15px;
            border: 1px solid #ddd;
            border-radius: 5px;
            resize: vertical;
            font-size: 14px;
            line-height: 1.5;
        }
        .controls {
            display: flex;
            flex-direction: column;
            gap: 15px;
            min-width: 250px;
        }
        .control-group {
            display: flex;
            flex-direction: column;
            gap: 5px;
        }
        label {
            font-weight: 600;
            color: #2c3e50;
        }
        input[type="number"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 5px;
            font-size: 16px;
        }
        button {
            padding: 12px 20px;
            background-color: #3498db;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            font-weight: 600;
            transition: background-color 0.3s;
        }
        button:hover {
            background-color: #2980b9;
        }
        #output {
            margin-top: 30px;
            max-width: 1200px;
            margin-left: auto;
            margin-right: auto;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            background: white;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            border-radius: 5px;
            overflow: hidden;
        }
        td, th {
            border: 1px solid #e0e0e0;
            padding: 12px 15px;
            vertical-align: top;
        }
        th {
            background-color: #3498db;
            color: white;
            text-align: left;
        }
        .exceeded {
            background-color: #ffebee;
        }
        .highlight {
            box-shadow: inset 0 0 0 2px #e74c3c;
        }
        .line-number {
            color: #7f8c8d;
            font-size: 0.85em;
            display: block;
            margin-bottom: 5px;
        }
        .block-separator {
            background-color: #3498db;
            height: 3px;
        }
        .block-separator td {
            padding: 0;
        }
        pre {
            margin: 0;
            white-space: pre-wrap;
            font-family: 'Consolas', monospace;
            font-size: 14px;
        }
        .nav-bar {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            background: white;
            padding: 10px 20px;
            border-radius: 50px;
            box-shadow: 0 2px 15px rgba(0, 0, 0, 0.2);
            display: flex;
            gap: 15px;
            z-index: 1000;
            opacity: 0;
            transition: opacity 0.3s;
        }
        .nav-bar.visible {
            opacity: 1;
        }
        .nav-button {
            padding: 8px 15px;
            background-color: #3498db;
            color: white;
            border: none;
            border-radius: 20px;
            cursor: pointer;
            font-weight: 600;
            transition: all 0.3s;
        }
        .nav-button:hover {
            background-color: #2980b9;
            transform: translateY(-2px);
        }
        .nav-button:disabled {
            background-color: #bdc3c7;
            cursor: not-allowed;
            transform: none;
        }
        .counter {
            padding: 8px 15px;
            font-weight: 600;
            color: #2c3e50;
        }
        .valid-part {
            background-color: #e8f5e9;
        }
        .excess-part {
            background-color: #ffcdd2;
            text-decoration: underline wavy red;
        }
        .stats-panel {
            background: white;
            padding: 15px;
            border-radius: 8px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
            margin-bottom: 20px;
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
        }
        .stat-item {
            min-width: 120px;
        }
        .stat-value {
            font-size: 24px;
            font-weight: bold;
            color: #2c3e50;
        }
        .stat-label {
            font-size: 14px;
            color: #7f8c8d;
        }
        .toggle-normal {
            margin: 10px 0;
            padding: 8px 12px;
            background: #ecf0f1;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        .collapsed .normal-row {
            display: none;
        }
        .summary-row {
            background-color: #f8f9fa;
            font-weight: bold;
        }
        .editable {
            cursor: pointer;
        }
        .editable:hover {
            background-color: #f0f7ff !important;
        }
        .edit-textarea {
            width: 100%;
            min-height: 100px;
            font-family: 'Consolas', monospace;
            padding: 10px;
            border: 2px solid #3498db;
            border-radius: 5px;
            resize: vertical;
            font-size: 14px;
            line-height: 1.5;
        }
        .edit-buttons {
            display: flex;
            gap: 10px;
            margin-top: 10px;
        }
        .edit-button {
            padding: 5px 10px;
            font-size: 14px;
            border-radius: 4px;
        }
        .save-button {
            background-color: #2ecc71;
            color: white;
        }
        .cancel-button {
            background-color: #e74c3c;
            color: white;
        }
        .copy-block-btn {
            background-color: #95a5a6;
            color: white;
            border: none;
            border-radius: 4px;
            padding: 4px 8px;
            font-size: 12px;
            cursor: pointer;
            margin-left: 10px;
            transition: background-color 0.3s;
        }
        .copy-block-btn:hover {
            background-color: #7f8c8d;
        }
        .copy-block-btn::before {
            content: "⏏";
            margin-right: 4px;
        }
        .block-actions {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .save-all-btn {
            background-color: #27ae60;
        }
        .save-all-btn:hover {
            background-color: #219653;
        }
    </style>
</head>
<body>
    <h1>Валидатор длины текста</h1>
    
    <div class="container">
        <textarea id="inputText" placeholder="Вставьте текст для проверки здесь..."></textarea>
        <div class="controls">
            <div class="control-group">
                <label for="maxLength">Максимальная длина строки:</label>
                <input type="number" id="maxLength" value="63" min="1">
            </div>
            <button id="processBtn" onclick="processText()">Проверить текст</button>
            <button id="saveAllBtn" class="save-all-btn" onclick="saveAllText()" style="display: none;">Сохранить всё (TXT)</button>
            <div class="control-group">
                <small>Примечание: программа учитывает текст без форматирования</small>
            </div>
        </div>
    </div>
    
    <div id="output"></div>
    <div id="statsPanel" class="stats-panel" style="display: none;"></div>
    
    <div class="nav-bar" id="navBar">
        <button class="nav-button" id="prevButton" onclick="navigateExceeded(-1)">← Назад</button>
        <span class="counter" id="counter">0/0</span>
        <button class="nav-button" id="nextButton" onclick="navigateExceeded(1)">Вперёд →</button>
    </div>

    <script>
        let exceededElements = [];
        let currentExceededIndex = -1;
        let allResults = [];
        let isCollapsed = false;
        
        function processText() {
            const inputText = document.getElementById('inputText').value;
            const maxLength = parseInt(document.getElementById('maxLength').value);
            const blocks = splitBlocks(inputText);
            allResults = analyzeBlocks(blocks, maxLength);
            displayStats(allResults, maxLength);
            displayResults(allResults);
            initNavigation();
            document.getElementById('saveAllBtn').style.display = 'block';
        }
        
        function splitBlocks(text) {
            const lines = text.split(/\r?\n/);
            let blocks = [];
            let currentBlock = [];
            let inQuotes = false;
            
            for (let line of lines) {
                // Убрали trim(), чтобы сохранять пустые строки внутри блоков
                const startsWithQuote = line.startsWith('"') && !inQuotes;
                const endsWithQuote = line.endsWith('"') && !line.endsWith('\\"');
                
                if (startsWithQuote) inQuotes = true;
                if (endsWithQuote) inQuotes = false;
                
                if (inQuotes || currentBlock.length > 0) {
                    currentBlock.push(line.replace(/\\"/g, '"'));
                    if (!inQuotes) {
                        const fullBlock = currentBlock.join('\n').replace(/^"(.*)"$/, '$1');
                        blocks.push(fullBlock);
                        currentBlock = [];
                    }
                } else {
                    // Добавляем строку в блок только если она не пустая ИЛИ если мы внутри блока
                    if (line.trim() !== '' || currentBlock.length > 0) {
                        blocks.push(line);
                    }
                }
            }
            
            return blocks;
        }
        
        function cleanText(text) {
            return text
                .replace(/\\[A-Za-z]\[\d+\]/g, '')
                .replace(/\\[A-Za-z]/g, '')
                .replace(/\\[}.]/g, '');
        }
        
        function analyzeBlocks(blocks, maxLength) {
            return blocks.map(block => {
                const lines = block.includes('\n') ? block.split('\n') : [block];
                return lines.map(line => {
                    const cleaned = cleanText(line);
                    const length = cleaned.length;
                    return {
                        original: line,
                        cleaned: cleaned,
                        length: length,
                        exceeded: length > maxLength,
                        diff: Math.max(0, length - maxLength)
                    };
                });
            });
        }
        
        function displayStats(results, maxLength) {
            const statsPanel = document.getElementById('statsPanel');
            statsPanel.style.display = 'block';
            
            let totalLines = 0;
            let exceededLines = 0;
            let maxExceed = 0;
            let totalExceed = 0;
            
            results.forEach(block => {
                block.forEach(line => {
                    totalLines++;
                    if (line.exceeded) {
                        exceededLines++;
                        totalExceed += line.diff;
                        if (line.diff > maxExceed) {
                            maxExceed = line.diff;
                        }
                    }
                });
            });
            
            const percentExceeded = totalLines > 0 ? (exceededLines / totalLines * 100).toFixed(1) : 0;
            const avgExceed = exceededLines > 0 ? (totalExceed / exceededLines).toFixed(1) : 0;
            
            statsPanel.innerHTML = `
                <div class="stat-item">
                    <div class="stat-value">${totalLines}</div>
                    <div class="stat-label">Всего строк</div>
                </div>
                <div class="stat-item">
                    <div class="stat-value">${exceededLines} <small>(${percentExceeded}%)</small></div>
                    <div class="stat-label">Превышений</div>
                </div>
                <div class="stat-item">
                    <div class="stat-value">${maxExceed}</div>
                    <div class="stat-label">Макс. превышение</div>
                </div>
                <div class="stat-item">
                    <div class="stat-value">${avgExceed}</div>
                    <div class="stat-label">Среднее превышение</div>
                </div>
                <div class="stat-item">
                    <div class="stat-value">${maxLength}</div>
                    <div class="stat-label">Лимит длины</div>
                </div>
                <button class="toggle-normal" onclick="toggleNormalRows()">
                    ${isCollapsed ? 'Показать все строки' : 'Скрыть нормальные строки'}
                </button>
            `;
        }
        
        function displayResults(results) {
            const output = document.getElementById('output');
            let html = `
                <table id="resultsTable" class="${isCollapsed ? 'collapsed' : ''}">
                    <thead>
                        <tr>
                            <th>Текст</th>
                            <th style="width: 80px;">Длина</th>
                            <th style="width: 80px;">Превышение</th>
                        </tr>
                    </thead>
                    <tbody>
            `;
            
            let blockCount = 0;
            results.forEach((block, blockIndex) => {
                let blockExceeded = false;
                let blockLines = 0;
                let blockExceededLines = 0;
                
                block.forEach(line => {
                    blockLines++;
                    if (line.exceeded) blockExceededLines++;
                });
                
                if (blockExceededLines > 0) blockCount++;
                
                // Собираем полный текст блока для копирования
                const fullBlockText = block.map(line => line.original).join('\n');
                
                html += `
                    <tr class="block-separator">
                        <td colspan="3"></td>
                    </tr>
                    <tr class="summary-row ${blockExceededLines === 0 ? 'normal-row' : ''}">
                        <td colspan="3">
                            <div class="block-actions">
                                <span>Блок ${blockIndex + 1}: ${blockLines} строк, ${blockExceededLines} превышений</span>
                                <button class="copy-block-btn" onclick="copyBlockText(${blockIndex})" title="Копировать весь блок">Копировать</button>
                            </div>
                        </td>
                    </tr>
                `;
                
                block.forEach((line, lineIndex) => {
                    const maxLen = parseInt(document.getElementById('maxLength').value);
                    const safeText = escapeHtml(line.original);
                    const safeCleaned = escapeHtml(line.cleaned);
                    
                    let highlighted = safeCleaned;
                    if (line.exceeded) {
                        highlighted = `<span class="valid-part">${safeCleaned.substring(0, maxLen)}</span>` +
                                       `<span class="excess-part">${safeCleaned.substring(maxLen)}</span>`;
                    }
                    
                    html += `
                        <tr class="${line.exceeded ? 'exceeded' : 'normal-row'} editable" 
                            id="row-${blockIndex}-${lineIndex}"
                            data-block="${blockIndex}"
                            data-line="${lineIndex}"
                            onclick="startEditLine(this, ${blockIndex}, ${lineIndex})">
                            <td>
                                <span class="line-number">Блок ${blockIndex + 1}, строка ${lineIndex + 1}</span>
                                <pre>${highlighted}</pre>
                            </td>
                            <td>${line.length}</td>
                            <td>${line.exceeded ? `+${line.diff}` : ''}</td>
                        </tr>
                    `;
                });
            });
            
            html += `
                    </tbody>
                </table>
            `;
            
            output.innerHTML = html;
        }
        
        function copyBlockText(blockIndex) {
            const blockText = allResults[blockIndex].map(line => line.original).join('\n');
            navigator.clipboard.writeText(blockText).then(() => {
                // Визуальная обратная связь
                const buttons = document.querySelectorAll('.copy-block-btn');
                const originalText = buttons[blockIndex].textContent;
                buttons[blockIndex].textContent = 'Скопировано!';
                buttons[blockIndex].style.backgroundColor = '#2ecc71';
                
                setTimeout(() => {
                    buttons[blockIndex].textContent = originalText;
                    buttons[blockIndex].style.backgroundColor = '#95a5a6';
                }, 2000);
            }).catch(err => {
                console.error('Ошибка копирования: ', err);
                alert('Не удалось скопировать текст');
            });
        }
        
        function startEditLine(rowElement, blockIndex, lineIndex) {
            // Если уже в режиме редактирования - игнорируем клик
            if (rowElement.querySelector('.edit-textarea')) return;
        
            const lineData = allResults[blockIndex][lineIndex];
            const originalContent = rowElement.innerHTML; // Получаем исходный HTML
        
            // Сохраняем исходный HTML в data-атрибут
            rowElement.setAttribute('data-original-content', originalContent);
        
            rowElement.classList.remove('editable');
            rowElement.innerHTML = `
                <td colspan="3">
                    <span class="line-number">Блок ${blockIndex + 1}, строка ${lineIndex + 1}</span>
                    <textarea class="edit-textarea" id="edit-${blockIndex}-${lineIndex}">${escapeHtml(lineData.original)}</textarea>
                    <div class="edit-buttons">
                        <button class="edit-button save-button" onclick="saveEditedLine(this, ${blockIndex}, ${lineIndex})">Сохранить</button>
                        <button class="edit-button cancel-button" onclick="cancelEditLine(this, ${blockIndex}, ${lineIndex})">Отмена</button> 
                    </div>
                </td>
            `;
        
            // Фокусируем textarea и устанавливаем курсор в конец
            const textarea = rowElement.querySelector('.edit-textarea');
            textarea.focus();
            textarea.selectionStart = textarea.selectionEnd = textarea.value.length;
        
            // Остановка всплытия события, чтобы не срабатывали другие обработчики
            event.stopPropagation();
        }
        
        function saveEditedLine(button, blockIndex, lineIndex) {
            const rowElement = button.closest('tr');
            const textarea = rowElement.querySelector('.edit-textarea');
            const newText = textarea.value;
            
            // Обновляем данные в allResults
            allResults[blockIndex][lineIndex].original = newText;
            allResults[blockIndex][lineIndex].cleaned = cleanText(newText);
            
            // Пересчитываем длину и превышение
            const maxLength = parseInt(document.getElementById('maxLength').value);
            const cleaned = allResults[blockIndex][lineIndex].cleaned;
            const length = cleaned.length;
            
            allResults[blockIndex][lineIndex].length = length;
            allResults[blockIndex][lineIndex].exceeded = length > maxLength;
            allResults[blockIndex][lineIndex].diff = Math.max(0, length - maxLength);
            
            // Перерисовываем только эту строку
            updateSingleRow(rowElement, blockIndex, lineIndex);
            
            // Обновляем статистику
            updateStats();
            
            // Остановка всплытия события
            event.stopPropagation();
        }
        
        function cancelEditLine(button, blockIndex, lineIndex) {
            const rowElement = button.closest('tr');

            // Получаем исходный HTML из data-атрибута
            const originalContent = rowElement.getAttribute('data-original-content');

            if (originalContent !== null) { 
                 rowElement.innerHTML = originalContent;
                 rowElement.classList.add('editable');
                 // Удаляем data-атрибут после использования
                 rowElement.removeAttribute('data-original-content');
            } else {
                 console.error("Не удалось восстановить оригинальное содержимое строки.");
                 // В качестве запасного варианта, можно попробовать перерисовать строку из данных
                 // updateSingleRow(rowElement, blockIndex, lineIndex); 
            }

            // Остановка всплытия события
            event.stopPropagation();
        }
        
        function updateSingleRow(rowElement, blockIndex, lineIndex) {
            const lineData = allResults[blockIndex][lineIndex];
            const maxLen = parseInt(document.getElementById('maxLength').value);
            const safeText = escapeHtml(lineData.original);
            const safeCleaned = escapeHtml(lineData.cleaned);
            
            let highlighted = safeCleaned;
            if (lineData.exceeded) {
                highlighted = `<span class="valid-part">${safeCleaned.substring(0, maxLen)}</span>` +
                               `<span class="excess-part">${safeCleaned.substring(maxLen)}</span>`;
            }
            
            rowElement.className = lineData.exceeded ? 'exceeded editable' : 'editable';
            rowElement.setAttribute('onclick', `startEditLine(this, ${blockIndex}, ${lineIndex})`);
            rowElement.innerHTML = `
                <td>
                    <span class="line-number">Блок ${blockIndex + 1}, строка ${lineIndex + 1}</span>
                    <pre>${highlighted}</pre>
                </td>
                <td>${lineData.length}</td>
                <td>${lineData.exceeded ? `+${lineData.diff}` : ''}</td>
            `;
            
            // Обновляем навигацию по превышениям без автоматического перехода
            initNavigation(false);
        }
        
        function updateStats() {
            const maxLength = parseInt(document.getElementById('maxLength').value);
            displayStats(allResults, maxLength);
        }
        
        function toggleNormalRows() {
            isCollapsed = !isCollapsed;
            const table = document.getElementById('resultsTable');
            if (table) {
                table.classList.toggle('collapsed', isCollapsed);
            }
            document.querySelector('.toggle-normal').textContent = 
                isCollapsed ? 'Показать все строки' : 'Скрыть нормальные строки';
        }
        
        function initNavigation(shouldNavigate = true) {
            exceededElements = Array.from(document.querySelectorAll('.exceeded'));
            updateCounter();
            
            if (exceededElements.length > 0) {
                document.getElementById('navBar').classList.add('visible');
                if (shouldNavigate && currentExceededIndex === -1) {
                    navigateExceeded(1); // Перейти к первому превышению
                }
            } else {
                document.getElementById('navBar').classList.remove('visible');
                currentExceededIndex = -1;
            }
        }
        
        function navigateExceeded(direction) {
            if (exceededElements.length === 0) return;
            
            // Снять выделение с текущего элемента
            if (currentExceededIndex >= 0 && currentExceededIndex < exceededElements.length) {
                exceededElements[currentExceededIndex].classList.remove('highlight');
            }
            
            // Вычислить новый индекс
            let newIndex = currentExceededIndex + direction;
            
            if (newIndex < 0) {
                newIndex = exceededElements.length - 1;
            } else if (newIndex >= exceededElements.length) {
                newIndex = 0;
            }
            
            currentExceededIndex = newIndex;
            
            // Применить выделение к новому элементу
            exceededElements[currentExceededIndex].classList.add('highlight');
            
            // Прокрутить к элементу
            exceededElements[currentExceededIndex].scrollIntoView({
                behavior: 'smooth',
                block: 'center'
            });
            
            updateCounter();
        }
        
        function updateCounter() {
            const counter = document.getElementById('counter');
            if (exceededElements.length > 0) {
                counter.textContent = `${currentExceededIndex + 1}/${exceededElements.length}`;
            } else {
                counter.textContent = '0/0';
            }
            
            // Обновить состояние кнопок
            document.getElementById('prevButton').disabled = exceededElements.length === 0;
            document.getElementById('nextButton').disabled = exceededElements.length === 0;
        }
        
        function escapeHtml(unsafe) {
            if (!unsafe) return '';
            return unsafe
                .replace(/&/g, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;")
                .replace(/"/g, "&quot;")
                .replace(/'/g, "&#039;");
        }
        
        function saveAllText() {
            // Собираем все строки из всех блоков
            let fullText = '';
            
            allResults.forEach((block, blockIndex) => {
                block.forEach((line, lineIndex) => {
                    fullText += line.original;
                    // Добавляем перенос только если это не последняя строка в блоке
                    if (lineIndex < block.length - 1) {
                        fullText += '\n';
                    }
                });
                // Добавляем перенос между блоками, но не после последнего блока
                if (blockIndex < allResults.length - 1) {
                    fullText += '\n';
                }
            });
            
            // Создаем Blob с текстом
            const blob = new Blob([fullText], { type: 'text/plain;charset=utf-8' });
            
            // Создаем временную ссылку для скачивания
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = 'edited_text.txt';
            
            // Добавляем ссылку в документ и эмулируем клик
            document.body.appendChild(a);
            a.click();
            
            // Удаляем ссылку и освобождаем память
            setTimeout(() => {
                document.body.removeChild(a);
                URL.revokeObjectURL(url);
            }, 100);
        }
    </script>
</body>
</html>

 

Сохраните код на рабочий стол в какой-нибудь index.html и открывайте в любом браузере.

  • +1 1

Поделиться сообщением


Ссылка на сообщение

@0wn3df1x мне говорили, что вроде есть плагин, но не факт, что он подойдёт для моей версии, что за плагин и где взять не сказали,  спасибо за выше скрипт, он работает, но есть одна проблема, что он сохраняет в txt и если я выделю, тот текст который там 6126 строк и вставлю, не прокатит, потому-что структура у проги аля excel, то есть колонки, а их всего 4358.
Мне тут чатгпт написал код для редактирования excel, вроде работает, посмотрел по твоему скрипту и говорит идеально 61 символ, щас попробую в этом коде поменять на 61

Поделиться сообщением


Ссылка на сообщение
3 минуты назад, Chillstream сказал:

@0wn3df1x мне говорили, что вроде есть плагин, но не факт, что он подойдёт для моей версии, что за плагин и где взять не сказали,  спасибо за выше скрипт, он работает, но есть одна проблема, что он сохраняет в txt и если я выделю, тот текст который там 6126 строк и вставлю, не прокатит, потому-что структура у проги аля excel, то есть колонки, а их всего 4358.
Мне тут чатгпт написал код для редактирования excel, вроде работает, посмотрел по твоему скрипту и говорит идеально 61 символ, щас попробую в этом коде поменять на 61

Мой скрипт заточен под форматирование из Google-таблиц (в экселе должна быть та же система).

То есть, допустим, в таблице могут быть две ячейки

Первая ячейка в одну строку
Вторая ячейка
в двух строках


Когда мы копируем текст из таблицы в буфер обмена, то мы получаем эти строки в таком виде:

Первая ячейка в одну строку
"Вторая ячейка
в двух строках"


Т.е. при копировании в буфер обмена у второй ячейки, внутри которой было две строки, в начале и в конце добавилась кавычка. Таким образом Google-таблицы и Excel понимает, что при вставке
”Первая ячейка в одну строку” — пойдёт в первую ячейку
А
”Вторая ячейка
в двух строках”
Пойдёт в следующую ячейку в цельном виде. Если бы не было кавычек, вместо двух ячеек получилось бы три ячейки с тремя строками.
 



А так всё от той программы для реимпорта зависит.
Если в неё нельзя вставить текст целиком, можно править и вставлять исправленное построчно. 

Поделиться сообщением


Ссылка на сообщение

оказывается реально работает такой перенос, буду знать.

если сегодня получится доделать текст, сюда заливать русификатор без тестирования, мне кажется плохая идея. так что либо я сам поиграю, либо дам кому-нибудь поиграть и знакомых и посмотрю.

  • +1 3

Поделиться сообщением


Ссылка на сообщение
10 часов назад, Chillstream сказал:

Короче тестеров особо не нашлось, я сам лично устал его делать), я так побегал, вроде играется) надо уже более глубоко, кто поиграет сказать, какие есть ошибки. В игре некоторые слова будут на английском, это звуки, но могут встретится и не переведенные реально слова, напишите когда наберется исправлю. и насчет ошибок мешающим прохождение, вдруг такое будет.
pRQIlWp.png

ipHtrmT.png

9w4j7d6.png
@SerGEAnt скачать русификатор: https://workupload.com/file/KkQa47UUD22 

установка: кинуть data и font в папку игры где .exe

Некоторые вещи при подъеме их откуда либо почему то не имеют русского перевода. К примеру подобрав из мусорки Cheeze stix(не переведено, но вроде бы озночает Сырные палочки) они пишутся на английском а в инвентаре написанны по русски.

 

Поделиться сообщением


Ссылка на сообщение

То что пока бросается в глаза и мой вариант для исправления

Подвеска для зубов - Подвеска из зубов
Батончик мюсли - Мюсли батончик
Опыт за бой отображается странно “30 получено ОПТ %”
Пистолетная пуля - Патрон для пистолета
Гильза от дробовика - Патрон для Дробовика
Старая игровая приставка - Консоль прошлого поколения
Старинная игровая приставка - Ретро консоль
"Спиртовая" доска - Спиритическая доска
Цвет игрового идентификатора - Портативная консоль
Покраска - Сумка для холста
Сморщенная голова - Сушеная голова
Ртутный диск - Диск "Меркурий"
Фигура Армейского парня - Солдатик
Коробка сока - Банка Апельсиновой колы
Банка Лимонного напитка - Банка Лимонада
Карамель - Конфетка
Батончик Гранулы - Батончик “Козинак”

Поделиться сообщением


Ссылка на сообщение

Старая газета. С тех пор как это началось. - Старая газета. До момента, как всё это началось.
Кажется, она застряла. Вы не можете её открыть. - Похоже её заклинило. Ты не можешь её открыть.
Он заклинило. Вы не можете её открыть. - Похоже её заклинило. Ты не можешь её открыть.
Винтовочная пуля - Патрон для винтовки
Пуля малого калибра для SMG - Патрон для ПП
Банка из-под колы - Банка Колы
Энергетический напиток - Энергетик
Тонизирующее средство - Тоник
Клейкая лента - Скотч
 

Поделиться сообщением


Ссылка на сообщение

нормально ты тут написал), насчет опыта я заметил, но не нашел где исправлять, насчет сырных палочек вроде я оставил английский вариант, например в начале есть подбор в комнате на английском, это красный тег, нельзя переводить, остальное гляну.

Изменено пользователем Chillstream
  • +1 1

Поделиться сообщением


Ссылка на сообщение

Здравствуйте! Наткнулся на такие баги: нельзя передать товарищу в маске что-то покушать. Меню с выбором еды пустое  2. После победы над копией художника (той, которая атакует при разговоре) выскакивает ошибка  (не может найти какой-то файл пнг)

Поделиться сообщением


Ссылка на сообщение

@Malkovichi вот я и боялся, что такое выскочит, скинь скрин на че жалуется, насчет нельзя дать покушать, вот тут я честно не знаю даже где исправлять скинь сейв и диалог посмотрю может там чёто нарушено.

@CoffeeD  насчёт переводов сверху, почему juice box это апельсиновый сок? или painting — сумка для холста?

Изменено пользователем Chillstream

Поделиться сообщением


Ссылка на сообщение

так выше исправил текст и у меня есть мысля изза чего все ломается.

Поделиться сообщением


Ссылка на сообщение

Сейчас восстановлю, гляну. Просто я помню, что я брал orange cola can

Всё я понял. Перевод каким-то макаром поменял иконку. Там действительно “Сок” (но он апельсиновый =))

Ещё один момент. Полосы хп, выносливости и патронов, имеют длинну в соотношении слов. 

image.png

Когда там было слово “Патроны”  (или что там было не помню). Полоски были в 1 мм.

Может быть записать как “ХП” “ВНС” “ПТРН”?

Да, это действительно “Картина”. т.е. после использования Сумки для холста. Ну и Покраска в — Картину исправить =)

Поделиться сообщением


Ссылка на сообщение

да я просто думаю, как так, вроде написано Juice Box и еще момент, насчет приставок, там написано

Old game Console если мы переводим — консоль прошлого поколения
A very old game console. The controllers resemble TV remotes.  — тогда тут “очень старая консоль прошлого поколения?”

/console

птрн исправил, мне нужен какой нить баг, понять суть, где ошибка происходит, насчет вын и оз нормально же, я везде исправил где видел, а так придётся опть весь текст менять обратно на хп) 

Изменено пользователем Chillstream

Поделиться сообщением


Ссылка на сообщение

Мб “Консоль прошлого поколения” и “Винтажная консоль”?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Airat_2015
      Children of Zodiarcs

      Метки: Стратегия, Ролевая игра, Инди, Карточный баттлер, Построение колоды Платформы: PC XONE PS4 SW MAC LIN Разработчик: Cardboard Utopia Издатель: Square Enix Дата выхода: 18 июля 2017 года Отзывы Steam: 344 отзывов, 69% положительных  
      Перевод игры вёлся здесь: http://notabenoid.org/book/70094
    • Автор: pekatvdmitriypekar
      Umamusume: Pretty Derby

      Метки: Аниме, Лошади, Бесплатная игра, Милая, Азартная Разработчик: Cygames, Inc. Издатель: Cygames, Inc. Дата выхода: 25.06.2025 Отзывы Steam: 22394 отзывов, 93% положительных

  • Сейчас популярно

  • Продвигаемые темы

  • Последние сообщения

    • Промт для перевода игры Starsector для deepseek от Лисосис. Я Дипсику этот промт  первым сообщением слал:  Делать осмысленный перевод текста, который я тебе дам.  Текст разбит на пронумерованные блоки. Менять номер блока, либо добавлять новые блоки запрещено. Символ " в блоках удалять и добавлять запрещено. Повторю еще раз - запрещено категорически взаимодействовать, удалять и добавлять любые "ёлочки" в тексте. Третий раз повторю - символы кавычек в тексте не менять категорически!!! Текст не единый, поэтому после перевода одного пронумерованного блока - начинать переводить новый блок как будто это новый текст, а не продолжение прошлого блока. Тематика - космическая игра, с космическими боями в космосе. В тексте корабль не должен "плавать", так как корабли космические, а не морские. Сloud - это соответственно не облако, которое на земле, а очевидно объект в космосе, например туманность. Не добавлять данные от себы - если текст кажется незаконченным, обрывочным, либо начинается с середины - это правильно, так и должно быть. В тексте присутствует код java, либо .csv, его необходимо оставить без изменений и соответственно не добавлять новый код. Код в тексте имеет очевидный вид, в теле слова присутствует заглавная буква, спецсимвол, либо слова соединяет "_". То есть, очевидно, что "Tri_Tachyon" и "TriTachyon" - это код, а "Tri-Tachyon" и "Tri" - это текст требующий обработки. Так-же, если в тексте есть "\n", то этот текст надо оставить, то есть при тексте "Tri\nTachyon" - должен быть перевод "Три\nТахион".  При переводе необходимо сначала сверяться со списком терминологии, и если какое либо словосочетание не найдено - обязательно переводить его, исходя из контекста. Некторая механика игры: У корабля есть щиты (shields). Щиты могут быть подняты (raised / up) или опущены (lowered / down). Если в тексте есть "Fully charged", то в данном случае означает, что щит цели полностью развёрнут и удерживается на 100% Терминология: Фракции, сокращения и нестандартные звания: Tri-Tachyon - Три-Тахион TTS (Tri-Tachyon Spaceship) - КТТ Senior Operation Manager - Старший операционный менеджер Operation Manager - Операционный менеджер CEO - Гендир Patrol Director - Начальник патрульной службы Fleet Director - Начальник флота Base Director - Начальник базы Director of Special Acquisitions - Начальник по особым приобретениям Hegemony - Гегемония HSS (Hegemony Spaceship) - ККГ High Hegemon - Верховный Гегемон Patrol Commander - Командир патруля Fleet Commander - Командир флота Base Commander - Командир базы Military Governor - Военный губернатор Church of Galactic Redemption - Церковь Галактического Искупления Luddic Church - Церковь Лудда CGR (Church of Galactic Redemption) - КЦИ Deacon-Captain - Диакон-Капитан Curate-Commander - Кюре-Командир Bishop-Governor - Епископ-Губернатор Sub-presbyter Orbis - Суб-пресвитер Орбиса Knight-Commander - Рыцарь-Командир Portwatcher - Страж порта Purser - Казнодатель Luddic Path - Путь Лудда Blessed Walker - Благословенный Путник Supplicant - Служитель Hammer - Молот Shepherd-militant - Пастырь-воитель Shepherd-metropolitan - Пастырь-градоначальник Shepherd-militant - Пастырь-воитель Persean League - Лига Персея PLS (Persean League Spaceship) - КЛП Navarch - Наварх Prime Navarch - Верховный наварх Gens Parriarch - Патриарх рода Gens Patriarch - Патриарх рода Gens Matriarch - Матриарх рода Demi-Navarch - Полуварх Archon - Архонт Demarchon - Демархонт Sindrian Diktat - Синдрианский Диктат SDS (Sindrian Diktat Spaceship) - КСД Supreme Executor - Верховный пристав Leader of Executive Guard - Командир исполнительной гвардии Controller-General - Генеральный инспектор Pirates - Пираты Fleet Master - Мастер флота Warboss - Варбосс Station King - Король станции Portboss - Портбосс Boss - Босс Knights of Ludd - Рыцари Лудда LSS (Ludd Spaceship) - ККЛ Lion's Guard - Львиная Гвардия LGS (Lion's Guard Spaceship) - КЛГ The independents - Независимые ISS (independents Spaceship) - ККН AI Remnants - ИИ-Осколки Remnants - Осколки TTDS (Tri-Tachyon derelict ship) - ЗКТТ The sleeper - Cпящие Omega - Омега Классы кораблей: Borer - Бурильщик Terminator - Терминатор Merlon - Мерлон Gargoyle - Горгулья Ravelin - Равелин Talon - Коготь Dagger - Кинжал Wasp - Оса Xyphos - Ксифос Broadsword - Тесак Piranha - Пиранья Trident - Трезубец Longbow - Дальнобой Gladius - Гладиус Warthog - Бородавочник Thunder - Гром Claw - Клешня Khopesh - Хопеш Spark - Искра Lux - Светоч Flash - Вспышка Perdition - Гибель Cobra - Кобра Sarissa - Сарисса Wolf - Волк Hound - Гончая Vanguard - Авангард Hyperion  - Гиперион Mercury - Меркурий Hermes - Гермес Lasher - Хлыст Omen - Знак Tempest - Буря Brawler - Борец Vigilance - Бдительный Dram - Драм Afflictor - Мучитель Shade - Тень Ox - Бык Cerberus - Цербер Monitor - Монитор Shepherd - Погонщик Kite - Змей Mdskipper - Окраинник Mudskipper - Окраинник Centurion - Центурион Scarab - Скарабей Wayfarer - Странник Warden - Надзиратель Defender - Защитник Picket - Дозорный Sentry - Часовой Lumen - Люмен Glimmer - Проблеск Gremlin - Гремлин Hammerhead - Молотоглав Sunder  - Разделитель Condor - Кондор Enforcer - Страж Manticore - Мантикора Buffalo  - Буйвол Gemini - Близнецы Tarsus - Тарсус Valkyrie - Валькирия Phantom - Фантом Medusa - Медуза Mule - Мул Phaeton - Фаэтон Nebula - Небула Harbinger - Вестник Bastillon - Бастилион  Berserker - Берсерк Fulgent - Сияющий Scintilla - Искорка Drover - Пастух Shrike - Шрайк Falcon - Сокол Eagle  - Орёл Champion - Чемпион Venture - Авантюра Apogee - Апогей Dominator - Доминатор Eradicator - Уничтожитель Aurora - Аврора Doom - Рок Grendel - Грендель Heron - Цапля Gryphon - Грифон Starliner - Старлайнер Mora - Мора Colossus - Колосс Revenant - Призрак Rampart - Оплот Brilliant - Бриллиант Apex - Острие Fury - Фурия Anubis - Анубис Onslaught - Натиск Astral - Астрал Atlas - Атлас Conquest - Конквест Paragon - Парагон Odyssey  - Одиссей Prometheus - Прометей legion - Легион Guardian - Опекун Radiant - Луч Ziggurat - Зиккурат Invictus - Непобедимый Pegasus - Пегас Retribution - Возмездие Nova - Нова Оружие и модули: Stinger - Жало Light Autocannon - Лёгкая автопушка Light Needler - Лёгкий игломёт Railgun - Рельсотрон Thumper - Громила Flak Cannon - Зенитная пушка Arbalest - Самострел Mauler - Дробитель Hypervelocity Driver - Скоростной Щитолом The Hephaestus Assault Gun - Штурмовое орудие Гефест Devastator - Опустошитель Mjolnir - Мьёльнир Hellbore Cannon - Адская Пушка Storm Needler - Иглострел Буря Reaper torpedo - торпеда Жнец Atropos torpedo - торпеда Атропос Hammer - Молот Swarmer - Роевик Annihilator - Аннигилятор Salamander missile - Ракета Саламандра Breach - Таран Sabot-class missiles - Ракеты класса Сабот Gorgon - Горгона Gazer - Созерцатель Dragonfire - Огнедышащий Pilum-class missile - Ракета класса Пилум Jackhammer - Отбойник Hurricane Turrets - Турели Ураган Hydra - Гидра Squall - Шквал locust - Саранча PD Laser - Лазер ПРО Ion Cannon - Ионная пушка Burst PD Laser - Импульсный лазер ПРО The antimatter blaster - Бластер антиматерии Phase Lance - Фазовое копьё Graviton Beam - Гравитонный луч Pulse Laser - Импульсный лазер Mining Blaster - Добывающий бластер Heavy Burst Laser - Мощный лазерный луч Ion Pulser - Ионный Пульсатор Ion Beam - Ионный Луч High Intensity Laser (HIL) - Лазер высокой интенсивности (ЛВИ) Autopulse Laser - Автоимпульсный лазер Paladin - Паладин Tachyon Lance - Тахионное копьё Gigacannon - Гигапушка Minipulser - Минипульсатор Shock Repeater - Шоковый репитер Rift Lance - Копьё Разлома Rift Beam - Луч Разлома Cryoflamer - Криофакел Cryoblaster - Криобластер Disintegrator - Деззинтегратор Rift Cascade Emitter - Излучатель каскадного разлома Volatile Particle Driver - Ускоритель летучих частиц Reality Disruptor - Разрушитель реальности Swarm Launcher - Роевая пусковая установка Seeker Fragment - Самонаводящийся осколок Kinetic Fragments - Кинетические осколки Unstable Fragment - Нестабильный осколок Defabrication Swarm - Рой-дезинтегратор Voltaic Discharge - Электрический разряд Mass Driver - Ускоритель масс Neoferric Quadcoil - Неоферрическая квадрокатушка Voltaic Cannon - Электро пушка Voidblaster - Нулевой бластер Pseudoparticle Jet - Поток псевдочастиц Hungering Rift - Голодная Бездна Rift Lightning - Молния Разлома Abyssal Glare - Сияние бездны Inimical Emanation - Гибельное излучение Churning Locus - Центр возмущения Interdictor Beam - Луч-глушитель Flare Launcher - Сигнальная ракета Decoy Flare Launcher - Система ложных целей Mote Launcher - Пусковая система сгустков Orion Device - Устройство Орион Nova Burst - Вспышка Новы Thermal Pulse Cannon - Термоимпульсная пушка Heavy Adjudicator  - Жестокий судья Pusher Plate - Нажимная пластина "The Widowmaker" - Вдоводел Mark IX - Марк IX high resolution sensors - Высокоточные сенсоры sensor array - сенсорный комплекс/сенсорный массив Integrated Targeting Unit - Интегрированная система наведения pattern - закономерность patterns - закономерностей gravity well - гравитационный колодец Cryosleeper - Криокапсула Finds  - добыча Jorien Kanta (Pirate queen) - Джориен Канта (Королева пиратов) gate - врата Transplutonic Ore - Трансурановая руда transplutonics - трансурановая руда Bornanew - Борнанью planetkiller (PK) - уничтожитель планет (УП) Star Marshal - космический Маршал Прочее: modifiers - модификация Capital ships - Крупные корабли free-floating bomblets - свободно дрейфующий бомблет cluster of free-floating, high-explosive bomblets - рой свободно дрейфующих осколочно-фугасных боевых элементов Cyclone-class launcher - «Циклон» frontier - пограничный Station mining remnant - Заброшенная горнодобывающая станция Limbo wormhole cache - Гигантское хранилище Orbital habitat abandoned - Заброшенная орбитальная среда обитания Makeshift station - Временная станция Energy Lash - Энерго Плеть lash-activated - активируемую ударом hammerrack - Молотобой Sporeship - корабль-споронос Xanadu - Ксанаду forgevats - Нанокотёл sensor ghost - Неопознанный сенсорный контакт autolance- Автокопьё executor - Вершитель Temporal Shell - Хроноускоритель astropolis - орбитальный мегаполис operator - пилот warlord - командир Damper Field - Поле Гашения fanatical Pathers - Фанатики-Пути Pathers - Фанатики-Пути lobster - лобстер Coronal Tap - Энерго-сборщик  fortress shield - щит-крепость nav buoy - навигационный указатель Droneship - Дроновоз Spacer - космопилот hard flux level - уровень жёсткой нагрузки soft flux level - уровень мягкой нагрузки Scuttle - разобрать Directed Energy Missile (DEM) - Управляемая энерго-ракета (DEM) from cargo - из трюма Reinforced Bulkheads - Усиленные переборки Blast Doors - Усиленные гермодвери flux vents - рассеиватели нагрузки Flux Distributor - Распределитель нагрузки Phase Anchor - Фазовый якорь Adaptive Phase Coils - Адаптивная фаза Flux Coil Adjunct - Дополнительная катушка нагрузки Shrouded Dweller - Обитатель пустоты Scavengers - Cборщики Threat - Угроза The Domain Era - эпоха Домена Derelict ship - Заброшенный корабль drug - наркотик Free Port - Вольный порт Hazard pay - Плата за риск Marine - космодесантник No supplies - нет припасов burn level - уровень тяги Personnel - экипаж transponder - передатчик Missile Autoforge - Ракетная автоковка Chiral Figment - Хиральная иллюзия Phase Cloak - Фазовый Клон  Phase Skimmer - Фазовый Просекатель Phase Skimmer (Drone) - Фазовый Просекатель (Дрон) Degraded Phase Skimmer - Изношенный Фазовый Просекатель Displacer - Сместитель Convulsive Lunge - Конвульсивный бросок Tenebrous Expulsion - Мрачное извержение Salvage gantry - Комплекс для разборки Salvage - утилизация/разборка Remote survey - Удалённое исследование  Neutrino Detector - Нейтринный Детектор Generate Slipsurge - Создать поток Slipsurge - скользящий поток Intrinsic - встроенное coronal hypershunt - Подключение к гиперсети hypershunt - гиперсеть Mbaye-Gogol - Мбайе-Гоголь Ko Combine - Ко Комбайн Fabrique Orbitale - Фабрик Орбиталь Eridani-Utopia Terraforming - Эридани-Утопия Domain Restricted - Внутренняя разработка Домена Exodyne Biotech - Экзодин Биотек EMP - ЭМИ Omni shield - направляемый щит omni-directional shields - направляемые щиты omni-directional shield - направляемй щит Front shield - Лобовой щит Nanoforge  - Нанокузица core worlds - центральные системы outpost - аванпост custom sensor package - специальное анализирующее ПО  Transverse Jump - Трансферсеонный прыжок quartermaster - начальник снабжения Galatia Academy - Академия Galatia Culann Starforge - Звёздная кузница Culann 'treasonous' agent - агент «изменник» 'treasonous' officer - офицер «изменник» Merchant - Купец Commodities Agent - Агент по товарам Entrepreneur - Предприниматель Nanoforge Engineer - Инженер нанокузницы Shady Character - Тёмная личность Gangster - Гангстер Smuggler - Контрабандист Fence - Скупщик краденого Arms Dealer - Торговец оружием Crew Boss - Бригадир Mercenary Officer - Офицер-наёмник Chief Investigator - Главный следователь Provost - Провост Academician - Академик Security Chief - Начальник охраны Hermit - Отшельник Pensioner - Пенсионер Activist - Активист Scientist - Учёный Terrorist - Террорист Warlord - Командир Unknown - Неизвестный Curate - Викарий Synod Subcurate - Синодский подкурат Subcurate - Помощник викария Archcurate - Главный викарий Heretic - Еретик Curate Sacraria - Викарий святилища Excubitor Orbis - Орбитальный Страж Initiate - Посвящённый Novice - Послушник Pilgrim - Паломник gate hauler - буксир врат Wormhole Anchor - Якорь червоточины Wormhole Scanner - Сканер червоточин Militarized Subsystems - Военизированные подсистемы Converted Fighter Bay - Переоборудованный ангар ship graveyard - кладбище кораблей  recover - восстановить Sustained Burn - Постоянное ускорение Pond - Понд Wrestling - Вэстлинг Sedge - Сидж High explosive damage - Урон от фугасного взрыва Fragmentation damage - Осколочный урон Carrier - Авианосец Show Video Feed - показать трансляцию Video Feed - трансляция jump-point - прыжковая точка Accelerated Ammo Feeder - Ускоритель боекомплекта transfer command - перенести командование transfer command to - перенести командование на neutrino burst - нейтринный взрыв vessel - корабль datavault - хранилище данных Coureuse - Курус commsplate - коммуникационная панель benefactor - благодетель manifold - узел TriPad - ТриПад booth - кабинка holo experience - голо-запись Laicaille Habitat - Обитаемый комплекс Laicaille incapacitated - недееспособен fuel starships and feed crews with only lies - заправлять звездолеты и кормить экипаж только ложью forces of reaction - силы противодействия Ragnar Complex - Комплекс Ragnar concordat - договор Baird - Бэйрд datacore - блок данных 3 ethos mercy - 3 догмата милосердия commission holder - держатель контракта deployment - размещение deployed - размещён deployment points (DP) - очки размещения (ОР) combat deployment - боевое размещение ordnance points (OP) - очки оснащения (ОО) Combat readiness (CR) - Боеготовность (БГ) Оставить без перевода: LPC - LPC d-mod - d-mod s-mod - s-mod story point - story point Zagan - Zagan Geburah - Geburah Mazalot - Mazalot Tiferet - Tiferet Melikah - Melikah Hikmah - Hikmah Ilm - Ilm Yesod - Yesod Al Gebbar - Al Gebbar Kolasis - Kolasis Basanizo - Basanizo Epiphany - Epiphany Loutron - Loutron Arcadia - Arcadia Nomios - Nomios Syrinx - Syrinx Agreus - Agreus Askonia - Askonia Sindria - Sindria Salus - Salus Volturn - Volturn Nortia - Nortia Umbra - Umbra Aztlan - Aztlan Xolotl - Xolotl Chicomoztoc - Chicomoztoc Tlalocan - Tlalocan Coatl - Coatl Zorrah - Zorrah Toci - Toci Canaan - Canaan Khna - Khna Gilead - Gilead Og - Og Gad - Gad Asher - Asher Duzahk - Duzahk Aka Mainyu - Aka Mainyu Druj - Druj Eos Exodus - Eos Exodus Phaosphoros - Phaosphoros Lucifer - Lucifer Tartessus -Tartessus Baetis - Baetis Hesperus - Hesperus Ceyx - Ceyx Daedaleon - Daedaleon Galatia - Galatia Ancyra - Ancyra Pontus - Pontus Tetra - Tetra Hybrasil - Hybrasil Culann - Culann Elada - Elada Eochu Bres - Eochu Bres Ogma - Ogma Crom Cruach -Crom Cruach  Balar - Balar Ena - Ena Cethlenn - Cethlenn Birog - Birog Cian - Cian Donn - Donn Isirah - Isirah Surtr - Surtr Gilling - Gilling Fjalar - Fjalar Galar - Galar Corb - Corb Norvia - Norvia Nott - Nott Kumari Kandam - Kumari Kandam Kumari Aru - Kumari Aru Makal - Makal Kulantai - Kulantai Nanpan - Nanpan Chalcedon - Chalcedon Kaykos - Kaykos Crocodile - Crocodile Olinadu - Olinadu Kanni - Kanni Magec - Magec Maxios - Maxios Achaman - Achaman Tibicena - Tibicena Mayasura - Mayasura Kasyapa - Kasyapa Gelan - Gelan Mairaath - Mairaath Diti - Diti Arjun - Arjun Naraka - Naraka Yama - Yama Yami - Yami Nachiketa - Nachiketa Chitagupta - Chitagupta Penelope's Star - Penelope's Star Thrinakia - Thrinakia Ithaca - Ithaca Ogygia - Ogygia Calypso - Calypso Aeolus - Aeolus Dorus - Dorus Xuthus - Xuthus Telepylus - Telepylus Ismara - Ismara Samarra - Samarra Eridu - Eridu Eventide - Eventide Lumen - Lumen Typhon - Typhon Chimera - Chimera Ladon - Ladon Orthrus - Orthrus Sphinx - Sphinx Hekla - Hekla Thule - Thule Laki - Laki Kazeron - Kazeron Draugr - Draugr Eldfell - Eldfell Morn - Morn Skoll - Skoll Tia - Tia Ta'xet - Ta'xet Ogre - Ogre Tyle - Tyle Satanazes - Satanazes Cibola - Cibola Dorado - Dorado Zuni - Zuni Canaria - Canaria Madeira - Madeira Antillia - Antillia Kardara - Kardara Valhalla - Valhalla Glasnir - Glasnir Yggdrasil - Yggdrasil Nidhogg - Nidhogg Ratatosk - Ratatosk Raesvelg - Raesvelg Niflheim - Niflheim Skathi - Skathi Ragnar - Ragnar Westernesse - Westernesse Horn - Horn Athulf - Athulf Fikenhild - Fikenhild Suddene - Suddene Ailmar - Ailmar Rymenhild - Rymenhild Yma - Yma Huascar - Huascar Hanan Pacha - Hanan Pacha Killa - Killa Chupi Orco - Chupi Orco Viscacha - Viscacha Salamanca - Salamanca Warawara - Warawara Qaras - Qaras Corvus - Corvus Asharu - Asharu Jangala - Jangala Barad - Barad Garnir - Garnir Warion - Warion Derinkuyu - Derinkuyu Kapteyn - Kapteyn Groombridge - Groombridge Laicaille - Laicaille Volturnian - Volturnian Sentinel - Sentinel Beholder - Beholder Все названия, перечисленные в разделе «Оставить без перевода», должны использоваться в точности в той форме, в которой они указаны, без каких-либо изменений — включая склонение, транслитерацию, адаптацию по звучанию или грамматике. Это означает, что даже если русский синтаксис требует падежного окончания (например, «в Barad», «у Barad», «бомбардировка Barad»), оригинальное написание сохраняется без изменений. Примеры: «на Garnir» — не «на Баетисе» «в Tlalocan» — не «в Тлалокане» «атака на Chupi Orco» — не «атака на Чупи Орко» Это правило имеет абсолютный приоритет над всеми остальными, включая правила транслитерации и грамматики русского языка, но применяется исключительно для списка «Оставить без перевода».  
    • Прошу помощи с заменой шрифта в Poker Night at the Inventory, пытался разобраться по гайду но так ничего и не вышло, буду очень благодарен если кто поможет
    • Ну так уже же объявили что еще несколько серий покажут на Игромире, а в январе они выйдут на Кинопоиске уже вместе с оставшимися.  Если не набрехали конечно. 
    • Ты думаешь я так не пробовал?    В том то и дело, что нужный цифры таким способом не получаются.  Я по тому и недоумеваю с этой загадки, что правильны код не получается ни одним из способов, которые могли бы прийти в голову адекватным людям  У меня на 100 лок стоит.   А ты в курсе, что каждый раз запуская заново игру, у тебя автоматом включается dlss на производительность?  Чтобы применились выставленные тобою настройки, нужно просто зайти в “настройки”, но делать нужно каждый раз при запуске игры. https://drive.google.com/file/d/16cScggCFt5xw-5BRbvgdYrsXAWvZhKPt/view?usp=sharing Да, это я знаю.   У меня 33 выставлено.  
    • Посмотрел перевод, просто ужас. LibreTranslate плохо справляется. Очень много мусора, нужно либо очень хороший промпт писать, либо менять что-то. Я попробую собрать программу в .exe варианте. Не совсем понял assembling/disassembling dat файлов. Буду разбираться.
    • Вот первый попавшийся тест на реакцию. Если у тебя будет разница меньше 1 мс, то ты можешь ощутить разницу между 1000 фпс и 200 фпс визуально с момента появления (смены) кадра. Но, повторюсь, твой монитор показывает в играх каждый кадр по ~7 мс, а сменить статичную картинку успевает за 1 мс. То есть если ты сможешь среагировать до того, как монитор физически тебе отрисует этот кадр, то ты можешь ощущать неотрисовываемые карточкой кадры. Для упрощения задачи эксперимента можно в настройках монитора снизить показатель с 1 мс на значения повыше до 3 мс или ещё больше для полной точности, если монитор вообще поддерживает такой диапазон значений. То есть по сути смоделировав разницу в задержке, как если бы монитор вообще мог вывозить 1000 и 200 фпс вообще). Например, у моего монитора это значение 2 мс, моя реакция — ~230 мс (на 60 герцовом мониторе с простой мышкой на штатные базовые юсбшные 125 герц, то есть 2+16+8 мс аппаратного инпут лага, если я ничего не путаю и не забываю в расчёте), в идеале добивался ~180 мс реакции (но и то на несколько лет раньше с несколько другим оборудованием). То есть про себя могу сказать, что 4 мс разницы в данном плане лично я вообще не смогу ощутить никак (в т.ч. из-за того, что просто физически не успею кликнуть быстрее). У рекордсменов скорость реакции в значениях около 140 мс. Допускаю, что кто-то мб может среагировать и быстрее 100 мс честно без просто удачных тыков наугад. Ты физически не можешь определить кадры, которые рисует карточка сверх этого, т.к. те вообще не рисуются никак и нигде. Если только ты не научился предсказывать изменения кадров ещё до их появления. На графиках, если что, указывается время в мс с появления кадра в виде задержки обработки кадров, а не то время, сколько каждый кадр остаётся на экране. Фпс — это кадры в секунду. 200 фпс — это 200 кадров за одну секунду, то есть по 5 мс на каждый из кадров до смены кадра. По есть выходит при задержке в 1 мс от монитора на вывод кадр будет отображаться 5 мс (при условии, что тот отрисовывает эти фпс без ограничения технического) при 200 фпс+1мс от задержки монитора. Ну разве что задержка от монитора теоретически может быть нивелирована программным образом через предсказывание смены кадров от дров карточки при условии разницы между отображаемыми кадрами по времени и излишком фпс. Но если бы ты мог видеть такую разницу, то давно бы подумал об этом и уже купил бы монитор получше по данной характеристике (ну и по герцовке, что оказало бы значительно больший эффект), т.к. можешь себе это позволить. Стоит также понимать, что скорость реакции и скорость восприятия — это разные понятия. Т.к. зафиксировать в уме промелькнувшую на 3-4 мс картинку — это уже достаточно сложно, но случаи в исследованиях были зафиксированы. А среагировать на смену картинки за 4 мс — это практически невозможно. При этом также стоит понимать, что звуковой лаг куда меньше при восприятии человека (физиологически), так что на смену звука из качественных колонок ты скорее среагируешь раньше, но всё-таки ты раньше услышишь, чем успеешь среагировать, т.к. самый большой “инупут лаг” даёт сам организм человека, а не оборудование. На основании этого инпут лага человеческого фактора что-то невольно вспомнились вживляемые чипы от Маска. Видимо, он об этом подумал ещё раньше, а мб и не только он один, но лишь у него хватило денег на реализацию возможности реагировать силой мысли на где-то 50-100 мс раньше нормального. Хотя… меня терзают сомнения, что инпут лаг у тех чипов вообще способен нивелировать разницу в реакции на данный момент.
    • Не знаю, что там с первой частью, но вторая вылетает очень часто, особенно когда на экране синий текст отображается, вроде бы в меню тоже происходит вылет
    • у меня есть local model openai/gpt-oss-20b 11.2gb  вчера ей переводил. У нас сейчас в чем проблема как это обратно собрать в файл или что?
    • А на китайском такие же ограничения по байтам?
    • https://disk.yandex.ru/d/n4YtoCbqRbRt7w
      Вот первые 3К строк через  LibreTranslate 
      остальное переводится 
  • Изменения статусов

    • fevralski  »  SerGEAnt

      привет, есть что по хмурому?
      · 0 ответов
    • Netulogina  »  SerGEAnt

      Здравствуйте.
      Назрел такой вопрос. Существует ли архив/резервная копия переводов которые хранятся на данном сайте?
      · 5 ответов
    • Jimmi Hopkins  »  SerGEAnt

      Добавились версии для Linux и MAC OS
       
      · 0 ответов
    • Jimmi Hopkins  »  SerGEAnt

      Прошу обновить файл в архиве на https://disk.yandex.ru/d/suqA593ocxIJTQ
      или https://boosty.to/jimmihopkins/posts/d1df8532-9ac5-4a23-a87c-df2610efaf26
      Финальный релиз.
      Значительные изменения
      · 0 ответов
    • ElikaStudio

      https://www.youtube.com/watch?v=Nqcr83D8xhw
      https://www.youtube.com/watch?v=yRh3i7FKwOQ
      https://vk.com/video-48153754_456239346
      https://vk.com/video-48153754_456239345?list=ln-xnLZUtIyCEc6eshGvW
      https://ibb.co/p6BtMqWQ
      Перед тем, как ступить на борт корабля капитана Синей Бороды, нужно скачать озвучку!

      Life is Strange: Before the Storm:
      Эпизод 1: "Прoбуждeниe"
      Эпизод 2: "О дивный новый мир"
      Бонусный эпизод: "Прощание"
      Русская озвучка уже доступна для скачивания!

      ElikaStudio выражает огромную благодарность всем, кто принял участие в создании проекта! 
      Группе [club76249462|Mechanics VoiceOver R.G. MVO] , в частности их руководителю Дмитрию за неоценимую помощь в выпуске эпизода.

      Скачать для PC Classic (2018):
      GDrive: - https://drive.google.com/file/d/19CL_L80Mz0sIxcb54Ss64byAkeZmV22r/view?usp=sharing

      Скачать для PC Remastered (2022):
      GDrive: - https://drive.google.com/file/d/13q58Lpvw5_aYPYeZ7OGYZlAKOoS1gEbL/view?usp=sharing

      Скачать для Свитч(2022):
      GDrive: - https://drive.google.com/file/d/15e—T1LQiGQCYIHeNnj_C2qJA16Gvh1i/view?usp=sharing


      Баг репорт в обсуждении:
      https://vk.com/topic-48153754_52801766
      ___________________________________________
      Финансовый аппарат:
      www.donationalerts.com/r/elikastudio
      Пожертвовать средства на наши проекты:
      Кошелек ЮMoney 4100 1188 6818 3009
      карта Сбер банк 2202 2018 6334 1042
      карта Альфа банк 5559 4937 0209 8584
      Спасибо за вашу поддержку!
      #elikastudio #waylandteam #русскаяозвучка
      · 0 ответов
  • Лучшие авторы


Zone of Games © 2003–2025 | Реклама на сайте.

×