MVC 2021

Portail MVCSE Projet Metaverse City Saint-Étienne: documentation du travail 2020-2021

Juillet 2021 : passage à Minetest, l'équivalent libre de Minecraft. (Lire Metaverse City passe de Minecraft à Minetest sur le blog de Zoomacom)

Minetest

* Wiki FR de Minetest

Ressources et articles
Articles
* Framinetest, l'expérience et le serveur Minetest de Framasoft, Framablog, 01/09/2016
* Minestest, intérêts et possibilités pédagogiques, Framablog, 01/09/2016
* Articles Minetest sur le Framablog

Ressources
* Forum Minetest de Framasoft
* API Lua de Minetest
* Documentation de l'API Lua de Minetest
* Site offciel Lua
* Tutoriel Lua


Etapes de développement

OBJECTIFS DE REALISATION

1) Système de quêtes, de création de PNJ et de dialogues (in-game)
2) Plugin de communication Minetest-Arduino (code)
3) Objets connectés (IRL) reliés à la dynamique des quêtes
4) Hébergement serveur minetest
5) Transfert carte des quêtes Minecraft vers Minetest



Mod développé par Bastrabun sur Minetest-forum.
Existant :
  • création in-game de PNJ personnalisés,
  • édition in-game de dialogues entre PNJ et Joueur, incluant des conditions (si objets dans l'inventaire : O/N, etc).
En développement :
  • système de quêtes général avec ses dynamiques (a minima : rattachement des dialogues (executors/actions) à l'avancement des étapes des quêtes (receptors/événements)).
Accès au gitea encore privé.
Serveur Minetest pour illustration :
  • adresse : your-land.de
  • port : 30000

Exemple de création d’un nouveau type de pnj : castor
  • Télécharger le mod Petz pour reprendre les mesh (formes) et textures à partir de là,
  • Dans le mod (minetest-5.3.0-win64\mods\petz\petz), copier le fichier mesh (.b3d) du modèle qu’on souhaite, puis la texture associée (.png), les coller respectivement dans « yl_speak_up/models » puis « yl_speak_up/textures ».
  • Renommer les fichiers pour éviter les collisions entre mods.
  • Aller ensuite modifier mobs.lua dans yl_speak_up. Copier-coller un bloc correspondant à un type de pnj pré-existant, modifier :
    • mobs:register_mob(« yl_speak_up:beaver», { # on crée un nouveau type de pnj
    • collisionbox ={-0.3, -0.5, -0.3, 0.3, 0.1, 0.3} # modifs de la hitbox, gère aussi les collisions, notamment avec le sol
    • visual size = {x = 10, y = 10} # taille x10 car le castor est très petit
    • mesh = "skin_petz_beaver.b3d", # le modèle 3D au format .b3d
    • textures = # supprimer la 1re texture (la cape), remplacer la 2e par la nouvelle (4 fichiers par défaut : cape, principale, main droite, main gauche)
      • "yl_speak_up_main_petz_beaver.png", -- 64x64 skin
      • "blank.png", -- shield?! 64x32
      • "3d_armor_trans.png", -- item right hand (16x16)
    • mobs:register_egg(« yl_speak_up:beaver, «Beaver», « wool_brown.png », 1) # reprendre la référence du haut, donner un nom à l’oeuf, choisir une couleur (basée sur le fichier laine dans minetest-5.3.0-win64\games\minetest_game\mods\wool\textures)
  • Lancer le jeu et aller chercher l'oeuf "Beaver" dans l'inventaire

Réutiliser les skins de Minecraft pour les PNJ de Minetest
Il n'existe que très peu de skins Minetest en ligne, car il est possible de réutiliser tous les skins Minecraft avec ce logiciel : https://github.com/godly/minetest-skin-converter
Trouver des skins Minecraft : https://fr.namemc.com/minecraft-skins/trending/top
Minetest peut prendre en compte les petits reliefs qu'on peut trouver sur certains skins Minecraft (mais seulement sur la tête). Pour afficher un aperçu, cliquer sur "with Hat & Cape"
Télécharger ensuite le fichier Minetest (clic droit sur l'image carrée sur la page du logiciel).

Où placer le skin obtenu ? Dans le mod NPC de Bastrabun.
Tuto complet dispo dans /yl_speak_up/usage.md
En rapide :
Coller la texture dans \minetest-5.3.0-win64\worlds\[Nom_du_monde]\worldmods\yl_npc\textures
Lancer le jeu et entrer :
//lua minetest.chat_send_all("True: it worked. False: it did not. Result:" .. dump(minetest.dynamic_add_media(minetest.get_worldpath() .. DIR_DELIM .. "worldmods" .. DIR_DELIM .. "yl_npc" .. DIR_DELIM .. "textures" .. DIR_DELIM .. $$$FILENAME$$$)))

Remplacer $$$FILENAME$$$ par le nom de la texture.
Elle est maintenant disponible avec le staff of fashion.
Utiliser le staff of fashion pour l'afficher. Si ça ne s'affiche pas correctement, relancer le jeu.

You can now spawn, configure, dress or delete NPCs of five different races.

The race is determined on spawn, it cannot be changed later. Currently there are humans, dwarves, elves, goblins and orcs. Each have their own sizes and spawn eggs, apart from that they are all equal. Should we need more races, we will insert them.

Spawn is done via a spawn egg. You select the spawn egg of the race you wish to create an NPC from and place it with a rightclick. You spawn an "empty" NPC of the selected race. It has no dialogs yet and shows a colourful default skin.

Once the NPC is spawned, you can use a set of tools to change their dialog or their skin. Every delete, spawn, activate and other actions are logged with a position and - if applicable - a NPC ID, so we can't really "lose" them on the map.

Three tools are rather simple:

The staff of shut up causes an NPC to not talk anymore.

The staff of dawai-dawai causes an NPC to talk again.

This speak or no-speak value is stored on the NPC, meaning if you delete the NPC, this status is also gone.

The staff of game over deletes the NPC and all the values stored on him. Among those values are which skins the NPC has and the talk-status. The dialog however and the skins themselves are stored externally and do not vanish when an NPC having those skills or dialogs get deleted. While the dialogs are not easily accessible the skins can be used on any othe NPC, too.

Two tools need more of an explanation.

The staff of fashion lets you set skins for the NPC, its cape, left and right hand.

The main skin is selected from a list of currently available skins. If the skin you want the NPC to have is not available in the list, please take a look at the Upload a skin section below. The skin must be in Minecraft format 64x64. Find an editor and inspiration at https://www.minecraftskins.com/skin-editor/ or https://minecraft.novaskin.me/

Here is a more advanced editor: https://www.planetminecraft.com/pmcskin3d/

The cape skin is a png with width 8 height 12 that is meant to display the faction an NPC is aligned to. Haven NPCs will usually wear the silver cross on red coat of arms, with the top line showing their rank. This cape style will apply to guilds as well.

The left hand can be a shield or any other item. It is usually 16x16. It is held in the left hand like a shield strapped to the arm

The right hand can be a sword or any other item. It is usually 16x16. it is held in the right hand like a sword held in the fist.

While in the fashion-window you can set any skin and the NPC will remember your settings, but if you wish to apply them to the NPC you need to click the save button.

The staff of I said so let's you configure the dialogs.

Those dialogs are stored in JSON format in the world folder. If you wish you can also edit those dialogs outside of Minetest, they only need to be uploaded and carry the right npc id. This npc id links the dialogs to the NPCs. If we wanted to copy one dialog to another NPC, all we had to do is duplicate the file and edit the npc id to fit the new NPC. If a NPC is deleted, those dialogs stay on the server for future use.

The dialog configuration starts with the "dialog" screen. The top left corner must show the NPC id. Every input field has a tool tip so you can see what goes in.

Start by giving the NPC a name and a description. The sort-field applies to the dialog. The first dialog that is displayed when a user talks to the NPC needs to have a sort value of 0. The text area is whatever the NPC says to the user. It can take a huge amount of text, but it is recommended to keep it brief.

The answers the user can give to the NPC are set in the options dialog. Select a dialog ID and then click the Options button to bring up the options dialog.

In the options dialog in the top left corner there must be a dialog id. That's the dialog you set the answers for. The dialog line the NPC delivers is repeated in the top. Although short ones can be changed, it is recommended to use them only as reference on what the NPC says.

The "text when prerequisites are met" is what the user can answer if there are no prerequisites or the prerequisites are met. If they are not met, you can either hide, greyout and/or deliver a whole new line. The sort value determines the order the options are displayed. Lowest is on the topmost spot, negatives are not allowed.

Prerequisites are conditions that need to be met for this option to be available. Should a user click a button but the prerequisites are not met, the results are not executed.

Results are the actions that come from the user clicking an answer option when talking to the NPC while having the prerequisites met. Currently you can only give items, take items, forward to a new dialog, teleport a player or execute one or more minetest function. In the future you can start start or forward quests. Results are never executed when the prerequisites are not met.

You can have more than one prerequisite and more than one result tied to one option. They are all executed, but it is your duty to make sure they don't conflict. You cannot forward to TWO dialogs. In doubt they are executed in a random order.

A user can talk to an NPC by rightclicking it.

This shows a dialog, where the NPCs name and description and the lowest-sort dialog is displayed to the user, together with as many option dialogs as configured. The NPC portrait is calculated from the NPC skin.

When the NPC delivered his opening dialog line, the user can answer by clicking the buttons below.

Upload a skin

To upload a skin or a cape, currently you need to put it in the world/worldmods/yl_npc/textures folder and then execute the following command, while replacing $$$FILENAME$$$ with the filename chosen:

//lua minetest.chat_send_all("True: it worked. False: it did not. Result:" .. dump(minetest.dynamic_add_media(minetest.get_worldpath() .. DIR_DELIM .. "worldmods" .. DIR_DELIM .. "yl_npc" .. DIR_DELIM .. "textures" .. DIR_DELIM .. $$$FILENAME$$$)))


This command will soon be made into a nice chatcommand and the upload done via a php form or something similar.

For the cape or the skin be visible the filenames need to have this format:

yl_npc_main_yourskinname.png for skins, with "yl_npc_main_" being a constant prefix for skins and yourskinname the dynamic "name" part of the skin
yl_npc_cape_yourcapename.png for capes, with "yl_npc_cape_" being a constant prefix for capes and yourcapename the dynamic "name" part of the cape

Storage
The dialog is stored in JSON and can be edited outside of minetest, too. It sits in the dialog folder in the world folder. They stay when the NPC is deleted
The skin- and cape-files are stored in the worldmods/yl_npc/textures folder. They stay when the NPC is deleted
The current state an NPC is in is stored on the NPC. This attribution goes away when the NPC is deleted
The current skin an NPC has is stored on the NPC. This attribution goes away when the NPC is deleted
The amount of NPCs present on the server is stored in the modstorage
The actions players and admins take to interact with the NPCs are stored in the log

Mod développé par Maxime : https://github.com/MaximeChretien/minetest-NodeMCU

Mode d’emploi
- Setup Arduino :
  • paramétrer nom et mdp du wifi dans NodeMcuMinetest .ino
  • S’IL Y A UN MDP WIFI, ajouter, sinon retirer :
    • # Wifi connection informations
    • const char* ssid = "<nom_du_wifi>";
    • const char* password = "<mdp>";
    • [...]
    • WiFi .begin(ssid, password);
  • téléverser via un port USB 3.0 (maintenant SS : « SuperSpeed  »), sinon erreur de compilation ("serial.serialutil.SerialException : Cannot configure port, something went wrong. Original message: PermissionError (13, [...])")
  • une fois le code téléversé, vérifier l’IP dans Outils > Moniteur série > 115200 baud, mettre à jour l'IP dans init.lua si nécessaire
  • Si 1re utilisation :
    • copier le fichier « nodemcu_control » dans minetest-5.3[...]/mods
    • lancer le jeu, activer le mod dans les configurations de mods
    • autoriser nodemcu_control en allant dans Réglages > Tous les paramètres > entrer « mods http » dans la barre de recherche > écrire « nodemcu_control » > valider

- Setup des blocs in-game (fichier init.lua) :
  • position des blocs à poser (POS_X…)
  • noms des actionnables (boutons, leds...)



Héberger à partir d'un PC via la PirateBox (windows)
  • connecter le PC à la PirateBox (serveur en connexion limitée)
  • créer le serveur : https://wiki.minetest.net/Setting_up_a_server/fr
    • [Résumé création de serveur sous windows]
    • * avoir créé au préalable une carte en solo, éviter les caractères spéciaux dans le nom (ex : test_meta_verse)
    • * ouvrir la commande : cmd
    • * vérifier l'IPv4 du PC : >ipconfig
    • * lancer le serveur en partant du dossier contenant minetest.exe :
      • > cd C:...\minetest-5.3.0-win64\bin
      • > minetest.exe --server --worldname <name>
  • envoyer l'IP à tout le monde et s'y connecter dans "Rejoindre une partie"

SYSTEME LINUX OBLIGATOIRE POUR UTILISER CE MOD
Mod : https://github.com/minetest-tools/mcimport/
Forum : https://forum.minetest.net/viewtopic.php?f=12&t=13709&hilit=keyerror

Mode d’emploi
  • Télécharger le serveur en version 1.14+ (la vieille version 1.12.2 ne semble pas être prise en charge, mais possibilité de la convertir en 1.16 depuis OMGServ).
mcimport a besoin d'un dossier structuré comme une map solo. Un serveur contient trop d'informations et de sous-dossiers. On ne va en prendre qu'une partie.
  • Depuis le dossier téléchargé, copier le sous-dossier « plateforme » (il contient tous les blocs du serveur), le coller dans .minecraft/saves/.
  • Il doit surtout contenir les dossiers :
    • data/,
    • DIM1/ (le nether),
    • DIM-1/ (l'end),
    • region/ (la carte de base).
  • Ce dossier « plateforme » (sans doute à renommer) sera considéré comme une map solo par mcimport.
  • Si l'organisation des fichiers de la sauvegarde diffère du modèle ci-dessus, il faudra la refaire dans une copie. Quelques copiés-collés feront l'affaire, par exemple en sortant les fichiers de DIM1/region pour les mettre dans DIM1/ et supprimer le dossier region/ devenu inutile car répétitif.
  • Ouvrir la console depuis mcimport-master/ (commande cd).
  • Lancer « ./mcimport.sh » (si marche pas, essayer « sudo chmod +x ./mcimport.sh » puis relancer).
  • Sélectionner le dossier dans saves, patienter le temps de la conversion puis installer tous les mods suggérés pour minetest.
  • Pour une raison obscure, la conversion sera exportée depuis le dossier caché .minecraft/saves vers .minetest/worlds/. Il faut déplacer le fichier exporté vers snap/minetest/current/worlds/. Il apparaîtra maintenant dans la liste des mondes disponibles in-game.
Résultat :
Tous les blocs de décor sont là, à l’exception de certaines laines et des champignons. Les PNJ ont disparu (créés avec BetonQuest ). Les circuits de redstone ne fonctionnent plus (ont été remplacés par du mesecon, mais trop de différences pour que ça marche).