La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 18:24:59


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Saelis
Grand Maître Chanteur du Conseil
Inscrit le: 04 Oct 2002
Messages: 7047
Localisation: Lille
Répondre en citant
Posté le : 22/10/2003 14:15:16 Sujet du message : Création d'includes

Bon après maintes recherches infructueuses je me résigne à poster.
Je n'arrive pas à créer de fichiers include. En gros j'ai deux cas de figure: Soit il m'insulte parce qu'il n'y a pas de main(), soit il m'insulte parce qu'il n'y a pas de StartingConditional()

Si je met un main() dans l'include, forcément, il m'insulte qd j'utilise l'include à un endroit ou il y a déjà un main().

Pour le StartingConditional, je ne vois pas à quoi ca sert ni ce que ça vient faire là Confused
_________________
Now that we've fattened the cow and set out to plow unknown enemies - "Wow!" Shouts the startled crowd "Oh no did you see what I did see?" - The ravaged cabbage drifts on dark red skies - And it looks so nice

Vainqueur BB1, BB3, BB5 et BB6
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 22/10/2003 14:34:25 Sujet du message : Re: Création d'includes


Saelis a écrit :
Bon après maintes recherches infructueuses je me résigne à poster.
Je n'arrive pas à créer de fichiers include. En gros j'ai deux cas de figure: Soit il m'insulte parce qu'il n'y a pas de main(), soit il m'insulte parce qu'il n'y a pas de StartingConditional()

Si je met un main() dans l'include, forcément, il m'insulte qd j'utilise l'include à un endroit ou il y a déjà un main().

Pour le StartingConditional, je ne vois pas à quoi ca sert ni ce que ça vient faire là Confused
En gros, tout fichier de script doit comporter un main() ou un StartingConditionnal() (c'est un OU exclusif), sauf les fichiers de script à mettre en include.
Voici un exemple :
Code :

// ce fichier s'appelle mon_include.nss
void MaFonction()
{
  //mon code
}

En l'absence de main, ce fichier ne doit pas te refuser la compilation. Le problème est qu'il n'indiquera pas toutes les erreurs qu'il est susceptible de trouver. En gros, il te trouveras les erreurs de syntaxe pure, mais par les erreurs de parcours (genre quand il manque un return à une fonction, ou qu'une imbrication de bloc est mal faite, ou encore qu'une fonction n'a pas le bon nombre de paramètres, etc..).

Moi j'utilise une astuce pour compiler indépendamment mes fichiers "à inclure". Je rajoute la ligne suivante à la fin :
Code :

void main(){}

Il me suffit de compiler avec cette ligne pour repérer toutes les éventuelles erreurs. Puis de la mettre en remarque pour la sauvegarde définitive du fichier.

Ensuite pour utiliser le fichier à inclure :
Code :

#include "mon_include"

void main()
{
  MaFonction();
}


Ou

Code :

#include "mon_include"

int StartingConditionnal()
{
  MaFonction();
  return TRUE;
}


La présence d'un main ou d'un StartingConditionnal est en somme indispensable au bout d'un moment. StartingConditionnal est une fonction utilisée dans les scripts de dialogue de type Condition. Cette fonction doit renvoyer vrai ou faux pour savoir si un élément de dialogue apparaît ou non. Dans ce cas de figure, on ne met pas de main. Dans tous les autres cas, cette fonction ne doit pas apparaître sinon elle entre en conflit avec le main.

En plus de ça, il faut faire attention aux inclusions multiples, du genre lorsqu'un fichier en inclus un qui en inclus un autre. Tous les fichiers inclus en cascade ne doivent comporter aucun main ni aucun StartingConditionnal.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Saelis
Grand Maître Chanteur du Conseil
Inscrit le: 04 Oct 2002
Messages: 7047
Localisation: Lille
Répondre en citant
Posté le : 22/10/2003 14:47:33 Sujet du message : Re: Création d'includes


lendraste a écrit :
En l'absence de main, ce fichier ne doit pas te refuser la compilation.
Ben si justement Embarassed
Et c'est bien là mon pbm Confused

Je peux le sauvegarder simplement mais pas le compiler. Mais peut être est-ce ce qu'il faut faire?
_________________
Now that we've fattened the cow and set out to plow unknown enemies - "Wow!" Shouts the startled crowd "Oh no did you see what I did see?" - The ravaged cabbage drifts on dark red skies - And it looks so nice

Vainqueur BB1, BB3, BB5 et BB6
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 22/10/2003 15:05:43 Sujet du message : Re: Création d'includes


Saelis a écrit :
Ben si justement Embarassed
Et c'est bien là mon pbm Confused

Je peux le sauvegarder simplement mais pas le compiler. Mais peut être est-ce ce qu'il faut faire?
Tu peux l'afficher ici ?
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Saelis
Grand Maître Chanteur du Conseil
Inscrit le: 04 Oct 2002
Messages: 7047
Localisation: Lille
Répondre en citant
Posté le : 22/10/2003 15:26:41 Sujet du message :

C'était bien ça. Je peux utiliser la commande "sauvegarder le fichier actuel" (ctrl+S) mais pas la commande "Sauvegarder et compiler" (F7) sur un include.

C'est tout ce que je voulais savoir! Pas besoin de compiler l'include pour que ca soit pris en compte.

Donc ça marche donc je peux continuer mon douloureux apprentissage... Very Happy
_________________
Now that we've fattened the cow and set out to plow unknown enemies - "Wow!" Shouts the startled crowd "Oh no did you see what I did see?" - The ravaged cabbage drifts on dark red skies - And it looks so nice

Vainqueur BB1, BB3, BB5 et BB6
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 22/10/2003 15:47:25 Sujet du message : Re: Création d'includes


Saelis a écrit :

lendraste a écrit :
En l'absence de main, ce fichier ne doit pas te refuser la compilation.
Ben si justement Embarassed
Et c'est bien là mon pbm Confused

Je peux le sauvegarder simplement mais pas le compiler. Mais peut être est-ce ce qu'il faut faire?
Effectivement, erreur de ma part. Toutefois, chez moi, la compilation à la sauvegarde est activée et il ne me jette nullement d'insulte lorsque je sauvegarde un include file, sauf si ce dernier comporte des erreurs de syntaxe. Il accomplit peut-être un compilation limitée à une passe dans ce cas de figure précis. Je tâcherai de vérifier.
Quoiqu'il en soit, je ne saurai trop de te conseiller d'effectuer une compilation avec un main pour t'assurer que l'include file ne contient pas d'erreur avant de le sauver sans le main car, par la suite, si on y prend pas garde, les messages d'erreur de compilation d'un script utilisant l'include peuvent provenir aussi bien de l'include que du script en question ce qui est assez déroutant, surtout quand il indique une erreur à la ligne 200 alors que notre script n'en comporte que 100 et que l'erreur est issue de la 200ième ligne de l'include.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 22/10/2003 19:04:51 Sujet du message :

Je me permets de préciser un peu les choses : un script d'include ne compile en général pas (en fait je n'en ai jamais vu compiler sans main) et n'a pas à être compilé.
Il suffit de l'enregistrer, puis de compiler les scripts qui utilisent cet include.

A la moindre modification d'un fichier include, il faut évidemment recompiler tous les autres scripts l'utilisant.

Dernier chose : la taille d'un fichier include n'a aucune incidence sur la taille (après compilation) d'un script utilisant cet include. On m'a déja dit qu'utiliser un include de 2000 lignes dans tout un tas de script ralentissait le jeu, ben moi je dis que non Very Happy (et Bioware aussi d'ailleurs). Un script qui utilise un include, ne contiendra dans sa version compilée que les fonctions qu'il utilise dans le include, et pas le reste.

