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

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

5 минут назад, adl сказал:

Ничего менять не надо. Была новость- утекли только номера телефонов, без какой-либо привязки к почте\логину. Не наводите панику.

 

Утёкшие данные не позволяют определить аккаунт, пароль, платёжную информацию и другие личные данные пользователей Steam по номеру телефона

https://store.steampowered.com/news/app/593110/view/533224478739530145

Человеку написавшему в поддержку(с его слов),посоветовали сменить пароли,и сказали что  возможно была попытка взлома.

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


Ссылка на сообщение
1 час назад, edifiei сказал:

Приветствую,офтоп,

Вы унас спец по макросам в стим,не ли макроса который позволит убрать все игры из блеклиста?)

  1. Заходим на страницу: https://store.steampowered.com/account/notinterested/
  2. Устанавливаем Tamper Monkey (если ещё нет). 
  3. Ставим скрипт:
Скрытый текст

// ==UserScript==
// @name         SIGA
// @namespace    http://tampermonkey.net/
// @version      2.1
// @description  Постепенное удаление всех игр из списка "Не интересно" в Steam с возможностью паузы и отслеживанием прогресса.
// @author       0wn3df1x
// @match        https://store.steampowered.com/account/notinterested*
// @icon         https://store.steampowered.com/favicon.ico
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @connect      store.steampowered.com
// ==/UserScript==

