Motor de Theme´s
Prologo: Aqui no me enrollare mucho y simplemente distinguiré entre lo que es el theme y el motor del theme (ya que muchos se confunden). El theme (tema) es simplemente el estilo con el que se vera nuestro script, el motor del theme es quien hace que funcione el theme.
Esto significa que todos los themes no son compatibles entre si, pues cada cual hace el motor de themes a su manera, aunque puedes 'copiar' la forma con la que funcione algún motor de themes de un script y asin vuestros themes serán compatibles (ojo he dicho copiar la forma de hacerlo no plagiar el motor del theme). Otra alternativa muy llamativa es fabricar un motor de themes con formato MTS (mIRC Theme Standar) el cual tiene grandes expectativas ademas de existir montones de themes -y para todos los gustos- para este sistema.
Introducción: Esto es algo que todo el que este leyendo este tutorial debería saber, aunque como muchos pretenden aprender a correr antes de andar perderé unos minutos en repasar algo que deberías saber ya.
¿Por que en algunos eventos se usa ^? ¿Que diferencias existen entre halt y haltdef? Empezando por partes, para poder usar haltdef en un evento este debe de llevar el 'gorrito' ( ^ ).
on ^*:text:*:#:{ bla bla bla | haltdef }
En segundo lugar, halt (como deberias saber) para la ejecucion del evento. Esto significa que el evento deja de ejecutarse y si colocais otro evento detras no se ejecutara (si hay un halt se para de ejecutar el evento y los que vengan detras no saltan), por esto a muchos no le funcionan algunos codigos; porque su evento esta halteado luego los posteriores no saltan. Esto aunque parezca una tontería es un fallo que comenten el 90% de los scripters jovenes -y no tan jovenes- y es un suplicio para aquellos que se dedican a programar addon´s; la principal manía de los scripters es usar halt por todos lados.
on *:text:*:#:{ bla bla bla | halt }
on *:text:*:#:{ bla bla bla | halt } <--- Este evento no llegara a saltar, pues hay un evento anterior -del mismo tipo- que esta halteado.
¿Por que haltdef?, haltdef a diferencia de halt no para la ejecución del evento, solo para la respuesta que mIRC daría por defecto ante ese evento. Para verlo mas claro usaremos un ejemplo:
on ^*:mode:#:{ haltdef } <--- La respuesta normal que daría mIRC cuando alguien cambia los modos, como por ejemplo dar op seria: nick1 set mode +o nick2. Sin embargo en este ejemplo como lo tenemos halteado, mIRC no mostrara nada.
Como ya habréis intuido esto es esencial para hacer un motor de themes, pues solo corta el texto que mIRC nos enseñaría, pero la ejecución continua de forma normal (el resto de eventos iguales se seguirán ejecutando)
Materia: Para construir un motor de themes lo unico que debemos de hacer es crear los distintos eventos donde mIRC nos mostrarian un texto por defecto, colocar el texto que nosotros queremos y haltearlos usando haltdef. Un ejemplo de como iria la cosa.
on ^*:join:#:{ if ($nick == $me) { echo $chan Entras a $chan } | else { echo $chan $nick entra a $chan } | haltdef }
on ^*:text:*:#:{ echo $chan $nick $+ >>: $1- | haltdef }
on ^*:notice:*:#:{ echo $chan Notice ( $+ $chan $+ ) $nick $+ >>: $1- | haltdef }
on ^*:notice:*:?:{ var %s = 1 | while ($comchan($nick,%s)) { echo $comchan($nick,%s) Notice $nick $+ <<: $1- | inc %s } | haltdef }
Aquí os pongo una pequeña lista con los eventos que como mínimo deberías de modificar:
Action
FileRcvd
Input
Kick
Notify
Text
Active
FileSent
Invite
Mode
Part
Topic
Ctcp
GetFail
Join
Notice
Quit
Unotify
Consejo 1: Tal y como estaba anteriormente, el motor es perfectamente valido, sin embargo es muy incomodo a la hora de crear nuevos themes pues debemos de ir 'rebuscando' en el código. Normalmente lo que se hace es llamar a un identificador que creamos para tal efecto o bien leer en un archivo el estilo con que debe ser mostrado. Un ejemplo con el sistema de identificadores:
on ^*:join:#:{ if ($nick == $me) { echo $chan $join-m(0,$chan) } | else { echo $chan $join-o($nick,$chan) } | haltdef }
on ^*:text:*:#:{ echo $chan $text-o($nick,$chan,$1-) | haltdef }
on ^*:notice:*:#:{ echo $chan $notice#-o | haltdef }
on ^*:notice:*:?:{ var %s = 1 | while ($comchan($nick,%s)) { echo $comchan($nick,%s) $notice?-o($nick,$chan,$1-) $1- | inc %s } | haltdef }
alias join-m return Entras a $2
alias join-o return $1 entra a $2
alias text-o return $1 $+ <<: $3-
alias notice#-o return [Notice $1 ( $+ $2 $+ )]: $3-
alias notice?-o return [Notice $1 $+ ]: $3-
Este sistema, es más cómodo para fabricar posteriormente nuevos themes. Pues únicamente debemos de ir sustituyendo el texto o cambiando los colores.
Consejo 2: Este sera algo obvio para muchos aunque mejor decirlo, el theme es conveniente que valla en un .ini (no en un .mrc u otro) y es mejor que se cargue como un alias y no como un remote. Con esto se reducirá dramáticamente el tamaño del theme ademas de aumentar la velocidad del motor de themes.
Fuente
¡Advertencia: Spoiler!