Bonjour Dallara,
Tout d'abord, c'est très bien d'avoir mis ton script en "spoiler" car ça prend moins de place mais les "spoilers" ne conservent pas la mise en page et les tabulations. Il faut donc que tu le mettes d'abord entre balises de "code" et que tu mettes ensuite le tout dans un "spoiler". (Regarde le "spoiler" de mon précédent message).
Ensuite, pour les collisions :
Le problème est que Morrowind gère très mal les collisions des objets. Les seules qui fonctionnent correctement sont celles des PNJs et des créatures. Les données de collision de ton bateau disparaissent au changement de cellule ; c'est ce qui fait que les PNJs passent à travers en cours de route et qu'au final, le bateau n'a plus de collision. On pourrait en faire une créature mais dans ce cas, tu ne pourrais plus mettre de PNJs dessus.
Pour que je puisse te proposer une solution qui tienne la route et pas trop dure à mettre en œuvre, il faudra que tu patientes car je dois faire des essais. Mais si quelqu'un d'autre à une solution à proposer en attendant, qu'il ou elle n'hésite pas à la dire.
Le problème à résoudre est que le PJ n'est pas sur le bateau. Si c'était le cas, il suffirait de faire comme je fais avec mon voilier. C'est à dire, quand "CellChanged" renvoie 1 (à chaque changement de cellule), on remplace le bateau par un autre. Mais "CellChanged" indique uniquement si le PJ change de cellule et pas si c'est le bateau sans le PJ.
Je vois deux pistes à suivre :
La première serait de faire le changement de bateau à une position très précise, étant donné que tu connais la route que suit le bateau. Dans ce cas, on n'aurait plus besoin de détecter le changement de cellule. Mais il faudrait vérifier que la perte de collision se fait bien toujours exactement au même endroit. Si tu pouvais vérifier ça, ce sera déjà une bonne chose de faite.
Pour voir ça, tu peux ajouter une MB dans ton script, qui indique les positions x et y du bateau au fur et à mesure du trajet, pour voir si les PNJs tombent toujours exactement au même moment du déplacement :
La deuxième serait de "scripter" les PNjs pour qu'ils restent toujours à la même hauteur et bougent en même temps que le bateau. Dans ce cas, peu importe que le bateau n'ait plus de collision puisque les PNJs ne seraient plus portés par lui mais par script avec "SetPos". Une fois arrivé au port, le bateau serait remplacé et retrouverait sa collision. Les PNJs quand à eux retrouveraient leur liberté de mouvement sur un objet de nouveau solide.
Mais cette solution implique d'autres difficultés :
- Les fonctions de déplacement comme "move" et "rotate" ne fonctionnent pas avec les PNJs. Il ne sert donc à rien de leur donner le même script que celui du bateau (comme tu l'as fait). Les détecteurs de collision de mon voilier sont des créatures et elles suivent exactement le déplacement du bateau grâce à "SetPos" et une astuce pour les faire tourner. Mais ces créatures sont paralysées et invisibles, ce qui nous amène à une autre difficulté, ci-dessous.
- Même si tu fais un "SetPos z" à chaque frame dans le script d'un PNJ, il ne restera pas à la bonne hauteur et suivra le bateau à la nage.
Il faut soit le paralyser (mais je crois que ça se voit), soit lui donner la faculté de voler pour qu'il reste en l'air sans tomber dans l'eau.
Ou bien, il faut baisser la hauteur du bateau et donner aux PNJs la marche sur l'eau. Dans ce cas, plus besoin "SetPos z" car les PNJs resteraient toujours à la hauteur z-50 (celle de "marche sur l'eau").
Bref, comme tu le vois, faire naviguer un bateau en changeant de cellule et en plus avec des PNJs dessus est très compliqué. Si tu y tiens beaucoup (et que tu me laisses le temps), je ferai des recherches pour y parvenir mais je ne te cache pas que si tu peux te contenter de le faire naviguer dans une seule cellule (et de le faire ensuite disparaitre), ce serait beaucoup plus simple. C'est vrai que ce n'est pas génial de voir un bateau apparaitre ou disparaitre d'un coup mais après tout, c'est exactement ce que fait Bethesda (par exemple avec un bateau qui est dans une crique de Solstheim).
Dis-moi donc ce que tu penses de tout ça.
Dallara, le 27.08.2009 à 18:55, dit :
J'ai un petit soucis c'est que maintenant le bateau ne réapparait pas.
Il ne peut pas apparaitre car tu as laissé "set localdaysPassed to 0" sans condition (en fin de script). A chaque frame, cette variable est remise à 0 et elle ne peut donc jamais être à 4, qui est la condition principale pour que le bateau apparaisse et fasse son trajet.
PS : Je n'ai pas installé ton mod (juste l'esp et le meshe du bateau) car il contient énormément de fichiers placés en vrac et dans des emplacements qui ne devraient pas être. C'est bien sûr une version de travail mais dans la mesure où tu as mis ton "mod" en test provisoire avec un lien pour le télécharger dans son sujet, il faudrait que tu commences avant tout par faire le ménage dans les fichiers qu'il installe n'importe comment (et beaucoup d'inutiles), dans le data file de ceux qui prennent la peine de le tester.