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 18:29:20


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Mortbrutale
Novice
Inscrit le: 27 Juil 2006
Messages: 6
Répondre en citant
Posté le : 29/08/2006 14:43:16 Sujet du message : on exit + boucle d'attachement

bonjour,
j'ai cherché ici un script de vidage de zone et j en ai trouvé un,
mais, j 'ai un probleme avec le on exit et la boucle d'attachement car il von tous les 2 dans le on exit
on exit

NWScript :
//:: ////
//:: Update Lylver 2006-02-05
//:: nouvelle fonction qui remplace NoPlayerInArea
//:: => NbPlayerorDMInArea
//:: Lylver 2005-09-13
//:: pour TN Bouchon II
//:: Lylver 2005-04-28
//:: nouvelle fonction de test PJ dans zone
//:: Lylver 2005-01-15
//:: OnExit Area
//:: GC et gestion des groupes de PJs
//:: Lylver 2005-02-07
//:: ly_onexit_area.nss

#include "ly_lib_area"
void main() {
  object oPC = GetExitingObject() ;
  string sArea = GetTag(OBJECT_SELF) ;
  int bInteractive = GetIsPC(oPC) || GetIsDM(oPC) || GetIsDMPossessed(oPC) ;
  if( bInteractive ){ ExecuteScript("ly_onexit_loop",OBJECT_SELF); } // sous-fonction pour le GC
  else { // traitement des PNJs qui sortent de leur zone a la poursuite des PJs ou
  // par ceux qui patrouillent hors de vue des joueurs : duree de vie 180 secondes
      if( GetIsEncounterCreature(oPC) && !GetIsObjectValid(GetMaster(oPC)) ){
      /* if( NoPlayerInArea(OBJECT_SELF) ){
            SetLocalInt(oPC,"DESTROY& amp;amp; quot;,180) ; // au cas ou la difference serait necessaire
        } else {
            SetLocalInt(oPC,"DESTROY& amp;amp; quot;,180) ;
        }      */

        SetLocalInt(oPC,"DESTROY",180) ;
        WriteTimestampedLogEntry("Zone "+sArea+" OnExit : "+GetName(oPC)+" marked for destroy") ;
      }
      return ;
  }
}
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.


et boucle d'attachement

NWScript :
//Confused//
//:: Update Lylver 2006-02-05
//:: nouvelle fonction qui remplace NoPlayerInArea
//:: => NbPlayerorDMInArea
//:: Lylver 2005-09-13
//:: pour TN Bouchon II
//:: Lylver 2005-04-28
//:: nouvelle fonction de test PJ dans zone
//:: Lylver 2005-01-15
//:: OnExit Area
//:: Activation du GC : boucle d'attachement
//:: ly_onexit_loop.nss

#include "ly_lib_area"
void main()
{
  object oMod = GetModule() ;
  object oArea = OBJECT_SELF ;
  string sArea = GetTag(oArea) ;
  int nPJ;
  int CleanQ = GetLocalInt(oMod,"CLEANQ" + sArea) ;
  int CleanR = GetLocalInt(oMod,"CLEANR" + sArea) ;
  int CleanP = GetLocalInt(oMod,"CLEANP") ;
  if( CleanQ > 0 ){ // GC should be here
      if( GetLocalObject(oMod,"CLEANQ") == oArea ){ // GC ici : suppression de demande surnumeraire
        DeleteLocalInt(oMod,"CLEANR" + sArea) ; // reset a neutre
        if( GetLocalObject(oMod,"CLEANR") == oArea ){
            DeleteLocalObject(oMod,"CLEANR") ; // free GC [espere operation atomique]
        }
        // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop : "+sArea+" GC here : cancelling outnumbered request") ;
      } else { // cas d'erreur
        DeleteLocalInt(oMod,"CLEANQ" + sArea) ;
        // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop : "+sArea+" found area counter without object, resetting.") ;
      }
      return ; // GC is busy on our zone or repaired mismatch
  }
  if( CleanR < 0 ){ // traite l'annulation demandee
      DeleteLocalInt(oMod,"CLEANR" + sArea) ; // reset a neutre
      if( GetLocalObject(oMod,"CLEANR") == oArea ){
        DeleteLocalObject(oMod,"CLEANR") ; // free GC [espere operation atomique]
      }
      // SendMessageToPC(GetExitingObje ct(), "OnExit : GC called but ordered stop : " + sArea) ;
      CleanR = 0 ; // poursuit, test PJ plus loin
  }
  if( CleanR == 0 ){ // etat standard
//      nPJ = CheckPJInArea(OBJECT_SELF) ; fonction NoPlayerInArea 5* plus rapide
      if( NbPlayerorDMInArea(oArea) == 0){ // controle
        // raz variable de statut
        if( GetLocalInt(oArea,"PC_HERE") == 1) DeleteLocalInt(oArea,"PC_HERE") ;
//        if( nPJ &amp;gt; 0 ) WriteTimestampedLogEntry(" ; ;Erreur : GC OnExitLoop Resultat CheckPJ et NoPlayer different");
      } else {
        // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop : PJ here, no hooking") ;
        return ; // pas de hooking : il y a du monde
      }
  }
  if( CleanR > 0 ){ // je suis deja passe ou alors un deuxieme PJ vient de sortir
      if( NbPlayerorDMInArea(oArea) == 0 ){ // controle
        // raz variable de statut
        if( GetLocalInt(oArea,"PC_HERE") == 1) DeleteLocalInt(oArea,"PC_HERE") ;
      } else { // stop ! : quelqu'un est la, pas besoin de nettoyer
        DeleteLocalInt(oMod,"CLEANR" + sArea) ; // reset a neutre
        if( GetLocalObject(oMod,"CLEANR") == oArea ){
            DeleteLocalObject(oMod,"CLEANR") ; // free GC [espere operation atomique]
        }
        // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop Stop Other Hooking") ;
        return ; // stop other running hooking : il y a du monde
      }
  }
  // Warning : overload
  if( CleanR > 300 ) WriteTimestampedLogEntry("Warning : GC OnExitLoop Slow Hooking") ;
  // hooking, ajout de prioritisation
  if( (GetLocalObject(oMod,"CLEANR") == OBJECT_INVALID) && (CleanR >= CleanP) ){ // semaphore vide
      SetLocalObject(oMod,"CLEANR", oArea) ; // signal GC [espere operation atomique]
      // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop "+sArea+" Hooking") ;
      return ; // yes I'm hooked !
  }
  if( GetLocalObject(oMod,"CLEANR") == oArea ){ // semaphore pris par moi-meme
      // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop "+sArea+" already hooked") ;
      return ; // yes I've been hooked !
  }
  // semaphore pas libre, increment compteur : accelere GC
  SetLocalInt(oMod,"CLEANR" + sArea,++CleanR) ;
  if( CleanR > CleanP ) SetLocalInt(oMod,"CLEANP",CleanR) ; // monte la priorite a soi-meme
  // pour prendre une option
  // WriteTimestampedLogEntry(" ; ;Warning : GC OnExitLoop "+sArea+" nb "+IntToString(CleanR)+&am p;amp;qu ot; Hooking failed : recheck in 6 secondes") ;
  // SendMessageToAllDMs("OnEx it : GC called : " + sArea + IntToString(CleanR)) ;
  DelayCommand(6.0,ExecuteScript("ly_onexit_loop", oArea)) ; // recheck in 6 seconds
}
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.


pourriez vous les compiler ensemble svp
merci d'avance
 
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 46.211ms