Maroonroon wrote:Edit: OK, le problème de saut sur place est résolu ; pour ça j'ai mis les regions enter/exit autour plutôt qu'à l'entrée, j'ai facilement trouvé la distance à laquelle mettre les regions par rapport au collider (j'ai pris les mêmes distances que pour l'Elevator1), j'ai fait du collider un "SubworldCollider" et en ai fait une copie en tant que "WorldCollider".
J'ai eu un problème similaire sur mon fichier d'exemple, et on dirait qu'on a réparé ça de la même manière.
Maroonroon wrote:J'espère que tu ne te prends pas trop la tête de ton coté...
C'était pas simple ! Entre les bugs, les bizarreries de Plasma, et les tests en multijoueur, ca m'aura prit un bon petit moment à plancher sur le sujet. Mais j'ai finalement réussi à tout faire
Ce qui est pas plus mal parce que je pense que le résultat pourra intéresser d'autres créateurs d'Âges...
Par contre il va falloir que tu re-paramètre ton ascenseur avec le nouveau script !
Tu peux retélécharger
le fichier d'exemple, ya tout dedans !
J'ai également dû réparer une petite erreur dans Korman, donc il te faudra manuellement mettre à jour vers la version de développement actuelle. Pour faire ça, tu va sur
le Github, tu clique sur le bouton vert "Code" et "Download ZIP". Dans le ZIP, tu copie le contenu du dossier "korman" (tout plein de scripts Python) et tu colle le tout dans C:\Program Files\Korman 0.13\2.79\scripts\addons\korman - assure toi que ça remplace bien les fichiers originaux !
J'ai donc écris deux scripts:
- elevElevator.py, comme son nom l'indique il gère l'ascenseur. Normalement il fait tout ce dont tu as besoin: il utilise plusieurs variables SDL pour savoir si l'ascenseur est activé, et quels étages sont disponibles. Il utilise aussi un certain nombre de responders que tu peux utiliser pour envoyer des messages quand l'ascenseur est en mouvement ou à l'arrêt, et pour chaque étage où l'ascenseur s'arrête.
Dans l'Âge d'exemple, tu peux activer et désactiver globalement l'ascenseur via "/setsdl Elevator2PowerOn 1" (ou 0 pour le désactiver). L'étage 3 est inaccessible par défaut, puisqu'il est contrôlé par la variable SDL "Elevator2FloorEnabled_2". Un responder active automatiquement une barrière lorsque l'ascenseur est en mouvement. Et un objet vert est activé lorsque l'ascenseur s'arrête à un étage en particulier.
Vu tout ce que ce script peut faire, ca le rend un peu complexe à utiliser. Il y a une documentation en haut du script, lis la bien, normalement ça devrait être assez explicite. Je l'ai écris en anglais vu que le script pourra intéresser d'autres personnes, mais si elle n'est pas clair n'hésite pas à me demander des explications. - elevConsole.py, ce script te permet de zoomer sur la console de l'ascenseur. L'idée est d'avoir un objet invisible autour de la console qui "capture" le curseur du joueur vu qu'il englobe les autres clickables. Lorsqu'il est cliqué, il se déplace derrière les autres clickables (pour ne plus les bloquer), et le jeu force la vue depuis une caméra spécifique. Pour en sortir, il suffit d'utiliser une touche directionnelle ou cliquer sur le bord de l'écran.
Ca nécessite une petite animation contrôlée par un responder, vu que je ne peux pas complètement désactiver le clickable par script.
J'ai aussi appris quelques trucs sur les collisions et subworlds dans Plasma, je note ça ici pour la postérité.
- Les messages "Enable/Disable" ne fonctionnent pas correctement sur les colliders dans des subworlds - les colliders ne se réactivent jamais (ou alors ils se positionnent mal ?). Du coup il faut mieux utiliser des Exclude Regions comme tu peux le voir avec l'objet "RailingXClude" dans le fichier exemple - celles ci fonctionnent correctement... A l'exception que :
- ...Si une Exclude Region faisant partie d'un subworld est activée alors qu'un avatar se trouve dedans, tous les joueurs de l'Âge plantent Bizarre, ce genre de région ne pose pas problème lorsqu'elle est statique...
- Les colliders animés, qui sont eux-même parentés à un objet, lui même parenté au subworld vont se positionner de manière incohérente. Je connais pas le détail, mais le mieux est de s'assurer que ce genre de collider soit parenté directement au subworld.
Donc éviter:
- Code: Select all
Subworld
→ objet A
→ objet B (animé avec collider)
Et préférer:
- Code: Select all
Subworld
→ objet A
→ objet B (animé avec collider)
- Là il s'agit plus d'une erreur utilisateur, mais il faut toujours s'assurer que l'avatar ne pourra pas déclencher la zone d'entrée d'un subworld en même temps que la zone de sortie. Sinon, l'avatar passera son temps à faire le ping-pong entre le subworld et le "main world". Ca provoquera un très léger tressautement de l'image, et risque de spammer le serveur de messages
Je sais pas si c'est très clair, mais sais-t'on jamais, si un jour ça peut éviter des ennuis à quelqu'un
Maroonroon wrote:Je me rend bien compte que c'est probablement le(s) NodeTree(s) qui sera le plus complexe dans mes Âges, et pour cause, c'est lié au grand final (bien qu'il y aura encore de petites choses à faire ensuite) ; d'ailleurs je pense qu'il va me falloir du Python à un moment donné, peut-être même maintenant.
Honnêtement concentre-toi vraiment sur les node trees, notamment les responders et les scripts déjà présents dans le jeu (les xAgeSDL***.py en particulier). Le Python est plus compliqué, et la manière dont Plasma utilise les scripts Python est carrément bordélique.
Maroonroon wrote:Bref, je rame un max mais n'avance pas ; je passe plus de temps à faire du debug (ou du moins à essayer) que de la construction.
C'est hélas fréquent quand on bosse sur ce moteur de jeu. Il faut vraiment avancer petit à petit et pas désespérer...
Maroonroon wrote:Des objets disparaissent entre 2 ouvertures du .blend...
Hmm, ça je ne l'ai jamais constaté, mais si c'est le cas ça pourrait devenir très vite gênant. Peu de risque que ça soit causé par un autre programme (en particulier pas par un VPN). Quoique un antivirus trop zélé peut parfois causer des problèmes, mais je ne pense pas que ça soit le cas non plus ici.
Bref, pour en revenir à l'ascenseur, ça risque de te prendre un petit peu de temps à paramétrer, mais le résultat final devrait être nickel ou presque. Tu me dis si tu as d'autres problèmes.