Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[ QUEST
- Quest hecha por Camilo Martínez
- Consiste en el típico evento de Tanakas.
- Invocar ciertos piratas en un mapa, alcanzarlos y matarlos; recoger la oreja
- del suelo e intercambiarla luego por premios.
- Especificaciones:
- 1. A todos los GMs les aparece el pergamino para activarla
- 2. Aparecerá un cuadro indicando qué monstruos se invocará
- y la cantidad, en el botón "Lanzar oleada..."
- 3. La primera vez que se invoquen, se destinará un mapa
- específico. Está la opción de "Mapa actual" y los mapas
- que se configuren en la quest.
- 4. Aparecerá un anuncio para todos los jugadores que se invocaron x mobs
- en z mapa.
- 5. Para la segunda vez que se vayan a invocar, aparecerá
- en el cuadro el mapa de invocación.
- 6. Al terminar el evento, éste se pondrá en estado 0 para poder volver
- a cambiar el mapa de invocación.
- 7. Habrá un NPC que cambie x ítems con z cantidad entregando k orejas,
- independientemente si el evento está activo o no.
- Notas:
- 1. El número de oleadas es fijo ya que se hace desde un archivo regen.txt.
- Aunque se puede editar el archivo y se actualizará sin necesidad de hacer
- reboot. Tampoco es necesario, solo dale a Lanzar oleada de nuevo :)
- 2. La ventaja del regen es que se puede invocar desde cualquier mapa,
- a diferencia del mob.spawn() que lo hace desde el mapa actual.
- 3. El id del mob y la cantidad a invocar se toman desde el regen,
- abriendo el archivo desde la quest, en la función cant_id_mob()
- 4. Debes crear la ruta .."share/data/events/tanakas.txt" y en el archivo agregar:
- m 500 500 600 600 0 0 0s 100 300 5004
- Donde el 300 es la cantidad a invocar y 5004 el id del mob.
- Subnota: 600 600 es el radio x, y de spawn. Modificar si te parece
- muy corto el diámetro (tener en cuenta que los mapas no son del mismo tamaño)
- Subnota 2: El 500, 500 son las coordenadas más o menos del centro en los
- mapas medianos y grandes. Los monstruos máximo llegarán a coordenadas
- (500+600, 500+600) = (1100, 1100). Puedes modificarlo y probar.
- 5. La probabilidad de dropear la oreja es del 50%, en prob_mob puedos cambiarlo
- 6. Leer los comentarios de la quest.
- 7. Cualquier error notificarlo
- Que disfruten!
- Discord: Camilo#0869
- --]]
- quest evento_tanakas begin
- state start begin
- function info()
- return {
- ["drop_mob"] = 30202,
- ["prob_mob"] = 50,
- ["index_mapas"] = {63, 41, 64, 1},
- ["nombres_mapas"] = {"Desierto", "Jinno 1", "Valle", "Shinsoo 1"},
- ["premios"] = {
- ["id"] = {10, 21, 32, 43, 54, 65, 76, 87, 98, 99},
- ["cantidad"] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- ["precio"] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
- ["npc"] = 20095
- },
- }
- end
- when letter with pc.is_gm() begin
- send_letter("GM: Evento Tanakas")
- end
- function cant_id_mob()
- local det, tab = io.open('data/events/tanakas.txt'), ' '
- for line in det:lines() do return {tonumber(split(line,tab)[11]), split(line,tab)[10]} end
- end
- function index_name(r)
- local s = evento_tanakas.info()
- for i = 1, table.getn(s.index_mapas) do if s.index_mapas[i] == r then return i end end
- end
- function mensaje(ind)
- local s = evento_tanakas.info()
- local cant_id_mob = evento_tanakas.cant_id_mob()
- game.set_event_flag("evento_tanakas", ind)
- regen_in_map (ind, "data/events/tanakas.txt")
- notice_all("Se han invocado "..cant_id_mob[2].." "..mob_name(cant_id_mob[1]).." en "..s.nombres_mapas[evento_tanakas.index_name(ind)]..". Saca sus orejas!")
- end
- when button or info begin
- local s = evento_tanakas.info()
- local cant_id_mob = evento_tanakas.cant_id_mob()
- local tabla_select = {"Lanzar oleada ("..cant_id_mob[2].." mobs)"}
- say_title("Evento Tanakas")
- say("[ENTER]Hola "..pc.get_name())
- if game.get_event_flag("evento_tanakas") > 0 then
- table.insert(tabla_select, "Terminar")
- say("El evento está activo en el ")
- say("mapa "..s.nombres_mapas[evento_tanakas.index_name(game.get_event_flag("evento_tanakas"))])
- end
- say("[ENTER]El evento está configurado con el")
- say("mob "..mob_name(cant_id_mob[1]))
- say("[ENTER]Qué deseas hacer?")
- table.insert(tabla_select, "Cerrar")
- local sel = select_table(tabla_select)
- if sel == 1 then
- if game.get_event_flag("evento_tanakas") > 0 then
- regen_in_map (game.get_event_flag("evento_tanakas"), "data/events/tanakas.txt")
- notice_all("Se han invocado "..cant_id_mob[2].." "..mob_name(evento_tanakas.cant_id_mob()[1]).." en "..s.nombres_mapas[evento_tanakas.index_name(game.get_event_flag("evento_tanakas"))]..". Saca sus orejas!")
- else
- local tabla_select2 = {}
- table.insert(tabla_select2, "Mapa actual")
- table.foreachi(s.nombres_mapas, function(_, t) table.insert(tabla_select2, t) end)
- say_title("Evento Tanakas")
- say("[ENTER] Elige el lugar del evento")
- table.insert(tabla_select2, "Cerrar")
- local sel = select_table(tabla_select2)
- if sel != table.getn(tabla_select2) then
- if sel == 1 then
- evento_tanakas.mensaje(pc.get_map_index())
- else
- evento_tanakas.mensaje(s.index_mapas[sel-1])
- end
- end
- end
- elseif sel == table.getn(tabla_select) then
- return
- else
- game.set_event_flag("evento_tanakas", 0)
- end
- end
- when kill with npc.get_race() == evento_tanakas.cant_id_mob()[1] and game.get_event_flag("evento_tanakas") > 0 begin
- if number(1, 100) <= evento_tanakas.info().prob_mob then
- game.drop_item_with_ownership(evento_tanakas.info().drop_mob, 1)
- end
- end
- when 20095.chat."Cambiar orejas de Tanaka" begin -- Cambiar NPC si se necesita
- local s = evento_tanakas.info()
- say_title("Cambiar orejas de Tanaka")
- local tabla_select = {}
- for i = 1, table.getn(s.premios.id) do
- tabla_select[i] = item_name(s.premios.id[i]).." x"..s.premios.cantidad[i].." - "..s.premios.precio[i]
- end
- table.insert(tabla_select, "Cerrar")
- local sel = select_table(tabla_select)
- if sel != table.getn(tabla_select) then
- if pc.count_item(s.drop_mob) >= s.premios.precio[sel] then
- pc.give_item2(s.premios.id[sel], s.premios.cantidad[sel])
- pc.remove_item(s.drop_mob, s.premios.precio[sel])
- else
- syschat("No tienes suficientes "..item_name(s.drop_mob))
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement