La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 18:42:22


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 08/07/2006 12:53:09 Sujet du message : [Fini] Musique et trigger

Volà mon idée :

X possède un instrument, il a appris l'Ode à l'Eau grâce à un dialogue, et il a maintenant un parchemin dans son inventaire. Quand il l'utilise, le dialogue s'ouvre, avec une liste de toutes les musiques qu'il connait (ici, il n'y a que l'Ode à l'eau). Il décide donc de jouer l'ode à l'eau, et rien ne se passe. Dans une fôret, il se place sur un piedestal contenant un trigger, qui attend qu'on joue "le bal de la forêt" en étant à l'intérieur du trigger pour faire une action. X joue donc sur ce piedestal l'Ode à l'Eau, et rien ne se passe.
Puis X va sur un lac, il trouve un autre piedestal, avec un trigger qui attend qu'on joue "l'Ode à l'Eau". Il se place donc dessus, et joue la bonne musique, donc le trigger réagit et execute une action.

Voilà, cela vous semble-t-il possible ? de mon côté je commence que je pense arriver à faire, je posterai sur ce topic.

Merci de vos conseils et de votre aide ^^ ++


Je vais faire une liste avec ce que j'ai réussit à faire et ce qui a été fait.

Ouvrir le dialogue si utilisation du parchemin : OK
Proposer une musique dans le dialogue si apprise : Systeme D utilisé
Le trigger attend une musique précise : OK
Les branches du dialogues de musique font réagir le trigger : OK
L'action s'effectue si la musique correspond au trigger : OK


---------------------------

Je poste ici la solution pour ceux qui la veulent :

On crée donc :
- Un marchand qui vend des instruments et le parchemin des musiques
- Un objet qui fera le parchemin des musiques, avec pouvoir utilisation illimité
- Des objets qui feront les partitions des différentes musiques
- Un trigger

POUR LE TRIGGER :

OnEnter :
NWScript :

/***************************** ********************/
/* Created By: Shadow & Djezebel                */
/***************************** ********************/

void main()
{
    object oPC = GetEnteringObject();

    SetLocalInt(oPC, "Odeeau", 1);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


OnExit
NWScript :
void main()
{
    object oPC = GetEnteringObject();

    DeleteLocalInt(oPC, "Odeeau");
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Maintenant créez un script dont le nom sera le même que le TAG du parchemin de musique :
NWScript :

/***************************** ********************/
/* Created By: Shadow                            */
/***************************** ********************/

void main()
{
    object oPc = GetItemActivator();
    object oItem = GetItemActivated();
    string sTag = GetTag(oItem);

    if (sTag == "TAG_ICI") // changer le tag
        {
        AssignCommand( oPc, ActionStartConversation( oPc, " NOM_DIALOGUE", TRUE, FALSE)); // mettre le nom du dialogue ici
        }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Il faut maintenant créer les partitions en leur donnant chacun un tag, par exemple pour la musique de l'eau "partitioneau".

Créez ensuite un dialogue qui commence par "Quelle musique voulez vous jouer ?"
Dans chaque réponse, mettez un titre d'une musique.

SUR CHAQUE CONDITION D'EXECUTION DE REPONSES :
NWScript :

/***************************** ********************/
/* Created By: Shadow & Djezebel                */
/***************************** ********************/

#include "nw_i0_tool"

int StartingConditional()
{


if(!HasItem(GetPCSpeaker(), "partitionXX"))
return FALSE;

return TRUE;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


SUR CHAQUE ACTION CONSEQUENTE :
NWScript :

/***************************** ********************/
/* Created By: Shadow & Djezebel                */
/***************************** ********************/

void main()
{
    object oPC = GetPCSpeaker ();

    effect eFX1 = EffectVisualEffect(36);

    object oColonne1 = GetNearestObjectByTag("Colonneeau1");
    object oColonne2 = GetNearestObjectByTag("Colonneeau2");
    object oColonne3 = GetNearestObjectByTag("colonneeau3");
    object oColonne4 = GetNearestObjectByTag("Colonneeau4");
    object oColonne5 = GetNearestObjectByTag("Colonneeau5");
    object oColonne6 = GetNearestObjectByTag("colonneeau6");


  if (GetLocalInt(oPC, "Odeeau") == 1)
        {
        // On place les effets
        DelayCommand(05.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne1));
        DelayCommand(10.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne2));
        DelayCommand(15.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne3));
        DelayCommand(20.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne4));
        DelayCommand(25.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne5));
        DelayCommand(30.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFX1, oColonne6));

        // On detruit les colonnes
        DelayCommand(45.0, DestroyObject(oColonne1));
        DelayCommand(50.0, DestroyObject(oColonne2));
        DelayCommand(55.0, DestroyObject(oColonne3));
        DelayCommand(60.0, DestroyObject(oColonne4));
        DelayCommand(65.0, DestroyObject(oColonne5));
        DelayCommand(70.0, DestroyObject(oColonne6));
        }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Il faut ensuite créer les fameuses colones qui doivent, ici, bloquer une porte, et bien leur donner les bons tags.

