JeuxOnLineForumsPlusConnectés : 300 (sites) | 538 (forums)Créer un compte
Neverwinter Nights 2
La Tour des Arcanes
Répondre
Partager Outils Rechercher
HiPPiaS
Duc / Duchesse
 

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

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.
Lien direct vers le message - Vieux
Avatar de Mythyzyn
JOL Mythyzyn
Alpha & Oméga
 
Avatar de Mythyzyn
 
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 ^^
Lien direct vers le message - Vieux
Avatar de Mythyzyn
JOL Mythyzyn
Alpha & Oméga
 
Avatar de Mythyzyn
 
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"); 

Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
Citation:
Envoyé 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:
Envoyé 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:
Envoyé 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. ^^
Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
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...
Lien direct vers le message - Vieux
Avatar de Mythyzyn
JOL Mythyzyn
Alpha & Oméga
 
Avatar de Mythyzyn
 
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));

Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
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.
Lien direct vers le message - Vieux
Avatar de Mythyzyn
JOL Mythyzyn
Alpha & Oméga
 
Avatar de Mythyzyn
 
oPLC fait référence à un objet, ça peut être autre chose qu'un PLC

Après c'est une fonction de Lyncya, il faut éventuellement l'adapter à ton contexte
Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
Plop,

Pareil avec le point SEF. Le soucis semble vraiment provenir du point d'attachement des objets équipables.
Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
C'est finis,

Voici ce que ça donne.
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : IMG_24102015_021843.png
Affichages : 37
Taille : 1,66 Mo
ID : 255523  

Dernière modification par HiPPiaS ; 24/10/2015 à 11h29.
Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
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.
Lien direct vers le message - Vieux
Avatar de Mythyzyn
JOL Mythyzyn
Alpha & Oméga
 
Avatar de Mythyzyn
 
Bravo ! Le rendu est sympa en plus

Désolé de pas avoir pu plus aider mais c'est pas vraiment mon domaine la 3D etc...
Lien direct vers le message - Vieux
Avatar de Perouk'
Perouk'
Duc
 
Avatar de Perouk'
 
Super !
Bientôt les pipes aussi ?

Rug'
Lien direct vers le message - Vieux
HiPPiaS
Duc / Duchesse
 
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 !!! ^^
Lien direct vers le message - Vieux
Répondre

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +1. Il est actuellement 03h54.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite