La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 02/11/2024 00:33:35


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 25/09/2005 14:29:17 Sujet du message : Prison animé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));

}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 26/09/2005 00:51:54 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 08:40:05 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 26/09/2005 12:27:06 Sujet du message :

oui, c'est une option de
NWScript :
DestroyObject(object oDestroy,
    float fDelay = 0.0f) ;
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 12:59:11 Sujet du message :

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 Sad
D'où l'appel de fonction
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 26/09/2005 17:49:12 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 18:59:12 Sujet du message :

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. Smile

Je vais faire une prison avec des Effets pour voir ce que cela donne, je te remercie. Razz

@Lylver: Ta solution m'interesse toujours Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 19:31:40 Sujet du message :

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<360Wink
  {
  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));
}
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 26/09/2005 21:13:37 Sujet du message : Re: Prison animée

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));
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 22:17:38 Sujet du message :

merci je teste ça immédiatement
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 26/09/2005 22:52:59 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 94.248ms