(function() {
    'use strict';

    const $ = window.jQuery;

    let state = {
        allIgnoredApps: [],
        removedInSessionAppIds: [],
        currentIndex: 0,
        totalToRemove: 0,
        isPaused: false,
        isCleaning: false,
        sessionID: null,
        removeInterval: 3500,
        currentAppRetries: 0,
        uiContainer: null,
        mainActionButton: null,
        getRemovedButton: null,
        progressBarFill: null,
        progressTextElement: null,
        etaTextElement: null,
        statusMessageElement: null,
        copyFeedbackElement: null
    };

    const RATE_LIMIT_WAIT_MS = 3 * 60 * 1000;
    const MAX_APP_RETRIES = 3;

    let cssStyles = `
        #steamIgnoredCleanerUI {
            background: #151f2c;
            padding: 20px;
            margin: 25px 0;
            border-radius: 5px;
            color: #c6d4df;
            border: 1px solid #2a3f5a;
            box-shadow: 0 0 15px rgba(0,0,0,0.3);
            font-family: "Motiva Sans", Arial, Helvetica, sans-serif;
        }
        .cleaner-header h2 {
            color: #67c1f5;
            margin-top: 0;
            margin-bottom: 15px;
            font-weight: 500;
            border-bottom: 1px solid #2a3f5a;
            padding-bottom: 10px;
        }
        .cleaner-main-layout {
            display: flex;
            gap: 20px;
        }
        .cleaner-controls {
            flex-grow: 1;
        }
        .cleaner-side-panel {
            flex-basis: 200px;
            flex-shrink: 0;
        }
        .steam-cleaner-button {
            background: linear-gradient(to bottom, #799905 5%, #536904 95%);
            border: 1px solid #1b2838;
            padding: 8px 15px;
            color: #fff;
            cursor: pointer;
            border-radius: 3px;
            margin-bottom: 15px;
            font-size: 14px;
            transition: background 0.2s ease;
        }
        .steam-cleaner-button:hover {
            background: linear-gradient(to bottom, #8ab807 5%, #647d05 95%);
        }
        .steam-cleaner-button:disabled {
            opacity: 0.5;
            cursor: not-allowed;
        }
        .steam-cleaner-button.secondary {
            background: linear-gradient(to bottom, #4b6077 5%, #3a4b5d 95%);
        }
        .steam-cleaner-button.secondary:hover {
            background: linear-gradient(to bottom, #5c738e 5%, #45586b 95%);
        }
        .progress-section {
            margin-top: 15px;
        }
        .progress-bar-container {
            width: 100%;
            background: #101822;
            height: 22px;
            border-radius: 3px;
            overflow: hidden;
            border: 1px solid #2a3f5a;
        }
        .progress-bar-fill {
            height: 100%;
            background: #67c1f5;
            width: 0%;
            transition: width 0.3s ease-out;
            text-align: center;
            line-height: 22px;
            color: #fff;
            font-size: 12px;
        }
        .progress-info, .status-output-message {
            color: #a8b2ba;
            margin: 8px 0;
            font-size: 13px;
        }
        .status-output-message.error {
            color: #ff6b6b;
            font-weight: bold;
        }
        .status-output-message.success {
            color: #799905;
            font-weight: bold;
        }
        .copy-feedback-message {
            display: block;
            font-size: 12px;
            color: #67c1f5;
            margin-top: 5px;
            min-height: 15px;
        }
        .initial-info {
            color: #a8b2ba;
            margin-bottom: 15px;
            font-size: 14px;
        }
    `;
    GM_addStyle(cssStyles.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, ''));


    function createUI() {
        const container = $(`
            <div id="steamIgnoredCleanerUI">
                <div class="cleaner-header">
                    <h2>Steam Очиститель Списка "Не интересно"</h2>
                </div>
                <div class="cleaner-main-layout">
                    <div class="cleaner-controls">
                        <div class="initial-info">
                            Этот скрипт поможет вам удалить <b>ВСЕ</b> игры из вашего списка "Не интересно" в Steam.
                            Процесс происходит постепенно, чтобы избежать блокировок со стороны Steam.
                        </div>
                        <button id="cleanerMainActionButton" class="steam-cleaner-button">Начать очистку</button>
                        <div class="progress-section">
                            <div class="progress-bar-container">
                                <div id="cleanerProgressBarFill" class="progress-bar-fill">0%</div>
                            </div>
                            <div id="cleanerProgressText" class="progress-info">Ожидание начала...</div>
                            <div id="cleanerEtaText" class="progress-info">ETA: N/A</div>
                        </div>
                        <div id="cleanerStatusMessage" class="status-output-message"></div>
                    </div>
                    <div class="cleaner-side-panel">
                        <button id="cleanerGetRemovedButton" class="steam-cleaner-button secondary" disabled>
                            Копировать список удаленных
                        </button>
                        <span id="cleanerCopyFeedback" class="copy-feedback-message"></span>
                    </div>
                </div>
            </div>
        `).insertAfter('.pageheader');

        state.uiContainer = container;
        state.mainActionButton = $('#cleanerMainActionButton');
        state.getRemovedButton = $('#cleanerGetRemovedButton');
        state.progressBarFill = $('#cleanerProgressBarFill');
        state.progressTextElement = $('#cleanerProgressText');
        state.etaTextElement = $('#cleanerEtaText');
        state.statusMessageElement = $('#cleanerStatusMessage');
        state.copyFeedbackElement = $('#cleanerCopyFeedback');

        state.mainActionButton.click(handleMainAction);
        state.getRemovedButton.click(copyRemovedListToClipboard);
    }

    function updateStatus(message, type = 'info') {
        state.statusMessageElement.text(message)
            .removeClass('error success')
            .addClass(type === 'error' ? 'error' : (type === 'success' ? 'success' : ''));
        console.log((type === 'error' ? 'X ' : (type === 'success' ? 'V ' : 'i ')) + message);
    }

    function updateProgressDisplay() {
        if (state.totalToRemove === 0 && !state.isCleaning) {
            state.progressBarFill.css('width', '0%').text('0%');
            state.progressTextElement.text('Ожидание начала...');
            state.etaTextElement.text('ETA: N/A');
            return;
        }
         if (state.totalToRemove === 0 && state.isCleaning) {
            state.progressBarFill.css('width', '0%').text('0%');
            state.progressTextElement.text('Нет игр для удаления.');
            state.etaTextElement.text('ETA: N/A');
            return;
        }


        const processedCount = state.currentIndex;
        const percent = state.totalToRemove > 0 ? (processedCount / state.totalToRemove) * 100 : 0;
        state.progressBarFill.css('width', `${percent.toFixed(1)}%`).text(`${percent.toFixed(0)}%`);

        if (state.isCleaning && !state.isPaused && processedCount < state.totalToRemove) {
            state.progressTextElement.text(`Обработано: ${processedCount} из ${state.totalToRemove}`);
            const etaSeconds = (state.totalToRemove - processedCount) * (state.removeInterval / 1000);
            state.etaTextElement.text(`ETA: ${formatTime(etaSeconds)}`);
        } else if (processedCount === state.totalToRemove && state.totalToRemove > 0) {
             state.progressTextElement.text(`Завершено: ${processedCount} из ${state.totalToRemove}`);
             state.etaTextElement.text('Готово!');
        } else if (state.isPaused) {
            state.progressTextElement.text(`Пауза. Обработано: ${processedCount} из ${state.totalToRemove}`);
             const etaSecondsPaused = (state.totalToRemove - processedCount) * (state.removeInterval / 1000);
            state.etaTextElement.text(`ETA (на паузе): ${formatTime(etaSecondsPaused)}`);
        }
    }

    function formatTime(totalSeconds) {
        if (isNaN(totalSeconds) || totalSeconds < 0) return 'N/A';
        const hours = Math.floor(totalSeconds / 3600);
        const minutes = Math.floor((totalSeconds % 3600) / 60);
        const seconds = Math.floor(totalSeconds % 60);
        let timeString = '';
        if (hours > 0) timeString += `${hours `;
        if (minutes > 0 || hours > 0) timeString += `${minutes `;
        timeString += `${seconds}с`;
        return timeString.trim() || '0с';
    }

    async function fetchIgnoredApps() {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: 'GET',
                url: 'https://store.steampowered.com/dynamicstore/userdata/',
                onload: function(response) {
                    try {
                        const data = JSON.parse(response.responseText);
                        if (data.rgIgnoredApps) {
                            resolve(Object.keys(data.rgIgnoredApps).map(Number));
                        } else {
                            resolve([]);
                        }
                    } catch (e) {
                        console.error("X Ошибка парсинга userdata:", e);
                        reject("Не удалось разобрать данные пользователя.");
                    }
                },
                onerror: function(err) {
                    console.error("X Ошибка загрузки userdata:", err);
                    reject("Ошибка сети при получении списка игнорируемых игр.");
                }
            });
        });
    }

    function removeNextApp() {
        if (state.isPaused || !state.isCleaning) {
            if (state.isPaused) updateStatus('Процесс на паузе.', 'info');
            return;
        }

        if (state.currentIndex >= state.totalToRemove) {
            updateStatus('* Очистка завершена! Все игры из списка обработаны.', 'success');
            state.mainActionButton.text('Начать очистку').prop('disabled', false);
            state.getRemovedButton.prop('disabled', state.removedInSessionAppIds.length === 0);
            state.isCleaning = false;
            updateProgressDisplay();
            return;
        }

        const appId = state.allIgnoredApps[state.currentIndex];
        updateStatus(`Удаление appID: ${appId} (${state.currentIndex + 1} из ${state.totalToRemove})...`);
        updateProgressDisplay();

        $J.post('https://store.steampowered.com/recommended/ignorerecommendation/', {
            sessionid: state.sessionID,
            appid: appId,
            snr: '1_account_notinterested_',
            remove: 1
        })
        .done(function(response) {
            state.removedInSessionAppIds.push(appId);
            state.getRemovedButton.prop('disabled', false);

            $J('#ignored_app_' + appId).fadeOut(function() { $(this).remove(); });
            if (typeof GDynamicStore !== 'undefined' && GDynamicStore.InvalidateCache) {
                GDynamicStore.InvalidateCache();
            }

            state.currentIndex++;
            state.currentAppRetries = 0;
            setTimeout(removeNextApp, state.removeInterval);
        })
        .fail(function(jqXHR, textStatus, errorThrown) {
            if (jqXHR.status === 429) {
                updateStatus(`! Ошибка 429 (Too Many Requests) для appID: ${appId}. Ожидание ${formatTime(RATE_LIMIT_WAIT_MS / 1000)}...`, 'error');
                setTimeout(removeNextApp, RATE_LIMIT_WAIT_MS);
            } else {
                state.currentAppRetries++;
                if (state.currentAppRetries < MAX_APP_RETRIES) {
                    const retryDelay = state.removeInterval * (state.currentAppRetries + 1);
                    updateStatus(`X Ошибка удаления ${appId} (попытка ${state.currentAppRetries}/${MAX_APP_RETRIES}): ${jqXHR.statusText || errorThrown}. Повтор через ${formatTime(retryDelay/1000)}.`, 'error');
                    setTimeout(removeNextApp, retryDelay);
                } else {
                    updateStatus(`X Пропуск appID: ${appId} после ${MAX_APP_RETRIES} неудачных попыток. Ошибка: ${jqXHR.statusText || errorThrown}`, 'error');
                    state.currentIndex++;
                    state.currentAppRetries = 0;
                    setTimeout(removeNextApp, state.removeInterval);
                }
            }
        });
    }

    async function handleMainAction() {
        if (state.isCleaning && !state.isPaused) {
            state.isPaused = true;
            state.mainActionButton.text('Продолжить очистку');
            updateStatus('Очистка приостановлена.', 'info');
            updateProgressDisplay();
        } else if (state.isCleaning && state.isPaused) {
            state.isPaused = false;
            state.mainActionButton.text('Пауза');
            updateStatus('Возобновление очистки...', 'info');
            removeNextApp();
        } else {
            state.mainActionButton.prop('disabled', true).text('Загрузка списка...');
            updateStatus('Получение списка игнорируемых игр...', 'info');
            state.isCleaning = true;
            state.isPaused = false;

            try {
                state.allIgnoredApps = await fetchIgnoredApps();
                state.totalToRemove = state.allIgnoredApps.length;
                state.currentIndex = 0;
                state.removedInSessionAppIds = [];
                state.currentAppRetries = 0;

                if (state.totalToRemove === 0) {
                    updateStatus('V В вашем списке "Не интересно" нет игр для удаления.', 'success');
                    state.mainActionButton.prop('disabled', false).text('Начать очистку');
                    state.isCleaning = false;
                    updateProgressDisplay();
                    return;
                }

                updateStatus(`Найдено ${state.totalToRemove} игр. Начинаем очистку...`, 'info');
                state.mainActionButton.prop('disabled', false).text('Пауза');
                state.getRemovedButton.prop('disabled', true);
                state.copyFeedbackElement.text('');
                updateProgressDisplay();
                removeNextApp();

            } catch (errorMsg) {
                updateStatus(`X Ошибка: ${errorMsg}`, 'error');
                state.mainActionButton.prop('disabled', false).text('Начать очистку');
                state.isCleaning = false;
            }
        }
    }

    function copyRemovedListToClipboard() {
        if (state.removedInSessionAppIds.length === 0) {
            state.copyFeedbackElement.text('Список удаленных пуст.');
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
            return;
        }

        const listString = state.removedInSessionAppIds.join('\n');
        navigator.clipboard.writeText(listString).then(() => {
            state.copyFeedbackElement.text(`Скопировано ${state.removedInSessionAppIds.length} AppID!`);
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
        }).catch(err => {
            state.copyFeedbackElement.text('X Ошибка копирования.');
            console.error('X Ошибка копирования в буфер обмена:', err);
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
        });
    }

    $(function() {
        if (typeof g_sessionID === 'undefined' || g_sessionID === null) {
            const pageContent = $('#account_notinterested_area .pagecontent');
            if (pageContent.length) {
                 pageContent.first().prepend('<div style="color: red; font-weight: bold; padding: 10px; background: #330000; border: 1px solid red; margin-bottom:15px;">Steam Session ID не найден. Убедитесь, что вы авторизованы в Steam. Скрипт не будет работать.</div>');
            } else {
                alert('Steam Session ID не найден. Убедитесь, что вы авторизованы в Steam. Скрипт не будет работать.');
            }
            console.error("X Steam Ignored Apps Cleaner: g_sessionID is not available.");
            return;
        }
        state.sessionID = g_sessionID;

        if (typeof $J === 'undefined') {
             window.$J = $;
             console.warn("i Steam Ignored Apps Cleaner: $J is not defined by Steam, using Tampermonkey's jQuery.");
        }

        createUI();
        updateStatus('Скрипт готов к работе. Нажмите "Начать очистку".', 'info');
        updateProgressDisplay();
    });

})();

 


