feat: allow launching installed server and client without updates

This commit is contained in:
Дмитрий committed 2026-10-05 14:01:37 +05:00
1 parent cfe0889a4f
commit 6c771fae20
9 files changed
+30

No files matched your search

@@ -0,0 +1,7 @@
---
area: manager
type: added
audience: players
title: Start your installed server or client without downloading an available update
---
Choose to update later and keep playing with your installed version. Interrupted server updates still require recovery before startup.
+2
View File
@@ -73,6 +73,8 @@ const de: Partial<Record<keyof typeof en, string>> = {
"btn.stop": "SERVER STOPPEN",
"btn.stopSmall": "Stoppen",
"btn.restart": "Neustart",
"btn.startWithoutUpdate": "Ohne Update starten",
"btn.playWithoutUpdate": "Ohne Update spielen",
"btn.play": "SPIELEN",
"btn.startPlay": "STARTEN & SPIELEN",
"btn.startingCaps": "STARTET …",
+2
View File
@@ -104,6 +104,8 @@ const en = {
"btn.stop": "STOP SERVER",
"btn.stopSmall": "Stop",
"btn.restart": "Restart",
"btn.startWithoutUpdate": "Start without updating",
"btn.playWithoutUpdate": "Play without updating",
"btn.play": "PLAY",
"btn.startPlay": "START & PLAY",
"btn.startingCaps": "STARTING…",
+2
View File
@@ -73,6 +73,8 @@ const es: Partial<Record<keyof typeof en, string>> = {
"btn.stop": "DETENER SERVIDOR",
"btn.stopSmall": "Detener",
"btn.restart": "Reiniciar",
"btn.startWithoutUpdate": "Iniciar sin actualizar",
"btn.playWithoutUpdate": "Jugar sin actualizar",
"btn.play": "JUGAR",
"btn.startPlay": "INICIAR Y JUGAR",
"btn.startingCaps": "INICIANDO…",
+2
View File
@@ -73,6 +73,8 @@ const fr: Partial<Record<keyof typeof en, string>> = {
"btn.stop": "ARRÊTER LE SERVEUR",
"btn.stopSmall": "Arrêter",
"btn.restart": "Redémarrer",
"btn.startWithoutUpdate": "Démarrer sans mise à jour",
"btn.playWithoutUpdate": "Jouer sans mise à jour",
"btn.play": "JOUER",
"btn.startPlay": "DÉMARRER ET JOUER",
"btn.startingCaps": "DÉMARRAGE…",
+2
View File
@@ -104,6 +104,8 @@ const ru: Partial<Record<keyof typeof en, string>> = {
"btn.stop": "ОСТАНОВИТЬ СЕРВЕР",
"btn.stopSmall": "Остановить",
"btn.restart": "Перезапустить",
"btn.startWithoutUpdate": "Запустить без обновления",
"btn.playWithoutUpdate": "Играть без обновления",
"btn.play": "ИГРАТЬ",
"btn.startPlay": "ЗАПУСТИТЬ И ИГРАТЬ",
"btn.startingCaps": "ЗАПУСК…",
+2
View File
@@ -85,6 +85,8 @@ const zh = {
"btn.stop": "停止服务器",
"btn.stopSmall": "停止",
"btn.restart": "重启",
"btn.startWithoutUpdate": "不更新启动服务器",
"btn.playWithoutUpdate": "不更新开始游戏",
"btn.play": "开始游戏",
"btn.startPlay": "启动并开始游戏",
"btn.startingCaps": "正在启动…",
+10
View File
@@ -274,6 +274,11 @@ export function Overview({ server, companions = true, onForget, onOpenUpdates, o
{transitioning ? (action === "stopping" ? t("btn.stoppingCaps") : t("btn.startingCaps")) : t("btn.start")}
</Button>
)}
{!running && upd.available && (
<Button variant="secondary" size="sm" disabled={transitioning || upd.applying} onClick={() => run("starting")}>
{t("btn.startWithoutUpdate")}
</Button>
)}
{running && (
<Button variant="ghost" size="sm" disabled={transitioning || upd.applying} onClick={() => run("restarting")}>
{t("btn.restart")}
@@ -333,6 +338,11 @@ export function Overview({ server, companions = true, onForget, onOpenUpdates, o
{t("btn.setupClient")}
</Button>
) : null}
{client && !jobBusy && (clientStatus?.update_available || job.phase === "choose") && (
<Button variant="secondary" size="sm" disabled={realmBusy || playing || upd.applying} onClick={() => void play()}>
{t("btn.playWithoutUpdate")}
</Button>
)}
</div>
</div>
{anyUp && !running && !transitioning && (
+1
View File
@@ -74,6 +74,7 @@ export function RemoteClient({ onHost }: { onHost: () => void }) {
</form>
<p className="mt-3 text-sm text-muted">{t("remote.accountHint")}</p>
<Button variant="primary" className="mt-4" disabled={loading || busy || !savedHost || host.trim() !== savedHost || status === null} onClick={play}>{t("btn.play")}</Button>
{status?.linked && status.update_available && <Button variant="secondary" className="mt-4 ml-3" disabled={loading || busy || !savedHost || host.trim() !== savedHost} onClick={() => void launch()}>{t("btn.playWithoutUpdate")}</Button>}
{note && <p className="mt-3 text-sm text-ok" role="status">{note}</p>}
{error && <p className="mt-3 text-sm text-bad" role="alert">{error}</p>}
</Card>