[](https://www.typescriptlang.org/)
[](https://nodejs.org/)
[](https://threejs.org/)
[](https://vite.dev/)
[](https://vitest.dev/)
[](https://www.postgresql.org/)
[](../../LICENSE)
[](../../package.json)
[](https://discord.gg/GjhnUsBtw)
[English](../../README.md) · [Español](README.es.md) · [Español (España)](README.es_ES.md) · [Français](README.fr_FR.md) · [Français (Canada)](README.fr_CA.md) · [Italiano](README.it_IT.md) · **Deutsch** · [简体中文](README.zh_CN.md) · [繁體中文](README.zh_TW.md) · [한국어](README.ko_KR.md) · [日本語](README.ja_JP.md) · [Português (Brasil)](README.pt_BR.md) · [Русский](README.ru_RU.md)
# World of ClaudeCraft — ein MMO im Classic-Stil
[Tritt dem Community-Discord bei](https://discord.gg/GjhnUsBtw)

Ein Micro-MMO im Stil der Classic-Ära-MMOs, das du selbst hosten und spielen kannst:
1. **Spiele es online** — ein echtes Client/Server-Spiel mit Accounts, persistenten
Charakteren in Postgres und anderen Spielern, die mit dir in der Welt unterwegs sind.
2. **Spiele es offline** in deinem Browser, um direkt in die Welt einzusteigen.
Beide laufen auf demselben **deterministischen Simulationskern** (`src/sim/`), sodass die
Offline-Welt sich exakt so verhält wie das, was der autoritative Mehrspieler-Server
für alle online ausführt.
## Screenshots

| | |
|:---:|:---:|
| 
*Abenddämmerung am Lagerfeuer von Eastbrook* | 
*Fackelbeleuchtete Elite-Pulls in The Hollow Crypt* |
| 
*Die ruhelosen Toten an der zerfallenen Kapelle* | 
*In der Unterzahl am Banditenlager* |
| 
*Old Greyjaw, der seltene Spawn, auf der Nordstraße gestellt* | 
*Ausrüsten bei Smith Haldren — Tooltips, Taschen, Münzen* |


---
## Selbst hosten (ein Befehl)
```bash
cp .env.example .env
# .env bearbeiten und ein langes, zufälliges POSTGRES_PASSWORD setzen
docker compose up -d --build # postgres + game server, vollständig gebaut
# http://localhost:8787 öffnen — Accounts, Charaktere, die ganze Welt
```
Für **Remote-Hosting**: Lege den Compose-Stack auf einem beliebigen VPS ab, setze ein
echtes `POSTGRES_PASSWORD` in der Umgebung und stelle Port 8787 hinter einen TLS-Reverse-Proxy
(mit Caddy sind das zwei Zeilen — `your.domain { reverse_proxy
localhost:8787 }`); WebSockets werden automatisch weitergeleitet und der Client
wählt auf HTTPS-Seiten automatisch `wss://`. Auth-Endpunkte sind pro IP rate-limitiert;
Passwörter werden mit scrypt gehasht; Tokens laufen nach 7 Tagen ab. Setze niemals
`ALLOW_DEV_COMMANDS=1` in der Produktion (es aktiviert Level-/Teleport-Cheats, die
von den Test-Bots genutzt werden).
## Online entwickeln (Hot Reload)
```bash
npm install
cp .env.example .env
# .env bearbeiten und POSTGRES_PASSWORD sowie DATABASE_URL auf dasselbe Passwort setzen
npm run db:up # postgres 16 in docker (Port 5433, volume-persistiert)
npm run server # autoritativer game server auf :8787 (REST + WebSocket)
npm run dev # client dev server auf :5173 (proxyt /api und /ws)
```
Öffne http://localhost:5173 → **Play Online** → erstelle einen Account → erstelle einen
Charakter → Enter World. Öffne einen zweiten Browser/Tab und melde dich erneut an — ihr
seht euch dann gegenseitig in der Stadt. `Enter` öffnet den Chat.
- **Accounts**: scrypt-gehashte Passwörter, 7-Tage-Bearer-Tokens (`auth_tokens`).
- **Charaktere**: bis zu 10 pro Account; Level/Ausrüstung/Taschen/Quests/Position/Geld
werden als JSONB in Postgres persistiert — gespeichert alle 30 s, beim Abmelden und beim
Herunterfahren des Servers. Namen sind global eindeutig, nur Buchstaben, im Classic-Stil.
- **Der Server ist autoritativ**: Clients streamen Bewegungsabsicht + Befehle
mit 20 Hz; der Server führt die Welt aus (ein gemeinsamer `Sim`) und sendet
interessensbasierte Snapshots (~120 yd) plus pro Spieler geroutete Events. Sämtliche
Kampfberechnungen, Loot-Würfe, Quest-Anrechnungen und Händlertransaktionen finden
serverseitig statt; der Client ist ein Renderer.
- **Gruppen** (bis zu 5): Rechtsklick auf einen Spieler → *Invite to Party*. Gruppen-Frames
links, Mitglieder teilen sich die Tap-Rechte, erhalten Quest-Anrechnung für Kills und
teilen XP mit den echten Vanilla-Gruppenboni (1.166/1.3/1.43 für 3/4/5). Gruppenchat
mit `/p message`. Blaue Mitglieder-Blips auf der Minikarte.
- **Handel**: Rechtsklick auf einen Spieler → *Trade*. Beide Seiten legen Gegenstände + Geld
an, beide müssen bestätigen, und der Tausch ist atomar und serverseitig validiert (Quest-Gegenstände
sind nicht handelbar). Auseinandergehen bricht den Handel ab.
- **Duelle**: Rechtsklick → *Challenge to a Duel*. 3-Sekunden-Countdown, kämpft
bis eine Seite auf 1 HP fällt — niemand stirbt, der Gewinner wird zonenweit verkündet.
60 Yards wegzulaufen bedeutet Aufgabe.
- **The Ashen Coliseum** (1v1-gewertete Arena): Drücke `G` (oder den ⚔-Button), um
das Arena-Panel zu öffnen und *Enter the Queue* zu wählen. Das Matchmaking paart dich mit dem
bewertungsnächsten Herausforderer online und teleportiert euch beide in eine private,
fackelbeleuchtete Kampfgrube. Ein 5-Sekunden-Countdown heilt und setzt beide Kämpfer zurück,
um einen fairen Start zu gewährleisten; der Kampf endet, wenn einer bei 1 HP aufgibt (niemand stirbt).
Siege und Niederlagen verschieben eine persistente **Elo-Wertung** (alle starten bei 1500), und
du kehrst genau dorthin zurück, wo du dich angemeldet hast. Das Panel zeigt deinen Rang, die Live-Online-Rangliste
und die ewige Bestenliste (`GET /api/arena/leaderboard`).
- **Mehrspieler-Regeln**: klassische Tap-Rechte (der erste Spieler, der einem Mob Schaden zufügt,
besitzt dessen Loot/XP/Quest-Anrechnung — andere erhalten „You don't have permission to loot
that."), Mobs zielen beim Tod ihres Opfers auf den nächsten Angreifer um (keine kostenlosen
Resets), Beitritts-/Verlassens-Ankündigungen, Chat im `/say`-Stil.
## The Hollow Crypt — 5-Spieler-Elite-Instanz
Brother Aldrics Handlungsstrang setzt sich nach *The Restless Dead* fort: **Whispers
Below** (finde das Siegel des Gravecallers an der zerfallenen Kapelle) → **The Binding
Rite** (sammle Blessed Tallow aus der Kobold-Grabung und Ghostly Essence von
den ruhelosen Toten) → **Into the Hollow** (*empfohlene Spieler: 5*) — töte
Morthen the Gravecaller am Grund der Krypta unter der Kapelle.
- Die Kryptentür an der Fallen Chapel teleportiert deine **Gruppe in ihre eigene
private Instanzkopie** (6 Plätze; Instanzen werden nach 5 Minuten Leerlauf zurückgesetzt).
- Innen: fackelbeleuchtete Hallen, paarweise **Elite**-Trash-Packs (Vanilla-Elite-Skalierung:
~2,3× Lebenspunkte, ~1,5× Schaden, doppelte XP), der Miniboss Sexton
Marrow und Morthen — ein Elite-Boss der Stufe 10 mit einem **Shadow Pulse**-AoE
alle 10 Sekunden. Dungeon-Trash respawnt nicht, bis die Instanz zurückgesetzt wird.
- Belohnungen: seltene (blaue) Waffen je Klassen-Archetyp, 1 Gold, 1500 XP.
- Sie ist tatsächlich auf 5 ausgelegt: Unser automatisierter 5-Bot-Raid (warrior, paladin,
priest, mage, hunter mit Focus-Fire + Heiler-KI) räumt sie in ~5 Minuten
mit ~10 Toden (`node scripts/crypt_raid.mjs`, benötigt ALLOW_DEV_COMMANDS=1).
```
docker compose ps # eastbrook-db (postgres:16-alpine, healthcheck)
node scripts/mp_integration.mjs # 26-Prüfungen API/WS/Persistenz-Suite
node scripts/mp_browser.mjs # zwei echte Browser-Clients sehen sich gegenseitig
```
## The Sunken Bastion & Gravewyrm Sanctum
Die Verschwörung endet nicht mit Morthen. **The Sunken Bastion** (5 Spieler,
~Stufe 13, südöstliches Mirefen) beherbergt Vael the Mistcaller — er beschwört Wellen von
Drowned Thralls bei 60 % und 30 % Lebenspunkten. Das Finale ist das **Gravewyrm
Sanctum** (5 Spieler, Stufe 20, unter Thornpeak): drei Kammern voller Elite-Knochenwache
und Drakonid, Korgath the Bound (gerät unter 30 % in Rage), Grand
Necromancer Velkhar (weitere Add-Wellen) und **Korzul the Gravewyrm** — epische
Waffen droppen hier, und die vorgelagerte Questreihe ist solo machbar, sodass niemand
von der Geschichte ausgeschlossen ist.
## Offline spielen
```bash
npm run dev # http://localhost:5173 öffnen -> Play Offline
```
Benenne deinen Charakter, wähle eine der neun Klassen, und schon bist du in **Eastbrook
Vale** (Stufen 1-7): eine Marktstadt, umringt von sechs Hubs — Wolfsreviere im Norden, Eber-Wiesen
im Osten, der Webwood im Westen, Mirror Lake im Nordwesten, eine Kobold-Kupfergrabung
im Südwesten, eine zerfallene Kapelle mit ruhelosen Toten im Nordosten und Gorraks Banditenlager
im Südosten. Die Straße nach Norden steigt durch einen Gebirgspass hinauf nach **Mirefen
Marsh** (6-13, Hub: Fenbridge) und weiter hinauf nach **Thornpeak Heights** (13-20,
Hub: Highwatch) — drei Zonen, ~60 Quests und eine Geschichte: die Gravecaller-Verschwörung,
von den ersten ruhelosen Knochen vor Eastbrook bis zu **Korzul the Gravewyrm**
unter den Gipfeln. Jeder Hub hat Händler (darunter Waffen- und Rüstungsschmiede, die ehrliche
weiße Ausrüstung verkaufen), einen Friedhof, eigene Musik und eine Zonenkarte.
### Steuerung (klassisches Layout)
| Eingabe | Aktion |
|---|---|
| `W`/`S` | laufen / rückwärts gehen — `A`/`D` drehen (strafen bei gehaltener rechter Maustaste), `Q`/`E` strafen |
| Rechts-Ziehen / Links-Ziehen | Mouselook / Kamera orbitieren · Mausrad zoomt · `Space` springt |
| `Tab` | nächste Gegner durchschalten · Linksklick anvisieren · Rechtsklick angreifen/looten/sprechen |
| `1`–`9`, `0`, `-`, `=` | Aktionsleiste |
| `F` | interagieren (Leiche looten / Objekt aufheben / sprechen) |
| `C` `P` `L` `M` `B` `G` | Charakter · Zauberbuch · Questlog · Weltkarte · Taschen · Arena (Ashen Coliseum) |
| `V` / `R` / `Esc` | Namensplaketten · Auto-Lauf · Fenster schließen / Ziel aufheben |
### Classic-Treue-Checkliste
**Formeln (die echten Vanilla-Formeln)**
- Rage-Umrechnung `c = 0.0091L² + 3.23L + 4.27`; Gewinn `7.5·d/c` beim Austeilen, `2.5·d/c` beim Einstecken
- Zauber-Treffer-Tabelle mit der +3-Stufen-Klippe (96/95/94/83 %); Nahkampf-Verfehlen/Ausweichen je nach Stufe
- Rüstungs-Schadensreduktion `armor/(armor + 85·AttackerLevel + 400)`
- HP-/Mana-Attributsregeln: erste 20 Ausdauer → je 1 HP, Rest → 10; erste 20 Intelligenz → je 1 Mana, Rest → 15
- XP-Kurve 400/900/1400/… bis Stufe 20; Mob-XP `45 + 5·L` mit echten grauen Null-Differenz-Bändern
- 1,5 s GCD (1,0 s für rogues), Waffen-Schwung-Timer, 5-Sekunden-Mana-Regel
**Alle neun Vanilla-Klassen (Lernstufen und Rang-Werte aus Vanilla, 1–20 —
Zauber erhalten Ränge, während du aufsteigst: Lightning Bolt R2 bei 8, R3 bei 14, R4 bei 20,
plus neue High-Band-Fähigkeiten wie Execute, Kidney Shot, Flash Heal,
Stormstrike und Starfire)**
- *Warrior*: Rage, Heroic Strike (beim nächsten Schwung, off-GCD), Battle Shout,
Charge, Rend, Thunder Clap, Hamstring, Bloodrage, Overpower (Ausweich-Proc)
- *Paladin*: Seal of Righteousness (Waffenverzauberung), entfesselt durch **Judgement**,
Holy Light, Devotion Aura, Blessing of Might, Divine Protection (Absorbierung),
Hammer of Justice (Betäubung), Lay on Hands
- *Hunter*: **Distanz-Auto Shot** (8–35 yd mit der klassischen Dead Zone),
Raptor Strike, Aspect of the Hawk, Serpent Sting, Arcane Shot, Concussive
Shot, Mongoose Bite (Ausweich-Proc), Wing Clip
- *Rogue*: Energie + **Combo Points**, Sinister Strike, Eviscerate, Backstab
(von hinten + Dolch), Gouge, Evasion, Slice and Dice, Sprint
- *Priest*: Smite, Lesser Heal, Power Word: Fortitude, Shadow Word: Pain,
**Power Word: Shield** (Absorbierung), **Renew** (HoT), Mind Blast
- *Shaman*: Lightning Bolt, **Rockbiter Weapon** (Verzauberung), Healing Wave,
Earth Shock, **Lightning Shield** (Dornen), Flame Shock
- *Mage*: Fireball, Frost Armor, Arcane Intellect, Frostbolt, Conjure Water,
Fire Blast, Arcane Missiles (kanalisiert), **Polymorph**, Frost Nova
- *Warlock*: Shadow Bolt, Demon Skin, Immolate, Corruption, **Life Tap**,
Curse of Agony, **Drain Life** (kanalisierter Gesundheitsraub)
- *Druid*: Wrath, Healing Touch, Mark of the Wild, Moonfire, Rejuvenation,
Thorns, Entangling Roots, **Bear Form** (umschaltbare Gestaltwandlung bei 10)
- Heilungen können auf Gruppenmitglieder zielen (klicke ein Gruppen-Frame an, dann heile); Buffs
sind auf freundliche Spieler wirkbar; Heilungen können kritisch treffen; Absorbierungsschilde
fangen Schaden ab, bevor er die Gesundheit trifft.
**Welt & Systeme**
- Essen/Trinken: hinsetzen, regeneriert über 18 s, bricht bei Schaden oder Aufstehen ab
— und ja, du kannst gleichzeitig essen und trinken
- Händler: Essen/Wasser kaufen, deine Grauen verkaufen; Münzanzeige in g/s/c
- Boden-Questobjekte mit Funkeln (stiehl die Versorgungskisten der Banditen zurück)
- Mob-KI: Umherwandern, Näherungs-Aggro je nach Stufenunterschied, soziale Pulls (Murlocs
ziehen aus größerer Entfernung — bring Freunde mit), Verfolgung, Leash-Evade-Reset, Leichen-Loot,
Respawns; ein seltener Spawn (Old Greyjaw) mit langem Timer
- Tod → Geist freilassen → Friedhof; Fallschaden; Schwimmen verlangsamt dich
- Questlog mit Abbrechen, Gossip-Dialoge mit Begrüßungen, klassenspezifische Belohnungen
**Präsentation**
- Prozedural alles: Fachwerkhäuser, Schindeldächer, Kapelle, Marktstand,
Zelte, Lagerfeuer mit flackerndem Licht, Minenportal, zerfallene Säulen,
Fischersteg, Murloc-Schlammhütten, in das Terrain gemalte Straßen, Grasbüschel,
Kiefern + Eichen, See mit animiertem Wasser, ziehende Wolken, Echtzeit-Schatten
- Zwölf gerigte Kreaturenfamilien (Wolf/Eber/Spinne/Murloc/Kobold/Skelett/
Humanoid/Troll/Oger/Elementar/Drachenkin/Schaf) mit Lauf-/Angriffs-/Zauber-/Sitz-/
Todesanimationen
- Gemalte prozedurale Icons für jeden Zauber, Gegenstand und Buff — zur Laufzeit
auf Canvas gezeichnet, keine Asset-Dateien
- Klassische UI: Porträt-Einheiten-Frames, Buff-/Debuff-Leisten mit Laufzeiten, Aktionsleiste
mit Abklingzeit-Sweeps + Reichweiten-/Ressourcen-Färbung, Wirk-/Kanalleiste,
Zauberbuch, Charakter-Paperdoll, Questlog, Weltkarte, Händler- + Loot-Fenster,
goldumrandete Tooltips, schwebender Kampftext, Kampflog, segmentierte XP-Leiste,
Minikarte mit Blips und eine vollständige Zonenkarte
- Prozedurale WebAudio-Klänge: Nahkampf-/Zaubertreffer, Aufstiegs-Fanfare, Quest-Glockenspiele,
Münzklimpern, der Todes-Sting — keine Audiodateien
## Entwicklung
```bash
npm test # vitest-Suite: Formeln, Kampf, KI, Quests, alle 9 Klassen,
# Gruppen, Duelle, Handel, Eliten, die Krypta
npm run build # Produktions-Web-Build
node scripts/smoke_browser.mjs # warrior E2E (benötigt laufendes `npm run dev`)
node scripts/smoke_mage.mjs # mage: Wirken, Polymorph, Conjure+Trinken, Tod/Freilassen
node scripts/smoke_rogue.mjs # rogue: Combo Points, Eviscerate, Händler, Essen
node scripts/visual_tour.mjs # Screenshot-Tour durch Zone + UI nach tmp/
node scripts/mp_integration.mjs # 26-Prüfungen API/WS/Persistenz-Suite (Server läuft)
node scripts/social_e2e.mjs # Handel + Duell über die Leitung (ALLOW_DEV_COMMANDS=1)
node scripts/arena_visual.mjs # zwei Clients melden sich an + kämpfen ein gewertetes 1v1 im Ashen Coliseum
node scripts/crypt_raid.mjs # fünf Bots räumen The Hollow Crypt (ALLOW_DEV_COMMANDS=1)
```
Browser-Agenten können Bewegung über `window.__game.controller` steuern, anstatt
gehaltene Tasten zu simulieren. Verwende `controller.move({ forward: true }, facingRadians)`
oder kompakte WebSocket-Flags wie `{ f: 1, sr: 1 }`; rufe
`controller.face(facingRadians)` auf, um die Ausrichtung zu aktualisieren, ohne die Bewegung zu ändern, und
`controller.stop()`, um zur echten Tastatureingabe zurückzukehren. Online-Spiel sendet den
gleichen Eingabe-Frame an den Server, der nur boolesche/`1`-Bewegungs-Flags
und endliche Ausrichtungswerte akzeptiert.
Aufbau:
```
src/sim/ deterministischer N-Spieler-Spielkern (keine DOM-Imports) — von allen Targets geteilt
src/render/ Three.js-Renderer: models.ts (Rigs), props.ts, textures.ts (prozedural)
src/game/ Eingabe + Kamera + WebAudio-Synth
src/ui/ klassisches HUD: Frames, Fenster, Tooltips, Karte, FCT
src/net/ Online-Client: REST-Auth + WebSocket-Welt-Spiegel (ClientWorld)
src/world_api.ts das IWorld-Interface, das sowohl Sim als auch ClientWorld erfüllen
server/ game server: main.ts (HTTP+WS), game.ts (world loop), db.ts, auth.ts
docker-compose.yml postgres:16-alpine
tests/ vitest-Suite
scripts/ Browser-E2E + Screenshot-Tour + Mehrspieler-Integrationstests
```
Namen, Quests und die Zonen sind eigenständig; Formeln und Mechaniken folgen
Vanilla. Der Welt-Seed ist in `src/main.ts` fixiert, sodass die Welt bei jedem
Besuch derselbe Ort ist.
## Mitwirken
Beiträge jeder Art sind willkommen: Code, Übersetzungen, Fehlerberichte und
Dokumentation. Beginne mit [CONTRIBUTING.de_DE.md](CONTRIBUTING.de_DE.md) für die
Einrichtung und die Richtlinien, und bitte halte dich an unseren
[Verhaltenskodex](../../CODE_OF_CONDUCT.md). Neu hier? Halte Ausschau nach Issues mit dem
Label [`good first issue`](https://github.com/levy-street/world-of-claudecraft/labels/good%20first%20issue),
öffne ein [Issue](https://github.com/levy-street/world-of-claudecraft/issues/new/choose)
oder sag Hallo auf [Discord](https://discord.gg/GjhnUsBtw).
## Lizenz
Der Code ist [MIT-lizenziert](../../LICENSE) — forke ihn, remixe ihn, hoste deine eigene Welt.
Die mitgelieferten Kunst-Assets von Drittanbietern (Modelle, Texturen, HDRIs) bleiben unter
ihren eigenen Lizenzen — alle CC0 Public Domain außer den MIT-lizenzierten Wasser-Normal-Maps,
wie pro Pack in [CREDITS.md](../../CREDITS.md) dokumentiert.