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.
Ü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.
| Level | Total XP nötig | XP-Diff zum Vorlevel |
|---|---|---|
| 1 | 8 | 8 |
| 5 | 200 | 72 |
| 10 | 800 | 152 |
| 25 | 5.000 | 392 |
| 50 | 20.000 | 792 |
| 75 | 45.000 | 1.192 |
| 100 | 80.000 | 1.592 |
| 250 | 500.000 | 3.992 |
| 500 | 2.000.000 | 7.992 |
| 1.000 | 8.000.000 | 15.992 |
| 5.000 | 200.000.000 | 79.992 |
| 9.999 | 799.840.008 | 159.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.
| Rarity | Basis-XP |
|---|---|
| Common | 1 |
| Uncommon | 3 |
| Rare | 10 |
| Epic | 30 |
| Legendary | 100 |
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.
| Mutation | Bonus-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
| Aktion | XP |
|---|---|
| Pro 100 Cactus-Klicks | +1 |
| Pro Prestige | 100 + 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)
| Bedingung | XP |
|---|---|
| Tab sichtbar UND letzte Interaktion < 2 min her | +2 XP/min (max 120/h) |
| Tab im Hintergrund oder AFK >2 min | 0 |
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.
| Profil | XP/Tag (geschätzt) | Lvl 5 | Lvl 25 | Lvl 100 | Lvl 1.000 |
|---|---|---|---|---|---|
| Casual (15 min/Tag) | ~50 | 4 Tage | 100 Tage | ~4,5 Jahre | — |
| Regular (1 h/Tag) | ~250 | 1 Tag | 20 Tage | ~11 Monate | ~88 Jahre |
| Hardcore (4 h/Tag) | ~1.000 | < 1 h | 5 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.
| Badge | Trigger | Wie freischalten |
|---|---|---|
| ⚡ Level 25 | auto | Erreiche Level 25 (5.000 XP) |
| 💎 Level 50 | auto | Erreiche Level 50 (20.000 XP) |
| 🏆 Level 75 | auto | Erreiche Level 75 (45.000 XP) |
| 🎖 Level 100 | auto | Erreiche Level 100 (80.000 XP) |
| ❤️ Werber | auto (Referral) | Wirb 1 Freund der Lvl 5 erreicht — Details unten |
| 👻 Geisterjäger | auto (Fang) | Fange einen Fisch mit HAUNTED-Mutation (My Fishing Kaktus) |
| 📅 Wochen-Pilger | auto (Daily) | 7 Tage Daily-Login-Streak in My Fishing Kaktus |
| 🧪 Tester | manuell | Vom Admin verliehen (Pre-Release Spieler) |
| 🌹 Unterstützer | manuell | Auf Discord-Anfrage vergeben |
| 👑 VIP | manuell | Auf 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
- Du teilst deinen Werbe-Link.
- Freund klickt →
?ref=wird inlocalStoragegespeichert. - Freund registriert sich (Google OAuth oder Email).
- Beim ersten erfolgreichen Login wird
claim_referral(code)aufgerufen → Referral als pending markiert. - 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.