Et voilà ! Les noeud de dialogue de chaque musique ne seront disponibles que quand le joueur aura les partitions qui corresponent.

Enjoy et merci à Djezebel.
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
Dernière édition par warpShadow le 10/07/2006 11:06:45; édité 6 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 08/07/2006 13:17:25 Sujet du message :

Salut !

Ton idée est très originale, félicitations ! ^^

Je pense que tu pourrais faire ainsi :
quand ton personnage entre dans le trigger, il a une variable qui se met à 1.

Exemple :

NWScript :
object oPC = GetEnteringObject();
SetLocalInt(oPC, "Odeeau", 1);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



Et quand il sort, ça se remet à 0.

NWScript :
DeleteLocalInt(oPC, "Odeeau");
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



A présent, dans ton dialogue, lorsqu'il joue l'ode à l'eau, dans l'action conséquente, tu fais un :

NWScript :
if (GetLocalInt(oPC, "Odeeau") == 1)
{
// Ce que tu veux qu'il se passe.
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ainsi, si le joueur est sur le trigger, il se passera quelque chose, et sinon, tu peux tout de même jouer un petit air.

J'espère que ça marche (je l'ai fais à main levée) et que ça t'aidera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 08/07/2006 13:25:00 Sujet du message :

Super, j'essaie de faire quelque chose avec ça, merci ^^

[Edit :] Super, j'ai réussit à compiler les script Very Happy
Je pense que ça marche, néanmoins il faut maintenant scripter les actions à faire en cas de musique jouée au bon endroit :

Il y a toujours une entrée de temple, mais inaccessible à cause de je ne sais quoi, par exemple des piliers (comme ceux au début de HotU), et lorsque la musique est jouée, ces piliers disparaissent dans un effet de lumière bleue (pour le lac, la couleur varie en fonction du reste hein.

Une idée pour m'aider ? merci ^^
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 08/07/2006 15:24:13 Sujet du message :

Donc à la place de "ce que tu veux qu'il se passe", tu dois faire :

- un effet de lumière sur des colonnes
- détruire des colonnes.

Ces colonnes ont un tag (dans mon exemple "Colonne1" et "Colonne2", donc tu devrais pouvoir le récupérer en faisant :

NWScript :
object oColonne1 = GetNearestObjectByTag("Colonne1");
object oColonne2 = GetNearestObjectByTag("Colonne2");

DestroyObject(oColonne1);
DestroyObject(oColonne2);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Pour ce qui est de l'effet visuel, tu as le choix : soit tu choisis un sort et tu appliques l'effet visuel (vfx) en mettant un :

NWScript :
effect eFx = EffectVisualEffect(36);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eFX , oColonne1);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eFX , oColonne2);// idem sur la seconde
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.




Tu as aussi la possibilité de créer les colonnes de lumière (CreateObject) et de les enlever au bout d'un certain temps, après c'est à toi de voir. ^^
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 08/07/2006 16:57:45 Sujet du message :

je pense que ce sera super comme ça, merci beaucoup à toi Smile
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 08/07/2006 17:49:55 Sujet du message :

J'ai fini ! je poste tout en premier post Very Happy

merci ! +++
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 49.701ms