El input del usuario es más complejo porque tiene que meter rangos de frames y frames sueltos (como el script de Slime).
Vaya, entonces sí, es lo que decías, hay que crear un pequeño parser. Acabo de crear uno. No está muy probado, pero aparentemente funciona.
Código:
Fn parseframes strframes = (t- Array donde se almacenaran los frames como enteros tlocal frames = #() t- Extraemos los frames que están separados por comas tlocal tokens = filterstring strframes, t- Si no hay frames, salimos tif tokens, count == 0 do (t return undefined t) t- Recorremos todos los tokens (frames, ya sean sueltos o en forma de intervalos) tfor token in tokens do (t - Si no encontramos el carácter - Significa que es un frame suelto if (findstring token -) == undefined then (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames (token as integer)) == 0 do (t - Replaceamos el frame en el array de frames append frames (token as integer) ) ) - Estamos en el caso de un intervalo de frames else (t - Troceamos la cadena, de forma que tendremos dos frames local interval = filterstring token - - Si no tenemos frames o tenemos más de dos frames, salimos if interval, count == 0 or interval, count > 2 do (t return undefined ) t - Para simplificar, almacenamos el frame inicial y final local startframe = interval[1] as integer local endframe = interval[2] as integer - No permitimos que el frame final sea menor que el inicial if startframe > endframe then (t return undefined ) - Si el frame inicial y final son iguales, replaceamos uno de ellos else if startframe == endframe then (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames startframe) == 0 do (t - Replaceamos el frame en el array de frames append frames startframe ) ) - Si llegamos aquí es que tenemos un intervalo valido else (t - Ahora vamos a recorrer el rango y a generar los frames intermedios for frame = startframe todo endframe do (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames frame) == 0 do (t - Replaceamos el frame en el array de frames append frames frame ) ) ) ) t) t- Ordenamos el array de frames tsort frames t- Retornamos el array de frames treturn frames.
)
Su funcionamiento:
Código:
parseframes 2,4,7-10,12-16
En ese caso la función te devolverá (de forma ordenada) un array de enteros con todos los frames:
Código:
#(2, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16)
Me imagino que más o menos es eso a lo que te referías. Saludos.