Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

écrire dans un livre

Par fauxninja le 1/1/2003 à 2:40:14 (#2920091)

Comment permettre a un joueur d'ecrire dans un item de type livre?

Par coolstar le 1/1/2003 à 3:52:16 (#2920277)

Tiens... j'aimerais savoir ça aussi! :D

Par eMRaistlin le 1/1/2003 à 8:58:36 (#2920752)

C'est impossible... pas de modification dynamique d'objet...


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)

ca doi etre possible, car j'ai deja vu qu'on pouvai faire des pano ou les joueurs peuvent laisser un message...
(dailleur, comment?)

Par eMRaistlin le 1/1/2003 à 12:53:06 (#2921260)

Ah oui, en utilisant les patterns... En fait l'astuce est de crer une creature (le scribe, ou bien une creature invisible, ou n'importe quoi d'autre) et tu lui dmeande d'ecouter tout ce qui se dit, puis de le stocker dans une variable, qui va s'incrementer a chaque utilisation.

Cela peut eventuellement fonctionner...

Par coolstar le 1/1/2003 à 15:03:27 (#2921785)

C bien ce que j'avais cru comprendre... Sot que je suis! c élémentaire... :D

Par Jedaï le 1/1/2003 à 15:06:24 (#2921805)

Oui par utilisation des patterns et des pouvoirs uniques ça peut le faire assez facilement :

[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)

Pour info! ;)

Par coolstar le 1/1/2003 à 20:58:41 (#2923562)

Just Again! ;)


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)

En fait c'est parce qu'initialement, j'avais prévu de faire les "options" et que je prévoyais qu'on pourrais écrire plusieurs fois à la suite en disant "write : blabla1" et "Write : blabla2" et qu'on refermerais le livre en disant "end". Avec peut-être l'option "del", mais faut savoir ce que ça efface... :o

Voilà, voilà...

Ca fonctionne alors ? :p

Par coolstar le 2/1/2003 à 2:19:19 (#2925044)

Sinon, donc, ça le fait! mais j'ai tout de même mis le lien qui renvoie au fonctionnement complet du "Panneau d'affichage"... Cependant, une chose m'échappe tout de même... à quoi sert donc exactement GetMatchedSubstring, j'ai pas tout suivi là... :D

Par Jedaï le 2/1/2003 à 13:23:28 (#2927015)

Toutes les chaînes entendues sont découpées en morceau, selon les patterns, exemple :


**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)

:merci:

Par fauxninja le 2/1/2003 à 13:53:16 (#2927187)

mmm, je capte pas trop, le scribe invisible? il doit etre toujours a coté du joueur ou bien?

Par coolstar le 2/1/2003 à 14:10:38 (#2927302)

Nan, t'inquiète! Jedaï a pensé à faire disparaître le "Scribe invisible" ensuite... mais, perso, j'aime pas trop la technique du Scribe (on peut le voir par 'Surlignement', c couillon!)... :p

Par Jedaï le 2/1/2003 à 15:21:15 (#2927756)

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

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

:D


Provient 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)

T'es dur! :D

JOL Archives 1.0.1
@ JOL / JeuxOnLine