
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 01/05/2025 06:11:05
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 |
Ecuyer paumé Acolyte Messages: 27 |
![]() Raaaaah, ça fais trop longtemps que je suis deçu, et je ne trouve pas la solution, alors je demande de l'aide please:
Je cherche à réaliser un script lié à un item. Le dit item doit pouvoir modifié l'alignement d'un joueur ciblé (pour des questions de rp), et ce avec un et même item. Donc un script qui permet d'attribuer les 9 types d'alignement à un seul item, et sur une cible joueur...et là, je rame...je me demande même si c'est seulement possible. Alors une petite aide? Dernière édition par Ecuyer paumé le 19/11/2005 02:34:18; édité 1 fois
|
Revenir en haut | ![]() ![]() ![]() |
Djezebel Héros ![]() Messages: 252 |
Une idée qui serait possible mais que je n'ai pas développé à fond, ce serait de lancer un dialogue à partir de l'item.
Dans ce dialogue tu aurais : Code : Que voulez-vous faire ? - Donner 1 point d'alignement BON - Donner 1 point d'alignement LOYAL - Donner 1 point d'alignement MAUVAIS - Donner 1 point d'alignement CHAOTIQUE Et sur chaque phrase tu mets un script qui aurait un AdjustAlignment vers chaque "tendance". Pour le début voici comment on peut faire parler un item dans son inventaire : Tu crées un objet avec "item_align" pour Tag Cet objet tu le mets en "pouvoir unique sur soi uniquement" et "utilisation illimitée". Tu crées un script qui s'appelle "item_align". Tu crées un dialogue avec "item_align" pour nom. Normalement, si tu as le script de base de nwn, à l'activation de l'objet, il cherchera le script qui a le même nom que le tag de l'objet ![]() Et voici donc le script qui devra s'intituler comme le tag de ton item : NWScript :
void main() { object oPC = GetItemActivator(); AssignCommand(oPC,ActionStartConversation(oPC,"item_align")); } Maintenant, dans le dialogue, tu mets ce que j'ai marqué au dessus. Après il ne "restera" plus qu'à faire les scritps qui vont dessus. Voilà, c'est une idée, il peut y en avoir d'autres. |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Je pense que le dialogue est en effet le plus simple, mais peut être pas le plus pratique.
En tout cas, avec un seul item et un seul script dans le Onactivated, je pense que c'est impossible. Il y a bien une solution qui correspondrait à ce que tu veux, mais c'est long à mettre en oeuvre, c'est de créer un sort par changement d'alignement et de coller ça sur un objet, mais c'est fastidieux. Sinon (là je suis pas sur de la faisabilité, et ça me semble compliqué), quand le DM active l'objet sur un joueur, tu crées une créature pendant un court instant, le dm dit une phrase (genre "m5c2" pour 2 points de chaos et 5 mauvais, un truc comme ça) la créature l'entend et applique l'effet sur le joueur. Si ça te branche comme solution je peux essayer de faire les scripts. |
Revenir en haut | ![]() ![]() ![]() |
Seth de Sombrelune Seigneur Messages: 156 |
Salut, l'alignement est assez complexe, et pour scripter sur le sujet, il faut avoir saisi une règle simple. Cette règle est aussi valable pour le couple "Loi/Chaos" que "Bon/Mauvais"
Ce qu'il y a a savoir : L'alignement est une valeur qui vas de 0 à 100 en passant par 50 avec des bonds sur l'echelle de progréssion, bonds qui sont différents selon le sens de progréssion sur l'echelle. 0 à 30= Chaos ou Mauvais 31 à 69 = Neutre 70 à 100 = Loi ou Bon par contre la progréssion passe par des étapes ! C'est à dire que si on part de 0 et que l'on ajoute 1 de manière progréssive la suite subira un bon, c'est ce qui rend si complexe la gestion des alignements ! Exemple de progréssion créchendo : 0, 1, 2, 3, 4,....., 28, 29, 30, 50, 51, 52, ......68, 69, 85, ...., 99, 100 Exemple de progréssion Décréchendo : 100, 99, 98, ....., 72, 71, 70, 50, 51, 52, ..., 33, 32, 31, 15, 14, ...., 3, 2, 1, 0 En gros , cela donne ça : |------|-------| |--------|---------| |--------|--------| 0.....15......30..31.......50........69..70.......85.......100 Mauvais....................Neutre..........................Bon Chaos......................................................Loi Une fois que l'on a saisi cela, il est facile de scripter la gestion des alignement Je n'ais pas trop saisi ce que tu veux que ton item fasse ou comment il doit fonctionner. POur exemple je te donne un script qui utilisait ce principe d'echel pour dissimuler l'alignement des pj en les randant neutre. Ce script n'a rien a voir avec ce que tu demande ! (c'est juste pour l'exemple !) NWScript :
//::////////////////////////// ///////////////////// //:: Name //:: FileName //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////// //////////////////// /* */ //::////////////////////////// //////////////////// //:: Created By:Seth de Sombrelune //:: Created On: 11/03/05 //::////////////////////////// //////////////////// void main() { object oItem = GetPCItemLastUnequipped(); object oPC = GetPCItemLastUnequippedBy(); if(GetTag(oItem)=="auraneutre") { int iGoodEvil=GetCampaignInt("BaseItem","PCGoodEvil",oPC); int iLawChaos=GetCampaignInt("BaseItem","PCLawChaos",oPC); //::////////////////////////// //////////////////// //::Gestion Bon / Mauvais //::////////////////////////// //////////////////// if ( iGoodEvil <=30) //Evil { AdjustAlignment(oPC, ALIGNMENT_EVIL, 100); AdjustAlignment(oPC, ALIGNMENT_EVIL, 100); // 0 AdjustAlignment(oPC, ALIGNMENT_GOOD, iGoodEvil); } if ( iGoodEvil >=70) //Good { AdjustAlignment(oPC, ALIGNMENT_GOOD, 100);//85 if ( iGoodEvil <85) { int iAdjust =85-iGoodEvil; SendMessageToPC(oPC,"GE ="+IntToString(iGoodEvil)); SendMessageToPC(oPC,"adjust ="+IntToString(iAdjust)); AdjustAlignment(oPC, ALIGNMENT_EVIL, iAdjust); } else { int iAdjust =iGoodEvil-85; SendMessageToPC(oPC,"GE ="+IntToString(iGoodEvil)); SendMessageToPC(oPC,"adjust ="+IntToString(iAdjust)); AdjustAlignment(oPC, ALIGNMENT_GOOD, iAdjust); } } if ( iGoodEvil >=31 && iGoodEvil <=69) //Neutre { AdjustAlignment(oPC, ALIGNMENT_NEUTRAL, 50);//50 if ( iGoodEvil <50) { int iAdjust =50-iGoodEvil; AdjustAlignment(oPC, ALIGNMENT_EVIL, iAdjust); } else { int iAdjust =iGoodEvil-50; AdjustAlignment(oPC, ALIGNMENT_GOOD, iAdjust); } } //::////////////////////////// //////////////////// //::Gestion Loi / haos //::////////////////////////// //////////////////// if ( iLawChaos <=30) //Chaos { AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, 100); AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, 100); // 0 AdjustAlignment(oPC, ALIGNMENT_LAWFUL, iLawChaos); } if ( iLawChaos >=70) //Law { AdjustAlignment(oPC, ALIGNMENT_LAWFUL, 100);//85 if ( iLawChaos <85) { int iAdjust2 =85-iLawChaos; AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, iAdjust2); } else { int iAdjust2 =iLawChaos-85; AdjustAlignment(oPC, ALIGNMENT_LAWFUL, iAdjust2); } } if ( iLawChaos >=31 && iLawChaos <=69) //Neutre { AdjustAlignment(oPC, ALIGNMENT_NEUTRAL, 50);//50 if ( iLawChaos <50) { int iAdjust2 =50-iLawChaos; AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, iAdjust2); } else { int iAdjust2=iLawChaos-50; AdjustAlignment(oPC, ALIGNMENT_LAWFUL, iAdjust2); } } effect eEffect = EffectVisualEffect(VFX_IMP_HEALING_X); int iDuration =DURATION_TYPE_TEMPORARY; ApplyEffectToObject(iDuration, eEffect, oPC,5.0); } } J'espère que cela pourra t'aiguiller |
Revenir en haut | ![]() ![]() ![]() |
Ecuyer paumé Acolyte Messages: 27 |
Ok, merci à tous de vous être penché sur mon problème. J'avais déja pensé à la modification de l'alignement en passant par un dialogue et cela ne m'a posé qu'un seul problème. C'est que c'est le joueur ciblé qui choisi la modification. Donc certains pourrait en abuser (genre paladin/chevalier noir). Donc à oublié à moins que je me trompe quelque part. Bref, je me doutais bien qu'assigner plusieurs scripts à un seul objet etait impossible. Donc comment revenir à un item qui change l'alignement de la cible? C'est pas gagné...
|
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
C'est possible mais j'avais deja precisé que je n'avais plus trop le temps de faire des scripts pour les personnes. Il faut que t'insere un script avec "Ecouteur", cela veut dire que si le joueur dit "Alignement Bon", le script le mettra alignement bon... Mais comme c'est un script long je ne pourrais te le faire. Apres pour evite Paladin/Chevalier noir, il faut mettre un "if" pour evite sa (tu dit : si le joueur est paladin le script ne s'execute pas)
_________________ [http] |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
C'est pas forcément le joueur qui a le dialogue, le script de Djezebel le ferait ouvrir par celui qui utilise l'item.
Le truc c'est qu'il faut stocker le joueur cible quelque part. Si ton item a pour tag item_align : dans le OnActivated : NWScript :
object oActivator = GetItemActivator(); //celui qui utilise l'item object oCible = GetItemActivatedTarget(); //le joueur cible object oItem = GetItemActivated(); string sTag = GetTag(oItem); if (sTag == "item_align") { SetLocalObject(oActivator,"JOUEURCIBLEALIGN",oCible); AssignCommand(oActivator,ActionStartConversation(oActivator,"dia_item_align")); //l'utilisateur ouvre le dialogue "dia_item_align" } ensuite dans le dialogue, tu retrouve le joueur cible par la commande : NWScript : object oPC = GetLocalObject(OBJECT_SELF,"JOUEURCIBLEALIGN"); AdjustAlignment(oPC,ALIGNMENT_CHAOTIC,iValeur); //la tu remplis en fonction du noeud de dialogue DeleteLocalObject(OBJECT_SELF,"JOUEURCIBLEALIGN"); |
Revenir en haut | ![]() ![]() ![]() |
Ecuyer paumé Acolyte Messages: 27 |
Merci Sith vicious! Ce script fonctionne et offre bien la modification de l'alignement en fonction des choix du MD. Merci merci merci, je vais pouvoir dormir maintenant, merci à tous!
|
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Ben de rien, quand on peut rendre service.
![]() |
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