Jump to content

[Quest Función]Select2, para Menus Extensos


Dextrok

Recommended Posts

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.
 

Link to comment
Share on other sites

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
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...