Aide pour les $regsubex

Résolu
alanpersonproject Messages postés 17 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 29 mars 2010 - 14 nov. 2009 à 17:25
alanpersonproject Messages postés 17 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 29 mars 2010 - 19 nov. 2009 à 00:49
Bonjour,
j'aurai aimé avoir (une fois de plus ^^) une aide pour un jeu de type pendu(en fait je voudrait faire la roue de la fortune).
Après avoir regardé sur ce site j'ai vu les remotes du jeu du pendu de arkanis, mais je n'arrive pas a assez les décoder pour pouvoir les modifier.Voila ou j'en suis et bien sur ça marche pas :(
on *:text:*:#: {
  if ($1 == !essai) {
    set %phrase $read theme.txt
    msg $chan $regsubex(%phrase,/\S/g,*)
    ;jusque la ca va ça remplace bien par des etoiles
  }
  if $regex(%phrase,/la je sais pas quoi mettre/g) {
    msg $chan $regsubex(%phrase,/[^la pareil sais pas quoi mettre ]/g,*)
else { msg $chan Non $nick il n'y a pas de "la lettre" 
    }
  }
}

ce que je voudrait c'est que quand un users dise !e ça replace tous les "e" etc pour toutes les lettres et que les lettres déja bien placées restent comme au pendu. Et est-il possible de mettre de la couleur sur un $regsubex ? Voila j'espère avoir été assez clair et Merci d'avances pour toute explication.

4 réponses

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
18 nov. 2009 à 00:03
Déja, vu l'état du on text, c'est pas très pro parce que ça va déclencher le lese quand quelqu'un parle sur nimporte quel chan, pour éviter ça tu devrais setter une var a on/off indiquant l'état du jeu, que tu vérifie au tout début du on text.

if ($len($1) 2) && ($left($1,1) !) {
ça, pour vérifier que le nick a tapé !* ou * est une lettre, c'est pas très pro non plus ^^, ça passe avec !* ou * peut petre nimporte quoi (!! par ex), utilise $regex($1,/^!([a-z])/Si), $regml(1) contient directement la lettre après le !.

if $regex(%phr,/ %ltr/g) {
encore une erreur ici, pourquoi il y a un espace dans le pattern, celui sera pas supprimé, il essaye vraiment de chercher " la_lettre", utilise / $+ %ltr $+ /g

Du coup, si ce if là est pas bon, le else qui en découlait ne pouvait pas fonctionner non plus, mais c'est bien ça que tu doit utiliser pour exprimer "si la lettre n'est pas dedans".

set %ltr1 $addtok(%ltr1,%ltr,00)
ça marche p-e lol, mais il te suffit d'utiliser $+ (a noter que 00 = 0)

Dans la classe de caractère du $regsubex, il y a deux espace, c'est une faute en soit et ça fera réfléchir plus longtemps le moteur des regex mais tu peux le laisser, ça t'évite d'utiliser $+ pour faire propre et au final l'espace, tu veux pas qu'il soit remplacer.

!== n'est que la version sensible a la case des caractères (minuscule/maj)
3
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
16 nov. 2009 à 19:10
Je suis pas sur que ce soit une bonne idée de le faire en regex si tu connais rien au regex..
Tout ce que tu veux faire est possible avec ou sans regex et même assez facilement.
Je déconseille d'utiliser les regex si tu ne les connais pas.
0
alanpersonproject Messages postés 17 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 29 mars 2010
17 nov. 2009 à 19:00
Bonsoir wims,
Alors voila ou j'en suis :
Apres avoir testé et testé des trcu j'ai reussi a faire un bout de code qui fonctionne:
on *:text:*:#: {
  if ($1 == !jeu) {
    set %phr je teste un truc
    msg $chan $regsubex(%phr,/\S/g,*)
  }
  if ($len($1) 2) && ($left($1,1) !) {
    .set %ltr $mid($1,2,1)
  } 
  else { msg $chan reponse non valide $nick tape !lettre | return }
  if $regex(%phr,/ %ltr/g) {
    set %ltr1 $addtok(%ltr1,%ltr,00)
    msg $chan $regsubex(%phr,/[^ %ltr1 ]/g,*)
  }
}

première ligne ça set la variable de la phrase qu'on veut trouver en %phr(j'utiliserai un $read par la suite mais là ou s'en fiche ^^)
deuxieme ligne le bot(car c'est mis sur un bot la remote) énonce correctement la phrase en remplaçant toutes les lettres par des *
Premier if il verifie que la reponse est bien valide(pour eviter les fautes de frappes j'ai rajouté ! devant la proposition) et set la variable %ltr la lettre enonce apres le !
si ca colle a la phrase cela remplace bien et ca set une nouvelle variable %ltr1 avec le $addtok donc juqu'ici tous va bien
le bot prend donc en compte les bonnes lettres, les replace, puis se souvient de celle bien placées.
Ce que j'arrive pas a faire c'est si la lettre est pas bonne ben ça dis un truc genre %ltr n'est pas dans la phrase $nick.
J'ai essayé avec un else ça marche pas
ou alors je l'ai mal placé (j'ai essayé a plusieurs endroit)
J'ai essayé avec if ($regex(%phr,/ %ltr/g) !==$null) et ça marche pas non plus.
J'ai vu beaucoup de tes codes wims je pense que tu pourra me dire un p'tit truc ^^ (sans abuser de ta gentillesse).
0
alanpersonproject Messages postés 17 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 29 mars 2010
19 nov. 2009 à 00:49
Merci de ta réponse wims ,
j'ai optimisé mon code avec tes conseils et rajouté le $+ au lieu de mettre l'espace (sinon ca marchais pas sans espace) et le else fonctionne comme tu l'avais pronostiqué ^^
Je continue de coder la suite du coup.
@ bientot pour de nouvelles aventures :D
0
Rejoignez-nous