reaper-arcade-hub 2.0.4 → 2.0.5

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.
Files changed (3) hide show
  1. package/js/app.js +19 -12
  2. package/main/js/app.js +19 -12
  3. package/package.json +2 -2
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
- if (this.leaderboardData.length === 0) {
769
- this.leaderboardData = [
770
- { username: this.currentUser.username, seconds: this.playtimeSeconds, rank: this.currentUser.rank }
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 = this.leaderboardData.map(u => {
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 || 'User')}</strong>
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
- this.leaderboardData = Object.values(val);
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
- if (this.leaderboardData.length === 0) {
1180
- this.leaderboardData = [
1181
- { username: this.currentUser.username, seconds: this.playtimeSeconds, rank: this.currentUser.rank }
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 = this.leaderboardData.slice(0, 20).map((player, idx) => {
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;
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
- if (this.leaderboardData.length === 0) {
769
- this.leaderboardData = [
770
- { username: this.currentUser.username, seconds: this.playtimeSeconds, rank: this.currentUser.rank }
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 = this.leaderboardData.map(u => {
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 || 'User')}</strong>
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
- this.leaderboardData = Object.values(val);
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
- if (this.leaderboardData.length === 0) {
1180
- this.leaderboardData = [
1181
- { username: this.currentUser.username, seconds: this.playtimeSeconds, rank: this.currentUser.rank }
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 = this.leaderboardData.slice(0, 20).map((player, idx) => {
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;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reaper-arcade-hub",
3
- "version": "2.0.4",
4
- "description": "Reaper Hub - Full High-Speed Arcade Engine (788 Games), Security Shield, HWID Gateway, Realtime Chat & DMs, Playtime Leaderboard & Working Game Launcher",
3
+ "version": "2.0.5",
4
+ "description": "Reaper Hub - Cleaned Admin Directory & Leaderboard, 788 Games, Security Shield, Gateway Key System, Realtime Chat & Working Game Engine",
5
5
  "main": "main/index.html",
6
6
  "unpkg": "main/index.html",
7
7
  "jsdelivr": "main/index.html",