Tutorial BOT De Pachangas

EnZo

= Tutorial BOT De Pachangas =


------ INDICE ------

[1] Introduccion
[2] Aclaraciones
[3] BOT completo ya hecho
[3.1] Instalacion y Pruebas
[4] Esplicacion breve
[5] Realizacion del bot
[5.1] Creando el sistema de administracion
[5.2] El alias de /eltopic
[5.3] Sistema para usuarios
[5.4] El alias de /mira
[5.5] El alias de /team-a
[5.6] El alias de /team-b
[5.7] El alias de /lanza



[1] Introduccion

  • Que es un bot de pachangas? Bueno en ingles es un bot de gathers o porlomenos asi creo. Estos bots se activan en un canal, y mediante unos comandos especificos los usuarios del canal se apuntan a partidas que lanzan los administradores con sus correspondientes comandos. Cuando son completados los equipos, el bot manda un privado a los jugadores diciendole los datos de la partida. Para que veais un ejemplo meteros en quakenet del irc y os meteis al canal #cs.gather.es

  • Este tutorial lo he hecho porque cada vez habia mas gente que pedia un bot de pachangas. Simplemente es un bot que le hice a un amigo de gratis xD y que se me ha ocurrido hacerle un tutorial y postearlo aqui :D

  • Deciros que para los que no tienen ni idea de scripting el tutorial le va a resultar un poco dificil ya que es de un nivel medio.
    Os recomiendo pasaros por un tutorial de iniciacion al scripting que se hizo aqui en MV por aLYuRBeiS. Aunque carece de conceptos para este tutorial y es muy muy basico para lo que vamos a usar aqui pero con el help del mirc seguro que iremos para alante.
    Tutorial de aLYuRBeiS: http://www.media-vida.net/vertema.php?fid=9&tid=57406
    Manual de Scripting, el mas completo: http://www.sarrio.org/scripting_pdf.zip
    La ayuda oficial del mIRC en castellano, os va a ser muy util: http://www.mirces.com/bin/mirc.hlp

  • El bot quiza tenga fallos, partes por mejorar, pero soy consciente de ello. Si se os ocurre alguna mejora o localizais algun error del bot decirmelo sin mas dilacion.

  • Al tutorial no le he pasado la ortografia de word xD asi que probablemente tenga muchas paletadas y faltas de ortografia, disculparme por ello.

  • El tutorial lo esplicare desde el principio y como se iria desarrollando, como si se fuese programando poco a poco.


[2] Aclaraciones

  • Para empezar simplemente necesitamos el mIRC.exe que os lo podeis bajar clikeando aqui -> http://www.mirces.com/bin/mirc.exe

  • Cuando te hayas descargado el programa ejecutalo, y arriba en el menu Herramientas > Editor de Scripts (alt+r). Todo nuestro codigo va ahi dentro.

  • Una cosa importante, los ejemplos que usamos abajo van con el caracter ascii 255 (alt+255) en vez de con espacios. Es simplemente para que quede mas estetico. Asi que si pegais el codigo de los ejemplos procurar cambialo por espacios o no os funcionara.


alias con_espacios {
echo No queda bien...
echo Ami asi no me gusta!
}

alias con_el_caracter_255 {
echo Asi mejor no?
echo Mas estetico.
}


[3] BOT completo ya hecho

  • No creais que os voy a dar el bot ya hecho. El script ya hecho esta en mi perfil, teneis que descargaros mi CFG http://www.media-vida.net/perfil.php?id=21969 . Pero hay una pega que ese zip esta con password.
    La password es la respuesta a la siguente pregunta:

Que identificador hara que nos vayamos al alias de /team-a o al /team-b ? es el mismo identificador para ambos.
Recuerda que los identificadores siempre empezaban por el caracter "$"

La respuesta la sabreis si os leeis el tutorial y lo comprendeis. Mi intencion es que aprendais los que no saben, como yo hice en su momento, no esta bien que se den las cosas hechas, que menos que leeroslo no? pos adelante!


[3.1] Instalacion y Pruebas

[1º] Descargar el mIRC a pelo ( http://www.mirces.com/bin/mirc.exe ) el bot y lo metemos en una carpeta.
[2º] Donde hayamos metido el mirc.exe debemos crear hay mismo una carpeta nueva.
[3º] Cuando este creada la carpeta, copiamos el mirc.exe y lo pegamos dentro de la carpeta que hemos creado. Asi que tenemos en la carpeta raiz el mirc.exe y el bot.mrc y luego una carpeta nueva que tenga dentro otro mirc.exe
[4º] Ejecutamos el mirc.exe de la carpeta raiz, donde esta tambien el bot.mrc
[5º] Ponemos en estatus /load -rs bot.mrc y te debe de poner algo como * Script cargado 'G:\mIRC\bot.mrc'. Y ya esta cargado.
[6º] Nos metemos en el canal #tucanal. Con esto el bot ya esta instalado y preparado para usarlo.
[7º] Nos metemos dentro de la carpeta creada y ejecutamos el mirc.exe que hemos copiado antes. Y tenemos 2 ventanas de mirc, una para el bot y otra para el user de pruebas. Si lo haces todo en un mismo mirc no valdra porque habra problemas al interpretar los comandos, por eso hemos abierto 2.
[8º] Conectamos al mismo servidor que el del bot. Y nos metemos al canal #tucanal.
[9º] Para que el user de pruebas tenga permiso al usar el bot debe tener @P. Nos vamos al mirc del bot y ponemos /mode #tucanal +o el-nick-del-user.
[10º] Cuando tengamos @P ya podemos usarlo, ponemos en la ventana del canal esto: /msg el-nick-del-bot !lanza y automaticamente nos abrira una ventana con todas las opciones. Estos comandos se ponen en la ventana del user no del bot recuerda...

<MyBOT> [LISTA DE JUEGOS POSIBLES]
<MyBOT> --------------------------
<MyBOT> Counter-Strike
<MyBOT> Day of Defeat
<MyBOT> Half-Life
<MyBOT> Unreal Tournament
<MyBOT> Quake III Arena
<MyBOT> ===========================
<MyBOT> La sintaxis seria asi: mod version ip password cd-on/off
<MyBOT> Ejemplo: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
<MyBOT> <--------->
<MyBOT> Para quitar la partida pon !cancela

[11º] Debe de salir eso, pues en la misma ventana que os ha abierto el bot ponemos esto:

Counter-Strike 1.6 192.168.1.124:27015 paxanga on Y el bot en el canal debe poner algo como esto:

<MyBOT> Partida lanzada de Counter-Strike por EnZo Para añadirte a una partida pon !juego !juego a (Para TEAM-A) o !juego b (Para TEAM-B) y para kitarte de la partida !kitame Si quieres ver como van los equipos pon !teams y para ver la ultima partida lanzada pon !ultima

[12º] Pues ponemos !juego b por ejemplo. Y me debe poner -MyBOT- Se te ha añadido al Team B. Todos los comandos de user van en el general no en privado.
[13º] Pero claro esta preparado para que no se pueda meter la misma persona con nombre diferente. Asi que si nos ponemos otro nick y luego ponemos !juego a nos dira: -MyBOT- Ya estas apuntado como EnZo
[14º] Si nos queremos quitar de la pachanga ponemos !kitame y nos dira -MyBOT- Se te ha borrado de la pachanga.
[15º] Pues asi con los demas comandos.


[4] Esplicacion breve

  • Para desarollar el bot necesitamos sobre todo los Eventos remotos y Alias

  • Los remotes como yo les llamo son especificamente los ON TEXT los que necesitamos que si recordais son los que actuan cuando alguien escribe algo o por privado o bien en un canal.

  • Necesitaremos alias para reducir el codigo. Imaginaros, tenemos que hacer un casi identico para el Team-A como para el Team-B pues en vez de copiar el codigo y tenerlo dos veces para el A y el B hacemos un alias que sirve para ambos, y solo tenemos que cambiar algunas variables para diferenciarlos.

  • No os quiero liar mucho, era una esplicacion breve de como vamos a hacerlo. Pero como se entiende bien es con ejemplos practicos, asi que vamos a ello.


[5] Realizacion del bot

Vamos a desmenuzar el bot en varias partes e ir esplicandolas paso a paso y claramente como si se fuese programando poco a poco.
Comentaremos una a una todas las lineas menos las obias y las que termina en "}".


[5.1] Creando el sistema de administracion

Vamos a crear el sistema de administracion primero, que es el mas facil. Ya sabeis que en un bot de pachangas siempre hay un admin que lo administra lo activa lo cancela etc. Pues vamos!
Para ello vamos a usar el evento ON TEXT pero para privados.

[5.1.1]

on 1:text:*:?:{
}

linea 1: Asi comenzamos nuestro script, el * identifica que se activara con cualquier palabra y el ? que se activara solo en privados. El 1 es para que actue con todos los usuarios ya que no hemos definido a ninguno, aunque tambien puede ir con *. Lo demas es estandar del evento ON TEXT.

[5.1.2]

on 1:text:*:?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) { }

}

linea 2: Hace que cierre todas las ventanas de privado que se le abran, como es un bot al cabo de un tiempo se le abriran muchas y no las necesita tener abiertas.
linea 3: Crea una variable con el canal que queramos que se use el bot.
linea 4: Es un comparador que hace lo siguiente traducido asi: si ("la 1ra palabra escrita" es = a "!lanza") y ("el usuario que habla" es @ en "%elcanal") entonces haz lo que hay entre corchetes { osea todo sto... q viene ahora... }

[5.1.3]

on 1:text:*:?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) {
set %bot-admin $nick
msg $nick La sintaxis seria asi: mod version ip password cd: on/off
msg $nick Ejemplo de uso: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
msg $nick Para quitar la partida pon !cancela
}

}

linea 5: crea una variable con el nombre del admin que a activado la paxanga, para que solo el pueda cancelarla y activarla posteriormente.
lineas 6 7 y 8: les manda un mensaje al user indicandole el modo de uso para lanzar la paxanga.
linea 9: cierra el comparador if que hemos abierto.

[5.1.4]

on 1:text:*:?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) {
set %bot-admin $nick
msg $nick La sintaxis seria asi: mod version ip password cd: on/off
msg $nick Ejemplo de uso: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
msg $nick Para quitar la partida pon !cancela
}
else if ($1 == !cancela) && ($nick == %bot-admin) && ($nick isop %elcanal) { }
}

linea 10: Os acordais del if que e esplicado antes, ese q decia si ("la pa...
Pues el else if hace mas o menos lo mismo solo que se ejecuta cuando el primer if que emos puesto no cumple las condiciones.
Por ejemplo si la primera palabra que abia escrito no era !lanza pues se vendria directamente a la linea 11 y miraria sus condiciones, que las esplico a continuacion.
o si ("la 1ra palabra escrita" es = a "!cancela") y ("el usuario que habla" es = a "el usuario que guardamos en la variable %bot-admin") y ("el usuario que habla" es @ en "%elcanal") entonces haz lo que hay entre corchetes { osea todo sto... q viene ahora... }

[5.1.5]

on 1:text::?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) {
set %bot-admin $nick
msg $nick La sintaxis seria asi: mod version ip password cd: on/off
msg $nick Ejemplo de uso: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
msg $nick Para quitar la partida pon !cancela
}
else if ($1 == !cancela) && ($nick == %bot-admin) && ($nick isop %elcanal) {
if (%bot-estado !== on) halt
msg %elcanal Partida cancelada por el Admin %bot-admin
unset %bot-

}
}

