Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > écrire dans un livre
écrire dans un livre
Par fauxninja le 1/1/2003 Ã 2:40:14 (#2920091)
Par coolstar le 1/1/2003 Ã 3:52:16 (#2920277)
Par eMRaistlin le 1/1/2003 Ã 8:58:36 (#2920752)
La seule solution : un "dialogue d'ecriture", redigé comme une conversation, qui offre plusieurs choix d'ecriture, et plusieur objet livres differents dans les blueprints, un par combinaison de phrase. En fonction de ce que te repond le joueur, tu lui donne tel ou tel livre a la fin...
C'est la seule solution a ma connaissance...
Par fauxninja le 1/1/2003 Ã 10:48:31 (#2920897)
(dailleur, comment?)
Par eMRaistlin le 1/1/2003 Ã 12:53:06 (#2921260)
Cela peut eventuellement fonctionner...
Par coolstar le 1/1/2003 Ã 15:03:27 (#2921785)
Par Jedaï le 1/1/2003 à 15:06:24 (#2921805)
[list=1]
*d'abord tu crée ton livre tag et resref "it_book_rewritable" avec pouvoir unique illimité sur soi uniquement.
*ensuite tu crée une discussion "conv_book" ainsi :
*Que voulez-vous :
==*Lire le livre (at_readbook)
==*Ecrire sur le livre (at_writebook)
*créer un "scribe" invisible avec des scripts sur le OnSpawn et le OnConversation seulement, tag et resref "cre_scribe".
*dans le OnActivateItem :
void main()
{
object oItem = GetItemActivated();
if(GetTag(oItem) == "it_book_rewritable")
{
object oPC = GetItemActivator();
AssignCommand(oPC, ActionStartConversation(oPC, "conv_book"));
SetLocalObject(oPC, "oBook", oItem);
}
}
*"at_writebook"
void main()
{
object oPC = GetPCSpeaker();
object oScribe = CreateObject(OBJECT_TYPE_CREATURE, "cre_scribe", GetLocation(oPC));
SetLocalObject(oScribe, "oWriter", oPC);
}
*sur le OnSpawn du scribe :
void main()
{
object oSelf = OBJECT_SELF;
SetListening(oSelf, TRUE);
SetListenPattern(oSelf, "**", 666);
}
*sur le OnConversation :
void main()
{
int nPattern = GetListenPatternNumber();
object oSpeaker = GetLastSpeaker();
if (nPattern = 666)
{
if (oSpeaker == GetLocalObject(OBJECT_SELF, "oWriter"))
{
string sWrite = GetMatchedSubstring(0);
object oBook = GetLocalObject(oSpeaker, "oBook");
SetLocalString(oBook, "sBook", GetLocalString(oBook, "sBook") + sWrite);
DeleteLocalObject(oSpeaker, "oBook");
SpeakString("Vous avez écrit : " + sWrite + " Vous refermez maintenant le livre.");
DestroyObject(OBJECT_SELF);
}
}
}
*Et finalement le at_read :
void main()
{
object oPC = GetPCSpeaker();
object oBook = GetLocalObject(oPC, "oBook");
DeleteLocalObject(oPC, "oBook");
AssignCommand(oPC, SpeakString(GetLocalString(oBook, "sBook")));
}
Voilà :cool:
C'est très largement améliorable, on peut rajouter des options, effacer par exemple. On peut aussi supprimer des bugs je suppose, mais c'est une bonne base de travail.:p
Edit : J'ai simplifié la procédure.
Par coolstar le 1/1/2003 Ã 20:34:27 (#2923357)
Par coolstar le 1/1/2003 Ã 20:58:41 (#2923562)
Au fait Jedaï, dis-moi? pourquoi avoir mis ceci ??
SetListenPattern(oSelf, "**rite :**", 666);
Au lieu de cela :
SetListenPattern(oSelf, "**", 666);
Ainsi que ceci ??
string sWrite = GetMatchedSubstring(2);
Au lieu de cela :
string sWrite = GetMatchedSubstring(0);
Autrement, ça marche nickel... :D
Par Jedaï le 1/1/2003 à 21:51:23 (#2923867)
Voilà , voilà ...
Ca fonctionne alors ? :p
Par coolstar le 2/1/2003 Ã 2:19:19 (#2925044)
Par Jedaï le 2/1/2003 à 13:23:28 (#2927015)
**rite :**
Write : blabla1
(**) (rite : ) (**)
(W) (rite : ) ( blabla1)
0 1 2
Si on fait
GetMatchedSubstring(0), on obtient "W".
GetMatchedSubstring(1), "rite :".
GetMatchedSubstring(2), " blabla1".
Voilà ...
Il existe aussi une fonction qui renvoit le nombre de morceau :
GetMatchedSubstringCount().
Ainsi on peut écrire une fonction qui renvoit l'intégralité de la chaîne entendue, quel que soit le pattern :
string GetMatchedString()
{
int n; string s = ";
for(n = 0; n < GetMatchedSubstringCount(); n++)
s += GetMatchedSubstring(n);
return s;
}
Voilà :cool:
Par coolstar le 2/1/2003 Ã 13:36:31 (#2927098)
Par fauxninja le 2/1/2003 Ã 13:53:16 (#2927187)
Par coolstar le 2/1/2003 Ã 14:10:38 (#2927302)
Par Jedaï le 2/1/2003 à 15:21:15 (#2927756)
Fauxninja, te pose pas trop de question : si tu suis mes instructions, ça marchera tout seul.:)
(Je vais corriger ces instructions comme proposé par Coolstar, si tu veux mettre des options, tu le feras toi-même)
Par coolstar le 2/1/2003 Ã 19:10:37 (#2929347)
Provient du message de Jedaï
Bof, personne va avoir l'idée saugrenue de regarder partout si y a un scribe invisible juste au moment où il veut écrire !:D
:DProvient du message de Jedaï
Fauxninja, te pose pas trop de question : si tu suis mes instructions, ça marchera tout seul.:)
:eek: :doute:
Par Jedaï le 3/1/2003 à 20:08:55 (#2937948)
Fauxninja, te pose pas trop de question : si tu suis mes instructions, ça marchera tout seul.
:eek: :doute:
Ben voui, soit je fait un message court avec juste une petite explication, et là c'est normal qu'on pose des questions (sauf quand on se débrouille bien), soit je fais un long message avec toutes les instructions pas à pas et tous les scripts. Dans le deuxième cas j'apprécie moins qu'on me pose des questions sur ce qui est déjà dit dans ma réponse (en cherchant un tout petit peu, Fauxninja aurait constaté que je créais et détruisais le scribe lors du dialogue). :enerve:
Par contre si on suggère des amélioration ou qu'on en donne, là je suis super content ! :)
Par coolstar le 4/1/2003 Ã 14:41:43 (#2942856)
JOL Archives 1.0.1
@ JOL / JeuxOnLine