Lyn2 Posted June 12, 2018 at 03:54 PM Share Posted June 12, 2018 at 03:54 PM 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
Aeglon Posted June 12, 2018 at 08:55 PM Share Posted June 12, 2018 at 08:55 PM (edited) 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 June 12, 2018 at 08:58 PM by Aeglon Link to comment
oserra Posted June 12, 2018 at 09:35 PM Share Posted June 12, 2018 at 09:35 PM (edited) 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 June 12, 2018 at 09:35 PM by oserra Link to comment
Lyn2 Posted June 13, 2018 at 03:04 PM Author Share Posted June 13, 2018 at 03:04 PM (edited) Dá sempre jeito a gente ter estas quests! Obrigado aos 2 espero que ajude também outras pessoas!! Adorei a última quest 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 June 13, 2018 at 03:10 PM by JuctionM2 Link to comment
WLN Posted June 13, 2018 at 09:56 PM Share Posted June 13, 2018 at 09:56 PM 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
oserra Posted June 13, 2018 at 10:35 PM Share Posted June 13, 2018 at 10:35 PM (edited) 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 June 13, 2018 at 10:35 PM by oserra Link to comment
WLN Posted June 14, 2018 at 12:13 AM Share Posted June 14, 2018 at 12:13 AM creio que o or estava correto, na minha função ele pega o vnum 8001 até 8014 e o player tendo lv 30 OU vnum 8024 e 8027 Link to comment
oserra Posted June 14, 2018 at 02:01 AM Share Posted June 14, 2018 at 02:01 AM 1 hora atrás, wery disse: creio que o or estava correto, na minha função ele pega o vnum 8001 até 8014 e o player tendo lv 30 OU vnum 8024 e 8027 Pensei que o pretendido era nivel 30 para todas... então sim estava certo. Link to comment
Aeglon Posted June 14, 2018 at 06:35 AM Share Posted June 14, 2018 at 06:35 AM 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
Lyn2 Posted June 15, 2018 at 04:36 PM Author Share Posted June 15, 2018 at 04:36 PM 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
Aeglon Posted June 15, 2018 at 04:51 PM Share Posted June 15, 2018 at 04:51 PM (edited) 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 June 15, 2018 at 05:13 PM by Aeglon Link to comment
Lyn2 Posted June 15, 2018 at 08:10 PM Author Share Posted June 15, 2018 at 08:10 PM (edited) 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 June 15, 2018 at 08:11 PM by JuctionM2 Link to comment
xkillmt2 Posted June 15, 2018 at 11:13 PM Share Posted June 15, 2018 at 11:13 PM 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
Lyn2 Posted June 20, 2018 at 10:11 PM Author Share Posted June 20, 2018 at 10:11 PM Bro!!! :o Era essa e tá muito compacta man! Perdi a desmotivação mas agora :OOOOOOO ADORO! OBRIGADO! *-* Link to comment
[Admin] tierrilopes Posted August 6, 2018 at 03:06 PM Share Posted August 6, 2018 at 03:06 PM Tópico fechado. Solução marcada. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now