@@ -1,163 +1,60 @@
|
||||
# Hytale MMORPG
|
||||
# Disklexar Hytale Server
|
||||
|
||||
Plugin serveur Hytale pour un MMORPG persistant : profils joueurs, progression et fondations modulaires pour l'économie, les quêtes et les guildes.
|
||||
Monorepo du serveur MMORPG Hytale **Disklexar** : serveur de jeu, plugin persistant et futur site web.
|
||||
|
||||
## Prérequis
|
||||
## Structure du dépôt
|
||||
|
||||
- **JDK 25+** (Java 26 recommandé si JDK 25 indisponible)
|
||||
- **Gradle** via le wrapper inclus (`./gradlew`)
|
||||
- Serveur Hytale (binaire ou `./gradlew runServer` via [ScaffoldIt](https://scaffoldit.dev))
|
||||
```
|
||||
hytaleServer/
|
||||
├── Hytale/ # Serveur Hytale + plugin MMORPG (Gradle, devserver, scripts)
|
||||
│ ├── plugins/mmorpg/ # Code source du plugin
|
||||
│ ├── start-server.sh
|
||||
│ └── docs/ # Documentation technique du plugin
|
||||
├── Webapp/ # Dashboard Node.js (stats, joueurs, profils)
|
||||
├── mmorpg.db # Base SQLite partagée (créée au runtime, ignorée par Git)
|
||||
├── LICENSE
|
||||
└── CONTRIBUTING.md
|
||||
```
|
||||
|
||||
## Composants
|
||||
|
||||
| Dossier | Rôle |
|
||||
|---------|------|
|
||||
| **[Hytale/](Hytale/)** | Serveur de développement ScaffoldIt, plugin MMORPG (profils, classes, progression, UI). Voir [Hytale/README.md](Hytale/README.md). |
|
||||
| **[Webapp/](Webapp/)** | Dashboard Node.js : stats serveur, liste joueurs, profils (lit `mmorpg.db`). |
|
||||
| **`mmorpg.db`** | Base SQLite à la racine du dépôt, utilisée par le plugin MMORPG en dev (détection automatique du monorepo). |
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
```bash
|
||||
# 1. Indiquer où Hytale est installé (launcher officiel)
|
||||
cd Hytale
|
||||
cp hytale.properties.example hytale.properties
|
||||
# Éditer hytale.home_path (voir exemples dans le fichier)
|
||||
# Éditer hytale.home_path (installation Hytale via le launcher)
|
||||
|
||||
# 2. Compiler puis lancer le serveur de dev (Java 25 forcé)
|
||||
./start-server.sh
|
||||
```
|
||||
|
||||
Si le serveur a déjà planté sans assets, réinitialisez le monde de dev :
|
||||
Prérequis : **JDK 25+**, installation **Hytale** (assets via le launcher).
|
||||
|
||||
### Webapp
|
||||
|
||||
```bash
|
||||
HYTALE_RESET_DEVSERVER=1 ./start-server.sh
|
||||
cd Webapp
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
Ou manuellement :
|
||||
|
||||
```bash
|
||||
# Compiler le plugin (JAR avec SQLite + Gson embarqués)
|
||||
JAVA_HOME=/usr/lib/jvm/java-25-openjdk ./gradlew build
|
||||
|
||||
# Lancer le serveur de développement
|
||||
JAVA_HOME=/usr/lib/jvm/java-25-openjdk ./gradlew runServer
|
||||
```
|
||||
|
||||
Le JAR produit se trouve dans `build/libs/hytale-mmorpg-0.1.0.jar` (nom selon version Gradle).
|
||||
|
||||
### Déploiement manuel
|
||||
|
||||
1. Copier le JAR dans le dossier `mods/` du serveur Hytale
|
||||
2. Redémarrer le serveur
|
||||
3. La configuration est générée dans le répertoire de données du plugin : `mods/com.disklexar_MMORPG/config.json`
|
||||
|
||||
## Systèmes MMORPG
|
||||
|
||||
| Système | Contenu | Effet |
|
||||
|---------|---------|-------|
|
||||
| **Classes** | Chevalier (`knight`) | Armes : Épée longue, Hache de bataille. 3 capacités (Charge/dash+étourdissement 3s, Toupie 3s, Cri de guerre : repousse + −20% résistance 20s, bonus si étourdi). |
|
||||
| **Pouvoirs** (passifs, aucun par défaut) | Sprinteur (`sprinter`), Résilient (`resilient`) | +10% vitesse hors combat / +10% dégâts 5s après avoir été touché. |
|
||||
| **Métiers** | Tueur de monstre (`monster_slayer`), Mineur (`miner`) | +1 money par monstre tué / +1 money par bloc cassé. |
|
||||
| **Groupes** | Partage d'XP | Les membres reçoivent 40% de l'XP gagnée sur un kill. |
|
||||
| **Races** | Humain (`human`, par défaut) | XP ×2. |
|
||||
|
||||
> **Effets de combat** : dash, étourdissement, toupie, knockback et le buff de vitesse sont
|
||||
> implémentés via les APIs serveur (`Velocity`, `TransformComponent`, `MovementManager`,
|
||||
> `TargetUtil`, `DamageSystems`). Les valeurs (distances, forces, dégâts) sont des constantes à
|
||||
> ajuster en jeu.
|
||||
|
||||
## Commandes
|
||||
|
||||
| Commande | Description |
|
||||
|----------|-------------|
|
||||
| `/mmorpg help` | Affiche l'aide |
|
||||
| `/mmorpg profile` | Résumé court (niveau, XP) |
|
||||
| `/mmorpg info` | Toutes vos informations (chat) |
|
||||
| `/mmorpg menu` | Menu joueur MMORPG — onglets Personnage, Inventaire, Compétences |
|
||||
| `/mmorpg inventory` | Même menu, ouvert directement sur l'onglet Inventaire |
|
||||
| `/mmorpg class <choisir\|quitter\|info> [classe]` | Gérer votre classe |
|
||||
| `/mmorpg power <recevoir\|retirer\|info> [pouvoir]` | Gérer vos pouvoirs |
|
||||
| `/mmorpg job <rejoindre\|quitter\|info> [metier]` | Gérer vos métiers |
|
||||
| `/mmorpg group <inviter\|accepter\|quitter\|kick\|info> [joueur]` | Gérer votre groupe |
|
||||
| `/mmorpg ability <1\|2\|3>` | Utiliser une capacité de classe |
|
||||
| Touches **Use Ability 1/2/3** | Même effet que la commande ci-dessus (si vous avez une classe) |
|
||||
|
||||
### Capacités de classe (touches Ability 1/2/3)
|
||||
|
||||
Les armes vanilla possèdent leurs propres compétences sur les slots Ability. Le plugin les **remplace**
|
||||
dès qu'un joueur a choisi une classe MMORPG :
|
||||
|
||||
1. **Filtre de paquets** (`SyncInteractionChains`) — intercepte Ability 1/2/3 avant le moteur vanilla,
|
||||
envoie `CancelInteractionChain` au client et lance la capacité de classe.
|
||||
2. **Interaction native** (`mmorpg_cast_ability`) — enregistrée côté serveur ; les patches d'items dans
|
||||
`src/main/resources/Server/Item/Items/` remplacent Ability1/2/3 sur les armes de test (sync client/serveur).
|
||||
|
||||
Prérequis en jeu : `/mmorpg class choisir <classe>` puis équiper une arme autorisée pour cette classe.
|
||||
Sans classe, les compétences vanilla de l'arme s'appliquent normalement.
|
||||
|
||||
Pour ajouter d'autres armes, copiez un patch JSON existant (ex. `Weapon_Longsword_Mithril.json`) en
|
||||
ne gardant que `"Id"` et `"Interactions"`.
|
||||
|
||||
|
||||
`/mmorpg menu` ouvre une `CustomUIPage` listant toutes les infos du joueur (classe, race, pouvoirs,
|
||||
métiers, groupe, money, temps de jeu, dates…). Un plugin **serveur seul** ne peut pas ajouter un
|
||||
bouton dans l'écran d'inventaire natif ; les équivalents fournis sont la commande `/mmorpg menu` et
|
||||
l'interaction `mmorpg_player_info` (voir `assetpack/README.md` pour brancher un asset `.ui`).
|
||||
|
||||
## Configuration
|
||||
|
||||
Fichier `config.json` (valeurs par défaut dans `src/main/resources/config.json`) :
|
||||
|
||||
| Clé | Description |
|
||||
|-----|-------------|
|
||||
| `Debug` | Logs détaillés |
|
||||
| `DefaultLevel` | Niveau initial des nouveaux joueurs |
|
||||
| `MaxPlayers` | Limite prévue (référence future) |
|
||||
| `BaseXpPerLevel` | XP de base requise par niveau |
|
||||
| `KillExperience` | XP de base accordée par monstre tué |
|
||||
| `Database.FileName` | Fichier SQLite (`mmorpg.db`) |
|
||||
| `Features.Economy` | Active le module économie |
|
||||
| `Features.Quests` | Active le module quêtes (M3) |
|
||||
| `Features.Guilds` | Active le module guildes (M4) |
|
||||
|
||||
## Base de données
|
||||
|
||||
`player_profiles` ajoute : `class_id`, `powers` (JSON), `jobs` (JSON), `guild_id`, `group_id`,
|
||||
`is_connected`, `total_time_play`, `last_date_connected`, `date_creation`, `money`, `race_id`.
|
||||
Tables de dépendance : `classes`, `powers`, `jobs`, `races`, `groups`, `group_members`.
|
||||
Les migrations sont versionnées via `schema_migrations` (voir `db/migrations/`).
|
||||
|
||||
## Structure du projet
|
||||
|
||||
```
|
||||
src/main/java/com/disklexar/mmorpg/
|
||||
├── MmorpgPlugin.java # Point d'entrée (commandes + systèmes ECS)
|
||||
├── bootstrap/ # Initialisation et registre de services
|
||||
├── core/ # Config et contrats
|
||||
├── player/ # Sessions, profils, registre des joueurs en ligne, vue d'infos
|
||||
├── persistence/ # SQLite (migrations versionnées, repositories)
|
||||
├── command/ # Commandes /mmorpg (class, power, job, group, ability, info, menu)
|
||||
├── events/ # Connexion / déconnexion, filtre paquets Ability 1/2/3
|
||||
├── interaction/ # mmorpg_cast_ability (interaction native asset pack)
|
||||
├── progression/ # XP et niveaux (multiplicateurs de race)
|
||||
├── economy/ # Monnaie (money)
|
||||
├── rpg/ # clazz (classes) · power · job · race · group
|
||||
├── combat/ # Capacités, état de combat, effets passifs, planificateur
|
||||
│ └── system/ # Systèmes ECS : dégâts, morts/kills, casse de bloc
|
||||
├── ui/ # AbilityBarHud, PlayerMenuPage, PlayerInfoPage
|
||||
├── quest/ # Stub (M3)
|
||||
└── social/ # Stub (M4)
|
||||
```
|
||||
Dashboard sur [http://localhost:3000](http://localhost:3000) — nécessite `mmorpg.db` à la racine du dépôt.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Interface utilisateur MMORPG (UI/UX)](docs/README-UI.md)
|
||||
- [Architecture](docs/ARCHITECTURE.md)
|
||||
- [Feuille de route](docs/ROADMAP.md)
|
||||
- [Guide de développement](docs/DEVELOPMENT.md)
|
||||
- [Plugin MMORPG — guide complet](Hytale/README.md)
|
||||
- [Architecture](Hytale/docs/ARCHITECTURE.md)
|
||||
- [Développement](Hytale/docs/DEVELOPMENT.md)
|
||||
- [Feuille de route](Hytale/docs/ROADMAP.md)
|
||||
- [Interface utilisateur](Hytale/docs/README-UI.md)
|
||||
- [Contribution](CONTRIBUTING.md)
|
||||
|
||||
### Custom UI (Hytale)
|
||||
|
||||
Documentation officielle et guides communautaires utiles pour les assets `.ui` et les pages serveur :
|
||||
|
||||
- [Custom UI — vue d'ensemble](https://hytalemodding.dev/en/docs/official-documentation/custom-ui) (architecture `UICommandBuilder`, HUD vs pages, sélecteurs `#Id.Propriété`)
|
||||
- [Layout](https://hytalemodding.dev/en/docs/official-documentation/custom-ui/layout) (`Anchor`, `Padding`, `LayoutMode`, `FlexWeight`)
|
||||
- [Common Styling](https://hytalemodding.dev/en/docs/official-documentation/custom-ui/common-styling) (`Common.ui`, styles partagés)
|
||||
- [Guide plugin UI](https://hytalemodding.dev/en/docs/guides/plugin/ui) (emplacement des fichiers, `IncludesAssetPack`, diagnostic client)
|
||||
|
||||
## Licence
|
||||
|
||||
MIT — voir [LICENSE](LICENSE).
|
||||
|
||||
Reference in New Issue
Block a user