Prenons tes demandes une à une.
Il faudrait donc une sorte de distributeur de craies ...
Oui, tu places un coffre par exemple avec un objet CRAIE dedans. Et à chaque fois que quelqu'un le referme, tu place un petit script dans le OnClose du coffre qui ajoute une craie dans son inventaire si celui-ci est vide.
void main ()
{
object oChest=OBJECT_SELF;
if (GetFirstItemInInventory(oChest)==OBJECT_INVALID)
CreateItemInInventory("craie",oChest,1);
}
Et si un gros malin s'en sert de poubelle, il suffira de vider le coffre et de le fermer pour que la craie apparaisse.
J'aimerais également que le joueur qui écrit sur le tableau puisse aussi prendre s'il veut une copie de son message.
Il lui suffira de cliquer sur le tableau et de déclencher la conversation.
Si on reste sur ce principe là je n'aurais que les 2 derniers scripts à prendre on est bien d'accord ? ^^
Oui
Deuxième petit point (comme je n'ai aucune idée dont on fait les scripts) j'aimerais que le tableau : détecte si le joueur a une craie dans son inventaire et qu'il la supprime automatiquement une fois le message écrit, ça c'est fait,
Oui c'est prévu
mais détecte en même temps que le phrase contienne les signes " ... ".
Un peu plus compliqué, et je te conseille de vérifier seulement le début de la phrase et de choisir autre chose que " (dans mon exemple, le texte devra commencer par Message:), ce qui te permet d'enlever le test de la craie puisqu'il ne sera pas courant que quelqu'un commence une phrase à 2 pas du tableau par Message: sans vouloir écrire dessus.
Le premier script devient alors
void main ()
{
string sWrite=GetPCChatMessage();
object oPC=GetPCChatSpeaker();
object oTable=GetObjectByTag("TABLEAU");
float fDist=GetDistanceBetween(oPC,oTable);
if (fDist>2.0)return;
if (GetStringLeft(sWrite,8)!="Message:")return;
{
SetDescription(oTable, sWrite);
}
}
A toi de rajouter l'histoire de la craie si tu en as besoin.
Dernière petite question ; où est-ce que je met les 2 scripts ?
Le premier script se met dans l'évènement OnChat de ton module. Le second dans l'onglet Action conséquente du dialogue du tableau qui accepte de faire une copie du message.
Merci encore pour cette très solide base que tu viens de me fournir et j'espère que tu pourras répondre à mes dernières petites attentes. J'avoue que je n'attendais pas une réponse aussi bien explicite et surtout aussi rapide.
Je t'en prie. je vois a tes questions qu'il te manque effectivement les bases et, même si nous sommes là pour t'aider, je sais d'expérience que sans les bases, tu vas galérer un bon moment. Les scripts que je t'offre peuvent être considérés comme compliqués pour un novice. Mon conseil : avant de mettre un tableau à messages, essaye de créer des quêtes, des déplacements de NPC, de changer le temps qu'il fait dans une zone, etc... Ce sont là les bases qui te manquent et qui t'auraient évité l'avant dernière question ^^
Tu peux aussi regarder mes scripts et essayer de les modifier ou de t'en servir pour d'autres choses. Dans le cas du script du dessus, si tu modifie le chiffre 8, tu auras compris que tu changes le nombre de caractères qui sont observés. A toi d'utiliser la fonction GetStringLeft dans un de tes scripts maintenant que tu vois comment elle marche (pour ton info, le double signe == veut dire "est la même chose que" alors que le signe != veut dire "est totalement différent de".).
Ceci étant, bon courage.
PS: j'anticipe ta future demande : pour démarrer une conversation à partir d'un objet comme ton tableau, tu met ce script dans le OnUsed du tableau :
void main ()
{
ActionStartConversation(GetLastUsedBy());
}
et le fichier de dialogue dans l'onglet dialogue de l'objet.