La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 12:59:00
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Valghin Voyageur Messages: 2 |
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); } } 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 | |
Valghin Voyageur Messages: 2 |
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); } } } } 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); } 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); } 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); } 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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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