Disparition de montre...

Répondre
Partager Rechercher
Je pense pas, justement je te donne les noms des fonctions, l'idéal serait que tu essayes de te débrouiller un peu toi-meme. Pour info, en détail, avec DestroyObject le script doit donner :

Code PHP:

void main()
{
    
DestroyObject(OBJECT_SELF);

moi ce qui m'aide le plus c'est qu'on me donne le script ou une partie, je l'analyse et hop du coup j'apprend bc plus vite

j'ai que 2 semaines de prog, j'ai encore du chemain devant moi avant de me taper un jeu d'echec
Telecharge le Lexicon mis a jour si tu l as pas c super utile

Sinon, le fonction DestroyObject est tres explicite ( principe du langage objet en général ) et demande un objet.

Si tu lui rentre un Tag, elle va pas être contente. Il est donc logique de lui donner l objet associé au Tag

Pour ca tu utilise la fonction GetObjectByTag
__________________
http://ctprofiles.net/303223 http://membres.lycos.fr/caarheim/PA.gifhttp://membres.lycos.fr/caarheim/buff.gif @2.29 de vitesse ... PAN PAN dans le ...
La j'ai mis ça :

Code PHP:

//::///////////////////////////////////////////////
//:: NW_O2_SKELETON.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
   Turns the placeable into a skeleton
   if a player comes near enough.
*/
//:://////////////////////////////////////////////
//:: Created By:   Brent
//:: Created On:   January 17, 2002
//:://////////////////////////////////////////////
void ActionCreate(string sCreaturelocation lLoc)
{
    
CreateObject(OBJECT_TYPE_CREATUREsCreaturelLoc);
}
void main()
{
   
object oCreature GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
   if (
GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0)
   {
    
effect eMind EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
    
string sCreature "Tag créature créer";
    
location lLoc GetLocation(OBJECT_SELF);
    
DelayCommand(0.3ActionCreate(sCreaturelLoc));
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeMindGetLocation(OBJECT_SELF));
    
SetPlotFlag(OBJECT_SELFFALSE);
    
DestroyObject(OBJECT_SELF0.5);
    
DestroyObject(GetObjectByTag("Tag créature a faire disparaitre"));
   }

Quand le Pj touche un objet, il disparai et créer un monstre, je veu de plus qu'il fasse disparaitre un autre monstre que j'ai placé, c'est pourquoi j'ai rajouté la dernière ligne.
Et cela ne marche pas la créature n eveu pas disparaitre.
Il faut bien regarder ce que fait chaque fonction. L'éditeur de script d'aurora permet de retrouver facilement une fonction et donne l'utilisation.

Tapez "destroy" dans le filtre en haut à droite.
Code PHP:

// Destroy oObject (irrevocably).
// This will not work on modules and areas.
void DestroyObject(object oDestroyfloat fDelay=0.0f
Cela montre bien que la fonction s'applique sur une variable object et non une variable string comme un TAG.

Il faut donc trouver une autre fonction capable de retrouver la variable object qui renvera le monstre. Le TAG est en fait une bonne solution mais ce n'est pô la seule mais essayons tout de même.


Tapez "TAG" dans le filtre.
Nous avons ainsi GetTag mais cette fonction va nous donner la variable string du TAG d'un object. Le TAG nous l'avons déjà, c'est la fonction inverse qu'il nous faut.
Code PHP:

// Get the nNth object with the specified tag.
// - sTag
// - nNth: the nth object with this tag may be requested
// * Returns OBJECT_INVALID if the object cannot be found.
// Note: The module cannot be retrieved by GetObjectByTag(), use GetModule() instead.
object GetObjectByTag(string sTagint nNth=0
GetObjectByTag semble être la meilleure solution car nous recherchons bel et bien un object, nous voyons bien d'ailleurs la déclaration au début de la ligne:
object GetObjectByTag(string sTag, int nNth=0)


Dans chacune de ces deux fonctions (DestroyObject et GetObjectByTag), nous pouvons nous permettre de ne pas renseigner les variables float fDelay et int nNth, respectivement pour DestroyObject et GetObjectByTag.

Pourquoi? Nous pouvons voir dans la définition de chaque fonction que ces variables sont suivies de "=valeurquelconque", ce qui veut dire qu'elles ont une valeur par défaut.
Si on n'a pas besoin de ces variables dans nos fonctions, il suffit de taper notre script comme si ces variables float fDelay et int nNth n'existaient pas.
Code PHP:

DestroyObject(object oDestroy

Les fonctions présentées dans la description comporte toujours le type de variable demandée.
Par exemple dans la fonction GetObjectByTag:
string sTag

Nous n'avez pas à mettre "string" dans la fonction quand vous taper votre script, cela sert seulement à déclarer la variable mais cela est inutile car la fonction sait déjà quel type de variable elle a besoin.


Le filtre permet certe de retrouver la description d'une fonction mais une fois que vous avez rentré la fonction dans votre script, vous pouvez faire un double-clic directement dans votre script pour en avoir la description, ainsi on est pô obligé de passer par le filtre.


Pas à pas:
Pour construire la ligne de script, on rentre la fonction DestroyObject (ne mettez pas void au début). Le plus pratique est de double-cliquer sur la fonction dans la colonne de droite:
Code PHP:

DestroyObject 

Ensuite on met la parenthèse bien entendu et comme je l'ai dit, ne mettez pas object, la fonction sait qu'elle a besoin d'un object et par la même nous aussi:
Code PHP:

DestroyObject
Notre variable object sera donc la fonction GetObjectByTag:
Code PHP:

DestroyObject(GetObjectByTag 

Nous reste à mettre une parenthèse puis le TAG entre guillemets. Sans les guillemets, le script chercherait une variable appelée TAG. Il nous faut donc mettre les guillemets pour indiquer que c'est une valeur directe et non une variable:
Code PHP:

DestroyObject(GetObjectByTag("TAG" 

Nous fermons la parenthèse pour GetObjectByTag, une autre pour DestroyObject. Bien entendu, en fermant directement les fonctions à ce moment, nous n'utiliserons pas les variables float fDelay et int nNth qui nous sont inutiles:
Code PHP:

DestroyObject(GetObjectByTag("TAG")) 

Et enfin et surtout, surtout, pensez bien à mettre ";" pour indiquer que le ligne est terminée. Si vous ne mettez pas ça, le script ne va pas compiler et vous allez très souvent chercher l'erreur ailleurs en vain, ne pensant pas que ça puisse venir d'aussi peu de chose en réalité
Code PHP:

DestroyObject(GetObjectByTag("TAG")); 


Dans un certaine mesure, nous pouvons faire la même chose sur plusieurs lignes:
Code PHP:

string sTagMonstre "TAG";
object oMonstre GetObjectByTag(sTagMonstre);
DestroyObject(oMonstre); 

Voilà, c'était un petit tut qui n'est pô vraiment un tutorial script mais plutôt un toturial pour montrer comment utiliser l'éditeur de script d'aurora à son avantage et comprendre la nuance qu'il y a entre la définition de la fonction et son utilisation dans un script.
Cela dit en passant Ambrosis, je conçois très bien que la plupart des choses dites dans ce tut te soient acquises (comme les double-cliques, t'as surement déjà du t'en rendre compte).
C'est juste au cas où une personne plus mauvaise que nous verait ce sujet, ça pourrait lui être utile

Bon script à tous
Vérifie si le Tag de la creature a detruire est bien le Tag car tu a l'air de confondre tag et resref

sinon essaye ca
Code PHP:

//::///////////////////////////////////////////////
//:: NW_O2_SKELETON.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
   Turns the placeable into a skeleton
   if a player comes near enough.
*/
//:://////////////////////////////////////////////
//:: Created By:   Brent
//:: Created On:   January 17, 2002
//:://////////////////////////////////////////////
void ActionCreate(string sCreaturelocation lLoc)
{
    
CreateObject(OBJECT_TYPE_CREATUREsCreaturelLoc);
}
void main()
{
   
object oCreature GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
   if (
GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0)
   {
    
effect eMind EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
    
string sCreature "resref créature créer";
    
location lLoc GetLocation(OBJECT_SELF);
    
DelayCommand(0.3ActionCreate(sCreaturelLoc));
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeMindGetLocation(OBJECT_SELF));
    
SetPlotFlag(OBJECT_SELFFALSE);
    
DestroyObject(OBJECT_SELF0.5);
    
DestroyObject(GetNearestObjectByTag("Tag créature a faire disparaitre"));
   }

Bon je donne d'autre info car c peu etre a cause du fait que la créature a faire disparaitre ai un script pour quelle reste en jeu en tant que créature morte.
Car ca ne marche toujour pas.
Tu pige plus quoi, ce que je vien de dire ?
- La créature que je veu faire disparaitre, je lui ai mis un script, celui ci est un script pour que la créature reste en jeu quand elle est morte, elle est d'ailleur morte !
Post
J'ai testé le script, il marche, il faut juste que la case
"static" ou "statique" (selon ta version du jeu) de ta créature à faire disparaitre soit décoché.
Oui il marche mai pas quand je rajoute ce script dans le OnSpawn de la créature :

Code PHP:

void main()
{
ActionDoCommand(SetIsDestroyable(FALSE));
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),OBJECT_SELF));

et maheureusement je veu le laisser.
NWNLexicon au sujet de la fonction SetIsDestroyable

"If you set an object to be undestroyable (which according to the
documentation only affects what happens upon death) the object will also be unaffected by DestroyObject. It is therefore important to only set
SetIsDestroyable(False) at the moment of the object's death. "


En gros ça veut dire que si on définit un object comme non destructible comme tu le fais dans ton OnSpawn, il n'est pas affecté par la fonction DestroyObject. Il est conseillé de n'affecter SetIsDestroyable(False) qu'au moment de la mort de l'objet.

Bon d'accord la traduction est un peu approximative mais c'est ça.
Post
J'ai trouvé :

Mettre ce script dans l'évenement OnUserDefined
de ta créature à faire disparaitre
Code PHP:

void main()
{
     switch(
GetUserDefinedEventNumber())
    {
        case 
1234:
        {
            
SetIsDestroyable(TRUE);
            
DestroyObject(OBJECT_SELF);
        }
        break;
     }

Modifier le script comme ci-dessous :
Code PHP:

void ActionCreate(string sCreaturelocation lLoc)
{
    
CreateObject(OBJECT_TYPE_CREATUREsCreaturelLoc);
}
void main()
{
   
event eSpecialEvent EventUserDefined(1234);  // déclaration d'un évènement personnalisé
   
object oCreature GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
   if (
GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0)
   {
    
effect eMind EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
    
string sCreature "resref créature créer";
    
location lLoc GetLocation(OBJECT_SELF);
    
DelayCommand(0.3ActionCreate(sCreaturelLoc));
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeMindGetLocation(OBJECT_SELF));
    
SetPlotFlag(OBJECT_SELFFALSE);
    
DestroyObject(OBJECT_SELF0.5);
    
SignalEvent(GetNearestObjectByTag("Tag créature a faire disparaitre"), eSpecialEvent); // on appelle l'évenement de l'objet
   
}

Post
Désolé, mais moi cela marche très bien, je ne vois pas pourquoi cela ne marcherais pas pour toi, voilà comment j'ai mis en scène la situation :

Créature morte :

script dans le OnSpawn :

Code PHP:

void main()
{
ActionDoCommand(SetIsDestroyable(FALSE));
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),OBJECT_SELF));

script dans le OnUserDefined :

Code PHP:

void main()
{
     switch(
GetUserDefinedEventNumber())
    {
        case 
1234:
        {
            
SetIsDestroyable(TRUE);
            
DestroyObject(OBJECT_SELF);
        }
        break;
     }

Tas d'os :

script dans le OnHeartbeat ou dans le OnUsed selon le cas :

Code PHP:

void ActionCreate(string sCreaturelocation lLoc)
{
    
CreateObject(OBJECT_TYPE_CREATUREsCreaturelLoc);
}
void main()
{
   
event eSpecialEvent EventUserDefined(1234);  // déclaration d'un évènement personnalisé
   
object oCreature GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
   if (
GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0)
   {
    
effect eMind EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
    
string sCreature "resref créature créer"//chez moi cela créé un squelette
    
location lLoc GetLocation(OBJECT_SELF);
    
DelayCommand(0.3ActionCreate(sCreaturelLoc));
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTeMindGetLocation(OBJECT_SELF));
    
SetPlotFlag(OBJECT_SELFFALSE);
    
DestroyObject(OBJECT_SELF0.5);
    
SignalEvent(GetNearestObjectByTag("Tag créature a faire disparaitre"), eSpecialEvent); // on appelle l'évenement de l'objet
   
}

EDIT : Si cela ne marche pas chez toi, je pense que soi tu as fait quelquechose de travers soi il manque un élément pour te répondre que tu aurais oublié de dire. Avec tous les éléments donnés ci-dessus et depuis le début de ce topic, tu devrais pouvoir t'en sortir.

:baille:
Répondre

Connectés sur ce fil

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