Aller au contenu


Optimisation Des Scripts Globaux


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

#1 Mordicus

Mordicus

    Philippe Risoli & Muppets show


Posté 19 février 2006 - 17:58

Petites questions:

Lorsqu'on veut faire démarrer des scripts globaux (start scripts) qui peuvent être un peu longs, y a-t-il une méthode plus conseillée qu'un autre ? Par exemple :

- Faut-il faire des startscripts courts qui déclanchent des scripts plus complets à la première conditions remplie... ou bien, tout laisser dans le script global (pas d'appel de second script) ?

- Est-ce qu'il est préférable de scinder un long script global en plusieurs petits scripts, ou bien de tout mettre (plusieurs scripts de nature similaire) dans un long script unique ? (par exemple, j'ai plusieurs scripts qui changent les sons de certaines armes, vaut-il mieux les regrouper, ou faire des scripts séparés pour chaque arme ?)

... bref, Morrowind a-t-il des préférences ? quelle méthode permet de mieux optimiser le fonctionnement des scripts globaux ?

Et enfin, la commande stopscript doit-elle aussi s'appliquer systématiquement aux scripts globaux, ou bien uniquement à ceux qui ne doivent se lancer qu'une seule fois, ou bien cette commande de les affecte pas ?

Merci. :green:
(Ultra)VGM récalcitrant et moddeur allergique aux jeux vidéo.

#2 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 19 février 2006 - 18:17

Voir le messageMordicus, le 19.02.2006 à 17:58, dit :

Lorsqu'on veut faire démarrer des scripts globaux (start scripts) qui peuvent être un peu longs, y a-t-il une méthode plus conseillée qu'un autre ? Par exemple :

Voir le messageMordicus, le 19.02.2006 à 17:58, dit :

