Aller au contenu


Comportement étrange Script D'ascenseur


  • Veuillez vous connecter pour répondre
17 réponses à ce sujet

#1 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 07 avril 2009 - 09:44

Bonjour,

J'ai fait un nouveau script d'ascenseur pour Dwarmor permettant de desservir 3 étages avec gestion de l'ouverture et fermeture d'une "cage d'ascenseur" à chaque niveau.
Le script en lui même fonctionne mais avec une condition étrange. Au départ, les messagebox n'était pas présents et le script ne fonctionnait pas. Voulant tracer le problème, j'ai ajouté les messagebox et là le script a fonctionné sans rien modifier d'autre  :banderilles: Après raffinement, il s'avère que seul le premier messagebox (celui affichant 1) est nécessaire. En fait il semble juste qu'il faille une instruction quelconque à cet endroit pour faire fonctionner le script, par exemple si je met un set d'une variable quelconque ça marche (actuellement c'est ce que j'ai fait pour garder le script fonctionnel "set bug to 0", bug étant un short qui ne sert à rien).
Je n'arrive pas à comprendre pourquoi il faut une instruction à cet endroit là. Si je la mets en commentaire, ça ne marche pas.
Donc si quelqu'un voit la source de ce comportement, ça m'intéresse mais ça n'a rien d'urgent vu que j'ai pu faire fonctionner le script avec le set bug.

Voila le script :
Spoiler

Pour info, kbase_v_tst_asc2_N est une variable mémorisant l'état de l'ascenseur (étage atteint et état d'ouverture de la cage à l'étage atteint) et kbase_v_tst_asc2_M indique si l'ascenseur est immobile (0) ou monte (1) ou descend (-1),la variable monetat du script permet de mémoriser l'étage d'origine dont part l'ascenseur. Ce script est porté par la plateforme de l'ascenseur (kbase_a_tst_asc2_p) et les boutons de manipulation se contentent de changer la valeur de kbase_v_tst_asc2_M. On ne peut donc changer que d'un étage à la fois.

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...


#2 abg

abg

    L'ABG pour les civilisés


Posté 07 avril 2009 - 14:46

Le second bloc if...endif à partir de la ligne 21 :

Voir le messageKorfandar, le 07.04.2009 à 10:43, dit :

if ( kbase_v_tst_asc2_M == 1 )
MessageBox "1"

pourrait bien dépasser la limite du nombre d'instructions autorisées entre un if et son endif...
Évidement on peut se demander pourquoi ça marche si tu ajoutes des instructions (les messagebox) mais Morro devient si incohérent quand on frise ce genre de limite  :lol:
Je commencerai par essayer de le scinder...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#3 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 07 avril 2009 - 15:24

Mettre un if différent au lieu du else pour scinder le if, j'essaierai ce soir.

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...


#4 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 07 avril 2009 - 15:30

Voir le messageabg, le 07.04.2009 à 15:45, dit :

pourrait bien dépasser la limite du nombre d'instructions autorisées entre un if et son endif...
Il y a une telle limite ? Tu tiens cette information d'où ?
You look like you need a monkey!

Attention : perfectionniste paresseux.

#5 abg

abg

    L'ABG pour les civilisés


Posté 07 avril 2009 - 15:56

Voir le messageKafou, le 07.04.2009 à 16:29, dit :

Voir le messageabg, le 07.04.2009 à 15:45, dit :

pourrait bien dépasser la limite du nombre d'instructions autorisées entre un if et son endif...
Il y a une telle limite ? Tu tiens cette information d'où ?
De mon expérience : un script dans le genre de celui ci-dessus avec un énorme bloc if...endif. Il s'est avéré qu'une partie des commandes contenues dans le bloc n'étaient plus exécutées.
De l'UESP:

Citation

On the official forums Dave Humphrey notes, "An if block is limited to 255 compiled commands which are difficult to convert in the number of lines as each line may end up as one or several commands when compiled. The 255 line limit is just for each block, i.e. if you had an if block with 200 commands followed an elseif with 100 commands and an else with 50 commands, you'd be fine
Malheureusement le lien qui accompagne cette déclaration est mort.

Mais le script de Korfandar n'a pas l'air si énorme que ça alors mon hypothèse ne tient pas. Il faut aussi regarder le nombre de if imbriqués (il me semble qu'on a pas droit à plus de 8  :peur:)
L'interprétation exacte de la première limitation pourrait être aussi "255 tokens", (un token dans le script compilé pouvant être une commande mais aussi une constante, un opérateur, une référence à une variable...etc.)
Quoi qu'il en soit ça vaut sans doute le coup d'essayer de scinder... Malgré l'effort de documentation par les fans (UESP, MSfD), ça fait des années qu'on nage quant aux limitations exactes du morroscript  :lol:

Modifié par abg, 07 avril 2009 - 16:07.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#6 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 07 avril 2009 - 15:59

Citation

Il y a une telle limite ? Tu tiens cette information d'où ?

Oui/Galsiah - MSfD 9 p166 (après DH)

C'est un fait bien établi maintenant, les scripteurs ayant eu à traiter des scripts un peu longs ont tous pu en faire l'expérience, si on dépasse cette limite, tout ce qui vient ensuite dans le script est ignoré.

#7 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 07 avril 2009 - 16:05

Oki !

Voir le messageNerwal, le 07.04.2009 à 16:58, dit :

C'est un fait bien établi maintenant, les scripteurs ayant eu à traiter des scripts un peu longs ont tous pu en faire l'expérience, si on dépasse cette limite, tout ce qui vient ensuite dans le script est ignoré.
J'ai manipulé des scripts bien longs, mais j'ai jamais eu à faire de (trop) long bloc :lol:
You look like you need a monkey!

Attention : perfectionniste paresseux.

#8 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 07 avril 2009 - 17:41

Citation

J'ai manipulé des scripts bien longs, mais j'ai jamais eu à faire de (trop) long bloc

C'est vrai que ça dépend de la structure des scripts qu'on écrit, mais dans les scripts où on traite des disjonctions de cas (avec plusieurs niveaux imbriqués), cette limitation est une vraie plaie  ;)

