J'ai fait un peu le tour de la fonction "DisplayInputBox(...)", et j'en ai retiré quelques petites choses amusantes.
Tout d'abord, voici la fonction complète. La description sur l'éditeur est un peu cassée donc je me permets de lui mettre quelques pansements :
// Cette fonction affiche une boîte de dialogue de type "entrée"
// pour la personne indiquée dans le premier paramètre.
//
// oPC : Le joueur pour lequel la boîte de dialogue sera affichée.
// nMessageStrRef : La ligne de référence (du fichier dialog.tlk) affichée en message.
// sMessage : Le texte à marquer en message
// (remplacera le texte de nMessageStrRef, sauf si vide).
// sOkCB : Le script lancé par le bouton "OK". Par défaut, aucun script.
// Un script personnalisé devra commencer par 'gui'.
// sCancelCB : Le script lancé par le bouton "Cancel". Par défaut, aucun script.
// Un script personnalisé devra commencer par 'gui'.
// bShowCancel : Réglé sur TRUE, le bouton "Cancel" apparaîtra sur la fenêtre.
// sScreenName : Le nom de la fenêtre à utiser à la place de la fenêtre par défaut.
// Le nom doit déjà exister. Si on marque n'importe quoi, ça ne marche pas.
// La fenêtre par défaut est SCREEN_STRINGINPUT_MESSAGEBOX
// nOkStrRef : La ligne de référence (du fichier dialog.tlk) affichée sur le bouton "OK".
// Par défaut, c'est "OK".
// sOkString : Le texte à marquer sur le bouton "OK"
// (remplacera le texte de nOkStrRef, sauf si vide).
// nCancelStrRef : La ligne de référence (du fichier dialog.tlk) affichée sur le bouton "Cancel".
// Par défaut, c'est "Cancel".
// sCancelString : Le texte à marquer sur le bouton "Cancel"
// (remplacera le texte de nCancelStrRef, sauf si vide).
// sDefaultString : Un texte personnalisé qui sera copié dans la zone d'insersion.
//
void DisplayInputBox(object oPC,
int nMessageStrRef,
string sMessage="",
string sOKCB="",
string sCancelCB="",
int bShowCancel=FALSE,
string sScreenName="SCREEN_STRINGINPUT_MESSAGEBOX",
int nOkStrRef=-1,
string sOkString="OK",
int nCancelStrRef=-1,
string sCancelString="Cancel",
string sDefaultString="",
string sUnusedString="");
A présent, imaginons que quelque part, quelque chose demande un mot de passe. Par le biais d'un script, je vais lancer une "boîte de dialogue", de cette manière :
object oPlayer = GetMachinTruc();
DisplayInputBox(oPlayer, // le joueur
0, // la référence TLK, mais pas besoin.
"Le mot de passe est requis pour ouvrir la porte des toilettes.", // le message affiché
"gui_mon_script_mdp", // Le script qui sera lancé en appuyant sur le bouton "OK"
"", // Pas de script pour le bouton "Cancel"...
FALSE, // ... vu que je ne l'affiche pas.
"SCREEN_STRINGINPUT_MESSAGEBOX",
0, // la référence TLK du bouton "OK", mais pas besoin.
"Donner le mot de passe", // Mon bouton "OK" s'appellera comme ça.
0, // La référence TLK du bouton "Cancel" mais...
"", // ... vu que je ne l'utilise pas, pas besoin.
""); // Pas besoin d'entrée par défaut, c'est à moi de taper le mot de passe.
Maintenant, dans mon script "gui_mon_script_mdp", je vais y mettre ceci :
// "string sInput" sera le texte entré dans la fenêtre.
// c'est quand même très très pratique.
void main(string sInput)
{
// Si vous vous posiez la question "comment retrouver le joueur" :
object oPlayer = OBJECT_SELF;
string szMessage;
// Je convertis mon texte en minuscules, pour être sûre
// que juste les lettres correspondent.
if(GetStringLowerCase(sInput)=="le mot de passe")
szMessage = "Youpi, vous avez le bon mot de passe !";
else
szMessage = "Rhooolala, vous n'avez pas le bon mot de passe...";
SendMessageToPC(oPlayer,szMessage);
}
Voilou. Et tout ça sans HakPack. ^^
Notez que vous ne pourrez entrer que 128 caractères (tous caractères confondus), et que certains caractères peuvent ne pas être affichés correctement. L'utilisation des guillements est notamment interdite.