MIRC Scripting a partir de mIRC 6.0 - Variables and tablas hash

3 - Variables and tablas hash

[editar]
Tutorial creado por t0m|ta. Extraido de: http://www.tomatoma.ws/articulo.php?topic_id=125&forum_id=18
09 de Marzo de 2006
Tanto las variables como las tablas hash se ven muy afectadas por la capacidad multiserver y si las variables no están definidas correctamente el script se puede hacer un lío monumental.
Aunque hemos dicho que los scripts funcionan igual que antes, y que los identificadores devuelven los valores de la red en la que se ejecute el scrip; las variables y las tablas hash permanecen globales.
El valor de las variables lo establecemos nosotros así que se establecemos una %variable con un valor X, este valor seguirá siendo el mismo independientemente de la red en la que estemos, pues no son valores que dependan de la red, sino de nosotros.
Se nuevo vamos a conectarnos a dos servidores para ver un jemplo de lo que queremos decir.
Abre una conexión y en la ventana de estado escribe:

|| Código: ||
|| /set %test uno ||


Y luego escribe

|| Código: ||
|| echo -a El valor de $+(%,test) es %test ||


El resultado del echo será "El valor de %test es uno".
Ahora escribe otra vez
|| Código: ||
||
echo -a El valor de $+(%,test) es %test ||


verás que el valor de %test sigue siendo el mismo.
El mismo principio se aplica a las tablas hash.
Lo que todo esto quiere decir es, que si por ejemplo tienes un evento ONTEXT para el que has definido algunas variables, esas variables tendrán los mismos valores en todas las conexiones.
Veamos un ejemplo

|| Código: ||
|| on @*:text:*tonto*:#mirc:{
     inc %tonto [ $+ [ $wildsite ] ] 1
     if (%tonto [ $+ [ $wildsite ] ] > 1) {
       kick # $nick ya está bien de decir tonterías!
       unset %tonto [ $+ [ $wildsite ] ]
     }
   } ||


Lo que hacemos es establecer una variable %tonto*!*@*wildsite e incrementarla cada vez que alguien dice tonto. Si el valor de la variable es mayor que uno, la persona que haya dicho "tonto" será expulsada del canal.
Este tipo de script no causa ningún problema en los antiguos mIRC, pero desde la versión 6.0 la cosa cambia.
Supongamos que el usuario y tú estáis en el canal #novatos tanto en undernet como en dalnet. Si el usuario dice tonto en dalnet, la variable se incrementará, así que si la persona dice "tonto" en undernet, cómo la variable está ya incrementada le kikearás, aunque en ese canal sólo ha dicho una vez!
Aunque hemos puesto un ejemplo muy tonto, el efecto afecta a todo, por ejemplo los scripts de protección de flood.
Para resolver los posibles conflictos, hay que establecer variables más dinámicas. Utilizar los identificadores $server y $network no será suficiente.
$server puede darte problemas si estás conectado dos veces en el mismo servidor, y con $network pasa lo mismo; además hay servidores que no responden al identificador $network (por ejemplo EFNet)
NOTA: utiliza $cid al establecer variables. $cid es un nuevo identificador que devuelte el "id" de la conexión ( "Connection ID" ). Básicamente mIRC asigna a cada conexión un identificador con número único. Así en vez de hacer:

|| Código: ||
||    /set %Flood $+ $chan $+ $wildsite 1
   ; esto crea la variable  a %Flood#Channel*!*@*.wildsite . ||


Tendrías que hacer

|| Código: ||
||    /set %Flood $+ $cid $+ $chan $+ $wildsite 1
   ; creas  %Flood1#Channel*!*@*.wildsite variable. ||

La única diferencia es que el primer método no tiene un 1 después de %flood, el 1 es un ejemplo, el $cid puede ser cualquier número entero excepto 0.
con esto lograríamos variables únicas y evitaríamos posibles conflictos.
NOTA: para evitar el problema del identificador $network con un valor $null es añadiendo un servidor en el servers.ini especificando su grupo con el nombre real de la red. Se pueden añadir servidores en las opciones del mIRC en la pestaña de conexión.
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'MIRC Scripting a partir de mIRC 6.0'

Este artículo está basado en "A Scripting Guide to mIRC 6. 0" de blue-elf belf@mircscripter.... Más »
MIRC dispone de un lenguaje de programación propio, que permite convertirlo en una de las... Más »

Autor y licencia de 'MIRC Scripting a partir de mIRC 6.0'

Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.