Bindings

De Wiki.sec.

Le "language" des binds est très très limité, et c'est vraimant pas facile de faire des actions un peu complexes. Néanmoins, avec une utilisation bien menée de la commande vstr (execute le contenu d'une variable), on peut arriver à des trucs sympas.

La commande bind

Elle est toute simple : \bind <touche> "<action>" Cependant, les <touche> spécifiées correspondent à un keycode et parfois les noms de touches utilisés par le moteur ne marchent pas. Dans ce cas, on peut toujours utiliser le keycode en hexadécimal de cette manière :

\bind 0xXX "<action>" (avec XX le code)

Pour trouver les-dits codes, plusieurs méthodes :

  • Sous linux, la commande xev scanne tous les évenement de X et les affiches. Et lorsque l'on appui sur une touche, l'évenement KeyPress survient. Tout un tas d'infos y sont associées, et c'est le keysym qu'il faut regarder.
  • Autre méthode un peu plus bourrin : créer un fichier avec tous les binds d'associés à l'action "say 0xXX" avec le keycode. Ainsi, lorsque l'on appui sur une touche son keycode est dit. Voilà un petit script perl pour générer le fichier de binds :
open(FD,"> super_binds.cfg");
for my $n (0..255) {
  printf(FD "bind 0x%.2x \"say 0x%.2x\"\n",$n,$n); # bind 0xXX "say 0xXX"
}

Pareil en bash:

 for i in `seq 0 255` ; do printf "bind 0x%.2x \"say 0x%.2x\"\n" $i $i ; done > super_binds.cfg

Placez vous dans ~/.tremulous/base et executez le script, il créra le fichier super_binds.cfg. Sauvegardez le fichier autogen.cfg (autrement tous vos binds actuels seront mis en pièces), et lancez tremulous avec :

tremulous +exec super_binds.cfg +map atcs

Puis restaurez autogen.cfg pour que tout redevienne normal.


Prévisualisation de messages

C'est pratique d'envoyer des messages avec une seule touche, mais parfois on se trompe de touche et on dit n'importe quoi. Celà peut avoir des répercussions catastrophiques. Pour remédier à cela, voilà un bind qui, lorsque l'on appui sur une touche-message, affiche localement le message associé, puis si l'on rappui sur la touche l'envoie pour de vrai. Lorsque le message à été envoyé une fois, ça l'envoie à nouveau si l'on rappui (utile pour des mini-floods).

// la variable bindall doit contenir toutes les touches utilisées pour envoyer des messages
// set bindall "bind <touche1> vstr b_<touche1>; bind <touche2> vstr b_<touche2>; bind <touche3> vstr b_<touche3>; etc..
// exemple :
set bindall "bind INS vstr b_INS;bind HOME vstr b_HOME;bind END vstr b_END;bind 0x08 vstr b_DEL"
//
// ensuite il y a une variable par touche appelée b_<touche>
// cette variable contiendra les actions à faire en cas d'appui sur la touche <touche>
// le format de ces variables est :
// set b_<touche> "vstr bindall;set saymsg <commande say et son message>;echo <prévisuatisation du message>;bind <touche> vstr saymsg"
// exemples :
set b_INS "vstr bindall;set saymsg say_team ^3Ennemy is ^1incoming;echo INS = ^3 Ennemy is ^1incoming;bind INS vstr saymsg"
set b_HOME "vstr bindall;set saymsg say_team ^3Our base is ^1attacked;echo HOME = ^3Our base is ^1attacked;bind HOME vstr saymsg"