cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008
-
18 août 2007 à 02:26
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009
-
19 août 2007 à 21:33
salut , voila j'ai fait un pti code pour animer mon salon , le principe est le dernier à avoir le "ball" se fait kicker mais, j'ai problème .....
déja voila le code :
on *:text:*:#djs: { if ($1 !deb) && (%deb on) { notice $nick jeu déja lancer }
if ($1 == !deb) && (%deb != on) {
set %deb on
set %ball [ $+ [ $nick ] ] 1
msg #djs le ball kick lancer par $nick
debut
halt
} if ($1 !fin) && (%deb on) {
unset %deb %ball %dernier
/write -c ball.txt
msg #djs le ball kick a été stoppé
}
if ($1 == !lance) && ($2 != $null) && (%deb == on) && (%ball [ $+ [ $nick ] ] || %ball [ $+ [ %dernier ] ] == 1) {
unset %ball*
set %j $read(ball.txt,w,$2)
if ($2 == %j) {
msg #djs le ball est a toi $2 !!
set %dernier $2
set %ball [ $+ [ %dernier ] ] 1
timer 1 60 fin
}
else { pas possible }
}
}
alias debut {
set %a 1
set %max $nick(#djs,0)
while (%a <= %max) {
set %list $nick(#djs,%a)
/write ball.txt %list
inc %a
}
}
alias fin {
kick #djs %dernier trop tard canard !!
unset %deb %ball
/write -c ball.txt
}
bon le problème c que kan je lance le ball ,je peux encore le lancer !!!
ex: Xpseudo : !lance pseudo 1
msg de mon bot : le ball est à toi pseudo 1
mais si Xpseudo retape !lance pseudo 2
msg de mon bot :le ball est à toi pseudo 2 alors que normalement Xpseudo n'est plus en possession du ball ???
voila mon problème si vous pouviez m'aider je sais pas si j'ai été claire mais bon j'espere .
merci d'avance ;)
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 18 août 2007 à 04:24
Bon jte fais ça vite fais :
on *:text:*:djs:{
if ($1 == !ball) {
if ($2 == on) && (!%ball.on) { set %ball.on 1 | msg # Jeu de la bombe : c'est partis ! | msg $chan Allez $nick commence ! | set %ball.nick $nick | .timerball 1 20 msg # BOOM tu as perdus $!(%ball.nick) ! $(|,0) echo -a kick # $!(%ball.nick) Trop tard mon canard $(|,0) unset $(%ball.*,0) }
elseif ($2 == off) && (%ball.on) && ($istok(Nick1.Nick2,$nick,46)) { msg # Le jeu de la bombe est stoppé | unset %ball.* | .timerball off }
elseif ($nick == %ball.nick) && (%ball.on) {
if ($2) && ($2 ison $chan) && ($2 != $nick) { msg # C'est maintenant toi, $2, qui a la bombe ! | set %ball.nick $2 }
else { while ($nick(#,$r(1,$nick(#,0))) != %ball.nick) { msg # C'est maintenant toi, $+($v1,$chr(44)) qui a la bombe ! | set %ball.nick $v1 | break } }
}
}
}
!ball on pour lancer
!ball off pour stoppé (tu doit modifié le $istok dans le code en séparant par un point les nick qui ont un acces sur cette cmd, c'est juste une sécurité)
!ball pseudo passe la bombe au pseudo
!ball sans parametre (!ball) donne la bombe a un pseudo aléatoire
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 18 août 2007 à 13:19
il manquait juste une } à la fin du ON TEXT
je viens de tester mon code, il marche à la perfection
j'avais également fait en sorte qu'une personne ne puisse avoir la balle deux fois mais je vais supprimer ça
mon code corrigé donne :
on *:text:*:#djs:{
if ($1 == !deb) balle.start
elseif ($1 == !fin) balle.fin
elseif ($1 == !lance) { if (($2 ison $chan) && ($2 !$me) && ($nick $hget(Balle,Actuel!))) {
var %n = $nick($chan,$nick($chan,$2))
hadd -m Balle Actuel! %n
msg $chan C'est %n qui a la balle !
}
}
}
on *:nick:if ($nick == $hget(Balle,Actuel!)) hadd -m Balle Actuel! $newnick
alias -l balle.start {
if (!$hget(Balle)) {
if ($hget(Balle)) hfree Balle
.timerballe 1 $r(40,60) balle.kick
.timerdeb 1 65 balle.fin
hadd -m Balle Actuel! $nick
msg #djs Début ! $nick a la balle.
}
if (!$timer(deb)) .timerdeb 1 65 balle.fin
}
alias -l balle.kick {
if (($me isop #djs) && ($hget(Balle,Actuel!) ison #djs)) {
msg $v2 $v1 a perdu !
kick $v2 $v1 Perdu !
}
hfree Balle
}
alias -l balle.fin {
if (!$hget(Balle)) return
hfree Balle
msg #djs Fin !
}
"il est plus petit (plus moche)" => merci Wims de l'avoir reconnu :p
le mien peut être très largement raccourci en utilisant des | mais comme dit c'est moche et ça fait ralentir le code (bon pas de beaucoup ...)
il gère le changement de nick et est doté d'une protection qui efface toutes les variables si 65 sec après le début la balle n'a pas explosée (on sait jamais)
on ne peut pas non plus taper !lance "le nom du bot" car celui ci ne pourra jamais répliquer
délai de la balle : entre 40 et 60sec
si tu quittes en cours de jeu, tu pourras y rejouer quand tu relanceras mIRC contrairement au code de Wims
taper !lance tout seul ne lancera pas la balle sur une pauvre victime innocente :)
si t'as des questions sur le code, n'hésite pas ^^
cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008 19 août 2007 à 12:00
heu voila mon code refait et sa marche du tonnerre hihihihihihihi
:
on *:text:*:#djs: {
tokenize 32 $strip($1-) if ($1 !deb) && (%deb on) { notice $nick jeu déja lancer }
if ($1 == !deb) && (%deb != on) {
set %deb on
set %dernier $nick
msg #djs le ball kick lancer par %dernier
halt
} if ($1 !fin) && (%deb on) {
unset %deb %dernier
msg #djs le ball kick a été stoppé
}
if ($1 == !lance) && ($2 ison $chan) && ($2 != $me) && (%deb == on) && ($nick == %dernier) {
msg #djs le ball est a toi $2 !!
set %dernier $nick($chan,$nick($chan,$2))
timer 1 60 fin
}
}
alias fin {
kick #djs %dernier trop tard canard !!
unset %deb %dernier
}
merci ;;;;;;;;
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 19 août 2007 à 21:33
si %dernier est vide, t'auras une merveilleuse petite erreur quand tu comptes le kicker ^^
si tu déconnectes, tu devras taper !fin pour pouvoir espérer le relancer (ce qui n'est pas logique)
le halt est inutile et utilise des elseif :x
lance plutôt le timer quand on tape !deb, sinon l'alias fin se lancera autant de fois qu'il y aura eu de !lance (et donc tout autant d'erreurs no such nick)
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 18 août 2007 à 03:12
Bonjour,
Il te suffit à chaque changement de main de stocker le pseudo de la personne qui l'a et de verif systematiquement avant d'effectuer toute action que celui qui demande est bien le pseudo qui est censé avoir la balle. j'avou que j'ai pas lu le code pck pour ce qu'il est censé faire je le trouve un peu long mais sur le principe c'est ce que je t'ai di.
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 18 août 2007 à 03:58
on *:text:*:#djs:{
if ($1 == !deb) {
if (!$timer(deb)) .timerdeb 1 65 balle.fin
if (!$hget(Balle)) balle.start
}
elseif ($1 == !fin) balle.fin
elseif ($1 == !lance) {
if (($2 ison $chan) && (!$hget(Balle,$2)) && ($nick == $hget(Balle,Actuel!))) {
var %n = $nick($chan,$nick($chan,$2))
hadd -m Balle Actuel! %n
msg $chan C'est %n qui a la balle !
hadd -m Balle %n 1
}
}
on *:nick:if ($nick == $hget(Balle,Actuel!)) hadd -m Balle Actuel! $newnick
alias -l balle.start {
if ($hget(Balle)) hfree Balle
.timerballe 1 $r(40,60) balle.kick
hadd -m Balle Actuel! $nick
msg #djs Début ! $nick a la balle.
}
alias -l balle.kick {
if ($hget(Balle,Actuel!) ison #djs) kick #djs $v1 Perdu !
hfree Balle
}
alias -l balle.fin {
if (!$hget(Balle)) return
hfree Ball
msg #djs Fin !
}
j'ai pas testé, ça devrait fonctionner
à noter que je me suis permis d'utiliser un timer d'un délai aléatoire entre 40 et 60sec pour que ce soit plus marrant ...
ça ne gère pas si la personne part du salon (part ou déco)
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 18 août 2007 à 04:30
Ok ArKanis m'a devancé, en revanche le mien est testé (il aurait du le faire avec moi !) et il est plus petit (plus moche?), si tu veux géré les changements de nick (si tu prend le mien) rajoute juste ça : on !*:nick:if ($nick == %ball.nick) set %ball.nick $newnick
cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008 18 août 2007 à 11:41
heu .... ca marche pas ptdrrrrrrrrr .... soit je suis trop con et je sais pas recopier ou soit le code n'est pas valable ??? deja merci arkanis mais comme je suis mega debutant je comprend pas tout les synthaxes ,faut prendre l'aide mirc mais malgrer sa je pige pas tout ... ensuite a chaque truc que j'ecris le truc lance le ball m si != !lance pseudo ????
ensuite il lance que pour celui qui a lancer le jeu???
mais il kick ptdrrrrrrrrrrr
et toi wims il lance pas. Le truc apres 20 secondes j'ai boom djs ????
ensuite ton kick en echo :-o j'imagine qu'il faut que j'enleve l'echo merci !!!
mais pour tout vous dire sa marche pas .....le seul truc qui m'aide c $2 ison $chan
sa m 'évite mon alias debut.
merci kan m maintenant si vous voulez encore m'aider je suis ok mais si sa vous derange pas avec explication..
merci merci ;)
cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008 18 août 2007 à 12:25
else { while ($nick(#,$r(1,$nick(#,0))) != %ball.nick) { msg # C'est maintenant toi, $+($v1,$chr(44)) qui a la bombe ! | set %ball.nick $v1 | break } tu peux m'expliker stp deja le $r comprend pas et je trouve pas dans l'aide irc explike le code stp wims merci...
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 18 août 2007 à 12:29
le $r c'est comme $rand, la fonction aléatoire.
le while est la pour faire en sorte que lorsqu'on choisis un nick aléatoire avec !ball, on ne puisse pas tombé sur sois même.Cette while exprime "tant que le nick aléatoire est différent de celui qui joue déja" alors on change le nick et on arrete cette while, on passe a la suite en gros :)
cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008 18 août 2007 à 12:53
wims voila ce que j'ai dans la remote:
on *:text:*:#djs:{
if ($strip($1) == !ball) {
if ($strip($2) == on) && (!%ball.on) { set %ball.on 1 | msg # 3;12 Jeu de la bombe : c'est partis ! | msg $chan 3;12 Allez 3;4 $nick 3;12 commence ! | set %ball.nick $nick | .timerball 1 60 msg # 3;9 tu as perdus 3;4 $!(%ball.nick) ! $(|,0) kick # $!(%ball.nick) Trop tard mon canard $(|,0) unset $(%ball.*,0) }
elseif ($strip($2) == off) && (%ball.on) { msg # 3;12 Le jeu de la bombe est stoppé | unset %ball.* | .timerball off }
elseif ($nick == %ball.nick) && (%ball.on) {
if ($strip($2)) && ($strip($2) ison $chan) && ($strip($2) != $nick) { msg # 3;12 C'est maintenant toi, 3;4 $2, 3;12 qui a la bombe ! | set %ball.nick $2 }
else { while ($nick(#,$r(1,$nick(#,0))) != %ball.nick) { msg # 3;12 C'est maintenant toi, 3;4 $+($v1,$chr(44)) 3;12 qui a la bombe ! | set %ball.nick $v1 | break } }
}
}
}
resultat du jeu :
<maria> !ball on
<robocop> Jeu de la bombe : c'est partis !
<robocop> Allez maria commence !
<maria> !ball djs
<robocop> C'est maintenant toi, djs, qui a la bombe !
<djs> !ball maria
<djs> !ball maria
<djs> !ball maria
<djs> !ball maria
<djs> !ball maria
<djs> !ball maria
<djs> !ball maria
<maria> lol
<djs> lol
<djs> !ball off
<robocop> tu as perdus djs !
erf sa marche que dal hihihihhihihih
cs_djdadou
Messages postés50Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention22 septembre 2008 18 août 2007 à 14:56
oui akarnis le code ma l'air bon mais le hash table connais pas encore si tu pouvais donner des explikations sa m'arrangerai juste confirmer .... ma conprehension hihihihi
je crois comprendre mais j'attends la confirmation ...
ben merci bien vous deux ;) et a bientot je sais que j'aurai encore besoin d'aide
ps : hash tables c une memoire virtuel ou koi ????
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 18 août 2007 à 15:04
Oui, d'après Wims (et je le pensais aussi), les hash tables s'inscrivent dans la RAM
Les hash tables fonctionnent un peu comme les .ini sauf avec une section en moins. Ils sont par contre beaucoup plus rapides.
A la fermeture de mIRC, sauf si on sauvegarde la table, elle sera perdue (et faudra la recharger au lancement)
Je te passe les détails avec /hmake (si t'es intéressé, va lire l'aide de mIRC)
La commande /hadd fonctionne comme ceci :
/hadd -m Table Item Data
Pour récuperer les données, il faudra donc procéder ainsi : $hget(Table,Item), ce qui renverra Data bien entendu
Si tu retapes /hadd -m Table Item Data2, ça écrasera l'ancienne valeur
C'est assez simpliste quand même les hash tables, ça fait peur pour rien au final :)