Motor de Theme´s


Prologo: Aqui no me enrollare mucho y simplemente distinguire entre lo que es el theme y el motor del theme (ya que muchos se lian). 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 algun motor de themes de un script y asin vuestros themes seran 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 espectativas 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 deberia saber, aunque como muchos pretenden aprender a correr antes de andar perdere unos minutitos en repasar algo que deberias 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 paresca una tonteria 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 mania 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 ejecucion del evento, solo para la respuesta que mIRC daria por defecto ante ese evento. Para verlo mas claro usaremos un ejemplo:

on ^*:mode:#:{ haltdef } <--- La respuesta normal que daria 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 habreis intuido esto es esencial para hacer un motor de themes, pues solo corta el texto que mIRC nos enseñaria, pero la ejecucion continua de forma normal (el resto de eventos iguales se seguiran 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 }


Aqui os pongo una pequeña lista con los eventos que como mínimo deberias de modificar (los subrayados son esenciales):

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 codigo. 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 comodo para fabricar posteriormente nuevos themes.Pues unicamente 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 reducira drasticamente el tamaño del theme ademas de aumentar la velocidad del motor de themes.


PD: Si no has entendido este tutorial, en el cual se recoge lo más básico que hay que saber para hacer un motor de themes, probablemente es que como ya dije antes tratas de aprender a correr antas de andar. Leete antes todos los tutoriales sobre alias, variables, condicionales, bucles y remotes; hasta que no sepas usarlos, dudo que puedas entender este tutorial. Si crees que sabes todo lo mínimo que hay que saber y no entendiste algo o nada mandame un mail con las objeciones que veas en el tutorial (Si me mandais cosas como: 'no entendi nada', 'me lo puedes explicar mejor', o similar entendere que no teneis la base necesaria y no respondere al mail; mandar dudas concretas).