From 6299e4be747a53c5a83757ba8fc4bfc1a2686a82 Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Tue, 29 Sep 2026 20:16:40 -0400 Subject: [PATCH] feature: map rotation and per-server plugins on the dedicated server page --- components/servers/ServerMapRotation.vue | 498 +++++++++++++++++++++++ components/servers/ServerPlugins.vue | 250 ++++++++++++ i18n/locales/ar_SA.json | 40 ++ i18n/locales/da_DK.json | 40 ++ i18n/locales/de_DE.json | 40 ++ i18n/locales/en.json | 40 ++ i18n/locales/es_ES.json | 40 ++ i18n/locales/fr_FR.json | 40 ++ i18n/locales/it_IT.json | 40 ++ i18n/locales/ja_JP.json | 40 ++ i18n/locales/ko_KR.json | 40 ++ i18n/locales/pl_PL.json | 40 ++ i18n/locales/pt_BR.json | 40 ++ i18n/locales/ru_RU.json | 40 ++ i18n/locales/sv_SE.json | 40 ++ i18n/locales/tr_TR.json | 40 ++ i18n/locales/uk_UA.json | 40 ++ i18n/locales/zh_Hans.json | 40 ++ i18n/locales/zh_Hant.json | 40 ++ pages/dedicated-servers/[id].vue | 21 + 20 files changed, 1449 insertions(+) create mode 100644 components/servers/ServerMapRotation.vue create mode 100644 components/servers/ServerPlugins.vue diff --git a/components/servers/ServerMapRotation.vue b/components/servers/ServerMapRotation.vue new file mode 100644 index 000000000..5d965f1a2 --- /dev/null +++ b/components/servers/ServerMapRotation.vue @@ -0,0 +1,498 @@ + + + diff --git a/components/servers/ServerPlugins.vue b/components/servers/ServerPlugins.vue new file mode 100644 index 000000000..39272c579 --- /dev/null +++ b/components/servers/ServerPlugins.vue @@ -0,0 +1,250 @@ + + + diff --git a/i18n/locales/ar_SA.json b/i18n/locales/ar_SA.json index bc19a35a0..a3a7771f5 100644 --- a/i18n/locales/ar_SA.json +++ b/i18n/locales/ar_SA.json @@ -3687,6 +3687,46 @@ "title": "هل أنت متأكد تمامًا؟", "description": "لا يمكن التراجع عن هذا الإجراء. سيؤدي ذلك إلى حذف سيرفرك نهائيًا وإزالة البيانات المرتبطة به من سيرفراتنا.", "continue": "متابعة" + }, + "save_restart": "حفظ وإعادة التشغيل", + "discard": "تجاهل", + "restart_hint": "يؤدي الحفظ إلى إعادة تشغيل الخادم وفصل كل من يلعب عليه.", + "map_rotation": { + "title": "تدوير الخرائط", + "description": "الخرائط التي يتنقل بينها هذا الخادم. يبدأ على الخريطة الأولى، أو على خريطة عشوائية عند تفعيل الخلط، ثم تتولى إضافة تدوير الخرائط تصويتات نهاية الخريطة وrock the vote والتدوير التلقائي.", + "shuffle": "خلط", + "shuffle_hint": "اختيار الخريطة التالية عشوائيًا", + "played_by": "تديره {plugin}", + "no_plugin": "لا توجد إضافة مثبتة لتدوير الخرائط، لذا سيبقى الخادم على خريطته الأولى.", + "install_plugin": "تثبيت MapChooser", + "workshop_order_hint": "تفقد MapChooser موضعها في القائمة مع خرائط الورشة وتعود دائمًا إلى الخريطة الثانية. أبقِ الخلط مفعّلًا لخرائط الورشة.", + "empty": "لا توجد خرائط بعد. أضف خرائط من الكتالوج أو استورد مجموعة من ورشة Steam.", + "official": "رسمية", + "workshop": "الورشة", + "add_map": "إضافة خريطة", + "add": "إضافة", + "import_placeholder": "رابط أو معرّف مجموعة الورشة", + "import": "استيراد", + "imported": "خرائط الورشة المضافة: {count}", + "imported_skipped": "تم تخطيها لأنها ليست خرائط CS2: {count}", + "move_up": "نقل لأعلى", + "move_down": "نقل لأسفل", + "remove": "إزالة", + "saved": "تم حفظ تدوير الخرائط. تتم إعادة تشغيل الخادم." + }, + "plugins": { + "title": "الإضافات", + "description": "فعّل إضافة لعبة أو عطّلها لهذا الخادم فقط. الافتراضي يتبع إعدادات التحميل الخاصة بالإضافة.", + "default": "افتراضي", + "on": "تشغيل", + "off": "إيقاف", + "loads_by_default": "تُحمَّل هنا افتراضيًا", + "off_by_default": "متوقفة هنا افتراضيًا", + "map_rotation": "تدير تدوير الخرائط", + "from_mode": "من {mode}", + "empty": "لا توجد إضافات لعبة مثبتة بعد.", + "browse": "دليل الإضافات", + "saved": "تم حفظ الإضافات. تتم إعادة تشغيل الخادم." } } }, diff --git a/i18n/locales/da_DK.json b/i18n/locales/da_DK.json index 8bea05968..09c6e5b41 100644 --- a/i18n/locales/da_DK.json +++ b/i18n/locales/da_DK.json @@ -3687,6 +3687,46 @@ "title": "Slet serveren?", "description": "Handlingen kan ikke fortrydes. Serveren slettes permanent, og tilhørende data fjernes fra vores servere.", "continue": "Fortsæt" + }, + "save_restart": "Gem og genstart", + "discard": "Kassér", + "restart_hint": "Når du gemmer, genstartes serveren, og alle der spiller bliver afbrudt.", + "map_rotation": { + "title": "Mapsrotation", + "description": "De maps denne server skifter mellem. Den starter på den første, eller en tilfældig når der blandes, og derefter overtager rotationspluginnet med afstemninger ved mapslut, rock the vote og det automatiske skift.", + "shuffle": "Bland", + "shuffle_hint": "Vælg næste map tilfældigt", + "played_by": "Styres af {plugin}", + "no_plugin": "Der er ikke installeret et plugin til mapsrotation, så serveren bliver på sit første map.", + "install_plugin": "Installer MapChooser", + "workshop_order_hint": "MapChooser mister sin plads i listen på workshop-maps og vender altid tilbage til det andet. Hold Bland slået til for workshop-maps.", + "empty": "Ingen maps endnu. Tilføj maps fra kataloget, eller importer en Steam Workshop-samling.", + "official": "Officielle", + "workshop": "Workshop", + "add_map": "Tilføj et map", + "add": "Tilføj", + "import_placeholder": "Link eller ID til workshop-samling", + "import": "Importer", + "imported": "Workshop-maps tilføjet: {count}", + "imported_skipped": "Sprunget over, ikke CS2-maps: {count}", + "move_up": "Flyt op", + "move_down": "Flyt ned", + "remove": "Fjern", + "saved": "Mapsrotation gemt. Serveren genstarter." + }, + "plugins": { + "title": "Plugins", + "description": "Slå et spilplugin til eller fra kun for denne server. Standard følger pluginnets egne indlæsningsindstillinger.", + "default": "Standard", + "on": "Til", + "off": "Fra", + "loads_by_default": "Indlæses her som standard", + "off_by_default": "Fra her som standard", + "map_rotation": "Styrer mapsrotationen", + "from_mode": "Fra {mode}", + "empty": "Der er endnu ikke installeret nogen spilplugins.", + "browse": "Plugin-oversigt", + "saved": "Plugins gemt. Serveren genstarter." } } }, diff --git a/i18n/locales/de_DE.json b/i18n/locales/de_DE.json index 8e42737c3..eaed09226 100644 --- a/i18n/locales/de_DE.json +++ b/i18n/locales/de_DE.json @@ -3687,6 +3687,46 @@ "title": "Bist du dir ganz sicher?", "description": "Das lässt sich nicht rückgängig machen. Dein Server wird dauerhaft gelöscht und alle zugehörigen Daten werden von unseren Servern entfernt.", "continue": "Weiter" + }, + "save_restart": "Speichern & Neu starten", + "discard": "Verwerfen", + "restart_hint": "Beim Speichern wird der Server neu gestartet, alle Spieler darauf werden getrennt.", + "map_rotation": { + "title": "Map-Rotation", + "description": "Die Maps, die dieser Server durchläuft. Er startet auf der ersten, oder bei Zufallsreihenfolge auf einer zufälligen, danach übernimmt das Map-Rotations-Plugin mit Abstimmungen am Map-Ende, Rock the Vote und dem automatischen Wechsel.", + "shuffle": "Zufällig", + "shuffle_hint": "Nächste Map zufällig wählen", + "played_by": "Gespielt von {plugin}", + "no_plugin": "Kein Map-Rotations-Plugin installiert, der Server bleibt auf seiner ersten Map.", + "install_plugin": "MapChooser installieren", + "workshop_order_hint": "MapChooser verliert bei Workshop-Maps seine Position in der Liste und kehrt immer zur zweiten zurück. Lass „Zufällig“ bei Workshop-Maps an.", + "empty": "Noch keine Maps. Füge Maps aus dem Katalog hinzu oder importiere eine Steam-Workshop-Kollektion.", + "official": "Offiziell", + "workshop": "Workshop", + "add_map": "Map hinzufügen", + "add": "Hinzufügen", + "import_placeholder": "Link oder ID der Workshop-Kollektion", + "import": "Importieren", + "imported": "Workshop-Maps hinzugefügt: {count}", + "imported_skipped": "Übersprungen, keine CS2-Maps: {count}", + "move_up": "Nach oben", + "move_down": "Nach unten", + "remove": "Entfernen", + "saved": "Map-Rotation gespeichert. Der Server startet neu." + }, + "plugins": { + "title": "Plugins", + "description": "Schalte ein Spiel-Plugin nur für diesen Server ein oder aus. Standard folgt den Ladeeinstellungen des Plugins.", + "default": "Standard", + "on": "An", + "off": "Aus", + "loads_by_default": "Lädt hier standardmäßig", + "off_by_default": "Hier standardmäßig aus", + "map_rotation": "Steuert die Map-Rotation", + "from_mode": "Aus {mode}", + "empty": "Noch keine Spiel-Plugins installiert.", + "browse": "Plugin-Verzeichnis", + "saved": "Plugins gespeichert. Der Server startet neu." } } }, diff --git a/i18n/locales/en.json b/i18n/locales/en.json index fe2281237..fe853723e 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -3687,6 +3687,46 @@ "title": "Are you absolutely sure?", "description": "This action cannot be undone. This will permanently delete your server and remove associated data from our servers.", "continue": "Continue" + }, + "save_restart": "Save & Restart", + "discard": "Discard", + "restart_hint": "Saving restarts the server, which disconnects anyone playing on it.", + "map_rotation": { + "title": "Map Rotation", + "description": "The maps this server cycles through. It boots on the first one, or a random one when shuffled, and the map rotation plugin takes over from there with end-of-map votes, rock the vote and the automatic cycle.", + "shuffle": "Shuffle", + "shuffle_hint": "Pick the next map at random", + "played_by": "Played by {plugin}", + "no_plugin": "No map rotation plugin is installed, so the server will stay on its first map.", + "install_plugin": "Install MapChooser", + "workshop_order_hint": "MapChooser loses its place in the list on workshop maps and keeps returning to the second one. Keep Shuffle on for workshop maps.", + "empty": "No maps yet. Add maps from the catalog or import a Steam workshop collection.", + "official": "Official", + "workshop": "Workshop", + "add_map": "Add a map", + "add": "Add", + "import_placeholder": "Workshop collection link or ID", + "import": "Import", + "imported": "Workshop maps added: {count}", + "imported_skipped": "Skipped, not CS2 maps: {count}", + "move_up": "Move Up", + "move_down": "Move Down", + "remove": "Remove", + "saved": "Map rotation saved. The server is restarting." + }, + "plugins": { + "title": "Plugins", + "description": "Switch a game plugin on or off for this server only. Default follows the plugin's own load settings.", + "default": "Default", + "on": "On", + "off": "Off", + "loads_by_default": "Loads here by default", + "off_by_default": "Off here by default", + "map_rotation": "Runs the map rotation", + "from_mode": "From {mode}", + "empty": "No game plugins are installed yet.", + "browse": "Plugin Directory", + "saved": "Plugins saved. The server is restarting." } } }, diff --git a/i18n/locales/es_ES.json b/i18n/locales/es_ES.json index 636854fea..765050b55 100644 --- a/i18n/locales/es_ES.json +++ b/i18n/locales/es_ES.json @@ -3687,6 +3687,46 @@ "title": "¿Seguro que quieres continuar?", "description": "Esta acción no se puede deshacer. Se eliminará permanentemente tu servidor y se borrarán los datos asociados de nuestros servidores.", "continue": "Continuar" + }, + "save_restart": "Guardar y reiniciar", + "discard": "Descartar", + "restart_hint": "Al guardar se reinicia el servidor y se desconecta a quien esté jugando.", + "map_rotation": { + "title": "Rotación de mapas", + "description": "Los mapas que recorre este servidor. Arranca en el primero, o en uno aleatorio si está mezclado, y desde ahí el plugin de rotación se encarga de las votaciones de fin de mapa, rock the vote y el ciclo automático.", + "shuffle": "Aleatorio", + "shuffle_hint": "Elegir el siguiente mapa al azar", + "played_by": "Gestionado por {plugin}", + "no_plugin": "No hay ningún plugin de rotación de mapas instalado, así que el servidor se quedará en su primer mapa.", + "install_plugin": "Instalar MapChooser", + "workshop_order_hint": "MapChooser pierde su posición en la lista con mapas del workshop y vuelve siempre al segundo. Mantén Aleatorio activado para mapas del workshop.", + "empty": "Aún no hay mapas. Añade mapas del catálogo o importa una colección del workshop de Steam.", + "official": "Oficiales", + "workshop": "Workshop", + "add_map": "Añadir un mapa", + "add": "Añadir", + "import_placeholder": "Enlace o ID de la colección del workshop", + "import": "Importar", + "imported": "Mapas del workshop añadidos: {count}", + "imported_skipped": "Omitidos, no son mapas de CS2: {count}", + "move_up": "Subir", + "move_down": "Bajar", + "remove": "Quitar", + "saved": "Rotación de mapas guardada. El servidor se está reiniciando." + }, + "plugins": { + "title": "Plugins", + "description": "Activa o desactiva un plugin de juego solo para este servidor. Predeterminado sigue la configuración de carga del propio plugin.", + "default": "Predeterminado", + "on": "Activado", + "off": "Desactivado", + "loads_by_default": "Se carga aquí por defecto", + "off_by_default": "Desactivado aquí por defecto", + "map_rotation": "Gestiona la rotación de mapas", + "from_mode": "De {mode}", + "empty": "Aún no hay plugins de juego instalados.", + "browse": "Directorio de plugins", + "saved": "Plugins guardados. El servidor se está reiniciando." } } }, diff --git a/i18n/locales/fr_FR.json b/i18n/locales/fr_FR.json index a54c58888..bf67f2179 100644 --- a/i18n/locales/fr_FR.json +++ b/i18n/locales/fr_FR.json @@ -3687,6 +3687,46 @@ "title": "Confirmer la suppression ?", "description": "Cette action est irréversible. Le serveur sera définitivement supprimé, ainsi que les données associées sur nos serveurs.", "continue": "Continuer" + }, + "save_restart": "Enregistrer et redémarrer", + "discard": "Annuler", + "restart_hint": "L'enregistrement redémarre le serveur, ce qui déconnecte les joueurs présents.", + "map_rotation": { + "title": "Rotation des maps", + "description": "Les maps que ce serveur fait tourner. Il démarre sur la première, ou sur une map au hasard en mode aléatoire, puis le plugin de rotation prend le relais avec les votes de fin de map, le rock the vote et le cycle automatique.", + "shuffle": "Aléatoire", + "shuffle_hint": "Choisir la map suivante au hasard", + "played_by": "Géré par {plugin}", + "no_plugin": "Aucun plugin de rotation de maps n'est installé, le serveur restera donc sur sa première map.", + "install_plugin": "Installer MapChooser", + "workshop_order_hint": "MapChooser perd sa place dans la liste sur les maps du workshop et revient toujours à la deuxième. Gardez Aléatoire activé pour les maps du workshop.", + "empty": "Aucune map pour l'instant. Ajoutez des maps du catalogue ou importez une collection du workshop Steam.", + "official": "Officielles", + "workshop": "Workshop", + "add_map": "Ajouter une map", + "add": "Ajouter", + "import_placeholder": "Lien ou ID de la collection du workshop", + "import": "Importer", + "imported": "Maps du workshop ajoutées : {count}", + "imported_skipped": "Ignorés, pas des maps CS2 : {count}", + "move_up": "Monter", + "move_down": "Descendre", + "remove": "Retirer", + "saved": "Rotation des maps enregistrée. Le serveur redémarre." + }, + "plugins": { + "title": "Plugins", + "description": "Activez ou désactivez un plugin de jeu pour ce serveur uniquement. Par défaut suit les réglages de chargement du plugin.", + "default": "Par défaut", + "on": "Activé", + "off": "Désactivé", + "loads_by_default": "Chargé ici par défaut", + "off_by_default": "Désactivé ici par défaut", + "map_rotation": "Gère la rotation des maps", + "from_mode": "Via {mode}", + "empty": "Aucun plugin de jeu n'est encore installé.", + "browse": "Répertoire des plugins", + "saved": "Plugins enregistrés. Le serveur redémarre." } } }, diff --git a/i18n/locales/it_IT.json b/i18n/locales/it_IT.json index 2c45bb2f6..0a6f534cd 100644 --- a/i18n/locales/it_IT.json +++ b/i18n/locales/it_IT.json @@ -3687,6 +3687,46 @@ "title": "Eliminare il server?", "description": "L'operazione è irreversibile. Il server verrà eliminato definitivamente e i dati associati rimossi dai nostri server.", "continue": "Continua" + }, + "save_restart": "Salva e riavvia", + "discard": "Annulla", + "restart_hint": "Salvando il server si riavvia e chi sta giocando viene disconnesso.", + "map_rotation": { + "title": "Rotazione mappe", + "description": "Le mappe che questo server fa girare. Parte dalla prima, o da una casuale se mescolate, poi il plugin di rotazione gestisce i voti di fine mappa, il rock the vote e il ciclo automatico.", + "shuffle": "Casuale", + "shuffle_hint": "Scegli la mappa successiva a caso", + "played_by": "Gestita da {plugin}", + "no_plugin": "Nessun plugin di rotazione mappe installato, quindi il server resterà sulla prima mappa.", + "install_plugin": "Installa MapChooser", + "workshop_order_hint": "MapChooser perde la sua posizione nella lista con le mappe del workshop e torna sempre alla seconda. Tieni attivo Casuale per le mappe del workshop.", + "empty": "Nessuna mappa. Aggiungi mappe dal catalogo o importa una raccolta del workshop di Steam.", + "official": "Ufficiali", + "workshop": "Workshop", + "add_map": "Aggiungi una mappa", + "add": "Aggiungi", + "import_placeholder": "Link o ID della raccolta del workshop", + "import": "Importa", + "imported": "Mappe del workshop aggiunte: {count}", + "imported_skipped": "Saltati, non sono mappe CS2: {count}", + "move_up": "Sposta su", + "move_down": "Sposta giù", + "remove": "Rimuovi", + "saved": "Rotazione mappe salvata. Il server si sta riavviando." + }, + "plugins": { + "title": "Plugin", + "description": "Attiva o disattiva un plugin di gioco solo per questo server. Predefinito segue le impostazioni di caricamento del plugin.", + "default": "Predefinito", + "on": "Attivo", + "off": "Disattivo", + "loads_by_default": "Caricato qui per impostazione predefinita", + "off_by_default": "Disattivo qui per impostazione predefinita", + "map_rotation": "Gestisce la rotazione mappe", + "from_mode": "Da {mode}", + "empty": "Nessun plugin di gioco ancora installato.", + "browse": "Elenco plugin", + "saved": "Plugin salvati. Il server si sta riavviando." } } }, diff --git a/i18n/locales/ja_JP.json b/i18n/locales/ja_JP.json index 5b4ab2226..36406bf24 100644 --- a/i18n/locales/ja_JP.json +++ b/i18n/locales/ja_JP.json @@ -3687,6 +3687,46 @@ "title": "本当によろしいですか?", "description": "この操作は取り消せません。サーバーおよび関連データが完全に削除されます。", "continue": "続行" + }, + "save_restart": "保存して再起動", + "discard": "破棄", + "restart_hint": "保存するとサーバーが再起動し、プレイ中の全員が切断されます。", + "map_rotation": { + "title": "マップローテーション", + "description": "このサーバーが順に回すマップです。最初のマップ(シャッフル時はランダムなマップ)で起動し、その後はマップローテーションプラグインがマップ終了時の投票、Rock the Vote、自動切り替えを担当します。", + "shuffle": "シャッフル", + "shuffle_hint": "次のマップをランダムに選ぶ", + "played_by": "{plugin} が管理", + "no_plugin": "マップローテーションプラグインがインストールされていないため、サーバーは最初のマップのままになります。", + "install_plugin": "MapChooser をインストール", + "workshop_order_hint": "MapChooser はワークショップマップでリスト内の位置を見失い、2 番目のマップに戻り続けます。ワークショップマップではシャッフルをオンにしてください。", + "empty": "マップがまだありません。カタログからマップを追加するか、Steam ワークショップのコレクションをインポートしてください。", + "official": "公式", + "workshop": "ワークショップ", + "add_map": "マップを追加", + "add": "追加", + "import_placeholder": "ワークショップコレクションのリンクまたは ID", + "import": "インポート", + "imported": "追加したワークショップマップ: {count}", + "imported_skipped": "CS2 マップではないためスキップ: {count}", + "move_up": "上へ移動", + "move_down": "下へ移動", + "remove": "削除", + "saved": "マップローテーションを保存しました。サーバーを再起動しています。" + }, + "plugins": { + "title": "プラグイン", + "description": "このサーバーだけでゲームプラグインをオン・オフします。デフォルトはプラグイン自体の読み込み設定に従います。", + "default": "デフォルト", + "on": "オン", + "off": "オフ", + "loads_by_default": "デフォルトでここで読み込まれます", + "off_by_default": "デフォルトではここでオフ", + "map_rotation": "マップローテーションを担当", + "from_mode": "{mode} から", + "empty": "ゲームプラグインはまだインストールされていません。", + "browse": "プラグインディレクトリ", + "saved": "プラグインを保存しました。サーバーを再起動しています。" } } }, diff --git a/i18n/locales/ko_KR.json b/i18n/locales/ko_KR.json index 53f10fcfd..376e097d0 100644 --- a/i18n/locales/ko_KR.json +++ b/i18n/locales/ko_KR.json @@ -3687,6 +3687,46 @@ "title": "정말 진행하시겠습니까?", "description": "이 작업은 되돌릴 수 없습니다. 서버가 영구적으로 삭제되며 관련 데이터가 서버에서 제거됩니다.", "continue": "계속" + }, + "save_restart": "저장 후 재시작", + "discard": "취소", + "restart_hint": "저장하면 서버가 재시작되어 플레이 중인 모든 사람의 연결이 끊어집니다.", + "map_rotation": { + "title": "맵 로테이션", + "description": "이 서버가 돌아가며 플레이하는 맵입니다. 첫 번째 맵(셔플 시 무작위 맵)으로 시작하고, 이후에는 맵 로테이션 플러그인이 맵 종료 투표, Rock the Vote, 자동 순환을 맡습니다.", + "shuffle": "셔플", + "shuffle_hint": "다음 맵을 무작위로 선택", + "played_by": "{plugin}에서 관리", + "no_plugin": "맵 로테이션 플러그인이 설치되어 있지 않아 서버가 첫 번째 맵에 머무릅니다.", + "install_plugin": "MapChooser 설치", + "workshop_order_hint": "MapChooser는 창작마당 맵에서 목록의 위치를 잃고 계속 두 번째 맵으로 돌아갑니다. 창작마당 맵에는 셔플을 켜 두세요.", + "empty": "아직 맵이 없습니다. 카탈로그에서 맵을 추가하거나 Steam 창작마당 컬렉션을 가져오세요.", + "official": "공식", + "workshop": "창작마당", + "add_map": "맵 추가", + "add": "추가", + "import_placeholder": "창작마당 컬렉션 링크 또는 ID", + "import": "가져오기", + "imported": "추가된 창작마당 맵: {count}", + "imported_skipped": "CS2 맵이 아니어서 건너뜀: {count}", + "move_up": "위로 이동", + "move_down": "아래로 이동", + "remove": "제거", + "saved": "맵 로테이션을 저장했습니다. 서버를 재시작하는 중입니다." + }, + "plugins": { + "title": "플러그인", + "description": "이 서버에서만 게임 플러그인을 켜거나 끕니다. 기본값은 플러그인 자체의 로드 설정을 따릅니다.", + "default": "기본값", + "on": "켜기", + "off": "끄기", + "loads_by_default": "기본적으로 여기서 로드됨", + "off_by_default": "기본적으로 여기서 꺼짐", + "map_rotation": "맵 로테이션 담당", + "from_mode": "{mode}에서", + "empty": "아직 설치된 게임 플러그인이 없습니다.", + "browse": "플러그인 디렉터리", + "saved": "플러그인을 저장했습니다. 서버를 재시작하는 중입니다." } } }, diff --git a/i18n/locales/pl_PL.json b/i18n/locales/pl_PL.json index b4be4a494..512d33857 100644 --- a/i18n/locales/pl_PL.json +++ b/i18n/locales/pl_PL.json @@ -3687,6 +3687,46 @@ "title": "Czy na pewno?", "description": "Tej operacji nie można cofnąć. Spowoduje to trwałe usunięcie twojego serwera i powiązanych danych z naszych serwerów.", "continue": "Kontynuuj" + }, + "save_restart": "Zapisz i uruchom ponownie", + "discard": "Odrzuć", + "restart_hint": "Zapisanie uruchamia serwer ponownie i rozłącza wszystkich grających.", + "map_rotation": { + "title": "Rotacja map", + "description": "Mapy, przez które przechodzi ten serwer. Startuje na pierwszej, a przy losowej kolejności na przypadkowej, a dalej plugin rotacji przejmuje głosowania na koniec mapy, rock the vote i automatyczną zmianę.", + "shuffle": "Losowo", + "shuffle_hint": "Wybieraj następną mapę losowo", + "played_by": "Obsługiwane przez {plugin}", + "no_plugin": "Nie zainstalowano pluginu rotacji map, więc serwer zostanie na pierwszej mapie.", + "install_plugin": "Zainstaluj MapChooser", + "workshop_order_hint": "MapChooser gubi swoje miejsce na liście przy mapach z warsztatu i ciągle wraca do drugiej. Przy mapach z warsztatu zostaw włączone Losowo.", + "empty": "Brak map. Dodaj mapy z katalogu albo zaimportuj kolekcję z Warsztatu Steam.", + "official": "Oficjalne", + "workshop": "Warsztat", + "add_map": "Dodaj mapę", + "add": "Dodaj", + "import_placeholder": "Link lub ID kolekcji z warsztatu", + "import": "Importuj", + "imported": "Dodane mapy z warsztatu: {count}", + "imported_skipped": "Pominięte, to nie mapy CS2: {count}", + "move_up": "Przesuń w górę", + "move_down": "Przesuń w dół", + "remove": "Usuń", + "saved": "Zapisano rotację map. Serwer uruchamia się ponownie." + }, + "plugins": { + "title": "Pluginy", + "description": "Włącz lub wyłącz plugin gry tylko dla tego serwera. Domyślnie oznacza ustawienia ładowania samego pluginu.", + "default": "Domyślnie", + "on": "Wł.", + "off": "Wył.", + "loads_by_default": "Domyślnie ładowany tutaj", + "off_by_default": "Domyślnie wyłączony tutaj", + "map_rotation": "Obsługuje rotację map", + "from_mode": "Z trybu {mode}", + "empty": "Nie zainstalowano jeszcze żadnych pluginów gry.", + "browse": "Katalog pluginów", + "saved": "Zapisano pluginy. Serwer uruchamia się ponownie." } } }, diff --git a/i18n/locales/pt_BR.json b/i18n/locales/pt_BR.json index ac4b6af34..6974e8459 100644 --- a/i18n/locales/pt_BR.json +++ b/i18n/locales/pt_BR.json @@ -3687,6 +3687,46 @@ "title": "Você tem absoluta certeza?", "description": "Esta ação é irreversível. Ela excluirá permanentemente seu servidor e removerá os dados associados de nossos servidores.", "continue": "Continuar" + }, + "save_restart": "Salvar e reiniciar", + "discard": "Descartar", + "restart_hint": "Salvar reinicia o servidor, desconectando quem estiver jogando.", + "map_rotation": { + "title": "Rotação de mapas", + "description": "Os mapas pelos quais este servidor alterna. Ele inicia no primeiro, ou em um aleatório quando embaralhado, e a partir daí o plugin de rotação cuida das votações de fim de mapa, do rock the vote e do ciclo automático.", + "shuffle": "Embaralhar", + "shuffle_hint": "Escolher o próximo mapa aleatoriamente", + "played_by": "Controlado por {plugin}", + "no_plugin": "Nenhum plugin de rotação de mapas está instalado, então o servidor ficará no primeiro mapa.", + "install_plugin": "Instalar MapChooser", + "workshop_order_hint": "O MapChooser perde sua posição na lista com mapas da oficina e sempre volta ao segundo. Mantenha Embaralhar ligado para mapas da oficina.", + "empty": "Nenhum mapa ainda. Adicione mapas do catálogo ou importe uma coleção da oficina Steam.", + "official": "Oficiais", + "workshop": "Oficina", + "add_map": "Adicionar um mapa", + "add": "Adicionar", + "import_placeholder": "Link ou ID da coleção da oficina", + "import": "Importar", + "imported": "Mapas da oficina adicionados: {count}", + "imported_skipped": "Ignorados, não são mapas de CS2: {count}", + "move_up": "Mover para cima", + "move_down": "Mover para baixo", + "remove": "Remover", + "saved": "Rotação de mapas salva. O servidor está reiniciando." + }, + "plugins": { + "title": "Plugins", + "description": "Ative ou desative um plugin de jogo apenas para este servidor. Padrão segue as configurações de carregamento do próprio plugin.", + "default": "Padrão", + "on": "Ligado", + "off": "Desligado", + "loads_by_default": "Carrega aqui por padrão", + "off_by_default": "Desligado aqui por padrão", + "map_rotation": "Controla a rotação de mapas", + "from_mode": "De {mode}", + "empty": "Nenhum plugin de jogo instalado ainda.", + "browse": "Diretório de plugins", + "saved": "Plugins salvos. O servidor está reiniciando." } } }, diff --git a/i18n/locales/ru_RU.json b/i18n/locales/ru_RU.json index c6608ce7e..1e908ab1e 100644 --- a/i18n/locales/ru_RU.json +++ b/i18n/locales/ru_RU.json @@ -3687,6 +3687,46 @@ "title": "Ты абсолютно уверен?", "description": "Это действие нельзя отменить. Сервер будет удалён безвозвратно, а связанные данные удалены с наших серверов.", "continue": "Продолжить" + }, + "save_restart": "Сохранить и перезапустить", + "discard": "Отменить", + "restart_hint": "При сохранении сервер перезапустится, и все игроки будут отключены.", + "map_rotation": { + "title": "Ротация карт", + "description": "Карты, которые сменяет этот сервер. Он запускается на первой, а при перемешивании — на случайной, дальше плагин ротации берёт на себя голосования в конце карты, rock the vote и автоматическую смену.", + "shuffle": "Перемешать", + "shuffle_hint": "Выбирать следующую карту случайно", + "played_by": "Управляет {plugin}", + "no_plugin": "Плагин ротации карт не установлен, поэтому сервер останется на первой карте.", + "install_plugin": "Установить MapChooser", + "workshop_order_hint": "MapChooser теряет своё место в списке на картах из мастерской и всё время возвращается ко второй. Для карт из мастерской оставьте «Перемешать» включённым.", + "empty": "Карт пока нет. Добавьте карты из каталога или импортируйте коллекцию из мастерской Steam.", + "official": "Официальные", + "workshop": "Мастерская", + "add_map": "Добавить карту", + "add": "Добавить", + "import_placeholder": "Ссылка или ID коллекции мастерской", + "import": "Импортировать", + "imported": "Добавлено карт из мастерской: {count}", + "imported_skipped": "Пропущено, не карты CS2: {count}", + "move_up": "Выше", + "move_down": "Ниже", + "remove": "Удалить", + "saved": "Ротация карт сохранена. Сервер перезапускается." + }, + "plugins": { + "title": "Плагины", + "description": "Включите или выключите игровой плагин только для этого сервера. «По умолчанию» следует собственным настройкам загрузки плагина.", + "default": "По умолчанию", + "on": "Вкл.", + "off": "Выкл.", + "loads_by_default": "Загружается здесь по умолчанию", + "off_by_default": "Здесь по умолчанию выключен", + "map_rotation": "Управляет ротацией карт", + "from_mode": "Из {mode}", + "empty": "Игровые плагины пока не установлены.", + "browse": "Каталог плагинов", + "saved": "Плагины сохранены. Сервер перезапускается." } } }, diff --git a/i18n/locales/sv_SE.json b/i18n/locales/sv_SE.json index 392eaab57..3b718b6f2 100644 --- a/i18n/locales/sv_SE.json +++ b/i18n/locales/sv_SE.json @@ -3687,6 +3687,46 @@ "title": "Är du helt säker?", "description": "Detta går inte att ångra. Servern tas bort permanent tillsammans med tillhörande data från våra servrar.", "continue": "Fortsätt" + }, + "save_restart": "Spara och starta om", + "discard": "Förkasta", + "restart_hint": "När du sparar startas servern om och alla som spelar kopplas från.", + "map_rotation": { + "title": "Kartrotation", + "description": "Kartorna som servern växlar mellan. Den startar på den första, eller en slumpad när blandning är på, och sedan tar rotationspluginet över med omröstningar vid kartslut, rock the vote och den automatiska växlingen.", + "shuffle": "Blanda", + "shuffle_hint": "Välj nästa karta slumpmässigt", + "played_by": "Styrs av {plugin}", + "no_plugin": "Inget plugin för kartrotation är installerat, så servern stannar på sin första karta.", + "install_plugin": "Installera MapChooser", + "workshop_order_hint": "MapChooser tappar bort sin plats i listan på workshop-kartor och återvänder alltid till den andra. Ha Blanda påslaget för workshop-kartor.", + "empty": "Inga kartor ännu. Lägg till kartor från katalogen eller importera en Steam Workshop-samling.", + "official": "Officiella", + "workshop": "Workshop", + "add_map": "Lägg till en karta", + "add": "Lägg till", + "import_placeholder": "Länk eller ID till workshop-samling", + "import": "Importera", + "imported": "Workshop-kartor tillagda: {count}", + "imported_skipped": "Överhoppade, inte CS2-kartor: {count}", + "move_up": "Flytta upp", + "move_down": "Flytta ned", + "remove": "Ta bort", + "saved": "Kartrotation sparad. Servern startas om." + }, + "plugins": { + "title": "Plugins", + "description": "Slå på eller av ett spelplugin för bara den här servern. Standard följer pluginets egna laddningsinställningar.", + "default": "Standard", + "on": "På", + "off": "Av", + "loads_by_default": "Laddas här som standard", + "off_by_default": "Av här som standard", + "map_rotation": "Styr kartrotationen", + "from_mode": "Från {mode}", + "empty": "Inga spelplugins är installerade ännu.", + "browse": "Pluginkatalog", + "saved": "Plugins sparade. Servern startas om." } } }, diff --git a/i18n/locales/tr_TR.json b/i18n/locales/tr_TR.json index 3affbfcbd..11250415e 100644 --- a/i18n/locales/tr_TR.json +++ b/i18n/locales/tr_TR.json @@ -3687,6 +3687,46 @@ "title": "Tamamen emin misin", "description": "Bu işlem geri alınamaz. Sunucun kalıcı olarak silinecek ve ilişkili veriler sunucularımızdan kaldırılacak.", "continue": "Devam et" + }, + "save_restart": "Kaydet ve Yeniden Başlat", + "discard": "Vazgeç", + "restart_hint": "Kaydetmek sunucuyu yeniden başlatır ve oynayan herkesin bağlantısını keser.", + "map_rotation": { + "title": "Harita Rotasyonu", + "description": "Bu sunucunun sırayla oynattığı haritalar. İlk haritada, karıştırma açıksa rastgele bir haritada başlar; sonrasında rotasyon eklentisi harita sonu oylamalarını, rock the vote'u ve otomatik döngüyü devralır.", + "shuffle": "Karıştır", + "shuffle_hint": "Sonraki haritayı rastgele seç", + "played_by": "{plugin} tarafından yönetiliyor", + "no_plugin": "Harita rotasyonu eklentisi kurulu değil, bu yüzden sunucu ilk haritasında kalacak.", + "install_plugin": "MapChooser'ı Kur", + "workshop_order_hint": "MapChooser atölye haritalarında listedeki yerini kaybediyor ve sürekli ikinci haritaya dönüyor. Atölye haritaları için Karıştır'ı açık tut.", + "empty": "Henüz harita yok. Katalogdan harita ekle ya da bir Steam Atölyesi koleksiyonu içe aktar.", + "official": "Resmi", + "workshop": "Atölye", + "add_map": "Harita ekle", + "add": "Ekle", + "import_placeholder": "Atölye koleksiyonu bağlantısı veya ID'si", + "import": "İçe Aktar", + "imported": "Eklenen atölye haritaları: {count}", + "imported_skipped": "Atlandı, CS2 haritası değil: {count}", + "move_up": "Yukarı Taşı", + "move_down": "Aşağı Taşı", + "remove": "Kaldır", + "saved": "Harita rotasyonu kaydedildi. Sunucu yeniden başlatılıyor." + }, + "plugins": { + "title": "Eklentiler", + "description": "Bir oyun eklentisini yalnızca bu sunucu için aç veya kapat. Varsayılan, eklentinin kendi yükleme ayarlarını izler.", + "default": "Varsayılan", + "on": "Açık", + "off": "Kapalı", + "loads_by_default": "Burada varsayılan olarak yüklenir", + "off_by_default": "Burada varsayılan olarak kapalı", + "map_rotation": "Harita rotasyonunu yönetir", + "from_mode": "{mode} modundan", + "empty": "Henüz kurulu oyun eklentisi yok.", + "browse": "Eklenti Dizini", + "saved": "Eklentiler kaydedildi. Sunucu yeniden başlatılıyor." } } }, diff --git a/i18n/locales/uk_UA.json b/i18n/locales/uk_UA.json index c6c3c6018..585878ec0 100644 --- a/i18n/locales/uk_UA.json +++ b/i18n/locales/uk_UA.json @@ -3687,6 +3687,46 @@ "title": "Ти абсолютно впевнений?", "description": "Цю дію не можна скасувати. Твій сервер буде остаточно видалено, а пов'язані дані — прибрано з наших серверів.", "continue": "Продовжити" + }, + "save_restart": "Зберегти й перезапустити", + "discard": "Скасувати", + "restart_hint": "Після збереження сервер перезапуститься, і всіх гравців буде відключено.", + "map_rotation": { + "title": "Ротація мап", + "description": "Мапи, які змінює цей сервер. Він запускається на першій, а при перемішуванні — на випадковій, далі плагін ротації бере на себе голосування наприкінці мапи, rock the vote та автоматичну зміну.", + "shuffle": "Перемішати", + "shuffle_hint": "Вибирати наступну мапу випадково", + "played_by": "Керує {plugin}", + "no_plugin": "Плагін ротації мап не встановлено, тому сервер залишиться на першій мапі.", + "install_plugin": "Встановити MapChooser", + "workshop_order_hint": "MapChooser губить своє місце у списку на мапах з майстерні й постійно повертається до другої. Для мап з майстерні залиште «Перемішати» увімкненим.", + "empty": "Мап ще немає. Додайте мапи з каталогу або імпортуйте колекцію з майстерні Steam.", + "official": "Офіційні", + "workshop": "Майстерня", + "add_map": "Додати мапу", + "add": "Додати", + "import_placeholder": "Посилання або ID колекції майстерні", + "import": "Імпортувати", + "imported": "Додано мап з майстерні: {count}", + "imported_skipped": "Пропущено, не мапи CS2: {count}", + "move_up": "Вище", + "move_down": "Нижче", + "remove": "Вилучити", + "saved": "Ротацію мап збережено. Сервер перезапускається." + }, + "plugins": { + "title": "Плагіни", + "description": "Увімкніть або вимкніть ігровий плагін лише для цього сервера. «За замовчуванням» дотримується власних налаштувань завантаження плагіна.", + "default": "За замовчуванням", + "on": "Увімк.", + "off": "Вимк.", + "loads_by_default": "Завантажується тут за замовчуванням", + "off_by_default": "Тут за замовчуванням вимкнено", + "map_rotation": "Керує ротацією мап", + "from_mode": "З {mode}", + "empty": "Ігрові плагіни ще не встановлено.", + "browse": "Каталог плагінів", + "saved": "Плагіни збережено. Сервер перезапускається." } } }, diff --git a/i18n/locales/zh_Hans.json b/i18n/locales/zh_Hans.json index fd703915d..75e86eeb2 100644 --- a/i18n/locales/zh_Hans.json +++ b/i18n/locales/zh_Hans.json @@ -3687,6 +3687,46 @@ "title": "您确定吗?", "description": "此操作无法撤销。这将永久删除您的服务器并从我们的服务器中移除相关数据。", "continue": "继续" + }, + "save_restart": "保存并重启", + "discard": "放弃", + "restart_hint": "保存后服务器会重启,正在游戏的所有人都会断开连接。", + "map_rotation": { + "title": "地图轮换", + "description": "该服务器轮流使用的地图。它会从第一张地图启动(开启随机时则随机选一张),之后由地图轮换插件负责地图结束投票、Rock the Vote 和自动轮换。", + "shuffle": "随机", + "shuffle_hint": "随机选择下一张地图", + "played_by": "由 {plugin} 管理", + "no_plugin": "未安装地图轮换插件,服务器会一直停留在第一张地图。", + "install_plugin": "安装 MapChooser", + "workshop_order_hint": "MapChooser 在创意工坊地图上会丢失它在列表中的位置,并不断回到第二张地图。使用创意工坊地图时请保持随机开启。", + "empty": "还没有地图。从地图目录添加地图,或导入 Steam 创意工坊合集。", + "official": "官方", + "workshop": "创意工坊", + "add_map": "添加地图", + "add": "添加", + "import_placeholder": "创意工坊合集链接或 ID", + "import": "导入", + "imported": "已添加创意工坊地图:{count}", + "imported_skipped": "已跳过(不是 CS2 地图):{count}", + "move_up": "上移", + "move_down": "下移", + "remove": "移除", + "saved": "地图轮换已保存,服务器正在重启。" + }, + "plugins": { + "title": "插件", + "description": "仅为此服务器开启或关闭某个游戏插件。默认遵循插件自身的加载设置。", + "default": "默认", + "on": "开启", + "off": "关闭", + "loads_by_default": "默认在此加载", + "off_by_default": "默认在此关闭", + "map_rotation": "负责地图轮换", + "from_mode": "来自 {mode}", + "empty": "尚未安装任何游戏插件。", + "browse": "插件目录", + "saved": "插件已保存,服务器正在重启。" } } }, diff --git a/i18n/locales/zh_Hant.json b/i18n/locales/zh_Hant.json index a1a258d1c..08921b599 100644 --- a/i18n/locales/zh_Hant.json +++ b/i18n/locales/zh_Hant.json @@ -3687,6 +3687,46 @@ "title": "您確定嗎?", "description": "此操作無法復原。這將永久刪除您的伺服器,並從我們的伺服器移除相關資料。", "continue": "繼續" + }, + "save_restart": "儲存並重新啟動", + "discard": "捨棄", + "restart_hint": "儲存後伺服器會重新啟動,正在遊戲中的所有人都會中斷連線。", + "map_rotation": { + "title": "地圖輪替", + "description": "此伺服器輪流使用的地圖。它會從第一張地圖啟動(開啟隨機時則隨機選一張),之後由地圖輪替外掛負責地圖結束投票、Rock the Vote 與自動輪替。", + "shuffle": "隨機", + "shuffle_hint": "隨機選擇下一張地圖", + "played_by": "由 {plugin} 管理", + "no_plugin": "未安裝地圖輪替外掛,伺服器會一直停留在第一張地圖。", + "install_plugin": "安裝 MapChooser", + "workshop_order_hint": "MapChooser 在工作坊地圖上會失去它在清單中的位置,並不斷回到第二張地圖。使用工作坊地圖時請保持隨機開啟。", + "empty": "還沒有地圖。從地圖目錄新增地圖,或匯入 Steam 工作坊合集。", + "official": "官方", + "workshop": "工作坊", + "add_map": "新增地圖", + "add": "新增", + "import_placeholder": "工作坊合集連結或 ID", + "import": "匯入", + "imported": "已新增工作坊地圖:{count}", + "imported_skipped": "已略過(不是 CS2 地圖):{count}", + "move_up": "上移", + "move_down": "下移", + "remove": "移除", + "saved": "地圖輪替已儲存,伺服器正在重新啟動。" + }, + "plugins": { + "title": "外掛", + "description": "僅為此伺服器開啟或關閉某個遊戲外掛。預設會遵循外掛本身的載入設定。", + "default": "預設", + "on": "開啟", + "off": "關閉", + "loads_by_default": "預設在此載入", + "off_by_default": "預設在此關閉", + "map_rotation": "負責地圖輪替", + "from_mode": "來自 {mode}", + "empty": "尚未安裝任何遊戲外掛。", + "browse": "外掛目錄", + "saved": "外掛已儲存,伺服器正在重新啟動。" } } }, diff --git a/pages/dedicated-servers/[id].vue b/pages/dedicated-servers/[id].vue index 451b02265..be98f333c 100644 --- a/pages/dedicated-servers/[id].vue +++ b/pages/dedicated-servers/[id].vue @@ -38,6 +38,8 @@ import { ref, computed } from "vue"; import ServerForm from "~/components/servers/ServerForm.vue"; import RconCommander from "~/components/servers/RconCommander.vue"; import ServerPlayerManagement from "~/components/servers/ServerPlayerManagement.vue"; +import ServerMapRotation from "~/components/servers/ServerMapRotation.vue"; +import ServerPlugins from "~/components/servers/ServerPlugins.vue"; import { Eye, EyeOff } from "lucide-vue-next"; import Clipboard from "~/components/ClipBoard.vue"; import ServerStatus from "~/components/servers/ServerStatus.vue"; @@ -239,6 +241,16 @@ const titleClasses = + +