Jump to content
Sign in to follow this  
caanmasu

[QUEST] Evento Tanaka mejorado

Recommended Posts

EDITO: debido a que cada pirata almacenaba un event_flag en la tabla quest, he agregado el reiniciador que no solo vuelve 0 el reiniciador de pirata sino que borra el registro de cada pirata invocado... en otras palabras, si se invocaban 1000 piratas en un evento, se hacían 1000 event_flag; con el reiniciador se eliminan esos 1000 registros y así se limpia la db.

 

Hola a todos!

Hoy traigo otra quest, es un Evento Tanaka con la diferencia de que los GMs pueden ver

los Tanakas en tiempo real en el mapa. Todos los GMs los pueden ver, no solo el GM que los

invocó. Para más detalles leer el comentario del archivo de la quest.

 

Si les gustó no olviden darle Like, piensen que están en Facebook :v (ba dum tss!)

Un posible error que puede pasar es que cuando le den clic al pergamino no abra la misión.

Yo cargo de nuevo todas las quest y hago reboot; luego sí compilo la actual. Cuando encuentre la

razón de por qué no funciona el botón les cuento.

No les quito más tiempo, link:

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

 

Vidio random para todos:

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

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

 

evento_tanakas_v2.quest

--[[	QUEST
Quest hecha por Camilo Martínez
Consiste en el típico evento de Piratas Tanaka
con la diferencia de que los GMs pueden ver la
ubicación en el mapa grande de los piratas
en tiempo real.

Especificaciones:
1. Solo a los GMs les aparecerá un pergamino
de misión.
2. Al darle clic, (estando en el mapa configurado en
la quest) mencionará el nombre del monstruo
a invocar y el rango mín-máx que se puede invocar.
3. Aparecerá un input() para digitar la cantidad
de monstruos a invocar
4. Al invocarlos, aparecerá un anuncio a todos
indicando el nombre del mob, cantidad de invocados
y el mapa en donde te encuentras
5. Se asignarán targets o puntos en el mapa por cada
pirata que invoques.
6. Se pueden invocar las oleadas que desees sin 
ningún problema
7. Al matar piratas botará una oreja con probabilidad
modificable en la quest
8. Las orejas se cambiarán con el NPC 20095.

FIX: reiniciar contador ya funciona

Notas:
1. Todos los GMs pueden ver los monstruos en el mapa.
Si no eres el GM que invocó, debes cambiar pj para 
verlos en el mapa.
2. Cada monstruo invocado se le asignará un vid (identificador)
pero al morir, no se vuelve 0 el vid. Así que
tuve que inventarme un reiniciador del contador de
oleadas. El contador se reinicia en el NPC 20095
solo siendo GM. El contador es para mostrar a los GMs
los puntos donde están los monstruos. Si los reinicias
simplemente no se verán, así que recomendado que se
reinicie cuando estés seguro de que no hayan 
piratas en el mapa.
3. El evento no tiene inicio y finalización, solo
se invocan monstruos.
4. El reinicio consiste en dejar el contador de oleadas en 0
y borrar todas las tuplas en player.quest que contengan
en el nombre la palabra "PIRATA".
Cada mob invocado ocupa un registro en la base de datos, así que
es una forma de limpiar la tabla.
5. Reportar cualquier error
Que la disfruten!
Discord: Camilo#0869
--]]



quest evento_tanakas_v2 begin
	state start begin
			
		function info()
			return {
				["index_mapa"] = 63,
				["nombre_mapa"] = "Desierto",
				["id_mob"] = 5004,
				["drop_mob"] = 30202,
				["prob_mob"] = 50, -- del 1% al 100% (entero)
				["radio"] = 1000,
				["max_invoc"] = 300,
				["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}
				},
			}
		end

		when letter with pc.is_gm() begin
			send_letter("GM: Evento Tanakas")
			for j = 1, game.get_event_flag("OleadaPirata") do
				for i = 1, evento_tanakas_v2.info().max_invoc do
					local vid = game.get_event_flag(j.."PIRATA"..i)
					target.vid(j.."PIRATA"..i, vid, mob_name(evento_tanakas_v2.info().id_mob))
				end
			end
		end
		
		when button or info begin
			local s = evento_tanakas_v2.info()
			if pc.get_map_index() == s.index_mapa then
				say_title("Evento Tanakas")
				say("[ENTER]Hola "..pc.get_name())
				say("[ENTER]Los "..mob_name(s.id_mob).." se invocarán en")
				say("el mapa actual.")
				say("[ENTER]Digita la cantidad a invocar (1-"..s.max_invoc..")")
				say("Deja vacío para cancelar")
				local cantidad = tonumber(input())
				if cantidad == nil or cantidad == 0 or cantidad > s.max_invoc then return end
				game.set_event_flag("OleadaPirata", game.get_event_flag("OleadaPirata")+1)
				for i = 1, cantidad do
					local vid = mob.spawn(s.id_mob, pc.get_local_x(), pc.get_local_y(), s.radio, false, 1)
					target.vid(game.get_event_flag("OleadaPirata").."PIRATA"..i, vid, mob_name(s.id_mob))
					game.set_event_flag(game.get_event_flag("OleadaPirata").."PIRATA"..i, vid)
				end
				notice_all("Se han invocado "..cantidad.." "..mob_name(s.id_mob).." en "..s.nombre_mapa..". ¡Saca sus orejas!")
			else
				syschat("Debes estar en el desierto para poder invocar")
			end
		end

		when kill with npc.get_race() == evento_tanakas_v2.info().id_mob begin
			if number(1, 100) <= evento_tanakas_v2.info().prob_mob then
				game.drop_item_with_ownership(evento_tanakas_v2.info().drop_mob, 1)
			end
		end

		when 20095.chat."Reiniciar contador Evento Tanakas" with pc.is_gm() begin
			say_title(mob_name(npc.get_race()))
			say("[ENTER]El servidor hace una cantidad de ciclos cuando")
			say("invoca los tanakas. Si la cantidad de ciclos es muy grande,")
			say("puede ralentizar el proceso.")
			say("Actualmente el contador está en "..game.get_event_flag("OleadaPirata"))
			say("Solo reinicialo cuando no haya ningún Tanaka por ahí ")
			say("[ENTER]Reiniciarlo ahora?")
			if select("Sí ", "No") == 1 then
				if select("Sí ", "No") == 1 then
					game.set_event_flag("OleadaPirata", 0)
					mysql_query("DELETE FROM player.quest WHERE szName like '%PIRATA%'")
					syschat("Reiniciado")
				end
			end
		end
		
		when 20095.chat."Cambiar orejas de Tanaka" begin -- Cambiar NPC si se necesita
			local s = evento_tanakas_v2.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

 

Edited by caanmasu

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...