Eboueur, ... oui mais un peu trop

Répondre
Partager Rechercher
j'ai trouvé ce script dans le forum a mettre sur le OnExit d'une zone :

Code PHP:

int GetIsPCInArea (object oArea)

{

 
object oIntru GetFirstObjectInArea(oArea);

 while(
GetIsObjectValid(oIntru))

 {

  if(
GetIsPC(oIntru))

  {

   return 
TRUE;

  }

  
oIntru GetNextObjectInArea(oArea);

 }

 return 
FALSE;

}



void main()

{

 
object oArea OBJECT_SELF;

 if(!
GetIsPCInArea(oArea))

 {

  
object oIntru GetFirstObjectInArea(oArea);

  
//Tant que l'objet est un item valide

  
while(GetIsObjectValid(oIntru))

  {

   if(
GetObjectType(oIntru) == OBJECT_TYPE_ITEM)

   {

    
DestroyObject(oIntru);

   }

   
oIntru GetNextObjectInArea(oArea);

  }

 }


et il marche parfaitement bien, meme un peu trop : lorsque je prends un objet dans un coffre, je le mets dans mon inventaire, puis je pars. j'ouvre mon inventaire mais l'objet que je viens de mettre n'y est plus !! comment cela se fait il ? (en sachant que je n'ai pas changé de zone) !!

merci pour votre aide
Selon moi ça ne devrait pas arriver, tu l'as bien mis dans le OnExit de la zone ?
Au pire, voici le script corrigé qui ne devrait plus poser de problème dans le cas d'un objet dans l'inventaire d'un PJ (mais je doute sincèrement que ce soit la cause....)

Code PHP:

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

