SHARE
TWEET

evento_tanakas

a guest Apr 25th, 2019 196 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[    QUEST
  2. Quest hecha por Camilo Martínez
  3. Consiste en el típico evento de Tanakas.
  4. Invocar ciertos piratas en un mapa, alcanzarlos y matarlos; recoger la oreja
  5. del suelo e intercambiarla luego por premios.
  6. Especificaciones:
  7. 1. A todos los GMs les aparece el pergamino para activarla
  8. 2. Aparecerá un cuadro indicando qué monstruos se invocará
  9. y la cantidad, en el botón "Lanzar oleada..."
  10. 3. La primera vez que se invoquen, se destinará un mapa
  11. específico. Está la opción de "Mapa actual" y los mapas
  12. que se configuren en la quest.
  13. 4. Aparecerá un anuncio para todos los jugadores que se invocaron x mobs
  14. en z mapa.
  15. 5.  Para la segunda vez que se vayan a invocar, aparecerá
  16. en el cuadro el mapa de invocación.
  17. 6. Al terminar el evento, éste se pondrá en estado 0 para poder volver
  18. a cambiar el mapa de invocación.
  19. 7. Habrá un NPC que cambie x ítems con z cantidad entregando k orejas,
  20. independientemente si el evento está activo o no.
  21.  
  22. Notas:
  23. 1. El número de oleadas es fijo ya que se hace desde un archivo regen.txt.
  24. Aunque se puede editar el archivo y se actualizará sin necesidad de hacer
  25. reboot. Tampoco es necesario, solo dale a Lanzar oleada de nuevo :)
  26. 2. La ventaja del regen es que se puede invocar desde cualquier mapa,
  27. a diferencia del mob.spawn() que lo hace desde el mapa actual.
  28. 3. El id del mob y la cantidad a invocar se toman desde el regen,
  29. abriendo el archivo desde la quest, en la función cant_id_mob()
  30. 4. Debes crear la ruta .."share/data/events/tanakas.txt" y en el archivo agregar:
  31. m   500 500 600 600 0   0   0s  100 300 5004
  32. Donde el 300 es la cantidad a invocar y 5004 el id del mob.
  33.     Subnota: 600 600 es el radio x, y de spawn. Modificar si te parece
  34.     muy corto el diámetro (tener en cuenta que los mapas no son del mismo tamaño)
  35.     Subnota 2: El 500, 500 son las coordenadas más o menos del centro en los
  36.     mapas medianos y grandes. Los monstruos máximo llegarán a coordenadas
  37.     (500+600, 500+600) = (1100, 1100). Puedes modificarlo y probar.
  38. 5. La probabilidad de dropear la oreja es del 50%, en prob_mob puedos cambiarlo
  39. 6. Leer los comentarios de la quest.
  40. 7. Cualquier error notificarlo
  41. Que disfruten!
  42. Discord: Camilo#0869
  43. --]]
  44.  
  45.  
  46.  
  47. quest evento_tanakas begin
  48.     state start begin
  49.            
  50.         function info()
  51.             return {
  52.                 ["drop_mob"] = 30202,
  53.                 ["prob_mob"] = 50,
  54.                 ["index_mapas"] = {63, 41, 64, 1},
  55.                 ["nombres_mapas"] = {"Desierto", "Jinno 1", "Valle", "Shinsoo 1"},
  56.                 ["premios"] = {
  57.                     ["id"] = {10, 21, 32, 43, 54, 65, 76, 87, 98, 99},
  58.                     ["cantidad"] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  59.                     ["precio"] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
  60.                     ["npc"] = 20095
  61.                 },
  62.             }
  63.         end
  64.  
  65.         when letter with pc.is_gm() begin
  66.             send_letter("GM: Evento Tanakas")
  67.         end
  68.        
  69.         function cant_id_mob()
  70.             local det, tab = io.open('data/events/tanakas.txt'), '  '
  71.             for line in det:lines() do return {tonumber(split(line,tab)[11]), split(line,tab)[10]}  end
  72.         end
  73.        
  74.         function index_name(r)
  75.             local s = evento_tanakas.info()
  76.             for i = 1, table.getn(s.index_mapas) do if s.index_mapas[i] == r then return i end end
  77.         end
  78.  
  79.         function mensaje(ind)
  80.             local s = evento_tanakas.info()
  81.             local cant_id_mob = evento_tanakas.cant_id_mob()
  82.             game.set_event_flag("evento_tanakas", ind)
  83.             regen_in_map (ind, "data/events/tanakas.txt")
  84.             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!")
  85.         end
  86.        
  87.         when button or info begin
  88.             local s = evento_tanakas.info()
  89.             local cant_id_mob = evento_tanakas.cant_id_mob()
  90.             local tabla_select = {"Lanzar oleada ("..cant_id_mob[2].." mobs)"}
  91.             say_title("Evento Tanakas")
  92.             say("[ENTER]Hola "..pc.get_name())
  93.             if game.get_event_flag("evento_tanakas") > 0 then
  94.                 table.insert(tabla_select, "Terminar")
  95.                 say("El evento está activo en el ")
  96.                 say("mapa "..s.nombres_mapas[evento_tanakas.index_name(game.get_event_flag("evento_tanakas"))])
  97.             end
  98.             say("[ENTER]El evento está configurado con el")
  99.             say("mob "..mob_name(cant_id_mob[1]))
  100.             say("[ENTER]Qué deseas hacer?")
  101.             table.insert(tabla_select, "Cerrar")
  102.             local sel = select_table(tabla_select)
  103.                 if sel == 1 then
  104.                     if game.get_event_flag("evento_tanakas") > 0 then
  105.                         regen_in_map (game.get_event_flag("evento_tanakas"), "data/events/tanakas.txt")
  106.                         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!")
  107.                     else
  108.                         local tabla_select2 = {}
  109.                         table.insert(tabla_select2, "Mapa actual")
  110.                         table.foreachi(s.nombres_mapas, function(_, t) table.insert(tabla_select2, t) end)
  111.                         say_title("Evento Tanakas")
  112.                         say("[ENTER] Elige el lugar del evento")
  113.                         table.insert(tabla_select2, "Cerrar")
  114.                         local sel = select_table(tabla_select2)
  115.                         if sel != table.getn(tabla_select2) then
  116.                             if sel == 1 then
  117.                                 evento_tanakas.mensaje(pc.get_map_index())
  118.                             else
  119.                                 evento_tanakas.mensaje(s.index_mapas[sel-1])
  120.                             end
  121.                         end
  122.                     end
  123.                 elseif sel == table.getn(tabla_select) then
  124.                     return
  125.                 else
  126.                     game.set_event_flag("evento_tanakas", 0)
  127.                 end
  128.         end
  129.  
  130.         when kill with npc.get_race() == evento_tanakas.cant_id_mob()[1] and game.get_event_flag("evento_tanakas") > 0 begin
  131.             if number(1, 100) <= evento_tanakas.info().prob_mob then
  132.                 game.drop_item_with_ownership(evento_tanakas.info().drop_mob, 1)
  133.             end
  134.         end
  135.        
  136.         when 20095.chat."Cambiar orejas de Tanaka" begin -- Cambiar NPC si se necesita
  137.             local s = evento_tanakas.info()
  138.             say_title("Cambiar orejas de Tanaka")
  139.             local tabla_select = {}
  140.             for i = 1, table.getn(s.premios.id) do
  141.                 tabla_select[i] = item_name(s.premios.id[i]).." x"..s.premios.cantidad[i].."    -   "..s.premios.precio[i]
  142.             end
  143.             table.insert(tabla_select, "Cerrar")
  144.             local sel = select_table(tabla_select)
  145.             if sel != table.getn(tabla_select) then
  146.                 if pc.count_item(s.drop_mob) >= s.premios.precio[sel] then
  147.                     pc.give_item2(s.premios.id[sel], s.premios.cantidad[sel])
  148.                     pc.remove_item(s.drop_mob, s.premios.precio[sel])
  149.                 else
  150.                     syschat("No tienes suficientes "..item_name(s.drop_mob))
  151.                 end
  152.             end
  153.            
  154.         end
  155.     end
  156. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top