Parties et isolation des mondes
Une partie (« run ») est une traversée d'un donjon par un groupe. Cette page explique ce qu'une partie possède, comment son monde est fabriqué, et quel mode d'isolation choisir.
Ce que possède une partie
Chaque partie a ses propres :
- membres : les joueurs du groupe. Un joueur n'est que dans une seule partie à la fois.
- monde ou emplacement : l'endroit où le donjon existe pour cette partie seulement.
- limite de temps : le champ
cooldownSecondsdu donjon (une durée maximale ; vide ou0signifie aucune limite). - état : la salle où se trouve chaque membre, les salles
oncedéjà consommées, les coffres, les mobs déjà apparus. - audience : les PNJ et les coffres d'une partie ne sont montrés qu'à ses membres.
Plusieurs parties du même donjon peuvent exister en même temps, jusqu'à maxSimultaneousInstances. Ce nombre est aussi le nombre de lobbies du donjon. Quand tous sont pris, le groupe suivant lit « All the runs of this dungeon are taken. »
Groupes
Un groupe est l'ensemble des joueurs qui rejoignent un lobby ensemble, ou le joueur seul d'une action Dungeon Enter. Si le joueur a un groupe dans MMOCore, Parties ou l'extension de groupe Typewriter, tout ce groupe rejoint le lobby ensemble quand il y a de la place pour tous. Dungeon ne fait que lire ces groupes : il n'en crée ni n'en modifie aucun.
La taille du groupe doit être comprise entre minPartySize et maxPartySize, et chaque membre doit correspondre aux criteria du donjon. Un administrateur utilisant /typewriter dungeon force-start ignore la taille minimale et les critères.
Choisir un mode d'isolation
Définissez le champ isolation de la Dungeon Instance.
| Mode | Isolé | Coût | Nécessite |
|---|---|---|---|
SLIME_CLONE | Oui | Faible : un clone en mémoire | Advanced Slime Paper et un modèle qui est un monde slime chargé. |
WORLD_PER_RUN | Oui | Élevé : copie le dossier modèle, puis supprime la copie | Un dossier de monde modèle à la racine du serveur. |
SHARED_WORLD_SLOTS | Non | Le plus faible : rien n'est copié | Un monde construit à l'identique dans chaque emplacement. |
AUTO (par défaut) | SLIME_CLONE quand Advanced Slime Paper est installé, sinon WORLD_PER_RUN. |
Un mode qui ne peut pas fonctionner sur le serveur refuse la partie ; il ne se replie jamais sur un autre mode. Le joueur lit « The dungeon cannot be started on this server. » et le journal du serveur dit pourquoi.
SLIME_CLONE
Chaque partie reçoit un clone en mémoire d'un monde slime. C'est le mode le moins coûteux qui soit entièrement isolé. Il nécessite Advanced Slime Paper, et templateWorld doit nommer un monde slime chargé.
WORLD_PER_RUN
Chaque partie reçoit une copie du dossier du monde modèle, qui est un vrai nouveau monde. La copie est faite hors des threads du serveur, le nouveau monde est nommé par l'extension et marqué d'un fichier témoin pour que seuls les mondes qu'elle a créés puissent un jour être supprimés. À la fin de la partie, le monde est déchargé sans sauvegarde et son dossier est supprimé.
- Le modèle n'est jamais chargé, écrit ni supprimé par l'extension.
- Un lien (lien symbolique, jonction) n'importe où dans le dossier modèle fait refuser la copie.
- Le nom du modèle ne peut contenir que des lettres, des chiffres,
_et-(jusqu'à 64 caractères). Le monde principal du serveur et les noms qui ressemblent à des mondes de partie sont refusés. - Si un monde ne peut pas être déchargé parce qu'un joueur y reste, il reste chargé et est supprimé au prochain démarrage.
C'est aussi le seul mode qui accepte un donjon généré : l'extension crée un monde vide pour la partie et y colle les salles. Avec un générateur, AUTO et WORLD_PER_RUN fonctionnent, tandis que SLIME_CLONE et SHARED_WORLD_SLOTS sont refusés.
SHARED_WORLD_SLOTS
Toutes les parties du donjon se déroulent dans le monde modèle lui-même, chacune dans son propre emplacement d'une grille. L'extension décale chaque position que vous avez créée (apparition, salles, coffres, PNJ, positions des mobs) du décalage de l'emplacement de la partie : vous construisez donc le donjon une fois à l'emplacement d'origine, puis vous le construisez à l'identique dans tous les autres emplacements (par exemple en le collant).
Le champ sharedSlots définit la grille :
| Champ | Signification | Par défaut |
|---|---|---|
spacingX, spacingZ | Blocs entre deux emplacements. Au moins l'emprise. | 512 |
columns | Emplacements par rangée. 0 = tous les emplacements sur une seule rangée le long de X. | 0 |
footprintX, footprintZ | Taille du modèle, en blocs. | 256 |
Les mobs, les objets lâchés et les blocs sont partagés par tous les emplacements du monde. À la fin d'une partie, ses mobs, coffres et PNJ sont retirés, mais le monde lui-même n'est pas réparé : les objets lâchés au sol et les blocs cassés par les joueurs ou les mobs restent. Les joueurs des autres emplacements sont cachés les uns des autres, et les coffres, PNJ et mobs d'une partie sont filtrés pour ses membres, mais un donjon avec des mobs destructeurs ou des modifications du monde laissera des traces. Dans un monde partagé, gardez blockDamage et dropVanillaLoot désactivés sur les entrées Dungeon Mob Spawn.
Deux donjons construits sur le même monde partagé partagent ses emplacements. Utilisez le même maxSimultaneousInstances pour les deux.
Démarrer une partie
Le lancement est tout ou rien :
- Les critères et la taille du groupe sont vérifiés, et le mode d'isolation est résolu.
- Une place est réservée, pour qu'un double clic ne donne qu'une partie, pas deux.
- Pour un donjon généré, l'agencement est créé, puis collé dans le nouveau monde quelques salles par tick.
- Le monde est préparé (clone, copie ou emplacement).
- Le coût d'entrée est prélevé, tout ou rien.
- L'origine de chaque membre est enregistrée et tout le monde est téléporté.
- La partie devient active, puis les coffres,
onStart, les modificateurs (et les affixes d'un donjon généré) s'exécutent pour chaque membre.
Si une étape échoue, les joueurs restent où ils étaient, le coût est remboursé, le monde est libéré et la place est rendue.
Terminer une partie
Le premier de ces événements l'emporte, et une seule fin s'exécute même si plusieurs se produisent ensemble :
- Dungeon Complete (le donjon a été terminé).
- La limite de temps (
cooldownSeconds) est écoulée. - Dungeon Close ou
/typewriter dungeon close <instance>. - Chaque membre est parti, a changé de monde ou s'est déconnecté.
La fin exécute onEnd pour chaque membre en ligne, nettoie les coffres, PNJ et mobs de la partie, renvoie les membres (au exitPoint de Complete et Close quand il est défini, sinon là d'où chacun venait), puis libère le monde. Un joueur qui se déconnecte pendant une partie est ramené là d'où il venait à sa prochaine connexion. S'il revient dans le délai de reconnexion (reconnectGrace, 2 minutes par défaut), il garde au contraire sa place : voir Déconnexions.
Rechargement et redémarrage
| Événement | Ce qui arrive aux parties |
|---|---|
typewriter reload, Publish | Les parties sont réadoptées : membres, monde, échéance, état des salles, coffres ouverts et mobs apparus reviennent. onStart et les modificateurs ne s'exécutent pas à nouveau. |
| Redémarrage du serveur | Les parties se terminent : leurs mondes ont disparu. Les joueurs sont renvoyés chez eux à leur prochaine connexion et les dossiers de mondes orphelins sont purgés. |
Pour que l'adoption fonctionne, liez un Active Dungeon Instance Artifact dans le champ runtimeArtifact. Sans lui, les parties sont écrites dans un fichier runs.json de l'extension, et le journal du serveur vous avertit au chargement. Plusieurs donjons peuvent partager un même artifact.
Une partie qui ne peut pas être adoptée (son donjon a été supprimé, son monde n'est pas chargé, son agencement généré ne peut pas être reconstruit) est fermée au démarrage et ses joueurs sont renvoyés chez eux. Le journal dit pourquoi.
Les lobbies ne sont pas restaurés par un rechargement ni par un redémarrage : ils reviennent vides, à l'exception des lobbies des parties qui ont été adoptées.