Hallo liebe Community,
ich heiße Marcel, bin 27 Jahre alt, gelernter Anwendungsentwickler und möchte euch mein Herzensprojekt vorstellen: Fantasy of Eldoria.
"Fantasy of Eldoria" ist ein klassisches 3D-MMORPG, das von Grund auf in C# entwickelt wird (Unity für den Client, C#-Konsolenanwendung als Server).
Ich arbeite nun schon eine ganze Weile an der Kernarchitektur und habe jetzt ein stabiles Grundgerüst geschaffen.
Jetzt ist es an der Zeit, aus dem technischen Gerüst eine lebendige Welt zu machen – und dafür suche ich Mitstreiter!
Das Wichtigste zuerst:
Dies ist ein 100%iges Hobby-Projekt.
Es gibt keinerlei kommerzielle Absichten, keinen Zeitdruck und keinen Businessplan. Der einzige Zweck dieses Projekts ist der Spaß am Erschaffen, das gemeinsame Lernen und das Ziel, irgendwann ein Spiel zu haben, das wir selbst gerne spielen würden.
Das bedeutet für dich:
- Keine Deadlines: Du arbeitest, wann du Zeit und Lust hast.
- Keine Verpflichtungen: Das reale Leben (Job, Familie, Uni) geht IMMER vor.
- Volle Freiheit: Ein Austritt ist jederzeit möglich, wenn du keine Zeit mehr hast.
Das technisches Grundgerüst
Für alle, die sich für die Technik interessieren: Mein Fokus lag auf einer sauberen, skalierbaren und sicheren Server-Architektur.
- Autoritärer Server: Der Client ist "dumm". Jede Aktion (Bewegung, Zauber, Klick) wird auf dem Server validiert. Cheating wird so im Kern unterbunden.
- C# Headless Server: Der Server läuft als eigene Konsolenanwendung und ist nicht auf Unity angewiesen. Er berechnet das Pathfinding um den Hauptserver zu entlasten. Die Berechnung von Positionen und NPC Bewegungen wird somit Serverseitig durchgeführt.
- Multi-Prozessor-Architektur: Das Pathfinding (Wegfindung der NPCs) ist in einen eigenen C++ Headless-Client ausgelagert. Dadurch kann die Last auf mehrere CPU-Kerne verteilt werden (z.B. 1 Kern für die Welt, 1 Kern für Pathfinding).
- Dynamisches Grid-System: Die Welt ist in Zonen (Grids) unterteilt. NPCs und Spieler werden nur aktualisiert (Tick Culling), wenn Spieler in der Nähe sind.
- Spielerzahlen: Die Architektur ist auf Skalierbarkeit ausgelegt. Aktuelle Tests auf dem V-Server zeigen das bereits 800-1.200 Spieler gleichzeitig flüssig spielen können. Vorausgesetzt die Spieler sind auf der Map verteilt und nicht an einem einzigen fleck! Das ganze bei einer Welt mit ca. 800 NPCs. (Die Theoretische Obergrenze liegt noch viel höher.)
- Datenbank-gesteuert: Alles ist dynamisch. Spells, Items, NPCs, Quests und Buffs werden aus der Datenbank geladen. Nichts ist im Server hardcoded.
Aktueller Status: Was funktioniert bereits?
Das "Gerüst" steht und viele Kern-Features sind voll funktionsfähig:
- Server-Autoritatives Kampfsystem:
- Zauber wirken (Spells), Auto-Attacks und Projektile.
- Alle Cast-Zeiten und Cooldowns (sowohl globale als auch individuelle) werden zu 100% vom Server verwaltet.
- Persistente Cooldowns: Deine Abklingzeiten laufen auch weiter, wenn du offline bist, und sind nach einem Relog korrekt wieder verfügbar.
- Jede Klasse hat andere Spells.
- Zaubertränke
- Friedhofsystem
- Handel zwischen Spielern
- Charakterstats (z.B. Ausdauer erhöht die HP. Zauberkraft erhöht die Heilung etc.). Wird ebenfalls durch den Server berechnet.
- Verschiedene Klassen und Ressourcen:
- Aktuell gibt es bereits vier Klassen. Magier, Heiliger, Ritter und Paladin.
- Abhängig von der Klasse existieren als benötigte Ressource zum wirken von Zaubern und Angriffen entweder Mana (Blauer Balken) oder Energie (Grüner Balken).
- Tiefes Buff- & Debuff-System:
- Ein komplexes Aura-System ist implementiert:
- Stat-Buffs (z.B. +Ausdauer)
- DoTs & HoTs (Schaden/Heilung über Zeit)
- Absorb-Schilde (z.B. Manaschild, das Schaden "frisst")
- Crit-Logik: Ticks von DoTs/HoTs können critten (basierend auf den Stats des Casters zum Zeitpunkt des Castens).
- Stacking-Logik: Buffs können "exklusiv" sein (nur der stärkste wirkt) oder "pro Caster" stapeln (5 Priester = 5 DoTs auf dem Boss).
- Dynamisches Loot-System:
- Server-Autoritär: Loot wird beim Tod eines NPCs komplett serverseitig generiert (kein Client-Exploit möglich).
- Loot-Container: Der Loot wird in einem temporären LootContainer auf der Leiche gespeichert.
- Loot-Berechtigung: Standardmäßig kann nur der Spieler (oder später die Gruppe) plündern, der den Kill errungen hat (auch wenn der Kill durch einen DoT eines Offline-Spielers ausgelöst wurde, wird dies korrekt gehandhabt, um Abstürze zu verhindern).
- Datenbankgesteuerte Drop-Chancen: Jede Loot-Tabelle kann in der DB präzise eingestellt werden (z.B. "Graues Item" 100%, "Blaues Item" 1.5%).
- Intelligentes Quest-Loot: Das System prüft, ob der Spieler eine Quest aktiv hat (z.B. "Sammle 5 Wolfspelze") und lässt das Quest-Item nur dann droppen.
- NPC-KI & Verhalten:
- NPCs nutzen eine State-Machine und können über die Datenbank gesteuert werden:
- Bewegung: Stationär, Herumwandern (Wandering) oder feste Patrouillen (Patrolling).
- Aggro-Typen: Freundlich (ignoriert Kampf), Defensiv (greift nur bei Angriff an) und Hostil (greift bei Sichtkontakt an).
- Fraktions- & Interaktionssystem:
- Das Spiel unterstützt mehrere Fraktionen (Menschen vs. Lichtmenschen).
- Chat-Verschlüsselung: Sprichst du in der Nähe eines Spielers der gegnerischen Fraktion, sieht dieser nur "kauderwelsch" (z.B. "Lok'tar!").
- Whisper-Restriktion: Das Anflüstern (/w) funktioniert nur innerhalb der eigenen Fraktion.
- (Game Master können natürlich fraktionsübergreifend kommunizieren).
- Quest-System:
- Vollständige Annahme, Fortschritt (Kill & Collect) und Abgabe von Quests.
- Questreihen: Quests können über die Datenbank Voraussetzungen haben (z.B. "Quest A muss abgeschlossen sein, um B zu starten"), was komplexe Storylines ermöglicht.
- Die Quest-UI löst NPC-IDs automatisch zu den korrekten Namen auf (z.B. "Töte 5 Goblins" statt "Töte 5x ID:2002").
- GameMaster-System:
- Ein flexibles Berechtigungssystem (GM-Level 1-4) schaltet Befehle frei.
- GameMaster Befehle können sowohl auf online, als auch auf offline Spieler gewirkt werden. z.B. Teleportieren, bannen etc.
- Umfangreiche Befehle sind implementiert, hier ein Auszug aus der Hilfe:
- Code
Display More// --- Level 1 --- if (source.GMLevel >= 1) { sb.AppendLine("<b><color=yellow>=== GM-Commands (Level 1+) ===</color></b>"); sb.AppendLine("/g <Text> - GM Groupchat."); sb.AppendLine(".gm ON/OFF - Switch GM mode on/off."); sb.AppendLine(".gm i - Shows GMs online."); sb.AppendLine(".server <info|announcement> - Server information or actions."); sb.AppendLine(".pinfo <Playername> - Displays player information."); sb.AppendLine(".distance - Displays the distance to your target."); sb.AppendLine(".lookup <item|npc|quest|player> <Name> - Search the database."); sb.AppendLine(".appear <PlayerName> - Teleport to the given character."); ChatManager.Instance.SendSystemMessage(source, sb.ToString()); sb.Clear(); } // --- Level 2 --- if (source.GMLevel >= 2) { sb.AppendLine("<b><color=yellow>=== GM-Commands (Level 2+) ===</color></b>"); sb.AppendLine(".kick <Playername> - Kicks the player."); sb.AppendLine(".ban <Playername> <Days> - Bans the player (-1 for permanent)."); sb.AppendLine(".ban info <Playername> - Ban info about the player."); sb.AppendLine(".die <Playername> - Kills the player."); sb.AppendLine(".freeze <Playername> - Freeze the player."); sb.AppendLine(".unfreeze <Playername> - Unfreeze the player."); sb.AppendLine(".announcement <Text> - Global announcement."); sb.AppendLine(".additem <PlayerName> <ItemID> <Amount> - Adds/Removes an item."); sb.AppendLine(".givemoney <PlayerName> <Amount> - Adds/Removes money."); sb.AppendLine(".bags clear <PlayerName> - Clears the player's inventory."); sb.AppendLine(".bags info <PlayerName> - Shows the player's inventory."); sb.AppendLine(".tele <X> <Y> <Z> - Teleports you to coordinates."); sb.AppendLine(".summon <PlayerName> - Teleport the given character to you."); sb.AppendLine(".recall <PlayerName> - Teleport to the place where he has been."); sb.AppendLine(".modify <hp|mana|energy> <value> [PlayerName] - Sets a stat for you or a target."); sb.AppendLine(".respawn <all> - Respawns target NPC or all NPCs globally."); sb.AppendLine(".unaura <PlayerName> - Removes all buffs/debuffs from player."); sb.AppendLine(".quest <add|remove|complete|reward|list> - Manages player quests."); // Sende Block 2 ChatManager.Instance.SendSystemMessage(source, sb.ToString()); sb.Clear(); }
Wen suche ich?
Du musst kein Profi sein! Wenn du motiviert bist, etwas lernen möchtest oder einfach nur Lust hast, Ideen beizusteuern, bist du hier richtig.
GameMaster & Tester:
Du bist die erste Anlaufstelle im Spiel. Du testest neue Features, versuchst, das Spiel kaputt zu machen (Bugs finden!) und hilfst später anderen Spielern. Ein V-Server für eine 24/7-Testumgebung ist bereits gemietet und wartet darauf, von dir geprüft zu werden!Sound Artist (Musik & SFX):
Vom epischen Main-Theme in der Stadt bis zum "Wusch" eines Feuerballs – wir brauchen alles, um die Welt lebendig zu machen.- 3D Artist (Modellierung & Animation):
Unser Ziel ist ein ansprechender "Fantasy Stylized"-Look (ähnlich WoW, Torchlight oder Darksiders). Wir suchen Unterstützung für alle Arten von GameObjects (Gebäude, Bäume, Waffen, Rüstungen, Kreaturen).
Game & Quest Designer (Kreative Köpfe):
Du hast Lust, dir spannende Questreihen auszudenken? Du willst neue Spells erfinden und über das Balancing von Klassen philosophieren? Dann ist das deine Rolle! Gerne auch auf deutsch, ich übernehme die Übersetzung in Englisch.
Selbstverständlich erhalten alle Mitglieder (egal ob Tester oder Game & Quest Designer etc.) eine entsprechende GameMaster Berechtigung und eine Erwähnung als Teammitglied. Ein V-Server für die Entwicklungsumgebung ist bereits gemietet und eingerichtet.
Grobe Konzeptrichtung:
Wie ihr in meinen Screenshots erahnen könnt, bin ich ein "World of Warcraft" Fan. Ich möchte mein Projekt im gleichen "stylized fantasy Style" weiterführen und habe mir bereits folgende "Fahrrichtung" für dieses Projekt überlegt:
- Zwei Fraktionen. Aktuell Menschen & Lichtmenschen.
- Maximales Level ist Stufe 40.
- 4 Klassen. (drei basieren auf Mana / eine auf Energie).
- 6 Gebiete: Eldoria (Gesamtbezeichnung der Welt), Aetheria(Neutrale Hauptstadt für beide Fraktionen), Grünkamm (Waldgebiet) (Lv 1–6), Nebelmoor (Nebeliges Insel-Dorf) (Lv 7–14), Luminara (Wald mit riesigen und leuchtenden Pilzen) (Lv 31–40), Dornwacht (Bergdorf) (Lv 15–22), Solstice-Ebenen (schwebende Insellandschaft) (Lv 23–30).
- Das Spiel sollte zunächst in englischer Sprache entwickelt / herausgegeben werden, um die mögliche Spielerreichweite zu erhöhen.
Aktuelle Screenshots
(Die Welt ist bewusst so leer, da ich aktuell nur das Grundgerüst teste / entwickele)
Interesse?
Wenn du Lust hast, unverbindlich Teil eines klassischen, stressfreien MMO-Projekts zu werden, melde dich einfach per PM oder antworte hier!
Ich freu mich über jede Rückmeldung.
Grüße,
Marcel