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 22:54:38
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 |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
je viens de créer une prison animée, il s'agit d'une prison circulaire avec création et destruction de placeable qui se déclanche lorsqu'un joueur entre dans un trigger, seulement je m'apperçoit en la mettant en boucle qu'il y a un petit "décalage" dans le mouvement des barreaux, a la destruction de ceux-ci notement. pourtant les delais sont correct.
Avez vous une idée? Voici le script, il est a place sur le OnUsed d'un levier (ou autre) pour tester et s'applique au PJ. D'avance merci. NWScript :
// fonction permettant d'appliquer un delai a la creation des barreaux void CreateObjectVoid(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); } // fonction permettant d'appliquer un delai a la destruction des barreaux void DestroyObjectVoid(object oDestroy,string sNewTag="") { oDestroy = GetObjectByTag(sNewTag); DestroyObject(oDestroy); } void main() { /*---------------------------- ---------------------------*/ /*----------------nombres de barreaux--------------------*/ /*--------------*/int iBarreaux = 15;/*------------------*/ /*---------------------------- ---------------------------*/ /*--------------diametre de la prison--------------------*/ /*------------*/float fDiametre = 2.0;/*-----------------*/ /*---------------------------- ---------------------------*/ /*---------------resref des barreaux---------------------* / /*-------*/string sCreate = "plc_flamemedium";/*-------------*/ /*---------------------------- ---------------------------*/ /*------vitesse de creation des barreaux *10-------------*/ /*---------------*/int iVitesse = 1;/*-------------------*/ /*---------------------------- ---------------------------*/ /*------delay avant disparition des barreaux-------------*/ /*-------------*/int iDestruction = 2;/*-----------------*/ /*---------------------------- ---------------------------*/ //Declaration des variables object oPc = OBJECT_SELF; float fCount; float fDelay; float fDelayd; float fAngle; float fX; float fY; object oArea = GetArea(OBJECT_SELF); object oAnneau; location lAnneau; vector vPos; string sTag; int iCount; int iDelay; int iDelayd; //calcule de la position du prisonier et decomposition des coordinnees vector vPj = GetPosition(oPc); float fXpj = vPj.x; float fYpj = vPj.y; //calcule de l'angle iBarreaux = 360/iBarreaux; //boucle de creation des barreaux for(iCount=0;iCount<360; ) { iCount = iCount + iBarreaux; sTag = "Anneau_" + IntToString(iCount); //calcul de la position des barreaux fX= fDiametre*cos(fCount); fY= fDiametre*sin(fCount); fX = fX + fXpj; fY = fY + fYpj; vPos = Vector(fX, fY, 0.0); lAnneau = Location(oArea, vPos, 0.0); //calcul du delai de creation et creation des barreaux iDelay = iDelay + iVitesse; fDelay = IntToFloat(iDelay)/10; fCount = IntToFloat(iCount); DelayCommand(fDelay, CreateObjectVoid(OBJECT_TYPE_PLACEABLE,sCreate,lAnneau,FALSE,sTag)); //SendMessageToPC(oPc, FloatToString(fDelay)); //calcul du delai de destruction et destruction des barreaux iDelayd = iDelay + iDestruction; fDelayd = IntToFloat(iDelayd)/10; oAnneau = GetObjectByTag(sTag); //SendMessageToPC(oPc,"fD elay_"+FloatToString(fDel ay)); DelayCommand(fDelayd, DestroyObjectVoid(oAnneau,sTag)); //SendMessageToPC(oPc,"fD elayd_"+FloatToString(fDe layd)); } DelayCommand(fDelay,ExecuteScript("prisanneau",oPc)); } Edit : J'ai décoché les messages de contrôle envoyés au joueur Dernière édition par Ailesnoires le 26/09/2005 12:04:51; édité 2 fois
|
Revenir en haut | |
lylver Héros Messages: 274 |
Je vais coder pour voir à quoi celà ressemble, celà m'a l'air spectaculaire.
Juste une petite remarque : le moteur de jeu est capricieux là-dessus, les créations et destructions d'objets sont prises en charge en dehors de ton script. Question synchronisme, il vaudrait mieux déléguer la création dans un script dédié qui lui réalise l'action du genre DelayCommand(.. ExecuteScript) ou DelayCommand(SignalEvent) (avec une répétition) Je t'en dirais plus bientôt |
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
L'inconveniant est que je suis obliger de lancer le DrestroyObject apres que l'objet soit créé (normal me direz vous) et il n'est pas possible de faire un DelayCommand sur un createObject d'où l'appel d'une fonction.
Je vais aussi reflechir à ce que tu m'as dit de mon coté, je te remercie, j'ai hâte de voir les resultats de tes recherches mais tu peux prendre ton temps, je ne suis pas pressé. PS: Est-il possible de mettre un DelayCommand à un DestroyObjet? |
Revenir en haut | |
lylver Héros Messages: 274 |
oui, c'est une option de
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. |
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
Ca ne peut pas coller car je mets un délai pour la création ce qui fait que l'object n'existe pas encore lorsque DestroyObject est lancé, donc l'object ne reçoit pas l'instruction puisse qu'il n'existe pas
D'où l'appel de fonction |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Ici certaines idées pourront peut être te servir.
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
Sympa le lien je pense qu'il va m'être utile, seulement il ne résoudra pas mon problème car il utilse des EffectVisualEffect alors que j'utilise des placeables.
Je vais faire une prison avec des Effets pour voir ce que cela donne, je te remercie. @Lylver: Ta solution m'interesse toujours |
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
Voici le même scrip avec les effets a la place des placeables.
Y a t'il possibilité de supprimer le son ? (je peux faire avec) NWScript : void main() { /*---------------------------- ------------------------------ -----------*/ /*-----------------------nombr es de barreaux---------------------- -----*/ /*---------------------*/int iBarreaux = 15;/*-------------------------*/ /*---------------------------- ------------------------------ -----------*/ /*---------------------diametr e de la prison------------------------ ---*/ /*-------------------*/float fDiametre = 2.0;/*------------------------*/ /*---------------------------- ------------------------------ -----------*/ /*----------------------resref des barreaux---------------------- ------*/ /**/effect eBarreau = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_FIRE);/**/ /*---------------------------- ------------------------------ -----------*/ /*-------------vitesse de creation des barreaux *10--------------------*/ /*----------------------*/int iVitesse = 1;/*--------------------------*/ /*---------------------------- ------------------------------ -----------*/ //Declaration des variables object oPc = OBJECT_SELF; float fCount; float fDelay; float fAngle; float fX; float fY; object oArea = GetArea(OBJECT_SELF); object oAnneau; location lAnneau; vector vPos; string sTag; int iCount; int iDelay; effect eBarreau = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_FIRE); //calcule de la position du prisonier et decomposition des coordinnees vector vPj = GetPosition(oPc); float fXpj = vPj.x; float fYpj = vPj.y; //calcule de l'angle iBarreaux = 360/iBarreaux; //boucle de creation des barreaux for(iCount=0;iCount<360 { iCount = iCount + iBarreaux; sTag = "Anneau_" + IntToString(iCount); //calcul de la position des barreaux fX= fDiametre*cos(fCount); fY= fDiametre*sin(fCount); fX = fX + fXpj; fY = fY + fYpj; vPos = Vector(fX, fY, 0.0); lAnneau = Location(oArea, vPos, 0.0); //calcul du delai de creation et creation des barreaux iDelay = iDelay + iVitesse; fDelay = IntToFloat(iDelay)/10; fCount = IntToFloat(iCount); DelayCommand(fDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eBarreau,lAnneau)); } DelayCommand(fDelay,ExecuteScript("prisanneaueffet",oPc)); } |
Revenir en haut | |
lylver Héros Messages: 274 |
hop essaye ça
NWScript :
// ailes3.nss // fonction permettant d'appliquer un delai a la creation des barreaux void CreateObjectVoid(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE, string sNewTag= "") { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation, sNewTag); } // fonction permettant d'appliquer un delai a la destruction des barreaux void DestroyObjectVoid(object oDestroy,string sNewTag="") { oDestroy = GetObjectByTag(sNewTag); DestroyObject(oDestroy); } void barreau(object oPC, int angle, int iCount){ string sCreate = "plc_flamemedium"; //calcule de la position du prisonier et decomposition des coordinnees vector vPj = GetPosition(oPC); float fXpj = vPj.x; float fYpj = vPj.y; int iCountNew = iCount + angle; string sTag = "Anneau_" + IntToString(iCount); object oAnneau = GetObjectByTag(sTag); DestroyObject(oAnneau,1.6); if( iCountNew<360 ){ //calcul de la position des barreaux float fX = 2.0*cos(IntToFloat(iCount)) + fXpj ; float fY = 2.0*sin(IntToFloat(iCount)) + fYpj ; vector vPos = Vector(fX, fY, 0.0); location lAnneau = Location(GetArea(oPC), vPos, 0.0); sTag = "Anneau_" + IntToString(iCountNew); CreateObjectVoid(OBJECT_TYPE_PLACEABLE,sCreate,lAnneau,FALSE,sTag); DelayCommand(0.2,barreau(oPC,angle,iCountNew)); } } void main() { /*---------------------------- ---------------------------*/ /*----------------nombres de barreaux--------------------*/ /*--------------*/int iBarreaux = 16;/*------------------*/ /*---------------------------- ---------------------------*/ /*--------------diametre de la prison--------------------*/ /*------------*/float fDiametre = 2.0;/*-----------------*/ /*---------------------------- ---------------------------*/ /*---------------resref des barreaux---------------------* / /*-------*/string sCreate = "plc_flamemedium";/*-------------*/ /*---------------------------- ---------------------------*/ /*------vitesse de creation des barreaux *10-------------*/ /*---------------*/int iVitesse = 1;/*-------------------*/ /*---------------------------- ---------------------------*/ /*------delay avant disparition des barreaux-------------*/ /*-------------*/int iDestruction = 2;/*-----------------*/ /*---------------------------- ---------------------------*/ //Declaration des variables object oPc = OBJECT_SELF; int nLoop = GetLocalInt(oPc,"LOOP"); if( nLoop > 10) return ; SetLocalInt(oPc,"LOOP",nLoop +1 ); float fCount; float fDelay; float fDelayd; float fAngle; float fX; float fY; object oArea = GetArea(OBJECT_SELF); object oAnneau; location lAnneau; vector vPos; string sTag; int iCount; int iDelay; int iDelayd; //calcule de la position du prisonier et decomposition des coordinnees vector vPj = GetPosition(oPc); float fXpj = vPj.x; float fYpj = vPj.y; //calcule de l'angle iBarreaux = 360/iBarreaux; //boucle de creation des barreaux iCount=0; sTag = "Anneau_" + IntToString(iCount); //calcul de la position des barreaux fX= fDiametre*cos(fCount); fY= fDiametre*sin(fCount); fX = fX + fXpj; fY = fY + fYpj; vPos = Vector(fX, fY, 0.0); lAnneau = Location(oArea, vPos, 0.0); //calcul du delai de creation et creation des barreaux iDelay = iDelay + iVitesse; fDelay = IntToFloat(iDelay)/10; fCount = IntToFloat(iCount); //SendMessageToPC(oPc, FloatToString(fDelay)); //calcul du delai de destruction et destruction des barreaux iDelayd = iDelay + iDestruction; fDelayd = IntToFloat(iDelayd)/10; //SendMessageToPC(oPc,"fD elay_"+FloatToString(fDel ay)); //SendMessageToPC(oPc,"fD elayd_"+FloatToString(fDe layd)); CreateObjectVoid(OBJECT_TYPE_PLACEABLE,sCreate,lAnneau,FALSE,sTag); barreau(oPc,iBarreaux,iCount); DelayCommand(3.0,ExecuteScript("ailes3",oPc)); } c'est un peu crado mais le principe y est, à toi d'ajuster les paramètres que tu désires, éventuellement rajoute les paramètres que tu veux passer à la fonction barreau Tu peux contrôler la fin de la prison avec la variable locale sur le PJ. |
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
merci je teste ça immédiatement
|
Revenir en haut | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
Ton script fonctionne parfaitement si l'on fini de créer les barreaux et qu'on les détruit ensuite.
Je pense que cela doit venir du moteur du jeu car il semble retarder le destroy si il est executer en même temps que le Create. je vais voir si je peux éviter de créer et détruire en même temps Je te remercie pour le temps que tu as passé dessus je posterais mon script lorsqu'il sera achevé. PS : j'ai beaucoup appris gràce à ce que tu postes sur le forum et je comprend mieux ce dont tu me parlais je vais modifier ton script en consequence. PS2 : j'en profite pour tous vous remercier, depuis le temps que ça me démange. Je ne poste pas beaucoup de questions par rapport aux réponses que j'obtiens sur ce forum. En cherchant un peu on trouve facilement la réponse à sa question, il suffit d'adapter à son idée. Donc merci à tous ceux qui aident et aussi merci à tous ceux qui posent les questions qui n'auraient jamais eu de réponses si elles n'avaient pas été posé. |
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