- Faut-il faire des startscripts courts qui déclanchent des scripts plus complets à la première conditions remplie... ou bien, tout laisser dans le script global (pas d'appel de second script) ?
Ca depends, si ton "script long" ne s'execute complement qu'une fois par jour pas exemple ( un bout de script en début detect un changement de "Day" et fait return dans le cas echeant, pas la peine de faire un start script
En fait, la longueur d'un script importe peu. Ce qui importe, c'est si il s'execute completement a chaque frame ou si il se contente de faire un teste avant de rendre la main la plupart du temps.

Voir le messageMordicus, le 19.02.2006 à 17:58, dit :

- Est-ce qu'il est préférable de scinder un long script global en plusieurs petits scripts, ou bien de tout mettre (plusieurs scripts de nature similaire) dans un long script unique ? (par exemple, j'ai plusieurs scripts qui changent les sons de certaines armes, vaut-il mieux les regrouper, ou faire des scripts séparés pour chaque arme ?)
Oui, deja pour la lisibilité :green: Quand tu dois chercher un ligne spécifique dans un script de 400 lignes, c'est la galere, d'autant qu'il n'y a pas de fonction rechercher il me semble.
De plus, je crois que les script sont limité en taille.

Voir le messageMordicus, le 19.02.2006 à 17:58, dit :

... bref, Morrowind a-t-il des préférences ? quelle méthode permet de mieux optimiser le fonctionnement des scripts globaux ?
En résumé : Executer le moins de fonction par frame.
Si ton script long fait juste 1 ou 2 tests pas frame avant de rendre la main, et qu'il ne s'execute completement qu'a des moment précis et rare, c'est parfait.

Voir le messageMordicus, le 19.02.2006 à 17:58, dit :

Et enfin, la commande stopscript doit-elle aussi s'appliquer systématiquement aux scripts globaux, ou bien uniquement à ceux qui ne doivent se lancer qu'une seule fois, ou bien cette commande de les affecte pas ?
Si un script ne doit tourner que pendant un evenement, tu peu le demarrer avec startscript au debut de cet evenement, et l'arreter à la fin de cet evenement... c'est mieux, surtout si ton script fait pas mal de chose.
C'est ce que j'utilise dans Romance. Au debut du mariage, un script ce lance et gere la position du PNJ, ainsi que les vetements et pleins d'autre chose. Ce script est lourd. Mais il s'arret e automatiquement a la fin de la cérémonie. Donc le jeu en lui meme n'est pas affecté.
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#3 Mordicus

Mordicus

    Philippe Risoli & Muppets show


Posté 19 février 2006 - 18:37

Merci Fandorn.

Voir le messageFandorn Delavie, le 19.02.2006 à 18:17, dit :

Ca depends, si ton "script long" ne s'execute complement qu'une fois par jour pas exemple ( un bout de script en début detect un changement de "Day" et fait return dans le cas echeant, pas la peine de faire un start script
En fait, la longueur d'un script importe peu. Ce qui importe, c'est si il s'execute completement a chaque frame ou si il se contente de faire un teste avant de rendre la main la plupart du temps.
J'ai trouvé effet des lignes de script qui permettent de ralentir la fréquence d'execution des scripts en ne les lançant que tous les 5 ou 10 frames, par exemple. Mais, dans le cas du son de remplacement d'une arme, qui peut se faire entendre à n'importe quel moment, je crois ne pas avoir le choix et devoir laisser le script tourner à chaque frame  :(  ... non ?  

Et puisque ce script va tourner à chaque frame, n'ai-je pas intérêt à le réduire au minimun, en le faisant appeler d'autres scripts dès qu'une condition est remplie ? Du genre:
- if (condition A ) startscript "script1"
- if (condition B ) startscript "script2"
- if (condition C ) startscript "script3"

Et ainsi garder un script léger, plutôt que d'avoir dans ce script global les conditions ET les exécutions...  :?: (ex: if CONDITION A => if doOnce = > if playsound, stopsound, playsond, set doonce to 1, etc... if CONDITION B...). Ou alors l'appel d'un second script peut, à sa manière, ralentir Morrowind... ?
(Ultra)VGM récalcitrant et moddeur allergique aux jeux vidéo.

#4 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 19 février 2006 - 18:48

Dans le cas d'une detection de son, je crois qu'il vaut mieux avoir un unique script qui detecte constement le son, et fait return si celui si n'est pas joué.

; ces 3 lignes von s'executer constement ( pas grave, ya que trois lignes :P )
if ( getsoundplaying, son == 0 )
   return
endif

** script enorme de 12743 lignes **; lui ne s'executera que si la condition est remplie , autant dire presque jamais, donc ce n'est pas grave non plus.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#5 Mordicus

Mordicus

    Philippe Risoli & Muppets show


Posté 19 février 2006 - 19:00

D'accord. Je vais ajouter quelques "return" :(

Mais dans mon cas ce n'est pas aussi simple. Je ne peux pas me baser sur la détection d'un son, ça ne suffit pas (mon script essaie justement de pallier le fait que Morrowind utilise le même son pour plusieurs armes).

Cela dit, le script qui suit ne fait pas 12743 lignes  :?:
(Ultra)VGM récalcitrant et moddeur allergique aux jeux vidéo.

#6 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 19 février 2006 - 19:08

Dans ce cas...


[/quote]
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#7 Mordicus

Mordicus

    Philippe Risoli & Muppets show


Posté 19 février 2006 - 19:13

Ca ne le fera pas comme ça, mais j'ai bien compris le principe. :?:

Je placerai en tête du script global toutes les conditions qui peuvent annuler le lancement du script, à l'aide d'un RETURN.

Merci. :(

Modifié par Mordicus, 19 février 2006 - 19:14.

(Ultra)VGM récalcitrant et moddeur allergique aux jeux vidéo.

#8 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 19 février 2006 - 19:15

place en tete de liste la condition qui a le moins le plus de chance d'etre vrai, afin de rendre la main le plus tot possible :?:
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#9 alliop

alliop

    Renaissance de l'art magique.


Posté 19 février 2006 - 20:44

Il y a aussi une fonction tribunal non documentée dans le tesc ( mais ici : http://www.uesp.net/...l_Function_List )

GetWeaponDrawn  "détecter arme dégaînée"

Elle pourra peut être te servir parmi les "conditions qui peuvent annuler le lancement du script"  (je suppose que tes armes ne produiront pas de son si elles ne sont pas dégainées).

Modifié par alliop, 19 février 2006 - 20:46.

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)