[Effets visuels] Appliquer et retirer un effet à une cuillère

Répondre
Partager Rechercher
Bonjour,

Voici un petit moment que j'essaie de résoudre un problème avec un item.

L'item en question est une cigarette que j'ai créé sous forme de cuillère. Je voudrais appliquer dessus un effet de fumée que j'ai récupérer sur le net (merci Tchos !) que j'ai renommé "el_fx_cigarette" pour l'occasion.

Quel est le problème ?
Si je met l'effet dans les propriétés de l'objet, celui-ci s'applique bien, mais reste à stagner en l'air une fois l'item retiré.

Les choses tentées.
J'ai essayé d'utiliser la fonction "ApplyEffectToObject" pour appliquer l'effet lorsqu'on équipe l'item (en définissant un SpellID) et la fonction "RemoveEffectsFromSpell" en le retirant.

Voici le script lorsque j'équipe :
Code:
void main()
{
    object oPC   = GetPCItemLastEquippedBy();       // The player who equipped the item
    object oItem = GetPCItemLastEquipped();         // The item that was equipped
    float fDelay = 10.0f;                                            // Time before Destruction of object.
    
     //effect to apply with custom SpellId
     effect eVFX = SetEffectSpellId(EffectNWN2SpecialEffectFile("el_fx_cigarette",oItem),2602);
              
     eVFX = SupernaturalEffect(eVFX);                // No magical effect         
         
     AssignCommand(oItem, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oPC, fDelay)); //Apply VFX
}
Le script lorsque je déséquipe :
Code:
#include "nw_i0_spells"

void main()
{
object oPC   = GetPCItemLastUnequippedBy();       // The player who equipped the item
object oItem = GetPCItemLastUnequipped();

RemoveEffectsFromSpell(oItem, 2602);

}
Malgré cela, l'effet reste toujours. J'ai essayé en remplaçant le oItem ci-dessus par oPC sans succés.

Quelqu'un est-il déjà parvenu à supprimé un effet sur un objet ?
Je commence à douter de la faisabilité de ceci.

Merci de m'avoir lu...

Dernière modification par HiPPiaS ; 07/10/2015 à 12h52.
Salut Hippias

Oui ce genre de chose fonctionne, par contre les effets gérés par script ne peuvent que être mis par script.

Si tu mets un effet directement sur le blueprint en éditeur, tu ne pourras pas l'enlever par script ensuite.

---

Est ce que ces 2 scripts compilent ?

Dans le premier il manque les // devant un commentaire

//effect to apply with custom SpellId
effect eVFX = SetEffectSpellId(EffectNWN2SpecialEffectFile("el_fx_cigarette",oItem),2602);

---

Aussi, est ce que tu utilises des includes particulières ?

La fonction RemoveEffectsFromSpell ne semble pas exister sur un nouveau module dans l'éditeur

---

AssignCommand(oItem, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oPC, fDelay)); //Apply VFX

Tu indiques à l'objet de mettre l'effet visuel sur le personnage

RemoveEffectsFromSpell(oItem, 2602);

Par contre tu enlèves l'effet sur l'objet mais pas sur le joueur


Voilà j'espère que ça t'aidera, sympa l'idée de la clope dans le jeu en tout cas ^^
Tu peux essayer ça éventuellement :

(en mettant comme tag à l'objet : hip_clope)

Code PHP:

void main()
{
    
object oPC   GetPCItemLastEquippedBy();
    
object oItem GetPCItemLastEquipped();    
    
    if (
GetTag(oItem) == "hip_clope")
     {
      
effect eEffect EffectNWN2SpecialEffectFile("el_fx_cigarette"oItem);      
      
ApplyEffectToObject(DURATION_TYPE_PERMANENTeEffectoItem);
     }
   
    
SendMessageToPC(oPC"Check Equip"); 

Citation :
Publié par Mythyzyn
Dans le premier il manque les // devant un commentaire

//effect to apply with custom SpellId
En effet, j'ai merdé en faisant le copier-coller.

Citation :
Publié par Mythyzyn
La fonction RemoveEffectsFromSpell ne semble pas exister sur un nouveau module dans l'éditeur
Exact, j'utilise l'include #include "nw_i0_spells".

Citation :
Publié par Mythyzyn
AssignCommand(oItem, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oPC, fDelay)); //Apply VFX
Je pensais que c'était l'inverse, qu'on assignait la commande à l'objet et non au PJ.

J'ai déjà du tester le script que tu m'as donné, mais dans le doute, je le referai.

Merci du coup de main. :-)

