Jump to content

KeKo

Miembro
  • Contador contenido

    518
  • Ingreso

  • Última visita

  • Días ganados

    74

Mensajes publicados por KeKo

  1. Buenas zoneros,

     

    Aqui teneis una vieja quest que hice para el mistery2masters en su momento, en la que al crear el pj a lvl 1 te va llevando por la city a hablar con cada npc y ellos te van dando el equipo.

     

    Tiene mucho tiempo asi que podria hacerse con menos lineas, pero me da pereza reducirla ya se queda como cuando la hice >.<

    quest comienzo begin	state start begin					when login begin				set_state(comenzar)							end	end	state comenzar begin		when letter begin			send_letter("Eres nuevo?")					end	end					when button or info begin				say_title("Eres nuevo?")		say("")		say("Hola "..pc.get_name().." he oido que eres nuevo")		say("asi que te dare un buen consejo")		say("")		say("Si vas hasta city los npcs")		say("te iran explicando su funcion")		say("y te daran tu equipo basico")		say("")		say("Vete a hablar primero con npcarma")		say("tendra una flecha encima, habla con el")		say("y el te seguira explicando")		say("")		set_state(arma)						end	end			state arma begin		when letter begin			local v = find_npc_by_vnum(9001)				if v != 0 then					target.vid("__TARGET__", v, "Npcarma")						send_letter("Vete con npcarma")		end	end			when button or info begin				say_title("Vete con Npcarma")		say("")		say("Npcarma te esta buscando")		say("tiene encima una flecha")		say("asi que lo encontraras facilmente")		say("")		say_reward("Vete a hablar cn el!")		say("")					end				when __TARGET__.target.click or 9001.chat."Npcarma" begin			target.delete("__TARGET__")						say_title("Npcarma")			say("")			say("Hola "..pc.get_name()..", yo soi npcarma")			say("y soi el que vende armas aqui")			say("")			say("Aunque para ti por ser nuevo")			say("tengo una arma de regalo")			say("")			say("No es muy buena pero")			say("para empezar te gustara")			say("")			if pc.job == 0 then					pc.give_item2(idarma,1) --espada					pc.give_item2(idarma,1) --lanza				elseif pc.job == 1 then					pc.give_item2(idarma,1) --espada					pc.give_item2(idarma,1) --arco					pc.give_item2(idarma,1) --daga					pc.give_item2(8000,200) --flechas				elseif pc.job == 2 then					pc.give_item2(idarma,1) --espada				elseif pc.job == 3 then					pc.give_item2(idarma,1) --fan					pc.give_item2(idarma,1) --campana			end			say_reward("Me han contado que te busca")			say_reward("npcarmadura, asi que ve con el")			set_state(armor)						end		end					state armor begin			when letter begin				local v = find_npc_by_vnum(9002)				if v != 0 then					target.vid("__TARGET__", v, "Npcarmor")						send_letter("Vete con npcarmor")			end		end				when button or info begin					say_title("Vete con npcarmor")			say("")			say("Npcarmor te esta buscando")			say("tiene encima una flecha")			say("asi que lo encontraras facilmente")			say("")			say_reward("Vete a hablar cn el!")			say("")					end				when __TARGET__.target.click or 9002.chat."Npcarmor" begin			target.delete("__TARGET__")						say_title("Npcarmor")			say("")			say("Hola "..pc.get_name().." he oido que eres nuevo")			say("asi que te contare algo")			say("")			say("Yo soi el que vende las armaduras aqui")			say("y por ser nuevo tengo un regalito para ti")			say("")			say("No es mi mejor armor, pero creo")			say("que a tu nivel te gustara")			say("")			say_reward("He oido que el fabricante de piedras")			say_reward("te estaba buscando, asi que ve con el")			set_state(fabricante_piedras)				if pc.job == 0 then					pc.give_item2(idarmor,1) --armadura					pc.give_item2(idcasco,1) --casco					pc.give_item2(idescudo,1) --escudo				elseif pc.job == 1 then					pc.give_item2(idarmor,1) --armadura					pc.give_item2(idcasco,1) --casco					pc.give_item2(idescudo,1) --escudo				elseif pc.job == 2 then					pc.give_item2(idarmor,1) --armadura					pc.give_item2(idcasco,1) --casco					pc.give_item2(idescudo,1) --escudo				elseif pc.job == 3 then					pc.give_item2(idarmor,1) --armadura					pc.give_item2(idcasco,1) --casco					pc.give_item2(idescudo,1) --escudo				end			end		end		state fabricante_piedras begin			when letter begin				local v = find_npc_by_vnum(Npcpiedras)				if v != 0 then					target.vid("__TARGET__", v, "Npcpiedras")						send_letter("El fabricante de piedras")			end		end				when button or info begin					say_title("El fabricante de piedras")			say("")			say("El fabricante de piedras te esta buscando")			say("tiene encima una flecha")			say("asi que lo encontraras facilmente")			say("")			say_reward("Vete a hablar cn el!")			say("")					end				when __TARGET__.target.click or npcpiedras.chat."El fabricante de piedras" begin			target.delete("__TARGET__")						say_title("El fabricante de piedras")			say("")			say("Hola "..pc.get_name().." he oido que eres nuevo")			say("asi que te contare quien soi yo")			say("")			say("Si tu me traes 3 piedras del mismo tipo")			say("yo te dare una piedra mejor")			say("Que te parece? Es buen trato?")			say("")			say("Bueno mientras no tengas piedras")			say("te dare un collar para que mates monstruos")			say("")			say_reward("He oido que el fabricante de gemas")			say_reward("tambien quiere hablar contigo")			say("")			pc.give_item2("idcollar", 1)			set_state(fabricante_gemas)						end		end				state fabricante_gemas begin			when letter begin				local v = find_npc_by_vnum(npcgemas)				if v != 0 then					target.vid("__TARGET__", v, "npcgemas")						send_letter("El fabricante de gemas")			end		end				when button or info begin					say_title("El fabricante de gemas")			say("")			say("El fabricante de gemas te esta buscando")			say("tiene encima una flecha")			say("asi que lo encontraras facilmente")			say("")			say_reward("Vete a hablar cn el!")			say("")					end				when __TARGET__.target.click or npcpiedras.chat."El fabricante de gemas" begin			target.delete("__TARGET__")									say_title("El fabricante de gemas")			say("")			say("Hola "..pc.get_name().." he oido que eres nuevo")			say("asi que te contare quien soi yo")			say("")			say("Si tu me traes piedras")			say("yo te dare a cambio gemas")			say("Que te parece? Es buen trato?")			say("")			say("Las gemas son items que te daran")			say("mejores bonus que las piedras normales")			say("")			say("Bueno mientras no tengas piedras")			say("te dare unos zapatos para que no vayas descalzo")			say("")			say_reward("He oido que el comerciante de doblones")			say_reward("tambien quiere hablar contigo")			say("")			pc.give_item2("idzapatos", 1)			set_state(comerciante_doblones)						end		end						state comerciante_doblones begin			when letter begin				local v = find_npc_by_vnum(npcdoblones)				if v != 0 then					target.vid("__TARGET__", v, "npcdoblones")						send_letter("El Comerciante de Doblones")			end		end				when button or info begin					say_title("El Comerciante de Doblones")			say("")			say("El Comerciante de Doblones te esta buscando")			say("tiene encima una flecha")			say("asi que lo encontraras facilmente")			say("")			say_reward("Vete a hablar cn el!")			say("")					end				when __TARGET__.target.click or npcdoblones.chat."El Comerciante de Doblones" begin			target.delete("__TARGET__")									say_title("El Comerciante de Doblones")			say("")			say("Hola "..pc.get_name().." he oido que eres nuevo")			say("asi que te contare quien soi yo")			say("")			say("Los doblones son un item especial")			say("de nuestro servidor")			say("")			say("Si tu me traes doblones")			say("podras conseguir nuevos items")			say("y tener privilegios que no podrias tener")			say("")			say("Asi es un doblon")			say_item_vnum("iddoblon")			say("")			say("Cuando tengas alguno ven conmigo")			say("Mientras te dare unos pendientes y brazalete")			say("")			pc.give_item2("idpendis", 1)			pc.give_item2("idbraza", 1)			set_state(finalmision)						end		end				state finalmision begin			when letter begin				send_letter("Ya conoces la ciudad")			end		end		when button or info begin					say_title("Ya conoces la ciudad")			say("")			say("Bueno ahora ya sabes mejor")			say("que hace cada npc de la ciudad")			say("")			say("Asi que ahora ya puedes irte")			say("a matar monstruos y subir de nivel")			say("")			say("Esperamos que disfrutes tu juego")			say("en nuestro servidor")			say("")			set_state(__complete)						end		end		state __complete begin					end		end

    Saludos ^^

  2. Me refiero a que cuando seleccionas y creas un pj la imagen de fondo es la misma no? Bueno, pues lo que yo busco, es si cuando creas un pj salga un fondo diferente al de seleccionar personaje, entiendes ahora? (UNA IMAGEN PARA SELECCIONAR PJ OTRA TOTALMENTE DIFERENTE PARA CREAR PJ.)

     

    No, no se puede

  3. No si se habran arreglado ese mapa, yo lo tengo en el pc, no hay "limites" por lo tanto, puedes ir por el interior de los muros y tal, nose si lo abran arreglado, el mapa esta genial salvo por eso, y muy buena la quest. Un saludo.

     

    Eso es que no tiene mdatr, habria que hacerselo o seguira atravesando.

     

    De todos modos es un mapa posible, puedes hacerlo en el que quieras ^^

  4. Aqui teneis una quest que hice cuando me aburria. Es mi propia version del evento de Los Juegos del Hambre que hice tras leerme el libro, con una votacion via mysql para elegir a los jugadores del evento.

     

    Esta sin acabar, y no lo acabare, asi que pa quien quiera adaptarla a su server ahi va

     

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

     

     

     

    quest juegos_del_hambre begin    state start begin        when 20012.chat."Los Juegos del Hambre" begin            if pc.is_gm() then                    say_title("Los Juegos del Hambre")            say("")            say("Que quieres hacer?")            say("")                    local juego = select ("Elecciones" , "Juegos" , "Cerrar")            if juego == 1 then                        say_title("Los Juegos del Hambre")            say("")                        local ele = select ("Abrir las elecciones" , "Cerrar las elecciones" , "Elegir Seleccionados" , "Cerrar")                                if ele == 1 then                                        notice_all("Ha empezado el periodo de elecciones para los Juegos del Hambre")                    notice_all("podeis presentaros como tributos en el npc del evento")                    game.set_event_flag("juegos_elecciones",1)                    game.set_event_flag("juegos_hambre",1)                                        elseif ele == 2 then                    notice_all("Se han cerrado las elecciones a tributo de cada distrito")                    notice_all("pronto se anunciaran los resultados")                    game.set_event_flag("juegos_elecciones", 0)                    local reino = {"Shinso","Chunjo","Jinno"}                    for i=1, table.getn(reino) do                        mysql_query("UPDATE player.juegos_hambre SET elegido='1' WHERE distrito='"..reino[i].."' ORDER BY votos desc LIMIT 8;")                    end                                            elseif ele == 3 then                                        notice_all("Ya se han seleccionado los tributos para Los Juegos del Hambre")                    notice_all("id al npc para ver quienes son los afortunados")                    game.set_event_flag("juegos_elecciones", 2)                    local elegi = mysql_query("SELECT tributo FROM player.juegos_hambre WHERE elegido='1';")                    for i=1, table.getn(elegi) do                        game.set_event_flag("elegido"..elegi.tributo[i].."",1)                    end                    end            elseif juego == 2 then                            say_title("Los Juegos del Hambre")                say("")                            local ele = select ("Empezar los Juegos" , "Cerrar")                                if ele == 1 then                                        notice_all("Que den comienzo los Juegos del Hambre!")                    notice_all("los tributos elegidos de cada distrito deben dirigirse al npc del evento")                    game.set_event_flag("juegos_hambre", 1)                    server_timer("juegos_contador_muertes", 60*5)                    server_timer("juegos_contador_final", 60*5)                                        end            end                                    elseif pc.is_gm() == false then                    if game.get_event_flag("juegos_hambre") == 0 then                            say_title("Los Juegos del Hambre")                say("")                say("Lo siento, en este momento no esta activo el evento")                say("")            elseif game.get_event_flag("juegos_elecciones") == 1 then                            say_title("Los Juegos del Hambre")                say("")                say("Buenas tardes posible tributo")                say("que te gustaria hacer?")                say("")                            local elecciones = select ("Presentarme a tributo" , "Ver tributos" , "Votar tributos" , "Cerrar")                if elecciones == 1 then                                    if pc.getqf("presentado_hambre") == 1 then                        say_title("Los Juegos del Hambre")                        say("")                        say("Lo siento, ya te has presentado como tributo")                        say("")                        return                        end                                    if pc.get_level() < 80 then                                            say_title("Los Juegos del Hambre")                        say("")                        say("Lo siento pero para ser tributo hay que ser nivel 80")                        say("")                        return                        end                                    say_title("Los Juegos del Hambre")                    say("")                    say("Admiro tu valentia ofreciendote!")                    say("")                    say("Dime, como te llamas para anotarte como tributo?")                    say("")                                        local nombre = input()                local reino = {"Shinso","Chunjo","Jinno"}                    if nombre != pc.get_name() or nombre == nil then                                            say_title("Los Juegos del Hambre")                        say("")                        say("Oye, no puedes dejar esto en blanco")                        say("o poner el nombre de otros")                        say("")                        return                        end                                            pc.setqf("presentado_hambre",1)                        mysql_query("INSERT INTO player.juegos_hambre SET tributo='"..nombre.."',distrito='"..reino[pc.get_empire()].."',votos='0';")                    chat("Te has presentado a tributo por el Distrito "..pc.get_empire().." mucha suerte")                                    elseif elecciones == 2 then                    local reino = {"Shinso","Chunjo","Jinno"}                    local candida = mysql_query("SELECT tributo FROM player.juegos_hambre WHERE distrito='"..reino[pc.get_empire()].."';")                    table.insert(candida.tributo,"Cancelar")                    say_title("Los Juegos del Hambre - Candidatos a tributo")                    say("")                    say_size(350,360)                    local elegido = select_table(candida.tributo)                                    elseif elecciones == 3 then                    say_title("Los Juegos del Hambre")                    say("")                    say("Aqui podras votar a tu candidato favorito")                    say("elige al que mejor creas que vaya a defender")                    say("el honor de tu distrito y votalo")                    say("")                                    local o = select ("Ok, votare" , "Paso")                    if o == 1 then                                            if pc.getqf("has_votado_hambre") == 1 then                                                    say_title("Los Juegos del Hambre")                            say("")                            say("Lo siento, ya has votado a un tributo")                            say("")                            return                            end                                            local reino = {"Shinso","Chunjo","Jinno"}                        local candida = mysql_query("SELECT tributo,votos FROM player.juegos_hambre WHERE distrito='"..reino[pc.get_empire()].."';")                        table.insert(candida.tributo, "Cancelar")                        say_title("Los Juegos del Hambre - Elige tu preferido")                        say("")                        say_size(350,360)                        local elegido = select_table(candida.tributo)                        if elegido == table.getn(candida.tributo) then                            return;                        else                                                        mysql_query("UPDATE player.juegos_hambre SET votos=votos+1 WHERE tributo='"..candida.tributo[elegido].."';")                            pc.setqf("has_votado_hambre", 1)                            chat("Has votado a "..candida.tributo[elegido]..", esperemos que salga elegido para el evento")                                                        end                    end                end                                elseif game.get_event_flag("juegos_elecciones") == 2 then                            say_title("Los Juegos del Hambre")            say("")            say("Que quieres hacer?")            say("")                                local cosa = select ("Participar en los Juegos","Ver las estadisticas","Ver los elegidos","Cerrar")                            if cosa == 1 then                            if game.get_event_flag("juegos_hambre") != 1 then                                    say_title("Los Juegos del Hambre")                    say("")                    say("Espera a que empiecen los Juegos")                    say("")                    return                    end                                        if game.get_event_flag("elegido"..pc.get_name().."") == 1 then                                                chat("Adelante, la gloria te espera")                    pc.warp(8763200,8828900)                    game.set_event_flag("tributos_distrito"..pc.get_empire().."",game.get_event_flag("tributos_distrito"..pc.get_empire().."") + 1)                    game.set_event_flag("tributos_dentro",game.get_event_flag("tributos_dentro")+1)                    game.set_event_flag("elegido"..pc.get_name().."",0)                    notice_all(pc.get_name().." ha entrado a Los Juegos del Hambre")                    pc.setqf("vidas_hambre",3)                    return                    end                                            say_title("Los Juegos del Hambre")                say("")                say("Lo siento no eres uno de los elegidos")                say("")                                elseif cosa == 2 then                local reino = {"Shinso","Chunjo","Jinno"}                local elegidos = mysql_query("SELECT tributo,asesinatos FROM player.juegos_hambre WHERE distrito='"..reino[pc.get_empire()].."' ORDER BY votos desc LIMIT 8;")                say_title("Los Juegos del Hambre - Estado de los tributos")                say("")                table.foreachi(elegidos,function(nr,dato) say(nr.." Tributo: "..dato[1].." Asesinatos: "..dato[2]) end)                say("")                                                elseif cosa == 3 then                                    local reino = {"Shinso","Chunjo","Jinno"}                local elegidos = mysql_query("SELECT tributo,distrito,votos FROM player.juegos_hambre WHERE distrito='"..reino[pc.get_empire()].."' ORDER BY votos desc LIMIT 8;")                say_title("Los Juegos del Hambre - Tributos Seleccionados")                say("")                table.foreachi(elegidos,function(nr,dato) say(nr.." Tributo: "..dato[1].." Distrito: "..dato[2]) end)                say("")                        end            end        end    end        when logout with pc.get_map_index() == 250 and game.get_event_flag("juegos_hambre") == 1 begin                local reino = {"Shinso","Chunjo","Jinno"}                    notice_all(""..pc.get_name().." ha desertado de los Juegos del Hambre, el distrito "..reino[pc.get_empire()].." ha perdido un tributo")            pc.setqf("vidas_hambre",5)            game.set_event_flag("tributos_dentro",game.get_event_flag("tributos_dentro")-1)            game.set_event_flag("elegido"..pc.get_name().."",0)            game.set_event_flag("tributos_distrito"..pc.get_empire().."",game.get_event_flag("tributos_distrito"..pc.get_empire().."") - 1)                end                when kill with npc.is_pc() and pc.get_map_index() == 250 and game.get_event_flag("juegos_hambre") == 1 begin            mysql_query("UPDATE player.juegos_hambre SET asesinatos=asesinatos+1 WHERE tributo='"..pc.get_name().."';")                local vid = npc.get_vid()                        pc.select(vid)            pc.setqf("vidas_hambre", pc.getqf("vidas_hambre") - 1)            chat("Te quedan todavía "..pc.getqf("vidas_hambre").." vidas asi que ten cuidado")                            if pc.getqf("vidas_hambre") == 0 then                                    warp_to_village()                notice_all(""..pc.get_name().." ha sido eliminado de Los Juegos del Hambre")                game.set_event_flag("elegido"..pc.get_name().."",0)                game.set_event_flag("tributos_distrito"..npc.get_empire().."", game.get_event_flag("tributos_distrito"..npc.get_empire().."") - 1)                        if game.get_event_flag("tributos_distrito"..npc.get_empire().."") == 0 then                                local reino = {"Shinso","Chunjo","Jinno"}                notice_all("El distrito "..reino[pc.get_empire()].." ha sido elimando de Los Juegos del Hambre")                                end            end                    end                            when juegos_contador_final.server_timer with game.get_event_flag("juegos_hambre") == 1 begin                local flags = {game.get_event_flag("tributos_distrito1"),game.get_event_flag("tributos_distrito2"),game.get_event_flag("tributos_distrito3")}                        if flags[1] != 0 and flags[2] == 0 and flags[3] == 0 then                            notice_all("El Distrito Shinso ha ganado los Juegos del Hambre")                clear_server_timer("juegos_contador_muertes")                server_timer("final_juegos",10)                            elseif flags[2] != 0 and flags[1] == 0 and flags[3] == 0 then                            notice_all("El Distrito Chunjo ha ganado los Juegos del Hambre")                clear_server_timer("juegos_contador_muertes")                server_timer("final_juegos",10)            elseif flags[3] != 0 and flags[1] == 0 and flags[2] == 0 then                            notice_all("El Distrito Jinno ha ganado los Juegos del Hambre")                clear_server_timer("juegos_contador_muertes")                server_timer("final_juegos",10)                            end                            server_timer("juegos_contador_final",60*5)                    end                        when juegos_contador_muertes.server_timer with game.get_event_flag("juegos_hambre") == 1 begin                    server_timer("juegos_contador_muertes",60*5)                        for i=1, 3 do                            local reino = {"Shinso","Chunjo","Jinno"}                        notice_all("El distrito "..reino[i].." todavia tiene "..game.get_event_flag("tributos_distrito"..i.."").." tributos vivos")                                        end            end                    when final_juegos.server_timer begin                    notice_all("Los Juegos del Hambre han terminado, pero hay una nueva regla")            notice_all("solo puede haber un ganador, asi que mataos entre vosotros hasta que solo quede 1")            game.set_event_flag("tributos_distrito1",0)            game.set_event_flag("tributos_distrito2",0)            game.set_event_flag("tributos_distrito3",0)            clear_server_timer("juegos_contador_final")            clear_server_timer("juegos_contador_muertes")            server_timer("campeon_juegos",60*1)            mysql_query("UPDATE player.juegos_hambre SET campeon='1' WHERE asesinatos>'0' ORDER BY asesinatos desc LIMIT 1;")                    end                    when campeon_juegos.server_timer begin                    if game.get_event_flag("tributos_dentro") == 1 then                        local elegi = mysql_query("SELECT tributo FROM player.juegos_hambre WHERE campeon='1';")                        game.set_event_flag("campeon_juegos"..elegi.tributo[1].."",1)                game.set_event_flag("tributos_dentro", 0)                game.set_event_flag("juegos_hambre", 0)                notice_all(""..elegi.tributo[1].." es el nuevo |*|Campeon de los Juegos|*|, muchas felicidades")                notice_all("Con esto se acaba esta edicion de Los Juegos del Hambre")                return                end                                server_timer("campeon_juegos",60*1)                        end        endend       

     

     

     

    Pa quien lo este implementado, os aconsejo usar esto:

     

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

     

    O el mega select de los candidatos os bugeara el chat con el npc.

     

    Y la tabla de mysql:

     

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

     

    Saludos :P

  5. Me han pedido ayuda con una cosa de esta quest y me fije que el warp no funciona, meted asi el primer when

    when 11001.chat."Guerra de reinos" or 11003.chat."Guerra de reinos" or 11005.chat."Guerra de reinos" begin					local akroma_war = {							{19900, 30000},				{20000, 30000},				{30000, 30000}				}					if game.get_event_flag("nation_war")== 0 then			say("La Nation War esta cerrada, en este momento")						elseif game.get_event_flag("nation_war")== 1 then			say("La Nation War esta abierta, quieres acceder viajero?")				local nation_war = select("Si","No")								if nation_war == 1 then					if pc.level < 65 then					say("Eres nivel "..pc.level()..", necesitas ser 65.")					return					end						pc.warp(akroma_war[pc.get_empire()][1],akroma_war[pc.get_empire()][2])				end			end		end
  6. Y una cosa , mata el metine que mata me dan 13 puntos , como hago para cambiarlo y el primer item pida 50 puntos segundo 100 ... etc

     

    y si compro algo si tengo 100 puntos compro algo y sigo teniendo lso 100 puntos ..

     

    Esta explicado en el texto, es ir editando los datos de los arrays.

  7. keko no lo entiendo por q en la parte esta

     

    2 - Arrays con subcategorías:

     

    cordes[4][2] es -> 12300

     

    ami me da nil

    por q son solo 3 tablas

     

    en esta parte

    4 - KeKo, no lo hemos entendido!!!!

     

    local sitio = select ("Mapa1" , "Mapa2", "Mapa3" , "Cerrar")

     

    sito es un select no una tabla

    por eso me pregunto por q usas esto

     

    if sitio == table.getn(sitio)+1 then return end

     

    table.getn(tala) esta funcion cuenta las cosas en la tabla por ejemplo

     

    a={4,5,6,13,5}

    print(table.getn(a))-->5

    del select debe de ser nil por q el sitio no es una tabla

     

    perdona por corregirte pero es mejor saver los errores y no aserlo muchas veses, por q con una script complicada puede ser ese error mui grave

     

    Pos en el primer caso era un 3, me equivoque al escribirlo [3][2]

     

    En el segundo caso también me equivoqué, era table.getn(cordes) no (sitio).

  8. Buenas zoneros, hoy que me encuentro especialmente trabajador (es decir, que no me apetece estudiar) voy a publicar una nueva entrega del curso de creación de quests de metin2zone.

    Esta nueva guía se la dedico a mi amigo raul, que siempre me habia dicho que debería aprender esto :trollface: y que era una de las guias que teniamos planeadas cuando configuramos el curso por primera vez pero que no se llego a llevar a cabo.

     

    Como veis la he titulado: amigas o enemigas? es para que os deis cuenta de que como programadores que somos los que nos especializamos en lua es importante reducir el código lo máximo posible por diferentes razones: ocupa menos, es menos texto para la vista, queda mas guay, etc y tu quest seguirá haciendo lo mismo que antes pero con menos código.

     

    1 - Tablas:

     

    Bueno, antes de nada vamos a crear nuestra tabla o array sencillo:

     

    local keko = {10,20,34,43,57}
    

    Como veis, a diferencia de los selects a los que estáis acostumbrados los elementos de la tabla estan dentro de { }

     

    ---------------------------------------------------------------------------------------------------------------------------

    Ojo:Los elementos deben estar separados por comas, y el último de ellos NO debe llevar la coma.

    ---------------------------------------------------------------------------------------------------------------------------

     

    Bueno, ahora que tenemos una mini tabla vamos a llamar a los diferentes elementos de la misma. La sintaxis es la siguiente:

     

    nombre[posicion]
    

    keko[1] -- 10
    keko[2] -- 20
    keko[3] -- 34
    keko[4] -- 43
    keko[5] -- 57
    

    Como veis escribimos el nombre del local y luego entre [ ] ponemos la posicion del elemento que queramos seleccionar dentro del array.

     

    Asi que ahora ya podeis meter vuestras tablas en la quest del siguiente modo:

     

    local items = {160,161,162,163}
    pc.give_item2(items[1]) -- te dara el 160
    pc.give_item2(items[2]) -- te dara el 161
    pc.give_item2(items[3]) -- etc
    pc.give_item2(items[4]) -- etc
    

    De todos modos en ese ejemplo un for lo haría mucho mas sencillo, aunque ya os explicare mas a fondo como se usa

     

    local items = {160,161,162,163}
    for i=1, table.getn(items) do -- en la i ponemos igual a 1 y luego la cantidad de veces que se repita
    pc.give_item2(items[i]) -- te dara cada uno de los items que haya en la tabla
    end -- cada for le corresponde un end
    

    2 - Arrays con subcategorías:

     

    Bueno, hemos visto una tabla sencillita, vamos a complicar un poco la cosa:

     

    local cordes = {
    {12500,13400},
    {12400,18900},
    {19800,12300}
    }
    

    Ahora tenemos una tabla con diferentes apartados dentro della. Vamos a ver como sería la sintaxis en este caso:

     

    nombre[subcategoria][posicion]
    

    cordes[1][1] -- 12500
    cordes[1][2] -- 13400
    
    cordes[2][1] -- 12400
    cordes[2][2] -- 18900
    
    cordes[3][1] -- 19800
    cordes[3][2] -- 12300
    

    -----------------------------------------------------------------------------------------------------

    Ojo:Las subcategorias deben estar separadas por comas, y la ultima NO la lleva

    -----------------------------------------------------------------------------------------------------

     

    Como veis, de nuevo escribimos el nombre, luego pondremos un primer [ ] con la subcategoría, que es el número de arrays simples dentro del array compuesto:

     

    local nombre = { -- abres la tabla
    {} -- subcategoria 1
    {} -- subcategoria 2
    {} -- subcategoria 3
    } -- cierras la tabla
    

    En el segundo [ ] va la posicion del elemento como habiamos hecho con el array simple

     

    local cordes = {
    {12500,13400,17500,14000},
    {12400,18900,13200}
    }
    

    cordes[1][4] -- 14000
    cordes[2][2] -- 18900
    

    Veamoslo en una quest:

     

    local cordes = {
    {12500,13400},
    {12400,18900},
    {19800,12300}
    }
    pc.warp(cordes[1][1],cordes[1][2]) -- 12500, 13400
    

    3. Arrays + funciones + selects = locura?

     

    Bien, hasta ahora solo hemos visto ejemplos sin llegar a hacer una quest en condiciones. Lo más habitual usando arrays es combinarlos con un local = select del siguiente modo

     

    say("Que arma quieres")
    say("")
    local items = {160,161,162}
    local arma = select ("Ninfa +0" , "Ninfa +1" , "Ninfa +2" , "Cerrar")
    if arma == table.getn(items)+1 then return end
    pc.give_item2(items[arma],1)
    

    De este modo, segun lo que eligamos en el select, nos asignara uno de los elementos del array, si pinchamos en Ninfa +0 el juego enviara al array la orden de mostrar el elemento de posicion 1, si pinchas en Ninfa +1 te enviará la de posicion 2 y así sucesivamente.

     

    Por lo tanto, al meter el resultado del select en el array

     

    pc.give_item2(items[arma],1)
    

    Te dara la que hayas seleccionado, y así te evitarás tener que poner tres if y solo pondras 1

     

    Ahora con un array doble:

     

    say("Que arma quieres")
    say("")
    local items = {
    {160,2},
    {161,1},
    {162,3}
    }
    local arma = select ("Ninfa +0" , "Ninfa +1" , "Ninfa +2" , "Cerrar")
    if arma == table.getn(items)+1 then return end
    pc.give_item2(items[arma][1],items[arma][2])
    

    Tal y como está ahora, cogera la subcategoría del select, y una vez la tenga te dara lo que tengas en la posicion 1 y en la cantidad pondra lo que tengas en la posicion 2. De este modo, aunque las cantidades del item sean diferentes podrás hacerlo con un solo if.

     

    Y por último vamos a meterle mas complicacion, una funcion dentro del array!

     

    say("Te voi a dar un arma aleatoria")
    say("")
    local items = {
    {160,2},
    {161,1},
    {162,3}
    }
    local arma = select ("OK" , "Cerrar")
    if arma == 2 then return end
    pc.give_item2(items[math.random(1,table.getn(items))][1],items[math.random(1,table.getn(items))][2])
    

    Bien, ahora en este caaso el juego nos va a dar un arma aleatoria, porque hemos incluido la funcion math.random dentro del array. Tal y como la hemos puesto:

     

    [math.random(1,table.getn(items))]

    Nos dara un resultado que puede estar entre 1 y el numero de subcategorias que tiene la tabla items.

     

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    (table.getn(nombretabla)) es una función muy útil que devuelve el número maximo de elementos que tiene una tabla simple o de subcategorias de una compuesta)

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    Por lo tanto tal y como esta configurada la quest buscara primero la subcategoría, que sera el número aleatorio, y después irá a la posicion dentro de ella que le hemos dicho (1 para la id y 2 para la cantidad)

     

    4 - KeKo, no lo hemos entendido!!!!

     

    Bueno vale, os pondré otro ejemplo:

     

    say("A donde quieres ir?")
    sa("")
    local sitio = select ("Mapa1" , "Mapa2", "Mapa3" , "Cerrar")
    local cordes = {
    {cordx,cordy},
    {cordx,cordy},
    {cordx,cordy}
    }
    if sitio == table.getn(cordes)+1 then return end
    pc.warp(cordes[sitio][1],cordes[sitio][2])
    

    5 - Subcategorías numeradas

     

    Vamos a probar otra cosa: y si metemos un numero determinado para cada subcategoría en vez de 1,2,3,etc?

     

    local prueba = {
    [100] = {10,11},
    [1001] = {12,13},
    [134] = {14,15}
    }
    

    Veamos la sintaxis de esto:

     

    chat(prueba[100][1]) -- 10
    chat(prueba[1001][2] -- 13
    

    De nuevo debemos hacer referencia primero a la subcategoria y luego a la posicion detro de la misma.

     

    Y para que nos sirve esto? Tiene un monton de aplicaciones pero una muy típica es igualar la numeración de la subcategoría a una funcion:

     

    when 45000.use or 45001.use or 45002.use begin
    local premios = {
    [45000] = {30,31},
    [45001] = {32,33},
    [45002] = {34,35}
    }
    chat(premios[item.get_vnum()][1]) -- si tu item es 45000 esto es 30
    chat(premios[item.get_vnum()][2])  -- si tu item es 45002 esto es 34
    end
    

    De este modo la subcategoría la reconoce el juego segun el item que hayas usado.

     

    Y bueno chicos, eso sería todo. Todavía me quedaría muchísimo de explicar sobre el uso de las tablas, pero el hecho de que no tengo demasiado tiempo y de que mis conocimientos de las mismas no son tan amplios como los de Noa (y muchos otros xd) lo dejaré aqui en esta entrega del curso de quests. Espero que os sea útil.

  9. No la encuentro.. xd

     

    Pos hazle el motlist

     

    -Motlist.txt: En cada carpeta de un mob debe aver un archivo con este nombre, ya que es el que le dije al juego a que movimiento se corresponde cada uno de los gr2 de animaciones del mob.

     

    Explicacion del motlist:

     

    Imagen enviada

     

    -Cada linea lleva GENERAL luego el nombre del movimiento, que puede ser WAIT, RUNT, DIE, ATTACK, etc (nombres en ingles de las acciones de los mobs) y luego el nombre del .msa que enlaza con esa animacion. El numero despues del nombre del msa poned el mismo que en otra linea.

×
×
  • Crear nuevo...