Technische Referenz

Level & XP System

Das Account-weite Progressions-System auf kalterkaktus.de. Jeder eingeloggte Spieler sammelt XP über alle Spiele hinweg, schaltet Level-Milestones frei und kann Badges einem Profil zuweisen die auf Leaderboards sichtbar sind.

Stand: 25.05.2026 Level-Cap: 9.999

Übersicht

  • 1 Account, 1 Level — XP über alle Spiele hinweg gemeinsam.
  • Cap bei Level 9.999 — Lvl 100 ist nur ein Milestone, kein Ende.
  • 10 Badges — 4 Level-Auto-Awards, plus manuelle/spezielle Trigger.
  • 1 Badge gleichzeitig sichtbar — wählbar im Profil, erscheint neben dem Namen auf Leaderboards + Nav.
  • VIP-Bonus +20 % XP-Boost, eigene Namensfarbe.
  • Referral-System belohnt Werber sobald geworbener Freund Lvl 5 erreicht.

Level-Formel

XP_to_reach(N) = N² × 8
level(xp)      = floor(sqrt(xp / 8))
LEVEL_CAP      = 9999

Quadratische Skalierung — frühe Level kommen schnell, spätere brauchen exponentiell mehr Aufwand. Server (Supabase RPC add_xp) schreibt rohe XP, Client und DB-View profiles_public cappen das Level beim Lesen auf 9.999.

LevelTotal XP nötigXP-Diff zum Vorlevel
188
520072
10800152
255.000392
5020.000792
7545.0001.192
10080.0001.592
250500.0003.992
5002.000.0007.992
1.0008.000.00015.992
5.000200.000.00079.992
9.999799.840.008159.984

XP-Quellen

Alle Werte gelten ohne VIP-Boost. VIP multipliziert jede Quelle mit ×1,2.

My Fishing Kaktus — Fang-XP

Bei jedem gefangenen Fisch nach Rarity, plus Mutations-Bonus.

RarityBasis-XP
Common1
Uncommon3
Rare10
Epic30
Legendary100

Mutations-Bonus (oben drauf)

Nur Mutationen ab ×3 geben Bonus-XP — Standard-Wetter-Mutationen (SUNNY/WET/STORMY/MISTY/NOCTURNAL ×2) sowie BIG/HUGE zählen nicht.

MutationBonus-XP
🌟 SHINY+10
🌠 AURORA+15
🌌 ABYSSAL+20
🔥 EMBER+25
🌑 CRIMSON+35
👻 HAUNTED+50

Beispiel: ein SHINY HAUNTED Common während Geistermeer gibt 1 (Common) + 10 (SHINY) + 50 (HAUNTED) = 61 XP.

KaktusClicker — Klick & Prestige

AktionXP
Pro 100 Cactus-Klicks+1
Pro Prestige100 + min(900, gewonnene_Nopals × 5)

Prestige-XP skaliert mit der Größe des Runs. Kleines Prestige (1 Nopal): 105 XP. Großes Prestige (180+ Nopals): max. 1.000 XP.

Aktive Zeit auf der Site (Heartbeat)

BedingungXP
Tab sichtbar UND letzte Interaktion < 2 min her+2 XP/min (max 120/h)
Tab im Hintergrund oder AFK >2 min0

Server-Throttle: max 1 Heartbeat alle 50 Sekunden, max 2 XP pro Call. Verhindert AFK-Farming und Bot-Manipulation.

Realistische Spielzeit zu Level X

Grobe Schätzung mit unterschiedlichen Spielprofilen. Annahme: ein paar Catches pro Minute, gelegentlich ein Prestige, Tab meistens aktiv.

ProfilXP/Tag (geschätzt)Lvl 5Lvl 25Lvl 100Lvl 1.000
Casual (15 min/Tag)~504 Tage100 Tage~4,5 Jahre
Regular (1 h/Tag)~2501 Tag20 Tage~11 Monate~88 Jahre
Hardcore (4 h/Tag)~1.000< 1 h5 Tage~80 Tage~22 Jahre

