Voir le sujet précédent ¤
Voir le sujet suivant
|
Auteur |
Message |
Yan the salor
Seigneur
Inscrit le: 03 Oct 2004
Messages: 151
|
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 |
|
|
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
|
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 |
|
|
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95) |
Posté le : 19/03/2006 17:57:57 Sujet du message :
Tien cadeau de cette magnifique fonction. (met la au dessus du void main() )
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.
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 ). _________________ "Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
|
|
Revenir en haut |
|
|
Harmelyo
Chevalier
Inscrit le: 06 Oct 2005
Messages: 84
|
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 :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 |
|
|
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95) |
Posté le : 19/03/2006 18:17:03 Sujet du message :
Bonne idée
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 |
|
|
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
|
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 |
|
|
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95) |
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 , oui. _________________ "Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
|
|
Revenir en haut |
|
|
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
|
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)
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
EDIT : Finalement ça prend 30 secondes pour essayer donc j'ai vérifié, et effectivement ça marche bien comme ça.
|
|
Revenir en haut |
|
|
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95) |
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 |
|
|
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
|
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 |
|
|
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95) |
Posté le : 21/03/2006 19:56:48 Sujet du message :
C'est bizarre mais merci de me le faire remarquer _________________ "Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
|
|
Revenir en haut |
|
|
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers |
Posté le : 21/03/2006 20:56:22 Sujet du message :
|
|
Revenir en haut |
|
|
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
|
Posté le : 21/03/2006 21:28:20 Sujet du message :
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 )
|
|
Revenir en haut |
|
|
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers |
Posté le : 22/03/2006 13:36:26 Sujet du message :
|
|
Revenir en haut |
|
|
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
|
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 :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 :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 :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
Sources : modules Wheel of Time (New Era) & Stones of Wind
|
|
Revenir en haut |
|
|
|