Problème avec un script

Répondre
Partager Rechercher
Salut,voila,j'ai un problème avec ce script,il se compile,mais le module bloque dès qu'il est mis dans le "onenter" de ma zone,le module se lance pas...

Code:
void SpawnCreatures(string sResRef)
{
    string sWPTag = "sp_" + sResRef;
    object oWP = GetObjectByTag(sWPTag);
    int i = 0;

    while(GetIsObjectValid(oWP))
    {
       if (GetObjectType(oWP) == OBJECT_TYPE_WAYPOINT
            && GetArea(oWP) == OBJECT_SELF)
           {
            location lLoc = GetLocation(oWP);
            object oCreature = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lLoc);
            }

        i++;
        oWP = GetObjectByTag(sWPTag, i);
    }
}

void main()
  {
    object oPC = GetFirstObjectInArea(OBJECT_SELF);

         SpawnCreatures("o08_zealot_1");
         SpawnCreatures("o08_zealot_2");
         SpawnCreatures("o08_zealot_3");
         SpawnCreatures("o08_zealot_4");
         // Boss
         SpawnCreatures("o08_nsafa");
         SpawnCreatures("o08_herald");
         //  2x minions
         SpawnCreatures("o08_pureblood_2");


  }
J'ai les bon Tags/Resref a mes mobs,point de passages...

EX:
Point de passage : sp_o08_nsafa
Resref/tag du mob: o08_nsafa

Merci d'avance.

PS: Je précise que j'ai pris un bout de ce script a NwN2.
Une instruction While s'utilise avec une instruction GetFirst (objectinarea, factionmember, objectin shape ...) et ensuite GetNext (object, factionmember ...). Là, ton instruction while boucle sans s'arrêter et cela doit faire planter ton mod.
Citation :
Publié par Sizateck
object oPC = GetFirstObjectInArea(OBJECT_SELF);
J'ai peur que tu penses, dans cette ligne, que le 1er objet de la zone sera le joueur. Et ce n'est peut-être pas l'avis du module. Il se trouve que le script OnEnter peut s'exécuter aussi avec un PNJ entrant.

Vérifie d'abord que c'est bien un PJ qui entre dans la zone avant d'exécuter le script de SpawnCreatures.

Dans mes débuts de scriptage, j'ai fait cette erreur et, comme pour toi, mon module ne se lançait pas.

remplace

object oPC = GetFirstObjectInArea(OBJECT_SELF);

par

if (!GetIsPC(GetEnteringObject())) return;

et ça devrait marcher.



EDIT : Dans ton script actuel : lorsque ton PJ arrive dans la zone, le OnEnter est exécuté ce qui lance SpawnCreatures. La nouvelle créature créée dans la zone va à nouveau exécuter le OnEnter, car fonctionne aussi pour un PNJ entrant, et que tu ne testes pas qui entre dans la zone. Résultat le OnEnter est exécuté indéfiniement pour chaque nouvelle créature entrante, et ton module ne se lance pas.
Je pense que le " object oPC = GetFirstObjectInArea(OBJECT_SELF); " ne sert à rien dans ton script puisque l'objet oPC n'est réutilisé à aucun moment.

Par contre le OnEnter peut être déclenché par un NPC donc effectivement l'apparition de la première créature semble déclencher le lancement du script en boucle.

"Something has entered the area, encounter, or trigger (not neccessarily a PC)."

La solution donnée par Holgadard me semble correcte.
Je vous remercie,je vais tester ça.

Ce qui est bizard,c'est que c'est un script pris sur NwN2,et ça fonctionne très bien labas....Il doit y avoir une subtilité quelque part..
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés