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







La date/heure actuelle est 01/05/2025 19:11:17
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 |
Tuyen Demi-dieu ![]() Messages: 460 Localisation: Chez moi |
Bonjour, je me demandais comment pourrait-on faire pour qu'un henchman évolue selon la volonté du module builder (pas le joueur, mais le créateur du module, en l'occurence, moi!)
Ex : Jean : guerrier niv 1 quand il monte de niveau, je voudrais qu'il prennent 1 niv de paladin, en choisissant la compétence x et y, et le don z, et un point en dextérité... Comment pourrais je faire cela???? merci de vos réponses! |
Revenir en haut | ![]() ![]() ![]() ![]() |
Jaheira 007 Seigneur ![]() Messages: 223 |
Ca c'est pour moi! J'ai déjà 4 henchen dans mon module qui évoluent du niveau 1 à 10 ( pour l'instant ).
Je t'explique l'astuce. 1) D'abord tu a crée ton pnj "Jean", admettons que son TAG est "Jean", son ResRef est "jean001", donc c'est un guerrier niv1 tout ce qui a de plus banal. Ensuite pour ce pnj, il faut faire un dialogue avec la possibilité de lui demander de changer de niveau. C'est simple, on va dire qu'il peut passer au niv2 à condition que le pj soit de niv2 minimum. Jusque la je ne t'apprends rien encore. 2) Maintenant que ton pnj est fini, fait ceci: dans la palette des créatures pesonnalisé, fait un clique droit sur "Jean" et fait un "Editer et copier". Dans l'onglet classe tu laisse son niv1 de guerrier et tu lui met 1 niveau de paladin pour sa seconde classe. Ensuite tu lui attribut ses nouvelles compétences, dons, pv ect. Quant tu auras finis, ton nouveau pnj aura toujours le TAG "Jean" mais par contre il aura un nouveau ResRef: "jean002". 3) Retourne dans le dialogue de ton "jean001" à la ligne où il est sensé évoluer. Et met le script suivant dans "condition d'execution": NWScript :
void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); string sCreature = "jean002"; location lLoc = GetLocation(OBJECT_SELF); DelayCommand(0.3, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); DestroyObject(OBJECT_SELF, 0.5); } } Voila! Le "jean001" ( guerrier niv1 ) disparait dans un cercle de lumière pour laisser la place à "jean002" ( guerrier niv1/paladin niv1). En fait, il faut créer une créature par niveau. Et aprés tu fait ce que tu veux, tu peux lui changer son équipement aussi! Ah dernier truc: pour ne pas m'embrouiller j'ai crée un dialogue pour chaque niv du henchmen, un script de levelup pour chaque niv également. Donc dans mon cas, mon perso evolue du niv1 à 10, j'ai 10 dialogue différents et 10 script levelup aussi. J'ai terminé, j'espère que j'ai été assez claire. Sinon si tu as d'autres questions à ce sujet n'ésite pas. Ou encore si tu veux une démo je peux te passer des .erf de mes henchmen ou alors un module de test. PS: Pour le script, je l'ai volé! A l'origine c'est le script qui spawn un guerrier squelette quant on s'approche d'un tas de crane dans la campagne NWN. _________________ La nature reprendra ses droits ici, aprés notre passage. |
Revenir en haut | ![]() ![]() ![]() |
Tuyen Demi-dieu ![]() Messages: 460 Localisation: Chez moi |
Merci pour ta réponse et oui je vois ce que tu veux dire, c'est le système des henchmen de la version originale (sans les add-ons)
Dans HoTU, les henchmen montent de niveau automatiquement, et il y a des fichiers spéciaux qui leur dictent comment monter de niveau, un peu comme les package que tu peux choisir à la création de ton perso. Le problème c'est que ces packages sont plutot limités, et ne sont personnalisables. Cepepdant pour ton script, j'ai pensé qu'au lieu d'une conversation, pourquoi ne pas le mettre dans les OnLevelUp de ton module? Ex : 1- test si le perso qui vient de monter de niveau est un PJ 2- si oui, lancer ton script Comme ca plus besoin de parler à ton henchman pour lui dire d'augmenter de niveau... Je pourrais utiliser aussi un truc comme ca remarque, par contre il faut que je rajoute un bout de script qui récupère le contenu de l'inventaire de jean001 pour le transmettre à jean002... ![]() |
Revenir en haut | ![]() ![]() ![]() ![]() |
Jaheira 007 Seigneur ![]() Messages: 223 |
Hum ne peut-on pas insérer quelques lignes dans ce script pour que la nouvelle créature rejoigne le groupe juste aprés avoir été crée?
Si oui j'aimerai bien savoir comment faire. Un truc en passant: tu peux remplacer l'effet VFX_FNF_SUMMON_UNDEAD par celui ci: VFX_FNF_STRIKE_HOLY, c'est beaucoup plus estétique. _________________ La nature reprendra ses droits ici, aprés notre passage. |
Revenir en haut | ![]() ![]() ![]() |
SiDi_Revolucion Ecuyer ![]() Messages: 48 Localisation: Mince, un trou de mémoire! C'est bien en Espagne la Bretagne? |
Hum, c'est très intéressant tout ca!!
Tu sais pour l'inventaire de jen, si c'est un compagnon d'arme comme dans lacampagne officielle, fais lui un équipement non modifiable par les PJ, et améliore le un peu à chaque niveau. _________________ SiDi_Revolucion |
Revenir en haut | ![]() ![]() ![]() ![]() |
kiky.le.magnifique Homme très gay ![]() Messages: 907 Localisation: Camping de la nation martienne... |
Jaheira 007 a écrit : Hum ne peut-on pas insérer quelques lignes dans ce script pour que la nouvelle créature rejoigne le groupe juste aprés avoir été crée? AddToParty(oHench, oPartyLeader);
(à toi de remplacer oHench et oPartyLeader par ce qu'il faut ![]() sinon, y'a aussi : HireHenchman(oPJ); avec, au début du script, un : #include "x0_i0_henchman" ![]() _________________ 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 | ![]() ![]() ![]() ![]() |
Tuyen Demi-dieu ![]() Messages: 460 Localisation: Chez moi |
Ben moi j'aimerais bien pouvoir accéder à l'inventaire de mes henchmen... Déjà que je peux pas les contrôler directement, si en plus je peux pas leur donner de bonnes armes...
![]() Finalement ce système (faire disparaître son ancien henchman et le remplacer par son alter-égo plus puissant), c'est bien parce qu'il n'existe pas de package de montée de niveau pour les classes de prestiges personnalisées : psionniste, etc... Enfin je pourrais engager des psionniste dans mon groupe! ![]() |
Revenir en haut | ![]() ![]() ![]() ![]() |
Tuyen Demi-dieu ![]() Messages: 460 Localisation: Chez moi |
Bon, voila voilà, mon script est fini, mais il marche pas!!! Agglll!!!!!!
Je le poste au cas où une bonne ame aurait le temps et l'amabilité de trouver l'erreur... Moi j'ai bien fait attention, normalement tout devrait marcher! NWScript :
void creernouveauhench (object oHench) { //on cree le nouveau henchman string sTemplate = GetLocalString (oHench, "nexthench"); location lLoc = GetLocation (oHench); CreateObject (OBJECT_TYPE_CREATURE, sTemplate, lLoc, FALSE, ""); DestroyObject (oHench, 1.0); } //---------------------------- ------------------------------ -------------------- void transfertinventaire (object oHench, object oNextHench) { //on transfere les objets de l'ancien au nouveau object oItem = GetFirstItemInInventory (oHench); while (GetIsObjectValid(oItem) == TRUE) { ActionGiveItem(oItem, oNextHench); oItem = GetNextItemInInventory (oHench); } } //---------------------------- ------------------------------ -------------------- void main() { object oPC = GetPCLevellingUp (); object oHench = GetFirstFactionMember (oPC, FALSE); while (GetIsObjectValid(oHench) == TRUE) { if (GetIsPC (oHench) == FALSE) { creernouveauhench (oHench); object oNextHench = GetObjectByTag (GetLocalString (oHench, "nexthench")); transfertinventaire (oHench, oNextHench); oHench = GetNextFactionMember(oPC, FALSE); DelayCommand (1.5, AddHenchman (oPC, oNextHench)); } } } disons que j'ai nommmé ce script "henchman_lvlup", j'ajoute cette ligne dans le OnPCLevelUp de mon module : 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. Ensuite j'ai mis sur mon henchman une variable "nexthench" contenant un string "henchman02", sachant que c'est le resref et le tag de sa version en plus fort... chais pas si vous avez tout suivi! lol En bref, quand j'augmente de niveau, le script "henchman_lvlup" s'execute, il prend mon premier henchman, il cherche le resref de son alter-ego dans ses variables, puis le crée, puis copie tous les objets que portait l'ancien dans le nouveau, puis supprime l'ancien, puis ajoute le nouveau dans le groupe. Comme j'ai plusieure henchmen, il va refaire la même opération jusqu'à ce qu'il n'y en ait plus! Malheureusement ca marche pas, et j'ai un message d'erreur me disant qu'il y avait trop d'instructions ou je sais pas quoi! |
Revenir en haut | ![]() ![]() ![]() ![]() |
kiky.le.magnifique Homme très gay ![]() Messages: 907 Localisation: Camping de la nation martienne... |
Tu es sur que ton
object oHench = GetFirstFactionMember (oPC, FALSE); renvoit les Henchmen??? Parce que je crois qu'il y a une fonction pour ça : int nNth=1; object oHench = GetHenchman(oPC, nNth); avec int nNth=1 désignant le numéro du hench que tu veux, c'est à dire 1, le premier hench engagé, 2 le second, 3 le troisieme etc... ![]() _________________ 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 | ![]() ![]() ![]() ![]() |
Tuyen Demi-dieu ![]() Messages: 460 Localisation: Chez moi |
Je connaissais pas cette fonction, par contre il y a pas de problème pour celle que j'ai utilisée, car je l'ai déjà fait pour d'autres scripts (un script d'auras pour augmenter la force de tout le groupe comme dans diablo2
![]() Le message d'erreur qu'il me renvoie c'est ERREUR : TOO MANY INSTRUCTIONS (le jeu continue quand même) |
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