Чем больше игр скрыто — тем дольше будет удалять. Как видно с моего скрина, для удаления моих 52916 скрытых понадобится ждать 51 час. Можно поставить на удаление и держать вкладку открытой пару часов. Затем продолжить в другой день. 

hUKjDyg.png

  • Спасибо (+1) 1

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


Ссылка на сообщение
2 минуты назад, 0wn3df1x сказал:
  1. Заходим на страницу: https://store.steampowered.com/account/notinterested/
  2. Устанавливаем Tamper Monkey (если ещё нет). 
  3. Ставим скрипт:
  Скрипт (Показать содержимое)


// ==UserScript==
// @name         SIGA
// @namespace    http://tampermonkey.net/
// @version      2.1
// @description  Постепенное удаление всех игр из списка "Не интересно" в Steam с возможностью паузы и отслеживанием прогресса.
// @author       0wn3df1x
// @match        https://store.steampowered.com/account/notinterested*
// @icon         https://store.steampowered.com/favicon.ico
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @connect      store.steampowered.com
// ==/UserScript==

(function() {
    'use strict';

    const $ = window.jQuery;

    let state = {
        allIgnoredApps: [],
        removedInSessionAppIds: [],
        currentIndex: 0,
        totalToRemove: 0,
        isPaused: false,
        isCleaning: false,
        sessionID: null,
        removeInterval: 3500,
        currentAppRetries: 0,
        uiContainer: null,
        mainActionButton: null,
        getRemovedButton: null,
        progressBarFill: null,
        progressTextElement: null,
        etaTextElement: null,
        statusMessageElement: null,
        copyFeedbackElement: null
    };

    const RATE_LIMIT_WAIT_MS = 3 * 60 * 1000;
    const MAX_APP_RETRIES = 3;

    let cssStyles = `
        #steamIgnoredCleanerUI {
            background: #151f2c;
            padding: 20px;
            margin: 25px 0;
            border-radius: 5px;
            color: #c6d4df;
            border: 1px solid #2a3f5a;
            box-shadow: 0 0 15px rgba(0,0,0,0.3);
            font-family: "Motiva Sans", Arial, Helvetica, sans-serif;
        }
        .cleaner-header h2 {
            color: #67c1f5;
            margin-top: 0;
            margin-bottom: 15px;
            font-weight: 500;
            border-bottom: 1px solid #2a3f5a;
            padding-bottom: 10px;
        }
        .cleaner-main-layout {
            display: flex;
            gap: 20px;
        }
        .cleaner-controls {
            flex-grow: 1;
        }
        .cleaner-side-panel {
            flex-basis: 200px;
            flex-shrink: 0;
        }
        .steam-cleaner-button {
            background: linear-gradient(to bottom, #799905 5%, #536904 95%);
            border: 1px solid #1b2838;
            padding: 8px 15px;
            color: #fff;
            cursor: pointer;
            border-radius: 3px;
            margin-bottom: 15px;
            font-size: 14px;
            transition: background 0.2s ease;
        }
        .steam-cleaner-button:hover {
            background: linear-gradient(to bottom, #8ab807 5%, #647d05 95%);
        }
        .steam-cleaner-button:disabled {
            opacity: 0.5;
            cursor: not-allowed;
        }
        .steam-cleaner-button.secondary {
            background: linear-gradient(to bottom, #4b6077 5%, #3a4b5d 95%);
        }
        .steam-cleaner-button.secondary:hover {
            background: linear-gradient(to bottom, #5c738e 5%, #45586b 95%);
        }
        .progress-section {
            margin-top: 15px;
        }
        .progress-bar-container {
            width: 100%;
            background: #101822;
            height: 22px;
            border-radius: 3px;
            overflow: hidden;
            border: 1px solid #2a3f5a;
        }
        .progress-bar-fill {
            height: 100%;
            background: #67c1f5;
            width: 0%;
            transition: width 0.3s ease-out;
            text-align: center;
            line-height: 22px;
            color: #fff;
            font-size: 12px;
        }
        .progress-info, .status-output-message {
            color: #a8b2ba;
            margin: 8px 0;
            font-size: 13px;
        }
        .status-output-message.error {
            color: #ff6b6b;
            font-weight: bold;
        }
        .status-output-message.success {
            color: #799905;
            font-weight: bold;
        }
        .copy-feedback-message {
            display: block;
            font-size: 12px;
            color: #67c1f5;
            margin-top: 5px;
            min-height: 15px;
        }
        .initial-info {
            color: #a8b2ba;
            margin-bottom: 15px;
            font-size: 14px;
        }
    `;
    GM_addStyle(cssStyles.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, ''));


    function createUI() {
        const container = $(`
            <div id="steamIgnoredCleanerUI">
                <div class="cleaner-header">
                    <h2>Steam Очиститель Списка "Не интересно"</h2>
                </div>
                <div class="cleaner-main-layout">
                    <div class="cleaner-controls">
                        <div class="initial-info">
                            Этот скрипт поможет вам удалить <b>ВСЕ</b> игры из вашего списка "Не интересно" в Steam.
                            Процесс происходит постепенно, чтобы избежать блокировок со стороны Steam.
                        </div>
                        <button id="cleanerMainActionButton" class="steam-cleaner-button">Начать очистку</button>
                        <div class="progress-section">
                            <div class="progress-bar-container">
                                <div id="cleanerProgressBarFill" class="progress-bar-fill">0%</div>
                            </div>
                            <div id="cleanerProgressText" class="progress-info">Ожидание начала...</div>
                            <div id="cleanerEtaText" class="progress-info">ETA: N/A</div>
                        </div>
                        <div id="cleanerStatusMessage" class="status-output-message"></div>
                    </div>
                    <div class="cleaner-side-panel">
                        <button id="cleanerGetRemovedButton" class="steam-cleaner-button secondary" disabled>
                            Копировать список удаленных
                        </button>
                        <span id="cleanerCopyFeedback" class="copy-feedback-message"></span>
                    </div>
                </div>
            </div>
        `).insertAfter('.pageheader');

        state.uiContainer = container;
        state.mainActionButton = $('#cleanerMainActionButton');
        state.getRemovedButton = $('#cleanerGetRemovedButton');
        state.progressBarFill = $('#cleanerProgressBarFill');
        state.progressTextElement = $('#cleanerProgressText');
        state.etaTextElement = $('#cleanerEtaText');
        state.statusMessageElement = $('#cleanerStatusMessage');
        state.copyFeedbackElement = $('#cleanerCopyFeedback');

        state.mainActionButton.click(handleMainAction);
        state.getRemovedButton.click(copyRemovedListToClipboard);
    }

    function updateStatus(message, type = 'info') {
        state.statusMessageElement.text(message)
            .removeClass('error success')
            .addClass(type === 'error' ? 'error' : (type === 'success' ? 'success' : ''));
        console.log((type === 'error' ? 'X ' : (type === 'success' ? 'V ' : 'i ')) + message);
    }

    function updateProgressDisplay() {
        if (state.totalToRemove === 0 && !state.isCleaning) {
            state.progressBarFill.css('width', '0%').text('0%');
            state.progressTextElement.text('Ожидание начала...');
            state.etaTextElement.text('ETA: N/A');
            return;
        }
         if (state.totalToRemove === 0 && state.isCleaning) {
            state.progressBarFill.css('width', '0%').text('0%');
            state.progressTextElement.text('Нет игр для удаления.');
            state.etaTextElement.text('ETA: N/A');
            return;
        }


        const processedCount = state.currentIndex;
        const percent = state.totalToRemove > 0 ? (processedCount / state.totalToRemove) * 100 : 0;
        state.progressBarFill.css('width', `${percent.toFixed(1)}%`).text(`${percent.toFixed(0)}%`);

        if (state.isCleaning && !state.isPaused && processedCount < state.totalToRemove) {
            state.progressTextElement.text(`Обработано: ${processedCount} из ${state.totalToRemove}`);
            const etaSeconds = (state.totalToRemove - processedCount) * (state.removeInterval / 1000);
            state.etaTextElement.text(`ETA: ${formatTime(etaSeconds)}`);
        } else if (processedCount === state.totalToRemove && state.totalToRemove > 0) {
             state.progressTextElement.text(`Завершено: ${processedCount} из ${state.totalToRemove}`);
             state.etaTextElement.text('Готово!');
        } else if (state.isPaused) {
            state.progressTextElement.text(`Пауза. Обработано: ${processedCount} из ${state.totalToRemove}`);
             const etaSecondsPaused = (state.totalToRemove - processedCount) * (state.removeInterval / 1000);
            state.etaTextElement.text(`ETA (на паузе): ${formatTime(etaSecondsPaused)}`);
        }
    }

    function formatTime(totalSeconds) {
        if (isNaN(totalSeconds) || totalSeconds < 0) return 'N/A';
        const hours = Math.floor(totalSeconds / 3600);
        const minutes = Math.floor((totalSeconds % 3600) / 60);
        const seconds = Math.floor(totalSeconds % 60);
        let timeString = '';
        if (hours > 0) timeString += `${hours `;
        if (minutes > 0 || hours > 0) timeString += `${minutes `;
        timeString += `${seconds}с`;
        return timeString.trim() || '0с';
    }

    async function fetchIgnoredApps() {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: 'GET',
                url: 'https://store.steampowered.com/dynamicstore/userdata/',
                onload: function(response) {
                    try {
                        const data = JSON.parse(response.responseText);
                        if (data.rgIgnoredApps) {
                            resolve(Object.keys(data.rgIgnoredApps).map(Number));
                        } else {
                            resolve([]);
                        }
                    } catch (e) {
                        console.error("X Ошибка парсинга userdata:", e);
                        reject("Не удалось разобрать данные пользователя.");
                    }
                },
                onerror: function(err) {
                    console.error("X Ошибка загрузки userdata:", err);
                    reject("Ошибка сети при получении списка игнорируемых игр.");
                }
            });
        });
    }

    function removeNextApp() {
        if (state.isPaused || !state.isCleaning) {
            if (state.isPaused) updateStatus('Процесс на паузе.', 'info');
            return;
        }

        if (state.currentIndex >= state.totalToRemove) {
            updateStatus('* Очистка завершена! Все игры из списка обработаны.', 'success');
            state.mainActionButton.text('Начать очистку').prop('disabled', false);
            state.getRemovedButton.prop('disabled', state.removedInSessionAppIds.length === 0);
            state.isCleaning = false;
            updateProgressDisplay();
            return;
        }

        const appId = state.allIgnoredApps[state.currentIndex];
        updateStatus(`Удаление appID: ${appId} (${state.currentIndex + 1} из ${state.totalToRemove})...`);
        updateProgressDisplay();

        $J.post('https://store.steampowered.com/recommended/ignorerecommendation/', {
            sessionid: state.sessionID,
            appid: appId,
            snr: '1_account_notinterested_',
            remove: 1
        })
        .done(function(response) {
            state.removedInSessionAppIds.push(appId);
            state.getRemovedButton.prop('disabled', false);

            $J('#ignored_app_' + appId).fadeOut(function() { $(this).remove(); });
            if (typeof GDynamicStore !== 'undefined' && GDynamicStore.InvalidateCache) {
                GDynamicStore.InvalidateCache();
            }

            state.currentIndex++;
            state.currentAppRetries = 0;
            setTimeout(removeNextApp, state.removeInterval);
        })
        .fail(function(jqXHR, textStatus, errorThrown) {
            if (jqXHR.status === 429) {
                updateStatus(`! Ошибка 429 (Too Many Requests) для appID: ${appId}. Ожидание ${formatTime(RATE_LIMIT_WAIT_MS / 1000)}...`, 'error');
                setTimeout(removeNextApp, RATE_LIMIT_WAIT_MS);
            } else {
                state.currentAppRetries++;
                if (state.currentAppRetries < MAX_APP_RETRIES) {
                    const retryDelay = state.removeInterval * (state.currentAppRetries + 1);
                    updateStatus(`X Ошибка удаления ${appId} (попытка ${state.currentAppRetries}/${MAX_APP_RETRIES}): ${jqXHR.statusText || errorThrown}. Повтор через ${formatTime(retryDelay/1000)}.`, 'error');
                    setTimeout(removeNextApp, retryDelay);
                } else {
                    updateStatus(`X Пропуск appID: ${appId} после ${MAX_APP_RETRIES} неудачных попыток. Ошибка: ${jqXHR.statusText || errorThrown}`, 'error');
                    state.currentIndex++;
                    state.currentAppRetries = 0;
                    setTimeout(removeNextApp, state.removeInterval);
                }
            }
        });
    }

    async function handleMainAction() {
        if (state.isCleaning && !state.isPaused) {
            state.isPaused = true;
            state.mainActionButton.text('Продолжить очистку');
            updateStatus('Очистка приостановлена.', 'info');
            updateProgressDisplay();
        } else if (state.isCleaning && state.isPaused) {
            state.isPaused = false;
            state.mainActionButton.text('Пауза');
            updateStatus('Возобновление очистки...', 'info');
            removeNextApp();
        } else {
            state.mainActionButton.prop('disabled', true).text('Загрузка списка...');
            updateStatus('Получение списка игнорируемых игр...', 'info');
            state.isCleaning = true;
            state.isPaused = false;

            try {
                state.allIgnoredApps = await fetchIgnoredApps();
                state.totalToRemove = state.allIgnoredApps.length;
                state.currentIndex = 0;
                state.removedInSessionAppIds = [];
                state.currentAppRetries = 0;

                if (state.totalToRemove === 0) {
                    updateStatus('V В вашем списке "Не интересно" нет игр для удаления.', 'success');
                    state.mainActionButton.prop('disabled', false).text('Начать очистку');
                    state.isCleaning = false;
                    updateProgressDisplay();
                    return;
                }

                updateStatus(`Найдено ${state.totalToRemove} игр. Начинаем очистку...`, 'info');
                state.mainActionButton.prop('disabled', false).text('Пауза');
                state.getRemovedButton.prop('disabled', true);
                state.copyFeedbackElement.text('');
                updateProgressDisplay();
                removeNextApp();

            } catch (errorMsg) {
                updateStatus(`X Ошибка: ${errorMsg}`, 'error');
                state.mainActionButton.prop('disabled', false).text('Начать очистку');
                state.isCleaning = false;
            }
        }
    }

    function copyRemovedListToClipboard() {
        if (state.removedInSessionAppIds.length === 0) {
            state.copyFeedbackElement.text('Список удаленных пуст.');
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
            return;
        }

        const listString = state.removedInSessionAppIds.join('\n');
        navigator.clipboard.writeText(listString).then(() => {
            state.copyFeedbackElement.text(`Скопировано ${state.removedInSessionAppIds.length} AppID!`);
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
        }).catch(err => {
            state.copyFeedbackElement.text('X Ошибка копирования.');
            console.error('X Ошибка копирования в буфер обмена:', err);
            setTimeout(() => state.copyFeedbackElement.text(''), 3000);
        });
    }

    $(function() {
        if (typeof g_sessionID === 'undefined' || g_sessionID === null) {
            const pageContent = $('#account_notinterested_area .pagecontent');
            if (pageContent.length) {
                 pageContent.first().prepend('<div style="color: red; font-weight: bold; padding: 10px; background: #330000; border: 1px solid red; margin-bottom:15px;">Steam Session ID не найден. Убедитесь, что вы авторизованы в Steam. Скрипт не будет работать.</div>');
            } else {
                alert('Steam Session ID не найден. Убедитесь, что вы авторизованы в Steam. Скрипт не будет работать.');
            }
            console.error("X Steam Ignored Apps Cleaner: g_sessionID is not available.");
            return;
        }
        state.sessionID = g_sessionID;

        if (typeof $J === 'undefined') {
             window.$J = $;
             console.warn("i Steam Ignored Apps Cleaner: $J is not defined by Steam, using Tampermonkey's jQuery.");
        }

        createUI();
        updateStatus('Скрипт готов к работе. Нажмите "Начать очистку".', 'info');
        updateProgressDisplay();
    });

})();

 


