Jump to content

Quest de Matança! [Ajuda]


Lyn2
 Share

Recommended Posts

Boas pessoal, peço desculpa por estar sempre abrir tópicos. Eu queria uma quest de caça porque odeio as missões padrão do Metin2. 

A quest por exemplo ( Mata 10 Cães ) e recebe recompensa 

outra quest que queria era (Destroi 3 metins ou 3 montros diferentes e quando completado recebe a recompensa) 

 

 

Sim é simples. Mas porém andei a testar, só consegui encontrar o da matança de 1 monstro e eu queria poder personalizar, como também deixar uma meta para os jogadores. (Destroi todos os boss~s do servidor) tenho ideias muito boas e dar recompensa valiosa por isso. 

 

Obrigado!!

Link to comment
Share on other sites

Deixa lá ver se ainda sei fazer quests xD

 

3 montros diferentes e quando completado recebe a recompensa) 

 

Edit:

Spoiler

Não sei até que ponto deves usar uma quest deste tipo uma vez que isto irá criar uns 3000 qf xD  .... não sei se faz bem ou mal, mas pelo menos ficas com uma ideia

Spoiler
-- #############  Sempre que matares 3x o mesmo mob ganhas recompensa

quest mobs_quest begin
	state start begin
		
		when kill with not npc.is_pc() begin 
			
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				
				if pc.getqf(""..npc.get_race().."") >= 3 then	 --- quando destroi 3 metins... 
					local items = {	

								{10, 1},{20, 1},{30, 1},{40, 1},{50, 1},{60, 1},{70, 1},{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
					}
					
					if number(1, 100) <= 5 then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end
				end
				
			
			
			
		end	--when
	end --state
end --quest

 

 

Destroi 3 metins diferentes e quando completado recebe a recompensa

 

Spoiler
quest metins_quest begin
	state start begin
		
		when 8001.kill or 	--	Metin da Dor
			 8002.kill or 	--	Metin do Combate
			 8003.kill or 	--	Metin da Batalha
			 8004.kill or 	--	Metin da Ganância
			 8005.kill or 	--	Metin Negra
			 8006.kill or 	--	Metin da Escuridão
			 8007.kill or 	--	Metin do Ciúme
			 8008.kill or 	--	Metin da Alma
			 8009.kill or 	--	Metin da Sombra
			 8010.kill or 	--	Metin da Dureza
			 8011.kill or 	--	Metin do Diabo
			 8012.kill or 	--	Metin da Queda
			 8013.kill or 	--	Metin da Morte
			 8014.kill or 	--	Metin do Assassino
			 8024.kill or 	--	Metin Pung-Ma
			 8025.kill or 	--	Metin Ma-An
			 8026.kill or	--	Metin Tu-Young
			 8027.kill 		--	Metin Jeon-Un
		begin
			
			
			
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				
				if pc.getqf(""..npc.get_race().."") >= 3 then	 --- quando destroi 3 metins... 
					local items = {	

								{10, 1},{20, 1},{30, 1},{40, 1},{50, 1},{60, 1},{70, 1},{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
					}
					
					if number(1, 100) <= 5 then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end
				end
				
			
			
			
		end	--when
	end --state
end --quest


 

 

 

Mereço um like? :P

Edited by Aeglon
Link to comment
Share on other sites

Na segunda quest em vez de teres 30 kills diferentes podes usar:

Spoiler

 

when kill with not npc.is_pc() begin
	local vnum = npc.get_race()
	if ((vnum >= 8001) and (vnum <= 8014)) or ((vnum >= 8024) and (vnum <= 8027)) then
	--código

 

Mas obrigado pelas quests.

Edited by oserra
Link to comment
Share on other sites

Dá sempre jeito a gente ter estas quests! Obrigado aos 2 espero que ajude também outras pessoas!!

 

Adorei a última quest o.o  obrigado !! 

 

Mas porém o que eu queria era uma quest que desse a informação (Mata 3 metins diferentes) depois quando completado recebia recompensa. Essa quest é meio automático (como se fosse algum evento) .. Pois, 1 TOPZAO destroi sempre 3 metins da Dor recebe sempre a recompensa. 

Edited by JuctionM2
Link to comment
Share on other sites

quer algo mais complexo

quest metins_quest begin
	state start begin
		
		when kill with not npc.is_pc() begin
	local vnum = npc.get_race()
	if ((vnum >= 8001) and (vnum <= 8014)) and pc.get_level() <= 30 or ((vnum >= 8024) and (vnum <= 8027)) then
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				
				if pc.getqf(""..npc.get_race().."") >= 3 then	 --- quando destroi 3 metins... 
					local items = {	

								{10, 1},{20, 1},{30, 1},{40, 1},{50, 1},{60, 1},{70, 1},{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
					}
					
					if number(1, 100) <= 5 then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end
				end
				
			
			
			
		end	--when
	end --state
end --quest

peço desculpas caso não funcione pelas modificações que fiz, adicionei a parte do serra e a função de level no array de metins, caso não funcione me desculpe pois não tenho ideia de como programar xD

caso precise que ela só aconteça uma vez para cada player precisará adicionar o set state para a quest, não me recordo agora de como fazer

Link to comment
Share on other sites

38 minutos atrás, wery disse:

quer algo mais complexo

quest metins_quest begin
	state start begin
		
		when kill with not npc.is_pc() begin
	local vnum = npc.get_race()
	if ((vnum >= 8001) and (vnum <= 8014)) and pc.get_level() <= 30 or ((vnum >= 8024) and (vnum <= 8027)) then
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				
				if pc.getqf(""..npc.get_race().."") >= 3 then	 --- quando destroi 3 metins... 
					local items = {	

								{10, 1},{20, 1},{30, 1},{40, 1},{50, 1},{60, 1},{70, 1},{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
					}
					
					if number(1, 100) <= 5 then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end
				end
				
			
			
			
		end	--when
	end --state
end --quest

peço desculpas caso não funcione pelas modificações que fiz, adicionei a parte do serra e a função de level no array de metins, caso não funcione me desculpe pois não tenho ideia de como programar xD

caso precise que ela só aconteça uma vez para cada player precisará adicionar o set state para a quest, não me recordo agora de como fazer

Modifiquei aí a minha condição, tem um "or" onde devia ter um "and":

Spoiler

 

quest metins_quest begin
	state start begin
		when kill with not npc.is_pc() begin
			local vnum = npc.get_race()
			if (vnum >= 8001) and (vnum <= 8014) and (vnum >= 8024) and (vnum <= 8027) and (pc.level < 30) then
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				if (pc.getqf(""..npc.get_race().."") >= 3) then	 --- quando destroi 3 metins... 
					local items = {	
									{10, 1},
									{20, 1},
									{30, 1},
									{40, 1},
									{50, 1},
									{60, 1},
									{70, 1},
									{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
									}
					if (number(1, 100) <= 5) then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end --if
				end --if
			end --if
		end	--when
	end --state
end --quest

 

 

Edited by oserra
Link to comment
Share on other sites

Spoiler
quest metins_quest begin
	state start begin
		
		when 8001.kill or 	--	Metin da Dor
			 8002.kill or 	--	Metin do Combate
			 8003.kill or 	--	Metin da Batalha
			 8004.kill or 	--	Metin da Ganância
			 8005.kill or 	--	Metin Negra
			 8006.kill or 	--	Metin da Escuridão
			 8007.kill or 	--	Metin do Ciúme
			 8008.kill or 	--	Metin da Alma
			 8009.kill or 	--	Metin da Sombra
			 8010.kill or 	--	Metin da Dureza
			 8011.kill or 	--	Metin do Diabo
			 8012.kill or 	--	Metin da Queda
			 8013.kill or 	--	Metin da Morte
			 8014.kill or 	--	Metin do Assassino
			 8024.kill or 	--	Metin Pung-Ma
			 8025.kill or 	--	Metin Ma-An
			 8026.kill or	--	Metin Tu-Young
			 8027.kill 		--	Metin Jeon-Un
		begin
			
			
			
				if math.abs(pc.get_level()-npc.get_level()) > 25 then return end --- adicionado limite de 25 niveis
				pc.setqf(""..npc.get_race().."", pc.getqf(""..npc.get_race().."")+1)
				
				if pc.getqf(""..npc.get_race().."") >= 3 then	 --- quando destroi 3 metins... 
					local items = {	

								{10, 1},{20, 1},{30, 1},{40, 1},{50, 1},{60, 1},{70, 1},{80, 1}, --- ...deixa cair de forma aleatória um destes seguintes items
					}
					
					if number(1, 100) <= 5 then						--- taxa de drop. Neste caso 5% 
						local rand = number(1, table.getn(items))
						game.drop_item_with_ownership(items[rand][1], items[rand][2])
						pc.setqf(""..npc.get_race().."", 0)
					end
				end
				
			
			
			
		end	--when
	end --state
end --quest

 

 

Adicionada função para dropar os itens baseada na diferença de niveis entre o mob e o jogador

limite de 25 niveis

 

Link to comment
Share on other sites

Exemplo. Queria uma missão de caça. 

 

Ai e tal mata x monstros DEPOIS da missão ser finalizada receber os itens. 

Por favor a vila está em chamas, mata 20 cães. 

depois de matar:

Parabéns finalizas-te a missão aqui está a tua recompensa. 

 

Outra:

 

Por favor destroi 3 Metins diferentes

Metin da Dor: 1

Metin do Combate: 1

Metin da Batalha: 1

 

Quando finalizado:

Parabéns por completares esta missão! Creio que foi fácil destroires todas as metins. 

 

Qual a dificuldade? Eu não pedi (mata 3 vezes um monstro e recebe x coisas ) porém é muito bom para Pontos de Metin entre outras coisas mas o que eu queria não era isso, mas sim uma QUEST DA MATANÇA xD 

 

Obrigado!

 

Link to comment
Share on other sites

O que tu queres é algo realmente fácil de se fazer e eu até te poderei ajudar nisso. Mas antes, tenta perceber como funcionam as quests que te falamos em cima. Tudo o que tu queres é bastante fácil de se fazer com os pc.setqf sempre que matas e usas o pc.getqf para ver quantas mortes ja o jogador vez.

Se tu não compreenderes isso.... então irás ter algumas dificuldades mais tarde em perceberes porque razão a quest da "matança" está a dar itens a mais aos jogadores e etc....

 

Brinca com os pc.setqf e getqf. Algo do tipo:

when 101.kill begin
	pc.setqf("qualquernome", pc.getqf("qualquernome")+1)
	chat("GM info teste: "..pc.getqf("qualquernome").."")
	
	if pc.getqf("qualquernome") >= 20 then
		pc.give_item2(27001, number(1,10)
		pc.setqf("qualquernome",0)
	end
end

 

e a tentar ajudar-te... já te fiz a quest dos cães :\   só falta o texto.   Tenta compreender primeiro +/- como funciona o básico.... porque é a unica forma de evoluires.

Mas caso não percebas "ainda" porque tudo leva o seu tempo, terei todo o gosto em ajudar-te.

 

 

 

 

 

 

 

 

edit: E como eu sempre gostei de fazer quests xD...... acabei por fazer o que querias. Mas tenta perceber como isto funciona. 

Nada mais fiz que alterar uma missão do biólogo :\   só e apenas a alterei....

 

Spoiler
quest cidade_em_chamas  begin
	state start begin
		when login or levelup with pc.get_level() >= 3 begin
			set_state(information)
		end
	end
			
	state information begin
		when letter begin
			local v = find_npc_by_vnum(20355)
			if v != 0 then
				target.vid("__TARGET__", v, "Capitão")
			end
			send_letter("O Capitão está a tua procura!")
		end
		when button or info begin
			say_title("Capitão")
			say("")
			----"12345678901234567890123456789012345678901234567890"|
			say("O Capitão procura-te com urgência.")
			say("Chegaram relatos que a cidade está em chamas.")
			say("Vai rápido antes que arda tudo!")
			say("")
			wait()
			send_letter("O Capitão está a tua procura!")
		end
		when __TARGET__.target.click or 20355.chat."Preciso da Tua ajuda." begin
			target.delete("__TARGET__")
			say_title("[ENTER]CapitãoENTER]")
			----"12345678901234567890123456789012345678901234567890"|
			say("Já viste isto?")
			say("Esta tudo a arder e a culpa é destes malditos")
			say("cães. ")
			say("Eu sei que a culpa é deles, porque estavam")
			say("todos a fumar um charro de 2 metros com os ")
			say("ursos e o Fantasma da Morte.")
			say("Agora está tudo a arder! Será que podes ir")
			say("dar-lhes uma lição? Mata uns 20 sff!")
			say("")
			set_state(go_to_disciple)

		end
	end
			
	state go_to_disciple begin
		when letter begin
			send_letter("Matar 20 Cães")
		end
					
		when button or info begin
			if pc.getqf("cidade_em_chamas") >= 20 then
				say("")
				say_title("Matar 20 Cães")
				say("")
				---                                                   l
				say_reward("Finalmente matas-te os culpados!")
				say_reward("Fala com o Capitão, ele aguarda-te.")
				say("")
				wait()
				send_letter("Matar 20 Cães")
				return
			end
			
			say_title("[ENTER]Missão das chamas[ENTER]")
			----"12345678901234567890123456789012345678901234567890"|
			say("O Capitão pediu-me para matar 20 cães.")
			say("Porque os bacanos puxaram fogo a cidade!")
			say("")
			wait()
			say_title("[ENTER]Missão das chamas[ENTER]")
		end
					
        when 101.kill begin
			if math.abs(pc.get_level()-npc.get_level()) > 25 then return end
			
			if pc.getqf("cidade_em_chamas") >= 20 then
				syschat("Matas-te os 20 cães. Volta ao capitão")
				pc.setqf("cidade_em_chamas",0)
			else
				pc.setqf("cidade_em_chamas", pc.getqf("cidade_em_chamas")+1)
			end
		end
		
		when __TARGET__.target.click or 20355.chat."Preciso da Tua ajuda." begin
			target.delete("__TARGET__")
			say_title("[ENTER]CapitãoENTER]")
			----"12345678901234567890123456789012345678901234567890"|
			say("Isso mesmo!!!")
			say("Assim é que é. Eu vi a tareia que deste nesles.")
			say("Um deles até fazia pó na lama. Obrigado pela tua")
			say("ajuda. Aqui tens a tua recompensa!")
			say("")
			
			pc.give_item2(27001, number(1,100))
			set_state(__complete)
		end
		
		
	end
			
	
	state __complete begin
	end
end

 

Testada e a funcionar.

 

Edited by Aeglon
Link to comment
Share on other sites

Eu entendo de quests, mas o mais incrivel é que não consigo atinar com uma quest mesmo básica. Eu fiz umas réplicas dessa quest e funciona obvio mas eu queria algo mais simples sem ter necessário ir ao NPC para receber a quest. O que eu peço é muito simples é só matar o que tem a matar e ja ta. A quest que metes-te a primeira foi muito boa para outras coisas que tenho em mente ;)  mas não era o pretendido ... Eu vou testando aqui as coisas se conseguir postarei aqui para outros membros que tiverem a procura encontrarem. 

 

Desde já obrigado pela preocupação em alimentar as minhas dúvidas, por vezes coisas mais faceis a gente complica muito. .. Abraço!!

 

Edit*

Citar
when 101.kill begin
	pc.setqf("qualquernome", pc.getqf("qualquernome")+1)
	chat("GM info teste: "..pc.getqf("qualquernome").."")
	
	if pc.getqf("qualquernome") >= 20 then
		pc.give_item2(27001, number(1,10)
		pc.setqf("qualquernome",0)
	end
end

Perfeito ;) Obrigado!

Edited by JuctionM2
Link to comment
Share on other sites

6 horas atrás, JuctionM2 disse:

Exemplo. Queria uma missão de caça. 

 

Ai e tal mata x monstros DEPOIS da missão ser finalizada receber os itens. 

Por favor a vila está em chamas, mata 20 cães. 

depois de matar:

Parabéns finalizas-te a missão aqui está a tua recompensa. 

 

Outra:

 

Por favor destroi 3 Metins diferentes

Metin da Dor: 1

Metin do Combate: 1

Metin da Batalha: 1

 

Quando finalizado:

Parabéns por completares esta missão! Creio que foi fácil destroires todas as metins. 

 

Qual a dificuldade? Eu não pedi (mata 3 vezes um monstro e recebe x coisas ) porém é muito bom para Pontos de Metin entre outras coisas mas o que eu queria não era isso, mas sim uma QUEST DA MATANÇA xD 

 

Obrigado!

 

 

Acho que é isso que queres:

quest xkillmt2 begin
	state start begin
		
		when login with pc.get_level() <= 5 begin
			set_state(combat)
			end
		end

		state combat begin
		when letter begin
			send_letter("Missão de Combate #1")
		end

		when button or info begin
			say_title("Olá, "..pc.get_name())
			say("")
			say("Nessa primeira missão de combate você terá de mata")
			say("20 "..mob_name(101)..".")
			say("")
			set_state(kill)
			end
		end
		
		state kill begin
		when enter begin
			pc.setqf("mobcount", 0)		
		end
		when leave begin		
            pc.setqf("mobcount", 0)		
            q.done()		
        end		
        when letter begin		
            q.set_counter(string.format("Faltam %d.", xkillmt2.isMobCount()))		
        end	
	  
		when 101.kill begin
			local count = pc.getqf("mobcount")+1
			pc.setqf("mobcount", count)		
			q.set_counter(string.format("Faltam %d.", xkillmt2.isMobCount()))
	   
			if xkillmt2.isMobCompleted() then
				say_title("Missão de Combate #1 Completada")	
                say("")		
                say("Eu acho que você completou a missão adequadamente.")	
                say("")		
                say("Obrigado, a sua missão foi concluída com êxito.")		
                say("Vou lhe dar a sua recompensa por me ajudar.")
				say("")
				wait()
				xkillmt2.isMobGive()
				set_state(stone)
				q.done()
			end
		end -- w
		
		function isMobCompleted()		
			return pc.getqf("mobcount")>=20		
		end
	  
		function isMobCount()		
            return 20-pc.getqf("mobcount")		
        end
		
		function isMobGive()
			local i = {{19,1},{29,1},{39,1}}
			local n = number(1,table.getn(i))
			return pc.give_item2(tonumber(i[n][1]), tonumber(i[n][2]))
		end
		
		when letter begin
			send_letter("Derrote 20 Cão Selvagem")
		end
		when button or info begin
			say_title("Derrote 20 "..mob_name(101))
			say("")
			say("Você ainda não completou a missão de combate.")
			say("")
			say_reward(string.format("Faltam: %d", xkillmt2.isMobCount()))
			say("")
		end	
	   end -- s kill
	   
	   state stone begin
		when letter begin
			send_letter("Missão de Combate #2")
		end

		when button or info begin
			say_title("Olá, "..pc.get_name())
			say("")
			say("Nessa segunda missão de combate você terá de destroi")
			say("3 Metins diferentes.")
			say("")
			say("1 - "..mob_name(8001))
			say("1 - "..mob_name(8002))
			say("1 - "..mob_name(8003))
			say("")
			set_state(metin)
			end
		end	   
	   
	   state metin begin
		when enter begin
			pc.setqf("metincount", 0)
			pc.setqf("metin8001", 0)
			pc.setqf("metin8002", 0)
			pc.setqf("metin8003", 0)
		end
		when leave begin		
            pc.setqf("metincount", 0)
			pc.setqf("metin8001", 0)
			pc.setqf("metin8002", 0)
			pc.setqf("metin8003", 0)
            q.done()		
        end		
        when letter begin		
            q.set_counter(string.format("Faltam %d.", xkillmt2.isMetinCount()))		
        end	
	  
		when kill with xkillmt2.isMetin(npc.get_race()) == true begin
			local count = pc.getqf("metincount")+1
			pc.setqf("metincount", count)		
			q.set_counter(string.format("Faltam %d.", xkillmt2.isMetinCount()))
	   
			if xkillmt2.isMetinCompleted() then
				say_title("Missão de Combate #2 Completada")	
                say("")		
                say("Eu acho que você completou a missão adequadamente.")		
                say("")		
                say("Obrigado, a sua missão foi concluída com êxito.")		
                say("Vou lhe dar a sua recompensa por me ajudar.")
				say("")
				wait()
				xkillmt2.isMetinGive()
				set_state(__COMPLETE__)
				q.done()
			end
		end -- w
		
		function isMetinCompleted()		
			return pc.getqf("metincount")>=3		
		end
	  
		function isMetinCount()		
            return 3-pc.getqf("metincount")		
        end
		
		function isMetinGive()
			local i = {{50028,1},{50029,1},{50030,1}}
			local n = number(1,table.getn(i))
			return pc.give_item2(tonumber(i[n][1]), tonumber(i[n][2]))
		end
		
		function isMetin(race)
			if race == 8001 and pc.getqf("metin8001") == 0 then
				pc.setqf("metin8001", 1)
				return true
			end
			if race == 8002 and pc.getqf("metin8002") == 0 then
				pc.setqf("metin8002", 1)
				return true
			end
			if race == 8003 and pc.getqf("metin8003") == 0  then
				pc.setqf("metin8003", 1)
				return true
			end
			return false
		end
		
		when letter begin
			send_letter("Destroi 3 Metins diferentes!")
		end
		when button or info begin
			say_title("Destroi 3 Metins diferentes!")
			say("")
			say("Você ainda não completou a missão de combate.")
			say("")
			say(mob_name(8001)..", você destruiu: "..pc.getqf("metin8001"))
			say(mob_name(8002)..", você destruiu: "..pc.getqf("metin8002"))
			say(mob_name(8003)..", você destruiu: "..pc.getqf("metin8003"))
			say("")
			say_reward(string.format("Faltam: %d", xkillmt2.isMetinCount()))
			say("")
		end	
	   end -- s metin
	   
	   
	  state __COMPLETE__ begin
	  
   end -- s
end -- q

 

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...