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 15:54:26
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 |
Seth de Sombrelune Seigneur Messages: 156 |
Posté le : 06/11/2005 00:21:36 Sujet du message : [RESO] appliquer un DelayCommand sur un CreateObject
Bonsoir à vous, je fait appel à vos lumières :
j'ai une créature(A) qui se balade dans une zone, elle n'est pas hostile, le curseur de pointage indique donc une conversation possible. Si le joueur decide de cliquer dessus pour lui parler, lors du clic, la créature(A) se transforme (effet polymorphe) et devient une autre créature(B) qu entame la conversation. Lorsque la conversation est terminée, la créature(B) redevient la créature(A) initiale. Mon probleme : Losque on clique sur la créature(A) originelle, la seconde(B) apparait a coté de la première (au lieu de prendre sa place) et avant que la première est disparue. J'ai un probleme de delais entre le temps où la première est detruite et où la seconde apparait. Idem pour la fin de conversation. Ma question : Comment apliquer un delaycommand sur la création d'une créature ? Apres divers test, je n'y arrive pas car un delaycomand sur un créatobject semble ne pas fonctionner. Je vous livre ici mes 2 scripts (ils compilent mais l'apparition de la seconde créature n'est pas syncrone). Sur le OnConversation de la Créature A NWScript :
void main() { object oGrid=OBJECT_SELF; object oPC=GetLastSpeaker(); location lGrid=GetLocation(oGrid); effect eEffect=EffectVisualEffect(VFX_IMP_POLYMORPH); DestroyObject(oGrid,1.0); object oNgrid=CreateObject(OBJECT_TYPE_CREATURE,"pixie_melodie",lGrid); ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect,oGrid); DelayCommand(0.5,AssignCommand(oPC,ActionStartConversation(oNgrid))); } Dans le Action conséquante de la fin de mes Dialogues : NWScript : void main() { object oGrid=GetObjectByTag("pixie_melodie"); object oPC=GetLastSpeaker(); location lLoc=GetLocation(oGrid); effect eEffect=EffectVisualEffect(VFX_IMP_POLYMORPH); DestroyObject(oGrid,0.0); ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect,oGrid); CreateObject(OBJECT_TYPE_CREATURE,"mini_pixie",lLoc); } Dernière édition par Seth de Sombrelune le 07/11/2005 10:28:05; édité 1 fois
|
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
il est impossible de créer un delay a la création sans utiliser une fonction telle que cell-ci :
NWScript :
// fonction permettant d'appliquer un delai a la creation d'un objet void CreateObjectVoid(object oPC, int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); object oNgrid=GetObjectByTag("trans1"); DelayCommand(0.5,AssignCommand(oPC,ActionStartConversation(oNgrid))); } void main() { object oGrid=OBJECT_SELF; object oPC=GetLastSpeaker(); location lGrid=GetLocation(oGrid); effect eEffect=EffectVisualEffect(VFX_IMP_POLYMORPH); DestroyObject(oGrid,1.0); DelayCommand(1.1,CreateObjectVoid(oPC,OBJECT_TYPE_CREATURE,"pixie_melodie",lGrid,FALSE,"trans1")); ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect,oGrid); } essaye voir avec ceci, il ne te reste plus qu'à faire pour la fin de la conversation Dernière édition par Ailesnoires le 06/11/2005 09:09:40; édité 1 fois
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Biowar je crois avait un bug la dessus et donc le CreateObject ne marche pas avec un DelayCommand donc dsl tu peut pas ...
|
Revenir en haut | |
Seth de Sombrelune Seigneur Messages: 156 |
L'idée de la fonction est bien, mais :
J'aurais preferer utiliser la fonction uniquement pour retarder la création de l'objet (ici une créature), car la conversation je peux la scripter sans souci, c'est juste le delais qui coince, j'ai donc simplifier la ligne de commande comme suis : NWScript :
// fonction permettant d'appliquer un delai a la creation d'un objet void CreateObjectVoid(object oPC, int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); } void main() { object oGrid=OBJECT_SELF; object oPC=GetLastSpeaker(); location lGrid=GetLocation(oGrid); effect eEffect=EffectVisualEffect(VFX_IMP_POLYMORPH); DestroyObject(oGrid,1.0); DelayCommand(1.1,CreateObjectVoid(oPC,OBJECT_TYPE_CREATURE,"pixie_melodie",lGrid,FALSE,"trans1")); ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect,oGrid); } Ca compile, mais lors de l'utilisation, la créature(A) est bien détruite, mais la créature(B) elle n'est jamais apparue. Il se passe exactement la même chose si j'utilise le script original, tel qu'il m'a été proposé au dépard... Une idée ? |
Revenir en haut | |
Yoyo Seigneur Messages: 223 |
En fait je ne sais pas si c'est un bug car CreateObject renvoi un objet :
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. et le DelayCommand ne "delai" que les "void" ou "action" : 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. En fait j'ai une astuce : tu crer un script (sans le mettre dans un evènement (OnDeath, OnEnter...)) avec dedans : 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. (Dans mon exemple je le nomme "Creature" (tu peux bien sur choisir un autre nom)) Crer un autre script (lui tu le met dans l'evènement (OnEnter, OnDeath...)) avec dedans : 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. Lui tu le nomme comme tu veux. Et voila (bien sur complete les différents si tu veux rajouter des effets, modifier les différenrts paramètres des fonctions...) OU il y a une technique plus simple : NWScript : #include "nw_i0_2q4luskan" //IMPORTANT : ne PAS oublier le #include "nw_i0_2q4luskan" void main() { DelayCommand(0.5, CreateObjectVoid(OBJECT_TYPE_CREATURE, "resref", GetLocation(OBJECT_SELF))); } _________________ BOUH! (je vous ai fait peur ??) désolé Vive moi Pas vive Securom |
Revenir en haut | |
Seth de Sombrelune Seigneur Messages: 156 |
En fait l'astuce qu'avait suggerer AilesNoires etait la bonne dés le début, si cela ne fonctionnait pas, c'etait juste parceque j'avais oublier combient le mécanisme du scripting NWN etait tordus, j'ai donc été aussi tordu pour résoudre mon probleme.
La suggestion de Yoyo revient a ce qu'avait proposer AilesNoires, a cela pres que le script se retrouve avec une biblio qui ne me sert à rien. Donc pour créer un objet ou une créature avec un delayCommand, il suffit de créer la fonction de la manière suivante : NWScript :
// fonction permettant d'appliquer un delai a la creation d'un objet void DelayCreatObject(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); } Tout simplement, la ligne de code suivante donne l'exemple d'utilisation : La fonction DelayCreateObject se formate exactement comme la fonction CreateObject (si ce n'est qu'on peu mettre un DelayCommand avant ) 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. En fait si mon script initial ne fonctionnait pas c'est parce que je detruisait la créature qui a lancer le script, donc dés qu'elle est détruite, le script s'arrete. Donc il m'a falu contourner le probleme, du coup je doit conserver ma créature presente jusqu'a la fin de mon script. voici comment j'ai proceder : Je ne peux detruire la pixie sous peine d'interompre le script, donc je l'efface de l'ecran grace a un cutcene invisibility (qui echape a la vision lucide). Ensuite pour créer ma créature à la même place, je la rend intengible, donc mon monstre prendra bien sa place au lieu d'apparaitre à coté. Coté script cela me donne ceci : NWScript :
//:///////////////////////// ///////////////////// //:: Name dial_pixie_melo //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* permet de changer la forme de maniere personaliser */ //:///////////////////////// //////////////////// //:: Created By: Seth de Sombrelune / Jean de Joux //:: Created On: 06/11/05 //:///////////////////////// //////////////////// // fonction permettant d'appliquer un delai a la creation d'un objet void DelayCreatObject(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); } void main() { // Recuperation de l'objet crature qui produit le script actuel object oGrid=OBJECT_SELF; //Recuperation de l'objet parlant avec le PNJ (script OnConversation) object oPC=GetLastSpeaker(); // Recuperation de la position de la petite pixie location lGrid=GetLocation(oGrid); // Cretaion des effets visuels effect eEffect0=EffectVisualEffect(VFX_IMP_POLYMORPH); // Effet de transformation effect eEffect1=EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);// la creature disparait effect eEffect2=EffectCutsceneGhost();// la crature devient intangible // Application des effets ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect1,oGrid);//la crature change de forme, donc elle disparait ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect2,oGrid);// pour permetre de crer un monstre au meme endroit, on la rend intangible ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect0,lGrid);// on applique l'effet visuel la ou se trouvait la creature // Creation de la pixie Melodie dans les 0,5 secondes DelayCommand(0.5,DelayCreatObject(OBJECT_TYPE_CREATURE,"pixie_melodie",lGrid)); // Demarrage de la conversation de la pixie dans les 1,5 secondes DelayCommand(2.0,AssignCommand(oPC,ActionStartConversation(GetObjectByTag("pixie_melodie")))); // Destruction de l'objet petite pixie dans les 3 secondes, ce qui met fin a ce script DestroyObject(oGrid,3.0); } je passe la balise en réso |
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