reaper-arcade-hub 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/styles.css +14 -13
- package/js/app.js +30 -31
- package/main/css/styles.css +14 -13
- package/main/js/app.js +30 -31
- package/package.json +2 -2
- package/verify/css/styles.css +14 -13
package/css/styles.css
CHANGED
|
@@ -936,13 +936,13 @@ body {
|
|
|
936
936
|
|
|
937
937
|
.game-player-modal {
|
|
938
938
|
display: none;
|
|
939
|
-
position: fixed;
|
|
940
|
-
inset: 0;
|
|
941
|
-
width: 100vw;
|
|
942
|
-
height: 100vh;
|
|
943
|
-
background: #000;
|
|
944
|
-
z-index:
|
|
945
|
-
flex-direction: column;
|
|
939
|
+
position: fixed !important;
|
|
940
|
+
inset: 0 !important;
|
|
941
|
+
width: 100vw !important;
|
|
942
|
+
height: 100vh !important;
|
|
943
|
+
background: #000 !important;
|
|
944
|
+
z-index: 9999999 !important;
|
|
945
|
+
flex-direction: column !important;
|
|
946
946
|
}
|
|
947
947
|
|
|
948
948
|
.player-toolbar {
|
|
@@ -953,6 +953,7 @@ body {
|
|
|
953
953
|
align-items: center;
|
|
954
954
|
justify-content: space-between;
|
|
955
955
|
padding: 0 1.25rem;
|
|
956
|
+
z-index: 10;
|
|
956
957
|
}
|
|
957
958
|
|
|
958
959
|
.player-frame-wrapper {
|
|
@@ -968,12 +969,12 @@ body {
|
|
|
968
969
|
}
|
|
969
970
|
|
|
970
971
|
.player-iframe {
|
|
971
|
-
width: 100
|
|
972
|
-
height: 100
|
|
973
|
-
border: none;
|
|
974
|
-
display: block;
|
|
975
|
-
background: #000;
|
|
976
|
-
outline: none;
|
|
972
|
+
width: 100% !important;
|
|
973
|
+
height: 100% !important;
|
|
974
|
+
border: none !important;
|
|
975
|
+
display: block !important;
|
|
976
|
+
background: #000 !important;
|
|
977
|
+
outline: none !important;
|
|
977
978
|
}
|
|
978
979
|
|
|
979
980
|
.reaper-watermark {
|
package/js/app.js
CHANGED
|
@@ -765,13 +765,14 @@ class ReaperHubApp {
|
|
|
765
765
|
const container = document.getElementById('admin-users-directory');
|
|
766
766
|
if (!container) return;
|
|
767
767
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
768
|
+
const validUsers = (this.leaderboardData || []).filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon');
|
|
769
|
+
|
|
770
|
+
if (validUsers.length === 0) {
|
|
771
|
+
container.innerHTML = `<div style="text-align: center; color: #88aacc; padding: 1.5rem; font-size: 0.82rem;">No other users active yet.</div>`;
|
|
772
|
+
return;
|
|
772
773
|
}
|
|
773
774
|
|
|
774
|
-
container.innerHTML =
|
|
775
|
+
container.innerHTML = validUsers.map(u => {
|
|
775
776
|
const isSelf = u.username === this.currentUser.username;
|
|
776
777
|
const currentRank = (u.rank || 'member').toLowerCase();
|
|
777
778
|
const timeStr = this.formatPlaytime(u.seconds || 0);
|
|
@@ -779,7 +780,7 @@ class ReaperHubApp {
|
|
|
779
780
|
return `
|
|
780
781
|
<div style="display: flex; justify-content: space-between; align-items: center; background: #041022; padding: 0.45rem 0.75rem; border-radius: 6px; border: 1px solid var(--blue-border); font-size: 0.8rem;">
|
|
781
782
|
<div>
|
|
782
|
-
<strong style="color: #fff;" class="${currentRank === 'owner' ? 'owner-animated-name' : ''}">${this.escapeHtml(u.username
|
|
783
|
+
<strong style="color: #fff;" class="${currentRank === 'owner' ? 'owner-animated-name' : ''}">${this.escapeHtml(u.username)}</strong>
|
|
783
784
|
<span class="rank-pill rank-${currentRank}">${currentRank.toUpperCase()}</span>
|
|
784
785
|
<span style="color: #88ccff; margin-left: 0.5rem;">Playtime: ${timeStr}</span>
|
|
785
786
|
</div>
|
|
@@ -1143,7 +1144,8 @@ class ReaperHubApp {
|
|
|
1143
1144
|
window.reaperFirebase.db.ref("reaperPlaytime").on("value", (snap) => {
|
|
1144
1145
|
const val = snap.val();
|
|
1145
1146
|
if (val) {
|
|
1146
|
-
|
|
1147
|
+
const raw = Object.values(val);
|
|
1148
|
+
this.leaderboardData = raw.filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon' && (u.seconds || 0) > 0);
|
|
1147
1149
|
this.leaderboardData.sort((a, b) => (b.seconds || 0) - (a.seconds || 0));
|
|
1148
1150
|
} else {
|
|
1149
1151
|
this.leaderboardData = [
|
|
@@ -1176,13 +1178,18 @@ class ReaperHubApp {
|
|
|
1176
1178
|
const container = document.getElementById('leaderboard-rows-container');
|
|
1177
1179
|
if (!container) return;
|
|
1178
1180
|
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1181
|
+
const validUsers = (this.leaderboardData || []).filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon');
|
|
1182
|
+
|
|
1183
|
+
if (validUsers.length === 0) {
|
|
1184
|
+
container.innerHTML = `
|
|
1185
|
+
<div style="text-align: center; color: #88aacc; padding: 2rem; font-size: 0.85rem;">
|
|
1186
|
+
No active leaderboard entries yet. Play games to earn your ranking!
|
|
1187
|
+
</div>
|
|
1188
|
+
`;
|
|
1189
|
+
return;
|
|
1183
1190
|
}
|
|
1184
1191
|
|
|
1185
|
-
container.innerHTML =
|
|
1192
|
+
container.innerHTML = validUsers.slice(0, 20).map((player, idx) => {
|
|
1186
1193
|
const rankNum = idx + 1;
|
|
1187
1194
|
const timeStr = this.formatPlaytime(player.seconds || 0);
|
|
1188
1195
|
const isSelf = player.username === this.currentUser.username;
|
|
@@ -1890,9 +1897,9 @@ class ReaperHubApp {
|
|
|
1890
1897
|
const cleanId = String(gameId).trim();
|
|
1891
1898
|
const game = this.games.find(g => String(g.id) === cleanId || Number(g.id) === Number(cleanId)) ||
|
|
1892
1899
|
this.games.find(g => g.name && String(g.name).toLowerCase() === cleanId.toLowerCase()) ||
|
|
1893
|
-
this.games.find(g => g.url && String(g.url).toLowerCase().includes(cleanId.toLowerCase()))
|
|
1900
|
+
this.games.find(g => g.url && String(g.url).toLowerCase().includes(cleanId.toLowerCase())) ||
|
|
1901
|
+
this.games[0];
|
|
1894
1902
|
if (!game) {
|
|
1895
|
-
console.warn("[REAPER] Game not found for identifier:", gameId);
|
|
1896
1903
|
this.showToast("Could not find requested game.");
|
|
1897
1904
|
return;
|
|
1898
1905
|
}
|
|
@@ -1912,9 +1919,10 @@ class ReaperHubApp {
|
|
|
1912
1919
|
|
|
1913
1920
|
if (modal && iframe) {
|
|
1914
1921
|
if (nameEl) nameEl.textContent = game.name;
|
|
1915
|
-
if (statusBadge) statusBadge.textContent = '
|
|
1922
|
+
if (statusBadge) statusBadge.textContent = 'ONLINE (60 FPS)';
|
|
1916
1923
|
|
|
1917
|
-
modal.style.display
|
|
1924
|
+
modal.style.setProperty('display', 'flex', 'important');
|
|
1925
|
+
modal.style.setProperty('z-index', '9999999', 'important');
|
|
1918
1926
|
document.body.style.overflow = 'hidden';
|
|
1919
1927
|
|
|
1920
1928
|
this.isPlayingGame = true;
|
|
@@ -1926,21 +1934,12 @@ class ReaperHubApp {
|
|
|
1926
1934
|
iframe.removeAttribute('srcdoc');
|
|
1927
1935
|
iframe.src = `https://raw.githack.com/gn-math/html/main/${filename}`;
|
|
1928
1936
|
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
if (statusBadge) statusBadge.textContent = 'ONLINE (60 FPS)';
|
|
1936
|
-
return;
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
|
-
} catch (err) {
|
|
1940
|
-
console.warn("Direct fetch fallback:", err);
|
|
1941
|
-
}
|
|
1942
|
-
|
|
1943
|
-
if (statusBadge) statusBadge.textContent = 'ONLINE';
|
|
1937
|
+
setTimeout(() => {
|
|
1938
|
+
try {
|
|
1939
|
+
iframe.focus();
|
|
1940
|
+
if (iframe.contentWindow) iframe.contentWindow.focus();
|
|
1941
|
+
} catch (e) {}
|
|
1942
|
+
}, 300);
|
|
1944
1943
|
}
|
|
1945
1944
|
}
|
|
1946
1945
|
|
package/main/css/styles.css
CHANGED
|
@@ -936,13 +936,13 @@ body {
|
|
|
936
936
|
|
|
937
937
|
.game-player-modal {
|
|
938
938
|
display: none;
|
|
939
|
-
position: fixed;
|
|
940
|
-
inset: 0;
|
|
941
|
-
width: 100vw;
|
|
942
|
-
height: 100vh;
|
|
943
|
-
background: #000;
|
|
944
|
-
z-index:
|
|
945
|
-
flex-direction: column;
|
|
939
|
+
position: fixed !important;
|
|
940
|
+
inset: 0 !important;
|
|
941
|
+
width: 100vw !important;
|
|
942
|
+
height: 100vh !important;
|
|
943
|
+
background: #000 !important;
|
|
944
|
+
z-index: 9999999 !important;
|
|
945
|
+
flex-direction: column !important;
|
|
946
946
|
}
|
|
947
947
|
|
|
948
948
|
.player-toolbar {
|
|
@@ -953,6 +953,7 @@ body {
|
|
|
953
953
|
align-items: center;
|
|
954
954
|
justify-content: space-between;
|
|
955
955
|
padding: 0 1.25rem;
|
|
956
|
+
z-index: 10;
|
|
956
957
|
}
|
|
957
958
|
|
|
958
959
|
.player-frame-wrapper {
|
|
@@ -968,12 +969,12 @@ body {
|
|
|
968
969
|
}
|
|
969
970
|
|
|
970
971
|
.player-iframe {
|
|
971
|
-
width: 100
|
|
972
|
-
height: 100
|
|
973
|
-
border: none;
|
|
974
|
-
display: block;
|
|
975
|
-
background: #000;
|
|
976
|
-
outline: none;
|
|
972
|
+
width: 100% !important;
|
|
973
|
+
height: 100% !important;
|
|
974
|
+
border: none !important;
|
|
975
|
+
display: block !important;
|
|
976
|
+
background: #000 !important;
|
|
977
|
+
outline: none !important;
|
|
977
978
|
}
|
|
978
979
|
|
|
979
980
|
.reaper-watermark {
|
package/main/js/app.js
CHANGED
|
@@ -765,13 +765,14 @@ class ReaperHubApp {
|
|
|
765
765
|
const container = document.getElementById('admin-users-directory');
|
|
766
766
|
if (!container) return;
|
|
767
767
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
768
|
+
const validUsers = (this.leaderboardData || []).filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon');
|
|
769
|
+
|
|
770
|
+
if (validUsers.length === 0) {
|
|
771
|
+
container.innerHTML = `<div style="text-align: center; color: #88aacc; padding: 1.5rem; font-size: 0.82rem;">No other users active yet.</div>`;
|
|
772
|
+
return;
|
|
772
773
|
}
|
|
773
774
|
|
|
774
|
-
container.innerHTML =
|
|
775
|
+
container.innerHTML = validUsers.map(u => {
|
|
775
776
|
const isSelf = u.username === this.currentUser.username;
|
|
776
777
|
const currentRank = (u.rank || 'member').toLowerCase();
|
|
777
778
|
const timeStr = this.formatPlaytime(u.seconds || 0);
|
|
@@ -779,7 +780,7 @@ class ReaperHubApp {
|
|
|
779
780
|
return `
|
|
780
781
|
<div style="display: flex; justify-content: space-between; align-items: center; background: #041022; padding: 0.45rem 0.75rem; border-radius: 6px; border: 1px solid var(--blue-border); font-size: 0.8rem;">
|
|
781
782
|
<div>
|
|
782
|
-
<strong style="color: #fff;" class="${currentRank === 'owner' ? 'owner-animated-name' : ''}">${this.escapeHtml(u.username
|
|
783
|
+
<strong style="color: #fff;" class="${currentRank === 'owner' ? 'owner-animated-name' : ''}">${this.escapeHtml(u.username)}</strong>
|
|
783
784
|
<span class="rank-pill rank-${currentRank}">${currentRank.toUpperCase()}</span>
|
|
784
785
|
<span style="color: #88ccff; margin-left: 0.5rem;">Playtime: ${timeStr}</span>
|
|
785
786
|
</div>
|
|
@@ -1143,7 +1144,8 @@ class ReaperHubApp {
|
|
|
1143
1144
|
window.reaperFirebase.db.ref("reaperPlaytime").on("value", (snap) => {
|
|
1144
1145
|
const val = snap.val();
|
|
1145
1146
|
if (val) {
|
|
1146
|
-
|
|
1147
|
+
const raw = Object.values(val);
|
|
1148
|
+
this.leaderboardData = raw.filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon' && (u.seconds || 0) > 0);
|
|
1147
1149
|
this.leaderboardData.sort((a, b) => (b.seconds || 0) - (a.seconds || 0));
|
|
1148
1150
|
} else {
|
|
1149
1151
|
this.leaderboardData = [
|
|
@@ -1176,13 +1178,18 @@ class ReaperHubApp {
|
|
|
1176
1178
|
const container = document.getElementById('leaderboard-rows-container');
|
|
1177
1179
|
if (!container) return;
|
|
1178
1180
|
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1181
|
+
const validUsers = (this.leaderboardData || []).filter(u => u && u.username && u.username.toLowerCase() !== 'user' && u.username.toLowerCase() !== 'anon');
|
|
1182
|
+
|
|
1183
|
+
if (validUsers.length === 0) {
|
|
1184
|
+
container.innerHTML = `
|
|
1185
|
+
<div style="text-align: center; color: #88aacc; padding: 2rem; font-size: 0.85rem;">
|
|
1186
|
+
No active leaderboard entries yet. Play games to earn your ranking!
|
|
1187
|
+
</div>
|
|
1188
|
+
`;
|
|
1189
|
+
return;
|
|
1183
1190
|
}
|
|
1184
1191
|
|
|
1185
|
-
container.innerHTML =
|
|
1192
|
+
container.innerHTML = validUsers.slice(0, 20).map((player, idx) => {
|
|
1186
1193
|
const rankNum = idx + 1;
|
|
1187
1194
|
const timeStr = this.formatPlaytime(player.seconds || 0);
|
|
1188
1195
|
const isSelf = player.username === this.currentUser.username;
|
|
@@ -1890,9 +1897,9 @@ class ReaperHubApp {
|
|
|
1890
1897
|
const cleanId = String(gameId).trim();
|
|
1891
1898
|
const game = this.games.find(g => String(g.id) === cleanId || Number(g.id) === Number(cleanId)) ||
|
|
1892
1899
|
this.games.find(g => g.name && String(g.name).toLowerCase() === cleanId.toLowerCase()) ||
|
|
1893
|
-
this.games.find(g => g.url && String(g.url).toLowerCase().includes(cleanId.toLowerCase()))
|
|
1900
|
+
this.games.find(g => g.url && String(g.url).toLowerCase().includes(cleanId.toLowerCase())) ||
|
|
1901
|
+
this.games[0];
|
|
1894
1902
|
if (!game) {
|
|
1895
|
-
console.warn("[REAPER] Game not found for identifier:", gameId);
|
|
1896
1903
|
this.showToast("Could not find requested game.");
|
|
1897
1904
|
return;
|
|
1898
1905
|
}
|
|
@@ -1912,9 +1919,10 @@ class ReaperHubApp {
|
|
|
1912
1919
|
|
|
1913
1920
|
if (modal && iframe) {
|
|
1914
1921
|
if (nameEl) nameEl.textContent = game.name;
|
|
1915
|
-
if (statusBadge) statusBadge.textContent = '
|
|
1922
|
+
if (statusBadge) statusBadge.textContent = 'ONLINE (60 FPS)';
|
|
1916
1923
|
|
|
1917
|
-
modal.style.display
|
|
1924
|
+
modal.style.setProperty('display', 'flex', 'important');
|
|
1925
|
+
modal.style.setProperty('z-index', '9999999', 'important');
|
|
1918
1926
|
document.body.style.overflow = 'hidden';
|
|
1919
1927
|
|
|
1920
1928
|
this.isPlayingGame = true;
|
|
@@ -1926,21 +1934,12 @@ class ReaperHubApp {
|
|
|
1926
1934
|
iframe.removeAttribute('srcdoc');
|
|
1927
1935
|
iframe.src = `https://raw.githack.com/gn-math/html/main/${filename}`;
|
|
1928
1936
|
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
if (statusBadge) statusBadge.textContent = 'ONLINE (60 FPS)';
|
|
1936
|
-
return;
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
|
-
} catch (err) {
|
|
1940
|
-
console.warn("Direct fetch fallback:", err);
|
|
1941
|
-
}
|
|
1942
|
-
|
|
1943
|
-
if (statusBadge) statusBadge.textContent = 'ONLINE';
|
|
1937
|
+
setTimeout(() => {
|
|
1938
|
+
try {
|
|
1939
|
+
iframe.focus();
|
|
1940
|
+
if (iframe.contentWindow) iframe.contentWindow.focus();
|
|
1941
|
+
} catch (e) {}
|
|
1942
|
+
}, 300);
|
|
1944
1943
|
}
|
|
1945
1944
|
}
|
|
1946
1945
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reaper-arcade-hub",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "Reaper Hub -
|
|
3
|
+
"version": "2.0.6",
|
|
4
|
+
"description": "Reaper Hub - High-Speed 788-Game Arcade Engine, Direct CDN Boot, 60 FPS Focus, Security Shield, HWID Gateway & Realtime Chat",
|
|
5
5
|
"main": "main/index.html",
|
|
6
6
|
"unpkg": "main/index.html",
|
|
7
7
|
"jsdelivr": "main/index.html",
|
package/verify/css/styles.css
CHANGED
|
@@ -936,13 +936,13 @@ body {
|
|
|
936
936
|
|
|
937
937
|
.game-player-modal {
|
|
938
938
|
display: none;
|
|
939
|
-
position: fixed;
|
|
940
|
-
inset: 0;
|
|
941
|
-
width: 100vw;
|
|
942
|
-
height: 100vh;
|
|
943
|
-
background: #000;
|
|
944
|
-
z-index:
|
|
945
|
-
flex-direction: column;
|
|
939
|
+
position: fixed !important;
|
|
940
|
+
inset: 0 !important;
|
|
941
|
+
width: 100vw !important;
|
|
942
|
+
height: 100vh !important;
|
|
943
|
+
background: #000 !important;
|
|
944
|
+
z-index: 9999999 !important;
|
|
945
|
+
flex-direction: column !important;
|
|
946
946
|
}
|
|
947
947
|
|
|
948
948
|
.player-toolbar {
|
|
@@ -953,6 +953,7 @@ body {
|
|
|
953
953
|
align-items: center;
|
|
954
954
|
justify-content: space-between;
|
|
955
955
|
padding: 0 1.25rem;
|
|
956
|
+
z-index: 10;
|
|
956
957
|
}
|
|
957
958
|
|
|
958
959
|
.player-frame-wrapper {
|
|
@@ -968,12 +969,12 @@ body {
|
|
|
968
969
|
}
|
|
969
970
|
|
|
970
971
|
.player-iframe {
|
|
971
|
-
width: 100
|
|
972
|
-
height: 100
|
|
973
|
-
border: none;
|
|
974
|
-
display: block;
|
|
975
|
-
background: #000;
|
|
976
|
-
outline: none;
|
|
972
|
+
width: 100% !important;
|
|
973
|
+
height: 100% !important;
|
|
974
|
+
border: none !important;
|
|
975
|
+
display: block !important;
|
|
976
|
+
background: #000 !important;
|
|
977
|
+
outline: none !important;
|
|
977
978
|
}
|
|
978
979
|
|
|
979
980
|
.reaper-watermark {
|