rayco Cuando el número de usuarios en el canal, sea menor a 100 pondrá el limite en 100, de lo contrario el numero de usuarios en +10(cada ves que exista una entrada nueva, siendo igual o superior a 100 usuarios en el canal).
Toma en cuenta que si es muy concurrido estará modificando el limite constantemente, por eso eran los if's de si no existe limite que lo ponga en 100 y si existe el limite pero esta en un número mayor o menor a 100. (siendo que en usuarios menor a 100 no se verán los cambios de limite en el canal, pero si se estarán mandando)
quizás lo visualices mejor si se comentan las lineas:
on *:join:#canal:{
; -- si la cantidad de usuarios es menor a 100 entonces entra en el primer if
if ($nick($chan,0) < 100) {
; -- si No existe un limite en el canal(+l) lo coloca en 100
if ($chr(108) !isin $chan($chan).mode) { mode $chan +l 100 }
; -- de lo contrario, existe el limite pero es superior a 100 y los usuarios
; -- en el canal son menos de 100 en el canal evaluados en el primer if, hace el cambio
else {
if ($gettok($chan($chan).mode,2,32) > 100) { mode $chan +l 100 }
; -- notese que no se toma si es igual a 100
}
; -- cierre del primer if
}
/*
de lo contrario si es que son mas de 100 en el canal, hace un incremento de 10
pero el incremento lo hace en un periodo de un seg por entrada, pero si entran
2 usuarios uno detrás de otro en un limite de 110, cada segundo hará el incremento.
tal ves sea mejor poner un delay más amplio y considerar si los usuarios son están
en un rango del limite de 1, es decir si el limite max del canal y usuarios son 1 de diferencia.
*/
else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}
mientras que:
on *:join:#canal:{
; -- cuando los usuarios del canal son menores a 100, pone un limite en el canal en 100
; -- sin importar si tiene o no limite el canal
if ($nick($chan,0) < 100) { mode $chan +l 100 }
; -- de lo contrario sube el limite en usuarios del canal(+l) de 10 en 10,
; -- si están 101 usuarios pasara el limite a 111 y si entra otro pasara a 112, sucesivamente.
else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}
Siendo que en ambos código el ultimo else, podría, hacer el cambio si estuvieran 109 usuarios pasen a 120, pero si son 108 se mantendrá en 110
así que si fueran 115 usuarios en sala se mantendrá en 120, pero si el limite esta en 100 y son más 100 usuarios, pondrá un limite de 110
hasta que llegue a una cantidad de usuarios de 109, incrementara a 120
else {
if ($calc($gettok($chan($chan).mode,2,32) - $nick($chan,0)) <= 1) { .timerSube_Limite $+ $chan 1 3 mode $chan +l $calc($nick($chan,0) + 11) }
}
el timer se dejo con un retraso de 3, para evitar join masivos para que no cambie el limite muy rápido.
Aunque si lo miras con atención, y solo pusieras el if, quizás también fuese una solución simple, debido a que siempre que el limite este a diferencia de menor o igual a 1, pondrá un limite de +11, como dije arriba en valores de 100 en adelante, pero si fuera un canal con 35 usuarios con un limite 40, no pasaría nada, hasta que subieran a 39, el problema seria si se quedara en 40 el limite y los usuarios bajaran a 15
rayco Debo hacer notar que solo me he basado en los códigos que pusiste así como el de
_M3xiC4n0_yo lo que haria seria:
on *:join:#canal:{
; -- Crear 4 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
; -- limite maximo a 100 y la variable del valor de +l si es que existe un modo en el canal.
var %limite 100, %l.modo $gettok($chan($chan).mode,2,32)
;---- Inicio de los if's
; -- si son menos de 100 los usuarios entonces
if (%usuarios < %limite) {
; -- si existe un limite en el canal y es el mismo que el limite de 100, va al final y no hara nada
if (%l.modo = %limite) { goto fin }
; -- pero si no existe el limite en el modo del canal y siendo menores a 100, se va al timer para asignarlo.
goto L1
}
/*
a partir de aquí serán más de 100 los usuarios del canal, es decir que:
si son más de 100 y existe el modo de +l, pero esta cercano a cumplirse
digamos que 109 usuarios y con el canal en +l 110, entonces pasara a 120, en caso
de que no exista un limite en el canal lo asignara. Usuarios +10 y redondeados a su máximo de 10 en 10
pero si son 108 y el limite del canal en 110, pasara al fin, sin modificar el modo del canal.
*/
if ($calc(%l.modo - %usuarios) <= 1) { %limite = %limite.max | goto L1 }
; -- Pero si existe un modo con limite igual al máximo permitido, ira directo al final.
if (%l.modo = %limite.max) { goto fin }
:L1
.timerSube_Limite $+ $chan 1 3 mode $chan +l %limite
:FIN
}
Esto ultimo esta escrito solo de forma empírica, por lo que
No lo he probado y la variable %limite seria la base del control, es decir que tu base de usuarios no quieras que sea a partir de 100, sino que sea a 50 u otro. De todas maneras están los comentarios por si surgiera una duda de algo no contemplado, que son los que alargan el código

uno más simple sin limite base y que va a variando de cada 10 cuando se llega al máximo de usuarios es
on *:join:#canal:{
; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
; -- la variable del valor de +l si es que existe un modo en el canal.
var %l.modo $gettok($chan($chan).mode,2,32)
; -- si no tiene modo lo pone al max, de +10 y termina.
if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera 10 y si son 10 serán 20
*/
if (%l.modo != %limite.max) { mode $chan +l %limite.max }
}
Basado en el anterior, igual sin probar.
Saludos
rayco