La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/09/2024 00:34:27


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 08/08/2004 16:53:29 Sujet du message : Chien de garde.

Salut tout le monde Very Happy,

De manière à être aussi précis et clair que possible, voici l'intention de ma bouillie de script (désolé Confused).

J'ai créé un déclencheur, au rez-de chaussée d'une maison, dont le but est d'attirer l'attention d'un chien en train d'y effectuer son tour de garde. L'animal arrive vers le PJ en aboyant et vérifie son alignement.

Si le PJ est bon, alors le chien aboie en remuant la queue tout en faisant "Warf, warf !" ; prévenu par les jappements de son compagnon qu'il a de la visite, le propriétaire des lieux descend de l'étage et le chien reprend sa ronde, en suivant sagement ses "waypoints". Dans ce cas de figure, la faction de l'occupant de la maison et son chien est naturellement amicale.

Par contre, si le PJ est mauvais, alors le chien attend en aboyant que son maître le rejoigne ; puis tous deux, devenant hostiles, passent à l'attaque sans sommation.

Et voilà le début du commencement de la mixture de mon script minable :

NWScript :
void main()

{

// Source : Le Bourg de NWN


    object oPC = GetEnteringObject();

// Mettre le tag du PNJ
    object oNPC = GetNearestObjectByTag("Tag_du_chien");

// Trouver le PNJ. Il est peut etre mort..
    if (GetIsObjectValid(oNPC))

{

// stopper les actions en cours du PNJ.
    AssignCommand(oNPC, ClearAllActions());


    AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

//Verifier l'alignement du PC. Si bon, alors...

    if (GetAlignmentGoodEvil(oPC >=50)
    ActionSpeakString("");





{


.
    if (GetAlignmentGoodEvil(oPC <=50)
    SetIsTemporaryEnemy(GetPCSpeaker());//le PC devient l'ennemi




// pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);

      }
      }
    }
    }/* suspect block end found !*/

/* warning: 2 unclosed parenthesis () */
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.


je sais que ce script est considérablement mal conçu et j'en suis navré. Si quelqu'un veut bien m'aider à le corriger, le simplifier, sans doute, de même que le compléter, je le remercie par avance.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Laxam
Légende vivante
Inscrit le: 12 Avr 2004
Messages: 425
Localisation: Lyon
Répondre en citant
Posté le : 08/08/2004 18:05:13 Sujet du message :

Il faut d'abord vérifier que oPJ est bien un joueur, car tu as mis oPJ = GetEnteringObject(), mais ça peut être le chien qui entre dans le déclencheur, ou bien tout autre chose, il faut donc rajouter une fonction du genre GetIsPC(oPJ), enfin un truc de ce genre.
il doit y avoir une accolade fermante de trop, voilà, je vois rien d'autre..
_________________
Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM
La première version française de la doc du NPC Activities (version 2.0)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 08/08/2004 18:56:28 Sujet du message : Encore une fois, merci, Laxam.

J'ai ajouté GetIsPC (oPC) au début de mon script et à présent, je travaille sur sa réalisation intégrale.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 10/08/2004 13:12:41 Sujet du message : Voici le script corrigé. Sauf que...

Salutations à tous Very Happy,


Après avoir longuement fouillé, cherché et raisonné, voici ce que donne mon script de chien de garde :

NWScript :
void main()
{
 

// 1) Faire venir le PNJ "Chien_de_Garde" vers le PJ :

    object oPC = GetEnteringObject();
    GetIsPC(oPC);

// Mettre le Tag du PNJ.

    object oNPC = GetNearestObjectByTag("CABOR");

// Trouver le PNJ. Il est peut-etre mort.
    if (GetIsObjectValid(oNPC))

{

// stopper les actions en cours du PNJ.

    AssignCommand(oNPC, ClearAllActions());

// Faire marcher le PNJ vers le joueur ; pour qu'il coure, changer la variable par "TRUE".

    AssignCommand(oNPC, ActionMoveToObject(oPC, TRUE));

// Verifier l'alignement du PC. Si bon, alors...

{
    if (GetAlignmentGoodEvil(oPC > 50))

    PlaySound ("as_an_dogbark1");
    ActionSpeakString("");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");
object oWP3 = GetWaypointByTag("WayFou_Etage_3");


object oArea;
oArea = GetArea ("LamaisonduFouEtage");

AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));
// Depart du PNJ pour se rendre au WP2 en courant
AssignCommand(oBudoc, ActionMoveToObject(oWP2, TRUE));


//
object oDoor;
oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen (oDoor, TRUE))
AssignCommand(oBudoc, ActionMoveToObject(oWP3, FALSE));



if (GetIsOpen (oDoor, FALSE))
DoDoorAction (oTargetDoor, DOOR_ACTION_OPEN);

{





object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

{

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:

// { DestroyObject(OBJECT_SELF);

// Si l'alignement du PC est mauvais :

    if (GetAlignmentGoodEvil(oPC < 50))



{

    PlaySound ("as_an_dogbark5");
    ActionSpeakString("(le chien vous lance un regard lourd de menaces)");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");
object oWP3 = GetWaypointByTag("WayFou_Etage_3");

// Depart du PNJ pour aller au WP1 en courant.
AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));
// Depart du PNJ pour se rendre au WP2 en courant
AssignCommand(oBudoc, ActionMoveToObject(oWP2, TRUE));


//
object oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen (oDoor, TRUE))
AssignCommand(oBudoc, ActionMoveToObject(oWP3, FALSE));



if (GetIsOpen (oDoor, FALSE))
DoDoorAction (oTargetDoor, DOOR_ACTION_OPEN);



// pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);



object oArea;
oArea = GetArea ("LamaisonduFouEtage");



object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

}

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// {DestroyObject(OBJECT_SELF).
}
/* warning: 10 unclosed block {} */
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.


