La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 20/04/2024 06:19:24


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Valghin
Voyageur
Inscrit le: 13 Nov 2008
Messages: 2
Répondre en citant
Posté le : 14/11/2008 15:19:22 Sujet du message : Script Bancaire avec Shouter

Bonjour,

je travaille actuellement sur un script bancaire, la majorité des scripts que j'ai trouvé utilisant une somme fixe. L'idée étant donc de permettre des mouvements dynamiques.

Voici un petit script amusant, demandant à être peaufiner pour arriver au résultat voulu.
Il permet actuellement de donner au PJ, la somme d'or demandée.

NWScript :

/* OnSpawn */

    SetListeningPatterns();
    SetListenPattern(OBJECT_SELF, "**", 333);
    SetListening(OBJECT_SELF, TRUE); //be sure NPC is listening


/* OnConv */

    int nMatch = GetListenPatternNumber();
    int iGivePo = GetLocalInt(OBJECT_SELF, "iGivePo");

    if(nMatch == 333 && iGivePo == 1)
    {
      int iGold = StringToInt(GetMatchedSubstring(0));
      string sSaid = IntToString(iGold); // on remet l'int en string, pour pouvoir la dire
            if (sSaid == "0")
            {
                SpeakString("C'est toi l'"+GetMatchedSubstring(0)); // on fait parler avec la phrase
            }
            else
            {
                SpeakString("ok "+sSaid);
                GiveGoldToCreature (oShouter, iGold);
            }
    }

/* Actions Taken (sur un dialogue) */

    void main()
    {
        int iGivePo = GetLocalInt(OBJECT_SELF, "iGivePo");
        if ( iGivePo == 1 )
        {
            SetLocalInt(OBJECT_SELF, "iGivePo", 0);
        }
        else
        {
            SetLocalInt(OBJECT_SELF, "iGivePo", 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.


Quand le dialogue est lancé, sur une des options de celui-ci, la variable GivePo devient 1.
A ce moment, toute phrase sera répétée par le npc, jusqu'à ce que l'Actions Taken soit relancé.

Exemple :
Vous lancez le dialogue.
-[owner]Salut (actions taken)
*Vous tapez dans la barre de chat : imbécile !*
Le pnj répondra via le chat : "C'est toi l'imbécile !"

*Vous tapez dans la barre de chat : 10k*
Le pnj répondra via le chat : "ok 10" et vous donnera 10 po.

Assez marrant, et pratique, non ? ^^'
Dernière édition par Valghin le 18/11/2008 17:45:03; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Valghin
Voyageur
Inscrit le: 13 Nov 2008
Messages: 2
Répondre en citant
Posté le : 18/11/2008 17:38:43 Sujet du message :

Voila pour la petite intro.


Voici donc un script bancaire, avec Shouter.

ps : OnSpawn, et OnConv, il s'agit des scripts placés par défaut, modifiés, et sauvés sous un autre nom.

NWScript :

/* OnSpawn */

    SetListeningPatterns();
    SetListenPattern(OBJECT_SELF, "**", 333); //listen 1*
    SetListening(OBJECT_SELF, TRUE); //be sure NPC is listening



/* OnConv */

#include "set_token_bank"

// Respond(0)
// SpeakString("C'est toi l'"+GetMatchedSubstring(0 ));
//
// Respond(1)
// SpeakString("Tu en demandes trop");
//
// Respond(2)
// SpeakString("Tu n'as pas assez d'or");
void Respond(int iDial);

void Respond(int iDial)
{
    switch ( iDial )
    {
    case 0 :
        SpeakString("C'est toi le "+GetMatchedSubstring(0));
    break;

    case 1 :
        SpeakString("Tu en demandes trop");
    break;

    case 2 :
        SpeakString("Tu n'as pas assez d'or");
    break;
    }
}



    int nMatch = GetListenPatternNumber();
    int iMovePo = GetLocalInt(OBJECT_SELF, "iMovePo");
    int iBank = GetCampaignInt("InCome", "Bank", oShouter);
    set_token_bank(100);

    if(nMatch == 333 && iMovePo > 0 )
    {
      int iGold = StringToInt(GetMatchedSubstring(0));
      string sSaid = IntToString(iGold);
            if (sSaid == "0")
            {
                Respond(0);
            }
            else
            {
                SpeakString("ok "+sSaid); // histoire d'avoir une confirmation
                if ( iMovePo == 1 ) // Retrait
                {
                    if ( iGold > iBank )
                    {
                        Respond(iMovePo);
                    }
                    else
                    {
                        GiveGoldToCreature (oShouter, iGold);
                        iBank -= iGold;
                        SetCampaignInt("InCome", "Bank", iBank, oShouter);
                    }
                }
                if ( iMovePo == 2 )
                {
                    if ( iGold > GetGold(oShouter) )
                    {
                        Respond(iMovePo);
                    }
                    else
                    {
                        iBank += iGold;
                        SetCampaignInt("InCome", "Bank", iBank, oShouter);
                        TakeGoldFromCreature (iGold, oShouter);
                    }
                }
            }
    }
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 :

/* Action Token = Retrait */

#include "set_token_bank"

void main()
{
    int iMovePo = GetLocalInt(OBJECT_SELF, "iMovePo");
    if ( iMovePo == 1 )
    {
        SetLocalInt(OBJECT_SELF, "iMovePo", 0);
    }
    else
    {
        SetLocalInt(OBJECT_SELF, "iMovePo", 1);
    }
    set_token_bank(100);
}
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 :


#include "set_token_bank"

void main()
{
    int iMovePo = GetLocalInt(OBJECT_SELF, "iMovePo");
    if ( iMovePo == 2 )
    {
        SetLocalInt(OBJECT_SELF, "iMovePo", 0);
    }
    else
    {
        SetLocalInt(OBJECT_SELF, "iMovePo", 2);
    }
    set_token_bank(100);
}
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 enfin, l'include "set_token_bank"
NWScript :

// SetCustomToken(iToken) y placant la valeur de iBank
void set_token_bank(int iToken);

void set_token_bank(int iToken)
{
    object oShouter = GetLastSpeaker();
    int iBank = GetCampaignInt("InCome", "Bank", oShouter);
    string sBank = IntToString(iBank);
    SetCustomToken (iToken, sBank);
}
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.



Bien petite explication tout de même ^^'

OnSpawn active l'écoute du pnj, captant toutes phrases.

OnConv...
Au début on crée une fonction Respond(int iDial) pour répondre plus tard.

Dans le main, on va vérifier iMovePo, modifié par l'Action Token, et exécuter un retrait ou un dépôt.

On transforme le GetMatchedSubstring(0) en int, pour annuler les caratères non-décimaux. Le seul soucis étant que si une lettre est placée avant un chiffre, elle annule toute la phrase.

Si une taxe était à placer, elle viendrait avant les SetCampaignInt.

Remarquez que les SetCampaignInt peuvent être modifié pour rediriger la variable ailleurs.
N'ayant pas de BDD SQL installée, j'ai choisi celle de Bioware.

Aperçu de structure du dialogue
-[owner] Bonjour... Vous avez <CUSTOM100> po en banque. Retrait ou Dépôt ?
---Retrait * action taken /retrait
------[owner]Je vous écoute
---------Voilà * action taken /retrait
---Dépôt * action taken /dépôt
------[owner]Je vous écoute
---------Voilà * action taken /dépôt

Entre chaque action taken, le chiffre annoncé sera traité.
Notez que
* 10k devient 10.
* 1k0 devient 1.
* k10 devient "C'est toi l'k10"
 
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 38.694ms