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 16:19:45


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
Répondre en citant
Posté le : 22/02/2006 22:54:40 Sujet du message : Fonction du poids

Je voudrais déterminer le poids du matériel transporté par le personnage
J'utilise

if (GetWeight(oPC)>=150){...}

Mais cela ne fonctionne pas apparement

Sauriez vous quelque chose là dessus?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 17/03/2006 01:06:04 Sujet du message :

Bon je sais que ça fait longtemps qu'elle a été posé la question mais elle s'ennuyait toute seule sans réponse dans son coin...

La fonction marche, juste elle renvoie des dixièmes de ... lbs (?).
donc pour un equipement porté pesant plus de 150 trucs (le chiffre affiché sur l'inventaire) ça devient :
if (GetWeight(oPC)>=1500)

Je pense que ton problème vient (venait ?) de là.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 19/03/2006 17:57:57 Sujet du message :

Tien cadeau de cette magnifique fonction. (met la au dessus du void main() Wink)

NWScript :
int Poid(object oObject)
{
int iPoid;

    if(GetHasInventory(oObject) == TRUE) // Si l'objet a bien un inventaire
    {
    iPoid = (GetWeight(oObject)/10);
    }

return iPoid;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Une fois que tu l'as intégré tu peux mettre comme int.
int iPoidPC = Poid(oPC);
iPoidPC vaudra le poid de l'inventaire du joueur identique a celle IG (plus besoin de la convertion Smile).
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Harmelyo
Chevalier
Inscrit le: 06 Oct 2005
Messages: 84
Répondre en citant
Posté le : 19/03/2006 18:06:17 Sujet du message :

Hum, je vais me permettre une petite critique et correction. C'est une bone idée de vérifié si la cible possède un inventaire, mais dans le cas contraire tu retournes une variable non instanciée qui, si elle ne fait pas bugger (je n'ai pas essayer) retournera n'importe quoi...

Donc:

NWScript :
int Poid(object oObject)
{
int iPoid;
iPoid=-1;

if(GetHasInventory(oObject) == TRUE) // Si l'objet a bien un inventaire
{
iPoid = (GetWeight(oObject)/10);
}

return iPoid;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 19/03/2006 18:17:03 Sujet du message :

Bonne idée Razz
Oui le code aurait sûrement renvoyer un nombre infâme (-27566451) dans le cas ou l'objet n'ai pas d'inventaire.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 19/03/2006 23:18:03 Sujet du message :


Harmelyo a écrit :
Hum, je vais me permettre une petite critique et correction. C'est une bone idée de vérifié si la cible possède un inventaire, mais dans le cas contraire tu retournes une variable non instanciée qui, si elle ne fait pas bugger (je n'ai pas essayer) retournera n'importe quoi...
Oui, nwscript supporte l'instanciation, et même il initialise les variables :
int : default = 0 (zero/FALSE)
string : default = "" (null string)

autre peu connu : la post incrémentation var++
mais aussi : supporte la pré incrémentation ++var
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 20/03/2006 17:15:51 Sujet du message :


lylver a écrit :
autre peu connu : la post incrémentation var++
mais aussi : supporte la pré incrémentation ++var
Mais si ont met
int iInt;
iInt++;
Ca renvoiera aussi un int infame puisqu'on incremente une valeur non définie.
D'ou l'importance d'initialiser les variables Wink, oui.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 21/03/2006 02:06:01 Sujet du message :


lylver a écrit :


Oui, nwscript supporte l'instanciation, et même il initialise les variables :
int : default = 0 (zero/FALSE)
string : default = "" (null string)
Very Happy

donc iInt++ = 1

Bon puisqu'on en est là, est-ce que vraiment il y a une difference entre ++i et i++.

Théoriquement
si je fais :
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


ça doit donner TRUC = 13 et dire 13

alors que
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

ça doit donner TRUC = 12 et dire 13

Enfin je crois avoir lu ça dans un truc sur le C, mais j'ai jamais verifié. Ca fait ça ou ++i et i++ c'est la même en NWScript ?

Ou d'ailleurs est-ce que c'est pas l'inverse Embarassed


EDIT : Finalement ça prend 30 secondes pour essayer donc j'ai vérifié, et effectivement ça marche bien comme ça.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 21/03/2006 18:39:03 Sujet du message :


Sith Vicious a écrit :
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
TRUC stockera 13 oui et SpeakString(IntToString(i) dit 12.


Sith Vicious a écrit :
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
TRUC stockera 13 et ca dira 12.

Ya pas de difference, du moins en C ca se passe comme ca. Après peut être que le nwscript change ca.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 21/03/2006 18:53:26 Sujet du message :


Sith Vicious a écrit :

EDIT : Finalement ça prend 30 secondes pour essayer donc j'ai vérifié, et effectivement ça marche bien comme ça.
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


===> ça
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 21/03/2006 19:56:48 Sujet du message :

C'est bizarre Shocked mais merci de me le faire remarquer Smile
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 21/03/2006 20:56:22 Sujet du message :

Quand on est pas sûr on sort ses cours Razz
Incrémentation et Décrémentation
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 21/03/2006 21:28:20 Sujet du message :

Very Happy

Sauf que mon dernier cours d'info c'était y a 10 ans et c'était du turbo pascal (et encore fallait voir le niveau Sad )

Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 22/03/2006 13:36:26 Sujet du message :

Moi c'était jamais Smile
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 22/03/2006 14:12:43 Sujet du message :

Les fonctions "pré" peuvent avoir un intérêt pour des scripts élégants dans les dialogues

ici un exemple de l'utilisation de --i

Compter le nombre de destinations possibles pour un voyage en bateau
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

/* ship_location
* by dluan on jul 2003 */


void main()
{
    object oPC = GetPCSpeaker();
    object oArea;
    int nCount = 0;
    object oWP = GetObjectByTag("SHIP_WAYPOINT", nCount);
    while (GetIsObjectValid(oWP) && nCount < 5) {
        nCount++;
        oArea = GetArea(oWP);
        SetCustomToken(3600+nCount, GetName(oArea));
        SetLocalObject(oPC, "SHIP_CUSTOM"+IntToString(nCount), oWP);
        oWP = GetObjectByTag("SHIP_WAYPOINT", nCount);
    }

    if (!nCount) {
        SetCustomToken(3601, "No location could be found.");
        SetLocalInt(oPC, "SHIP_ITEM", 1);
        return;
    }


    if (GetIsObjectValid(oWP)) {
        SetLocalInt(oPC, "SHIP_AREA", nCount);
        nCount++;
    }

    SetLocalInt(oPC, "SHIP_ITEM", nCount);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

/* ship_next
* by dluan on jul 2003 */


void main()
{
    object oPC = GetPCSpeaker();
    object oArea;
    int nArea = GetLocalInt(oPC, "SHIP_AREA");
    int nCount = 0;
    object oWP = GetObjectByTag("SHIP_WAYPOINT", nArea);

    while (GetIsObjectValid(oWP) && nCount < 5) {
        nCount++;
        oArea = GetArea(oWP);
        SetCustomToken(3600+nCount, GetName(oArea));
        SetLocalObject(oPC, "SHIP_CUSTOM"+IntToString(nCount), oWP);
        oWP = GetObjectByTag("SHIP_WAYPOINT", ++nArea);
    }

    if (GetIsObjectValid(oWP)) {
        SetLocalInt(oPC, "SHIP_AREA", nArea);
        nCount++;
    } else DeleteLocalInt(oPC, "SHIP_AREA");
    SetLocalInt(oPC, "SHIP_ITEM", nCount);

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Script conditionnel unique pour activer ou non les branches de dialogues
Autant de branches que de destinations seront affichées.
NWScript :

/* ship_cond_custom
* created by Glendale Nights
* mofified by dluan on jul 2003 */


int StartingConditional()
{
    object oPC = GetPCSpeaker();
    int nCount = GetLocalInt(oPC, "SHIP_ITEM");
    if( nCount ){
        SetLocalInt(oPC, "SHIP_ITEM", --nCount); // + astuce 2 pour faire court en une seule ligne de code
        return TRUE;
    }
    return FALSE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


L'élégance est d'avoir remarqué que l'exécution des scripts conditionnels est faite branche après branche du dialogue par le moteur nwn.

Code :

<Racine>
(check_pirate) * le pirate vous regarde d'un air méfiant *
Que voulez vous faire?
__Euh.. Se prélasser au soleil. (rien)
__Rentrer au bercail. (ship_pboard)
__Aborder un navire. (ship_location)
____°Choisissez le navire.
______(ship_cond_custom) <CUSTOM3601> (ship_custom1)
______(ship_cond_custom) <CUSTOM3602> (ship_custom2)
______(ship_cond_custom) <CUSTOM3603> (ship_custom3)
______(ship_cond_custom) <CUSTOM3604> (ship_custom4)
______(ship_cond_custom) <CUSTOM3605> (ship_custom5)
______(ship_cond_custom) Autres. (ship_next) °lien vers Choisissez
______Retour.


Le script (ship_cond_custom) s'exécute à la suite, décrémentant la variable globale
Codage ... minimaliste, même le DMFI n'est pas aussi clean Razz
Sources : modules Wheel of Time (New Era) & Stones of Wind
 
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 57.086ms