En clair, faites des include, ça a que des avanatges Cool
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 26/10/2003 10:23:13 Sujet du message :

En fait l'include reste dans le jeu en fichier Texte parce que quand vous recompilez tous vos scripts, le jeu pour CHAQUE script où vous avez fait appel à une fonction d'include, rajoute l'intégralité de l'include au début du script, puis compile ensuite.
Cela veut dire que si 100 de vos scripts à 4-5 lignes font appel à une include qui fait 1000 lignes, et celà juste pour une ou deux fonctions, ces 100 scripts seront compilés comme s'il sagissait de scripts à plus de 1000 lignes chacun, donc démultiplication des tailles des scripts, et donc démultiplication de la taille de votre module. Surprised
Le but c'est donc de faire plusieurs includes, par type disons, de pas plus de 150 lignes, pour ne pas exagérer la taille de vos scripts. Et surtout de REcompiler tous vos scripts ensuite. Smile
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Cheyenne
Novice
Inscrit le: 06 Oct 2003
Messages: 11
Répondre en citant
Posté le : 27/10/2003 07:07:46 Sujet du message :


Citation :
En fait l'include reste dans le jeu en fichier Texte parce que quand vous recompilez tous vos scripts, le jeu pour CHAQUE script où vous avez fait appel à une fonction d'include, rajoute l'intégralité de l'include au début du script, puis compile ensuite.
Oui.


Citation :
Cela veut dire que si 100 de vos scripts à 4-5 lignes font appel à une include qui fait 1000 lignes, et celà juste pour une ou deux fonctions, ces 100 scripts seront compilés comme s'il sagissait de scripts à plus de 1000 lignes chacun, donc démultiplication des tailles des scripts, et donc démultiplication de la taille de votre module.
Je ne suis pas d'accord avec toi Smile.
Prenons un exemple :

Script "inc_malibrairie"
Code :
void test_1 { PrintString( "Bonjour !" ); }
void test_2 { PrintString( "Salut !" ); }


Script A
Code :
#include "inc_malibrairie"
void main () {}


Script B
Code :
#include "inc_malibrairie"
void main () { test_1; }


Script C
Code :
#include "inc_malibrairie"
void main () { test_1; test_2; }


Pour chacun de mes scripts A, B, C, je vais automatiquement lancer la compilation du script lui-même et de la librairie toute entière (ce que tu mentionnes justement), même si je n'utilise aucune fonction de celle-ci (dans le cas du script A).

En revanche, la taille des scripts compilés, et en conséquence du module, ne dépend uniquement des fonctions réellement utilisées (du moins si on utilise un "bon" compilateur, et celui de Aurora l'est), donc :

taille compilée du script C > taille compilée du script B > taille compilée du script A

Tu peux faire l'essai pour t'en convaincre en extrayant les script (compilés) "*.ncs" de ton module.

Conclusion
Les librairies ("includes") n'ont que des avantages si vous les construisez "proprement", n'hésitez pas en abuser Smile.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 50.535ms