Script Tableau

Répondre
Partager Rechercher
Bonjour,

Je cherche depuis plusieurs jours le script qui permet à un joueur d'écrire sur un tableau en plein jeu, de façon à ce que les autres joueurs puissent voir le texte et si possible, même après un reboot.
J'ai connu l'existence de script sur le serveur FastFrench ...

Merci d'avance à celles et ceux qui me répondront.
Je m'avance certainement mais je pense que le "même après un reboot" impliquera certainement une base de donnée.

Pour le reste, la fonction SetDescription(oObject, sNewDescription, TRUE) est ton amie. Il te suffit de récupérer la phrase prononcée par ton personnage à l'aide d'un GetPCChatMessage qui vérifiera que le joueurs est à proximité du tableau et de l'indiquer comme sNewDescription.

Je dirais donc :

Citation :
void main ()
{
string sWrite=GetPCChatMessage();
object oPC=GetPCChatSpeaker();
object oTable=GetObjectByTag("TABLEAU");
float fDist=GetDistanceBetween(oPC,oTable);

if (fDist<=2.0)
SetDescription(oTable, sWrite);
}
Il faut donc que le personnage soit à 2 pas du tableau. Tu peux aussi passer par la vérification d'un objet dans l'inventaire (genre une craie) que tu supprimes une fois le message affiché. Ca peut éviter d'afficher les discussions hasardeuses qui se tiendraient près du tableau. Dans ce genre :

Citation :
void main ()
{
string sWrite=GetPCChatMessage();
object oPC=GetPCChatSpeaker();
object oTable=GetObjectByTag("TABLEAU");
float fDist=GetDistanceBetween(oPC,oTable);

if (fDist>2.0)return;
if (GetItemPossessedBy(oPC,"CRAIE")==OBJECT_INVALID)return;
{
SetDescription(oTable, sWrite);
DestroyObject(GetItemPossessedBy(oPC,"CRAIE");
}
}
NOTA BENE : ces scripts ne résolvent pas ta demande de persistance sur la description du tableau.

PS : et tu pourrais aussi faire une copie du texte du tableau au PJ qui clique dessus. Il aurait ainsi une copie du message dans son inventaire avant que quelqu'un n'écrive par dessus.

En cliquant sur le tableau, tu déclenches une conversation qui demande si le joueur veut faire une copie du message. Sur la réponse oui, tu déclenches

Citation :
void main ()
{
object oPC=GetPCSpeaker();
object oLetter;
oLetter=CreateItemOnObject("lettre",oPC);
string sWords=GetDescription(OBJECT_SELF,FALSE);
SetDescription(oLetter,sWords,TRUE);
FloatingTextStringOnCreature("Vous recopiez le message.",oPC, FALSE);
}
J'te remercie de tout coeur pour cette si rapide réponse et j'aime beaucoup les procédures que tu m'as proposées cependant pour ta très bonne idée de craie ,qui sert de vérificateur histoire d'éviter les conversations qui n'ont pas de raisons d'être écrites sur le tableau, j'ai encore quelques questions ;

Je suis très mauvais en script et faudrait donc une sorte de distributeur de craies ... J'aimerais également que le joueur qui écrit sur le tableau puisse aussi prendre s'il veut une copie de son message.
Si on reste sur ce principe là je n'aurais que les 2 derniers scripts à prendre on est bien d'accord ? ^^

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, mais détecte en même temps que le phrase contienne les signes " ... ".

Dernière petite question ; où est-ce que je met les 2 scripts ?



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.
Prenons tes demandes une à une.

Citation :
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.

Code PHP:

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.

Citation :
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.

Citation :
Si on reste sur ce principe là je n'aurais que les 2 derniers scripts à prendre on est bien d'accord ? ^^
Oui

Citation :
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

Citation :
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

Code PHP:

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(oTablesWrite);
}

A toi de rajouter l'histoire de la craie si tu en as besoin.

Citation :
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.

Citation :
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 :

Code PHP:

void main ()
{
ActionStartConversation(GetLastUsedBy());

et le fichier de dialogue dans l'onglet dialogue de l'objet.
Waw ...
Tu peux pas imaginer à quel point tu me fais plaisir, t'es vraiment trop sympa ^^
ce topic est simple pour un truc qui pourrait paraître assez compliqué, je suis sûr que d'autres personnes trouveront leur bonheur ici.
Merci pour tout.

PS : J'connaissais le dernier script, sinon je l'aurais demandé avant !
Ta série de script marche à merveille ! Je n'ai qu'un seul ptit problème ^^
Je ne dois pas avoir très bien compris pour recopier le dernier message affiché sur le tableau, lorsque je dis "Oui" un message s'affiche au dessus de moi : Vous recopiez le message (comme écrit dans le script) mais je n'ai rien dans l'inventaire, pourtant j'ai bien mis, comme pour la craie, les bons tags partout.
Allez, dernier petit effort xD
Il faut que tu créé un item dans ta palette qui s'appelle comme tu veux mais qui a un Tag LETTRE et un Resref lettre.

Sinon, le script cherche à créer dans ton inventaire une lettre que tu n'as pas en mémoire pour changer sa description et comme il ne le trouve pas, rien ne se passe.^^

PS: Et si tu remplace la ligne
object oTable=GetObjectByTag("TABLEAU");

par

object oTable=GetNearestObjectByTag("TABLEAU",oPC,1);

..tu peux mettre plusieurs tableaux dans divers endroits qui fonctionnent tous séparemment.

PS: et ben du coup, j'ai mis ces panneaux dans mon module moi ^^
Bug modifié concernant la copie du message sur un papier dans l'inventaire:

Remplace

Code PHP:

SetDescription(oLettersWords,FALSE); 

par

Code PHP:

SetDescription(oLettersWords,TRUE); 

L'ajout de TRUE remplace la description de l'objet identifiée et non celle de l'objet non identifié et les objets non magiques sont considérés comme identifiés par défaut.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés