feat(phase1): rebrand to TTRPG Player and drop Git updates feed

Rename product to TTRPG Player (TTRPGPlayer / com.ttrpgplayer.app), use .ttrpg.zip for new saves while keeping .dnd.zip import, accept TTRPG- and DND- license keys on client, and remove sync-update-feed plus CI push to DndGamePlayerUpdates.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-05-17 20:56:14 +08:00
parent 2c03921d23
commit 7c858ba633
27 changed files with 253 additions and 1328 deletions
+1 -1
View File
@@ -113,7 +113,7 @@
<div class="wrap">
<div class="card">
<img class="logo" src="./app-window-icon.png" width="72" height="72" alt="" />
<h1 class="title" data-boot-title>DNDGamePlayer</h1>
<h1 class="title" data-boot-title>TTRPG Player</h1>
<p class="subtitle">редактор и проигрыватель</p>
<p class="version" data-boot-version></p>
<p class="status" id="boot-status">Запуск…</p>
+3 -2
View File
@@ -4,6 +4,7 @@ import { createPortal } from 'react-dom';
import { ipcChannels, type UpdaterCheckResponse } from '../../shared/ipc/contracts';
import { EULA_CURRENT_VERSION } from '../../shared/license/eulaVersion';
import type { LicenseSnapshot } from '../../shared/license/licenseSnapshot';
import { PROJECT_ZIP_EXTENSION } from '../../shared/project/projectZipExtension';
import type { AssetId, MediaAsset, Project, ProjectId, SceneAudioRef, SceneId } from '../../shared/types';
import { AppLogo } from '../shared/branding/AppLogo';
import { getDndApi } from '../shared/dndApi';
@@ -377,7 +378,7 @@ export function EditorApp() {
title={t('top.backToProjects')}
>
<AppLogo className={styles.brandLogo} size={26} />
<div className={styles.brandTitle}>DNDGamePlayer</div>
<div className={styles.brandTitle}>{t('app.brandTitle')}</div>
</button>
<div className={styles.fileToolbar}>
<button
@@ -1319,7 +1320,7 @@ function RenameProjectModal({
<div className={styles.flex1}>
<Input value={fileBaseName} onChange={setFileBaseName} placeholder="my_campaign" />
</div>
<div className={styles.fileSuffix}>.dnd.zip</div>
<div className={styles.fileSuffix}>{PROJECT_ZIP_EXTENSION}</div>
</div>
{!fileNameOk ? <div className={styles.fieldError}>{t('rename.fileInvalid')}</div> : null}
{fileNameDup ? <div className={styles.fieldError}>{t('rename.fileDup')}</div> : null}
+8 -4
View File
@@ -60,6 +60,8 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'common.delete': 'Удалить',
'common.closeMenu': 'Закрыть меню',
'app.brandTitle': 'НРИ Плеер',
'notice.campaignAudioEmpty': 'Аудио не добавлено. Проверьте формат файла.',
'license.checkingTitle': 'Проверка лицензии…',
@@ -69,7 +71,7 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'Укажите ключ в меню «Настройки» → «Указать ключ». До активации доступно только меню «Настройки».',
'license.tokenTitle': 'Указать ключ',
'license.tokenKey': 'КЛЮЧ',
'license.tokenPlaceholder': 'Продуктовый ключ DND-...',
'license.tokenPlaceholder': 'Продуктовый ключ TTRPG-... или DND-...',
'license.tokenSaving': 'Сохранение…',
'license.eulaTitle': 'Лицензионное соглашение',
'license.eulaReject': 'Не принимаю',
@@ -156,7 +158,7 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'export.title': 'Экспорт проекта',
'export.project': 'ПРОЕКТ',
'export.hint':
'Далее откроется окно сохранения: укажите имя и папку для файла .dnd.zip — будет создана копия архива проекта.',
'Далее откроется окно сохранения: укажите имя и папку для файла .ttrpg.zip — будет создана копия архива проекта.',
'export.exporting': 'Экспорт…',
'export.saveAs': 'Сохранить как…',
@@ -288,6 +290,8 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'common.delete': 'Delete',
'common.closeMenu': 'Close menu',
'app.brandTitle': 'TTRPG Player',
'notice.campaignAudioEmpty': 'No audio was added. Check the file format.',
'license.checkingTitle': 'Checking license…',
@@ -297,7 +301,7 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'Enter your key via Settings → Enter license key. Until activation, only Settings is available.',
'license.tokenTitle': 'Enter license key',
'license.tokenKey': 'KEY',
'license.tokenPlaceholder': 'DND product key…',
'license.tokenPlaceholder': 'TTRPG- or DND- product key…',
'license.tokenSaving': 'Saving…',
'license.eulaTitle': 'End User License Agreement',
'license.eulaReject': 'Decline',
@@ -383,7 +387,7 @@ export const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = {
'export.title': 'Export project',
'export.project': 'PROJECT',
'export.hint':
'A save dialog will open: choose a name and folder for the .dnd.zip file — a copy of the project archive will be created.',
'A save dialog will open: choose a name and folder for the .ttrpg.zip file — a copy of the project archive will be created.',
'export.exporting': 'Exporting…',
'export.saveAs': 'Save as…',
+1 -1
View File
@@ -2,7 +2,7 @@
export const EULA_RU_MARKDOWN = `
# Лицензионное соглашение с конечным пользователем (EULA)
Используя DNDGamePlayer («Программу»), вы соглашаетесь с условиями ниже.
Используя НРИ Плеер («Программу»), вы соглашаетесь с условиями ниже.
## 1. Предоставление прав
Правообладатель предоставляет вам неисключическую, непередаваемую лицензию на использование Программы в пределах приобретённой лицензии (активации).