Voui, jusqu'à la restitution de l'objet... Il me paraît difficile de créer un item avec un Tag, non ? En plus, je ne comprends pas pourquoi tu rends l'objet, il faut le mettre sur le cadavre du joueur (PC ou NPC, c'est l'intérêt
).
C'est pour ça que j'en refais un autre. Ton optimisation avait pour but de résoudre certains problèmes, dont le FLagStolen, non ? Il faut donc restructurer complètement, et mettre le flg stolen après la détection du voleur, sinon ... Ton garde sautera sur n'importe quel objet volé, gros problème sur ATS par exemple, et non négligeable. Ou alors tu intègres une variable mais je n'y crois pas trop, il vaut mieux supprimer l'objet et en recréer un neuf...
De plus, le OnAcquire item ne sert à rien : quand il acquière l'item, il l'a déjà volé. En voilà un neuf, qui me semble plus pratique. A toi de voir.
C'est dans le but de résoudre tes problèmes, donc si tu ne veux pas d'aide, dis le, j'ai un script sur les éclairs, un autre sur les marchands et un troisième sur le journal à faire... *snif*
////////////////////////////////////////////////////
// "Un garde qui detecte le vol" By Ange Musicien //
////////////////////////////////////////////////////
void main()
{
object oSelf = OBJECT_SELF;
location lSelf = GetLocation(oSelf);
object oVoleur = GetFirstObjectInShape(SHAPE_SPHERE,10.0,lSelf,FALSE,OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oVoleur))
//Demande le reperage si le garde est valide
{
int nAction = GetCurrentAction(oVoleur);
if(nAction == ACTION_PICKPOCKET)
// Uniquement si l'action courrante est le vol
{
int nDetection = GetSkillRank(SKILL_SPOT,oSelf);
int nVol = GetSkillRank(SKILL_PICK_POCKET,oVoleur);
if(nVol+d20(1)<nDetection+d20(1))
// Uniquement si le voleur est vu.
{
ActionSpeakString("Au voleur !");
SetIsTemporaryEnemy(oVoleur,oSelf,FALSE);
ActionAttack(oVoleur,FALSE);
//Attaque le voleur
int nTestmort = GetIsDead(oVoleur);
// Verifie que le voleur est mort
if(nTestmort==TRUE)
{
object oVole = GetFirstItemInInventory(oVoleur);
int nTestvole = GetStolenFlag(oVole);
//Recherche les objets voles
while(nTestvole == TRUE && GetIsObjectValid(oVole))
{
string sResRef = GetResRef(oVole);
location lVoleur = GetLocation(oVoleur);
DestroyObject(oVole,0.0);
CreateObject(OBJECT_TYPE_ITEM,sResRef,lVoleur,FALSE);
// Les remplaces pour qu'il ne soient pas affiches
// comme voles.
}
}
}
}
}
}
On peut le mettre dans le OnHeartBeat, en le répétant 12 fois par HeartBeat(ce qui demande d'enlever les boucles), ou dans le OnSpawn (ce quiserait plus logique).