void main()
{
  
object oArea OBJECT_SELF;
  if(!
GetIsPCInArea(oArea))
 {
  
object oIntru GetFirstObjectInArea(oArea);
  
//Tant que l'objet est un item valide
  
while(GetIsObjectValid(oIntru) && !GetIsPC(GetItemPossessor(oIntru)))
  {
    if(
GetObjectType(oIntru) == OBJECT_TYPE_ITEM)
   {
    
DestroyObject(oIntru);
   }
   
oIntru GetNextObjectInArea(oArea);
  }
 }


Si jamais tu es intéressé, voici la version que j'utilise, un peu plus spécifique il est vrai:

Code PHP:

int GetIsPCInArea (object oArea)
{
 
object oIntru GetFirstObjectInArea(oArea);
 while(
GetIsObjectValid(oIntru))
 {
  if(
GetIsPC(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(oIntruActionRest());
       
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectHeal(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:
    // break;
    
default:
     break;
   }
   
oIntru GetNextObjectInArea(oArea);
  }
 }

alors, le probleme pour l'inventaire est réglé mais j'en ai un autre : il ne vire pas les drops des monstres tués ! (j'utilisele 2eme que tu m'a proposé)

edit : idem pour le 1er script corrigé !
Les drops des monstres tués, c'est un item ou un placeable (genre un sac) ?

Parce que si c'est un placeable, c'est normal, ils ne sont pas supprimés par mon script (j'utilise des corps lootables avec inventaire qui disparaissent au bout de 2 minutes, donc ça ne m'est pas nécessaire).

Le problème si tu supprimes tous les placeables d'une zone, c'est que tu risques de supprimer aussi des éléments du décor

Si les drops du monstres apparaissent sous forme de sa, le mieux est que tu décommentes ces lignes dans le 2e scripte, que tu les écrives comme ceci, en remplaçant "TagSac" par le Tag de ton sac de drops:

Code PHP:

case OBJECT_TYPE_PLACEABLE:
 if(
GetTag(oIntru) == "TagSac")
 {
  
DestroyObject(oIntru);
 }
 break; 
hem, voila ce que j'ai fait et ca va tjr pas ! j'ai décommenté la ligne indiquée en mettant ce qu'Archamedes m'a dit et ca ne fonctionne tjr pas ! en tout cas ca compile mais je l'ai peut etre mal placé !

Code PHP:

int GetIsPCInArea (object oArea)
{
 
object oIntru GetFirstObjectInArea(oArea);
 while(
GetIsObjectValid(oIntru))
 {
  if(
GetIsPC(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(oIntruActionRest());
       
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectHeal(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_STORE:
    
DestroyObject(oIntru);
    break;
    
// break;
    
default:
     break;
   }
   
oIntru GetNextObjectInArea(oArea);
  }
 } 
Citation :
en fait ce sont les sacs par défaut ! ont-ils un tag précis ? tous les sacs de monstres différents ont-ils le meme tag ??
Oui ils ont un tag par défaut: dans Objets Plaçables Générique/Contenants et leviers/Sacs (LootBag1 à LootBag6)


Voilà le code à insérer:

Code PHP:

case OBJECT_TYPE_PLACEABLE:
 
int nN 1;
 for(
nN 1nN 6nN++)
 { 
  if(
GetTag(oIntru) == "LootBag"+IntToString(nN))
  {
   
DestroyObject(oIntru);
  }
 }
 break; 
bah donc voila le script que ca donne

Code PHP:

int GetIsPCInArea (object oArea)
{
 
object oIntru GetFirstObjectInArea(oArea);
 while(
GetIsObjectValid(oIntru))
 {
  if(
GetIsPC(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(oIntruActionRest());
       
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectHeal(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 1nN 6nN++)
 {
  if(
GetTag(oIntru) == "LootBag"+IntToString(nN))
  {
   
DestroyObject(oIntru);
  }
 }
 break;
   }
   
oIntru GetNextObjectInArea(oArea);
  }
 }

et ca ne fonctionne tjr pas ! c'est bien a placer dans le OnExit de la zone ??? pas de la zone de transition !!
Euh ça ne compile pas le script que tu as fait, ça ne peut pas fonctionner c'est clair.

Demande exactement TOUT ce que tu veux que le script fasse (et ne fasse pas); et quand tu veux qu'il agisse. Et je vais te mettre une version "copier/coller" ça sera plus facile.
ah bon ! moi ca compile ^^

bref en fait j'aimerai qu'une fois tous les pjs sortis d'une zone, l'eboueurs vire les drops des monstres et les dechets que des pj auraient laissé. il ne faut pas qu'il detruise les placables ni ce qu'on trouve dans les coffres.

voila

merci d'avance
Le script fait ça, à condition que les drops de tes monstres ne soient pas des plaçables justement.
Si c'est le cas, il me faut leur TAG, le script ne peut pas effacer ce qu'il ne peut pas identifier
Bah le tag, c'est ce que je t'ai dit avant, ce sont les modele tresor par defaut, les petits sacs !!

donc j'ai placé le code que tu m'a donné !

maintenant c peut etre aussi la mise en place : j'ai créé un module test sans rien ! j'ai mis un seul script dans le onexit des 2 zones que j'ai fait , mis 2-3 coffres et une dizaine de gobelins (pour avoir quelques sacs) et les sacs ne disparaissent pas !

maintenant j'ai été sur un autre forum où il me disait autre chose (ca fonctionne pas non plus mais je te le copie quand meme au cas ou)

Citation :
C'est normale, puisque la définition de GetIsPCInArea montre qu'on ne cherche que les joueurs, pas les monstres!



Code PHP:

int GetIsPCInArea (object oArea

object oIntru GetFirstObjectInArea(oArea); 
while(
GetIsObjectValid(oIntru)) 

//la il vérifie si c est un joueur 
  
if(GetIsPC(oIntru)) 
  { 
  return 
TRUE
  } 
  
oIntru GetNextObjectInArea(oArea); 
//si non il zappe et en cherche un autre 

return 
FALSE


Donc il suffit surement (mais pas sûr) de modifier ce passage.
En le remplaçant par :

Code PHP:

int GetIsPCInArea (object oArea

object oIntru GetFirstObjectInArea(oArea); 
while(
GetIsObjectValid(oIntru)) 

  return 
TRUE;  
  
oIntru GetNextObjectInArea(oArea); 

return 
FALSE

ça devrait tourner.
A confirmer tout de même, j'ai pas regarder en détail...
Ils sont gentils sur le forum où tu as été, mais ils feraient bien de lire tout le code

La fonction est utilisée en début de script pour vérifier si la zone qu'on quitte contient encore des PJ ou non.
Si ce n'est pas le cas (le ! devant indique: SI la condition est FAUSSE), alors le script s'exécuté; donc dans ce cas-ci:

SI il n'y a PAS de PJ dans la zone, alors....

Cette condition n'a rien à voir avec les "monstres", vu qu'elle ne sert que de condition de déclenchement du script éboueur.



**Concernant les sacs je vais tester un module avec ce genre de drop moi-même, et voir si ça marche ou pas.
Après tests, le sac droppé par les créatures Bioware est un PLACEABLE qui possède le Tag: BodyBag.
Objet qui n'existe pas dans la palette, et dont l'apparition est bien entendu, "Hardcoded".
Je n'ai pas trouvé le moyen de les détruire, même en mettant leur TAG, ou encore en jouant avec "SetIsDestroyable"... le DestroyObject ne marche pas.
C'est possible que j'ai oublié un truc ou que je m'y suis mal pris.

Je ne peux te conseiller que d'utiliser un script rendant les corps "lootables", avec lequel il est plus facile d'utiliser un tel script.

Encore désolé de n'avoir pas pu trouver de solution pour ton module.
peut etre vas tu pouvoir quand meme m'aider :

j'utilise un autre eboueur mais qui foire apparemment : dans le OnUnacquireItem du mod :

Code PHP:

/*
    s_unacquireitem - example script for incorporation into OnUnAcquireitem
*/

#include "i_tagtests"

void main()
{

object oItem GetModuleItemLost();

DelayCommand(200.0ExecuteScript("eboueurs"oItem));

if (
GetIsNoDrop(oItem)) {

    
object oLostBy GetLocalObject(oItem"ND_OWNER");

    if (
GetIsObjectValid(oLostBy))
        
ExecuteScript("s_nodrop_drop"oLostBy);

}


et comme script execute "eboueur"

Code PHP:

void main()
{
if(
GetIsPC(GetItemPossessor(OBJECT_SELF))==FALSE)
{
DestroyObject(OBJECT_SELF);
}


voila il allait et je suis passé a Sou et il va plus !!

un petit médecin pour me guérir ce script ?

et pour le lootable , je dois personnalisé tout mes monstres ou c juste un "petit" script a mettre qq part ?
Je ne vais m'occuper que de la partie eboueur de ce que tu me présentes, la partie "NoDrop" comporte pas mal d'inconnues (l'include et le 2e script exécuté)....

D'après ce que je peux voir de ce script, lorsqu'un item est laché par un PJ, au bout de 200 secondes, il est détruit, sauf s'il est possédé par un PJ.....

Je ne pense pas que ce soit très efficace comme éboueur, pour plusieurs raisons:

- Il ne détruit que les objets quittant l'inventaire d'un PJ.
- Il ne détruit pas les objets stackables (comme les munitions, les potions, etc) ou encore l'or (le OnUnAcquireItem ne se déclenche pas dans ces deux cas).


La seule chose que je peux te proposer, c'est d'utiliser des scripts de corps lootable (cela nécessite l'import de 3 scripts et la création d'un placeable dans la palette de ton module); et d'utiliser le même script que moi.
Je te dis ce qu'il fait exactement, tu pourras voir si ça t'intéresse:

// Le script de corps "lootable" (qui est celui utilisé par le HCR mais totalement indépendant du système):
*Chaque monstre/PNJ mort reste sur le sol durant X minutes (paramétrable)
*Il est possible de fouiller leur inventaire
*Il est possible de régler des tas de paramètres afin de personnaliser le système (il faut comprendre un peu l'anglais par contre).


// Le script "eboueur":
* Il ne s'enclenche que lorsqu'il n'y a plus de PJ ou MD dans la zone.
* Le script supprime:
- Tous les items sur le sol qui ne sont pas des items de quête.
- Toutes les créatures qui ne sont pas en combat et qui proviennent d'une rencontre.
* Après tests, ça ne pose pas de problème avec les items contenus dans les coffres ou les divers inventaires.
* Il faut absolument utiliser un script de "corps lootable" sur les Monstres/PNJ (à exécuter dans le script OnDeath), parce que cet éboueur n'est pas prévu pour effacer les "sacs de drops" Bioware.


L'installation de tout ça n'est pas trop compliquée, je peux faire un autre post à ce sujet si il faut.
et tant que j'y suis je pose une question dans la coontinuité :

n'ayant pas de lootable corpse, j'utilise un script qui fait spawner et respawn un objet précis (quete) de l'inventaire d'un monstre.

si j'utilise le lootable corpse, je suppose que je devrai retirer ce script sinon ca va mettre son inventaire (contenant l'objet) + spawner l'objet ???
Code PHP:

Drops de monstres 

Script à mettre dans le OnSpawn du monstre
PHP:



//:://///////////////////////////////////////////// 

//:: OnSpawnMonstreDrop 

//:: Copyright (c) 2001 Bioware Corp. 

//::////////////////////////////////////////////// 

/* 

Systeme de drop d'item pour les monstres. 

Ce script est a placer dans le OnSpawn du monstre 

en question. 

Utilisation : 

Placer les items que l'on veut faire dropper 

dans l'inventaire du monstre en question. 

Son tag doit etre de la forme "n_resref", ou "n" 

est le pourcentage de chance de drop de l'item et 

"resref" le resref de l'item en question. 

*/ 

//::////////////////////////////////////////////// 

//:: Created By: Thalion, beta et modifs par Mercius 

//:: Created On: 12/05/2003 18:54 

//::////////////////////////////////////////////// 

#include "NW_I0_GENERIC" 

void main() 



    
object oItem GetFirstItemInInventory(OBJECT_SELF); 

    
int iNbItem 0

    
string sTagProba

    while(
GetIsObjectValid(oItem))//boucle... 

    


        
iNbItem++; 

        
sTagProba GetTag(oItem); 

        
//on prend la partie droite de l'item, le resref 

        
SetLocalString(OBJECT_SELF,"item" IntToString(iNbItem), GetStringRight(sTagProbaGetStringLength(sTagProba) - FindSubString(sTagProba,"_"))); 

        
//on prend la partie gauche de l'item, le pourcentage de chance 

        
SetLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem), StringToInt(GetStringLeft(sTagProbaFindSubString(sTagProba,"_")))); 

        
//on detruit l'item 

        
DestroyObject(oItem); 

        
oItem GetNextItemInInventory(OBJECT_SELF); 

    } 


    if(
iNbItem 0

    { 

        
int i

        for(
1;<= iNbItem;i++) 

        { 

            
//on calcule avec le pourcentage pour savoir si l'item doit apparaitre ou pas 

            
if(d100() <= GetLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem))) 

            { 

                
//on cree l'item 

                
CreateItemOnObject(GetLocalString(OBJECT_SELF,"item" IntToString(iNbItem))); 

            } 

            
//on supprime les flags 

            
DeleteLocalString(OBJECT_SELF,"item" IntToString(iNbItem)); 

            
DeleteLocalInt(OBJECT_SELF,"proba" IntToString(iNbItem)); 

        } 

    } 



    
AssignCommand(OBJECT_SELF,ActionEquipMostDamagingRanged()); //equipe la meilleur arme a distance et s'il n'y en a pas la meilleur arme de corp a corp 

    
AssignCommand(OBJECT_SELF,ActionEquipMostEffectiveArmor()); 

    
AssignCommand(OBJECT_SELF,ActionRandomWalk()); 

}





Ce script suivant est à mettre dans le OnDeath du monstre
PHP:



//:://///////////////////////////////////////////// 

//:: OnDeathMonstreDrop 

//:: Copyright (c) 2001 Bioware Corp. 

//::////////////////////////////////////////////// 

/* 

Systeme de drop d'item pour les monstres. 

Ce script est a placer dans le OnDeath du monstre 

en question. 

Utilisation : 

Placer les items que l'on veut faire dropper 

dans l'inventaire du monstre en question. 

Son tag doit etre de la forme "n_resref", ou "n" 

est le pourcentage de chance de drop de l'item et 

"resref" le resref de l'item en question. 

*/ 

//::////////////////////////////////////////////// 

//:: Created By: Thalion, beta et modifs par Mercius 

//:: Created On: 12/05/2003 19:04 

//::////////////////////////////////////////////// 

#include "NW_I0_GENERIC" 

//fonction "Drop" 

void Drop(object oMstr



    
object oItem GetFirstItemInInventory(oMstr); 

    
location oLoc GetLocation(oMstr); 

    while(
oItem != OBJECT_INVALID)//boucle... 

    


        
//on cree l'item a l'endroit de la mort (possiblite pour un DelayCommdand 

        //si l'on ne veut pas que l'item apparaisse tout de suite) 

        
CreateObject(GetObjectType(oItem), GetResRef(oItem), oLoc); 

        
DestroyObject(oItem); 

        
oItem GetNextItemInInventory(oMstr); 

    } 




void main() 



    
//application de la fonction au monstre qui possede ce script 

    
Drop(OBJECT_SELF); 

    
//RESTE DU SCRIPT SUR LE OnDeath DU MONSTRE// 

    
int nClass GetLevelByClass(CLASS_TYPE_COMMONER); 

    
int nAlign GetAlignmentGoodEvil(OBJECT_SELF); 

    if(
nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) 

    { 

        
object oKiller GetLastKiller(); 

        
AdjustAlignment(oKillerALIGNMENT_EVIL5); 

    } 


    
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK); 

    
//Shout Attack my target, only works with the On Spawn In setup 

    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK); 

    if(
GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) 

    { 

        
SignalEvent(OBJECT_SELFEventUserDefined(1007)); 

    } 


euh j'ai chargé le lootable corpse et je me retrouve avec 4 scripts ! y en a t'il un que je dois mettre dans les event du module ? je traduis petit a petit le "mode d'emploi" inséré dans les scripts mais je veux juste demander ça
Le script principal doit se lancer dans le OnDeath des créatures (donc tu ajoutes une ligne ExecuteScript blablabla au script nw_c2_default7 de ton module). Donc, vraiment très simple.

Les 3 autres scripts doivent de placer dans le OnOpen, OnClose et OnDeath de l'objet invisible de la palette (je présume qu'il y a un modèle inclu dans un fichier ERF qui le fera à ta place, tu auras juste à importer le modèle)


**Concernant le script que tu m'as mis, si tu as SoU ce script est inutile, car SoU intégre un système de gestion de trésor aléatoire selon les créatures. (tu peux aller lire la doc dans l'include x0_i0_treasure).
En gros cela te permet de gérer l'apparition de drops aléatoires d'une créature en créant un coffre possédant son tag, et en le remplissant des objets que tu veux que la créature ait une chance de dropper. Le coffre devant être placé dans une zone inaccessible du module. Tu peux faire ça pour tous tes monstres, ou même pour les races, ou encore les coffres de ton module.
ah ok ! mais bon si je mets un objet dans l'inventaire du monstres, celui sera dans le corps je suppose ? (donc la aussi plus besoin du script !)

euh, en script je suis pas une bete, donc l'execute je sais ce que tu veux dire mais c pas la joie quand meme ! vais te mettre le script comme je pense qu'il doit etre et dit moi si je me goure ou pas
bon voici ce que j'ai fais
Code PHP:

//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
  Default OnDeath event handler for NPCs.

  Adjusts killer's alignment if appropriate and
  alerts allies to our death.
 */
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////

#include "x0_i0_spawncond"

void main()
{
//definition d'un objet mais lequel ?  l'objet invisible ?

//object oCorpse = GetObjectByTag ("invis_corpse_obj");  //si objet invisible !

    
int nClass GetLevelByClass(CLASS_TYPE_COMMONER);
    
int nAlign GetAlignmentGoodEvil(OBJECT_SELF);

    
// If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    
if(nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        
object oKiller GetLastKiller();
        
AdjustAlignment(oKillerALIGNMENT_EVIL5);
    }

    
// Call to allies to let them know we're dead
    
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK);

    
//Shout Attack my target, only works with the On Spawn In setup
    
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);

    
// NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
         
SignalEvent(OBJECT_SELFEventUserDefined(1007));
    }
    
//execution du script ici ? ou plus haut ?
    //{
    //ExecuteScript("hc_inc_npccorpse", oCorpse);  // vu le nom du script, c'est pas plutot un include ?
  // }

__________________
MD de l'île de Cristal, monde persistant RP inspiré du Cycle de Pendragon.
IP server : 65.94.233.226:5121
Adresse site : http://www.iledecristal.fr.st
Répondre

Connectés sur ce fil

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