feat: Initial commit Plants vs Zombies Web Edition v2.4

- 5 Biomes: Day, Night, Pool, Fog, Roof (25 Campaign levels)
- Minigames: Wall-nut Bowling, I Zombie, Roguelike, Boss Rush & Dr. Zomboss
- Systems: Zen Garden, Workshop Crafting, Almanac, Tree of Wisdom, Achievements
- Backend: REST API + SQLite Accounts & Save Synchronization
- Infrastructure: Nginx HTTPS & Docker deployment
This commit is contained in:
Antigravity committed 2026-09-17 09:30:52 +00:00
commit 6457a8904e
50 files changed
+14486

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env python3
"""
CLI Tool to list, inspect, and manage registered users in Plants vs. Zombies database.
Usage:
python3 scripts/manage_users.py # List all registered users in a formatted table
python3 scripts/manage_users.py <user> # Show detailed full JSON profile for a specific user
"""
import sys
import json
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, "scripts"))
import db
def print_user_table(users):
if not users:
print("\nВ базе данных пока нет зарегистрированных пользователей.")
print("Чтобы зарегистрироваться, откройте игру на https://ai.qpid.pro/ и нажмите кнопку «Войти».\n")
return
print("\n" + "=" * 90)
print(f"{'ID':<4} | {'Имя пользователя':<18} | {'Монеты':<8} | {'Уровень':<8} | {'Макс Ур':<8} | {'Рекорд':<8} | {'Создан':<19}")
print("-" * 90)
for u in users:
print(f"{u['id']:<4} | {u['username']:<18} | {u['coins']:<8} | {u['level']:<8} | {u['maxUnlockedLevel']:<8} | {u['highScore']:<8} | {u['createdAt']:<19}")
print("=" * 90)
print(f"Всего зарегистрировано пользователей: {len(users)}\n")
def print_user_detail(username):
users = db.list_all_users()
target = next((u for u in users if u["username"].lower() == username.lower()), None)
if not target:
print(f"\nПользователь '{username}' не найден в базе данных.\n")
return
print("\n" + "=" * 60)
print(f" Профиль пользователя: {target['username']} (ID: {target['id']})")
print("=" * 60)
print(f" Дата регистрации: {target['createdAt']}")
print(f" Последний вход: {target['lastLogin']}")
print(f" Текущий уровень: {target['level']}")
print(f" Макс. открытый: {target['maxUnlockedLevel']}")
print(f" Всего монет: {target['coins']}")
print(f" Рекорд очков: {target['highScore']}")
print(f" Тема оформления: {target['theme']}")
print("-" * 60)
print(" Материалы мастерской:")
for mat, count in target['materials'].items():
print(f" - {mat}: {count}")
print("-" * 60)
print(" Уровни растений:")
for plant, lvl in target['plantLevels'].items():
print(f" - {plant}: Уровень {lvl}")
print("-" * 60)
print(" Перки:")
for perk, lvl in target['perks'].items():
print(f" - {perk}: Уровень {lvl}")
print("-" * 60)
print(" Дерево Мудрости:")
print(f" - Высота: {target['treeOfWisdom'].get('height', 0)} футов")
print("=" * 60 + "\n")
if __name__ == "__main__":
db.init_db()
if len(sys.argv) > 1:
print_user_detail(sys.argv[1])
else:
users = db.list_all_users()
print_user_table(users)