J'ai réctifié ce que j'ai pu, en fonction des indications évasives du debugger mais un problème persiste (un ou plusieurs, je me pose la question). En effet, à la dernière ligne, la toute dernière, voici l'erreur affichée :

"UNEXPECTED END COMPOUND STATEMENT".

Cette erreur concerne la ligne 186 alors que mon script n'en fait que 185.

J'avoue que je suis perplexe et perdu ; d'autant plus que je ne sais plus où placer les accolades. Ayant peur de compliquer la situation, je préfère ne plus toucher à rien, dans l'espoir que quelqu'un parmi vous (Laxam, t'es là ? Very Happy) acceptera de me donner un petit coup de main. Par la suite, il ne me restera plus qu'à paramétrer mes dialogues et j'en aurai fini avec ce pavé (sans doute le premier d'une longue, longue série Confused).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Starkanas
Grand Chevalier
Inscrit le: 14 Mai 2004
Messages: 110
Répondre en citant
Posté le : 10/08/2004 14:02:06 Sujet du message :

Bah rajoute une accolade pour voir si le messsage est à la fin c ptet une bete "}"lol
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Starkanas
Grand Chevalier
Inscrit le: 14 Mai 2004
Messages: 110
Répondre en citant
Posté le : 10/08/2004 14:22:45 Sujet du message :

Essaie ça :
NWScript :
void main()
{
 

// 1) Faire venir le PNJ "Chien_de_Garde" vers le PJ :

    object oPC = GetEnteringObject();
    GetIsPC(oPC);

// Mettre le Tag du PNJ.

    object oNPC = GetNearestObjectByTag("CABOR");

// Trouver le PNJ. Il est peut-etre mort.
    if (GetIsObjectValid(oNPC))

{

// stopper les actions en cours du PNJ.

    AssignCommand(oNPC, ClearAllActions());

// Faire marcher le PNJ vers le joueur ; pour qu'il coure, changer la variable par "TRUE".

    AssignCommand(oNPC, ActionMoveToObject(oPC, TRUE));

// Verifier l'alignement du PC. Si bon, alors...

{
    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)

    PlaySound ("as_an_dogbark1");
    ActionSpeakString("");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");
object oWP3 = GetWaypointByTag("WayFou_Etage_3");




AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));
// Depart du PNJ pour se rendre au WP2 en courant
AssignCommand(oBudoc, ActionMoveToObject(oWP2, TRUE));


//
object oDoor;
oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen(oDoor) == TRUE)
AssignCommand(oBudoc, ActionMoveToObject(oWP3, FALSE));



if (GetIsOpen (oDoor) == FALSE)
ActionOpenDoor(oDoor);

{





object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

{

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:

// { DestroyObject(OBJECT_SELF);

// Si l'alignement du PC est mauvais :

    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL)



{

    PlaySound ("as_an_dogbark5");
    ActionSpeakString("(le chien vous lance un regard lourd de menaces)");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");
object oWP3 = GetWaypointByTag("WayFou_Etage_3");

// Depart du PNJ pour aller au WP1 en courant.
AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));
// Depart du PNJ pour se rendre au WP2 en courant
AssignCommand(oBudoc, ActionMoveToObject(oWP2, TRUE));


//
object oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen (oDoor) == TRUE)
AssignCommand(oBudoc, ActionMoveToObject(oWP3, FALSE));



if (GetIsOpen (oDoor) == FALSE)
ActionOpenDoor(oDoor);



// pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);







object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

}

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// {DestroyObject(OBJECT_SELF).
}
}
}
}
}
}
}
}
}
}
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 10/08/2004 15:23:54 Sujet du message : Merci à toi, Starkanas.

En jetant un oeil rapide à ta correction, j'ai pu voir que dans l'ensemble, je m'étais honnorablement débrouillé. Et ça me fait plaisir de noter que j'apprends. Lentement, mais sûrement. Je te remercie pour ton aide Very Happy.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 10/08/2004 21:13:31 Sujet du message : Euh... Y a un hic dans mon script.

D'abord, je souhaitais faire apparaître un texte flottant au-dessus du chien. Or, pour cela, j'ai besoin de la commande "FloatingTextStringOnCreature" au lieu de "ActionSpeakString". Et évidemment, c'est cette seconde que j'ai utilisée. Comment dois-je faire pour paramétrer la première ? Bien entendu, avant de poser ma question, j'ai essayé mais le seul résultat a été une mélasse inutile Confused.

J'ai pensé à faire appel à une ligne de dialogue appelée par un script comme pour les portes fermées par une barre de fer (campagne de NWN). Est-ce le bon moyen ?

De plus, comment empêcher un NPC de suivre inlassablement le trajet délimité par ses "Waypoints" ? En effet, alors que le chien devrait faire sa ronde de surveillance, apercevoir le PC, aller vers lui et ne plus bouger de sa position, il effectue bien toutes les manoeuvres sauf qu'ensuite, il reprend son tour de garde. La commande "AssignCommand(oNPC, ClearAllActions());" n'a aucun effet Confused.

Enfin, mon NPC propriétaire du chien descend bien de l'étage (situé dans une autre zone) mais il met beaucoup de temps (plusieurs secondes) pour arriver au pied de l'escalier. Je voudrais donc ajouter un autre texte flottant, attribué à la porte par exemple, faisant croire que le NPC en train de descendre dit "j'arrive dans un instant" ou une formule similaire Confused.

Pour le reste, tout fonctionne correctement.

NWScript :
void main()
{
 

// 1) Faire venir le PNJ "Chien_de_Garde" vers le PJ :

    object oPC = GetEnteringObject();
    GetIsPC(oPC);

// Mettre le Tag du PNJ.

    object oNPC = GetNearestObjectByTag("CABOR");

// Trouver le PNJ. Il est peut-etre mort.
    if (GetIsObjectValid(oNPC))

{

// stopper les actions en cours du PNJ.

    AssignCommand(oNPC, ClearAllActions());

// Faire marcher le PNJ vers le joueur ; pour qu'il coure, changer la variable par "TRUE".

    AssignCommand(oNPC, ActionMoveToObject(oPC, TRUE));

// Verifier l'alignement du PC. Si bon, alors...

{
    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)

    PlaySound ("as_an_dogbark1");
    ActionSpeakString("");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");



AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));



object oDoor;
oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen(oDoor) == TRUE)
AssignCommand(oBudoc, ActionJumpToObject(oWP2, FALSE));



if (GetIsOpen (oDoor) == FALSE)
ActionOpenDoor(oDoor);
AssignCommand(oBudoc, ActionJumpToObject(oWP2, FALSE));


{





object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

{

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);

// Si l'alignement du PC est mauvais :

    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL)



{

    PlaySound ("as_an_dogbark5");
    ActionSpeakString("(le chien vous lance un regard lourd de menaces)");

{




object oBudoc = GetObjectByTag("LeFou");
object oWP1 = GetWaypointByTag("WayFou_Etage_1");
object oWP2 = GetWaypointByTag("WayFou_Etage_2");



AssignCommand(oBudoc, ActionMoveToObject(oWP1, TRUE));


//
object oDoor;
oDoor = GetObjectByTag ("Porte_Fou_Etage");



if (GetIsOpen(oDoor) == TRUE)
AssignCommand(oBudoc, ActionJumpToObject(oWP2, FALSE));



if (GetIsOpen (oDoor) == FALSE)
ActionOpenDoor(oDoor);
AssignCommand(oBudoc, ActionJumpToObject(oWP2, FALSE));



// pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);



object oNPC = GetObjectByTag("LeFou");

// Trouver le PNJ. Il est peut etre mort..
if (GetIsObjectValid(oNPC))

{


if (!IsInConversation(oNPC))

{

// stopper les actions en cours du PNJ.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));

}

// Pour que le script ne marche qu'une seule fois
// placer la ligne en dessous en la mettant sans commentaire:
// DestroyObject(OBJECT_SELF);
}
}
}
}
}
}
}
}
}
}
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 14/08/2004 18:57:29 Sujet du message : Quelqu'un peut-il m'aider ?

Voici le script enfin terminé, à trois détails près Mad.

En effet, lorsque le PNJ arrive dans la zone où se trouve le PJ, il part d'abord en balade puis revient débuter le dialogue au lieu de venir lui parler directement.

Par ailleurs, le "WP2" empêche le PNJ de venir vers le PJ ; j'ai donc mis la commande
"ActionMoveToObject" sous forme de commentaire en attendant de savoir pourquoi.

Pour finir, je ne sais toujours pas, après plusieurs jours de réflexion intense, comment empêcher le script de se répéter. La commande "DestroyObject(OBJECT_SELF);" empêche le PNJ d'entrer dans la zone où se trouve le PJ.

Si l'un d'entre vous a une idée sur les corrections à apporter, je serai heureux de savoir quoi faire pour supprimer ces inconvénients, parce que là, je suis vraiment dans une impasse.

NWScript :
void main()

{





// Faire venir le PNJ "Chien_de_Garde" vers le PJ :

    object oPC = GetEnteringObject();
    GetIsPC(oPC);

// Mettre le Tag du PNJ (chien).

    object oNPC = GetNearestObjectByTag("tag du chien");

// Trouver le PNJ. Il est peut-etre mort.
    if (GetIsObjectValid(oNPC))

{

// stopper les actions en cours du PNJ.

    AssignCommand(oNPC, ClearAllActions());

// Faire marcher le PNJ vers le joueur ; pour qu'il coure, changer la variable par "TRUE".

    AssignCommand(oNPC, ActionMoveToObject(oPC, TRUE));

{

// 1) Verifier l'alignement du PJ. S'il est bon, alors...

    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)

{

// Pour que le PNJ (chien) parle au joueur.
    object oNPC = GetObjectByTag ("tag du chien");
    AssignCommand(oNPC, ActionStartConversation(oPC));



}

{




    object o"nom du PNJ" = GetObjectByTag("tag du PNJ");
    object oWP1 = GetWaypointByTag("");
    object oWP2 = GetWaypointByTag("");


// Pour faire courir le PNJ, remplacer "FALSE" par "TRUE".

    AssignCommand(o"nom du PNJ", ActionMoveToObject(oWP1, FALSE));
    ActionWait(x.x);




    object oVoix = GetObjectByTag("tag porte rdc");
    DelayCommand (x.xf, AssignCommand(oVoix, ActionStartConversation(oPC)));

    ActionWait(x.x);



    object oDoor;
    oDoor = GetObjectByTag ("tag porte etage");



    if (GetIsOpen(oDoor) == TRUE)
//    AssignCommand(o"nom du PNJ", ActionMoveToObject(oWP2, FALSE));



    if (GetIsOpen (oDoor) == FALSE)
    ActionOpenDoor(oDoor);
//    AssignCommand(o"nom du PNJ", ActionMoveToObject(oWP2, FALSE));

{



    object o"nom du PNJ" = GetObjectByTag("tag du PNJ");

// Trouver le PNJ. Il est peut etre mort.
    if (GetIsObjectValid(o"nom du PNJ"))

{


    if (!IsInConversation(o"nom du PNJ"))

{

// stopper les actions en cours du PNJ.
  AssignCommand(o"nom du PNJ", ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
    AssignCommand(o"nom du PNJ", ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
    AssignCommand(o"nom du PNJ", ActionStartConversation(oPC));

// Prevoir en fin de dialogue ("Actions consequentes") les actions du PNJ
//maitre du chien.

}
}
}
}
}
}

{

// Verifier l'alignement du PC. Si mauvais, alors...
    if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL)

{

// Pour que le PNJ (chien) parle au joueur.
    object oNPC = GetObjectByTag ("tag du chien");
    AssignCommand(oNPC, ActionStartConversation(oPC));

// Prevoir en fin de dialogue ("Actions consequentes") ce qu'on veut faire du chien


}

{




    object o"nom du PNJ" = GetObjectByTag("tag du PNJ");

// Trouver le PNJ. Il est peut etre mort.
    if (GetIsObjectValid(o"nom du PNJ"))

{


    if (!IsInConversation(o"nom du PNJ"))

{

// stopper les actions en cours du PNJ.
    AssignCommand(o"nom du PNJ", ClearAllActions());

// Faire marcher le NPC vers le joueur. Pour qu'il coure, changer la variable par TRUE.
    AssignCommand(o"nom du PNJ", ActionMoveToObject(oPC, FALSE));

// Pour que le PNJ parle au joueur.
    AssignCommand(o"nom du PNJ", ActionStartConversation(oPC));

// Prevoir en fin de dialogue ("Actions consequentes") les actions du PNJ
//maitre du chien.

}
}
}
}
}
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.