Чем больше игр скрыто — тем дольше будет удалять. Как видно с моего скрина, для удаления моих 52916 скрытых понадобится ждать 51 час. Можно поставить на удаление и держать вкладку открытой пару часов. Затем продолжить в другой день. 

hUKjDyg.png

Спасибо,а то ручками очень долго)

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


Ссылка на сообщение
12 минут назад, 0wn3df1x сказал:
  1. . Как видно с моего скрина, для удаления моих 52916 скрытых понадобится ждать 51 час.

     

Это у тебя столько сткрытых игр было?!:ohmy:  Это где ты столько хентая умудрился накопать?  В стиме столько нету вроде бы.

  • Хаха (+1) 2

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


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

Это у тебя столько сткрытых игр было?!:ohmy:  Это где ты столько хентая умудрился накопать?  В стиме столько нету вроде бы.

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

  • +1 1

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


Ссылка на сообщение
6 минут назад, 0wn3df1x сказал:

Они у меня и сейчас есть. Я их не удалял

Понимаю :wink:

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


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

Заприметил тут в одной новости анонс шикарной пошаговой PSX-Style RPG Never’s End.

header.jpg?t=1748985272

Выглядят как по мне просто пушка-гонка. Русский из коробки. Занесу в хотелки.

  • Спасибо (+1) 2

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


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

