[script] EffectSummonCreature()

Répondre
Partager Rechercher
Bonjour a tous.

Tout d'abord je tiens a m'excusez si cette question a déjà été posé, mais j'ai parcouru les 6 premieres pages du forum sans trouver de réponse.

Donc ma question est comment utilisé la fonction EffectSummonCreature() a partir d'un objet ?

Je m'explique, je désire créé un objet, qui ai comme pouvoir unique d'invoquer un chat (tag "dede").

Donc j'ai utilisé le script pour le pouvoir unique proposer sur ce forum.
Après ca tout se complique, j'ai essayer divers trucs avec cette fonction, mais aucune ne fonctionne....

Si vous pouviez m'aider ?

D'avance merci
comme dit dans le premier message, le script est utilisé sur le onactivated (ou un truc du genre, désolé) d'un objet dont le tage est "dede2". Le nom du script est "dede2".

le ResRef de la créature est "test_dede2".

pour le script le voici :

Citation :
//////////////////////////////////////
//:: Nom : dede2
/////////////////////////////////////
void main()
{
//Designe le dernier joueur qui a activé un objet
object oPC = GetItemActivator();
//designe le dernier item qui a été activé
object oItem = GetItemActivated();
//Designe la cible de l'effet
object oTarget = GetItemActivatedTarget();
//Designe l'endroit d'activation (si c'est un point et non une créature ou un objet)
location lLoc = GetItemActivatedTargetLocation()

//Effet
effect eSummon = EffectSummonCreature("test_dede2", VFX_NONE, 0.0f);
//Fin d'Effet
}
le problème est que ça ne fait strictement rien, comme si il n'y avait pas de script sur l'item.

J'espere que c'est un peu plus clair
Et bien en fait, ton effet a été déclaré, mais pas appliqué. Il faut pour cela utiliser la fonction "ApplyEffectAtLocation()". Ensuite je te conseille de faire une vérification du Tag de l'item, car un script placé dans l'évènement "OnItemActivated" fonctionne de manière générique (il se lance quelque soit l'item activé)

Qui plus est, il y a une manière d'appliquer un effet d'invocation. Le support du script DOIT être le maître de l'invocation. Pour ce faire, il va falloir créer un script indépendant (que j'ai appelé ici "invoc_dede2"), qui sera lancé sur le joueur activant l'item, et permettant l'invocation

Script placé dans l'évènement "OnItemActivated" :
Code PHP:

void main()
{
    
// Désigne le dernier joueur qui a activé un objet
    
object oPC GetItemActivator();

    
// Désigne le dernier item qui a été activé,
    
object oItem GetItemActivated();

    
// Désigne la cible de l'effet, sans utilité ici, excepté si
    // un item activable doit désigner une cible.
    //object oTarget = GetItemActivatedTarget();

    // Designe l'endroit d'activation, sans utilité ici, excepté si
    // un item activable doit désigner un endroit.
    //location lLoc = GetItemActivatedTargetLocation()

    // Vérification du Tag de l'item. Dans ce cas, si le tag est
    // "dede2", alors on invoque le chatounet.
    
if(GetTag(oItem)=="dede2")
    {
        
// La ligne suivante me sert à contrôler si tout se passe bien.
        // je l'ai commentée, à toi de la dé-commenter pour vérifier.
        //SendMessageToPC(oPC,"Activation de l'item 'dede2'.");

        // Dans le cas d'une invocation, le maître de l'invocation
        // DOIT être le "support" du script. Pour ce faire, on lance
        // le script d'invocation sur le joueur.
        
ExecuteScript("invoc_dede2",oPC);
    }

Et le script d'invocation "invoc_dede2" :
Code PHP:

void main()
{
    
// La ligne suivante me sert à contrôler si tout se passe bien.
    // je l'ai commentée, à toi de la dé-commenter pour vérifier.
    //SendMessageToPC(OBJECT_SELF,"Lancement du script 'invoc_dede2'.");

    // Déclaration de l'effet
    // Dans ce cas, si les deux paramètres de fin correspondent
    // aux paramètres par défaut, il est inutile de les préciser.
    
effect eSummon EffectSummonCreature("test_dede2");

    
// On définit un endroit d'invocation. Ici, le plus approprié
    // est l'endroit où se trouve le joueur.
    // Ici, le joueur sera "OBJECT_SELF", vu que c'est sur lui
    // que le script aura été lancé.
    
location lLocation GetLocation(OBJECT_SELF);

    
// Application de l'effet.
    // * Nécessite un type de durée
    // * Nécessite une durée dans le cas où le type de durée est "temporaire".
    // Ici, j'ai appliqué l'effet de manière temporaire, et pour 60 secondes.
    
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eSummon,lLocation,60.0);

Hmm là c'est différent. Mais il te faudra une base dans le OnItemActivated quoi qu'il advienne. Pour le système en question, il s'agit du système "TagBased Script". En gros un script portant le même nom que le tag de l'item est lancé.

Pour faire un tout petit script qui shématise simplement la chose, ton "OnItemActivated" fait office de sélecteur de script, en fonction du Tag détecté, de la même manière que le script ci-dessous. Comme il faut bien lancer le script sur quelque chose, le module est choisi par défaut (ce n'est pas ce qu'il y a de mieux, mais ça peut être modifié) :
Code PHP:

void main
{
    
ExecuteScript(GetModule(),GetTag(GetItemActivated()));

Bon là c'est vraiment simplifié au strict minimum. Mais le principe y est. À partir de là, il suffit de créer le script correspondant à l'item (et qui porte le même nom que le Tag). Toujours pour shématiser, ce script fera office d'extension au script du "OnItemActivated", portant les mêmes commandes, et tout et tout :
Code PHP:

void main
{
    
object oItem GetItemActivated();
    
object oActivator GetItemActivator();
    
// Etc etc...

Le premier avantage réside dans le fait que tu n'as aucun risque de déclencher l'effet d'un autre item activable. Et le deuxième avantage est que quand tu commences à comprendre le système, tu peux le paramétrer "à mort" (TM), pour en faire quelque chose d'assez performant et moyennement complexe.
Impecable, ça marche. Je te remercie pour tes explications et ta patience

juste pour les autres, voila ce que j'ai rajouter dans le script de "OnItemActivated"

Citation :
void main()
{
object oItem = GetItemActivated();
object oPC = GetItemActivator();
string sTag = GetTag(oItem);

//....
if(sTag == "dede2")
{
ExecuteScript("dede2", oPC);
}
Par contre nouveau problème

ce compagnon animal, ne bouge pas, ne répond pas aux ordres : suivre.....

voila, quelqu'un savait quel set de script il faut mettre a la créature pour quel réagisse comme un compagnon animal, ce serait sympa.

D'ici la je continu a chercher

Encor merci
Alors je peux me tromper, mais je pense que :

Evènement "OnBlocked" : nw_ch_ace

Evènement "OnCombatRoundEnd" : nw_ch_ac3

Evènement "OnConversation" : nw_ch_ac4

Evènement "OnDamaged" : nw_ch_ac6

Evènement "OnDeath" : nw_ch_ac7

Evènement "OnDisturbed" : nw_ch_ac8

Evènement "OnHeartBeat" : nw_ch_ac1

Evènement "OnPerception" : nw_ch_ac2

Evènement "OnPhysicalAttacked" : nw_ch_ac5

Evènement "OnRested" : nw_ch_aca

Evènement "OnSpawn" : nw_ch_summon9

Evènement "OnSpellCastAt" : nw_ch_acb

Evènement "OnUserDefined" : nw_ch_acd
Répondre

Connectés sur ce fil

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