La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 29/12/2024 21:11:50


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 09/11/2005 05:43:57 Sujet du message : Suppression d'un nombre x d'objets et création de plaçables

Bonjour à tous !

Aujourd'hui le défi est de taille, je patauge vraiment.
J'aimerai savoir déjà si mon idée est réalisable.

L'effet voulu :
Un PNJ prend ou donne du bois en fonction de son stock. Le stock sera définit par l'apport des joueurs.
(Ajout plus complexe) S'il y a entre 1 et 10 morceaux de bois, un plaçable (rondins de bois) apparaitra sur le WPBois1 près du PNJ. S'il y en a entre 10 et 50, il y aura un autre qui s'ajouteraà au WPBois2 et s'il y en a plus de 50 il y aura en tout trois plaçables (le troisième étant au WPBois3).


Pour plus de précisions, voilà comment j'imagine le dialogue :

Code :
Que voulez-vous ?
- Je vous rapporte du bois
- J'ai besoin de 5 morceaux de bois
   - Ah bah y en a plus.
   - Tenez


Pour les conditions et les actions :

"-Je vous rapporte du bois"

J'ai trouvé un script qui permet de réaliser les quêtes "si on a 5 bois, il les prend" mais j'aimerai que cela ne soit pas limité à 5. Le PNJ reprendra ce que le joueur lui rapportera.

Voici le script du Condition :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :
int StartingConditional()
{

   
    object oPC = GetPCSpeaker();
    object oItem = GetFirstItemInInventory(oPC);
    int iNbItem = 0;

    while ((oItem != OBJECT_INVALID) && (iNbItem < 5))
    {
        if (GetTag(oItem) == "bois")
            SetLocalObject(OBJECT_SELF, "oItem" + IntToString(iNbItem++), oItem);
        oItem = GetNextItemInInventory(oPC);
    }
    return (iNbItem > 4);
}
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 celui d'Action Conséquente

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

void main()
{

    // Enlever les 5 objets identiques de l'inventaire du joueur
    object oPC = GetPCSpeaker();
    int cpt;
    string sItem;
    for (cpt = 0; cpt < 5; cpt++)
    {
        sItem = "oItem" + IntToString(cpt);
        DestroyObject(GetLocalObject(OBJECT_SELF, sItem));
        DeleteLocalObject(OBJECT_SELF, sItem);
    }
}
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 le :
"- Bah, y en a plus"
Dans Action Conséquente : il faut faire une boucle (et galèèère) et si le résultat est inférieur à 5 ça affiche le résultat.

Et pour le reste je pourrai me débrouiller.

Des idées ?
Merci d'avance Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 10/11/2005 18:18:37 Sujet du message :

Est-ce trop complexe ou bien ça manque d'explications ? Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dangon
Acolyte
Inscrit le: 18 Oct 2005
Messages: 21
Répondre en citant
Posté le : 11/11/2005 11:21:53 Sujet du message :

Salut Smile

  • "-Je vous rapporte du bois"


Pour la condition de ce dialogue, il suffit simplement de vérifier si le joueur possede en effet au moins un morceau de bois dans son inventaire :

NWScript :
int StartingConditional()
{

   
    object oPC = GetPCSpeaker();
    string sTagBois = "bois";

    if ( GetIsObjectValid(GetItemPossessedBy(oPC,sTagBois)) ) return TRUE;
    return FALSE;

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


En Action Conséquente, on référence et détruit tous les objets bois de l'inventaire du joueur et on augmente d'autant le stock du NPC :
NWScript :

void main()
{

// Enlever tous les objets de type bois l'inventaire du joueur
    object oPC = GetPCSpeaker();
    string sTagBois = "bois";
    object oItem = GetFirstItemInInventory(oPC);
    int iCompteur = 0;
    // Recuperons le nombre de bois deja stocke par le NPC
    int iNPCBois = GetLocalInt(OBJECT_SELF,"bois");


    while ( GetIsObjectValid(oItem) )
    {
        if ( GetTag(oItem) == sTagBois )
        {
            iCompteur++;
            DestroyObject(oItem);
        }
        oItem = GetNextItemInInventory(oPC);
    }

    // Augmentons le stock du NPC d'autant
    SetLocalInt(OBJECT_SELF,"bois",iNPCBois + iCompteur);

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



  • "- Bah, y en a plus"


En Condition, il suffit de vérifier le stock du PNJ. J'y ai ajouté un Token, afin d'afficher le nombre de bois en stock, dans la phrase ( par exemple : "- Bah, y en a plus <CUSTOM1001>." ) :

NWScript :

int StartingConditional()
{

    // Nous avons stocke le nombre de bois possede par le NPC dans cette variable locale :
    int iNPCBois = GetLocalInt(OBJECT_SELF,"bois");

    // Stockons cette quantite dans un Token, pour l'utiliser dans la conversation
    // simplement en appellant un &lt;CUSTOM1001&gt; : " Bah, y en a plus que 1" ou "Bah, y en a plus du tout !"
    if ( iNPCBois == 0 ) SetCustomToken(1001," du tout !");
    else SetCustomToken(1001," que " + IntToString(iNPCBois));

    // Si le nombre de bois est strictement inferieur a 5, renvoyons TRUE
    return (iNPCBois < 5);

}
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
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 16/11/2005 03:06:41 Sujet du message :

Ca marche impécablement bien !
Merci beaucoup ! Very Happy
 
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 57.163ms