La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 17:47:14


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
BlackMagik
Acolyte
Inscrit le: 02 Jan 2005
Messages: 22
Répondre en citant
Posté le : 25/01/2005 20:29:05 Sujet du message : Probleme d'eboueur

J'aimerai faire un script d'eboueur placé sur le OnExit de mes zones. Biensur, il supprime les drops seulement si il n'y a aucun PC dans la zone proprement dite. Mais tout ceci ne fonctionne pas, voila mon script :

NWScript :
int GetIsPCInArea (object oArea)
{
object oIntru = GetFirstObjectInArea(oArea);
while(GetIsObjectValid(oIntru))
{
  if(GetIsPC(oIntru))
  {
  return TRUE;
  }
  oIntru = GetNextObjectInArea(oArea);
}
return FALSE;
}

void main()
{
object oZone = OBJECT_SELF;
object oObjet = GetFirstObjectInArea( oZone );
if(!GetIsPCInArea(oZone))
{
while ( GetIsObjectValid(oObjet) )
    {
    if ( GetObjectType(oObjet) == OBJECT_TYPE_ITEM )
        {
        DestroyObject ( oObjet );
        oObjet = GetNextObjectInArea( oZone );
        }
    else
        {
        oObjet = GetNextObjectInArea(oZone);
        }
    }
}
}
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.


Merci d'avance pour votre aide
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dreams
Ecuyer
Inscrit le: 30 Juil 2004
Messages: 41
Localisation: val de marne
Répondre en citant
Posté le : 25/01/2005 23:02:50 Sujet du message :

Je ne sais pas ce qui est faut dans ton script, mais je peux t'en proposer un qui marche normalement

à mettre dans le OnExit de ta zone

NWScript :
int GetIsPCInArea (object oArea)
{
object oIntru = GetFirstObjectInArea(oArea);
while(GetIsObjectValid(oIntru))
{
  return TRUE;
  oIntru = GetNextObjectInArea(oArea);
}
return FALSE;
}

void main()
{
object oArea = OBJECT_SELF;
//Si il n'y a plus de PJ dans la zone
if(!GetIsPCInArea(oArea))
{
  object oIntru = GetFirstObjectInArea(oArea);
  //Tant que l'objet est valide et n'est pas un PJ
  while(GetIsObjectValid(oIntru) && !GetIsPC(oIntru))
  {
  int nType = GetObjectType(oIntru);
  switch(nType)
  {
    case OBJECT_TYPE_CREATURE:
    //Si la creature n'est pas en combat
    if(!GetIsInCombat(oIntru))
    {
      //Si elle provient d'une rencontre, elle est detruite
      if(GetIsEncounterCreature(oIntru))
      {
      DestroyObject(oIntru);
      }
      //Sinon elle se repose et se soigne
      else
      {
      AssignCommand(oIntru, ActionRest());
      ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oIntru)), oIntru);
      }
    }
    break;
    case OBJECT_TYPE_ITEM:
    //Si l'objet n'est pas un objet de quete et qu'il n'est pas possede par un PJ
    if(!GetPlotFlag() && !GetIsPC(GetItemPossessor(oIntru)))
    {
      //DeleteLocalFloat(oIntru, "Durabilite");
      DestroyObject(oIntru);
    }
    break;
    case OBJECT_TYPE_PLACEABLE:
int nN = 1;
for(nN = 1; nN > 6; nN++)
{
  if(GetTag(oIntru) == "LootBag"+IntToString(nN))
  {
  DestroyObject(oIntru);
  }
}
break;
  }
  oIntru = GetNextObjectInArea(oArea);
  }
}
}
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.

_________________
La raison de la réussite des gens du mal est l'inaction des gens du bien
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Kétil Dimzad
Ecuyer
Inscrit le: 10 Oct 2003
Messages: 62
Localisation: Fijj'Bool City
Répondre en citant
Posté le : 26/01/2005 07:25:36 Sujet du message :

NWScript :
case OBJECT_TYPE_PLACEABLE:
int nN = 1;
for(nN = 1; nN > 6; nN++)
{
if(GetTag(oIntru) == "LootBag"+IntToString(nN))
{
DestroyObject(oIntru);
}

/* warning: 1 unclosed block {} */
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.


Je capte pas ce passage du script.

Tu détruis les placeables lootbag ( les loots des monstres quoi...) et leurs tags vont de "LootBag1" à "LootBag6" ?

C'est ça ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
daedra
Novice
Inscrit le: 20 Juil 2004
Messages: 17
Répondre en citant
Posté le : 26/01/2005 08:39:42 Sujet du message :

Je sais pas si c'est ca l'erreur mais bon :
Tu ecris
NWScript :

int GetIsPCInArea (object oArea)
{
object oIntru = GetFirstObjectInArea(oArea);
while(GetIsObjectValid(oIntru))
{
if(GetIsPC(oIntru))
{
return TRUE;
}
oIntru = GetNextObjectInArea(oArea);
}
return FALSE;
}
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.


Avec 3 objets dans la zone
1 table
1 joueur
Une chaise

donc ton while va retourner FALSE TRUE FALSE puis on sort de la boucle while et on retourne FALSE. On detecte donc jamais le joueur.
Essai cela
NWScript :

int GetIsPCInArea (object oArea)
{
int iretour = FALSE ;
object oIntru = GetFirstObjectInArea(oArea);
while(GetIsObjectValid(oIntru))
{
if(GetIsPC(oIntru))
{
iretour = TRUE;
}
oIntru = GetNextObjectInArea(oArea);
}
return iretour;
}
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.

_________________
Daedra
Dernière édition par daedra le 26/01/2005 13:55:50; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
BlackMagik
Acolyte
Inscrit le: 02 Jan 2005
Messages: 22
Répondre en citant
Posté le : 26/01/2005 12:22:44 Sujet du message :

Toujours rien, je viens d'essayer avec le script de Daedra, mais les objets ne disparaissent pas. allez savoir pourquoi !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
daedra
Novice
Inscrit le: 20 Juil 2004
Messages: 17
Répondre en citant
Posté le : 26/01/2005 14:19:06 Sujet du message :

Bon et bien apres avoir cherché un peu partout j'ai trouvé le script sur ce forum !
http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?t=4793&highlight=nettoyer+zone
J'espère que c'est ce qu'il te faut.
_________________
Daedra
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
BlackMagik
Acolyte
Inscrit le: 02 Jan 2005
Messages: 22
Répondre en citant
Posté le : 26/01/2005 16:15:39 Sujet du message :

J'ai finalement fini mon script mais d'une autre facon en fait ^^ voila ma solution ( testée ):

NWScript :
int GetIsPCInArea (object oArea)
{
object oPC = GetFirstPC();
    while (oPC != OBJECT_INVALID)
    {
        if (OBJECT_SELF == GetArea(oPC))
            {return TRUE; }
        else {oPC = GetNextPC();}
    }
return FALSE;
}
void main()
{
object oZone = OBJECT_SELF;
object oObjet = GetFirstObjectInArea( oZone );
if(!GetIsPCInArea(oZone))
{
while ( GetIsObjectValid(oObjet) )
    {
    if ( GetObjectType(oObjet) == OBJECT_TYPE_ITEM )
        {
        DestroyObject ( oObjet );
        oObjet = GetNextObjectInArea( oZone );
        }
    else
        {
        oObjet = GetNextObjectInArea(oZone);
        }
    }
}
}
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.


Voila pour ceux qui veulent, à placer sur le OnExit de la zone.
 
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 67.369ms