diff --git a/index.php b/index.php index 15635fb4..9a3ddfde 100644 --- a/index.php +++ b/index.php @@ -2184,6 +2184,7 @@ class="joystickBase" />
+ diff --git a/lang/ar.json b/lang/ar.json index 8554e413..56520b9a 100644 --- a/lang/ar.json +++ b/lang/ar.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/de.json b/lang/de.json index ee816b55..5b421add 100644 --- a/lang/de.json +++ b/lang/de.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Mit der Erlaubnis der Entwickler gehostet", - "originalCreation": "Originales Projekt der YNOproject Community" + "originalCreation": "Originales Projekt der YNOproject Community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/en.json b/lang/en.json index c5bfa77f..974c2e8e 100644 --- a/lang/en.json +++ b/lang/en.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/eo.json b/lang/eo.json index 1314c99f..b5e82790 100644 --- a/lang/eo.json +++ b/lang/eo.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/es.json b/lang/es.json index 176fc4f2..4094300a 100644 --- a/lang/es.json +++ b/lang/es.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Aprovación pendiente del desarrollador/editor", "hostedWithPermission": "Alojado con la autorización de su(s) desarrollador(es)", - "originalCreation": "Creación original por la comunidad de YNOproject" + "originalCreation": "Creación original por la comunidad de YNOproject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/fr.json b/lang/fr.json index 218ba2bd..8d24f00f 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "En attente d'approuvement du développeur/éditeur", "hostedWithPermission": "Hébergé avec la permission du/des développeur(s)", - "originalCreation": "Création originale de la communauté YNOproject" + "originalCreation": "Création originale de la communauté YNOproject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/id.json b/lang/id.json index 909eeb70..6c0a79f3 100644 --- a/lang/id.json +++ b/lang/id.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Dihost dengan izin dari para pembuat Yume 2kki", - "originalCreation": "Kreasi orisinal dari komunitas YNOproject" + "originalCreation": "Kreasi orisinal dari komunitas YNOproject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/it.json b/lang/it.json index 31e55cc7..fa570f47 100644 --- a/lang/it.json +++ b/lang/it.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/ja.json b/lang/ja.json index 3bfcc4f4..ecbde8c0 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "開発者/配信元の承認待ち", "hostedWithPermission": "開発者の許可を得て掲載しています", - "originalCreation": "YNOprojectのコミュニティによるオリジナルの作品" + "originalCreation": "YNOprojectのコミュニティによるオリジナルの作品", + "gameEndDate": "この作品はYNOprojectで{{date}}までプレイ可能です" }, "modal": { "common": { diff --git a/lang/ko.json b/lang/ko.json index b543008e..e99aacba 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "개발자/배급사의 승인 대기 중에 있습니다.", "hostedWithPermission": "개발진들의 허가를 받아 운영하고 있습니다.", - "originalCreation": "YNOproject 커뮤니티에 의해 개발되었습니다." + "originalCreation": "YNOproject 커뮤니티에 의해 개발되었습니다.", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/pl.json b/lang/pl.json index 51b449f9..1f4ed1e2 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/pt.json b/lang/pt.json index 3d796c55..4260002b 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hospedados com a permissão do(s) desenvolvedor(es)", - "originalCreation": "Criação original pela comunidade do YNOproject" + "originalCreation": "Criação original pela comunidade do YNOproject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/ro.json b/lang/ro.json index 2e0f1c3c..087626c3 100644 --- a/lang/ro.json +++ b/lang/ro.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Se așteaptă aprobarea de la dezvoltator/editor", "hostedWithPermission": "Găzduit cu permisiunea dezvoltatorului/ilor", - "originalCreation": "Creație originală de comunitatea YNOProject" + "originalCreation": "Creație originală de comunitatea YNOProject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/ru.json b/lang/ru.json index ae24bc55..5e2d6b18 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/tr.json b/lang/tr.json index 926db3b2..5b8e018c 100644 --- a/lang/tr.json +++ b/lang/tr.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Yapımcı(lar) tarafından izin alınarak kullanılmıştır", - "originalCreation": "YNOproject komünitesi tarafından orijinal yapımdır" + "originalCreation": "YNOproject komünitesi tarafından orijinal yapımdır", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/uk.json b/lang/uk.json index 1ae3e905..d65b6d70 100644 --- a/lang/uk.json +++ b/lang/uk.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Очікується схвалення від розробника / видавця", "hostedWithPermission": "Розміщено з дозволу розробників", - "originalCreation": "Власна розробка спільноти YNOproject" + "originalCreation": "Власна розробка спільноти YNOproject", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/vi.json b/lang/vi.json index 7bb47d14..c976ca2b 100644 --- a/lang/vi.json +++ b/lang/vi.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/lang/zh.json b/lang/zh.json index f6f06705..76e0b6a5 100644 --- a/lang/zh.json +++ b/lang/zh.json @@ -69,7 +69,8 @@ "disclaimer": { "pendingApproval": "Pending approval from developer/publisher", "hostedWithPermission": "Hosted with permission from the developer(s)", - "originalCreation": "Original creation by the YNOproject community" + "originalCreation": "Original creation by the YNOproject community", + "gameEndDate": "Available to play on YNOproject until {{date}}" }, "modal": { "common": { diff --git a/system.js b/system.js index a83aa29c..c493cbbf 100644 --- a/system.js +++ b/system.js @@ -410,6 +410,10 @@ const gameLogoBlendModeOverrides = { 'unevendream': 'color' }; +const gameEndDates = { + 'unconscious': Date.UTC(2025, 11, 28, 5, 0) +}; + const contrastRatioThreshold = 2.02; function setSystemName(name) { @@ -1142,3 +1146,60 @@ function hueToRGBA(h, a) { } return getColorRgba([Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a]); } + +function displayGameEndDate() { + try { + const endDateUTC = gameEndDates[gameId]; + if (!endDateUTC) return; + + const endDateElement = document.getElementById('gameEndDate'); + if (!endDateElement) return; + const now = new Date(); + + if (now.getTime() >= endDateUTC) { + endDateElement.remove(); + return; + } + const localDate = new Date(endDateUTC); + const year = localDate.getFullYear(); + const month = String(localDate.getMonth() + 1).padStart(2, '0'); + const date = String(localDate.getDate()).padStart(2, '0'); + const hours = String(localDate.getHours()).padStart(2, '0'); + const minutes = String(localDate.getMinutes()).padStart(2, '0'); + + const locale = i18next.language === 'ja' ? 'ja-JP' : 'en-US'; + const weekday = localDate.toLocaleDateString(locale, { weekday: 'short' }); + + const dateStr = `${year}/${month}/${date} (${weekday}) ${hours}:${minutes}`; + const translatedText = i18next.t('disclaimer.gameEndDate', { date: dateStr }); + + endDateElement.innerHTML = translatedText; + endDateElement.style.display = 'block'; + } catch (error) { + console.error('Error displaying game end date:', error); + } +} + +if (gameEndDates[gameId]) { + if (typeof i18next !== 'undefined' && i18next.isInitialized) { + displayGameEndDate(); + } else { + document.addEventListener('DOMContentLoaded', function() { + let attempts = 0; + const maxAttempts = 50; + const checkI18next = setInterval(function() { + attempts++; + if (typeof i18next !== 'undefined' && i18next.isInitialized) { + clearInterval(checkI18next); + displayGameEndDate(); + } else if (attempts >= maxAttempts) { + clearInterval(checkI18next); + } + }, 100); + }); + } + + if (typeof i18next !== 'undefined') { + i18next.on('languageChanged', displayGameEndDate); + } +} \ No newline at end of file