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







La date/heure actuelle est 21/04/2025 06:43:10
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 |
decad7 Acolyte ![]() Messages: 22 |
Bonsoir,
Voila j'ai a nouveau un problème, j'aimerais savoir comment faire pour supprimer un effet a une location. Voila ce que je souhaite faire, au moment ou un joueur marche sur un déclencheur d'empreinte un grand mur d'épée apparait. (l'effet est permanent). Plus tard par la suite le joueur trouvera la possibilité de supprimer ce mur d'épée. cependant pour le moment c'est impossible... ![]() voila le script qui se trouve dans le onEnter du déclencheur d'empreinte (donc celui qui va déclencher le mur d'épée (Celui ci fonctionne, y a pas de problème). NWScript :
void main() { if (GetIsPC(GetEnteringObject())) { //DECLARATION DES OBJECTS object oEPEE1 = GetWaypointByTag("EPEE1"); object oEPEE2 = GetWaypointByTag("EPEE2"); object oEPEE3 = GetWaypointByTag("EPEE3"); object oEPEE4 = GetWaypointByTag("EPEE4"); //DECLARATION DES LOCATIONS location lEP1 = GetLocation(oEPEE1); location lEP2 = GetLocation(oEPEE2); location lEP3 = GetLocation(oEPEE3); location lEP4 = GetLocation(oEPEE4); //DECLARATION DE L'EFFET MUR D'EPEE effect eBlade = EffectAreaOfEffect(AOE_PER_WALLBLADE); //APPLICATION DES EFFETS AU LOCATION SOUHAITE ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,eBlade,lEP1); ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,eBlade,lEP2); ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,eBlade,lEP3); ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,eBlade,lEP4); //VARIABLE UTILISE PAR LA SUITE DANS LE MODULE SetLocalInt(OBJECT_SELF,"BLADE",1); } } et voici le script que j'utilise actuellement pour faire supprimer les effets d'épées. (mais celui ci ne marche pas) NWScript :
void main() { //DECLARATION DES OBJECTS object oEPEE1 = GetWaypointByTag("EPEE1"); object oEPEE2 = GetWaypointByTag("EPEE2"); object oEPEE3 = GetWaypointByTag("EPEE3"); object oEPEE4 = GetWaypointByTag("EPEE4"); //SUPPRESSION DES EFFETS SUR L'OBJET EN QUESTION RemoveEffect(oEPEE1,EffectAreaOfEffect(AOE_PER_WALLBLADE)); RemoveEffect(oEPEE2,EffectAreaOfEffect(AOE_PER_WALLBLADE)); RemoveEffect(oEPEE3,EffectAreaOfEffect(AOE_PER_WALLBLADE)); RemoveEffect(oEPEE4,EffectAreaOfEffect(AOE_PER_WALLBLADE)); } Je pense que le problème viens du fait que dans mon premier cas j'applique un effet a une location et que dans le script de suppression, je l'applique a des objets. Donc si c'est bien ça, alors comment faire pour supprimer un effet appliquer a une location ? Merci d'avance. |
Revenir en haut | ![]() ![]() ![]() ![]() |
kiky.le.magnifique Homme très gay ![]() Messages: 907 Localisation: Camping de la nation martienne... |
G pas compris (faut dire que je viens de me lever ^^)
pourquoi tu met pas simplement des ApplyEffectToObject dans le premier script??? ![]() _________________ 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 | ![]() ![]() ![]() ![]() |
decad7 Acolyte ![]() Messages: 22 |
Bonjour,
Tout simplement parce que cela ne marche pas. ![]() l'effet AOE_PER_WALLBLADE ne marche que sur une location et non sur un objet. a moins que quelqu'un arrive a faire la même chose en applicant un effet de mur d'épée sur un objet. mais le fait de le mettre sur une location, cela permet que tout le tronson de passage d'un couloir soit pris par un effet de mur d'épée. Alors que (enfin je pense), si on applique un effet similaire sur un objet, il sera positioner que sur l'objet. Quoiqu'il en soit cette effet ne fonctionne pas sur un objet (j'ai déja essayé), d'ailleurs j'ai planché sur ce problème toute la nuit (regarder l'heure du post ![]() Si quelqu'un a une solution Merci d'avance |
Revenir en haut | ![]() ![]() ![]() ![]() |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
hum, hum...
Pour que l'effet soit localisé sur un objet... l'infortuné PJ (comme d'habitude), il faut utiliser ApplyEffectToObject Dans un trigger qui correspond à ta zone... Tu mets le script suivant dans le OnEnter NWScript : void main() { object oEnter = GetEnteringObject(); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_WALLSPIKE),oEnter); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(15, DAMAGE_TYPE_PIERCING),oEnter); } _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | ![]() ![]() ![]() ![]() |
decad7 Acolyte ![]() Messages: 22 |
En fait ce n’est pas tout à fait cela que je cherche à faire.
Je vais reformuler ce que je souhaite faire. Voila donc. Le PJ marche tranquillement dans un couloir quand lors ce qu'il marche sur un déclencheur d'empreinte créer un effet de mur d'épée (non sur le joueur même) mais a un emplacement légèrement plus avancé. (pour le surprendre et non le pénaliser tout de suite) L’effet est permanent. De plus afin d'éviter que le personnage empreinte ce chemin, l'effet de mur d'épée est répété a 4 emplacements, si le joueur traverse un mur d'épée, il encaisse 60 points de dommage (Ce qui devrait normalement le faire réagir en reculant, sauf si il souhaite mourir ![]() Ensuite un peu plus tard dans l'aventure, le PJ trouve le moyen de faire cesser l'effet de mur d'épée qui lui bloque le chemin afin qu'il puisse continuer. Donc voila pourquoi je ne peux pas appliquer cet effet sur le joueur, puisqu'il ne doit pas l'affecter lors de son apparition, sauf si le joueur est sucidaire et fonce sur les lames. Et donc mon gros soucis actuellement réside dans le fait que je n'arrive pas a supprimé cette effet. Donc si vous connaissez une astuce, Je suis preneur. ![]() Merci encore |
Revenir en haut | ![]() ![]() ![]() ![]() |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
Voila qui est plus clair... Quand j'ai ce genre d'éléments, je me tourne vers un objet invisible et son HeartBeat... Voila ce que je te propose... 1. Tu crées 3-4 waypoints aux emplacements des futurs murs d'épée... WP_Blade01 WP_Blade02 WP_Blade03 WP_Blade04 2. Tu crées un objet invisible (non statique et non utilisable) avec le script suivant dans le HeartBeat. NWScript :
void main() { object oPC = GetNearestCreature ( CREATURE_TYPE_PLAYER_CHAR , PLAYER_CHAR_IS_PC ); // Si un Pj est a moins de 15 m, l'effet visuel se declenche (regler la distance...) if (GetDistanceBetween(OBJECT_SELF, oPC) <= 15.0) { ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_WALLSPIKE),OBJECT_SELF); // et si le Pj s'approche, il trinque !!(3 metres ?? regler la distance ...) if(GetDistanceBetween(OBJECT_SELF, oPC) <= 3.0) { ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_WALLSPIKE),oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(60, DAMAGE_TYPE_PIERCING),oPC); } } } 3. Bouton droit.. pour le placer dans la Palette... Avec ce ResRef "bladeobjet" 4. Tu détruits celui qui t'a servi de modèle... 5. Tu crées un trigger à l'endroit où doit passer le PJ (assez éloigné ... 15 m.. des WP) avec ce script dans le OnExit NWScript :
// pour creer les objets invisibles qui vont servir de murs de lame void main() { object oExit = GetExitingObject(); if (GetIsPC(oExit)) { CreateObject(OBJECT_TYPE_PLACEABLE,"bladeobjet", GetLocation(GetWaypointByTag("WP_Blade01")),TRUE, "BladeObjet01"); CreateObject(OBJECT_TYPE_PLACEABLE,"bladeobjet", GetLocation(GetWaypointByTag("WP_Blade02")),TRUE, "BladeObjet02"); CreateObject(OBJECT_TYPE_PLACEABLE,"bladeobjet", GetLocation(GetWaypointByTag("WP_Blade03")),TRUE, "BladeObjet03"); CreateObject(OBJECT_TYPE_PLACEABLE,"bladeobjet", GetLocation(GetWaypointByTag("WP_Blade04")),TRUE, "BladeObjet04"); DestroyObject( OBJECT_SELF,1.0); } } ==> Les murs sont en place. 6. Lorsque le Pj a réussi à trouver le moyen de passer ces murs... Dans un script de dialogue, un trigger... etc ... Utiliser ceci: NWScript :
void main() { DestroyObject( GetObjectByTag("BladeObjet01"); DestroyObject( GetObjectByTag("BladeObjet02"); DestroyObject( GetObjectByTag("BladeObjet03"); DestroyObject( GetObjectByTag("BladeObjet04"); // Si tu veux actualiser le journal //AddJournalQuestEntry("b ladequest", 100, GetPCSpeaker); } /* warning: 4 unclosed parenthesis () */ Dis-moi ce que tu en penses... _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | ![]() ![]() ![]() ![]() |
decad7 Acolyte ![]() Messages: 22 |
Alors.....
donc j'ai essayé. Le problème c'est que l'effet utilisé ici créer le même effet lorsque l'on marche sur un piege a pointe, a la seule différence que les pointes sortent du vide plutot que du sol. ![]() Deplus comme cette effet dure moins de 6 secondes, il disparait complettement pour réapparaitre. Et comme je le disais dans mon ancien message, le fait d'appliquer a un effet a un objet, la zone du mur s'apllique qu'a l'objet et non a tout le couloir. (donc ici il faudrait creer au moins 4 ou 5 objets pour prendre la taille du couloir entier. Et comme je souhaite que cette effet soit imposant, en gros qu'il prenne tout la largeur du couloir, et un peu de longueur. c'est pourquoi j'appliquer un effet de MUR D'EPEE a une location. J'ai justement un exemple qui a été fait dans NWN a la fin de la campagne contre Morag, il y a un mur d'épée sur le sol afin de nous empecher d'approcher. c'est cet effet que j'aimerais pouvoir faire (Mais surtout trouver le moyen de le supprimer). Merci tout de même. Ton script m'a donné une idée pour un autre endroit de mon module. ![]() Pour ma part je n'ai toujours pas trouver de solution. Donc si vous en voyez une, je suis preneur. |
Revenir en haut | ![]() ![]() ![]() ![]() |
decad7 Acolyte ![]() Messages: 22 |
voila c'est bon j'ai une solution qui marche.
il faut créer une empreinte avec le script suivant dans le OnHeartBeat NWScript :
void main() { if (GetIsPC(GetEnteringObject())) { if (GetLocalInt(OBJECT_SELF,"BLADE")!=1) { //DECLARATION DES OBJECTS object oEPEE1 = GetWaypointByTag("EPEE1"); object oEPEE2 = GetWaypointByTag("EPEE2"); object oEPEE3 = GetWaypointByTag("EPEE3"); object oEPEE4 = GetWaypointByTag("EPEE4"); //DECLARATION DES LOCATIONS location lEP1 = GetLocation(oEPEE1); location lEP2 = GetLocation(oEPEE2); location lEP3 = GetLocation(oEPEE3); location lEP4 = GetLocation(oEPEE4); //DECLARATION DE L'EFFET MUR D'EPEE effect eBlade = EffectAreaOfEffect(AOE_PER_WALLBLADE); //APPLICATION DES EFFETS AU LOCATION SOUHAITE ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlade,lEP1,6.0f); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlade,lEP2,6.0f); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlade,lEP3,6.0f); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eBlade,lEP4,6.0f); //VARIABLE UTILISE PAR LA SUITE DANS LE MODULE } } } Ensuite dans l'objet qui vous déclenchera la suppression du mur d'épée, mettais le script suivant NWScript :
void main() { if (GetIsPC(GetEnteringObject())) { SetLocalInt(GetObjectByTag("BL_EP"),"BLADE",1); //La destruction de cette objet n'est pas obligatoire a vous de voir selon votre module. DestroyObject(OBJECT_SELF); DestroyObject(GetObjectByTag("BL_EP")); } } Ensuite pour que tout fonctionne correctement, il faut mettre en place une variable sur l'objet du premier Script. la variable suivante : (ici) BLADE à 0. Le fonctionement sera le suivant. le personnage marche sur le déclencheur, le mur d'épée apparait et dure seulement 6 secondes (afin d'eviter qu'il ne se multiplie avec la fonction OnHeartBeat. avant que le personnage marche sur le déclencheur la variable BLADE est a 0 donc l'effet peut etre lancé. (Tant Que la variable est différent de 1). Ensuite des que le déclencheur de suppression prend effet, la variable BLADE passe a 1, donc par conséquent l'effet d'Epée s'arrette. Actuellement, il n'y a rien de scripté ici pour provoquer les dommages, chacun devra l'adapter a son usage. et pour finir, les deux objets sont détruits. (surtout pour le premier car le OnHeartBeat mange beaucoup de ressource. (pour le deuxiéme objet ce n'est pas obligatoire, tout dépent de votre module. |
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