Edit : J'ai corrigé mes oublis dans mes scripts, que personne cherche à utiliser un truc faux. ^^
Hello,

J'ai testé hier soir. C'est bien ce qu'il me semblait.

Cette fonction ne fonctionne pas.
Code PHP:

ApplyEffectToObject(DURATION_TYPE_PERMANENTeEffectoItem); 

Du coup, nous sommes obligés de mettre l'effet sur le joueur (oPC). Jusque là, rien d'alarmant, sauf que le point d'attachement RIGHT_HAND de l'effet (1 dans le .sef) ne fonctionne pas, l'effet est systématiquement appliqué au point d'attachement FOREHEAD. Impossible donc d'attribuer l'effet à la main droite.
J'ai également essayé d'ajouter des HookPoint (comme pour les épées) à mon modèle. Même problème.

Suite à cette désillusion, je me suis mis à explorer une autre piste : Les effets visuels via les propriétés d'objet. Celles-ci ont l'avantage de ne pas rester lorsqu'on déséquipe l'objet.
D'origine, nous n'en avons que 7 (Acid, Electricity,...), j'ai donc ajouter un 8e appelé "smoke" dans iprvisualeffects.2da.
Il apparaît bien dans la liste des effets visuels des propriétés d'objet. Il me reste à trouver où on déclare la ref de l'effet vers laquelle la ligne du iprvisualeffects.2da pointe.

Si vous avez des infos, n'hésitez pas à partager. Je vous tiens au jus de toute façon...
Il manquait peut être l'extension de l'effet :

effect eEffect = EffectNWN2SpecialEffectFile("el_fx_cigarette.sef", oItem);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oItem);

Quand on utilise EffectNWN2SpecialEffectFile pour un effet non intégré au jeu, il faut lui donner le fichier en entier de mémoire, j'avais oublié ce détail

---
Exemple qui fonctionne :

Code PHP:

void DJ14_FireRayEffect(object oPLCobject oTargetfloat fDelay)
{
 
effect e EffectNWN2SpecialEffectFile("sp_lighting_ray_fire.sef"oTarget);
 
AssignCommand(oTargetApplyEffectToObject(DURATION_TYPE_TEMPORARYeoPLCfDelay));

C'est un effet appliquer à un objet ?

Parce qu'il y a le oPLC dans ApplyEffectToObject(DURATION_TYPE_TEMPORARY, e, oPLC, fDelay)

Edit : Effet sur un Placeable je pense.
En l'absence de solution, j'ai contourné le problème. La cigarette se portera à la bouche.
J'utilise un item transparent de cuillère à la main pour pouvoir équiper et retirer la cigarette facilement.

Le tag de l'objet est "smoke_cigarette".

Voici les scripts utilisés :

A l'équipement i_smoke_cigarette_eq
Code:
#include "inc_acme"void main()
{
    object oPC      = GetPCItemLastEquippedBy();
    object oItem    = GetPCItemLastEquipped();
    float fDuration = 300.0f;

    //effect to apply with custom SpellId
    effect eVFX = SetEffectSpellId(EffectNWN2SpecialEffectFile(VFXbyRaceGender("el_fx_cigarette",oPC),oPC),2602);
    eVFX = SupernaturalEffect(eVFX);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oPC, fDuration);

     DestroyObject(oItem,300.00);                  // Détruit la cigarette.
      // SendMessageToPC(oPC, "Script Ok");}


Au déséquipement
i_smoke_cigarette_ue
Code:
#include "nw_i0_spells"

void main()
{
            object oPC    = GetPCItemLastUnequippedBy();    // The player who unequipped the item
            object oItem  = GetPCItemLastUnequipped();        // Item déséquippé

            RemoveEffectsFromSpell(oPC, 2602);                // ID in Spells.2da of the effect to remove
            DestroyObject(oItem,0.01);                        // Détruit la cigarette.}
J'utilise également un script modifié ACME pour récupérer le genre du PJ en plus de la race. D'où l'include inc_acme et le VFXbyRaceGender("el_fx_cigarette",oPC).


Merci pour votre aide.

Dernière modification par HiPPiaS ; 24/10/2015 à 11h29.
Merci Perouk',

Les pipes seraient sympa aussi en effet. Je suis passé sur autre chose pour le moment, il y a une bonne liste de suggestions intéressantes à traiter.

Mais, je te promets, je m'occupe de ça juste avant la prothèse de jambe Hin !!! ^^
Répondre

Connectés sur ce fil

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