Problémes de if dans remote

Résolu
cs_Lodan51
Messages postés
57
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
19 janvier 2006
- 4 août 2005 à 16:58
Nolson
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006
- 8 août 2005 à 09:45
Bonjour à tous !
Mon probléme est simple à éxpliquer, mais pas à résoudre pour moi : je souhaiterai que dans mes remotes de mon jeu " RPG " ( jeu de rôle ), il puisse y avoir plusieurs conditions recquises pour qu'une commande soit éxécutable.
Exemple ( avec une seule condition ) :

on *:text:!zeroexp*:#:{
if ( [ [ $+(%,mp,$nick) ] ] >= 40 && $2) {
var %kedalle = $rand(1,4)
if (%kedalle == 1) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 2010,11 Exp1,11 ! | dec $+(%,co,$2) 20 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
elseif (%kedalle == 2) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 4010,11 Exp1,11 ! | dec $+(%,co,$2) 40 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
elseif (%kedalle == 3) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 10010,11 Exp1,11 ! | dec $+(%,co,$2) 100 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
else { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds tout tes10,11 Exp1,11 !!!! | set $+(%,co,$2) 0 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
}
else { notice $nick 4,1 $nick 7,1 tu n'as pas assez de 10,1MP 4,1( recquis :13,1 404,1 ) }
}

Dans ce remote, la commande !zeroexp s'éxécute à seulement une condition, que les " mp " ( points de magie ) du joueurs soient > ou = à 40. Mais là est la seule condition.
Comment faire si je souhaite par éxemple rajouter une seconde ou même trois conditions représentées par donc, deux ou trois " if " ? Je ne sais pas comment placer ça dedans, probléme de placements de { } je pense mais je ne sais comment faire.

Merci de votre aide !

Lodan51

12 réponses

Nolson
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

8 août 2005 à 09:45
En fait tu veux qu'une action se réalise si plusieurs conditions sont vérifiées simultanément. Donc dans ton if tu peux mettre toutes les conditions que tu désires et tu les sépare par && (qui veut dire "et")
Par exemple :

on *:text:!zeroexp*:#:{
if ($2 && [ [ $+(%,mp,$nick) ] ] >= 40 && [ [ $+(%,hp,$nick) ] ] >= 500 && [ [ $+(%,co,$nick) ] ] >= 10000) {
var %kedalle = $r(1,4)
....
}
else { notice $nick 4,1 $nick 7,1 Toutes les conditions ne sont pas recquises pour éxécuter cette action }
}

En passant, je te conseillerais pour ce genre de script d'utiliser les hash tables plutôt que les variables globales, tu y gagneras en vitesse, en clarté et en facilité de gestion. (Possible aussi en fichier ini).
3
COOLMAN002
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
4 août 2005 à 17:56
on *:text:!zeroexp*:#:{
if ( [ [ $+(%,mp,$nick) ] ] >= 40 && $2) {
var %kedalle = $rand(1,4)

if (%kedalle == 1) { /msg $chan 4,11 $nick 1,11lance zeroexp
sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 2010,11
Exp1,11 ! | dec $+(%,co,$2) 20 | inc $+(%,co,$nick) 1 | dec
$+(%,mp,$nick) 40 }
elseif (%kedalle == 2) { /msg $chan
4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2
1,11tu perds13,11 4010,11 Exp1,11 ! | dec $+(%,co,$2) 40 | inc
$+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
elseif (%kedalle ==
3) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg
$chan 4,11 $2 1,11tu perds13,11 10010,11 Exp1,11 ! | dec
$+(%,co,$2) 100 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }

else { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg
$chan 4,11 $2 1,11tu perds tout tes10,11 Exp1,11 !!!! | set
$+(%,co,$2) 0 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
}
else { notice $nick 4,1 $nick 7,1 tu n'as pas assez de 10,1MP 4,1( recquis :13,1 404,1 ) }

elseif (autre condition) { COMMANDE }

elseif (autre condition) { COMMANDE }

}



comme ça
0
cs_Huitre
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

5 août 2005 à 09:54
Deja je te conseille d utiliser les hash tables pour le stockage de tes
variables des joueurs, car non seulement c est illisible les set + [] ,
mais ca utilise exessivement trop de ressources, pour la rapidité , la
lisibilité, et l utilisation c est vraiment a ne pas utiliser.
0
cs_Lodan51
Messages postés
57
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
19 janvier 2006

5 août 2005 à 14:42
Je voudrais bien, mais le seul probléme, c'est que je ne sais pas le faire :p
Si tu pouvais me donner un ou de éxemple(s), cela m'aiderait à menner à terme mes projets :)

Merci à vous !

Lodan51
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

5 août 2005 à 18:36
à la place des /set => hadd -m Mp $nick "donnée"
et pour les utiliser : $hget(Mp,$nick)

lis un tutorial sur les hash tables sinon, ça te sera toujours utile

ça marche d'avoir plusieurs else à la suite ?
var %var = $r(1,4)
echo -a %var
if (%var == 1) echo -a kikoo
elseif (%var == 2) echo -a pas kikoo
else echo -a ça va ?
else echo -a pourquoi cet else là ?
elseif (%var == 4) echo -a et cet elseif ?

coolman, problème avec les { } ?
0
COOLMAN002
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
5 août 2005 à 18:54
else { /msg $chan 4,11 $nick 1,11lance
zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds tout
tes10,11 Exp1,11 !!!! | set $+(%,co,$2) 0 | inc $+(%,co,$nick) 1 |
dec $+(%,mp,$nick) 40 }
}
else { notice $nick 4,1 $nick 7,1 tu n'as pas assez de 10,1MP 4,1( recquis :13,1 404,1 ) }



Ils ne sont pas à la suite...



alias test {

if ($1) {

var %var $r(1,4), %var2 $r(4,8)

if (%var = 1) { msg $1 tu as fait un 1 ! }

elseif (%var = 2) { msg $1 Bravo pour ce magnifique 2 ! }

elseif (%var = 3) { msg $1 Ô YEAH ! un 3 ! }

else { msg $1 Perdu... 4 :( }

}

else {

echo -agt > Pas de pseudo donné.

}

}
0
RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

5 août 2005 à 22:34
je parlais de ça :
else { notice $nick 4,1 $nick 7,1 tu n'as pas assez de 10,1MP 4,1( recquis :13,1 404,1 ) }
elseif (autre condition) { COMMANDE }
elseif (autre condition) { COMMANDE }
}

j'ai pas du comprendre comment ça avait été écrit :p
0
COOLMAN002
Messages postés
969
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1
5 août 2005 à 22:38
Ah oui, effectivement !

manque un "}" avant mes elseif :(
0
cs_Lodan51
Messages postés
57
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
19 janvier 2006

7 août 2005 à 19:42
finalement, si je souhaites reprendre totalement mon remote avec plusieirs conditions recquises à l'éxécution de la commande, je créé le remote comment ? :p

on *:text:!zeroexp*:#:{
if ( [ [ $+(%,mp,$nick) ] ] >= 40 && $2) {
var %kedalle = $rand(1,4)
if (%kedalle == 1) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 2010,11 Exp1,11 ! | dec $+(%,co,$2) 20 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
elseif (%kedalle == 2) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 4010,11 Exp1,11 ! | dec $+(%,co,$2) 40 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
elseif (%kedalle == 3) { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds13,11 10010,11 Exp1,11 ! | dec $+(%,co,$2) 100 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
else { /msg $chan 4,11 $nick 1,11lance zeroexp sur4,11 $2 ! | /msg $chan 4,11 $2 1,11tu perds tout tes10,11 Exp1,11 !!!! | set $+(%,co,$2) 0 | inc $+(%,co,$nick) 1 | dec $+(%,mp,$nick) 40 }
}
else { notice $nick 4,1 $nick 7,1 tu n'as pas assez de 10,1MP 4,1( recquis :13,1 404,1 ) }
elseif (autre condition) { COMMANDE }
elseif (autre condition) { COMMANDE }
}

éxactement comme ça ou il manque quelque chose, ou, ce n'est pas la bonne casse ( formation de remote ) ?
en gros, qui peut me faire ce remote de manière à ce qu'il marche corréctement pour m'en sérvir d'éxemple :p ?

Lodan51
0
RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

7 août 2005 à 20:14
il y a le } à rajouer là où l'a dit coolman, et puis perso j'ai rien compris à ce que tu voulais :D
pour tes plusieurs conditions, tu veux rajouter quoi par exemple ? ça dépend entièrement de ce que tu veux toi ...
la programmation de "if, elseif, else" (donc les conditions), c'est juste de la logique, si tu n'en as pas, arrête de programmer :)
0
cs_Lodan51
Messages postés
57
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
19 janvier 2006

7 août 2005 à 22:36
Lool
Bon écoute, voilà c'est simple, je souhaite en quelques sortes mettre plusieurs conditions afin que la commande s'éxécute, par éxemple, si je reprends mon remote ci-dessus :

on *:text:!zeroexp*:#:{
if ( [ [ $+(%,mp,$nick) ] ] >= 40 && $2) {
var %kedalle = $rand(1,4)

Ici tu le vois bien, la commande !zeroexp ne peut s'éxécuter que si mp est > ou = à 40, dans ce cas, la variable %kedalle est activé et choisi une séléction entre 1 et 4, jusque là ça va tu comprends :p
Ce que je souhaite, c'est savoir comment, en reprennant la totalitée du remote, comment ajouter une seconde condition, une troisiéme, etc.... Par éxemple, en faisant peut être ça :

on *:text:!zeroexp*:#:{
if ( [ [ $+(%,mp,$nick) ] ] >= 40 && $2) { < ====== condition 1
if ( [ [ $+(%,hp,$nick) ] ] >= 500 && $2) { < ====== condition 2
if ( [ [ $+(%,co,$nick) ] ] >= 10000 && $2) { < ==== condition 3 etc....
var %kedalle = $rand(1,4)

Bien entendu, cette configuratin des 3 conditions recquises n'est pas la bonne, mail là, tu comprends ce qu'il faut pour que la commande s'éxécute : que mp, hp, et co est une valeur. Sinon, renvoyer vers un texte du genre :

else { notice $nick 4,1 $nick 7,1 Toutes les conditions ne sont pas recquises pour éxécuter cette action ) }

Lodan51
0
RCA ArKanis
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

8 août 2005 à 02:19
il faudrait voir l'intérêt du code, ça pourrait être plus compréhensible ... je ne vois pas ce que tu cherches

ton else ne marche pas ?
si aucune des conditions 1, 2 et 3 n'est bonne, il délenchera ton else
ton code semble bon, mais après chaque "<=== condition 1", tu refermes les { } ?
si tu ne refermes pas, l'inverse de tes 3 if en cascade serait : if (!$2 || $+(%,mp,$nick) < 40 || ... < 500 || ... < 10000) { ... }
j'ai vraiment du mal à te comprendre ... désolé
0