Jump to content

Recommended Posts

Posted

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.
 

Posted

Por si lo desconocias:www.inforge.net/community/metin2-howto-addon-server-privati/295096-release-navigazione-tra-i-select-extra.htmlSirve para hacer menus, infinitos si los deseas, sin necesidad de funciones nuevas ni nada.

Posted

Me disculpan si esta función tiene coincidencia IDENTICA con otras, tal vez estuvo mal de mi parte no haberme informado sobre la existencia de estas en otros lugares, pero la verdad no la había visto antes, por eso me decidí a crearla.

Posted

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

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...

Important Information

This site uses cookies to enhance your browsing experience and provide relevant content. By continuing to browse, you agree to our We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. and Terms of Use. For more information on how we protect your data, please check our Privacy Policy.