Dextrok Posted September 22, 2013 Report Share Posted September 22, 2013 Buenas Metineros, muchas veces nosotros queremos hacer menus bien grandes y nos resulta un problema como este: 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: 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. Quote Link to comment Share on other sites More sharing options...
Frank Arkero Posted September 22, 2013 Report Share Posted September 22, 2013 amigo no veo el imagen cambialo la imagen a tinypic.com es mejor!! Quote Link to comment Share on other sites More sharing options...
izaviona Posted September 22, 2013 Report Share Posted September 22, 2013 Quote Link to comment Share on other sites More sharing options...
Dextrok Posted September 22, 2013 Author Report Share Posted September 22, 2013 Ya las cambié. Quote Link to comment Share on other sites More sharing options...
pepineitor Posted September 22, 2013 Report Share Posted September 22, 2013 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. Quote Link to comment Share on other sites More sharing options...
Serex Posted September 22, 2013 Report Share Posted September 22, 2013 Muy buena y útil la función, +1 Quote Link to comment Share on other sites More sharing options...
PACI Posted September 22, 2013 Report Share Posted September 22, 2013 Select2 es de Mijago. Quote Link to comment Share on other sites More sharing options...
Dextrok Posted September 22, 2013 Author Report Share Posted September 22, 2013 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. Quote Link to comment Share on other sites More sharing options...
Dextrok Posted September 22, 2013 Author Report Share Posted September 22, 2013 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 Quote Link to comment Share on other sites More sharing options...
fuuton97 Posted September 22, 2013 Report Share Posted September 22, 2013 Muy eficaz, +1. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.