La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 22/11/2024 22:46:10
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
Salut a tous, je demande une fois de plus votre aide pour la simple et bonne raison que je ne maîtrie absolument pas les effets visuels ...
Je m'explique, je doit créer un baton qui quand on l'active créé un effets visuel autour du perso (2 en fait : Visage spectral et globe d'invulnérabilité mineure). Or, j'ai deux problèmes : Je ne connais pas les noms des effets visuels et je n'arrive pas a les mettre sur le perso, voici ce que j'ai essayé : Dans le OnActivatedItem, du module : NWScript :
#include "x2_inc_switches" void main() { object oItem = GetItemActivated(); string sTag = GetTag(oItem); object oPc = GetItemActivator(); effect eEff1 = EffectVisualEffect(VFX_DUR_???); effect eEff2 = EffectVisualEffect(VFX_DUR_???); if(sTag == "BATON_AFK") { if(GetLocalInt(oPc, "AFK") == FALSE) { SetLocalInt(oPc, "AFK", TRUE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff1, oPc); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff2, oPc); } else { SetLocalInt(oPc, "AFK", FALSE); effect eEff = GetFirstEffect(oPc); while( GetIsEffectValid(eEff) == TRUE) { if(eEff == eEff1 || eEff == eEff2) RemoveEffect(oPc, eEff); eEff = GetNextEffect(oPc); } } } } Merci d'avance _________________ Nouveau PC trop bien d'la balle ! |
Revenir en haut | |
ballestolive Ecuyer Messages: 64 Localisation: A 35 KM Sud de Paris. |
Il est vrai qu'un bon baton AFK est toujours utile, mais DSL je ne suis pas scripteurs.
Tu aura certainement une réponse d'ici peu, il y a tant de bon scripteurs qui passe ici. Si cela fonctionne je te demanderai l'autorisation de l'utiliser aussi... _________________ Coordinateur du projet LanceDragon VF un module pour NWN2. [http] |
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Visage spectral : VFX_DUR_ETHEREAL_VISAGE
Globe d'invulnérabilité : VFX_DUR_GLOBE_INVULNERABILITY J'ai tapé Ethe pour spectral, et globe pour le globe, cherche un peu Bon pour ton script, je vais être franc je vois pas d'erreur, néanmoins verifie ça : - Tag de ton ITEM, est-il vraiment bien écrit. - Enleve les conditions (les variables) et test donc sans, pour au moins si des effets s'applique quand l'objet est utilisé. Ensuite remet tes variables si ça marche. Si ça marche pas, fait un script via le OnUsed d'un panneau par exemple, et fait plusieurs tests, ensuite t'auras juste à copier coller _________________ [http] |
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
Gimli> peux tu changer la taille de l'image dans ta signature conformément aux règles du forum? ([http]
Citation : Vous avez tout à fait le droit d'utiliser des images dans votre signature cependant celles-ci doivent avoir une largeur maximale de 200 pixels et une hauteur maximale de 55 pixels. De plus, ces images ne doivent pas dépasser un certain poids (comprenez: le nombre d'octets composant l'image) : ce poids se limite à 8 Ko pour tout type. _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
Premièrement merci pour votre aide,
Ensuite pour visage spectral, je pensaisr que l'effet visuel que tu me propose était celui de visage éthéré mais après réflexion, ça doit être le même donc effectivement je vais prendre celui-ci. Je vais retester mon script selon ta tachnique, je n'y avais pas pensé. PS : Image supprimée. _________________ Nouveau PC trop bien d'la balle ! |
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
|
Revenir en haut | |
Anthraxcite Légende vivante Messages: 372 Localisation: Belgique |
Faut faire une boucle pour supprimer les effets de types visuels, c'est le seul moyen actuellement.
|
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
C'est bien là mon problème, j'effectue bien une boucle ...
Peut-être que je ne met pas les bonnes conditions mais tout me parait bon ... J'ai vérifié les variables, ça marche bien, 1ère fois : activation et 2nde fois désactivation donc l'erreur ne peut venir que de la boucle ... _________________ Nouveau PC trop bien d'la balle ! |
Revenir en haut | |
-MeteZ- Seigneur Messages: 205 Localisation: Région Parisienne (95) |
J'ai regardé le script mais je n'ai pas nwn pour tester là. Essaye de mettre le bloc de la condition if comme ceci :
NWScript :
while( GetIsEffectValid(eEff) == TRUE) { if(eEff == eEff1 || eEff == eEff2) { RemoveEffect(oPc, eEff); } eEff = GetNextEffect(oPc); } Car je sais pas si nwscript "comprend" qu'il faut procéder qu'à la ligne suivant la condition si le bloc { } n'est pas précisé. Mais s'il ne le comprenais pas ça donne une boucle infinie (peut être que nwn la casse) enfin bon ... peut être que |
Revenir en haut | |
Anthraxcite Légende vivante Messages: 372 Localisation: Belgique |
Il le comprend très bien mais créer une variable de type effet et la comparer avec une variable effectivement récupérée dans le jeu, il ne le fera pas. Pour celà qu'il faut enlever tous les effets visuels, à moins que tu n'aies la fonction permettant de connaitre chacune des particularités de l'effet.(GetEffectInteger) Voici la méthode(pas l'éditeur sous la main donc erreurs possibles) pour supprimer tous les effets de type visuel :
NWScript :
effect eEffect = GetFirstEffect(oPC); while(GetIsEffectValid(eEffect)) { if(GetEffectType(eEffect)==EFFECT_TYPE_VISUALEFFECT) { RemoveEffect(oPc, eEffect); } eEffect = GetNextEffect(oPC); } Edit : Ha ben tiens on est dans la biblio binaire de nwn2(ça porte le même nom que celle de nwn1 non ?) donc je vais tenter de te donner la réponse pour enlever un effet visuel en particulier(en fait les deux que tu demandes) : NWScript : effect eEffect = GetFirstEffect(oPC); while(GetIsEffectValid(eEffect)) { if(GetEffectType(eEffect)==EFFECT_TYPE_VISUALEFFECT && (GetEffectInteger(eEffect,1)==VFX_DUR_ETHEREAL_VISAGE || GetEffectInteger(eEffect,1)==VFX_DUR_GLOBE_INVULNERABILITY)) { RemoveEffect(oPc, eEffect); } eEffect = GetNextEffect(oPC); } |
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
|
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Bon alors, on va proceder par logique, je te propose quelques solutions:
En mode AFK, le joueur n'a plus d'effet rien, etc... il ne joue pas donc. Cette solution marchera à coup sur, si ton module ne donne pas un effet que le joueur doit toujours porter. Bon, je vois que dans ton script, tu as mis les 2 effets en permanent. Dans ce cas la, il y a un script permettant d'enlever tous les effets par rapport à leur nDuration. À ce momment la tu supprimes tous les effets permanents: NWScript :
void main() { effect eEffect = GetFirstEffect(oPC); while(GetIsEffectValid(eEffect)) { if(GetEffectDurationType(eEffect)==DURATION_TYPE_PERMANENT) { RemoveEffect(oPC, eEffect); } eEffect = GetNextEffect(oPC); } } Sinon je verrais pour te completer ça quand j'aurais fini le download de quelque chose, car la j'en ais besoin. Je me rappel que il y a une library avec les effets je crois, enfin je sais plus ou j'ai vu ça, mais j'en suis sur à 100% EDIT: Ah voila ! J'ai trouvé une fonction. normalement, ça devrait marcher. Il faut placer "x0_i0_petrify" dans ton script, et tu as la fonction : RemoveEffectOfType(object oPC, object nEffect) à savoir que grâce a cette fonction, tu enleves l'EFFECT_TYPE que tu veux. Etant donner que VFX_* est un effect visuel, tu mets ça: NWScript : void main() { effect eEffect = GetFirstEffect(oPC); RemoveEffectOfType(oPC, EFFECT_TYPE_VISUALEFFECT); } _________________ [http] |
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
|
Revenir en haut | |
Gimli_Oakenshield Novice Messages: 18 Localisation: Devant mon écran |
Voici le script final il fonctionne très bien (tout du moin pour l'instant ^^) Merci a vous !
NWScript : #include "x2_inc_switches" void main() { object oItem = GetItemActivated(); string sTag = GetTag(oItem); object oPc = GetItemActivator(); int iEffType = EFFECT_TYPE_VISUALEFFECT; int iEff1 = VFX_DUR_ETHEREAL_VISAGE; int iEff2 = VFX_DUR_GLOBE_INVULNERABILITY; effect eEff1 = EffectVisualEffect(iEff1); effect eEff2 = EffectVisualEffect(iEff2); if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE) { SetUserDefinedItemEventNumber(X2_ITEM_EVENT_ACTIVATE); int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oItem),OBJECT_SELF); if (nRet == X2_EXECUTE_SCRIPT_END) { return; } } if(sTag == "BATON_AFK") { if(GetLocalInt(oPc, "AFK") == FALSE) { SetLocalInt(oPc, "AFK", TRUE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff1, oPc); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff2, oPc); } else { SetLocalInt(oPc, "AFK", FALSE); effect eEff = GetFirstEffect(oPc); while( GetIsEffectValid(eEff) == TRUE) { //SendMessageToPC(oPc, IntToString(GetEffectInteger(e Eff,1))); /*if(GetEffectInteger(eEff,1)= =iEff1 || GetEffectInteger(eEff,1)==iEff 2)*/ if(GetEffectDurationType(eEff)==DURATION_TYPE_PERMANENT && GetEffectType(eEff) == EFFECT_TYPE_VISUALEFFECT) { RemoveEffect(oPc, eEff); } eEff = GetNextEffect(oPc); } } } } _________________ Nouveau PC trop bien d'la balle ! |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
C'est vrai que je me rappel plus si on peut enlever un effet directement :s
Faudra que je retrouve _________________ [http] |
Revenir en haut | |
ballestolive Ecuyer Messages: 64 Localisation: A 35 KM Sud de Paris. |
Il a l'air très bien ce script créé de façon communautaire.
Pour que tous en profite, même les plus ignare d'entre nous, pourrais tu en expliqué le fonctionnement ou tout du moins la manière de l'utiliser et de l'incorporer à nos modules. Merci à tous et surtout à Gimli pour avoir initié ce sujet. _________________ Coordinateur du projet LanceDragon VF un module pour NWN2. [http] |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Le script est a mettre dans le OnModuleActivated. L'objet qui lancera le mod AFk du joueur est de tag : "BATON_AFK".
Au debut, la variable "AFK" est à FALSE. Quand elle est a FALSE, ça veut dire que le joueur n'a pas utilisé le bâton, donc qu'il n'est pas AFK. Si il utilise le baton lorsque la variable est a FALSE on lui applique des effets (Eff1 et Eff2) et on change la variable, en la passant a TRUE. A ce moment la si le PJ re-utilise le baton, les effets sont enlever, et le joueur n'est plus considéré comme AFK, et la variable repasse à FALSE. C'est une sorte de levier, mais en bâton Voila. _________________ [http] |
Revenir en haut | |
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum