Jump to content

[Quest Función]Select2, para Menus Extensos


Dextrok

Mensajes recomendados

Buenas Metineros, muchas veces nosotros queremos hacer menus bien grandes y nos resulta un problema como este:

Imagen enviada

 

Por lo que en el código nos vemos limitados a algo como esto:

 

local r = select("valor1", "valor2", "valor3", "valor4", "valor5", "Ay ya no cabe mas")

Y la solución que le damos es crear menus anidados:
 

local r = select("valor1", "valor2", "valor3", "valor4", "valor5", "Más")if r == 6 then	local otromenu = select("valor6", "valor7", "valor8", "valor9", "valor10", "Más")	if otromenu == 6 then		local otromenumas = select("valor11", "valor12", "valor13", "valor14", "valor15", "Más")	endend

Lo cuál resulta muy tedioso y casi nadie lo hace.

 

Yo he creado una función de ayuda tremenda para hacer estas cosas (no se si sea el único que vea esta necesidad) pero bueno. consiste en lo siguiente:
 

local x = select2(5, "valor1", "valor2", "valor3", "valor4", "valor5", "valor6", "valor7","valor8", "valor9", "valor10", "valor11", "valor12", "valor13", "valor14", "valor15", "valor16","valor17", "valor18", "valor19", "valor20", "valor21", "valor22", "valor23", "valor24", "valor25","valor26", "valor27") --etc etc etc

El primer valor, SIEMPRE va a ser la limitación de cuantos quieres que te aparezcan cada vez, o sea en este caso los valores se van a mostarar de 5 en 5, no importa la cantidad que les pongas, si cambias el 5 por un 3 se van a mostarr de 3 en 3 y así sucesivamente.
 

Fijense bien.

Si seleccionan "valor1" , x = 1
Si seleccionan "valor2", x = 2
Si seleccionan "valor15", x = 15

Lo cuál quedaría algo así, pero ya la verán con más detalle cuando la prueben:

 

Imagen enviada

 

 

 

Y finalmente con ustedes dejamos la mágica:

--Do not change this is magic
 

function select2(limit, ...)	if limit < 1 then limit = 1 end	local cicle, val = 0, 0	local next, cancel = "Mas", "Cancelar"		while true do		t = {}		for i = 1, limit do			if arg[1] ~= nil then				table.insert(t, arg[1])				table.remove(arg, 1)			end		end		if arg[1] ~= nil then table.insert(t, next) end		table.insert(t, cancel)				val = select_table(t)				if val == table.getn(t) then break		elseif val == table.getn(t) - 1 and arg[1] ~= nil then cicle = cicle + limit		else return (cicle+val)		end		val = 0	endend

Esa es la función, la colocan dentro del questlib, y ya en todas sus quest la podrán utilizar, llamandola como en el ejemplo de arriba.
 

Enlace para comentar
Compartir en otros sitios

Bueno, luego de investigar un poco estuve buscando la de Mijago y es esta:

 

function select2(tab,...)        arg.n = nil        if type(tab) ~= "table" and type(tab) == 'number' then                table.insert(arg,1,tab)                tab = arg        elseif type(tab) ~= "table" and type(tab) == 'string' then                table.insert(arg,1,tab)                table.insert(arg,1,8)                tab = arg        elseif type(tab) == "table" and type(tab[1]) == 'string' then                table.insert(tab,1,8)        end        local max = tab[1]; table.remove(tab,1)        local tablen,outputstr,outputcount,nextc,incit = table.getn(tab),"",0,0,0        table.foreach(tab,                function(i,l)                        outputcount = outputcount + 1                        if outputcount == 1 then                                outputstr=outputstr..'sel = select("'..l..'"'                        elseif outputcount == max and tablen > outputcount+incit  then                                if tablen ~= outputcount+incit+1 then                                        outputstr=outputstr..',"'..l..'","Nächste Seite") + '..incit..' '                                        if nextc > 0 then                                                outputstr = outputstr..'end '                                        end                                        outputstr=outputstr..'; if sel == '..(incit+max+1)..' then '            -- Anfangen der neuen Abfrage                                        nextc, outputcount, incit= nextc+1,0,incit+max                                else                                        outputstr=outputstr..',"'..l..'"'                                end                        else                                outputstr=outputstr..',"'..l..'"'                        end                end        )        outputstr = outputstr..') + '..incit        if nextc > 0 then                outputstr = outputstr..' end'        end        outputstr= outputstr.. '; return sel'        print(outputstr)        local sel = assert(loadstring(outputstr))()        tablen,outputstr,outputcount,nextc,incit = nil,nil,nil,nil,nil -- Speicher freimachen        return selend
Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...