Advertisement
Guest User

evento_tanakas

a guest
Apr 25th, 2019
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement