Les forums JOL

Les forums JOL (http://forums.jeuxonline.info/index.php)
-   NWN - Maskado (http://forums.jeuxonline.info/forumdisplay.php?f=28)
-   -   [question] Histoire d'INCLUDES (ou... comment distinguer les Scripts de Bioware ?) (http://forums.jeuxonline.info/showthread.php?t=140440)

coolstar 25/11/2002 15h33

[question] Histoire d'INCLUDES (ou... comment distinguer les Scripts de Bioware ?)
 
Hi!


Voilà pour moi un nouveau sujet épineux... en gros, maintenant que je saisis mieux certaines choses, je me suis retrouvé de fait confronté au mystérieux prob des INCLUDES... :D

Quel en est le principe exacte ? :confus:


Bon, ok, j'ai cru comprendre que cela permettait de faire appel par exemple à une Bibliothèque (comme celle de Jedaï) ou d'Inclure d'autres Scripts (des Pré-Scripts en quelque sorte?)... mais encore ?? ça tourne comment en optimisation ??? :confus:


Mais, le cas échéant, avec la flopée hallucinante de Scripts disponibles (ne serait-ce que ceux composés par les gars de Bioware), c plus que difficile de s'y retrouver honnêtement... surtout vu la longueur vertigineuse de certains... donc, ma question finale se résume à :

A t-on pensé à constituer un récapitulatif du contenu et de l'utilité (fonctions) des-dits Scripts ??? :ange:

...


Merci pour vos réponses les gars!! :merci: :merci: :merci:

¤ TynriL ¤ 25/11/2002 15h50

Les fichiers dit "includes" (pour Inclusion, hé, l'aut' !) sont des bibliothèques de fonctions. On y trouve ni fonction main(), ni fonction StartingConditional(), mais uniquement des fonctions personnelles.

Les includes ne peuvent pas êtres compilés indépendamment d'un autre script, il suffit donc de les sauvegarder. Ils peuvent avoir plusieurs fonctions.

Il y a un truc chiant dans les scripts de Bioware, c'est les noms de fonctions de 12km. Par exemple :
Code PHP:

GetNearestObjectByTag(string sTagint nCount); 

C'est joli, mais quand on l'utilise 28x par script, c'est un peu chiant a réécrire. Alors on peut définir un alias, c'est à dire une copie exacte de la fonction, avec un nom plus court :
Code PHP:

object GNOT(string sTagint nCount) {
    return 
GetNearestObjectByTag(sTagnCount);


Déjà 'achement moins long !

Les alias peuvent aussi servir pour des fonctions "nouvelles mais pas vraiment". En gros, simplifier une fonction en fonction (haha) de l'usage qu'on en fait. Exemple : Spawner un PNJ. Ca revient à faire un appel sur CreateObject(OBJECT_TYPE_CREATURE, gnagna, etc). C'est long, et c'est pas utile. On déclare un alias !
Code PHP:

void SpawnNPC(string sTemplatefloat fX 0.0float fY 0.0float fZ 0.0float fFacing 0.0int bFade FALSE) {
    
CreateObject(OBJECT_TYPE_CREATURE,sTemplate,Location(GetArea(OBJECT_SELF), Vector(fX,fY,fZ), fFacing),bFade);


Et hop, pour faire apparaitre un PNJ en X=8, Y=5, on a plus qu'a faire
Code PHP:

SpawnNPC("MonPNJ",8.0f,5.0f); 

Super simple ! :)

On peut également définir des fonctions qui n'existent pas, mais qu'on utilise souvent. Par exemple :
Code PHP:

int CountItemsOnObject(object oContainerstring sItemTag) {
    
int nReturn 0;
    if(
GetIsObjectValid(oContainer) && sItemTag != "") {
        
object oScan GetFirstItemInInventory(oContainer);
        while(
GetIsObjectValid(oScan)) {
            if(
GetTag(oScan) == sItemTagnReturn += GetNumStackedItems(oScan);
        }
    }
    return 
nReturn;


C'est utile ! :)

Tout ça c'est très bien, me direz-vous, mais pourquoi pas bêtement coller la fonction au début de tous mes scripts ? C'est simple. Pour organiser, centraliser, optimiser ! Imaginez que vous faites une série de 125 scripts pour une quête de 20h de jeu. Dans tous ses scripts, vous mettez vos fonctions. Viens le moment de l'essai, et Ô torpeur, il y a un bug dans une de vos fonctions !! Vous voilà bon pour quelques heures de copier/coller en plus de la correction du bug. Si vous aviez centralisé vos fonctions dans un include, il suffisait de le modifier, de recompiler le module, et le tour était joué...

Une petite astuce en prime : Comment faire apparaitre sa fonction dans la liste, à droite ? Il faut la déclarer avant. En gros, il suffit de copier la première liste de la fonction, et d'y changer l'accolade ouvrante par un point-virgule. Les déclarations de fonctions se font généralement tout au début du script. Vous pouvez également ajouter un commentaire qui apparaitra dans l'aide en bas de l'éditeur de script, il suffit de le mettre au dessus de votre déclaration de fonction. Exemple :
Code PHP:

// Tynclude : Nombre d'objets d'un certain tag
// oContainer -> Contenant dans lequel chercher
// sTag       -> Tag de l'objet a compter
int CountItemsOnObject(object oContainerstring sItemTag); 

Et maintenant, j'ai mon fichier include, comment je l'utilise ? Simplement ajouter une ligne tout au début de votre script, avant toutes les fonctions :
Code PHP:

#include "LeNomDeMonScript" 

Ce dont il faut se gaffer :
- Les includes recursifs
J'inclut un include dans mon include, et dans l'include que j'inclus, j'inclus mon include. Moyen d'éviter : ne pas mettre d'include dans un include.
- La recompilation
Je change mon include, mais ça ne corrige pas mon bug. Moyen d'éviter : Recompiler le module (Créer > Module) à chaque modification d'un include.
Enjoy! :p

coolstar 25/11/2002 16h21

Yep! ;)

Mastokk 25/11/2002 19h34

sticky ?

yoko 13/03/2003 23h48

Yoko
 
:lit: oui sa serai bien d'avoir une liste des nom dess cript dans biowaire avec se qu'il font et ou faut t'il les placer sa serais franchement chouette :mdr: pour ceux qui s'y connaise pas :rougit:

est se que quel qu'un l'a deja fait :chut:

a + yoko

Reyan 14/03/2003 00h16

vi :)
recherche dans les persistant de sujet de référence, un outil nommé "Lexicon"
doit y en avoir un en francais :)
ca dit ce que font toute les fonction de base, et p-e même certaine des include utilisés par Bioware :)
télécharge le, l'est très util :)

KzimiR666 20/10/2003 18h14

C'est clair que sans le Lexicon... hehe, je vois même pas comment on pourrais faire sans ça !!!:)
Un bon scripteur est un scripteur avec le Lexicon dans un dossier avec un raccourcis rapide vers celui-ci !:mdr:

'Az 21/10/2003 07h13

Citation:

Un bon scripteur est un scripteur avec le Lexicon dans un dossier avec un raccourcis rapide vers celui-ci !
erf.... j'dois pas être un bon scripteur alors, j'ai jamais ouvert ce truc de ma vie :D

21/10/2003 07h47

Sinon tu peux le télécharger le lexicon :
http://nwvault.ign.com/Files/other/d...99441708.shtml

eMRaistlin 21/10/2003 09h40

houla, revival from outer space topic...


vous croyez que Turn Undead fonctionne sur les topic-revival ?


Fuseau horaire GMT +1. Il est actuellement 12h29.

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés.