La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 09/05/2024 13:32:40


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 23/05/2006 15:28:39 Sujet du message : [Résolu] Enigme one-shot avec quitte ou double

Tout d'abord bonjour à tous; je parcours votre forum et vos tutoriaux depuis quelques temps déjà et me décide enfin à vous embêter avec des questions bêtes.
Ayant décidé de mettre les mains dans le camboui et de m'aventurer à la création d'un module, j'ai découvert avec plaisir que l'éditeur était plutôt bien fait et relativement simple d'utilisation, et avec déplaisir que les scripts, ce n'était pas vraiment ma tasse de thé Razz !
Bref, aprés quelques recherches infructueuses, voilà le problème sur lequel je bute :

J'ai crée un NPC qui pose une énigme au joueur qui lui parle. Il ferme la salle ou lui et le PJ se trouvent (pour l'obliger à jouer) et ne la réouvre qu'une fois la réponse (bonne ou mauvaise) donnée. En fonction de la réponse du personnage, le PNJ donne ou dérobe une certaine quantité d'or ou de gemmes au personnage.
Le dialogue ne propose pas de choix multiples, le joueur doit entrer la réponse; le PNJ a donc 3 dialogues différents : l'énigme elle-même, le dialogue en cas de bonne réponse, le dialogue en cas de mauvaise réponse.

1er problème :
Comment faire pour que le PNJ (qui est censé être une bouche magique) ferme la porte (et la réouvre ensuite) sans se déplacer jusqu'à elle?

2eme problème :
Il est possible en utilisant les options de l'éditeur de dialogue d'enlever ou de donner une quantité fixe d'or ou d'objet au personnage, mais ce n'est pas exactement ce que je voudrais.
Ce que j'aimerais obtenir comme résultat :
1) Réponse juste : le PNJ scanne l'inventaire du perso et double la quantité d'or et de gemmes possédées par celui-ci (par double on entend: donne une quantité égale au contenu de l'inventaire, ce qui revient au même);
2) Réponse fausse : le PNJ vole tout l'or et toutes les pierres précieuses présentes dans l'inventaire.

3eme problème :
Comment m'assurer que le joueur, une fois la réponse connue, ne puisse plus retenter de jouer, et qu'un seul joueur (en MP) puisse tenter sa chance?
J'avoue que là, ce qui me pose problème, c'est qu'il n'y a pas 1 dialogue avec des options distinctes selon que le joueur ait déjà ou non parlé au PNJ, mais 3 dialogues distincts.

Voilà, bon, c'est tordu quoi...
Dernière édition par Charietto le 06/06/2006 14:24:49; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 23/05/2006 16:16:05 Sujet du message :

POur le premier problème :

NWScript :
void ouvrirOuFermer(object oPorte)
{
    int iTypeObjet = GetObjectType(oPorte);
    if(iTypeObjet == OBJECT_TYPE_DOOR || iTypeObjet == OBJECT_TYPE_PLACEABLE)
        {
        if(GetIsOpen(oPorte) == TRUE)
            {
            AssignCommand(oPorte, ActionCloseDoor(oPorte));
            SetLocked(oPorte, TRUE);
            }
        else
            {
            SetLocked(oPorte, FALSE);
            AssignCommand(oPorte, ActionOpenDoor(oPorte));
            }
        }
    else
        SendMessageToAllDMs("Erreur : nwscript 'nom_du_script' : ouvrirOuFermer");
}
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.


que tu appelle à l'aide de la commande :
NWScript :
object oPorte = GetNearestObjectByTag("TAG_DE_LA_PORTE");
    ouvrirOuFermer(oPorte);
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.


Explications : Bah si la porte est ouverte, elle sera fermé, et vice versa.

Second problème :
Le joueur gagne :
NWScript :
//Si le pj gagne
    GiveGoldToCreature(oPJ, (GetGold(oPJ)*2));

    object oInventaire = GetFirstItemInInventory(oPJ);
    while(oInventaire != OBJECT_INVALID)
    {
        if(GetTag(oInventaire) == "TAG_DUNE_GEMME")
            CreateItemOnObject("RESREF_DUNE_GEMME", oPJ, 1);

    oInventaire = GetNextItemInInventory(oPJ);
    }
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.


Le joueur perd :
NWScript :
//Si le pj perd
    TakeGoldFromCreature(GetGold(oPJ), oPJ, FALSE);

    object oInventaire = GetFirstItemInInventory(oPJ);
    while(oInventaire != OBJECT_INVALID)
    {
        if(GetTag(oInventaire) == "TAG_DUNE_GEMME")
            DestroyObject(oInventaire);

    oInventaire = GetNextItemInInventory(oPJ);
    }
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.


(Le problème c'est que si il perd il retombe à 0, donc s'il gagne après ca fait 0 * 2 = 0 pièces d'or Smile)

Problème 3 :

Variables locales. Lorsque le joueur à déjà tenter sa chance tu met TRUE, et en début de dialogue tu fais une condition que ce soit FALSE.


Citation :
et qu'un seul joueur (en MP) puisse tenter sa chance?
Pas compris le "MP" :s
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 23/05/2006 19:21:05 Sujet du message :

Merci pour ta réponse Smile
Mais bon, euh... comment dire... devine... ça marche pas. Je pense que je dois faire un truc de travers.

Je détaille le schéma de la rencontre:

Le PNJ à trois dialogues, déterminé par un script. Si le personnage lui parle, c'est le dialogue 1) qui est joué, si le personnage entre une réponse au clavier, c'est le 2) en cas de bonne réponse ou le 3) en cas de mauvaise (jusque ici tout va bien).

Dialogue 1)
Branche 1: le PJ a déjà parlé au PNJ (condition: variable locale 1)
Branche 2: le PNJ n'a pas encore parlé au PNJ (action conséquente: détermine variable locale 1 et ferme la porte)

Dialogue 2)
Branche 1: Le PJ a bien répondu (action conséquente: lance le script qui donne de l'or et des gemmes et ouvre la porte)

Dialogue 3)
Branche 1: Le PJ a mal répondu (action conséquente: lance le script qui prend de l'or et des gemmes et ouvre la porte)

Là où je coince:

1) Je ne vois pas bien (euh, non ; "pas du tout" serait plus exact!) comment intégrer le script d'ouverture / fermeture. En fait le mélange fusionnel de deux scripts c'est trop pour moi Razz !
2) Dans les dialogues 2 et 3, je n'obtiens pas de changement quand à l'inventaire du personnage, mais un message d'erreur TOO MANY INSTRUCTIONS.

J'me sens lourd...

(edit : par MP j'entend Multiplayer; MJ me semble prêter à confusion. Donc, dans une partie multijoueurs, il faudrait qu'un seul puisse tenter sa chance, sinon ce serait un peu trop facile pour ses collègues)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 23/05/2006 19:43:09 Sujet du message :

Hmm suffit de mettre un script dans le OnHeartbeat de la porte, et de la fermer et verouiller si un joueur est entrée dans la zone ou a parlé au PNJ. Si tu y arrive pas, tu me le dit je te fais ça Smile

En ce qui concerne un joueur par un joueur, hmm faudrais enfaite que les joueurs derrière ne puissent pas entré dans la zone quand un joueur est dedans, donc on active une variable à 1, et dans le passage de la porte on bloque la téléportation si la variable est à 1. Pareil qu'en haut si t'arrive pas j'te fais Very Happy

Pas trop le temps la par contre Confused

Black
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 24/05/2006 13:18:00 Sujet du message :

Merci pour ta réponse Black Knight. Ce n'est pas tout à fait l'effet souhaité, mais bon, j'en passerai par là si je n'arrive pas à faire autrement. En tout cas ne t'embête pas, je crois avoir déjà vu ce type de script quelque part sur ce forum.

Edit:

Joie, bonheur, extrême félicité!
Je crois avoir résolu mon problème avec la porte. Par contre, j'obtiens toujours l'erreur TOO MANY INSTRUCTIONS (quand je teste in game, par contre les scripts se compilent sans problème) pour ce qui est d'enlever / donner l'or et les gemmes.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 05/06/2006 16:57:49 Sujet du message :

Bon, j'ai quelque peu avancé dans la recherche d'une solution à mon problème. Voici les deux scripts incriminés. Dans les deux cas, l'or du personnage est modifié, la porte s'ouvre normalement, par contre, l'addition / soustraction des gemmes ne marche pas. Si quelqu'un à une idée...

