La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 14:19:56


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 19/01/2005 12:10:04 Sujet du message : Redondance de TAG sur créatures multiples.

Salut,

J'ai un petit problème avec le script qui suit. Malgré tous mes efforts je ne parviens pas à trouver la solution. Le script correspond au « OnHearthBeat » par défault de NWN. J'y ais rajouté les lignes du début pour appliquer des effets visuels sur la créature. Tel quel, le code fonctionne, j'obtiens le résultat voulu. Mais dès que les créatures deviennent nombreuses (moins d'une dizaine), les anomalies surgissent. En fait, les effets ne s'appliquent alors qu'à une seule créature et pas aux autres. Je vois bien d'où viens le problème, (toutes les créatures en question, possèdent le même tag), mais je ne parviens à le résoudre ce problème.

Il faut savoir que lorsque le PJ entre dans la zone, les créatures ne sont pas présentes. Elles apparaissent si le PJ se rapproche de certains plaçables (script sur le « OnHearthBeat » du plaçable).

Merci d'avance ceux qui sauront m'aider.
@+.f€r. Surprised



NWScript :
//:Confused///////////////////////// /////////////////////
//:: Default On Heartbeat
//:: NW_C2_DEFAULT1
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*
    This script will have people perform default
    animations.
*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 23, 2001
//:Confused///////////////////////// ////////////////////
#include "NW_I0_GENERIC"
void main()
{
      object oNPC=GetObjectByTag("NW_SKELCHIEF");

      effect eEffect2 = EffectVisualEffect(VFX_IMP_SLEEP);
      effect eEffect3 = EffectVisualEffect(VFX_DUR_GLOW_PURPLE);

      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect2, oNPC);
      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect3, oNPC);

    if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
    {
        if(TalentAdvancedBuff(40.0))
        {
            SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
            return;
        }
    }

    if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING))
    {
        int nDay = FALSE;
        if(GetIsDay() || GetIsDawn())
        {
            nDay = TRUE;
        }
        if(GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay)
        {
            if(nDay == TRUE)
            {
                SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE);
            }
            else
            {
                SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE);
            }
            WalkWayPoints();
        }
    }

    if(!GetHasEffect(EFFECT_TYPE_SLEEP))
    {
        if(!GetIsPostOrWalking())
        {
            if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
            {
                if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                {
                    if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF))
                    {
                        if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN))
                        {
                            PlayMobileAmbientAnimations();
                        }
                        else if(GetIsEncounterCreature() &&
                        !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                        {
                            PlayMobileAmbientAnimations();
                        }
                        else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) &&
                          !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                        {
                            PlayImmobileAmbientAnimations();
                        }
                    }
                    else
                    {
                        DetermineSpecialBehavior();
                    }
                }
                else
                {
                    //DetermineCombatRound();
                }
            }
        }
    }
    else
    {
        if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
        {
            effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
            if(d10() > 6)
            {
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
            }
        }
    }
    if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1001));
    }
}
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.

_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 19/01/2005 14:23:46 Sujet du message :

ces scripts par defaut... c'est d'un compliqué et encore, pas la moitié n'est vraiment utile quand on souhaite y mettre sa touche d'originalité enfin...

La fonction GetObjectByTag possède un argument supplémentaire que peu de personnes n'utilisent. Il s'agit d'une énième object au tag nommé.
Tu fais donc une boucle encapsulant tes instructions, en faisant un truc du genre :

NWScript :
object oMonObjectMultiple = GetObjectByTag("TagMonstre", 0);
int iIndex = 0;
while (GetIsObjectValid(oMonObjectMultiple)){

// tes instructions

iIndex++;
oMonObjectMultiple = GetObjectByTag("TagMonstre", iIndex);
}
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.

_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 19/01/2005 15:36:32 Sujet du message :

Merci, j'ai eu le même problème sur mon module Boisperdu, dans une cérémonie, seul un perso bougeait, maintenant je vais pouvoir corriger....Very Happy
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 19/01/2005 15:56:49 Sujet du message :

Salut,

Effectivement, je ne connaissais pas cette fonction. Mais, c'est clair, je ne l'oublierai pas dorénavant. Merci, cela me sera très utile.
Quant au script par défaut, parlons-en, si tu as un moment. Je le trouvais justement un peu long, et je me demandais s'il était vraiment utile. Par exemple, si je fais ceci (voir script qui suit) cela posera-t-il un problème par la suite dans le jeu ? La fonction « #include "NW_I0_GENERIC" » sert-elle alors à quelque chose ou puis-je simplement l'éliminer.

Détail important le script qui suit ne fonctionne pas. Je l'ais testé. La moitié des créatures est affectée par les effets, l'autre non. Surprised

En fait, si les créatures apparaissent les unes après les autres, les effets sont appliqués à chacune d'elles, mais si plusieurs créatures apparaissent en même temps, une seule bénéficie des effets.

NWScript :
#include "NW_I0_GENERIC"
void main()
{
      object oMonObjectMultiple = GetObjectByTag("NW_SKELCHIEF", 0);
      int iIndex = 0;
      while (GetIsObjectValid(oMonObjectMultiple)){

      object oNPC=GetObjectByTag("NW_SKELCHIEF");
      effect eEffect2 = EffectVisualEffect(VFX_IMP_SLEEP);
      effect eEffect3 = EffectVisualEffect(VFX_DUR_GLOW_PURPLE);

      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect2, oNPC);
      ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect3, oNPC);

      iIndex++;
      oMonObjectMultiple = GetObjectByTag("NW_SKELCHIEF", iIndex);
}
}
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.

_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 19/01/2005 16:34:36 Sujet du message :

SurprisedSurprisedSurprisedSurprisedSurprisedSurprisedSurprisedSurprised......Laughing

NWScript :
#include "NW_I0_GENERIC"
void main()
{
object oNPC= GetObjectByTag("NW_SKELCHIEF", 0);
int iIndex = 0;
while (GetIsObjectValid(oNPC)){

effect eEffect2 = EffectVisualEffect(VFX_IMP_SLEEP);
effect eEffect3 = EffectVisualEffect(VFX_DUR_GLOW_PURPLE);

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect2, oNPC);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect3, oNPC);

iIndex++;
oNPC = GetObjectByTag("NW_SKELCHIEF", iIndex);
    }
}
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.


Si tu boucles sur un tag dont tu ne te sers aucunement c normal que ça ne marche absolument pas.
Essaie comme ça plutot.
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 19/01/2005 17:01:05 Sujet du message :

Laughing Laughing Laughing Laughing....Surprised

Je n'avais même pas vu que « oMonObjectMultiple » n'étais pas une fonction. LOULE !!!
Merci beaucoup Athanor. Comme d'ab, j'ais rajouté ton nom, la date et l'url du site sur le script.
_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
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 70.866ms