Lvl 9.999 (800 Mio XP) ist mit normalen XP-Rates praktisch unerreichbar — bewusst als „nie wirklich-Endkampf" designt.

Badges

Jeder User kann jederzeit genau ein Badge als „angezeigt" wählen (auf Profil-Seite). Dieses Badge erscheint dann auf allen Leaderboards + in der Nav.

BadgeTriggerWie freischalten
⚡ Level 25autoErreiche Level 25 (5.000 XP)
💎 Level 50autoErreiche Level 50 (20.000 XP)
🏆 Level 75autoErreiche Level 75 (45.000 XP)
🎖 Level 100autoErreiche Level 100 (80.000 XP)
❤️ Werberauto (Referral)Wirb 1 Freund der Lvl 5 erreicht — Details unten
👻 Geisterjägerauto (Fang)Fange einen Fisch mit HAUNTED-Mutation (My Fishing Kaktus)
📅 Wochen-Pilgerauto (Daily)7 Tage Daily-Login-Streak in My Fishing Kaktus
🧪 TestermanuellVom Admin verliehen (Pre-Release Spieler)
🌹 UnterstützermanuellAuf Discord-Anfrage vergeben
👑 VIPmanuellAuf Discord-Anfrage vergeben — inkl. XP-Boost & Namensfarbe

Auto-Awards laufen über die Postgres-Funktion check_level_badges(), die nach jedem add_xp-Call ausgeführt wird. Idempotent — vergibt jeden Badge nur einmal.

VIP & Unterstützer

Beide Statusse werden auf Discord-Anfrage manuell vergeben. Wenn du die Seite unterstützen willst, melde dich.

🌹 Unterstützer

  • Sichtbares Badge im Profil-Auswahl-Grid
  • Keine spielmechanischen Vorteile

👑 VIP

  • Alle Unterstützer-Vorteile
  • +20 % XP-Boost auf jede XP-Quelle (server-seitig in add_xp)
  • Eigene Namensfarbe wählbar im Profil — Color-Wheel + 11 Presets
  • Namensfarbe erscheint auf allen Leaderboards + in der Nav

Die VIP-Vorteile gelten immer wenn profiles.vip = true, unabhängig davon ob das VIP-Badge gerade als „angezeigt" gewählt ist.

Referral-System

Jeder eingeloggte User hat einen einzigartigen Referral-Code (auto-generiert bei Account-Erstellung). Der Werbe-Link ist auf der Profil-Seite kopierbar.

https://kalterkaktus.de/login.html?ref=DEINCODE

Ablauf

  1. Du teilst deinen Werbe-Link.
  2. Freund klickt → ?ref= wird in localStorage gespeichert.
  3. Freund registriert sich (Google OAuth oder Email).
  4. Beim ersten erfolgreichen Login wird claim_referral(code) aufgerufen → Referral als pending markiert.
  5. Sobald der Freund Level 5 erreicht (200 XP, ~30-60 min Spielzeit) → Referral wird qualified, du bekommst automatisch das ❤️ Werber-Badge.

Anti-Cheat-Regeln

  • Niemand kann sich selbst werben (eigener Code wird abgelehnt).
  • Jeder User kann nur ein einziges Mal von jemandem geworben werden (UNIQUE-Constraint).
  • Lvl 5 erfordert mindestens ~30 min echtes Spielen — Fake-Accounts mit 0 XP qualifizieren nicht.

Anti-Cheat & Limits

XP-Vergabe läuft serverseitig über die add_xp(amount, reason) RPC mit folgenden Limits:

  • Max 1.000 XP pro Einzelcall — Safety-Cap gegen Massenmanipulation
  • Heartbeat-Throttle: max 1 Call alle 50 s, max 2 XP pro Call
  • Nur authentifizierte User können XP claimen (RLS-Policy + auth.uid() Check)
  • Kein localStorage-zu-Cloud-Save: lokal manipulierte Saves werden NICHT in die Cloud übernommen

Catches/Klicks werden batched (alle 30 s gebündelt) gesendet — der Client kann theoretisch die Anzahl lügen, der Cap verhindert aber Extremmissbrauch.