NWScript :
//Si le pj gagne
void main ()
{
    // variable pour dialogue principal
    SetLocalInt(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC), "nDbDonjBmDejaJoue", 1);
    // donne de l'or au PJ
    object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    AssignCommand(oPJ, GiveGoldToCreature(oPJ, (GetGold(oPJ)*1)));
    // donne des gemmes au PJ
    object oGemmes = GetFirstItemInInventory (oPJ);
    while (oGemmes == OBJECT_INVALID)
    {
        if(GetTag(oGemmes) == "NW_IT_GEM001")
            CreateItemOnObject("nw_it_gem001", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM002")
            CreateItemOnObject("nw_it_gem002", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM003")
            CreateItemOnObject("nw_it_gem003", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM004")
            CreateItemOnObject("nw_it_gem004", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM005")
            CreateItemOnObject("nw_it_gem005", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM006")
            CreateItemOnObject("nw_it_gem006", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM007")
            CreateItemOnObject("nw_it_gem007", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM008")
            CreateItemOnObject("nw_it_gem008", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM009")
            CreateItemOnObject("nw_it_gem009", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM010")
            CreateItemOnObject("nw_it_gem010", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM011")
            CreateItemOnObject("nw_it_gem011", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM012")
            CreateItemOnObject("nw_it_gem012", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM013")
            CreateItemOnObject("nw_it_gem013", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM014")
            CreateItemOnObject("nw_it_gem014", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM015")
            CreateItemOnObject("nw_it_gem015", oPJ, 1);
            oGemmes = GetNextItemInInventory(oPJ);
    }
    // ouvre la porte
    object oPorte = GetObjectByTag("db_donj_porte_salle_bm");
    if(GetIsObjectValid(oPorte))
    {
        SetLocked(oPorte, FALSE);
        AssignCommand(oPorte,ActionOpenDoor(oPorte));
    }
}
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.


NWScript :
//Si le pj perd
void main()
{
    // variable pour dialogue principal
    SetLocalInt(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC), "nDbDonjBmDejaJoue", 1);
    // prends tout l'or du PJ
    object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    AssignCommand(oPJ, TakeGoldFromCreature(GetGold(oPJ), oPJ, TRUE));
    // prends toutes les gemmes du PJ
    object oGemmes = GetFirstItemInInventory (oPJ);
    while (oGemmes == OBJECT_INVALID)
    {
        if(GetTag(oGemmes) == "NW_IT_GEM001")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM002")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM003")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM004")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM005")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM006")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM007")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM008")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM009")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM010")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM011")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM012")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM013")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM014")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
        if(GetTag(oGemmes) == "NW_IT_GEM015")
        DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
    }
    // ouvre la porte
    object oPorte = GetObjectByTag("db_donj_porte_salle_bm");
    if(GetIsObjectValid(oPorte))
    {
        SetLocked(oPorte, FALSE);
        AssignCommand(oPorte,ActionOpenDoor(oPorte));
    }
}
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é Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 05/06/2006 17:11:20 Sujet du message :

Si c'est dans un dialogue au lieu de :
NWScript :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.


Remplace par le PJ qui parle, c'est plus rapide et aucune chance de pas prendre le bon :
NWScript :

object oPJ = GetPCSpeaker();
SetLocalInt(oPJ, "nDbDonjBmDejaJoue", 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.


Ensuite, ça marche pas car tu t'es trompé là :
NWScript :
while (oGemmes == OBJECT_INVALID)
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 que l'objet soit valide, donc remplace par :
NWScript :
while (oGemmes != OBJECT_INVALID)
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.


Ensuite, tu peux alleger le script, puisque tu recherche des gemmes qui ont à peu près le même tag. Tu peux tenter :
NWScript :

string sTag;
int nStack;
while (oGemmes != OBJECT_INVALID)
{
    sTag = GetTag(oGemmes);
    if (GetStringLeft(sTag,9) == "NW_IT_GEM")
    {
        nStack = GetNumStackedItems(oGemmes);
        CreateItemOnObject(sTag,oPJ,nStack);
    }
    oGemmes = GetNextItemInInventory(oPJ);
}

//pour la perte :
string sTag;
int nStack;
while (oGemmes != OBJECT_INVALID)
{
    sTag = GetTag(oGemmes);
    if (GetStringLeft(sTag,9) == "NW_IT_GEM") DestroyObject(oGemmes);
    oGemmes = GetNextItemInInventory(oPJ);
}
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é Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 05/06/2006 18:01:58 Sujet du message :

Merci, ça marche (avec la version allégée Smile )!

Pour ce qui est de "GetPCSpeaker", je ne l'utilise pas car il ne fonctionne pas dans ce cas. J'ai cherché un bon moment pourquoi, puis je me suis dit que cela devait être à cause de la forme du dialogue. L'énigme n'est pas un dialogue standard, mais utilise un listenning pattern, et donc le PJ n'est pas réellement en train de parler au poseur d'énigme. Enfin ce sont mes conclusions, j'ai pu rater quelque chose...

Pour le cas où cela intéresserait quelqu'un, voilà donc la version finale:
Vous parlez à un PNJ qui vous pose une énigme; il ferme la porte (indestructible) de la salle pour vous obliger à répondre. En cas de réponse exacte, il double la quantité d'or et de gemmes transportée par le personnage, et lui prend tout son trésor en cas de réponse fausse. Quelle que soit la réponse, il rouvre la porte. Un personnage ne peut jouer qu'une fois.

A mettre dans le Onspawn du poseur d'énigme:

NWScript :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.


Le script permettant au PNJ de choisir sa conversation:

NWScript :
#include "NW_I0_GENERIC"

void main()
{
int iNb = GetListenPatternNumber();
object oPJ = GetLastSpeaker();

switch (iNb)
{
    case -1 :
        ClearAllActions();
        BeginConversation("dialogue principal");
        break;

    case 1000 :
        if (GetIsPC(oPJ))
            BeginConversation("");
        break;

    case 1001 :
        if (GetIsPC(oPJ))
            BeginConversation("");
        break;
}
}
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.

(ces deux scripts ont étés postés il y a un bon bout de temps par kiky.le.magnifique)

Le poseur d'énigme a 3 dialogues:

Le principal:
* Vous avez déjà joué (condition variable 1).
* L'énigme (action conséquente 1).

Le dialogue en cas de réponse juste (action conséquente 2).
Le dialogue en cas de réponse fausse (action conséquente 3).

Action conséquente 1 (Ferme la porte pour obliger le PJ à répondre)

NWScript :
void main()
{
object oPorte = GetObjectByTag("tag de la porte");

    if(GetIsObjectValid(oPorte))
    {
        SetLocked(oPorte, TRUE);
        AssignCommand(oPorte,ActionCloseDoor(oPorte));
    }
}
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.


Action conséquente 2 (récompense le PJ en cas de réponse exacte, ouvre la porte, et définit la variable 1)

NWScript :
//Si le pj gagne
void main ()
{
    // variable pour dialogue principal
    SetLocalInt(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC), "variable 1", 1);
    // donne de l'or au PJ
    object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    AssignCommand(oPJ, GiveGoldToCreature(oPJ, (GetGold(oPJ)*1)));
    // donne des gemmes au PJ
    object oGemmes = GetFirstItemInInventory (oPJ);
    string sTag;
    int nStack;
    while (oGemmes != OBJECT_INVALID)
    {
        sTag = GetTag(oGemmes);
        if (GetStringLeft(sTag,9) == "NW_IT_GEM")
        {
            nStack = GetNumStackedItems(oGemmes);
            CreateItemOnObject(sTag,oPJ,nStack);
        }
        oGemmes = GetNextItemInInventory(oPJ);
    }
    // ouvre la porte
    object oPorte = GetObjectByTag("tag de la porte");
    if(GetIsObjectValid(oPorte))
    {
        SetLocked(oPorte, FALSE);
        AssignCommand(oPorte,ActionOpenDoor(oPorte));
    }
}
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.


Action conséquente 3 (récompense le PJ en cas de réponse exacte, ouvre la porte, et définit la variable 1)

NWScript :
//Si le pj perd
void main()
{
    // variable pour dialogue principal
    SetLocalInt(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC), "variable 1", 1);
    // prends tout l'or du PJ
    object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    AssignCommand(oPJ, TakeGoldFromCreature(GetGold(oPJ), oPJ, TRUE));
    // prends toutes les gemmes du PJ
    object oGemmes = GetFirstItemInInventory (oPJ);
    string sTag;
    int nStack;
    while (oGemmes != OBJECT_INVALID)
    {
        sTag = GetTag(oGemmes);
        if (GetStringLeft(sTag,9) == "NW_IT_GEM") DestroyObject(oGemmes);
        oGemmes = GetNextItemInInventory(oPJ);
    }
    // ouvre la porte
    object oPorte = GetObjectByTag("tag de la porte");
    if(GetIsObjectValid(oPorte))
    {
        SetLocked(oPorte, FALSE);
        AssignCommand(oPorte,ActionOpenDoor(oPorte));
    }
}
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.


Un grand merci à tout ceux qui m'ont aidé à solutionner le problème!
 
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 71.961ms