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:39:32
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Cheyenne Novice Messages: 11 |
Bonjour à tous
J'ai réussi à trouver le courage récemment de me lancer dans la conception d'un module. J'ai des idées plein la tête, mais pour les mettre en pratique, oulalala... J'ai bien entendu pratiqué les divers tutoriels de script (en tous les cas ceux que j'ai trouvé et compris!), mais deux de mes questions sont restées sans réponse Est-ce que je m'adresser à l'un d'entre vous, si vous trouviez un moment ?
Merci beaucoup pour toutes vos réponses ! [EDIT] Oups, et puis pendant que j'y pense, quelle serait la méthode la plus avantageuse pour transmettre des informations recueillies sur le PJ du module A vers le PJ du module B ? J'ai appris qu'il y avait moyen de lire dans un fichier 2DA, mais est-ce qu'il est possible d'y écrire aussi ? Sinon, il y aussi les "bases de données" et les fonctions "Campaign", mais j'avoue ne pas avoir compris grand chose ... ça vaut le coup de les utiliser pour des joueurs "inexpérimentés" (je ne voudrai pas leur imposer d'installer ou de configurer trop de choses) ? |
Revenir en haut | |
Alenn Tax Seigneur Messages: 170 Localisation: J'étais loin, mais je suis revenu. |
Cheyenne a écrit : Est-ce qu'il est possible de générer dynamiquement (en fonction de ce qu'un des joueurs a dit ou a fait en cours de jeu) le contenu d'un livre, parchemin, description d'un objet... ? Je ne pense pas, mais on peut toujours ruser ...
Imaginons le cas d'un PJ, appelé bidule, qui fait un concours de "celui qui boira le plus de bière" avec un nain, appelé trucmuch' : Il y 3 issues possibles
Imaginons maintenat qu'un journaliste ait assisté au concours et décide d'écrire un article dessus Il suffit de créer dans ton module trois objets "Journal" (avec des tag différents) dont les titres seront :
Maintenant il suffit de scripter afin que le vendeur de journeaux donne le bon journal lorsqu'on lui en achéte un :
Voila, j'espére que cela t'aidera. |
Revenir en haut | |
Cheyenne Novice Messages: 11 |
Bonne idée, c'est le genre de réponses que j'espérais, merci Alenn !
Y a-t-il d'autres suggestions ? |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
Posté le : 07/10/2003 09:37:39 Sujet du message : Re: Charger un autre fichier .bic en cours de jeu ?
Cheyenne a écrit :
[EDIT] Oups, et puis pendant que j'y pense, quelle serait la méthode la plus avantageuse pour transmettre des informations recueillies sur le PJ du module A vers le PJ du module B ? J'ai appris qu'il y avait moyen de lire dans un fichier 2DA, mais est-ce qu'il est possible d'y écrire aussi ? Sinon, il y aussi les "bases de données" et les fonctions "Campaign", mais j'avoue ne pas avoir compris grand chose ... ça vaut le coup de les utiliser pour des joueurs "inexpérimentés" (je ne voudrai pas leur imposer d'installer ou de configurer trop de choses) ? Le principe des fonctions Campaign est simple. Une fonction pour écrire et l'autre pour lire et ce pour chaque type de donnée existant. Parmis les paramètres que tu passes à ces fonctions se trouvent les informations qui te permettent d'identifier tes données, ce que l'on qualifierait de "nom de variable". Par exemple : SetCampaignInt(<string sCampaignName>, <string sVarName>, <int nInt>, <object oPlayer>) Le premier paramètre, une chaîne de caractère, peut être, comme son nom l'indique, le nom de ta campagne. Ce nom devra être le même pour chaque appel et de préférence unique. Dans le dossier "data" du jeux un jeu de 3 fichiers sera créé avec ce nom là. Je te suggère de ne mettre aucun espace dedans et de le faire assez court. Arrange toi aussi pour qu'il soit unique (qu'il ne s'agisse pas du même fichier que pour la campagne officielle de SoU par exemple). Le second paramètre est le nom de ta variable. La règle d'or est que ce nom de dépasse pas 32 caractères, sans quoi il sera tronqué et tu vas au devant de quelques ennuis pour retrouver tes variables. Une technique utilisée par les pros du script pour "signer" les variables standards (celles que l'on sauve avec SetLocalTruc) n'est pas utilisable ici. J'entends par "signer" que l'on sache que telle ou telle variable se rapporte à un personnage en particulier en utilisant le nom du personnage, le nom du joueur et la clé publique de son CD. Inutile de le faire ici car le quatrième paramètre optionnel de cette fonction SetCampaignInt est vouée à cet usage et utilise exactement le même procéder. Il créé une clé unique composée du nom du personnage, du joueur et de la clé publique de CD pour associer la variable que tu désires sauver au personnage indiqué. Le quatrième paramètre ne peut d'ailleurs être qu'un objet de type Player Character. Le troisième paramètre est la valeur que tu souhaites sauvegarder. Exemple : Code : object oPC=GetFirstPC(); //si tu n'as qu'un seul joueur dans ton module SetCampaignInt("MACAMPAGNE", "MAVARIABLEENTIERE", 10, oPC); Par la suite, tu peux utiliser la fonction suivante pour retrouver ta valeur : GetCampaignInt(<string sCampaignName>, <string sVarName>, <object oPlayer>) Mêmes paramètres (sauf le troisième qui disparaît puisqu'on lit), même combat. Si on renvoie les mêmes identifiants (campagne, variable, personnage), alors on retrouve la valeur stockée. Exemple : Code : object oPC=GetFirstPC(); //si tu n'as qu'un seul joueur dans ton module int nVariable=GetCampaignInt("MACAMPAGNE", "MAVARIABLEENTIERE", oPC); //nVariable va contenir 10 relativement à mon précédent exemple Ces deux morceaux de codes peuvent bien sûr être appelés dans des modules différents. L'information étant stockée dans la "base de données", donc dans des fichiers externes, ils ont une existence indépendante par rapport aux module. Pour peu que l'on connaisse le personnage, le nom de la campagne et le nom de la variable, n'importe quel module peut lire la valeur. A noter donc que SetCampaignInt sauve des valeurs entières. Les autres fonctions SetCampaignTruc stocke des valeurs correspondantes à Truc, soit Vector, Location, Float et String. Les équivalents existent pour lire avec GetCampaignTruc. Pour les variables de type object c'est un peu différent. On utilise StoreCampaignObject pour sauver et RetrieveCampaignObjet pour récupérer. La première possède les mêmes paramètres que les autres fonctions SetCampaignTruc. En revanche RetrieveCampaignObject possède deux paramètres supplémentaires. Cette fonction va recréer l'objet désignée par la variable dans le contexte du module. Il faut lui fournir la location ou l'on recréée l'objet (obligatoire), valeur qui est ignorée si l'on remplit le paramètre "owner" qui est l'objet "propriétaire" de l'objet que l'on restaure (donc en gros celui qui va l'obtenir dans son inventaire). Ce qu'il est important de retenir est que RetrieveCampaignObject créé un nouvel objet. Ce dernier est parfaitement identique à celui d'origine, mais est toutefois nouveau. Toute variable sauvée sur un tel objet par SetLocalTruc est perdue car Store ne sauve pas les variables d'un objet dans la base de donnée. Retrieve ne peut donc pas les restituer. On peut se servir de cette fonction plusieurs fois de suite et l'on crééra alors autant de clone de l'objet. Le fait de faire un StoreCampaignObject ne détruit pas l'objet que l'on "sauve". Le fait de faire un Retrieve ne détuit pas la variable de campagne qui lui correspond. On peut détuire indifféremment un CampaignObject et autres variables avec un DeleteCampaignVariable. On peut même détruire l'intégralité des fichiers de la base de données que l'on a créé avec DestroyCampaignDatabase. Toutefois, attention à une limitation évidente. Le fichier de la base de donnée se trouve dans le dossier "data" du joueur qui exécute le module (si c'est un module solo c'est sur le poste du joueur lui même, si c'est un module en ligne c'est sur le poste du serveur). Un joueur qui commence une partie solo sur un PC et qui espère la poursuivre sur un autre risque une déconvenue : 1 - il n'aura pas les fichiers de base de données s'il ne les transfère pas d'un poste à un autre. 2 - il ne pourra pas retrouver des données "signée" s'il utilise une autre clé de CD, et ce même s'il joue le même personnage et utilise le même nom de joueur. Ces difficultés sont bien sûr marginales, mais méritent d'être soulignées. J'espère que ces explications sont suffisantes pour que tu puisses utiliser la base de données _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
Cheyenne Novice Messages: 11 |
Merci beaucoup, Lendraste, pour cette explications détaillée et néanmoins très limpide. Je ne pense pas que je sois le seul à l'apprécier ton "style" sur le forum. Tu ne serais pas prof, par hasard ?
J'ai bien avancé sur mon module : - j'ai finalisé le scénario (je sais où cela commence, et où cela devrait finir) (90%) - j'ai potassé la littérature correspondante (95%) - j'ai fait le plus gros du boulot en ce qui concerne les hakpacks que le module va utiliser (80%, les "perles" sont toujours possibles) - j'ai attaqué l'ossature générale du scripting pour donner vie et cohérence à mon monde (25%) Cela étant dit, je ne sais toujours pas si toutes mes idées seront intégrables telles quelles, notamment au niveau artistique et "originalité" (vu que je ne connais pas encore toutes les contraintes techniques de la "bête"). Si quelqu'un a des tuyaux à me donner à ce sujet, ou encore mieux, peut m'aider à trouver des personnes intéressées (et très motivées!) par le côté "artistique" de la création d'une campagne : - non Forgotten Realms - sans aucun goblin ou orque (!) - où le hack & slash rapporte 0% d'expérience - se déroulant sur plusieurs générations de personnages - dans un cadre, hmmm, vraiment assez original, onirique et fantastique (gothique ?) à souhait =) je vous éternellement serais reconnaissant Une autre question avant que je vous laisse : j'ai remarqué que, lorsque le PJ se trouvé "métmorphosé" de manière permanente, il a toujours accès à un bouton "Cancel métamorphose" sur le menu radial. Est-ce qu'il est possible de le supprimer par code / hak ? Je pense que ce serait plus propre que de surcharger (encore plus) les événements "OnRest", "OnSpawn", ... Merci tout plein pour votre temps ! |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
Cheyenne a écrit : Merci beaucoup, Lendraste, pour cette explications détaillée et néanmoins très limpide. Je ne pense pas que je sois le seul à l'apprécier ton "style" sur le forum. Tu ne serais pas prof, par hasard ? Non. Je pense être assez pédagogue et j'ai déjà été formateur dans ma branche, mais c'est tout. En outre, j'aime écrire, partager mes connaissances et je connais mon sujet, tout ce qu'il faut pour répondre à bon nombre de questions posées ici
Citation : Cela étant dit, je ne sais toujours pas si toutes mes idées seront intégrables telles quelles, notamment au niveau artistique et "originalité" (vu que je ne connais pas encore toutes les contraintes techniques de la "bête"). Si quelqu'un a des tuyaux à me donner à ce sujet, ou encore mieux, peut m'aider à trouver des personnes intéressées (et très motivées!) par le côté "artistique" de la création d'une campagne :
Sans vouloir faire de publicité, si tu suis le lien de ma signature tu devrais trouver quelque chose répondant assez bien à cette définition (sauf Gob et Orc car je trouve ça trop pitoresque ).
- non Forgotten Realms - sans aucun goblin ou orque (!) - où le hack & slash rapporte 0% d'expérience - se déroulant sur plusieurs générations de personnages - dans un cadre, hmmm, vraiment assez original, onirique et fantastique (gothique ?) à souhait =) je vous éternellement serais reconnaissant Citation : Une autre question avant que je vous laisse : j'ai remarqué que, lorsque le PJ se trouvé "métmorphosé" de manière permanente, il a toujours accès à un bouton "Cancel métamorphose" sur le menu radial. Est-ce qu'il est possible de le supprimer par code / hak ? Je pense que ce serait plus propre que de surcharger (encore plus) les événements "OnRest", "OnSpawn", ... Ca serait plus propre, mais ça poserait de sérieux problèmes. Tout d'abord, l'annulation d'un effet métamorphose est codée en dur dans le moteur Aurora, on ne peut donc pas s'en affranchir totalement (comme lorsque l'on se repose, l'effet est automatiquement annulé), de plus, même si on peut effectivement modifier le menu radial en "hackant" le fichier qui va bien, tu ne ferais que supprimer cette possibilité même pour les annulations "légales" de métamorphose auxquelles le personnage a le droit. Du reste, si cette contrainte te satisfait, je devrais pouvoir te garantir que c'est possible, mais je ne m'avancerai pas n'ayant pas NWN sous la main pour le vérifier.
Si tu es patient, je te conseille d'attendre la sortie de la prochaine Extension de NWN (HotU). Avec elle la possiblité de modifier l'apparence d'une créature (donc le skin et le modèle) de manière définitive sans que cela soit un effet métamorphose, grâce à une commande de script qui sera implémentée dans le moteur Aurora. J'ignore encore toutes les conséquences qui s'y rattachent, mais les discussions vont bon train à ce sujet sur le Vault. _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
Cassin Papa-poule(t) & poissard intemporel Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
Cheyenne a écrit : - non Forgotten Realms Pour ça, pense à enlever les scripts par défaut des OnOpen et OnDeath (je crois) sur les contenants (coffres, armoires, etc...) car ils génèrent automatiquement un contenu quand on les ouvre/détruits, et c'est toujours gênant de tomber sur un bouquin parlant de Mystra dans un monde non RO
Cheyenne a écrit : - sans aucun goblin ou orque (!) Pour ça il n'y a pas de problème, tu peux en mettre quand même... et modifier leur apparence pour qu'ils ressemblent à autre chose ! (ça peut servir si tu trouves que seuls les orcs ou les gob' sont un challenge adapté à telle ou telle situation et que tu as la flemme de reopier leurs caracs sur une autre créature )
Cheyenne a écrit : - où le hack & slash rapporte 0% d'expérience Ca ça m'intéresse, si tu pouvais aller expliquer la raison de ton choix sur le sondage que j'ai posté ce matin dans le forum Discution Générale, ça serait sympa (EDIT : ici)
Cheyenne a écrit : - se déroulant sur plusieurs générations de personnages Ca risque d'être le plus compliqué, si on peut contourner assez facilement le problème de l'âge mentionné sur le personnage, ça risque de devenir prise de tête si tu veux changer l'apparence physique du perso et/ou ses caracs (par exemple, quand le joueur vieillit ses cheveux deviennent blancs et il perd de la Force ou de la Constitution)_________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | |
Cheyenne Novice Messages: 11 |
Promis, je m'y mettrai, Cassin, laisse-moi juste le temps de "mettre en prose" ce que je vais répondre à ta question.
En quelques mots, disons que comme tout jeu de rôle il n'en existe pas de parfait pour tel DM et ses joueurs (pour me la jouer un peu, j'en ai vu depuis "Empire Galactique" et "JDRTM" ). Il faut toujours savoir l'adapter à sa sauce, et à ce que demandent nos joueurs, et c'est un peu ce qui fait le charme de tout (bon) jeu de rôle. Donner l'impression d'avoir une monde riche, établi, voire précis, mais quand même cohérent et... surtout plaisant à jouer. Dans la même optique, aucun système d'attribution de points d'expérience n'est, ou ne sera jamais, parfait. En revanche, je pense qu'on peut tous s'accorder sur le fait que le système adopté par Bioware dans la campagne officielle initiale est... insatisfaisant, voire nul. Avant que ceci tourne à une diatribe contre Bioware, qui ne mérite que des louanges pour nous avoir concocté la merveille qu'est le "Aurora engine", j'aurais une, ou deux, autres questions : 1/ Est-ce qu'il est possible de coder des événements sur un "container", du type "bag of holding", dans l'inventaire (!) d'un joueur ou joueuse... du type le sac disparait s'il est complètement vidé de son contenu ? 2/ Combien de waypoints est-il raisonable de mettre dans une zone 16x16, sans que le joueur (solo) n'ait trop à souffrir du lag ? Même question pour un combat, combien de PNJ est-il raisonnable d'inclure (si on considère les 3/4 d'entre eux sans capacités de lanceur de sorts) ? Juste votre expérience en la matière... sur vos machines, pour me faire une idée. 3/ J'ai remarqué qu'il y avait deux "Userdefined", un dans les propriétés du module, un dans les propriétés de la zone, est-ce que les deux se déclenchent ? ou l'un prime sur l'autre ? Je peux le tester ça, remarque... mais j'en suis pas encore là dans mon module... 4/ Est-ce que nous avons un moyen de contrôler "directement" comment un PJ récupère ses sorts ? Si par exemple, je souhaite redonner tous ses sorts à un magicien après une bataille, sans que cela le "soigne" pour autant (comme un repos), est-ce que je peux le faire "proprement" (via un script de Bioware ou est-ce que c'est codé "en dur" dans le "rest") ? D'autres questions probablement à venir... et merci ! |
Revenir en haut | |
Cassin Papa-poule(t) & poissard intemporel Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
Cheyenne a écrit : 2/ Combien de waypoints est-il raisonable de mettre dans une zone 16x16, sans que le joueur (solo) n'ait trop à souffrir du lag ? Même question pour un combat, combien de PNJ est-il raisonnable d'inclure (si on considère les 3/4 d'entre eux sans capacités de lanceur de sorts) ? Juste votre expérience en la matière... sur vos machines, pour me faire une idée. Ca on ne peut pas trop savoir, ça dépend de la machine qui fera tourner le module. Si tu as une bécane dernier cri, tu vas pouvoir en mettre un sacré nombre avant que ça ne rame. Si un de tes joueurs à une machine un peu poussive, ce qui tournait bien sur la tienne ramera sur la sienne...
Cheyenne a écrit : 4/ Est-ce que nous avons un moyen de contrôler "directement" comment un PJ récupère ses sorts ? Si par exemple, je souhaite redonner tous ses sorts à un magicien après une bataille, sans que cela le "soigne" pour autant (comme un repos), est-ce que je peux le faire "proprement" (via un script de Bioware ou est-ce que c'est codé "en dur" dans le "rest") ? Non, je ne pense pas qu'on puisse intervenir directement dans l'évolution d'un personnage, que ce soit son choix de sorts, de Dons ou de Compétences, que ce soit en scriptant ou en mode DM. Quant à redonner tout ses sorts à un mage sans qu'il se repose... je ne sais pas si c'est possible..._________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
Cheyenne a écrit : 1/ Est-ce qu'il est possible de coder des événements sur un "container", du type "bag of holding", dans l'inventaire (!) d'un joueur ou joueuse... du type le sac disparait s'il est complètement vidé de son contenu ? Non. Les items (et les containers en sont) ne peuvent et ne pourront jamais être "évènementialisé". C'est une stratégie de développement, car si on pouvait mettre un script sur un objet et qu'on déplace celui-ci de module en module (y compris en ligne) ça serait la porte ouverte à bon nombre de tricherie. Du moins c'est le discours de Bioware et je ne fais que répéter bêtement. Je pense que ça serait utile, mais j'ai dans l'idée que ce n'est pas qu'un choix relatif à la sécurité, mais bien une difficulté énorme sur le plan technique et compte tenu de l'état actuel du moteur.
Citation : 3/ J'ai remarqué qu'il y avait deux "Userdefined", un dans les propriétés du module, un dans les propriétés de la zone, est-ce que les deux se déclenchent ? ou l'un prime sur l'autre ? Je peux le tester ça, remarque... mais j'en suis pas encore là dans mon module... Ces deux évènements sont parfaitement indépendants. L'un ne déclenchera pas l'autre. Comme tous les OnUserDefined (et il y en a aussi sur les plaçables, les portes, les créatures, les rencontres et les déclencheurs) ces évènements ne peuvent être déclenché que par un script qui stipule quel objet doit activer son OnUserDefined. Si tu veux les enchainer, c'est parfaitement faisable, mais il faut le coder.
Citation : 4/ Est-ce que nous avons un moyen de contrôler "directement" comment un PJ récupère ses sorts ? Si par exemple, je souhaite redonner tous ses sorts à un magicien après une bataille, sans que cela le "soigne" pour autant (comme un repos), est-ce que je peux le faire "proprement" (via un script de Bioware ou est-ce que c'est codé "en dur" dans le "rest") ? C'est codé en dur. Rien à faire de ce côté.
Citation : D'autres questions probablement à venir... et merci ! Si tu pouvais regrouper tes questions par thème et faire des sujets différents, ce serait mieux. Ici les questions posées ne correspondent plus du tout au titre et un visiteur ne devinera jamais qu'il y a d'autres réponses que sur le sujet proposé. Merci._________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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