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 21:57:15


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Lunshire
Héros
Inscrit le: 08 Nov 2003
Messages: 259
Localisation: Ben ... Devant mon ordi bien sûr !
Répondre en citant
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 31/12/2003 15:43:51 Sujet du message :

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 ));
}
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.

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Lunshire
Héros
Inscrit le: 08 Nov 2003
Messages: 259
Localisation: Ben ... Devant mon ordi bien sûr !
Répondre en citant
Posté le : 31/12/2003 15:54:53 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 31/12/2003 16:02:31 Sujet du message :

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! Confused Embarassed

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 31/12/2003 16:20:07 Sujet du message :

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... Embarassed

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 ));
}
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.


Essaie pour voir? Cool
_________________
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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 02/01/2004 10:09:18 Sujet du message :

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 Embarassed
_________________
Moi j'dis ca, mais bon j'dis rien hein?
..:: Les Chroniques de la Terre du Milieu ::..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
micka
Grand Sage du Conseil
Inscrit le: 29 Aoû 2003
Messages: 884
Localisation: /dev/null
Répondre en citant
Posté le : 02/01/2004 11:23:57 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 02/01/2004 11:57:36 Sujet du message :

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 !*/
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 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?
Confused
_________________
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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 02/01/2004 12:17:08 Sujet du message :

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 Confused

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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 02/01/2004 12:44:32 Sujet du message :

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 Confused

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 :

if(nRaceID1 == RACIAL_TYPE_ELF)
{
  //code
}

//ou

if(nRaceID1 == 3)
{
  //code
}
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 {} */
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.


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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
kiky.le.magnifique
Homme très gay
Inscrit le: 19 Sep 2003
Messages: 907
Localisation: Camping de la nation martienne...
Répondre en citant
Posté le : 02/01/2004 16:06:01 Sujet du message :

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! ^^' Embarassed

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! Cool

Merci mille fois pour tes explications, k0rvet! Very Happy

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 86.614ms