Un Matelas Récalcitrant
#1
Posté 31 juillet 2013 - 16:55
voici un message d'erreur qui survient au démarrage de MW :
Local count for script "X_matelas_flottant" differs from local
count for saved reference data .
Quelqu'un peut-il m'en dire un peu plus là-dessus ?
#2
Posté 31 juillet 2013 - 17:03
En l'état actuel des choses, il va être un peu malaisé de te donner une réponse rapide, ce script n'appartenant pas au jeu et aux extensions de base... Mais, en général, ce n'est pas un message alarmant et il suffit de continuer en cliquant sur "yes" ou "yes for all" pour que le jeu se lance sans souci...
Pourrais-tu indiquer, dans ton profil, la liste de tes mods?... Ça facilitera grandement la recherche...
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#3
Posté 31 juillet 2013 - 17:29
Je pense que le script associé à l'objet en cause ne fonctionne pas ; alors je te le livre pour me
dire si ,au moins ,il est correct :
begin X_matelas_flottant
short DoOnce
short actived
float timer
if (OnActivate == 1)
set actived to 1
endif
if (activated == 1)
if (DoOnce == 0)
set timer to (timer + GetSecondsPassed )
if ( timer < 5 )
"cache_trappe"->Move x 10
else
set DoOnce to 1
set activated to 0
endif
endif
endif
End
#4
Posté 31 juillet 2013 - 18:17
Effectivement, si le script vient d'un mod en cours dans ton Tescs, je ne risquais pas de le trouver...
Si j'ai bien compris ton script, il sert, quand on active un objet, à faire glisser une plaque dissimulant un passage, et à la laisser ensuite ouverte, non?...
Dans ce cas, je pense que tu peux simplifier un peu en mettant quelque chose de ce genre...
begin x_matelas_flottant short DoOnce Float timer if ( MenuMode ==1 ) ;afin d'éviter que le script ne se poursuive pendant l'ouverture d'un inventaire... return endif if ( OnActivate == 1 ) if ( DoOnce == 0 ) Set timer to ( timer + SetSecondsPassed ) Set DoOnce to 1 endif endif while ( timer < 5 ) "cache_trappe"->Move, x, 10 ; Tant que le timer n'atteint pas 5, la plaque bouge... enwhile end
Dans l'état actuel de ton script, tu risques de rencontrer quelques soucis avec ta variable "actived" qui ne sert pas vraiment à grand-chose...
De plus, tu as, je pense, fait une petite coquille en la nommant "activated" dans un des tests... Là, le script risque de ne pas comprendre ce que tu veux...
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#5
Posté 31 juillet 2013 - 18:39
je vais essayé comme ça .
Je voudrais néanmoins avoir un éclaicissement : lorsque l'on déplace un objet pendant plusieurs secondes
le script boucle sur lui même mais alors quel état prend la fonction OnActivate ?
Puisque le joueur relâche la barre d'espace ,la valeur repasse-t-elle à 0 ?
Habitué à la programmation "classique" ,j'avoue être complètement perturbé par ces scripts qui
bouclent en permanence !?
#6
Posté 31 juillet 2013 - 18:56
Donc, il faut qu'elle ait une action qui lui soit directement attachée dans la même frame, et une interruption immédiatement après...
En effet, le joueur peut exercer sur la barre d'espace soit un appui bref, soit un long, et il ne faut pas que ça puisse influer sur le résultat du script...
C'est donc le but de cette partie...
if ( OnActivate == 1 ) if ( DoOnce == 0 ) Set timer to ( timer + SetSecondsPassed ) Set DoOnce to 1 endif endif
Si tu appuies sur la barre d'espace, le "OnActivate", initialement à 0 passe à 1.. Le DoOnce, initialement à 0 indique que c'est la première fois que tu actives l'objet, donc le timer se déclenche, puis le DoOnce passe immédiatement à 1, ce qui bloque le test "if ( DoOnce == 0 ) qui est désormais faux, et interdit de facto un deuxième démarrage du timer afin de le laisser se dérouler sans interférence...
A présent, le script se résume à la boucle "while--->endwhile qui se répètera tant que le timer n'a pas atteint 5 secondes...
Donc, pour résumer, après avoir activé une fois l'objet déclencheur, tu pourras ré-appuyer dessus autant que tu veux, ça ne fera plus rien...
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#7
Posté 31 juillet 2013 - 22:09
tel point que MW ne veut plus démarrer !? Je pense n'avoir plus d'autre choix que la réinstallation .
Pas grave ... mais je suis certain que ce problème de référence n'était pas anodin.
#8
Posté 31 juillet 2013 - 23:23
Avant de tout réinstaller, as-tu essayé de démarrer une nouvelle partie?... Il se peut que ton souci vienne du fait que tu aies fait une sauvegarde en cours de test de ton mod, et la sauvegarde ne marchera plus si tu modifies quelque chose après...
Il ne faut jamais sauvegarder sur un mod en cours....
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#9
Posté 01 août 2013 - 09:28
Voici un script que j'utilise pour avoir une cloison coulissante :
begin kbase_s_dnicloison_xm short monetat short moveon float timer if ( moveon == 0 ) if ( onactivate == 1 ) set timer to 0 set moveon to 1 endif else set timer to timer + getsecondspassed if ( timer < 3 ) if ( monetat == 0 ) moveworld x -45 else moveworld x 45 endif else if ( monetat == 0 ) set monetat to 1 set moveon to 0 else set monetat to 0 set moveon to 0 ;setatstart endif endif endif end
Le script est sur l'objet même qui coulisse et permet de le remettre à sa place si on le réactive mais ça donne l'idée pour gérer ton matelas.
moveon permet de savoir si la cloison est en mouvement (1) ou pas (0) et monetat indique si elle est en position ouverte (1) ou fermée (0) sachant qu'elle est initialement fermée.
L'abus de SMS est dangereux pour l'élocution mentale
Le mod qui révèle (presque) tout sur les dwemers : Dwarmor
Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...
#10
Posté 01 août 2013 - 10:35
Le dernier script avec timer que j'ai utilisé remonte à mes mannequins magiques, il faudrait que je révise mes classiques plus souvent...
Le voilà, mais c'est un script pour un rideau ouvrable et refermable...
Mais, pour finir, je dois avouer que, plutôt que les timers, je préfère utiliser les coordonnées pour déplacer un objet, surtout si c'est un mouvement qui doit se répéter; ayant remarqué des soucis de décalage avec les timers, à la longue...
Pour le contrôle par coordonnées, ça donne plutôt ça...
Là, le timer ne sert qu'à marquer le temps d'arrêt pendant lequel on peut sauter sur la plateforme de l'ascenseur, mais le mouvement en lui-même ne se fait que par la vérification des coordonnées de l'objet...
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#11
Posté 01 août 2013 - 11:08
Le problème de ton script par coordonnées est qu'il est lié à l'emplacement précis de l'objet en mouvement, mes cloisons sont des objets génériques que je peux mettre n'importe où (en fait il y a 4 cloisons selon l'axe de mouvement voulu (x ou y) et le sens d'ouverture (positif ou négatif)). Mais pour le problème de john doe, vu qu'il s'agit d'un objet précis, pas de problème.
Le problème de décalage existe aussi avec ton script de coordonnées pour une exécution dans un sens donné, tu ne peux jamais savoir exactement la position exacte en bout de course, ton script compense cela sur un cycle aller-retour, ce qu'on peut faire dans mon script timer en décommentant le setatstart.
Pour le problème de john doe, vu qu'il n'y a qu'un aller sur un objet précis, les solutions se valent.
begin X_matelas_flottant short moveon float timer if ( moveon == 2 ) ; si lit ouvert, plus rien à faire return endif if ( moveon == 0 ) if ( onactivate == 1 ) set timer to 0 set moveon to 1 endif else set timer to timer + getsecondspassed if ( timer < 5 ) "cache_trappe"->Move x 10 else set moveon to 2 endif endif end
L'abus de SMS est dangereux pour l'élocution mentale
Le mod qui révèle (presque) tout sur les dwemers : Dwarmor
Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...
#12
Posté 01 août 2013 - 13:32
Une question cependant : la boucle while bloque-t-elle l'exécution d'autres scripts ?
Pour faire simple ,les scripts sont-ils exécutés par des threads séparés ou de façon synchrone
l'un après l'autre ?
#13
Posté 01 août 2013 - 13:44
Plusieurs scripts locaux peuvent s’exécuter simultanément dans la même cellule sans interférer...
La seule chose, c'est que si tu passe un certain nombre de scripts exécutés en parallèle, ton framerate finira par en souffrir...
Après, en ce qui concerne le nombre maximum, il n'y a pas de règle exacte, mais on peut dire qu'il vaut mieux éviter de mettre plus de dix scripts en boucle dans une cellule si on veut être clément avec toutes les configurations...
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)
#14
Posté 01 août 2013 - 14:35
Donc pour répondre à ta question John Doe, oui le while du script de Kira aura une incidence puisqu'il tourne à l'infini DANS UNE MEME FRAME amenant le jeu à systématiquement planter à mon avis. En fait de manière générale, pour les scripts Morrowind, on n'utilise quasiment jamais les boucles puisqu'il y a en permanence la "boucle infinie de l'exécution chaque frame".
L'abus de SMS est dangereux pour l'élocution mentale
Le mod qui révèle (presque) tout sur les dwemers : Dwarmor
Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)