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 01/11/2024 02:27:11
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 |
Eldorane Héros Messages: 298 Localisation: Moselle |
Salut à tous,
je cherche à adapter un script que j'ai trouvé concernant des loups garoux : Citation : dans le onspawn de tes loups, tu mets ca NWScript :
void main() { SetLocalInt(OBJECT_SELF, "LOUP", TRUE); SetLocalString(OBJECT_SELF, "LOUP_GAROU", "TAG_DU_NPC"); } et dans le onspawn des NPC tu met : NWScript :
void main() { SetLocalInt(OBJECT_SELF, "LOUP", TRUE); SetLocalString(OBJECT_SELF, "LOUP_GAROU", "TAG_DU_LOUP"); } et enfin dans le onheartbeat de tout ce petit monde : NWScript :
////////////////////////////// /////////////////////// //:Le loup-garou //:de VorpalBlade depuis Bioware //modif de Reyan : necessite un SetLocalInt et un SetLocalSring dans le onspawn ////////////////////////////// /////////////////////// void ChangeWerewolf(object oObject, string sTemp); void ChangeTo(string sTemp, location lLoc); void main() { int bDay = GetIsDay(); int nLoup = GetLocalInt(OBJECT_SELF, "LOUP"); string sChangeTo = GetLocalString(OBJECT_SELF, "LOUP_GAROU"); object oMe = OBJECT_SELF; // If I'm a man and its night or I'm a WW and it is day. if (((nLoup == FALSE) && (!bDay)) || ((nLoup == TRUE) && (bDay))){ AssignCommand(GetModule(), ChangeWerewolf(oMe, sChangeTo)); } } void ChangeWerewolf(object oObject, string sTemp) { effect eVis = EffectVisualEffect(VFX_FNF_HOWL_MIND); location lLoc = GetLocation(oObject); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, lLoc, 2.0f); DestroyObject(oObject); DelayCommand(0.5f, ChangeTo(sTemp, lLoc)); } void ChangeTo(string sTemp, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sTemp, lLoc); effect eVis = EffectVisualEffect(VFX_COM_CHUNK_RED_SMALL); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, lLoc, 2.0f); } - Je souhaite que plusieurs corbeaux dans une forêt se rejoignent à un même point (avec je suppose des waypoints) et cela lorsqu'un évèment se produit (lorsque par exemple les PJ arrivent à un endroit précis de la zone). - Ensuite une fois que tous les corbeaux se sont rassemblés, il faudrai qu'il disparaissent dans un nuage de fumée + lumières et qu'apparaisse à la place un humain quelconque. Voilà, c'est tout... hem... Dernière édition par Eldorane le 16/04/2005 02:21:38; édité 1 fois
|
Revenir en haut | |
Blackblood Chevalier Messages: 80 Localisation: France |
Salut Eldorane, moi je n'ai pas copié sur le script que tu as passé mais j'ai fais ceci.
Pour le tester, tu devras créer : - 5 corbeaux dont le tag devront être : corbeau1, corbeau2, ...., corbeau5 - 1PNJ (attention, il faudra que tu remplace dans le script "resref_pnj" par le resref du PNJ que tu aura crée (à placer entre guillemets) - 1 waypoint dont le tag est wp_corbeau - 1 trigger qui déclenchera le script Place le script dans l'évènement "OnEnter" du trigger. NWScript :
/// Placer sur le OnEnter du trigger void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; object oTarget1; oTarget1 = GetObjectByTag("corbeau1"); AssignCommand(oTarget1, ActionMoveToObject(GetObjectByTag("corbeau1", TRUE))); object oTarget2; oTarget2 = GetObjectByTag("corbeau2"); AssignCommand(oTarget2, ActionMoveToObject(GetObjectByTag("corbeau2", TRUE))); object oTarget3; oTarget3 = GetObjectByTag("corbeau3"); AssignCommand(oTarget3, ActionMoveToObject(GetObjectByTag("corbeau3", TRUE))); object oTarget4; oTarget4 = GetObjectByTag("corbeau4"); AssignCommand(oTarget4, ActionMoveToObject(GetObjectByTag("corbeau4", TRUE))); object oTarget5; oTarget5 = GetObjectByTag("corbeau5"); AssignCommand(oTarget5, ActionMoveToObject(GetObjectByTag("corbeau5", TRUE))); //// Destruction des corbeaux oTarget1 = GetObjectByTag("corbeau1"); DestroyObject(oTarget1, 3.0); oTarget2 = GetObjectByTag("corbeau2"); DestroyObject(oTarget2, 3.0); oTarget3 = GetObjectByTag("corbeau3"); DestroyObject(oTarget3, 3.0); oTarget4 = GetObjectByTag("corbeau4"); DestroyObject(oTarget4, 3.0); oTarget5 = GetObjectByTag("corbeau5"); DestroyObject(oTarget5, 3.0); /// Apparition d'un humain location lTarget; oTarget = GetWaypointByTag("wp_corbeau"); lTarget = GetLocation(oTarget); DelayCommand(4.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "resref_pnj", lTarget)); eEffect = EffectVisualEffect(VFX_FNF_SUMMON_GATE); DelayCommand(4.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, lTarget)); } Voilà, je ne l'ai pas testé, bon courage. |
Revenir en haut | |
grosraoul Ecuyer Messages: 60 |
coucou,
j'ai trouvé votre idée sympa alors j'ai essayé de faire ce que tu dis. Le script plus haut est un bon début, mais y'a des choses qui marcheront pas bien: - pas sur que tout les corbeaux arrivent en meme temps, ils ont a parcourir une distance qui sera forcement différente - la creation d'un objet n'est pas retardable , c'est a dire que la ligne 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. n'est pas compilable. c'est pour ca qu'il vaut mieux couper ce script en plusieurs autres. par exemple tu peux creer un premier declencheur (TRIG1 par exemple, peu importe son nom) et sur le onenter de ce declencheur , tu peux y mettre ce script NWScript :
void main() { object oPC = GetEnteringObject(); if (GetEnteringObject()==oPC) { object oTarget1; oTarget1 = GetObjectByTag("corbeau1"); AssignCommand(oTarget1, ActionMoveToObject(GetObjectByTag("wp_corbeau"), TRUE)); object oTarget2; oTarget2 = GetObjectByTag("corbeau2"); AssignCommand(oTarget2, ActionMoveToObject(GetObjectByTag("wp_corbeau"), TRUE)); object oTarget3; oTarget3 = GetObjectByTag("corbeau3"); AssignCommand(oTarget3, ActionMoveToObject(GetObjectByTag("wp_corbeau"), TRUE)); object oTarget4; oTarget4 = GetObjectByTag("corbeau4"); AssignCommand(oTarget4, ActionMoveToObject(GetObjectByTag("wp_corbeau"), TRUE)); object oTarget5; oTarget5 = GetObjectByTag("corbeau5"); AssignCommand(oTarget5, ActionMoveToObject(GetObjectByTag("wp_corbeau"), TRUE)); } /* warning: 1 unclosed block {} */ -les tag "corbeau_x" etant les tags de tes creatures corbeaux (ici y'en a 5 ), - wp_corbeau est le point de rencontre de tes corbeaux (c'est un waypoint : ptit triangle bleu, drapeau jaune si tu te souviens ) ok , à ce moment, des que le pj (et seulement le pj) rentre dans cette zone, hop tout les corbeaux doivent voler vers le waypoint que tu as défini. ensuite, il faut prevoir le fait qu'ils vont pas tous venir en meme temps. Comme solution, (y'en a d'autres) tu peux faire un deuxieme declencheur qui va entouré ton waypoint wp_corbeau (TRIG2) sur le onenter de ce nouveau declencheur, tu peux utiliser une variable locale qui s modifie selon que le corbeau est arrivé ou pas . ce qui donne : NWScript :
void main() { //// Destruction des corbeaux object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetEnteringObject()==GetObjectByTag("corbeau1")) SetLocalInt(oPC,"iCorbeau1",1); if (GetEnteringObject()==GetObjectByTag("corbeau2")) SetLocalInt(oPC,"iCorbeau2",1); if (GetEnteringObject()==GetObjectByTag("corbeau3")) SetLocalInt(oPC,"iCorbeau3",1); if (GetEnteringObject()==GetObjectByTag("corbeau4")) SetLocalInt(oPC,"iCrbeau4",1); if (GetEnteringObject()==GetObjectByTag("corbeau5")) SetLocalInt(oPC,"iCorbeau5",1); } des que corbeau1 est arrivé par exemple, la variable "iCorbeau1" passe a 1 , et de meme pour les autres variables de chaque corbeau. ensuite il te reste le script d'effet spécial, si tout les corbeaux sont arrivés alors on envoie la sauce : NWScript :
void main() { object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); //// Destruction des corbeaux if ((GetLocalInt(oPC,"iCorbeau1")==1) && (GetLocalInt(oPC,"iCorbeau2")==1) && (GetLocalInt(oPC,"iCorbeau3")==1) && (GetLocalInt(oPC,"iCorbeau4")==1) && (GetLocalInt(oPC,"iCorbeau5")==1)) { object oTarget1 = GetObjectByTag("corbeau1"); DestroyObject(oTarget1, 0.0); SetLocalInt(oPC,"iCorbeau1",0); // pour que le script ne se reexecute pas object oTarget2 = GetObjectByTag("corbeau2"); DestroyObject(oTarget2, 0.0); SetLocalInt(oPC,"iCorbeau2",0); // la premiere remise a zero au dessus suffisait mais bon ... object oTarget3 = GetObjectByTag("corbeau3"); SetLocalInt(oPC,"iCorbeau3",0); DestroyObject(oTarget3, 0.0); object oTarget4 = GetObjectByTag("corbeau4"); SetLocalInt(oPC,"iCorbeau4",0); DestroyObject(oTarget4, 0.0); object oTarget5 = GetObjectByTag("corbeau5"); SetLocalInt(oPC,"iCorbeau5",0); DestroyObject(oTarget5, 0.0); /// Apparition d'un humain location lTarget; object oTarget = GetWaypointByTag("wp_corbeau"); lTarget = GetLocation(oTarget); CreateObject(OBJECT_TYPE_CREATURE, "resref_du_pnj_qui_apparait", lTarget); effect eEffect1 = EffectVisualEffect(VFX_FNF_SUMMON_GATE); effect eEffect2 = EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES); DelayCommand(0.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect1, lTarget)); DelayCommand(0.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect2, lTarget)); } } voila , j'espere vous avoir aidé , bon courage |
Revenir en haut | |
Blackblood Chevalier Messages: 80 Localisation: France |
Même si ce n'est pas moi qui en est fait la demande, je te remercie pour ta réponse, cela me permet de mieux comprendre le fonctionnement des scripts et ainsi d'éviter les erreurs.
En tout cas, ton info pour déclencher la suite des évènements seulements lorsque tous les corbeaux sont arrivés va m'aider pour certains de mes scripts. Bonne soirée |
Revenir en haut | |
grosraoul Ecuyer Messages: 60 |
ah oui pardon, je sais pas pourquoi je croyais que vous faisiez des scripts ensemble , je sais pas ce qui m'a mis ca en tete
tcho |
Revenir en haut | |
Blackblood Chevalier Messages: 80 Localisation: France |
Aucun problème, moi j'essaie de répondre avec mes petites connaissances. Maintenant si des personnes me corrige, je ne demande pas mieux
Bonne journée |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Merci !!!!
ça fonctionne parfaitement !!! j'ai juste eu un doute sur l'emplacement du dernier script. Je l'ai finalement placé dans le ONHeartbeat du second trigger mais je sais pas si c'est l'idéal car la transformation prend du temps à se réalisé (5 sec après que les corbeaux se soient rassemblés...) Aussi existe t'il une liste des effets possibles ? |
Revenir en haut | |
grosraoul Ecuyer Messages: 60 |
oui le onheartbeat est un bon choix
- Car ce script ne s'execute qu'une seule fois finalement . - Mais pas le meilleur,car comme tu le dis , le script du onheartbeat s'execute toutes les 6 secondes, donc tout depend du timing ; quand tes corbeaux arrivent, si tu as de la chance , le script peut s'executer pile poil quand les corbeaux arrivent ou bien au bout de 5.9999 secondes dans le plus malheureux des cas. pour les effets , tu peux télécharger le Lexicon si tu veux : tu peux y trouver la liste des effets du type VFX_FNF_* et surtout les photos d'ecrans qui vont avec . ca te donne une bonne idée comme ça. |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Merci encore ! excellent ce lexicon !
|
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