Заприметил тут в одной новости анонс шикарной пошаговой PSX-Style RPG Never’s End.

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

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

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


Ссылка на сообщение
1 минуту назад, \miroslav\ сказал:

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

Мне вот стилистически очень такие нравятся, приглушенные пастельные тона — кайф. Напомнило кстати игру Eternal Eyes с PS1. Проходил последнюю в том году.

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


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

Мне вот стилистически очень такие нравятся

А я с фф тактикс полюбил такой жанр игр, серия игр Дисгайа тоже нравится. 

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


Ссылка на сообщение
7 минут назад, \miroslav\ сказал:

А я с фф тактикс полюбил такой жанр игр, серия игр Дисгайа тоже нравится. 

https://store.steampowered.com/app/699170/Fell_Seal_Arbiters_Mark/

Вот взял,очень советовали. Говорили “настоящее” продолжение  ФФТ на выходные поиграю

 

Изменено пользователем edifiei
  • Лайк (+1) 1

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


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

https://store.steampowered.com/app/699170/Fell_Seal_Arbiters_Mark/

Вот взял,очень советовали. Говорили “настоящее” продолжение  ФФТ на выходные поиграю

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

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


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

Новелла чисто на часик с небольшим — Чел я просто хочу домой.

header.jpg?t=1745482318

