La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 21:57:15
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Posté le : 31/12/2003 15:28:12 Sujet du message : Différents lieux d'apparition suivant le type ou la classe
Voilà, tout est dit dans le titre. Comment je peux faire pour modifier le lieu d'apparition au tout début du module solo ?
Et une autre question... A votre avis, il vaut mieux quoi, varier selon la classe ou la race ? Selon moi, la race est plus judicieuse mais peut-être que c'est plus simple à réaliser avec la classe vu qu'il y en a moins... Merci d'avance. L. _________________ Cogito ergo sum. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Je pense que si on met ça dans le OnEnter du module, ça devrait peut-être, éventuellement, fonctionner :
NWScript :
void main() { object oUser = GetEnteringObject(); int nClassID1 = GetClassByPosition( 1, oUser ); // int nClassID2 = GetClassByPosition( 2, oUser ); // int nClassID3 = GetClassByPosition( 3, oUser ); object oWP; switch ( nClassID1 ) { case 0: // Point de sortie pour le barbare oWP = GetObjectByTag( "WP_BARBARIAN" ); break; case 1: // Point de sortie pour le barde oWP = GetObjectByTag( "WP_BARD" ); break; case 2: // Point de sortie pour le clerc oWP = GetObjectByTag( "WP_CLERIC" ); break; case 3: // Point de sortie pour le druide oWP = GetObjectByTag( "WP_DRUID" ); break; case 4: // Point de sortie pour le guerrier oWP = GetObjectByTag( "WP_FIGHTER" ); break; case 5: // Point de sortie pour le moine oWP = GetObjectByTag( "WP_MONK" ); break; case 6: // Point de sortie pour le paladin oWP = GetObjectByTag( "WP_PALADIN" ); break; case 7: // Point de sortie pour le ranger oWP = GetObjectByTag( "WP_RANGER" ); break; case 8: // Point de sortie pour le rogue oWP = GetObjectByTag( "WP_ROGUE" ); break; case 9: // Point de sortie pour le sorcier oWP = GetObjectByTag( "WP_SORCERER" ); break; case 10: // Point de sortie pour le magicien oWP = GetObjectByTag( "WP_WIZARD" ); break; } AssignCommand( oUser, ActionJumpToObject( oWP )); } Comme tu l'as sans doute compris, c'est une distinction par classe. Les waypoints de tag : WP_BARBARIAN, WP_BARD, WP_CLERIC, etc... définissent l'endroi ou le PJ va arriver... Je me demande néanmoins s'il ne faudrait pas remplacer GetObjectByTag par GetWaypointByTag??? Comme tu l'as dit, ce doit être aussi possible par races, mais j'avais un script qui limitait une zone à une classe qui trainait dans un coin, je l'ai adapté à ton cas... Pour les races, je pense qu'il faudrait utiliser la fonction GetSubRace au lieu du GetClass et RACIAL_TYPE_ELF, RACIAL_TYPE_HUMAN, RACIAL_TYPE_HALFORC, etc... Mais je ne suis sûr de rien... _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Il y a un petit truc que je ne comprends pas. Comment peut - on savoir à quoi correspondent les classes 1,2,3 etc. Il faut les nommer après les deux points des différentes cases, c'est ça ?
Je demande parce que je vais l'adapter avec les races et le poster pour les ens que ça intéresserait... En tout cas, merci pour ça kiky. _________________ Cogito ergo sum. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Tu n'en a pas besoin pour les races, je pense.
En fait, GetClassByPosition( 1, oUser ); va simplement chercher la 1ere classe du joueur. Si tu regarde bien, il y a des // devant : int nClassID2 = GetClassByPosition( 2, oUser ); et : int nClassID3 = GetClassByPosition( 3, oUser ); car il ne sont là que pour info, si tu voulais utiliser les classe secondaire, dans le cas d'un multiclassage (un barbare/magicien lv10/lv5 par exemple) Par contre, là ou ça se complique, c'est pour l'utilisation du switch, j'ai pas trop compris comment y fait pour définire que la case 1 va donner le bard, ect... Oups, je viens de me rendre compte que c'est de ça dont tu voulais sans doute parler! Désolé, mais réponse est donc : j'en sais rien! Peut être que ça peut aider : explication du switch par le lexicon (en anglais) -> [http] _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Le lexicon m'ayant pas aider du tout à comprendre, je pense que je vais aller vers une série de if/else, certe plus lourde, mais que je comprend au moins un peu...
Je pense à un truc du genre : NWScript :
void main() { object oUser = GetEnteringObject(); int nRaceID1 = GetRacialType(oUser); object oWP; { if (nRaceID1 = RACIAL_TYPE_DWARF) oWP = GetObjectByTag( "WP_DWARF" ); if (nRaceID1 = RACIAL_TYPE_ELF) oWP = GetObjectByTag( "WP_ELF" ); if (nRaceID1 = RACIAL_TYPE_GNOME) oWP = GetObjectByTag( "WP_GNOME" ); if (nRaceID1 = RACIAL_TYPE_HALFELF) oWP = GetObjectByTag( "WP_HALFELF" ); if (nRaceID1 = RACIAL_TYPE_HALFLING) oWP = GetObjectByTag( "WP_HALFLING" ); if (nRaceID1 = RACIAL_TYPE_HALFORC) oWP = GetObjectByTag( "WP_HALFORC" ); if (nRaceID1 = RACIAL_TYPE_HUMAN) oWP = GetObjectByTag( "WP_HUMAN" ); } AssignCommand( oUser, ActionJumpToObject( oWP )); } Essaie pour voir? _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
k0rvet Ecuyer Messages: 67 |
Pour l'histoire des "case" dans le "switch":
La fonction GetClassByPosition() va retourner un entier. - 0 pour un barbare - 1 pour un barde - 2 pour un clerc ... Cet entier est en fait une valeur définie que la fonction va aller chercher dans un fichier .2da (class.2da je crois?) Une fois qu'on a cet entier dans la variable nClassID1, on va vérifier à quel valeur il est égal. On va pour cela faire une structure switch qui va définir le Waypoint où se téléporter en fonction de la classe du PJ. Si j'ai pas été clair, demandez moi, je réessairais _________________ Moi j'dis ca, mais bon j'dis rien hein? ..:: Les Chroniques de la Terre du Milieu ::.. |
Revenir en haut | |
micka Grand Sage du Conseil Messages: 884 Localisation: /dev/null |
Si c'est comme dans les autres languages, toutes les constantes sont en fait des valeurs entières numérotant en interne les {classes, races, objets...}. Normalement, pour éviter au commun des mortels d'apprendre par coeur les codes, on n'utilise que les alias (les noms des constantes).
|
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Donc pour savoir que le switch de la classe barbare donne 0, il faut fouiller dans les 2da!
Donc dans le cas des races, j'aurais du fouiller dans le racialtypes.2da. J'obtiens alors : 0 = Dwarf 1 = Elf 2 = Gnome 3 = Halfling 4 = HalfElf 5 = HalfOrc 6 = Human Alors on peut faire : NWScript :
object oUser = GetEnteringObject(); int nRaceID1 = GetRacialType(oUser); object oWP; switch ( nRaceID1 ) { case 0: // Point de sortie pour le nain oWP = GetObjectByTag( "WP_DWARF" ); break; case 1: // Point de sortie pour l elf oWP = GetObjectByTag( "WP_ELF" ); break; case 2: // Point de sortie pour le gnome oWP = GetObjectByTag( "WP_GNOME" ); break; case 3: // Point de sortie pour l halfing oWP = GetObjectByTag( "WP_HALFLING" ); break; case 4: // Point de sortie pour le demi elf oWP = GetObjectByTag( "WP_HALFELF" ); break; case 5: // Point de sortie pour le demi orc oWP = GetObjectByTag( "WP_HALFORC" ); break; case 6: // Point de sortie pour l humain oWP = GetObjectByTag( "WP_HUMAN" ); break; } AssignCommand( oUser, ActionJumpToObject( oWP )); }/* suspect block end found !*/ Ce qui revient au même que mon script avec les "if", au détail pres qu'il va chercher dans les 2da... Alors à quoi ça sert en concret, puisque ça donne la même chose? Quels sont les avantages/inconvénients de chacune de ces méthoses? _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
k0rvet Ecuyer Messages: 67 |
En fait c'est un petit peu plus simple que ca, je crois que tu cherches la difficulté! Ou c'est moi qui suis vraiment un piètre explicateur
La fonction GetRacialType() ou GetClassByPosition() v [edit] arf, j'ai les doigts carrés... _________________ Moi j'dis ca, mais bon j'dis rien hein? ..:: Les Chroniques de la Terre du Milieu ::.. Dernière édition par k0rvet le 02/01/2004 12:50:22; édité 1 fois
|
Revenir en haut | |
k0rvet Ecuyer Messages: 67 |
En fait c'est un petit peu plus simple que ca, je crois que tu cherches la difficulté! Ou c'est moi qui suis vraiment un piètre explicateur
La fonction GetRacialType() ou GetClassByPosition() va retourner une constante. - Pour GetRacialType() ce sera du type RACIAL_TYPE_* - Pour GetClassByPosition() ce sera CLASS_TYPE_* Chaque constante se réfère à une valeur (décrite dans les .2da). Elle est donc égale à cette valeur lors des test. Donc, dans les tests on peut faire: Admettons que RACIAL_TYPE_ELF a la valeure 3 dans mon .2da 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. C'est équivalent. Si on continue avec les switch on peut très bien faire: NWScript :
switch ( nRaceID1 ) { case RACIAL_TYPE_HUMAN: //code break; case RACIAL_TYPE_DWARF: //code break; case RACIAL_TYPE_ELF: //code break; //etc... /* warning: 1 unclosed block {} */ En fait on peut faire les tests soit en utilisant la valeur de la constante, soit en utilisant le nom de la constante elle même (c'est le cas le plus usité). J'espère avoir été un peu plus clair que la dernière fois... Les avantages et les inconvénients? Eh bien disons qu'on arrive à savoir quand utiliser un if et quand utiliser une switch. - Si tu as une variable avec plein de résultats possibles (comme c'est notre cas), utilise plutôt un switch. Ca évitera de construire plein de if et de else if les uns à la suite des autres. - Si tu as une simple condition, ou si tu veux faire des tests "a tiroirs", utilise plutôt un if. _________________ Moi j'dis ca, mais bon j'dis rien hein? ..:: Les Chroniques de la Terre du Milieu ::.. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Arf! Je croyais que le chiffre n'était renvoyé que dant ce cadre d'un switch, mais en fait, c'est une bête égalité, elle est donc toujours vrai, j'étais completement à coté de la plaque! ^^'
Je retiendrait donc ça : - Si tu as une variable avec plein de résultats possibles (comme c'est notre cas), utilise plutôt un switch. Ca évitera de construire plein de if et de else if les uns à la suite des autres. - Si tu as une simple condition, ou si tu veux faire des tests "a tiroirs", utilise plutôt un if. + le fait que les constantes correspondent à un numéro dans les 2da, et que l'on peu donc utiliser indiféremment soit son nom complet, soit le chiffre auquel il rapporte dans le 2da, ça revient au même... J'ai tout compris maintenant! Merci mille fois pour tes explications, k0rvet! Merci! _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
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