Les vampires

Répondre
Partager Rechercher
Salut

je cherche le moyen de créer des vampires qui une fois mort se transformeraient en brume et retourneraient dans leurs cercueil comme dans HOTU

Seul problème sur la zone d'HOTU que j'ai recopié et ou ça se passe ya tellement de choses que j'arrive pas à trouver ce dont j'ai besoin.

Quelqu'un l'a déjà fait et sait comment on fait ?

D'avance merci
Oui, j'ai fait ca pour mon module. Tu peux aussi prendre en modèle les script de NWN et suivre les indices

En gros : Tu as une créature "vampire" Dans le OnDeath, elle fait apparaître une créature "Vampire Mist". Cette créature est globalement invulnérable à tout, et n'a qu'un script qui l'oblige a bouger jusqu'a un sarcophage. Une fois arrivée, elle disparait, et fait ré-apparaître la créature vampire à côté du cercueil.

La difficulté dans ce système c'est d'affiner si tu veux faire tout de manière automatique tout en voulant que le vampire de départ soit un PNJ particulier.

Quand la créature Mist apparaît, elle prend le ResRef de Vampire en LocalString, ce qui lui permettra de recréer ce vampire là. Si le ResRef est standart, ben tu auras un vampire standart.
Tu peux affiner en faisant tomber les objets du vampire mort au sol, et en detruisant les objets du vampire quand il est recrée (il revient donc à poil).
Pour que la Mist trouve le cercueil, tu le Tag de sorte à ce qu'il soit particulier à ton vampire. Par exemple en prenant le tag du vampire comme tag du cercueil + un préfixe.
La mist irra donc à la destination CER_+Tag_du_createur par ex.
Il est conseillé aussi de rendre les cercueil destructible et de donner quelques xp lors de sa destruction.

Voilà, je pense que avec ca tu devrais y arriver.
Une méthode sûre est de mettre le cercueil correspondant en variable locale de type "object", sur le vampire et au moment où celui-ci apparaît. Une fois mort, la variable locale sera transmise au "Vampire mist", et pourra être définie plus tard comme la destination à rejoindre.

Petites lignes à rajouter dans l'évènement "OnSpawn" du vampire :
Code PHP:

object oCercueil GetNearestObjectByTag("TagDuCercueil");
 
SetLocalObject(OBJECT_SELF,"CERCUEIL",oCercueil); 
Petites lignes à rajouter dans l'évènement "OnDeath" du vampire :
Code PHP:

 location lLocation GetLocation(OBJECT_SELF);
 
object oVampireMist CreateObject(OBJECT_TYPE_CREATURE,"resref_du_vampire_mist",lLocation);
 
object oCercueil GetLocalObject(OBJECT_SELF,"CERCUEIL");
 
SetLocalObject(oVampireMist,"CERCUEIL",oCercueil); 
euh en fait je parlais de l'autre systême, celui des moines du culte avec les pieus en bois et tout et tout.


C'est celui là que je souhaite exploiter si possible mais ça a l'air un peu différent

Avec celui plus haut, j'arrive pas à faire apparaitre pour l'instant la créature myst avec un autre vampire que celui de base, meme en metant le bon script dans le on death.

Désolé, je débute un peu pour tout ça

si vous pouviez à nouveau éclairer ma lanterne

Enfin merci pour les tuyaux précédent qui m'ont permis de commencer quelque chose

EDIT : n'ayant surement pas tout pour le faire tourner, je n'arrive pas à faire aller le vampire dans le bon cercueil avec la première methode. En rajoutant les lignes dans les scripts ça a pas l'air de changer grand chose

j'ai oublié de préciser, je suis une quiche
Aaah il fallait le dire que tu étais une quiche. ^^

Dans ce cas, il y a tout ce qu'il faut pour débuter en tête de file de ce forum. Moult liens et autres tutoriels attendent qu'on y prête attention, et qu'on s'y attarde.

Sans te demander de créer une IA d'ici trois jours, apprends au moins le dialecte cru et sauvage du script, afin que l'on puisse parler dans une langue commune.
Bon en fait j'ai rien dit ça marche. C'etait juste un pb de resref.

J'ai quand meme reparcouru les tutauriaux au passage et je comprendrais à mon niveau ce que vous dites (c'etait déjà à peu près le cas^^)

Donc la phase un c'est bon.


La j'aimerais que la forme gazeuse soit passe muraille pour mettre les cercueils derrière des portes secretes.

c'est possible ?

