Jump to content
Sign in to follow this  
ChuchoGamer

Me pueden correjir esta quest !!!!

Recommended Posts

Buenas quiero pedirles se me pueden corregir esta quest  ya que mata 5 mobs distintos y quiero que cuando mate 5 mobs distintos de una Recompensa 

 

quest hola begin
    state start begin
        when 9010.chat."Mata xd" begin
            say_title("Mata")
            say("5 Perros")
            say("5 de otra cosa")
            say("5 de otra cosa")
            say("5 de otra cosa")
            say("5 de otra cosa")
            pc.setqf("estadoms",1)
        end
        when 101. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador1") < 5 then
                chat("Has matado a 5 perros")
            else
                pc.setqf("contador1",pc.getqf("contador1")+1)
            end
        end
        when 102. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador2") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador2",pc.getqf("contador2")+1)
            end
        end
        when 103. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador3") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador3",pc.getqf("contador3")+1)
            end
        end
        when 104. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador4") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador4",pc.getqf("contador4")+1)
            end
        end
        when 105. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador5") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador5",pc.getqf("contador5")+1)
            end
        end
    end
end

Share this post


Link to post
Share on other sites
hace 5 horas, ChuchoGamer dijo:

Buenas quiero pedirles se me pueden corregir esta quest  ya que mata 5 mobs distintos y quiero que cuando mate 5 mobs distintos de una Recompensa 

 

quest hola begin
    state start begin
        when 9010.chat."Mata xd" begin
            say_title("Mata")
            say("5 Perros")
            say("5 de otra cosa")
            say("5 de otra cosa")
            say("5 de otra cosa")
            say("5 de otra cosa")
            pc.setqf("estadoms",1)
        end
        when 101. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador1") < 5 then
                chat("Has matado a 5 perros")
            else
                pc.setqf("contador1",pc.getqf("contador1")+1)
            end
        end
        when 102. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador2") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador2",pc.getqf("contador2")+1)
            end
        end
        when 103. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador3") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador3",pc.getqf("contador3")+1)
            end
        end
        when 104. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador4") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador4",pc.getqf("contador4")+1)
            end
        end
        when 105. kill with pc.getqf("estadoms") == 1 begin
            if pc.getqf("contador5") < 5 then
                chat("Has matado a 5 otro")
            else
                pc.setqf("contador5",pc.getqf("contador5")+1)
            end
        end
    end
end

quest five_kills begin
	state start begin
	
		function info()
			return {
				[101] = 5,
				[102] = 5,
				[103] = 5,
				[104] = 5,
				[105] = 5
			}
		end
	
		when 9010.chat."Mata xd" begin
			local s = five_kills.info()
			say_title(mob_name(npc.get_race()))
			say("Debes matar los monstruos que te indicaré ")
			say("cuando aceptes la misión")
			say_reward("Aceptar misión?")
			if select("Aceptar", "Cerrar") == 1 then
				for k, v in pairs(s) do
					pc.setqf(string.format("fk_%s", k), v)
				end
				set_state(state1)
			end
		end
	end
	
	state state1 begin
		when 9010.chat."Mata xd" begin
			local s = five_kills.info()
			say_title(mob_name(npc.get_race()))
			say("Todavía te quedan por matar:")
			for k, v in pairs(s) do
				say(string.format("%s %s", pc.getqf(string.format("fk_%s", k)), mob_name(k)))
			end
		end
	
		when kill begin
			if five_kills.info()[npc.get_race()] != nil then
				pc.setqf(string.format("fk_%s", npc.get_race()), pc.getqf(string.format("fk_%s", npc.get_race())-1))
				if five_kills.allKillDone() then
					chat("Acabaste la misión con éxito")
					set_state(state2)
				end
			end
		end
	end
	
	function allKillDone()
		local s = five_kills.info()
		for k, v in pairs(s) do
			if pc.getqf(string.format("fk_%s", k)) > 0 then
				return false
			end
		end
		return true
	end
	
	function clearQuest()
		local s = five_kills.info()
		for k, v in pairs(s) do
			pc.delqf(string.format("fk_%s", k))
		end
	end
	
	state state2 begin
		when 9010.chat."Mata xd" begin
			say_title(mob_name(npc.get_race()))
			say("Recompensas:")
			say_reward("Recibes bablabla")
			five_kills.clearQuest()
			set_state(__COMPLETE__)
		end
	end
	
	state __COMPLETE__ begin
	
	end
end

 

Esta la hice en un rato, no la testeé

Fíjate que la quest es tipo misión, es más cómodo usar states.

Si el pj está en un state, solo reconoce los when de ese mismo state. Así que no es necesario poner pc.getqf() de valor 1 o 0 para validar si el personaje tiene la misión activa, por ejemplo. De igual manera cuando se termina la misión se envía a un state vacío y listo.

 

Al ser varios monstruos ya constituye una pequeña estructura de datos, a menos que uses programación estática.

Sé que cada monstruo pide 5 de cantidad pero lo hice para que pudieras elegir cierta cada cantidad en cada uno.

Utilizo la estructura como [clave] = valor, para que no tenga que recorrer la lista todas la veces sino que vaya directo a la posición que se pide. Esto mejora el rendimiento.

Una vez aceptada la misión, se almacena un qf para cada monstruo donde el valor del qf es el número que hay que matar. Luego cada vez que mate uno, disminuye en 1 ese qf.

Cada vez que hace un kill a un monstruo objetivo, verifica si todos los qf están en 0 para enviar al state de recompensas. En el state de recompensas limpio los qf para optimizar espacio en la db.

 

Viste el for k, v in pairs(tabla) do ? eso es un ciclo que recorre las posiciones de la lista que no son nulas.

Para la lista de five_kills.info():

La "k" es 101, 102, 103, 104, 105...

La v es 5, 5, 5, 5, 5...

Así se recorre un ciclo con [clave] = valor.

 

El string.format es para que no hagas esto:

say("Hola "..variable1.." blabla "..variable2.." asdasd "..variable3)

sino que hagas esto

say(string.format("Hola %s blabla %s asdasd %s", variable1, variable2, variable3))

Es mucho más fácil de ver y programar

 

No creo que funcione la quest si la llegas a compilar y ya. Hay que testearla.

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...