linea 11: Es un comparador que ara que pare el script si no se cumple la condicion: si ("la variable bot-estado" no es = a "on") entonces para el script
La variable %bot-estado no la emos definido osea que no tiene ningun valor.
Pero claro tener en cuenta que hasta que no se lance la paxanga el admin no va a poner !cancela porque no esta activada. Asi que despues vereis como la definimos.
linea 12: Mandara un mensaje al canal, que como antes en la linea 3 emos definido cual era el canal, pues ya se sabe cual es a la hora de enviarlo
linea 13: Borra todas las variables con el rango bot-, esto sirve para empezar de nuevo todo por eso le e puesto como un indice al crear todas las variables excepto 2 o tres que deben mantenerse sin borrarse.

[5.1.6]

on 1:text::?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) {
set %bot-admin $nick
msg $nick La sintaxis seria asi: mod version ip password cd: on/off
msg $nick Ejemplo de uso: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
msg $nick Para quitar la partida pon !cancela
}
else if ($1 == !cancela) && ($nick == %bot-admin) && ($nick isop %elcanal) {
if (%bot-estado !== on) halt
msg %elcanal Partida cancelada por el Admin %bot-admin
unset %bot-

}
else if ($nick == %bot-admin) && ($nick isop %elcanal) { }
}

linea 14: Al igual que el else if anterior, este es lo mismo, si no se cumplen las condiciones de los dos primeros pasa a la linea 14 directamente.
o si ("el usuario que habla" es = a "el usuario que guardamos en la variable %bot-admin") y ("el usuario que habla" es @ en "%elcanal") entonces haz lo que hay entre corchetes { osea todo sto... q viene ahora... }

[5.1.7]

on 1:text::?:{
close -m
set %elcanal #tucanal
if ($1 == !lanza) && ($nick isop %elcanal) {
set %bot-admin $nick
msg $nick La sintaxis seria asi: mod version ip password cd: on/off
msg $nick Ejemplo de uso: Counter-Strike 1.6 192.168.1.124:27015 paxanga on
msg $nick Para quitar la partida pon !cancela
}
else if ($1 == !cancela) && ($nick == %bot-admin) && ($nick isop %elcanal) {
if (%bot-estado !== on) halt
msg %elcanal Partida cancelada por el Admin %bot-admin
unset %bot-

}
else if ($nick == %bot-admin) && ($nick isop %elcanal) {
if (%bot-estado == on) halt
set %bot-mod $1
set %bot-ver $2
set %bot-ip $3
set %bot-pass $4
set %bot-cd $5
set %bot-estado on
set %bot-cuena 0
set %bot-cuenb 0
msg %elcanal Pon !juego !juego a o !juego b para añadirte y para kitarte de la partida !kitame
eltopic

}
}

linea 16: Es un comaparador que mira si el estado de la variable %bot-estado es igual a on y si lo es para el script, porque si la pachanga esta lanzada y por error vuelves a poner texto para q no lo almacene ponemos esa linea.
lineas 17 18 19 20 21: Debes de saber que cuando actua un on text el identificador $1 da el valor de la primera palabra escrita y si pones $2 dara la segunda palabra escrita y asi sucesivamente.
Asi que teniendo en cuenta la linea 6 y 7 del script cuando el admin escriba la linea creara las variables que emos puesto ahi conforme los que escriba el.
Mira las lineas y estudialo entonces entenderas la relacion que intento esplicar.
linea 22: Es la variable que emos nombrado un par de veces antes, que la creo para mostrar y comparar posteriormente si ya hay alguna pachanga lanzada. De esta manera si se intenta crear otra pachanga al estar esta variable en on pues le negara el permiso.
lineas 23 y 24: Crea un par de variables las cuales despues entendereis su funcion, pero que ahora no vienen al caso esplicarlas.
linea 25: Manda un mensaje al canal esplicando los parametros de la pachanga lanzada.
linea 26: Se va al alias eltopic que acontinuacion vamos a hacer en el apartado [5.2].


[5.2] El alias de /eltopic

Lo hago asi porque el contenido de ese alias lo vamos a usar en varios sitios y ocasiones y de esa manera no tengo que copiar el mismo codigo varias veces si no que con una vez sobra. Por eso vamos a usar varios alias :D

[5.2.1]


alias eltopic {
}

linea 1:A diferencia de los eventos remotos, los eventos remotos actuan con eventos propiamente dichos xD. Por ejemplo cuando abren un privado (on query), cuando se escribe en un canal/privado (on text), cuando entras/entran a un canal (on join)...
Sin embargo los alias actuan cuando son llamados, osea cuando los ejecutamos. Que quiere decir esto? Pues para llamarlos basta con pone en status /el-nombre-del-alias en este caso seria /eltopic. Y que hara? pues los comandos que tenga entre corchetes igual que un evento remoto.

[5.2.2]

alias eltopic {
topic %elcanal %bot-mod ( $+ $calc(%bot-cuena + %bot-cuenb) $+ /10) [Team-A] %bot-team-a1 - %bot-team-a2 - %bot-team-a3 - %bot-team-a4 - %bot-team-a5 ( $+ %bot-cuena $+ /5) [Team-B] %bot-team-b1 - %bot-team-b2 - %bot-team-b3 - %bot-team-b4 - %bot-team-b5 ( $+ %bot-cuenb $+ /5)

if (%bot-cuena == 5) && (%bot-cuenb == 5) lanza
}

linea 2: Cambia el topic. Fijaros en las lineas 23 y 24 del Sistema de Administracion [5.1.6] set %bot-cuena 0 set %bot-cuenb 0.
Son esas Si os fijais definimos el valor a 0 en las dos, ( $+ $calc(%bot-cuena + %bot-cuenb) $+ /10) esto que veis no es ni mas ni menos que cada vez que se añada uno a la pachanga pondra (1/10) eso lo pondra en el topic y si solo falta un jugador para completar la pachanga entonces pondra (9/10).
El signo $+ hace que podamos jungar texto normal con un identificador, que en nuestro caso es el $calc() entonces el identificador $calc lo que hace es que suma las dos variables que definimos a 0. Si no las hubiesemos definido en vez de salir un 0 no saldria nada, por eso hay que definirlas antes de ejecutar este alias.
Lo demas es lo mismo como todabia no estan definidas las variables de los jugadores %bot-team-a1 %bot-team-a2 ... pues saldran en blanco como que no hay nadie en ese puesto.
Esto es lo mismo que el anterior ( $+ %bot-cuena $+ /5), solo que no ha echo falta sumar porque es el especifico de cada Team.
linea 3: Es un comparador que entendereis cuando espliquemos el punto [5.3] y [5.7]


[5.3] Sistema para usuarios

Ya hemos esplicado el sistema de administracion, donde el administrador ha lanzado una pachanga para que la gente se apunte al canal.
Ahora vamos a hacer un evento remote que actuara en el canal, en vez de en privado.

[5.3.1]


on 1:text:*:#tucanal:{
}

linea 1: El * identifica que se activara con cualquier palabra y en el canal #tucanal que obiamente tendreis que modificar. El 1 es para que actue con todos los usuarios ya que no hemos definido a ninguno, aunque tambien puede ir con *. Lo demas es estandar del evento ON TEXT.

[5.3.2]

on 1:text:*:#tucanal:{
if ($1 == !juego) { }
}

linea 2: En un bot de pachangas para añadirte normalmente pones !add, Pues yo como soy de españa pongo !juego xD y de esa manera te añadira a la lista. Asi que el comparador dice si ("la primera palabra" es = a "!juego") az lo que hay entre corchetes { osea todo sto... q viene ahora... }

[5.3.3]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}

}
}

linea 3: Comprueba si la variable %bot-estado tiene como valor "on" si no esta con ese valor entonces parara el script. Esa variable la usamos para indentificar si el bot esta activo. La variable la definimos en el apartado [5.1.7]
linea 4: En un bot de pachangas tienes la opcion de agregarte al equipo a o al equipo b, pues para eso sirve este comparador. si ("la segunda palabra" es = a "a") az lo que hay entre corchetes { osea todo sto... q viene ahora... }
linea 5: Si cumple las condiciones la linea 4 entonces se ira al alias "mira" con el primer parametro "a" y el segundo parametro el nick del usuario. Esto esta mejor esplicado en el apartado [5.4.2]

[5.3.4]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}

}
}

linea 7: Al igual que la linea 4 pues en vez de ser con el equipo "a" sera con el "b".
linea 8: Si cumple las condiciones de la linea 7 pues se ira al alias "mira"

[5.3.5]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) { }
}
}

linea 10: Pero claro a la hora de agregarte si tu no sabes lo de "!juego a" o "!juego b" y de echo te da igual un equipo que otro pues con que ponga el usuario "!juego" se le debe agregar. Y esto formula otro problema, porque cada vez que se agrege uno sin especificar equipo nuestro bot tiene que decidir a que equipo debe meterse, para que no vayan solo al equipo "a". Asi que tendremos que programarlo para que vaya alternando con el equipo "a" y el equipo "b".
Ahora esplicar el comparador. Que es como todos los else if. Si no cumplen las condiciones los comparadores anteriores entonces se ira a esta linea.
o si ("la segunda palabra" no es = a "a") o ("la segunda palabra" no es = a "b") az lo que hay entre corchetes { osea todo sto... q viene ahora... }

[5.3.6]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }

}
}
}

Bueno volvemos a lo de siempre, si cumple las condiciones de la linea 10 entonces hara la linea 11 que es un comparador.
Me va a ser un poco dificil de esplicar pero aya vá. En el alias "mira" hago que cada vez que agrege uno al equipo "a" le sume un numero a la variable %bot-cuena. De esta manera se si hay 2 3 o 4 usuarios en el equipo "a". Y en este caso para que sirve esto?
Pues cuando un usuario ponga "!juego" en vez de "!juego a" o "!juego b". Pues deberemos comprobar en que equipo hay menos usuarios metidos. Por ejemplo si en el equipo "a" hay 4 jugadores y en el equipo "b" hay 3 jugadores inscritos debemos agregarselo al "b" Para que hayan 4 y 4 no 5 y 3.
Pues estas 3 lineas de comparadores sirven para eso.

linea 11: si ("la variable %bot-cuena" es menor que "la variable %bot-cuenb") entonces az lo que hay entre corchetes { mira a $nick } El alias mira se esplicara mas adelante.
linea 12: o si ("la variable %bot-cuenb" es menor que "la variable %bot-cuena") entonces az lo que hay entre corchetes { mira b $nick } El alias mira se esplicara mas adelante.
linea 13: El else a diferencia del else if actua de manera que si no se cumplen ninguno de los comparadores hace lo que hay entre corchetes.
si no az lo que hay entre corchetes { mira a $nick } El alias mira se esplicara mas adelante.

[5.3.7]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }
}
}
else if ($1 == !kitame) { }
}

linea 16: Si con la palabra "!juego" nos agregabamos a un equipo, necesitamos una palabra clave que sirva para quitarnos no?. Que en este caso yo he puesto "!kitame".
Pues lo de siempre si la primera palabra no es "!juego" pues entonces se vendra a la linea 16 y mirara el comparador que es el siguiente.
o si ("la primera palabra" es = a "!kitame") entonces az lo que hay entre corchetes { osea todo esto que viene ahora... }
Espero que te estes enterando asta ahora porque todabia queda lo mas dificil por esplicar xD

[5.3.8]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }
}
}
else if ($1 == !kitame) {
set %bot-n 0
while (%bot-n < 5) { }

}
}

El while lo que hace es que realiza todo lo que hay entre corchetes repetidas veces y no parara mientras que se este cumpliendo la condicion que hay entre parentesis. En el ejemplo de esta misma linea repetira el bucle hasta que la variable "%bot-n" sea mayor que 5.
Si recordais en la linea anterior definiamos la variable "%bot-n" a 0 y despues tendremos que hacer una linea para que sume de 1 en uno la variable porque si no la condicion nunca se cumplira y nuestro mIRC se quedara en no responde xD porque es un bucle sin fin.

linea 17: Define la variable %bot-n a 0. Luego nos servira porque tenemos que hacer un bucle.
linea 18: Os acordais lo que hacia un if? si se cumplia la condicion que poniamos entre parentesis "()" hacia todo lo que habia entre corchetes.
Pues el while lo que hace es que realiza todo lo que hay entre corchetes repetidas veces y no parara hasta que se cumpla la condicion que hay entre parentesis. En el ejemplo de esta misma linea repetira el bucle hasta que la variable "%bot-n" sea mayor que 5.
Si recordais en la linea anterior definiamos la variable "%bot-n" a 0 y despues tendremos que hacer una linea para que sume de 1 en uno la variable porque si no la condicion nunca se cumplira y nuestro mIRC se quedara en no responde xD porque es un bucle sin fin.

[5.3.9]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }
}
}
else if ($1 == !kitame) {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
if ($address($nick,2) == %bot-ip-a [ $+ [ %bot-n ] ]) { }

}
}
}

linea 19: Es lo que comentabamos antes, que necesitabamos hacer una linea para que sumara de uno en uno y el bucle (while) tenga fin. Pues con inc %bot-n sumamos de uno en uno. Aunque tambien podeis usar set %tuvariable $calc(%tuvariable + 2) eso seria en el caso de que quisieramos sumar de dos en dos. Pero tambien podeis restar multiplicar y dividir.
linea 20: Si hacemos un Whois a alguien sale sto:
Jhosan es jhosan@Jhosan.users.quakenet.org * jhosan
Jhosan en @#cs_reto @#sde
Jhosan está usando *.quakenet.org QuakeNet IRC Server
Jhosan is authed as Jhosan
Jhosan End of /WHOIS list.

Pero nos interesa lo que esta en negrita. Que es la ip virtual y el ident lo que nos sera util para que registremos a la gente por su ip no por el nick. Porque si yo pongo !juego me cambio de nick y pongo otra vez !juego me agrega 2 veces y siempre hay algun cabroncete xD.
Pues con $address(Jhosan,2) nos devolveria !@Jhosan.users.quakenet.org
Y porque el 2 en vez de el 1 o el 3? Pues porque si ponemos el 1 nos lo devuelve todo !jhosan@Jhosan.users.quakenet.org Y lo que esta antes de la @ que es el ident tambien es modificable como el nick.

%bot-ip-a es la variable de la ip del usuario que definimos cada vez que agregamos a alguien al listado. Imaginaros que %bot-n tiene valor 2. Pues esto %bot-ip-a [ $+ [ %bot-n ] ] Es lo mismo que poner %bot-ip-a2.
Asi que ya entendeis el comparador. Si las ips son iguales ara lo que entre corchetes del comparador if.

[5.3.10]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }
}
}
else if ($1 == !kitame) {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
if ($address($nick,2) == %bot-ip-a [ $+ [ %bot-n ] ]) {
set %bot-cuena $calc(%bot-cuena - 1)
notice %bot-team-a [ $+ [ %bot-n ] ] Se te ha borrado de la pachanga
unset %bot-ip-a [ $+ [ %bot-n ] ]
unset %bot-team-a [ $+ [ %bot-n ] ]
eltopic
halt

}
}
}
}

linea 21: Esta linea lo que hace es restar un 1 a la variable %bot-cuena que es la variable que nos da referencia para saber cuantos jugadores hay en cada equipo. Y si lo que estamos haciendo es quitar a un jugador del listado pues tendremos que restar un 1 puesto que hay uno menos.
linea 22: Como esplicamos en la linea 20 si por ejemplo el valor de %bot-n es 3 al poner esto %bot-team-a [ $+ [ %bot-n ] ] es como poner %bot-team-a3. Pues mandara un notice al usuario que contenga esa variable notificandole que se le ha borrado.
linea 23: Borrara esa variable.
linea 24: Borrara esa variable.
linea 25: Va al alias el topic que esta esplicado en el apartado [5.2]
linea 22: El comando halt interrumpe el script y deja de hacer todo lo que este o vaya a hacer. Ya que hemos borrado al un usuario no nos interesa que siga con el script.

[5.3.11]

on 1:text:*:#tucanal: {
if ($1 == !juego) {
if (%bot-estado !== on) halt
if ($2 == a) {
/mira a $nick
}
else if ($2 == b) {
/mira b $nick
}
else if ($2 !== a) || ($2 !== b) {
if (%bot-cuena < %bot-cuenb) { mira a $nick }
else if (%bot-cuenb < %bot-cuena) { mira b $nick }
else { mira a $nick }
}
}
else if ($1 == !kitame) {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
if ($address($nick,2) == %bot-ip-a [ $+ [ %bot-n ] ]) {
set %bot-cuena $calc(%bot-cuena - 1)
notice %bot-team-a [ $+ [ %bot-n ] ] Se te ha borrado de la pachanga
unset %bot-ip-a [ $+ [ %bot-n ] ]
unset %bot-team-a [ $+ [ %bot-n ] ]
eltopic
halt
}
}
while (%bot-n < 5) {
inc %bot-n
if ($address($nick,2) == %bot-ip-b [ $+ [ %bot-n ] ]) {
set %bot-cuenb $calc(%bot-cuenb - 1)
notice %bot-team-b [ $+ [ %bot-n ] ] Se te ha borrado de la pachanga
unset %bot-ip-b [ $+ [ %bot-n ] ]
unset %bot-team-b [ $+ [ %bot-n ] ]
eltopic
halt
}

}
}
}

linea 24: Asi acabaria este remote. Hemos añadido un bucle igual que el del apartado [5.3.10].
La diferencia es que hemos modificado las variables:
%bot-ip-a
%bot-cuena
%bot-team-a

Por:
%bot-ip-b
%bot-cuenb
%bot-team-b

Esta claro porque no? Un bucle para cada equipo.


[5.4] El alias de /mira

La funcion de este alias es detectar si el usuario que pone !juega ya esta registrado con anterioridad.
Osea, pa saber si uno se quiere añadir mas de una vez, dicho facilmente xD.

[5.4.1]

alias mira {
set %bot-n 0
while (%bot-n < 5) { }

}

linea 2: La famosa variable %bot-n 0 la que usabamos con frecuencia en el apartado [5.3.8].
linea 3: El bucle while te acuerdas de lo que hacia? Hacia repetidas veces lo que hay en sus corchetes "{ }" hasta que se cumpla la condicion de los parentesis "( )". Esta mejor esplicado en el apartado [5.3.8]

[5.4.2]

alias mira {
set %bot-n 0
while (%bot-n < 5) {

inc %bot-n
if (%bot-ip-a [ $+ [ %bot-n ] ] == $address($nick,2)) { notice $nick Ya estas apuntado como %bot-team-a [ $+ [ %bot-n ] ] | halt }
}
}

linea 4: Suma un 1 al valor de la variable %bot-n
linea 5: Si las ips son iguales mandara un notify diciendole que ya esta apuntado. En el apartado [5.3.9] esta mejor esplicado que casi es lo mismo.

[5.4.3]

alias mira {
set %bot-n 0
while (%bot-n < 5) {

inc %bot-n
if (%bot-ip-a [ $+ [ %bot-n ] ] == $address($nick,2)) { notice $nick Ya estas apuntado como %bot-team-a [ $+ [ %bot-n ] ] | halt }
}
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
if (%bot-ip-b [ $+ [ %bot-n ] ] == $address($nick,2)) { notice $nick Ya estas apuntado como %bot-team-b [ $+ [ %bot-n ] ] | halt }
}
/team- $+ $1

}

linea 7 a 10: Es lo mismo que el apartado [5.4.1] solo que para el equipo b.
linea 12: Mira el apartado [5.3.3] la linea 5, si te fijas cuanto cumple el comparador de la linea 4 lo que aria seria "/mira a $nick"

if ($2 == a) {
/mira a $nick
}

Pues se vendra a este alias, el alias mira y el primer parametro sera "a" y el segundo el nick del usuario.
Por ejemplo si yo pongo:


alias mira {
echo Mi nombre es: $1
echo Tengo $2 años
echo Soy de $3
}

Y despues en status pongo: /mira josema 18 murcia
Me mostraria:

Mi nombre es josema
Tengo 18 años
Soy de murcia

Si te fijas el identificador $1 a josema, $2 a 18 y el $3 a murcia se hace referencia a cada parametro, pues asi con todos los parametros, es facil no?

Pues si miras de nuevo el codigo que nos interesa la linea: /team- $+ $1
Seria lo mismo que poner /team-a suponiendo que se pusiese antes /mira a
O /team-b si se pusiese /mira b


[5.5] El alias de /team-a

Este alias identificara si es posible o no añadirlo al equipo, y si es posible lo añadira registrando sus correspondientes variables.

[5.5.1]

alias team-a {
inc %bot-na
if (%bot-na == 6) { }[/b]
}

linea 2: As visto alguna web que tiene links y que si le pulsas te lleva a una parte mas baja de la web como esto -> http://www.media-vida.net/manuales.php?id=1 .En uno de los links del indice te lleva a una parte mas baja de la web.
Pues las etiquetas son algo parecidas, Nuestra etiqueta se llama :team-a pues si mas abajo ponemos goto team-a se ira a donde este puesta esa etiqueta. Se suele usar para hacer bucles, cuando veamos el funcionamiento lo entenderas mejor porque es posible que no lo hayas comprendido del todo.
linea 3: Incrementamos en 1 el valor de la variable %bot-na.
linea 4: Si el valor de %bot-na es igual a 6 entonces ara lo que hay entre corchetes.

[5.5.2]

alias team-a {
:team-a
inc %bot-na
if (%bot-na == 6) {
notice $nick Ya no quedan plazas para el Team A
set %bot-na 5
team-b
halt

}
}

linea 5: Manda un notice diciendole que no hay plazas en el Team A.
linea 6: Define la variable %bot-na a 5 porque son los que pueden haber en el equipo.
linea 7: Se va al alias /team-b para comprobar si en el team-b le puede agregar al jugador.
linea 8: Parara con el script y dejara de hacer lo que a continuacion viene.

[5.5.3]

alias team-a {
:team-a
inc %bot-na
if (%bot-na == 6) {
notice $nick Ya no quedan plazas para el Team A
set %bot-na 5
team-b
halt
}
else if (%bot-team-a [ $+ [ %bot-na ] ] == $null) { }
goto team-a

}

linea 9: Si no se cumple la condicion de la linea 4 se vendra aquí. Supongamos que %bot-na tiene valor 4.
Si (la variable "%bot-team-a4" es = a "nada") entonces haz lo que hay entre corchetes { todo esto de aki... }
linea 10: Si no se cumplen ninguna de las dos condiciones, entonces se ira a la etiqueta :team-a osea la linea 2 y empezara el proceso de nuevo, es como si pegase un salto hacia arriba. Mira el apartado [5.5.1]

[5.5.4]

alias team-a {
:team-a
inc %bot-na
if (%bot-na == 6) {
notice $nick Ya no quedan plazas para el Team A
set %bot-na 5
team-b
halt
}
else if (%bot-team-a [ $+ [ %bot-na ] ] == $null) {
set %bot-team-a $+ %bot-na $nick
set %bot-ip-a $+ %bot-na $address($nick,2)
notice $nick Se te ha añadido al Team A
unset %bot-na
inc %bot-cuena
eltopic
halt

}
goto team-a
}

Suponiendo que el valor de %bot-na es 4 sera lo siguiente:

linea 10: Define la variable %bot-team-a4 con el nick del usuario que ha puesto !juego.
linea 11: Define la variable %bot-ip-a4 con la ip virtual del usuario que ha puesto !juego, es lo que esplicamos en el apartado [5.3.9] en la linea 20.
linea 12: Manda un notice al usuario avisandole de que se le ha añadido al Team A.
linea 13: Borra la variable %bot-na para que cuando volvamos a usarla este a 0.
linea 14: Suma un 1 al valor de la variable %bot-cuena que es la que usamos para saber cuantos hay en cada team. Como hemos agregado a un usuario nuevo pues abra q sumarle un valor no?. Se usa para mostrar en el alias /eltopic y tambien la usamos en el apartado [5.3.6].
linea 15: Nos vamos al alias /eltopic.
linea 16: Con el comando halt parabamos el script porque no nos hace falta que siga.


[5.6] El alias de /team-b

Esto es lo mismo que el alias team-a solo que habra que cambiar los valores de A por B como es logico, seria tal cual asi:


alias team-b {
:team-b
inc %bot-nb
if (%bot-nb == 6) {
notice $nick Ya no quedan plazas para el Team B
set %bot-nb 5
team-a
halt
}
else if (%bot-team-b [ $+ [ %bot-nb ] ] == $null) {
set %bot-team-b $+ %bot-nb $nick
set %bot-ip-b $+ %bot-nb $address($nick,2)
notice $nick Se te ha añadido al Team B
unset %bot-nb
inc %bot-cuenb
eltopic
halt
}
goto team-b
}


[5.7] El alias de lanza

Una vez completados todos los teams se les mandara un mensaje a cada uno de los jugadores diciendole los datos de la partida. En el apartado [5.5.4] en la linea 15 nos vamos al alias /eltopic. Si ahora nos vamos a la linea 3 del apartado [5.2.2] veremos que pone:
if (%bot-cuena == 5) && (%bot-cuenb == 5) lanza que significa: Si las variables que usamos para contar los usuarios que hay en cada team son iguales a 5, entonces nos vamos al alias /lanza que es en el que estamos.

[5.7.1]

alias lanza {
set %bot-n 0
while (%bot-n < 5) { }

}

linea 2: Definimos la variable %bot-n a 0
linea 3: Creamos un bucle que ara todo lo que hay entre corchetes asta que la variable %bot-n sea mayor que 5.

[5.7.2]

alias lanza {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
msg %bot-team-a [ $+ [ %bot-n ] ] IP: %bot-ip PASS: %bot-pass CD: %bot-cd TEAM: A

}
}

linea 4: Sumamos un 1 a la variable %bot-n
linea 5: Mandamos un mensaje privado a los nicks, Por ejemplo si %bot-n vale 4 mandariamos un mensaje al usuario que correspondiera con la variable %bot-team-a4 diciendole los datos de la partida, los cuales definimos arriba en el apartado [5.1.7].

[5.7.3]

alias lanza {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
msg %bot-team-a [ $+ [ %bot-n ] ] IP: %bot-ip PASS: %bot-pass CD: %bot-cd TEAM: A
}
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
msg %bot-team-b [ $+ [ %bot-n ] ] IP: %bot-ip PASS: %bot-pass CD: %bot-cd TEAM: B

}
}

linea 7 8 9 10: Son las mismas q las del apartado anterior solo que es para el team b.

[5.7.4]

alias lanza {
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
msg %bot-team-a [ $+ [ %bot-n ] ] IP: %bot-ip PASS: %bot-pass CD: %bot-cd TEAM: A
}
set %bot-n 0
while (%bot-n < 5) {
inc %bot-n
msg %bot-team-b [ $+ [ %bot-n ] ] IP: %bot-ip PASS: %bot-pass CD: %bot-cd TEAM: B
}
unset %bot-*
}

linea 12: Borramos todas las variables que empiecen por %bot- por eso todas las variables que hemos echo le hemos puesto este indice de esa manera podemos borrarlas todas de tiron para empezar de nuevo el proceso :D

1
Whose

Yo no se Scripting pero se ve muy completo, muy bueno si señor :)

PePinilLo

Servirá a mucha gente, buen trabajo.

Alperini

muy buen trabajo , pero la gente cuanto menos curre mejor , y eso no es asi,yo ya hize 3 bots de paxanga distintos y mira :D

EnZo

por eso para que se descarguen el bot tienen que leerselo primero, y asi no se lo doy tan facil

PiradoIV

Excelente =)

RedHat

EnZo muy buena idea lo del pw i la pregunta :)

NeThAiRiN

anda xD

Nafar

a ver tengo un problema
el bot me funciona pero no se por que en el canal que pongo en el codigo no va

sin embargo si me meto en otro canal con el bot y soy op le digo por privado !lanza y si me lanza la partida, por que puede ser esto?

tiene algun problema con los puntos en el nombre del canal o algo asi?

D

Muy currao macho, te felicito

Timic

Muy currado, lo he visto por encima y me parece demasiado complicado. Ayer mismo hizo yo un bot para lanzar gathers y que yo sepa funciona correctamente, pero aun no tiene funcion para topic o esas cosas como creo q has puesto.

Dentro de poco publicare el bot con muchas cosas aparte del sistema para gather, lo estoy acabando de hacer pq para mi clan ya funciona pero lo estoy adaptando para que todos puedan utilizarlo. un saludo

KaoS-GFX

Vamos a ver:

Enzo, yo tengo bots, en concreto 3, por cd's si quieres te enseño unas cosillas nuevas, como kick de la lista de A o B... etc...

Muy completo, algo extenso y la gente se asusta, pero mu completo

KaoS-GFX

Una anotación, los .zip, .rar, etc... con programas se puede sacar la pass la pass es to facil sabiendo algo de scripting.

Venga va... os digo la password:
la passowrd es: $glamigososkedaissinpass :P

EnZo

#9 el bot es el que te as bajao de mi perfil? Ya sabes la pass? Si es asi no entiendo la pregunta, no te has esplicado muy bien creo.

#11 Pues si eso cuando lo publiques dimelo q le exe un vistazo.

#12 Todo eso que dices podria hacerlo, pero no es cuestion de complicarlo porque he puesto lo esencial, es un tutorial para que aprendan no para venderlo. El que quiera cuando se haga el suyo propio que lo haga con todas esas opciones que nombras si quiere.

#13 Eres capaz de sacar la pass de un zip? Estando encriptao? Con scripting? Que lenguaje de scripting? hay muchos...

guiye

KaoS-GFX tu eres el amo del scripting :D

Nafar

#14 si es el que me baje de tu perfil pero el problema ahora es que no coge a la gente cuando pones lo de !juego

!juego a o b no hace nada y no se por que puede ser.

Nafar

Estoy probando el que tienes en tu perfil pero no va, falla a la hora de que la gente se una al equipo, por uqe puede ser eso? una vez que dice partida lanzada por tal pon !juego para jugar !juego a !juego b !termina y todo eso, pues ninguno de esos comandos funciona.

K

1_. Como hago para que cuando alguien ponga !juego ( a ó b ) en vez de cambiar el topico con "[Team- a] tal tal tal y [Team-b] tal tal tal, lo diga por msg normal al canal, lo e intentado pero cuando pongo !add a, no salgo.. salgo cuando alguien vuelve a poner !juego a ó !juego b. ( Editado: vale esto lo acabo de conseguir xD )

2_. El de tu perfil hace query con ip & pw? Como le meto la ip y la pw, si no hace query, alguien sabe como sería?

Thx x adelantado :)

EnZo

#16 #17 #18 Lo he probao varias veces porque creia realmente que tenia errores, pero va perfectamente.
Esque seguramente vosotros tendriais un concepto diferente al mio de como usarlo, y es normal porque yo nunca he visto como administrar ninguno y el que yo he hecho me lo e inventao.

He editao el post y he añadio un nuevo apartado explicando el modo de uso. Leeroslo si eso es el apartado [3.1]

#18 Porcierto el de mi perfil es el mismo que el del tutorial xD
Solo que el del tutorial esta desmenuzao :)

K

aver..... le ago query al bot:
!lanza
Counter-strike 1.6 <la ip> <la pw> <cd>

se añaden los 10 y.....
TAchaAnnNNNnnNNn
no pasa nada :) el bot no da la ip ni naaaaaaah :(

EnZo

y xq ami si me va? xD le he kitao las protecciones para que deje meter usuarios con mismo nick y pongo varias veces

!juego
!juego
!juego

asi asta 10 veces y como uso el ircap las protecciones antiflood le ponen un ignore al bot y sera por eso por lo que no te llega los mensajes, xq lo he probao y va kitando las protes...

enviar lo envia

K

1._ Eramos 10 diferentes y no se lo envio a ninguno :S
2._ No tengo el ircap y mi script no tiene activadas las protecciones antiflood
3._ :(

EnZo

Tengo el mirc a pelo y si me va, t lo puedo asegurar, cuando quieras lo probamos si quieres :)

Nafar

Enzo era fallo mio si rula perfectamente, era de los mas sencillo la solución, pero yo estaba dandole vueltas a todo excepto a lo mas facil. jajajajaajaja cuando di con ello me daba de cabezazos.

Bueno muy buen tutorial.

EnZo

xD

Malegro q t vaya :D

Nafar

Eso si para poder quitar el admin a alguien de la lista de jugadores? como lo puede hacer? o que tendria que hacerse?

K

enzo. cuando, y donde tu quieras XD


<>@MyBot<> Counter-Strike (10/10) [Team-A] oFF^^ - oFF^^ - oFF^^ - oFF^^ - oFF^^ (5/5) [Team-B] oFF^^ - oFF^^ - oFF^^ - oFF^^ - oFF^^ (5/5)

Y ahi acaba todo, no query, no msg, no notice :(


Editado: ara si escribo /lanza dsd el script donde tengo el bot si lanza.. pero yo lo querria para ke pudieran lanzar otras personas si no estoy yo.. porq solo lanza si dsd mi script pongo /lanza xD

KaoS-GFX

#14 no :P
Que digo que hay programas que te la desencriptan y te la dan en 3 secs... por eso, que mejor ponla descarga via web con pass en php o algo, porque la peña que no se esfuerza la saca en un min

murpix

Señor KaoS veo que como siempre intentas demostar a la gente, más de lo que en realidad sabes, a estas alturas no se a quien intentas engañar, de scripting -1, asi como de cualquier lenguaje de programacion, y respecto a sacar las pw de *.zip, no se donde vives con eso de que la sacas en 3sg, puesto que los 100000 programas que hay por ahi no valen para nada, por la sencilla razon de que casi todos funcionan por fuerza bruta, y son una mierda, si tienes idea sobre cracking, con algun debugger o ensamblador seguro que la puedes sacar, pero no creo que sea tu caso, asi que no se donde vives tu.

P.D: Si has sacado alguna pass de algun zip las estadisticas pueden ser 1 entre 100 y me quedo corto, no creo que eso sea digno de alabar. Ah y por cierto dime como sacas una password que esta en *.zip con scripting porque ahi si ya que me he perdido.

Buen manual :)

Dr4g0nK

hola mu wen tutorial :P he aprendido monton pero toavia no se cual es la pass :S weno la q creo q es no me la acepta :S nga campeon sigue asi
:P

Usuarios habituales