Une fois le script réalisé, prévoyez deux branches de dialogue ; l'une déterminée par les alignements bon et neutre (utilisez l'assistant de l'onglet "Conditions d'exécution") et l'autre, par l'alignement mauvais. Dans les "Actions conséquentes", creez les scripts qui vous conviennent.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Deekin
Acolyte
Inscrit le: 16 Juin 2004
Messages: 32
Répondre en citant
Posté le : 15/08/2004 18:45:37 Sujet du message : C'est bon j'ai trouvé.

Merci pour votre aide.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 16/08/2004 12:38:16 Sujet du message :

Joli script !

Plutot que d'utiliser la commande ActionMoveToObject, utilise la fonction ActionFORCEMoveToObject. J'utilise pratiquement à chaque fois cette derniere Very Happy

Ensuite dans ton script il ya peut être un piege à eviter avec la commande ActionWait.
En effet sachant que le OnHeartBeat est relancé toutes les 6 secondes, si la somme du temps d'attente de tous tes actionwait, dépasse les 6 secondes, peut être cela génére t il un embouteillahe ou une confusion d'action à faire pour ton pnj partagé entre son OnHeartBeat et son Trigger (qui le commande)

Ensuite tu as mis les ActionWait sans AssignCommand. Peut être un AssignCommand(oNPC, ActionWait(1.0)); reglera certains pb (la je suis pas sur mais à la lecture de ton script, ces actionWait seuls m'ont marqué. Alors je t'en fait part Shocked

Ensuite pour empécher l'animation de se répéter, je te conseillerai plutot la mise en place d'un variable SetLocalInt().
Elle passe à un quand l'animation est enclenché et via un DelayCommand par exemple, ou via un autre trigger ou encore via une branche de ton dialogue tu as la possibilité de la refaire passer à 0.
Je ne sais pas comment tu voudrais procéder mais tu peux stocker la variable sur le Pj, Pnj, trigger, etc.......

En espérant avoir vu juste et pu t'aider Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 18/08/2004 12:20:29 Sujet du message :

Pour éviter qu'une action se répéte il y a surtout 2 méthodes principales et faciles !

La premiere tu l'as déjà trouvé : détruire l'objet déclenchant le script avec la fonction DestroyObject(object);

La deuxieme est de coller une variable (ou vulgurairement parlant un mouchard Laughing)
avec l'utilisation de 2 fonctions :
SetLocalInt(); //donne la valeur à la variable
et
GetLocalInt(); //regarde la valeur de la variable

Pour ton script si l'idee pour ne pas qu'il se répete est d'empecher que le chien vienne voir le joueur une énieme fois, je te conseil de mettre ceci :

if (!GetLocalInt(oPC, "UneFois"))
{
Ici tu mets tout ton script avec en plus cette ligne juste apres tes lignes de script suivantes :
// Pour que le PNJ parle au joueur.
AssignCommand(o"nom du PNJ", ActionStartConversation(oPC));
Donc tu rajoutes :
SetLocalInt(oPC,"UneFois", 1);
}

(n'oublie pas les accolades) Very Happy

Attention avec ceci le trigger ne remarchera plus sur CE joueur! Mais le trigger est toujours en fonction pour les autres joueurs! Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 141.141ms