comment dois-je m'y prendre ?
Passe muraille ? C'est pas trop compliqué, mais chiant à mettre en place si tu veux le faire pour plein de créatures.
En gros devant ta porte tu mets un trigger qui teleporte la créature de l'autre côté (destination un WP par ex) quand elle y rentre. Si c'est une autre créature qui entre dans le Trigger il ne se passe rien.
Tu peux aussi mettre ta créature immaterielle (en plus).
bon ce script là marche nikel pour le passe muraille mais uniquement sur un PNJ normal :

Code:
void main() 
{ 
object oVamp = GetEnteringObject(); 
object oTarget = GetObjectByTag("mc_jump",0); 

 if (GetTag(oVamp) == "ZEP_NPCKING") 
  { 
   AssignCommand(oVamp, JumpToObject(oTarget)); 
  } 
}
en cherchant un peu j'ai trouvé ce qui le fait bloquer, le onspawn de mon ombre qui permet de recréer un vampire :



Code:
void main() 
{ 
    // * search for nearest coffin 
    int bFound = FALSE; 
    int nCount = 0; 
    while (bFound == FALSE) 
    { 
        object oCoffin = GetObjectByTag(GetTag(OBJECT_SELF),nCount); 
        nCount++; 
        if (GetIsObjectValid(oCoffin) && (GetObjectType(oCoffin) == OBJECT_TYPE_PLACEABLE)) 
        { 
            bFound = TRUE; 
            ActionMoveToObject(oCoffin, FALSE, 3.0);    //* moving this number too close will make this break 
            ActionDoCommand(SignalEvent(OBJECT_SELF, EventUserDefined(7777))); 
            SetCommandable(FALSE); 
        } 
        else 
        // * if no coffin then destroy self 
        if (GetIsObjectValid(oCoffin) == FALSE) 
        { 
            bFound = TRUE; 
            DestroyObject(OBJECT_SELF, 0.1); 
        } 
    } 
}

donc mon problème maintenant c'est de changer ce script on spawn pour qu'il permette à l'ombre d'emprunter le trigger car à priori c'est ce script qui l'en empeche. En mettant un onspawn par defaut il y arrive tranquilou

Voilà, si quelqu'un trouve c un genie, moi ça fait deux trois jour que je suis dessus et rien à faire
Déja pour ton premier script je te conseille de faire ca :
Code PHP:

void main() 

object oVamp GetEnteringObject(); 
string sWpTag GetLocalString(OBJECT_SELF,"WP_TARGET");
object oTarget GetObjectByTag(sWpTag);
string sTag =  GetLocalString(OBJECT_SELF,"CREATURE");

 if (
GetTag(oVamp) == sTag
  { 
   
AssignCommand(oVampJumpToObject(oTarget)); 
  } 

Ca t'eviteras d'avoir de multiples scripts, et 1 seul suffira pour tous tes trigger. Ensuite tu mets 2 variables en string sur ton trigger, une nommée WP_TARGET pour la destination, une autre nommée CREATURE pour le tag de la créature qui doit le déclencher.

Pour ton 2eme script, je pense que c'est parce que ta créature a un ordre d'action sur elle. Donc comme tu donne un 2eme assignCommand à ta créature quand elle entre dans le trigger, celle-ci se place dans la queue de ses actions, afin d'être executée après la fin de l'autre. Et comme l'autre ne se termine pas vu que la créature n'atteint pas le coffin, la tienne ne s'execute pas.

Essaye en mettant un ClearAllActions dans ton premier script avant le AssignCommand, et redonne lui l'ordre d'aller à son coffin.
En fait j'avais déjà testé de diverses façons et avec un Clearallactions qui n'avait rien donné.

Ta methode n'a pas l'air de marcher non plus.

Bref entre temps j'ai détourné le problème et en améliorant mon script pour le rendre utilisable partout sur tes conseils voilà ce que ça donne


Code PHP:

void main()
{
object oVamp GetEnteringObject();
object oTarget GetObjectByTag(GetLocalString(OBJECT_SELF,"WP_TARGET"));
string sTag GetLocalString(OBJECT_SELF,"CREATURE");
location Loc1 GetLocation (oTarget);
 
if (
GetTag(oVamp) == sTag)
{
    
string oResvamp GetLocalString(oVamp"NW_L_MYCREATOR");
    
DestroyObject(oVamp0.5);
    
CreateObject (OBJECT_TYPE_CREATUREoResvampLoc1FALSE);
}


Là en fait le script detruit l'ombre et la remplace par un vampire de l'autre coté du mur (sa destination). Le rendu est le meme car le joueur n'y verra que du feu et ça marche.

Si on cherche à créer l'ombre, elle est detruite auto car ne reconnait plus le cercueil donc j'ai préféré recréer le vampire
Répondre

Connectés sur ce fil

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