#9 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 08 avril 2009 - 14:06

Séparer le grand if en deux n'a pas résolu le problème, pour l'instant je reste donc sur ma bidouille  :)

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 elendell

elendell

    Mécano Dell'Arte


Posté 08 avril 2009 - 14:53

Bonjour Korfandar,

J'ai récemment eu un bogue étrange. Une partie d'un script ne fonctionnait pas, sans aucune raison. Aucune modification ne permettait de le faire fonctionner.

J'ai résolu le problème en récrivant entièrement le script à l'identique. Quand je dis à l'identique, c'est vraiment à l'identique avec la même casse, les mêmes espaces, caractères, etc. Les deux scripts comparés dans Word ne présentent strictement aucune différence et pourtant, le nouveau fonctionne alors que l'ancien, non. Un copier/collé de l'ancien ne fonctionnait pas non plus.

Donc, à tout hasard, j'essayerais à ta place de le récrire (sans le MessageBox en question) pour voir si ça change.

#11 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 08 avril 2009 - 15:00

Heu, on verra si j'en ai le courage  :mrgreen:

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 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 08 avril 2009 - 15:07

Si c'est ça, dans un premier temps copie-colle ce qui est sur le forum dans un nouveau script, éventuellement en passant par un notepad entre deux. Le copier-coller de copier-coller d'une application dans l'autre ça a tendance à enlever les caractères foireux... ou à en rajouter c'est vrai :mrgreen:

Sinon tente la compilation via MWEdit.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#13 elendell

elendell

    Mécano Dell'Arte


Posté 08 avril 2009 - 20:19

Effectivement, quand j'avais tenté sans succès le copier/coller, c'était à l'intérieur du Tescs, d'une fenêtre de script à une autre...

#14 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 09 avril 2009 - 09:04

Dans le cas présent je be suis pas sur que ça change grand chose, en effet il y a deux ascenseurs indépendants de même fonctionnement, j'ai donc écrit le premier script dans le TESCS, copier-coller le script dans writer pour remplacer la chaine "asc1" par "asc2" et recopier le tout dans un nouveau script du tescs. Aucun des deux ne fonctionne sans l'instruction additionnelle. J'essaierai un copier-coller avec une autre appli mais j'ai des doutes.

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...


#15 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 10 avril 2009 - 12:11

Avec cet ajout de messagebox qui fait marcher ton script, je me demande si avec la limitation due à ton long script, il n'y avait pas un problème de gestion dans la frame.
Je ne sais pas comment sont gérer les messages box, mais ça ne m'étonnerai pas que cet affichage change le comportement des threads du jeu. L'explication paraît obscure, car je ne voit pas très bien moi même le comportement, mais, as-tu essayé de séparer le script pour qu'il se déroule sur deux ou trois frames (en utilisant des états) ? Par exemple, en mettant une étape là où tu avais décomposé ton if.

De même, sors les fonctions player->getpos des ifs en stockant dans des variables. Ca ne devrait pas résoudre le problème, mais c'est plus fonctionnel comme ça.

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#16 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 10 avril 2009 - 16:42

Je n'ai peut être pas été très clair mais actuellement le script fonctionne avec un "set bug to 0" à la place du messagebox (bug étant une variable short déclarée juste pour ça). Donc ton explication avec les messagebox ne convient pas.

Quand au player->getpos, je ne comprends pas ce que tu veux dire, il n'y en a pas dans mon script. A moins que tu ne parles des getpos sur les activator, mais ça fait plus de rajout que mon set bug, donc je verrais si j'ai le temps de tester.

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...


#17 elendell

elendell

    Mécano Dell'Arte


Posté 10 avril 2009 - 17:55

Je pense que Finraïl parle de ce type d'instruction : "if ( kbase_a_tst_asc2_p->getpos z < 842 )".
Il vaut effectivement mieux donner le résultat du getpos à une variable et tester ensuite la variable.

Autre chose : Si je comprends bien ta phrase "Ce script est porté par la plateforme de l'ascenseur (kbase_a_tst_asc2_p)", tu veux dire que c'est un script local attaché à "kbase_a_tst_asc2_p" ?

Dans ce cas, il est inutile et quelque fois source de bugs de cibler l'objet. Tu devrais donc utiliser plutôt  "if ( getpos z < 842 )" ou, pour suivre le conseil de Finraïl :

set variable to GetPos z
if ( variable < 842 )

#18 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 10 avril 2009 - 18:48

Oui, je pourrais retirer la référence à kbase_a_tst_asc2_p, essaierais de tester ça ce WE.

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)