Jump to content

izaviona

Miembro
  • Contador contenido

    75
  • Ingreso

  • Última visita

  • Días ganados

    2

Actividad de reputación

  1. Me Gusta
    izaviona got a reaction from Noa2121 in Pegboard Nerds - Hero (Nick Thayer Remix)   
  2. Me Gusta
    izaviona got a reaction from Jeo in Pegboard Nerds - Hero (Nick Thayer Remix)   
  3. Me Gusta
    izaviona got a reaction from v0gue in blood system with effect kill   
    Y que el metin fuera un shooter..
  4. Me Gusta
    izaviona got a reaction from PACI in blood system with effect kill   
    Y que el metin fuera un shooter..
  5. Me Gusta
    izaviona reacted to Shang in [Release]Login nuevo   
    Hola a tod@s zoneros!
     
    Vengo a postearles esta interfaz de login:
     

     
    Está adaptado para todas las resoluciones.
     
    Créditos:
     
    Script - Shang
    Diseño - FeistyGraphic

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  6. Me Gusta
    izaviona reacted to Edward in Clase 1 PHP - Variables   
    Sorry, me equivoque, pensé que me citaste ami xd
  7. Me Gusta
    izaviona reacted to Rafa23Alzira in [QUEST-RELEASE]Recuperar contraseña del almacén   
    Hola chicos, necesitaba hacer una quest para recuperar la contraseña del almacén desde el juego y ya que estamos la quiero compartir con todos vosotros, se que se puede mejorar pero tampoco me apetecía hacer mucho más.
     
    Para que tenga algo de seguridad he puesto que pida la cuenta, si no queréis esto poned un 0 en el local seguridad.
     
    Quest:
     
     
    Questlib:
     
     
  8. Me Gusta
    izaviona reacted to Shogun in World Editor (edición mejorada)   
    Hoy os traigo una versión actualizada del editor de mapas de Ymir creada por Xunil (lolor2 en metin2dev)
     

     
    Las características nuevas son:
     
    Rendimiento mejorado
    Idioma inglés
    Granny 2.9
    DirectX 9
    Rotación de la cámara con el botón derecho del ratón
    Posibilidad de cambiar campo de visión (FOV) en el fichero CONFIG
    Límite de 8 texturas por área eliminado
    Filtrado anisotrópico 16x habilitado
     
    Descarga aqui:
     
    World_Editor_Enhanced.zip 4.0 MB Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Si alguien tiene ideas para nuevas funcionalidades que las ponga aquí e intentaré que el autor las añada en una versión futura.
  9. Me Gusta
    izaviona reacted to JazZ* in [Español] Sistema de Monarca + Instalación   
    Espero que les guste
     
     
    Sistema de Monarca
     
    Para DB superiores a 33k 

    Autores: Musicinstructor y Shogun
     
     
     
     
    Breve Explicación del Sistema:
     
    El Sistema de Monarca consta de las siguientes etapas:
     
    1.- Etapa de Candidatura:
    Cuando el miembro del STAFF activa el sistema, anunciará a todo el servidor que las candidaturas a Monarca están activas, es donde el Player (Jugador) puede postular a Monarca visitando al Alguacil de Batallas para posteriormente leer los requisitos que se requiere para poder postular como candidato.
    NOTA: Esta etapa puede estar activa el tiempo que disponga el STAFF.
     
    2.- Etapa de Elecciones:
    Una vez acabado el tiempo de candidatura el STAFF procede al siguiente paso, que es activar las votaciones a los miembros que se registraron como candidatos a Monarca, todos los Jugadores podrán votar por su candidato favorito, pero antes deben conseguir el certificado que les permite el permiso de votación para su reino.
     
    3.- Etapa de Reinado:
    Finalmente cuando el STAFF decide cerrar las votaciones, se anuncian los Monarcas elegidos de cada Reino.
     
     
     
     
    INSTALACIÓN
     
    1.- Crear un archivo en share/data/monarch_election (con el comando: touch share/data/monarch_election)
    2.- Crear la tabla "Monarch" (Esto viene con la mayoría de SF tal vez no te sea necesario crearla)
    DROP TABLE IF EXISTS `monarch`;CREATE TABLE `monarch` ( `empire` int(10) unsigned NOT NULL DEFAULT '0', `pid` int(10) unsigned DEFAULT NULL, `windate` datetime DEFAULT NULL, `money` bigint(20) unsigned DEFAULT NULL, PRIMARY KEY (`empire`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- ------------------------------ Records of monarch-- ----------------------------INSERT INTO `monarch` VALUES ('1', '266', '2014-02-04 04:36:55', '0');INSERT INTO `monarch` VALUES ('2', '188', '2013-11-07 20:10:00', '0');INSERT INTO `monarch` VALUES ('3', '170', '2013-09-16 22:12:06', '0'); 3.- Asegurarse que el Item 60004 (Certificado) exista y tenga un icono.
     
    4.- Quest:
    quest monarch_election begin state start begin when login or enter begin if oh.ismonarch() > 0 and pc.count_item(70021) == 0 then set_state(newking) elseif oh.ismonarch() == 0 then if pc.count_item(70021) > 0 then pc.remove_item(70021) syschat("Has sido desposeído de tu Bendición Angelical.") end if pc.count_item(11971) > 0 or pc.count_item(11972) > 0 or pc.count_item(11973) > 0 or pc.count_item(11974) > 0 then if pc.get_part(PART_MAIN) > 11970 and pc.get_part(PART_MAIN) < 11975 then syschat("Por favor, desequipa tu armadura de Monarca.") syschat("No se te permite usarla.") else local armor = 11971 + pc.get_job() pc.removeitem(armor) syschat("Has sido desposeído de tu armadura de Monarca.") end end end if game.get_event_flag("monarch_elect") > 0 and pc.get_level() >= 40 then send_letter("Elección del Monarca") end end when button or info begin if game.get_event_flag("monarch_elect") == 1 then say_title("Candidaturas a la monarquía") say("") ----"12345678901234567890123456789012345678901234567890"| say("Si desea presentarse para ser el próximo Monarca,") say("debe hablar con el Alguacil de Batalla en la") say("ciudad. Recuerde que necesitarás 1.000.000 Yang y") say("nivel 65 para ello.") say("") say("Cuando el proceso de Candidatura termine, podrás votar.") elseif game.get_event_flag("monarch_electionid") == pc.getqf("electionid") then say_title("Elecciones a Monarca") say("") ----"12345678901234567890123456789012345678901234567890"| say("Ya ha realizado su voto. Los resultados serán") say("anunciados al final de las elecciones.") else say_title("Elecciones a Monarca") say("") ----"12345678901234567890123456789012345678901234567890"| say("Diríjase al Alguacil de Batalla para votar.") say("Necesitará este objeto:") say("") say_item_vnum(60004) say("Puedesobtenerlo matando monstruos y enemigos.") end say("") end when kill with game.get_event_flag("monarch_elect") > 0 and pc.level >= 45 begin if game.get_event_flag("monarch_electionid") != pc.getqf("electionid") then if not npc.is_pc() then local limit = get_mob_level[npc.get_race()] if limit == nil then return else if pc.get_level() > limit+10 then return end end end if number(1, 500) == 1 then if pc.count_item(60004) == 0 and pc.enough_inventory(60004) then pc.give_item2(60004, 1) syschat("Ha sido autorizado para votar en las elecciones.") end end end end when electionman1.chat."GM: Ajustes de elección a Monarca" or electionman2.chat."GM: Ajustes de elección a Monarca" or electionman3.chat."GM: Ajustes de elección a Monarca" with pc.is_gm() begin if game.get_event_flag("monarch_elect") == 1 then say_title("Candidaturas a la monarquía:") say("") ----"123456789012345678901234567890123456789012345678901234567890"| say("Actualmente las candidaturas para la elección") say("del nuevo Monarca estan abiertas.") say("") say("Desea cerrarlas ahora?") say("") local s = select("Cerrar", "Continuar" ) if s == 1 then notice_all("Las elecciones a Monarca acaba de empezar!") notice_all("Dirígete al Algacil de Batallas, presenta tu Certificado") notice_all("y vota por tu candidato.") game.set_event_flag("monarch_elect", 2) game.set_event_flag("monarch_electionid", get_global_time()) say_title("Candidaturas a la monarquía:") say("") say("Candidaturas cerradas, ahora se abren") say("las votaciones para el nuevo Monarca.") say("") end elseif game.get_event_flag("monarch_elect") == 2 then say_title("Elecciones a Monarca:") say("") say("Elecciones a Monarca en proceso..") say("Cerrar votaciones?") say("") say_reward("Votación actual:") say_reward("Shinsoo: "..monarch_election.getcurrentwinner(1)[1]) say_reward("Chunjo: "..monarch_election.getcurrentwinner(2)[1]) say_reward("Jinno: "..monarch_election.getcurrentwinner(3)[1]) say("") local s = select("Terminar", "Continuar") if s == 1 then notice_all("Las votaciones a la elección del nuevo Monarca acaban de cerrarse.") game.set_event_flag("monarch_elect", 0) if monarch_election.getcurrentwinner(1)[2] != 0 then mgmt.monarch_change_lord(1, monarch_election.getcurrentwinner(1)[2]) end if monarch_election.getcurrentwinner(2)[2] != 0 then mgmt.monarch_change_lord(2, monarch_election.getcurrentwinner(2)[2]) end if monarch_election.getcurrentwinner(3)[2] != 0 then mgmt.monarch_change_lord(3, monarch_election.getcurrentwinner(3)[2]) end end elseif game.get_event_flag("monarch_elect") == 0 then say_title("Elecciones a Monarca:") say("") say("Aquí puede permitir las candidaturas a la monarquía.") say("") say("Iniciar candidaturas ahora?") say("") local s = select("Si", "No") if s == 1 then notice_all("Ha empezado la candidatura a la Monarquía!") notice_all("Dirígete al Algacil de Batallas para participar.") game.set_event_flag("monarch_elect", 1) game.set_event_flag("monarch_electionid", get_global_time()) monarch_election.clearcandidacy() end end end when electionman1.chat."Elecciones a Monarca" or electionman2.chat."Elecciones a Monarca" or electionman3.chat."Elecciones a Monarca" with game.get_event_flag("monarch_elect") == 2 begin say_title("Elecciones a Monarca:") say("") if pc.get_level() < 45 then say("Necesita ser Nivel 45 o más para poder votar,") say("vuelva cuando cumpla este requisito.") say("") return end if game.get_event_flag("monarch_electionid") == pc.getqf("electionid") then say("No puede volver a votar!") say("") return end if pc.count_item(60004) < 1 then say("Lo siento, debe mostrarme el certificado") say("para demostrar que pertenece al "..locale.empire_names[pc.get_empire()]..".") say("") say_item_vnum(60004) say("Puede obtenerlo matando monstruos y enemigos.") say("*Vuelva cuando lo tenga.") say("") return end local gname_table = monarch_election.candidacy_list(pc.get_empire()) if table.getn(gname_table) == 0 then -- no currently war say("No hay candidatos disponibles!") say("") else table.insert(gname_table, "Cancel") ----"123456789012345678901234567890123456789012345678901234567890"| say("Bien! tiene la autorización para poder votar,") say("hágalo cuidadosamente ya que solo puede hacerlo una vez.") say("") wait() local s = select_table(gname_table) if s == table.getn(gname_table) then return; else monarch_election.election(s) pc.setqf("electionid", game.get_event_flag("monarch_electionid")) pc.remove_item(60004, 1) say_title("Elecciones a Monarca:") say("") say("Se agradece su participación.") say("") say_reward("Su voto fue para: "..gname_table[s]) say("") end end end when electionman1.chat."Postular a la Monarquía" or electionman2.chat."Postular a la Monarquía" or electionman3.chat."Postular a la Monarquía" with game.get_event_flag("monarch_elect") == 1 begin local NEED_MONEY = 1000000 local NEED_LEVEL = 65 say_title("Candidaturas a la monarquía:") say("") say("Para postular como el nuevo Monarca necesitas:") say("") say_reward("1. "..NEED_MONEY.." Yang para poder postular.") say_reward("2. Nivel superior o igual a "..NEED_LEVEL..".") say("") if game.get_event_flag("monarch_elect") == 0 then say("Elecciones a la Monarquía cerradas.") say("") say("Vuelva luego") say("") return end if game.get_event_flag("monarch_electionid") == pc.getqf("electionid") then say("*Usted ya esta entre los candidatos a la Monarquía.") say("") return end say("Cumples todos los requisitos y deseas postular?") say("") local s = select("Sí, Postular", "No, Gracias.") if s == 1 then say_title("Candidaturas a la monarquía:") say("") if monarch_election.candidacycount(pc.get_empire()) >= 8 then say("Lo sentimos, ya hay suficientes candidatos.") say("") say("Intente en las próximas elecciones.") elseif pc.get_gold() >= NEED_MONEY and pc.get_level() >= NEED_LEVEL then say("Muy Bien!") say("Ahora forma parte de los candidatos para la elección.") say("del nuevo Monarca.") say("") say("Buena Suerte!") pc.change_gold(-NEED_MONEY); monarch_election.candidacy(); pc.setqf("electionid", game.get_event_flag("monarch_electionid")) else say("Lo siento, no cumple con los requisitos.") end say("") end end function candidacy() local f = io.open("data/monarch_election", "a+") f:write(pc.get_player_id().."t"..pc.get_empire().."t0t"..pc.get_name().."tn") f:close() end function clearcandidacy() local f = io.open("data/monarch_election", "w+") f:close() end function candidacycount(empire) local count = 0 local f = io.open("data/monarch_election", "r") for line in f:lines() do local e = string.split(line, "t") if e != nil and tonumber(e[2]) == empire then count = count + 1 end end f:close() return count end function candidacy_list(empire) local res = {} local f = io.open("data/monarch_election", "r") for line in f:lines() do cinfo = string.split(line, "t") if tonumber(cinfo[2]) == empire then table.insert(res, cinfo[4]) end end f:close() return res end function election(id) local c_list = {} local c_count = 0 local f = io.open("data/monarch_election", "r") for line in f:lines() do table.insert(c_list, string.split(line, "t")) c_count = c_count + 1 end f:close() f = io.open("data/monarch_election", "w+") local e_i = 1 for i = 1, c_count, 1 do if e_i == id then c_list[i][3] = tonumber(c_list[i][3]) + 1 end if tonumber(c_list[i][2]) == pc.get_empire() then e_i = e_i + 1 end f:write(c_list[i][1].."t"..c_list[i][2].."t"..c_list[i][3].."t"..c_list[i][4].."tn") end f:close() end function getcurrentwinner(empire) local res = {"Nadie", 0} local f = io.open("data/monarch_election", "r") local maxvotes = -1 for line in f:lines() do local exploded = string.split(line, "t") if tonumber(exploded[2]) == empire and tonumber(exploded[3]) > maxvotes then maxvotes = tonumber(exploded[3]) res = {exploded[4], tonumber(exploded[1])} end end f:close() return res end end state newking begin when login or enter begin q.set_icon("scroll_open_blue.tga") send_letter("Felicitaciones!") end when button or info begin local treatment = { [0] = "Rey", [1] = "Reina", } local prefix = { [0] = "el", [1] = "la", } local armor = 11971 + pc.get_job() ----"123456789012345678901234567890123456789012345678901234567890"| say_title("Felicitaciones!") say("") say("Has sido elegido como "..prefix[pc.get_sex()].." nuevo "..treatment[pc.get_sex()].." de "..locale.empire_names[pc.get_empire()].."!") say("") say("como "..treatment[pc.get_sex()]..", se le concede la Armadura de Monarca") say("y la Bendición Angelical mientras dure su reinado.") say("") say("Esta Joya le permitirá utilizar habilidades Monárquicas") say("limitadas y dependiente del Yang que disponga,") say("elija sabiamente.") say("") say("Mucha Prosperidad para su Reinado!") say("") clear_letter() set_state(start) if pc.count_item(armor) == 0 then pc.give_item2(armor) end if pc.count_item(70021) == 0 then pc.give_item2(70021) end notice_all("El "..treatment[pc.get_sex()].." "..pc.getname().." de "..locale.empire_names[pc.get_empire()].." ha sido coronado "..treatment[pc.get_sex()].."!") end endend 5.- Locale.lua:
    locale.empire_names = {[0] = "Todos",[1] = "Shinsoo",[2] = "Chunjo",[3] = "Jinno",} 6.- Questlib.lua:
    function string:split(delimiter)local result = {}local from = 1local delim_from, delim_to = string.find(self, delimiter, from) while delim_from dotable.insert(result, string.sub(self, from , delim_from-1))from = delim_to + 1delim_from, delim_to = string.find(self, delimiter, from)endtable.insert(result, string.sub(self, from))return resultend get_mob_level = { [2051] = 65, [2052] = 67, [2053] = 69, [2054] = 71, [2055] = 73, [11116] = 90, [2061] = 60, [2062] = 62, [2063] = 64, [2064] = 66, [2065] = 68, [2071] = 70, [2072] = 72, [2073] = 74, [2074] = 76, [2075] = 78, [2076] = 78, [11117] = 90, [2091] = 60, [2092] = 79, [2093] = 65, [2094] = 72, [2095] = 70, [2101] = 19, [2102] = 37, [2103] = 39, [2104] = 44, [2105] = 47, [2106] = 48, [2107] = 51, [2108] = 54, [5131] = 22, [2401] = 87, [5132] = 25, [2402] = 89, [5133] = 27, [2131] = 60, [2132] = 62, [2133] = 64, [2134] = 66, [2135] = 68, [101] = 1, [102] = 3, [103] = 4, [2152] = 37, [105] = 9, [106] = 13, [107] = 16, [108] = 7, [109] = 10, [110] = 12, [111] = 15, [112] = 19, [113] = 21, [114] = 18, [115] = 24, [5141] = 35, [131] = 8, [132] = 9, [133] = 11, [134] = 14, [135] = 18, [136] = 21, [137] = 12, [138] = 15, [139] = 17, [140] = 20, [141] = 24, [142] = 26, [143] = 24, [144] = 29, [151] = 9, [152] = 16, [153] = 10, [154] = 21, [2203] = 70, [2204] = 71, [2205] = 72, [2206] = 73, [2207] = 78, [171] = 1, [172] = 3, [173] = 4, [174] = 6, [175] = 9, [2224] = 71, [177] = 16, [178] = 7, [179] = 10, [180] = 12, [181] = 15, [182] = 19, [183] = 21, [184] = 18, [185] = 24, [2234] = 71, [2235] = 72, [191] = 30, [192] = 31, [193] = 33, [194] = 35, [5153] = 49, [5157] = 54, [2291] = 75, [2292] = 99, [2293] = 99, [5161] = 30, [2301] = 65, [2302] = 67, [2303] = 69, [2304] = 70, [2305] = 71, [2306] = 84, [2307] = 86, [2311] = 74, [2312] = 76, [2313] = 77, [2314] = 80, [2315] = 82, [301] = 18, [302] = 20, [303] = 25, [304] = 25, [8501] = 35, [8502] = 30, [8503] = 25, [8504] = 5, [8505] = 10, [8506] = 12, [8507] = 15, [8508] = 20, [8509] = 25, [8510] = 21, [8511] = 11, [331] = 18, [332] = 20, [333] = 25, [334] = 25, [351] = 18, [352] = 20, [353] = 25, [354] = 25, [2403] = 89, [2404] = 90, [2411] = 91, [2412] = 93, [2413] = 95, [2414] = 97, [2451] = 84, [5127] = 54, [2452] = 86, [2431] = 80, [2432] = 82, [2433] = 82, [2434] = 83, [2454] = 90, [391] = 23, [392] = 26, [393] = 28, [394] = 31, [395] = 23, [396] = 26, [397] = 28, [398] = 31, [401] = 26, [402] = 27, [403] = 29, [404] = 30, [405] = 33, [406] = 35, [8600] = 73, [8601] = 86, [8602] = 73, [8603] = 86, [8604] = 73, [8605] = 86, [8606] = 73, [8607] = 86, [8608] = 73, [8609] = 86, [8610] = 73, [8611] = 86, [8612] = 73, [8613] = 86, [8614] = 73, [8615] = 86, [8616] = 86, [11108] = 70, [431] = 31, [432] = 33, [433] = 35, [434] = 36, [435] = 38, [436] = 40, [2491] = 93, [2492] = 95, [2493] = 97, [2494] = 88, [2495] = 90, [451] = 26, [452] = 27, [453] = 29, [454] = 30, [455] = 33, [456] = 35, [2505] = 83, [2506] = 84, [2507] = 85, [2508] = 79, [2509] = 80, [2510] = 81, [2511] = 82, [2512] = 83, [2513] = 84, [2514] = 86, [1175] = 65, [491] = 32, [492] = 37, [493] = 39, [494] = 45, [2543] = 81, [2544] = 82, [2545] = 83, [2546] = 84, [2547] = 86, [501] = 29, [502] = 32, [503] = 35, [504] = 36, [531] = 35, [532] = 37, [533] = 40, [534] = 42, [2591] = 89, [2592] = 89, [2593] = 89, [2594] = 89, [2595] = 89, [2596] = 89, [2597] = 91, [2598] = 91, [551] = 29, [552] = 32, [553] = 35, [554] = 36, [2482] = 92, [2483] = 94, [2484] = 96, [5134] = 29, [591] = 42, [595] = 42, [601] = 26, [602] = 29, [603] = 31, [604] = 33, [2151] = 19, [104] = 6, [631] = 34, [632] = 36, [633] = 39, [634] = 40, [635] = 44, [636] = 46, [637] = 49, [2155] = 47, [2156] = 48, [651] = 34, [652] = 36, [653] = 39, [654] = 40, [2157] = 51, [656] = 46, [657] = 49, [2158] = 54, [2501] = 79, [2502] = 80, [2503] = 81, [5001] = 10, [2504] = 82, [691] = 50, [692] = 55, [693] = 60, [701] = 35, [702] = 38, [703] = 41, [704] = 44, [705] = 48, [706] = 49, [707] = 51, [731] = 52, [732] = 53, [733] = 54, [734] = 54, [735] = 55, [736] = 56, [737] = 57, [751] = 35, [752] = 38, [753] = 41, [754] = 44, [755] = 48, [756] = 49, [757] = 51, [771] = 52, [772] = 53, [773] = 54, [774] = 54, [775] = 55, [776] = 56, [777] = 57, [7050] = 35, [2481] = 91, [791] = 54, [792] = 62, [793] = 64, [794] = 72, [795] = 54, [796] = 62, [7051] = 31, [7001] = 52, [7002] = 53, [2191] = 67, [7004] = 54, [7005] = 55, [7006] = 56, [7007] = 56, [7008] = 52, [2192] = 72, [7010] = 54, [11107] = 70, [7012] = 52, [7013] = 53, [7014] = 54, [7015] = 54, [7016] = 55, [7017] = 56, [7018] = 56, [7019] = 59, [7020] = 59, [7021] = 60, [7022] = 61, [7023] = 62, [7024] = 64, [7025] = 66, [7026] = 67, [7027] = 70, [7028] = 72, [7029] = 35, [7030] = 31, [7031] = 33, [7032] = 35, [7033] = 36, [7034] = 38, [7035] = 40, [7036] = 52, [7037] = 53, [7038] = 54, [7039] = 54, [7040] = 55, [7041] = 56, [7042] = 57, [7043] = 81, [7044] = 81, [901] = 49, [902] = 51, [903] = 53, [904] = 55, [905] = 58, [906] = 58, [907] = 59, [5004] = 80, [5005] = 85, [7054] = 36, [2541] = 79, [7056] = 40, [7057] = 52, [7058] = 53, [7059] = 54, [7060] = 54, [2542] = 80, [7062] = 56, [2201] = 69, [7064] = 81, [7065] = 81, [7066] = 82, [7067] = 83, [7068] = 83, [2202] = 69, [7070] = 85, [7071] = 33, [7072] = 35, [7073] = 36, [7074] = 38, [155] = 24, [932] = 51, [933] = 53, [934] = 55, [935] = 58, [936] = 58, [937] = 59, [7082] = 83, [7083] = 83, [7084] = 84, [7085] = 85, [7086] = 35, [7087] = 36, [7088] = 38, [7089] = 40, [7090] = 54, [7091] = 55, [7092] = 56, [7093] = 57, [7094] = 83, [7095] = 83, [7096] = 84, [7097] = 85, [991] = 59, [992] = 60, [993] = 61, [1001] = 57, [1002] = 58, [1003] = 59, [1004] = 60, [5101] = 22, [5102] = 25, [5103] = 27, [5104] = 29, [5111] = 35, [5112] = 37, [5113] = 39, [5114] = 40, [5115] = 41, [5116] = 42, [5121] = 45, [5122] = 47, [5123] = 49, [5124] = 52, [5125] = 53, [5126] = 54, [1031] = 67, [1032] = 69, [1033] = 70, [1034] = 71, [1035] = 72, [1036] = 73, [1037] = 71, [1038] = 72, [1039] = 73, [1040] = 74, [1041] = 75, [2222] = 69, [5142] = 37, [5143] = 39, [5144] = 40, [5145] = 41, [5146] = 42, [2223] = 70, [11109] = 70, [5151] = 45, [5152] = 47, [176] = 13, [5154] = 52, [5155] = 53, [5156] = 54, [1061] = 67, [1062] = 69, [1063] = 70, [1064] = 71, [1065] = 72, [1066] = 73, [1067] = 71, [1068] = 72, [1069] = 73, [1070] = 74, [1071] = 75, [2227] = 90, [1091] = 75, [1092] = 75, [1093] = 78, [1094] = 75, [1095] = 82, [1096] = 75, [2231] = 69, [1101] = 62, [1102] = 63, [1103] = 64, [1104] = 64, [1105] = 65, [1106] = 66, [1107] = 66, [2233] = 70, [1131] = 81, [1132] = 81, [1133] = 82, [1134] = 83, [1135] = 83, [1136] = 84, [1137] = 85, [1151] = 52, [1152] = 53, [1153] = 54, [1154] = 54, [1155] = 55, [1156] = 56, [1157] = 56, [2221] = 69, [1171] = 62, [1172] = 63, [1173] = 64, [1174] = 64, [2153] = 39, [1176] = 66, [1177] = 66, [1191] = 70, [1192] = 70, [11110] = 70, [2154] = 44, [11505] = 100, [11506] = 100, [11507] = 100, [11508] = 100, [11509] = 100, [11510] = 100, [2225] = 72, [1301] = 57, [1302] = 59, [1303] = 58, [1304] = 75, [1305] = 61, [1306] = 75, [1307] = 80, [1308] = 40, [1309] = 65, [1310] = 95, [7045] = 82, [7046] = 83, [2226] = 60, [7047] = 83, [7048] = 84, [1331] = 57, [1332] = 59, [1333] = 58, [1334] = 75, [1335] = 61, [5002] = 75, [5003] = 1, [7052] = 33, [11111] = 70, [7053] = 35, [7055] = 38, [1401] = 66, [1402] = 73, [1403] = 77, [7061] = 55, [7003] = 54, [7063] = 57, [5162] = 43, [7069] = 84, [5163] = 55, [931] = 49, [7076] = 54, [2232] = 69, [1501] = 69, [1502] = 72, [1503] = 76, [7078] = 55, [7079] = 56, [7080] = 57, [7081] = 82, [7075] = 40, [11100] = 50, [7077] = 54, [7009] = 53, [1601] = 68, [1602] = 70, [1603] = 75, [11101] = 50, [11102] = 50, [11113] = 90, [11103] = 50, [11104] = 50, [7049] = 85, [11105] = 50, [11106] = 70, [655] = 44, [1901] = 72, [1902] = 77, [1903] = 82, [1904] = 40, [1905] = 65, [1906] = 95, [11112] = 90, [2453] = 88, [11114] = 90, [2001] = 43, [2002] = 45, [2003] = 48, [2004] = 50, [2005] = 52, [11115] = 90, [2031] = 50, [2032] = 52, [2033] = 54, [2034] = 56, [2035] = 58, [2036] = 58, } 7.- Item_List (Certificado):
    60004 ETC icon/item/60002.tga 8.- Item_Proto:
    60004 loyalty_certificate ITEM_UNIQUE UNIQUE_NONE 1 ANTI_GET | ANTI_DROP | ANTI_SELL | ANTI_SAVE | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX LOG NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 604800 0 1 0 0 0 0 0 070021 ±ºÁÖÀÇ ÁõÇ¥ ITEM_QUEST 0 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 9.- FIN xD
     
     
     
     
    Gracias
  10. Me Gusta
    izaviona reacted to SeMa™ in Zone-Archiver   
    Buenas, hace un par de días me dije... por que no hacer un Gui para mz?, dado que varios foros tienen el suyo propio(Gui) por que no hacer uno?
     
     

    El estilo es muy parecido al archiver de www.metin2dev.org
     
    La publicidad estará desactivada hasta que un admin del foro se quiera hacer cargo de ella.
     
    Las funciones que tiene son las siguientes:
     
    Compila y descompila en type 2(Compilado Normal).
    Compila y descompila en type 3 (Panama/Iv).
    Crea el XML automáticamente.
    Compila y descompila los Protos(40k y anteriores).
    Incluye varios idiomas en esta versión solo está el español (Se pondrán mas).
    Incluye un sistema de actualizaciones automáticas.
     
     
    Special Thanks: Tim Niederhausen
     
    Si se realiza alguna actualización será publicada aquí.
    Si se encuentra algún fallo, pueden mandarme mp o dejarlo aquí escrito.
    Si alguien quiere contribuir con el proyecto, que me mande un mensaje privado.
    Un saludo.
     
    Nueva Versión1.1

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  11. Me Gusta
    izaviona got a reaction from kaoba in maps by next   
    xDD! Tan facil como coger la carpeta del serverside de otro mapa, editamos los regens y el setting.txt(copiar y pegar el del clientside), y para crear el attr con este programilla(
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.) y ya esta.  
     
     
  12. Me Gusta
    izaviona got a reaction from LovePlay in maps by next   
    xDD! Tan facil como coger la carpeta del serverside de otro mapa, editamos los regens y el setting.txt(copiar y pegar el del clientside), y para crear el attr con este programilla(
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.) y ya esta.  
     
     
  13. Me Gusta
    izaviona got a reaction from EzekielitohMercury in maps by next   
    xDD! Tan facil como coger la carpeta del serverside de otro mapa, editamos los regens y el setting.txt(copiar y pegar el del clientside), y para crear el attr con este programilla(
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.) y ya esta.  
     
     
  14. Me Gusta
    izaviona reacted to Shogun in Cómo mantener tu FreeBSD actualizado   
    Buenas zoneros,
     
    Hoy os voy a enseñar cómo mantener vuestro servidor FreeBSD actualizado con los últimos parches de seguridad o actualizarlo a una nueva versión. Para ello existe una herramienta de línea de comandos muy simple llamada freebsd-update.
     
    Primero veremos cuales son las versiones actualmente soportadas de FreeBSD:
     
    8.4 (Production Legacy Release) lanzado en Junio de 2013. Esta es la versión más antigua soportada en este momento. Las versiones anteriores no recibirán nuevas actualizaciones de seguridad por lo que es conveniente tener nuestro sistema operativo actualizado a esta versión como mínimo. 9.2 (Production Release) lanzado en Septiembre de 2013. Esta es la versión más popular y recomendada en este momento. 10.0 (Upcoming Release) lanzada en Noviembre de 2013, introduce bastantes cambios y aún es algo experimental. Recomendado sólo a usuarios avanzados.  
    Instalando los parches de tu versión actual
     
    Esta acción es similar a usar Windows Update en el SO de Microsoft o "yum update" en los Linux basados en Red Hat como CentOS:
    freebsd-update fetch install Descargará y instalará las actualizaciones de tu kernel y sistema  FreeBSD. Cuando aparezca la lista de ficheros, simplemente pulsad la tecla "Av Pág" hasta que ponga "Installing..."
     
    Actualizando a una versión nueva
     
    Esto es igual de sencillo:
    freebsd-update upgrade -r [versión] Donde [versión] es el nombre de la versión a la que quieres actualizar. Se compone del número de versión y el nombre de la rama o branch de desarrollo (CURRENT, RELEASE o STABLE). Recomiendo utilizar RELEASE asi que si por ejemplo queremos actualizar nuestra instalación de FreeBSD 8.1 a 8.4 usaríamos:
    freebsd-update upgrade -r 8.4-RELEASE Una vez descargadas las actualizaciones las instalaremos con:
    freebsd-update install Tened en cuenta que será necesario un reboot para que entre en funcionamiento el nuevo kernel que hemos instalado. Prestad atención a las instrucciones que se dan en pantalla y si tenéis alguna duda preguntad por aquí.
     
    Y esto es todo
  15. Me Gusta
    izaviona got a reaction from Misf in [Release]4950 Iconos nuevos   
    NO LLEVAR A OTROS FOROS, APORTE SOLO PARA METIN2 ZONE

    Holaa, que tal? xD

    Bueno, Hoy me siento generoso :yaoming: y ya que he descompilado Runes of Magic, os dejo sus 4950 iconos.



    Unas fotos viene bien:




    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.


    Saludos y agradezcan
  16. Me Gusta
    izaviona reacted to fuuton97 in [DUNGEON]Capítulo I - ¿Qué es una Dungeon? (INTRO).   
    Hola, hoy les vengo a dar este Capítulo 1, relacionado con las dungeon's. Comenzaremos explicando su literal hasta las funciones existentes, sin embargo esto solo es un pre ambulo para dar a inicio con la formación de una dungeon sencilla, pero eficaz.
    En Cada capítulo que va saliendo vamos añadiendo la dificultad en código y funciones para llevar a cabo una dungeon eficaz y buena.
     
    ¿Qué es una dungeon (Literal)? 
     
    Una "dungeon", que en su significado original es una cueva o calabozo (también denominada mazmorra), en donde emplea varias plantas, donde debes pasar por diferentes lugares donde encontraras bestias infinitas.
     
    En Metin2 lo relacionamos con una sucesión de recorridos por plantas y/o mapas, en donde cada vez se encuentra una dificultad mayor en bestias encontradas en el camino, por defecto al llegar, al último recorrido se encuentra con un Boss (Jefe), donde debes destruirlo , obteniendo así una recompensa. El ejemplo más claro que tenemos es la Torre de demonios, que es la más popular y entretenida, pero también contamos con la de los Monos, la Mazmorra de los Monos.
     
    Funciones de una dungeon:
     
    Cómo se denomina y se sabe que es una función de dungeon?, pues simplemente lleva a su inicio una "d.", que es de Dungeon.
     
    Las funciones son:
    d.check_eliminatedd.clear_regend.count_monsterd.exitd.exit_alld.exit_all_to_start_positiond.get_kill_mob_countd.get_kill_stone_countd.get_map_indexd.getfd.is_unique_deadd.is_use_potiond.joind.jump_alld.jump_all_locald.kill_uniqued.new_jumpd.new_jump_alld.purged.purge_uniqued.regen_filed.revivedd.selectd.set_destd.set_exit_all_at_eliminated.set_regen_filed.set_uniqued.set_warp_at_eliminated.setfd.spawnd.spawn_goto_mobd.spawn_groupd.spawn_mobd.spawn_move_groupd.spawn_move_uniqued.spawn_name_mobd.spawn_stone_doord.spawn_uniqued.spawn_wooden_doord.unique_get_hp_percd.unique_set_def_graded.unique_set_hpd.unique_set_maxhpd.noticed.kill_alld.setqf ¿Qué es lo más esencial que debe llevar una Dungeon?
     
    Lo que una Dungeon debe llevar en general son timer, los timer's son esenciales, sin ellos no se pudiera hacer ninguna acción que determine seguir adelante. Existe otras funciones secundarias esenciales en las dungeon's, como siempre un JUMP ALL, D.SETF y D.GETF.
     
    Esto solo es una introducción al nombre de DUNGEON, sabiendo su origen literal, funciones, lo más importante de ella.
     
    Próximo Capítulo: [DUNGEON]Capítulo II - ¿Cómo hacer una Dungeon?
     
    Saludos.
  17. Me Gusta
    izaviona reacted to Extrawelt in Boris Brejcha - Angel in the sky :)   
    Uno de mis djs favoritos.  
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  18. Me Gusta
    izaviona reacted to pepineitor in [Guía para sacar comando shutdown]   
    ¿No os habeis parado a pensar que quizás existe por algo ese comando?
    Eliminarlo es lo peor que podeís hacer, ya que es la mejor forma de apagar el servidor, simplemente debeis limitarlo correctamente.
     
    Pa' que...
  19. Me Gusta
    izaviona got a reaction from ™.Ninjaman28xD ツ in Gotye - Somebody That I Used To Know (Jeroen Nieuwenhuize remix)   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

  20. Me Gusta
    izaviona reacted to SeMa™ in Como hacer esto..   
    import background
     
    lista_sema = { "season1/metin2_map_duel" : "",  # Esto igual que en el atlasinfo. }  
     
    if background.GetCurrentMapName() in lista_sema:
       background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
       background.SetEnvironmentData(1)  
    esto en python, game.py la lista_mapa debajo de los import lo demás en def open.
  21. Me Gusta
    izaviona reacted to JosanG in Nuevo object pena de Muerte   
    Buenas, traigo esto de Pro Area, se trata de un object para poner en un mapa, de ejecución de unos npc. 
     

     

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Pass: pro-area.com
     
    SI le dais a thanks se descarga antes. xD
     
    Saludos
  22. Me Gusta
    izaviona got a reaction from Nicolas C Galeano in Daft Punk - Random Access Memories   
    Daft Punk - Random Access Memories[FLAC - CALIDAD STUDIO] 1400 Kbps

     
     
    Información

    Artista: Daft Punk
    Titulo: Random Access Memories
    Fecha: 17 Mayo 2013
    Productora: Columbia Records
    Genero: French house, disco, funk
    Tamaño: 1,40 gb
    Codec: FLAC, Calidad de Stuido sin comprimir.

    Tracklist
    1.- Give Life Back to Music
    2.- The Game of Love
    3.- Giorgio by Moroder
    4.- Within
    5.- Instant Crush
    6.- Lose Yourself to Dance
    7.- Touch
    8.- Get Lucky
    9.- Beyond
    10.- Motherboard
    11.- Fragments of Time
    12.- Doin' It Right
    13.- Contact



    Descarga


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  23. Me Gusta
    izaviona reacted to Anthony's in [Release]Flecha de Fuego   
    Buenas como vi hace unos días por YouTube un vídeo donde un servidor tenía la habilidad Flecha de Fuego del ninja que quemaba. Y pues dije... Algún día lo haré. Hoy como me aburrí lo decidí hacer.
     
    Y tras de 15 minutos intentando lo conseguí. Bueno aquí os dejaré una guía de como hacerlo.
     
    ¡EMPEZEMOS!
     
    Bueno lo primero que tendremos que hacer será ir al Navicat. Abrirlo ir a Player y luego Skill_Proto
     

     
    Bien ahora iremos a la linea donde pone 48 esa será la habilidad flecha de fuego.
     

     
    Una vez hay vamos a la izquierda y buscamos "SetFlag" 
     

     
    Ahora daremos click sobre el setFlag de la linea 48 y daremos click sobre los datos. Y luego saldrá una casilla con unos puntos suspensivos.
     

     
     Damos click sobre ella y buscamos la linea donde pone ATTACK_FIRE_CONT y daremos sobre el cuadrado un click. Deberá quedar así:
     

     
    Al darle click al cuadro ahora tendremos que dar click sobre la flecha verde. Y el comando de ATTACK_FIRE_CONT se quedará guardado.
     
     
    Ahora vamos al szPointPoly2 que estará al lado. Y tendremos que añadir esto: lv+5*iq *k
    En el hueco en blanco.
     

     
     
    Una vez hecho eso vamos a szDurationPoly2 y ahora pondremos: 60
    60 Será la duración de la habilidad con el efecto. 
     

     
    Ahora que tenemos todo eso hecho quedará de esta manera:
     

     
    Bien ahora ya tenemos la parte del Navicat. Ahora mismo tendremos que desencriptar el locale.de o cual sea en vuestro caso.
     
    Y tendremos que abrir el skilldesc y en la flecha de fuego que será el 48 tendremos que ponerla así:
    48 ASSASSIN Flecha de Fuego Flecha ardiente Flecha de llama Arden las flechas. Ataque de largo rango Ataque a múltiples objetivos. Ataque de fuego ATTACK_SKILL|NEED_TARGET|WEAPON_LIMITATION BOW hwajo 18 4 Fuerza de ataque %.0f-%.0f 1.5*minatk + (2.6*minatk + 100 )*k 1.5*maxatk + (2.6*maxatk + 300 )*k Probabilidad de quemar %.0f%% 20*k Ponéis el mío si queréis si no en el final de todo os tocara añadirlo esto:
    Probabilidad de quemar %.0f%% 20*k Bien una vez hecho eso tendremos que ir a skilltable
     
    Y en la linea 48 ponéis esto:
    ATTACK_FIRE_CONT NONE 0 0 RANGE 12 0.6 2500 300 Tenéis que añadir eso después de: 
    USE_ARROW_DAMAGE Sería esto USE_ARROW_DAMAGE, y ponéis lo que os di.
     
     
    O si queréis poner la mía:
    48 È­Á¶ÆÄ 2 1 1 0 HP -(1.5*atk+(2.6*atk+number(100,300))*k) 50+130*k 25 ATTACK,SPLASH,USE_ARROW_DAMAGE,ATTACK_FIRE_CONT NONE 20*k 15+30*k 0 0 RANGE 12 0.6 2500 300 Una vez hecho todo eso compilamos el cliente y hacemos reboot al servidor. 
     
    Y quedará así en el servidor:
     

     
  24. Me Gusta
    izaviona reacted to JosanG in Krewella - Play Hard (2012)   
    Krewella es un grupo Norteamericano, de Chicago, formado por tres integrantes.
     
    Su música es Drum'n Bass, Dubstep, progressive y electro house, dance...
     
    Este es el CD completo, para quien quiera descargarlo: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Y el tracklist por si queréis echarle un vistazo antes. Yo lo descargaría xD
     
    01 – Play Hard 02 – Killin` It 03 – Can`t Control Myself 04 – Alive 05 – One Minute 06 – Feel Me   Es un album debut, es por eso que solo tiene 6 canciones. El día 24 sale el segundo álbum.   Saludos!
  25. Me Gusta
    izaviona reacted to ElRaulxX in Capítulo IX - Bucles   
    Ya hacía tiempo que no me dejaba ver por aquí... que mejor rebienvenida que un nuevo capítulo de nuestro curso quest.
    El curso parece que ha quedado algo muerto, intentaré reavivarlo y mejorarlo con nuevos capítulos y mejoras de los anteriores. Si a keko le apetece que me eche una mano, sino conmigo tenéis más que suficiente.
     
    Bueno, yendo al grano... este capítulo trata de los famosos bucles (loops) tan utilizados en programación y que quizá deberíamos haber tratado antes.
     
    Introducción
     
    Primero de todo, ¿qué es un bucle? Un bucle es un conjunto de sentencias que se repiten un número determinado (o indeterminado - bucles infinitos) de veces en nuestro programa.
    A diferencia de los seres humanos, la mejor característica de un PC no es su inteligencia (al fin y al cabo, no deja de ser una máquina diseñada por nosotros), sino su rapidez. Un ordenador puede procesar en un sólo segundo miles de órdenes; sería poco lógico no aprovechar esta característica en nuestros lenguajes de programación. El método (o mejor dicho, los métodos) que disponemos para utilizar esta característica son los bucles.
    Un bucle repetirá el bloque de sentencias asignadas hasta que la condición asignada sea verdadera.
     
    En lua disponemos de 4 tipos diferentes de bucles. Aunque los 4 tipos no dejan de hacer la misma acción, son diferentes entre si y nos vendrá mejor usar un tipo u otro según la finalidad que tengamos.
    repeat bloque until condición - bucle repeat while condición do bloque end - bucle while for var = start, stop [, step] do bloque end - bucle for numérico for var_1, ..., var_n in iterador do bloque end - bucle for genérico 1 - Bucle repeat
    Para los que estéis en el mundillo de la programación, este bucle equivale a la sentencia Do-While en C.
    La estructura del bucle es la siguiente:
    repeat bloque de sentenciasuntil (condición) El bloque (las acciones, funciones que defináis) se ejecutará al entrar al bucle hasta llegar a 'until (condición)'. Entonces se comprobará la condición definida. Si dicha condición no es verdadera se volverá al principio del bucle y se ejecutará de nuevo. Este proceso se repetirá hasta que la condición sea verdadera.
     
    Un ejemplo de uso de éste bucle es el siguiente:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle repeat" begin say_title("Probando bucle repeat") local i = 0 --definimos una variable a verificar en la condición repeat i = i + 1 --modificamos la variable adecuadamente para evitar un bucle infinito say(i) until (i == 10) --definimos una condición end --when end --stateend --quest Este ejemplo mostrará en pantalla lo siguiente:
    Probando bucle repeat12345678910 Como podéis comprobar, la primera vez que se entra al bucle la variable i se modifica su valor a 1 y, como la condición (1 == 10) es falsa, se repite el bucle. En el momento que el valor de i es 9 (ha ido aumentando en el bucle) nos encontraremos al principio del bucle, lo que hará que se modifique a 10 y, como la condición (10 == 10) es verdadera, el bucle finalizará.
     
    Teniendo todo esto en cuenta, para crear un bucle infinito (en el punto 6 podéis ver su utilidad en quest) con el bucle repeat deberíamos hacer lo siguiente:
    repeat bloqueuntil false A RECORDAR:
    La condición del bucle repeat se comprueba al final del bloque y las sentencias se repetirán hasta que la condición sea verdadera. Esto significa que el código se ejecutará por lo menos una vez. Para continuar el bucle la condición debe ser falsa. El bucle repeat no necesita ser cerrado con ningún end. 2 - Bucle while
    Para los que estéis en el mundillo de la programación, este bucle equivale a la sentencia While en C.
    La estructura del bucle es la siguiente:
    while (condición) do bloque de sentenciasend El bloque se ejecutará al entrar al bucle sólo si la condición es cierta. Esto significa que el bucle while será ignorado si la primera vez que se entra al bucle la condición es falsa.
    Tras entrar al bucle y llegar al final del bloque se comprobará la condición. Si dicha condición es verdadera se volverá a ejecutar el bloque. Este proceso se repetirá hasta que la condición no sea verdadera.
     
    Un ejemplo de uso de éste bucle es el siguiente:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle while" begin say_title("Probando bucle while") local i = 0 --definimos una variable a verificar en la condición while (i != 10) do --definimos una condición i = i + 1 --modificamos la variable adecuadamente para evitar un bucle infinito say(i) end --while end --when end --stateend --quest Este ejemplo mostrará en pantalla lo siguiente:
    Probando bucle while12345678910 Como podéis comprobar, se entra al bucle porque la variable i es diferente a 10. Al entrar al bucle la variable i se modifica su valor a 1 y, como la condición (1 != 10) es verdadera, se repite el bucle. En el momento que el valor de i es 9 (ha ido aumentando en el bucle) nos encontraremos al principio del bucle, lo que hará que se modifique a 10. Entonces (a diferencia del repeat) vuelve a comenzar el bucle pero, como la condición (10 != 10) es falsa, el bucle finalizará.
     
    Teniendo todo esto en cuenta, para crear un bucle infinito (en el punto 6 podéis ver su utilidad en quest) con el bucle while deberíamos hacer lo siguiente:
    while true do bloqueend A RECORDAR:
    La condición del bucle while se comprueba al principio del bloque y las sentencias se repetirán hasta que la condición sea falsa. Esto significa que el bucle puede ser ignorado y su código no ejecutado. Para continuar el bucle la condición debe ser verdadera. El bucle while debe ser cerrado con un end. 3 - Bucle for numérico
    La estructura del bucle es la siguiente:
    for var = start, stop [, step] do bloque de sentenciasend donde var es una variable, y start, stop y step son constantes.
     
    El bucle for es una abreviación de acciones que podrían hacerse con los anteriores dos bucles de una manera más tediosa.
    Veamos un ejemplo de su uso:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle for numérico" begin say_title("Probando bucle for numérico") for i = 1, 10, 1 do say(i) end --for end --when end --stateend --quest Este ejemplo mostrará en pantalla lo siguiente:
    Probando bucle for numérico12345678910 Como habéis visto, hemos podido realizar las mismas acciones que en los anteriores bucles pero con una declaración mucho más sencilla.
    Lo que hace este bucle es asignar a una variable local (var) un valor numérico (start). El bucle se irá repitiendo y en cada repetición añadirá (sumará o restará) el valor de step a la variable var. El bucle finalizará cuando el valor de var sea mayor (si step es un número > 0) o menor (si step es un número < 0) que el valor de stop. Igual que pasa en el bucle while, la condición se evalua al principio del bucle.
    El valor de step puede ser omitido (for i = start, end do bloque end). En ese caso, step será siempre 1 (se sumará una unidad a la variable).
     
    La variable var puede tener cualquier identificador (como cualquier otra variable), aunque el nombre más común a poner es i. Esta variable es local, lo que significa que podemos llamarla dentro del bucle pero no fuera. Cuando finalice el bucle no podremos acceder a la variable utilizada.
     
    Este bucle se acostumbra a utilizar para recorrer tablas ya que es fácil de utilizar y de entender, aunque existe una forma más práctica con el bucle for genérico.
    A RECORDAR:
    Al iniciar el bucle se asigna a una variable un valor numérico. En cada vuelta del bucle se añadirá el valor del tercer argumento hasta que el valor de la variable sea igual al valor del segundo argumento. La sintaxis de este bucle es fácil de recordar ya que siempre es la misma. En caso de omitir el tercer argumento, el valor de este será 1 (se sumará siempre una unidad a la variable). La condición del bucle for numérico se comprueba al principio del bloque. El bucle for numérico debe ser cerrado con un end. 4 - Bucle for genérico
    La estructura del bucle es la siguiente:
    for var_1, var_2, ..., var_n in iterador do bloque de sentenciasend donde (var_1, var_2, ..., var_n) es un número cualquiera de variables y iterador es una función especial llamada iterador.
     
    Un iterador es aquella función utilizada en un for genérico que devuelve un determinado valor de la estructura que estemos recorriendo con el bucle. El valor que devuelve estas funciones especiales se asigna a (var_1, var_2, ..., var_n). Por lo tanto, el número de variables a declarar depende del iterador.
    Este bucle se utiliza principalmente en las tablas, por eso el uso de éste se explicará en detalle en otro capítulo del curso.
     
    Un ejemplo de uso de éste bucle es el siguiente:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle for genérico" begin say_title("Probando bucle for genérico") local tab = {"valor1", "valor2", "valor3"} for k, v in ipairs(tab) do say(k.." = "..v) end --for end --when end --stateend --quest Este ejemplo mostrará en pantalla lo siguiente:
    Probando bucle for genérico1 = valor12 = valor23 = valor3 Como habéis visto, este bucle viene de perlas para recorrer tablas de una manera más fácil.
    Como ya he dicho, el uso adecuado de este bucle se explicará con más atención en otro capítulo; mientras podéis utilizar el bucle for numérico como os enseñó keko en el capítulo VIII.
     
    5 - La palabra clave break
     
    Hasta ahora hemos visto que un bucle se repetía hasta llegar a una determinada condición. Lua dispone de una segunda manera más controlada por el programador para finalizar el bucle: la palabra clave break.
    Cuando dentro del bloque de sentencias el bucle se encuentre un break, el bucle finalizará automáticamente, independientemente del lugar y estado donde se encuentre el bucle.
     
    Veamos un ejemplo. El siguiente código
    quest metin2zone begin state start begin when 20016.chat."Probando bucle while" begin say_title("Probando bucle while") local i = 0 --definimos una variable a verificar en la condición while (i != 10) do --definimos una condición i = i + 1 --modificamos la variable adecuadamente para evitar un bucle infinito if i == 3 then say("Estoy en la posición 3!") end say(i) end --while end --when end --stateend --quest mostrará en pantalla lo siguiente:
    Probando bucle while12Estoy en la posición 3!345678910 ¿Qué pasaría si cambiáramos say("Estoy en la posición 3!") por break?
    El código quedaría:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle while" begin say_title("Probando bucle while") local i = 0 --definimos una variable a verificar en la condición while (i != 10) do --definimos una condición i = i + 1 --modificamos la variable adecuadamente para evitar un bucle infinito if i == 3 then break end say(i) end --while end --when end --stateend --quest Y mostrará en pantalla esto:
    Probando bucle while12 ¿Qué ha pasado? Pues que el bucle a finalizado cuando se ha encontrado el break.
     
    6 - Bucles infinitos en quest
     
    Antes os he hablado de bucles infinitos. ¿Qué utilidad tiene algo que no controlamos (se repetirá siempre)? Ninguna. ¿Pero y si lo combinamos con condiciones y break? Muchísima.
    Veamos un ejemplo:
    quest metin2zone begin state start begin when 20016.chat."Probando bucle while" begin say_title("Probando bucle while") while true do --definimos un bucle infinito local s = select("Opción 1", "Opción 2", "Salir") --añadimos un valor a s con la intervención del usuario if s == 1 then say("opción 1 seleccionada") --muestra opción 1 wait() elseif s == 2 then say("opción 2 seleccionada") --muestra opción 2 wait() else break --finaliza el bucle end end --while end --when end --stateend --quest Si lo ejecutamos veréis que nos ha quedado un pequeño menú que, ampliando vosotros mismos, puede llegar a ser un menú dinámico con múltiples opciones. Juntar esta técnica con tablas para obtener grandes resultados.
    Esta es una aplicación de un bucle infinito, podéis hacer con ellos lo que se os ocurra si lo entendéis correctamente.
     
    Changelog
     
    30/08/13 19:26 - Primera publicación oficial del capítulo
     
     
     
    Y aquí llega el final del capítulo. Espero que os haya gustado.
    Cualquier duda que tengáis podéis ponerla en una respuesta a este post.
     
    PD: Más de 2000 palabras en este capítulo. Yeah!
×
×
  • Crear nuevo...