Из интересного: Paint-стилистика, вайбовая музыка (конечно не уровня Anger Foot, но на уровне), 13 концовок, которые постепенно раскрывают всю картину происходящего.

Разработчики наши ребята.

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

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


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

6-го июня выкатят демку Tormented Souls 2

  • Лайк (+1) 1

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


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

К летней распродаже обновил SteamDB - Sales; Ultimate Enhancer.

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

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

Игры, доступные в Казахстане и недоступные в России, с русским текстовым переводом, скидки на которые появились не раньше 02.06.2025

BNZCExN.png

 


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

hcu3kck.png

 


Интерфейс калькулятора желаемого

s53CiaE.png

Из самого последнего — добавил возможность посчитать, сколько вам будет стоить закупка всех игр из списка желаемого по полной цене и по самым низким известным ценам.

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

 


Объясняю, почему это важно, на примере гипотетической игры "Звездный Странник":

  1. Изначальная ситуация (до корректировки региональных цен):
    • Базовая цена игры "Звездный Странник" составляла 500 рублей.
    • Разработчик устраивал распродажу со скидкой 75%.
    • Таким образом, исторический минимум цены игры составлял 125 рублей (500 - 75% = 125). Этот минимум был зафиксирован в SteamDB.
  2. Корректировка региональных цен Valve:
    • Произошла корректировка региональных цен, и базовая стоимость многих игр была пересмотрена в сторону увеличения.
    • Новая базовая цена "Звездного Странника" теперь составляет 1800 рублей.
  3. Текущая распродажа (после корректировки цен):
    • Разработчик решает сделать очень щедрую распродажу и устанавливает скидку в 90% на "Звездного Странника".
    • Новая цена со скидкой составляет 180 рублей (1800 - 90% = 180).
  4. Проблема старого подхода (только абсолютный минимум):
    • Если ориентироваться только на абсолютный исторический минимум из SteamDB (который был 125 рублей), то текущая цена в 180 рублей не будет отображаться как самая выгодная, потому что она выше прежнего абсолютного минимума. SteamDB покажет, что игра когда-то стоила дешевле. Но данный исторический минимум исходил из другой базовой цены, которой уже не существует.
  5. Преимущество нового подхода (учет скидки в процентах и текущей базовой цены):
    • Новый инструмент, который позволяет фильтровать по процентам от текущей базовой цены, покажет, что скидка в 90% - это чрезвычайно выгодное предложение в текущих реалиях.
    • Несмотря на то, что 180 рублей > 125 рублей (если бы мы сравнивали с нерелевантным старым абсолютным минимумом), скидка в 90% от новой базовой цены (1800 рублей) является гораздо более значимой и выгодной, чем, например, если бы сейчас была скидка 75% от 1800 рублей (что составило бы 450 рублей).
  • +1 3

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: james_sun

      Изначальная цена Steam Machine должна была составить 750 долларов, но из-за текущего кризиса на рынке оперативной памяти ее подняли почти в 1,5 раза.
      На днях стали известны даты предзаказа и поступления в продажу сборного PC от Valve под названием Steam Machine.

      Предзаказы на устройства стартуют 25 июня в 20:00 по московскому времени. Порядок очереди для оформивших заказ будет определяться случайным образом в целях создания системы, «которая будет более справедливой для всех». Непосредственно в продаже PC окажутся 30 июня. 
      Всего будут доступны четыре варианта Steam Machine. Версия с 512 ГБ встроенной памяти обойдется покупателям в 1049 долларов, версия с 2 ТБ — в 1349 долларов. Аналогичные системы, но уже со Steam Controller в комплекте — в 1128 и 1428 долларов соответственно. 
      Также на борту окажутся полузаказной центральный процессор AMD Zen 4 с 6 ядрами и 12 потоками (частота до 4,8 ГГц, TDP 30 Вт), графический процессор AMD RDNA 3 28CU (макс. стабильная частота 2,45 ГГц, TDP 110 Вт), 16 Гбайт оперативной памяти DDR5 + 8 Гбайт видеопамяти GDDR6.
      Изначальная цена Steam Machine должна была составить 750 долларов, но из-за текущего кризиса на рынке оперативной памяти ее подняли почти в 1,5 раза.
    • Автор: SerGEAnt

      Для нативного отслеживания появившихся в Steam русских локализаций подписывайтесь на куратора «Русские переводы».
      @0wn3df1x продолжает следить за Steam-играми, в которых появилась русская локализация.
      Список за последние пять недель:
      NEBULOUS: Fleet Command — космическая тактика. Дата выхода в ранний доступ: 11 февраля 2022 года, 4163 обзора, 83% положительные.
      Endoparasitic — изометрический хоррор. Вышел 24 октября 2022 года, 3008 обзоров, 94% положительные.
      Different Strokes — онлайн-игра про рисование. Вышла 10 ноября 2022 года, 1545 обзоров, 93% положительные.
      Zed Zone — изометрическая зомби-выживалка. Дата выхода в ранний доступ: 30 марта 2023 года, 3579 обзоров, 80% положительные.
      Witchfire — фэнтези-шутер от авторов Painkiller. Дата выхода в ранний доступ: 23 сентября 2024 года, 14776 обзоров, 92% положительные.
      MindsEye — прошлогодний провальный сюжетный шутер. Вышел 10 июня 2025 года, 2825 обзоров, 47% положительные.
      Tower Wizard — магическая idle-игра. Вышла 19 июня 2025 года, 8455 обзоров, 97% положительные.
      Berry Bury Berry — idle-игра про выращивание ягод. Вышла 29 января 2026 года, 7311 обзоров, 98% положительные.
      The Karters 2: Turbo Charged — гоночная игра в духе Crash Team Racing. В раннем доступе с 17 июля 2025 года, 1031 обзор, 92% положительные.
      and Roger — визуальная новелла, о которой лучше ничего не говорить, чтобы не испортить эффект от знакомства. Вышла 23 июля 2025 года, 2346 обзоров, 95% положительные.
      Where Winds Meet — бесплатная китайская action/RPG. Вышла 15 ноября 2025 года, 110812 обзоров, 87% положительные.
      Rotwood — битемап от Klei Entertainment. Вышел 3 марта 2026 года, 8070 обзоров, 75% положительные.
      Samson — немного погремевший городской экшен. Вышел 8 апреля 2026 года, 3022 обзора, 55% положительные.
      Lost Castle 2 — динамичный скроллер. Дата выхода из раннего доступа: 11 июня 2026 года, 11891 обзор, 79% положительные.
      Melody's Escape 2 — музыкальная ритм-игра. В раннем доступе с 30 сентября 2022 года, 328 обзоров, 92% положительные.
      Bingle Bingle — карточный (или даже рулеточный) рогалик. В раннем доступе с 18 марта 2024 года, 599 обзоров, 83% положительные.
      Horse Racing Manager — симулятор управления конюшней. В раннем доступе с 24 октября 2025 года, 160 обзоров, 87% положительные.
      Outside the Blocks — игра про создание диорам. Вышла 4 ноября 2025 года, 186 обзоров, 89% положительные.
      Abandoned Archive — классический изометрический рогалик. Вышла 24 ноября 2025 года, 753 обзора, 93% положительные.
      Dogpile — карточный рогалик. Вышел 10 декабря 2025 года, 719 обзоров, 96% положительные.
      Tearscape — изометрический соулс-лайк. Вышел 2 февраля 2026 года, 305 обзоров, 92% положительные.
      Above the Snow — игра про строительство горнолыжного курорта. Вышла 23 апреля 2026 года, 394 обзора, 79% положительные.

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

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

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

    • Как сделать русские буквы в шрифте ContinuumBold.ttf?
    • Спасибо за перевод. Игруха классная. Перевод хороший. Не скажешь, что сделан нейронкой.
    • Всё так, только ещё нужно 
      "StateFlags"        "4"
      "buildid"        "20269474"
      "TargetBuildID"        "0"

      От части надеюсь, что 1.10 ещё не скоро, не улыбается редактировать 5.000+ файлов.
    • В соседней теме по переводу Final Fantasy VIII я упомянул опрос, который мы проводили в нашем сообществе в январе 2025 года: https://vk.com/wall-181931421_3443   В данном опросе Resonance of Fate заняла далеко не последнее место, а почётное второе. В связи с тем, что эта тема на ЗОГе активизировалась, то думаю стоит сказать несколько слов по поводу этого проекта. Те, кто постоянно поддерживает наше сообщество, уже давно знают о том, что мы давно над этим проектом работаем, но было очень много пауз и различных сложностей. Попытаюсь разъяснить не сильно подробно.

      1. Давным-давно в далекой галактике... на сайте команды переводчиков Alliance team админ RangerRus анонсировал перевод Resonance of Fate для платформы PS3. Когда это было? Где-то в 2013-2015 годах. Точный год я уже сам забыл. Разбор ресурсов дался Рейнджеру не просто, так как с шифрованием в играх tri-Ace практически всегда так. Затем команда перевела практически весь текст игры, а потом что-то пошло не так (многие до сих пор не знают, а что же там случилось за кулисами). Многие из команды ушли, а также сам Рейнджер сменил место жительства, уехал в другую страну, больше стал уделять времени семье и т.д. со всеми вытекающими обстоятельствами. Текст так и остался не отредактированный.

      2. Затем с проектом захотел помочь сам я. Потому что это достойная игрушка от разработчиков серии Star Ocean (которые в свою очередь являются отцами-основателями серии Tales of). Мне довелось связаться с @AlexLAN, так как наработки оставались у него. И мы договорились что-нибудь сделать со всем этим. К тому моменту эпоха PS3 совсем стухла и пришли на замену PS4 и PS5, а также куча портов и ремастеров на ПК. В том числе это случилось и с Resonance of Fate. Игру портировали на ПК. Выглядит она там гораздо лучше чем на PS3. Нам не хотелось ограничиваться одной платформой PS3. Но с поиском программистов не везло. Причины:
      - XOR защита;
      - модифицированная компрессия LZSS от разработчиков в нескольких вариантах;
      - один из самых вредных способов хранения текста в ресурсах, когда вообще нет текста, а каждое значение является индексом на глифы;
      - и т.д.
      Некоторые ромхакеры в этом деле пасуют.

      3. И вот в начале этого 2026 года появляется в этой теме уважаемый @TheLuxifer1, который смог всё это не только одолеть, но ещё и написать удобный алгоритм для перепаковки всего и вся. Разумеется я ему сразу в личку написал и мы смогли договориться. За что ему огромное спасибо. Он согласился помочь на чистом энтузиазме во всём это деле. Когда мы закончим над всем этим работать, то он все свои наработки разместит на гитхабе, чтобы любой желающий на другой язык мог спокойно перевести Резонанс.

      Моё упущение, что я сразу об этом здесь в теме не написал, чтобы люди знали, что определённые работы ведутся и мы не отказались от проекта. Прошу понять, что когда курируешь много проектов и взаимодействуешь с большим количеством людей, то достаточно сложно всюду и везде успеть. Когда придёт время, то мы обязательно анонсируем перевод с видеодемонстрацией начала игры. Следить за новостями можно в нашем сообществе в ВК:
      https://vk.com/temple_of_tales_translations
        Огромное спасибо @Локалыч за инициативу. У тебя хорошие навыки, раз ты смог преодолеть столько преград на пути к упаковке текста с кастомным шрифтом. Я решил здесь высказать, чтобы все остальные знали, да и вообще как-то попытаться либо объединить усилия или договориться. Потому что у нас уже огромная работа была проведена и нет смысла снова копать то, что мы уже сделали. Я написал тебе в личку, а там надеюсь, что сможем что-нибудь придумать.

      Ещё немного дополню.

      Текстур в игре на самом деле не много. Очень много мест с разными вариантами шрифтом. Всё это проверять нужно по кропотливее чем во многих других наших проектах. Это не проблема. Но что проблема, так это черновой текст от команды Alliance team. Текст нужно редактировать. Не хочется никого обижать, потому что у нас самих в начале пути выполнялись разные переводы без редактора. Всё это давным давно пройденный этап. Если хочется сделать хорошую локализацию, то без достойной редактуры ни как не обойтись. Это то, что нужно сделать обязательно и по-другому никак. Делается это далеко не быстро. Бывают случаи, когда на редактуру уходит гораздо больше времени, чем на сам черновой перевод. Поэтому необходимо запастись терпением. К данному посту я прилагаю 2 скриншота с проверкой вставки изменённых ресурсов в игру. Но это не отредактированный текст, а также всё ещё не утверждённый шрифт. Небольшая демонстрация вставки текста от команды Alliance team. Просто показываю, что всё работает. И кстати, за что очередная огромная благодарность @TheLuxifer1, так это за то, что он удобным образом сконвертировал весь текст перевода из PS3-версии для PC, чтобы ничего не пришлось вручную переносить. Огромная помощь, так как по факту там сильный был рассинхрон в нумерации строк и управляющих тегах, которые встречаются в начале строк, в середине и в конце.
       
    • Стимовскую версию всегда можно будет откатить до старой версии. Все ачивки и т.п. должны работать исправно. 1. Нажмите Win + R и введите steam://open/console 2. Введите там download_depot 1569580 1569581 6289516525108126147 3. Зайдите в папку с игрой, удалите файлы и переместите файлы из скачанной версии. Скачается в следующую папку: C:\Program Files (x86)\Steam\steamapps\content\app_1569580\depot_1569581 4. Ставите русификатор   Чтобы игра случайно не обновилась, пока вы играете: Для данной игры нужно будет сделать следующее — найдите в папке steamapps файл appmanifest_1569580, откройте его свойства и поставьте галочку "Только для чтения". Таким образом, автоматические обновления конкретно для Blue Prince должны будут блочиться, и вы сможете играть на той версии, которая установлена на данный момент. Если понадобится обновить игру, снимите галку с файла и, по необходимости, перезапустите Стим.   Так что, единственное что может помешать поиграть с русификатором в стиме это личный фэншуй)) Некоторым именно надо самую новую версию))
    •   Благодарю за уже проделанную работу и ту, что еще предстоит. Вы большие молодцы.
      Правильно я понимаю, что в случае КОГДА:-) локализация будет завершена пройти возможно будет только пиратке?
    • Просто есть. На себе проверял ,реально лучше становится. 
    • Русификатор (v1.3.1.700)
    • Мы из Temple of Tales Translations (https://vk.com/temple_of_tales_translations) задумали давно переводить Final Fantasy VIII с японского для ПК. Может быть и на PS1 портируем, но пока ничего толком с PS1 платформой не ясно. Сначала нужно с ПК-версией разобраться. Всё это будет не в 2026 году, а дальше (потому что мы сейчас очень сильно заняты завершением и выпуском Tales of Rebirth и Valkyrie Profile Lenneth). Поэтому, если кому-то не терпится, то можете погамать в те переводы, которые уже есть в сети.

      На текущий момент лишь могу сказать, что наша заинтересованность только в том, чтобы эта замечательная игра получила превосходный перевод с оригинала и без оглядки на английскую локализацию. Помогает с хакингом уважаемый @Albeoris, за что ему огромное спасибо. Он единственный, кто согласился помочь с разбором японских ресурсов. Да тут много кто сидит. Просто огромная часть людей просто читает форум и всё. Именно поэтому тяжело судить, ведь не знаешь до конца кто тут твои посты прочитал и на сколько большой охват желающих. Тем не менее, мы в прошлом году провели небольшой опрос и среди всех тайтлов в голосовании победила Final Fantasy VIII:
      https://vk.com/wall-181931421_3443

      P.S.: Также здесь на форуме вспомнили о Resonance of Fate, которая в нашем опросе фигурировала. Об этом я немного слов напишу в соответствующей теме.
  • Изменения статусов

    • Jimmi Hopkins  »  SerGEAnt

      Это не просто перевод, а полноценная авторская сценарная адаптация. Диалоги переписаны так, чтобы персонажи звучали живо, остро и в характере. Добавлен чёрный юмор там, где авторы постеснялись. Убраны лорные противоречия, докручены мотивации. В результате игра стала умнее, злее и смешнее оригинала.
      · 0 ответов
    • ElikaStudio

      Долгожданный релиз полного сезона состоялся!
      https://youtu.be/mwBk2stm2OQ?si=qpJojB_XDABaC0We
      https://vk.com/video-48153754_456239394?sh=4&list=c62797c2b7d0725d6e
      Life is Strange: Before the Storm:
      Эпизод 1: "Прoбуждeниe"
      Эпизод 2: "О дивный новый мир"
      Эпизод 3: "Ад пуст"
      Бонусный эпизод: "Прощание"
      Русская озвучка уже доступна для скачивания!
      ElikaStudio выражает огромную благодарность всем, кто принял участие в создании проекта! 
      Группе 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
      Ручная установка PC(оба издания):
      https://drive.google.com/drive/folders/1MJPd8965m4XxxAuOBt8enSHtv8_yy5xh?usp=sharing
      Баг репорт в обсуждении:
      https://vk.com/topic-48153754_55571577
      ___________________________________________
      Финансовый аппарат:
      www.donationalerts.com/r/elikastudio
      Пожертвовать средства на наши проекты:
      Кошелек ЮMoney 4100 1188 6818 3009
      карта Сбер банк 2202 2018 6334 1042
      карта Альфа банк 5559 4937 0209 8584
      Спасибо за вашу поддержку!
      #elikastudio #русскаяозвучка
      · 0 ответов
    • fox222  »  Siberian GRemlin

      Здравствуйте, хочу купить персональный доступ к переводам, сколько стоит?
      · 1 ответ
    • vitkach  »  eaZy

      Извините за беспокойство. Хотел спросить, а русификатор ещё когда-нибудь будет обновляться? Дело в том, что после его выхода выходили ещё обновления, в частности обновление 1.1, вышедшее летом 2023 года, где была добавлена целая сюжетная глава в конце если проходишь на лучшую концовку золотого пути, это где-то ещё полчаса диалогов. Также в игре присутсвуют иногда кракозябры вместо русского языка, это в основном связано с тем, что кое-где текст был изменён, в основном в обучающих сообщениях.
      · 0 ответов
    • TerryBogard  »  Siberian GRemlin

      C&C: RA: Retaliation (ПК) не работает.
      · 0 ответов
  • Лучшие авторы


×