Ir para conteúdo
  • Cadastre-se

Novo! Evento Flags Defence [DESENVOLVIMENTO]


AikoN~

Posts recomendados

Olaaaaaaa, estou eu aqui trazendo uma nova proposta de evento para desenvolvimento.

Preciso de toda ajuda possível...

Como no título já diz, é um evento Flags Defence estilo Tower Defence, MOBA.

Eu já venho me dedicando a isso a alguns dias, e já consegui fazer a primeira parte da lógica do evento.

O que eu já fiz:

·         Comando do ADMIN para iniciar o evento.

·         Comandos para os plays cadastrarem e saírem do evento. (.Moba & .SairMoba)

·         Puxar os Jogadores para o local do evento. (NO CASO EU DEIXEI COLISEU SÓ PRA FAZER TESTES RAPIDOS).

·         Spawn das Bandeiras do time Vermelho e do time Azul. (Com HP, Atk, estilo Mob).

·         A lógica principal, que seria o Time Azul deve matar as Bandeiras do Time Vermelho para ganhar o evento. Sendo 3* Bandeiras. E o Time Vermelho deve matar as Bandeiras do Time Azul para ganhar o evento.  (SOFRI UM POUCO NESSA PARTE).

·         O time vencedor ganha a recompensa.

·         Quando o Playr cadastra no evento aparece uma Janela com as instruções do evento para ele...

·         Quando o Playr ganha o evento aparece um “Anuncio” global indicando o time ganhador e na janela de chat esquerda mostrando o Item ganhado.

 

O que eu fiz até agora foi tudo com base em outro evento antigo, tive que refazer vários códigos no .JAVA para ficar do jeito que está atualmente. Funcionando.

 

Segue algumas SS:

 

m9afzKp.png

Hihi0U2.png

XF7P1r6.png

Td3fYOF.png

uxqxAjV.png

 

[Os bugs que teria que resolver, preciso de ajuda para isso seria o seguinte]:

 

·         Quando o char ADM inicia o evento ele fica modo Sleep por 1000 segundos. Não consegui resolver isso.

·         Dentro do código do evento tem a opção de por o evento para terminar após tantos minutos, porem isso funcionava quando somente um time deveria matar as bandeiras enquanto o outro as defendia, caso os que atacavam as bandeiras não conseguiam matar no mínimo duas até o tempo estipulado, o evento acabava e os defensores da bandeira ganhavam o evento de forma automática. Porem como eu coloquei cada time para defender suas próprias bandeiras e atacarem as do adversário isso parou de funcionar e o evento só acaba quando um time matar as 3 bandeiras inimigas, nem que leve o dia todo. PRECISO ARRUMAR ISSO! E deixar um tempo estipulado, e quando acabar o tempo o time que matou mais bandeiras ganha pelo menos...

 

Quais são os próximos passos a dar nesse evento? Preciso de muita ajudaaa com isso:

 

·         Preciso por esse evento em um NPC para cadastrar, pois deixar automático como o TvT ou por comando de Admin fica muito sem graça. Pois quero ele funcionando 24 horas por dia dentro do server.

·         Quero fazer esse evento funcionar somente com pessoas em Party. Estilo o Arena 2x2 ou Tournament como conhecem... Só que nesse caso no mínimo 5x5. Onde somente o líder da PT possa registrar a Party no evento.

·         Esse método já existe o código do evento 2x2, eu até tentei colocar os Scripts do NPC porém é um NPC de quest e precisa ter ligação com o Java e compilar isso, e eu não estou sabendo colocar esse código dentro do evento lá no java pelo eclipse.

1y2zBC9.jpg

Creio que até aqui já fizemos uns 50% do evento funcionar show de bola!

Os passos mais ousados para esse evento seria:

·         Botar uma proteção nas bandeiras para que somente o time adversário pudesse bater nelas, porque do jeito que está os cara do próprio time pode matar elas e perderem o evento.

·         Botar anúncios quando estão faltando 5, 4, 3, 2, 1 minutos para encerrar o cadastro no evento e quando for teleportar os plays. Mesmo anuncio lá dentro do evento quando tiver quase começando.

·         Esse evento eu quero deixar em cada cidade específica. Tipo, umas 4 arenas funcionando somente para quem cadastrar nos NPCs em Giran. Por isso os anúncios do evento devem aparecer somente para os plays que estão na cidade de Giran e não em todo o mundo. Dessa forma será em cada cidade, me fiz entender? Kk

·         Quando o evento inicia, a cada um minuto é dado Spawn em 5 pequenos Mobs que correm em direção as primeiras bandeiras que não foram mortas. Para ataca-las, porem se achar qualquer Playr do time adversário elas atacaram eles primeiro!

·         Esses Mobs só podem ser mortos pelos adversários e não pelo dos próprio time que eles Spawn assim como as bandeiras

·         Os Mobs dão Exp e Algum drop.

 

·         Botar um contador na tela para mostrar a quantidade de Kills do seu time e do adversário. Sendo que no meio tem os minutos que já está acontecendo o evento...

 

E POR ULTIMO, SE CASO UM DIA CONSEGUIR CHEGAR ATÉ AQUI NÉH...

 

·         Fazer toda party que cadastrou no evento voltar pro lvl 1. E perder todos os Itens do Inventory e Skills, ficando no inventory somente a moeda donater do server.

·         Todos os itens comprados dentro do evento podem ser usados no evento, porem ao acabar o evento todos os Plays voltam em seus lvl atuais, com seus Itens normais, skills, e os itens adquiridos no evento somem, ficando apenas uma moedinha em específica e as moedas donaters. (ISSO VAI SER DIFICILLLLL DE FAZER EM)

·         Cada Mobzin daqueles que da Spawn a cada 1 minuto da exp e “adena” por exemplo pros jogadores irem comprando itens mais fortes dentro do evento.

·         Nisso também são dados Spawn em alguns mini raid boss em locais no mapa do evento que darão muito mais exp e drops pra galera.

·         O máximo de lvl de cada jogador será de 25. Começando lvl 1

·         Não terá Grade penalty, podendo usar grade S lvl 1.

·         Algo que seria muito ousado porem muito bom era retirar todas as skills de cada personagem no evento, podendo eles ter apenas 4 skill normais e uma fodona. E só pudessem aumentar o lvl delas conforme o lvl que fossem subindo. No caso 4/5 skills da classe que eles tivessem.

·         Algo bacana também seria por um NPC Buffer que desse apenas um buffer especifico por um determinado preço e ficasse mudando seu Spawn a cada um minuto.

·         Podendo pegar o buffer que quisesse pela moeda donater no caso... E apenas um de graça e então o npc sumia.

 

Bom esse seria um ótimo evento para mim. Muitos outros detalhes com certeza eu deixei passar, como por um sistema de Ranking, Criar nome de um grupo especifico ao cadastrar a PT e etc.

Sim esse evento é um lol, dota, moba da vida, porém tenho certeza que da pra ganhar muitos jogadores e $$ com ele. TEM QUEM GOSTA. E QUEM NÃO GOSTA É SÓ NÃO PARTICIPAR... kkkk

 

Preciso de toda a ajuda possível na área de codificar isso. Linguagem, programação e lógica.

Apenas saber pegar um código feito e compilar no Eclipse não adianta.

Quem tiver disposto a me ajudar com isso, por favor me mande um MP ou comenta aqui embaixo, deixa uma ideia, mais principalmente se está disposto a me ajudar.

Não irei passar meu Facebook, nem Skype nem Whatsaap, vamos conversar só pelo L2JBrasil.

Se esse poste tiver um bom feedback, pessoas querendo ajudar eu posto a .Diff de todo código que eu já tenho.

E é claro, tudo isso afim de disponibilizar grátis o “Evento” aqui pra galera da L2JBrasil.

Conto com vocês! Abraçuuuuussss.

Editado por Psiu

spacer.png

Link para o comentário
Compartilhar em outros sites

  • Grundor featured this Tópico

Yo tengo un evento parecido agregado a mi engine faction.

Si te sirve podemos crear algo juntos .

Te paso mi post : 

https://www.l2jbrasil.com/index.php?/topic/124118-datapack-faction-custom-mods-source/&tab=comments#comment-767855

 

Abrazo!

Usen el buscador para mas información .

Link para o comentário
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  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.

Processando...
  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





  • Patrocinadores

  • Quem Está Navegando

    • Nenhum usuário registrado visualizando esta página.
  • Posts

    • Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?    
    • muchas gracias muy lindos NPC 🙂
    • relaxa jovem gafanhoto, testa as quests. e posTa os erros indesejaveis.  
    • Se alguém pudesse me ensinar como codificar as missões, eu ficaria feliz em fazer isso sozinho ou pelo menos ajudar. Eu realmente quero jogar em um servidor onde todas as quests funcionem bem e melhor ainda se você puder fazer quests customizadas!
    • mas no interlude, nem todas as quests de class,  vai mostrar onde tem que ir, ate o reborn nao mostrava quando era interlude, só mostrou depois que eles colocaram client classic pra rodar, e ficou melhor ainda quando virou hellbound em diante, mas ha sim alguma chance de modificar isso direto no script para fazer igualmente, só basta te um pouco de paciencia e persistencia exato
    • 408_PathToElvenwizard dá Orion eu tive que mexer tbm, até modifiquei e consegui deixar ela igual do Classic, com a seta e a marcação no mapa. (não retail IL) Dá pra importar py de várias revs, o foda é que não da regular as quest py através do debug em tempo real, pelo menos eu não consegui rsrs
    • Hasta el momento todas las QUESTS son completables si te guias con un tutorial de youtube. El problema es que tienen bugs de locacion y de subquests que no avanzan o no te marcan correctamente a donde ir en el mapa, cosa que en Retail si se ve como corresponde.
    • estranho, mas pelo menos a galera nunca reclamo das quests quando tinha aberto 5x, geral fez class primeira e segunda job, poucos que compraram a class
    • en RUSaCis-3.5 data pack, las Quests estan en formato .java y son diferentes a como estan redactadas en jOrion y jFrozen 1.5 (ProyectX) package net.sf.l2j.gameserver.scripting.quest; import net.sf.l2j.commons.random.Rnd; import net.sf.l2j.gameserver.enums.Paperdoll; import net.sf.l2j.gameserver.enums.QuestStatus; import net.sf.l2j.gameserver.enums.actors.ClassId; import net.sf.l2j.gameserver.model.actor.Creature; import net.sf.l2j.gameserver.model.actor.Npc; import net.sf.l2j.gameserver.model.actor.Player; import net.sf.l2j.gameserver.network.serverpackets.SocialAction; import net.sf.l2j.gameserver.scripting.QuestState; public class Q224_TestOfSagittarius extends SecondClassQuest { private static final String QUEST_NAME = "Q224_TestOfSagittarius"; // Items private static final int BERNARD_INTRODUCTION = 3294; private static final int HAMIL_LETTER_1 = 3295; private static final int HAMIL_LETTER_2 = 3296; private static final int HAMIL_LETTER_3 = 3297; private static final int HUNTER_RUNE_1 = 3298; private static final int HUNTER_RUNE_2 = 3299; private static final int TALISMAN_OF_KADESH = 3300; private static final int TALISMAN_OF_SNAKE = 3301; private static final int MITHRIL_CLIP = 3302; private static final int STAKATO_CHITIN = 3303; private static final int REINFORCED_BOWSTRING = 3304; private static final int MANASHEN_HORN = 3305; private static final int BLOOD_OF_LIZARDMAN = 3306; private static final int CRESCENT_MOON_BOW = 3028; private static final int WOODEN_ARROW = 17; // Rewards private static final int MARK_OF_SAGITTARIUS = 3293; // NPCs private static final int BERNARD = 30702; private static final int HAMIL = 30626; private static final int SIR_ARON_TANFORD = 30653; private static final int VOKIAN = 30514; private static final int GAUEN = 30717; // Monsters private static final int ANT = 20079; private static final int ANT_CAPTAIN = 20080; private static final int ANT_OVERSEER = 20081; private static final int ANT_RECRUIT = 20082; private static final int ANT_PATROL = 20084; private static final int ANT_GUARD = 20086; private static final int NOBLE_ANT = 20089; private static final int NOBLE_ANT_LEADER = 20090; private static final int BREKA_ORC_SHAMAN = 20269; private static final int BREKA_ORC_OVERLORD = 20270; private static final int MARSH_STAKATO_WORKER = 20230; private static final int MARSH_STAKATO_SOLDIER = 20232; private static final int MARSH_STAKATO_DRONE = 20234; private static final int MARSH_SPIDER = 20233; private static final int ROAD_SCAVENGER = 20551; private static final int MANASHEN_GARGOYLE = 20563; private static final int LETO_LIZARDMAN = 20577; private static final int LETO_LIZARDMAN_ARCHER = 20578; private static final int LETO_LIZARDMAN_SOLDIER = 20579; private static final int LETO_LIZARDMAN_WARRIOR = 20580; private static final int LETO_LIZARDMAN_SHAMAN = 20581; private static final int LETO_LIZARDMAN_OVERLORD = 20582; private static final int SERPENT_DEMON_KADESH = 27090; public Q224_TestOfSagittarius() { super(224, "Test Of Sagittarius"); setItemsIds(BERNARD_INTRODUCTION, HAMIL_LETTER_1, HAMIL_LETTER_2, HAMIL_LETTER_3, HUNTER_RUNE_1, HUNTER_RUNE_2, TALISMAN_OF_KADESH, TALISMAN_OF_SNAKE, MITHRIL_CLIP, STAKATO_CHITIN, REINFORCED_BOWSTRING, MANASHEN_HORN, BLOOD_OF_LIZARDMAN, CRESCENT_MOON_BOW); addQuestStart(BERNARD); addTalkId(BERNARD, HAMIL, SIR_ARON_TANFORD, VOKIAN, GAUEN); addMyDying(ANT, ANT_CAPTAIN, ANT_OVERSEER, ANT_RECRUIT, ANT_PATROL, ANT_GUARD, NOBLE_ANT, NOBLE_ANT_LEADER, BREKA_ORC_SHAMAN, BREKA_ORC_OVERLORD, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE, MARSH_SPIDER, ROAD_SCAVENGER, MANASHEN_GARGOYLE, LETO_LIZARDMAN, LETO_LIZARDMAN_ARCHER, LETO_LIZARDMAN_SOLDIER, LETO_LIZARDMAN_WARRIOR, LETO_LIZARDMAN_SHAMAN, LETO_LIZARDMAN_OVERLORD, SERPENT_DEMON_KADESH); } @Override public String onAdvEvent(String event, Npc npc, Player player) { String htmltext = event; QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; // BERNARD if (event.equalsIgnoreCase("30702-04.htm")) { st.setState(QuestStatus.STARTED); st.setCond(1); playSound(player, SOUND_ACCEPT); giveItems(player, BERNARD_INTRODUCTION, 1); if (giveDimensionalDiamonds39(player)) htmltext = "30702-04a.htm"; } // HAMIL else if (event.equalsIgnoreCase("30626-03.htm")) { st.setCond(2); playSound(player, SOUND_MIDDLE); takeItems(player, BERNARD_INTRODUCTION, 1); giveItems(player, HAMIL_LETTER_1, 1); } else if (event.equalsIgnoreCase("30626-07.htm")) { st.setCond(5); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_1, 10); giveItems(player, HAMIL_LETTER_2, 1); } // SIR_ARON_TANFORD else if (event.equalsIgnoreCase("30653-02.htm")) { st.setCond(3); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_1, 1); } // VOKIAN else if (event.equalsIgnoreCase("30514-02.htm")) { st.setCond(6); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_2, 1); } return htmltext; } @Override public String onTalk(Npc npc, Player player) { String htmltext = getNoQuestMsg(); QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; switch (st.getState()) { case CREATED: if (player.getClassId() != ClassId.ROGUE && player.getClassId() != ClassId.ELVEN_SCOUT && player.getClassId() != ClassId.ASSASSIN) htmltext = "30702-02.htm"; else if (player.getStatus().getLevel() < 39) htmltext = "30702-01.htm"; else htmltext = "30702-03.htm"; break; case STARTED: int cond = st.getCond(); switch (npc.getNpcId()) { case BERNARD: htmltext = "30702-05.htm"; break; case HAMIL: if (cond == 1) htmltext = "30626-01.htm"; else if (cond == 2 || cond == 3) htmltext = "30626-04.htm"; else if (cond == 4) htmltext = "30626-05.htm"; else if (cond > 4 && cond < 8) htmltext = "30626-08.htm"; else if (cond == 8) { htmltext = "30626-09.htm"; st.setCond(9); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_2, 10); giveItems(player, HAMIL_LETTER_3, 1); } else if (cond > 8 && cond < 12) htmltext = "30626-10.htm"; else if (cond == 12) { htmltext = "30626-11.htm"; st.setCond(13); playSound(player, SOUND_MIDDLE); } else if (cond == 13) htmltext = "30626-12.htm"; else if (cond == 14) { htmltext = "30626-13.htm"; takeItems(player, BLOOD_OF_LIZARDMAN, -1); takeItems(player, CRESCENT_MOON_BOW, 1); takeItems(player, TALISMAN_OF_KADESH, 1); giveItems(player, MARK_OF_SAGITTARIUS, 1); rewardExpAndSp(player, 54726, 20250); player.broadcastPacket(new SocialAction(player, 3)); playSound(player, SOUND_FINISH); st.exitQuest(false); } break; case SIR_ARON_TANFORD: if (cond == 2) htmltext = "30653-01.htm"; else if (cond > 2) htmltext = "30653-03.htm"; break; case VOKIAN: if (cond == 5) htmltext = "30514-01.htm"; else if (cond == 6) htmltext = "30514-03.htm"; else if (cond == 7) { htmltext = "30514-04.htm"; st.setCond(8); playSound(player, SOUND_MIDDLE); takeItems(player, TALISMAN_OF_SNAKE, 1); } else if (cond > 7) htmltext = "30514-05.htm"; break; case GAUEN: if (cond == 9) { htmltext = "30717-01.htm"; st.setCond(10); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_3, 1); } else if (cond == 10) htmltext = "30717-03.htm"; else if (cond == 11) { htmltext = "30717-02.htm"; st.setCond(12); playSound(player, SOUND_MIDDLE); takeItems(player, MANASHEN_HORN, 1); takeItems(player, MITHRIL_CLIP, 1); takeItems(player, REINFORCED_BOWSTRING, 1); takeItems(player, STAKATO_CHITIN, 1); giveItems(player, CRESCENT_MOON_BOW, 1); giveItems(player, WOODEN_ARROW, 10); } else if (cond > 11) htmltext = "30717-04.htm"; break; } break; case COMPLETED: htmltext = getAlreadyCompletedMsg(); break; } return htmltext; } @Override public void onMyDying(Npc npc, Creature killer) { final Player player = killer.getActingPlayer(); final QuestState st = checkPlayerState(player, npc, QuestStatus.STARTED); if (st == null) return; switch (npc.getNpcId()) { case ANT: case ANT_CAPTAIN: case ANT_OVERSEER: case ANT_RECRUIT: case ANT_PATROL: case ANT_GUARD: case NOBLE_ANT: case NOBLE_ANT_LEADER: if (st.getCond() == 3 && dropItems(player, HUNTER_RUNE_1, 1, 10, 500000)) st.setCond(4); break; case BREKA_ORC_SHAMAN: case BREKA_ORC_OVERLORD: if (st.getCond() == 6 && dropItems(player, HUNTER_RUNE_2, 1, 10, 500000)) { st.setCond(7); giveItems(player, TALISMAN_OF_SNAKE, 1); } break; case MARSH_STAKATO_WORKER: case MARSH_STAKATO_SOLDIER: case MARSH_STAKATO_DRONE: if (st.getCond() == 10 && dropItems(player, STAKATO_CHITIN, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, REINFORCED_BOWSTRING)) st.setCond(11); break; case MARSH_SPIDER: if (st.getCond() == 10 && dropItems(player, REINFORCED_BOWSTRING, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case ROAD_SCAVENGER: if (st.getCond() == 10 && dropItems(player, MITHRIL_CLIP, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, REINFORCED_BOWSTRING, STAKATO_CHITIN)) st.setCond(11); break; case MANASHEN_GARGOYLE: if (st.getCond() == 10 && dropItems(player, MANASHEN_HORN, 1, 1, 100000) && player.getInventory().hasItems(REINFORCED_BOWSTRING, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case LETO_LIZARDMAN: case LETO_LIZARDMAN_ARCHER: case LETO_LIZARDMAN_SOLDIER: case LETO_LIZARDMAN_WARRIOR: case LETO_LIZARDMAN_SHAMAN: case LETO_LIZARDMAN_OVERLORD: if (st.getCond() == 13) { if (((player.getInventory().getItemCount(BLOOD_OF_LIZARDMAN) - 120) * 5) > Rnd.get(100)) { playSound(player, SOUND_BEFORE_BATTLE); takeItems(player, BLOOD_OF_LIZARDMAN, -1); addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } else dropItemsAlways(player, BLOOD_OF_LIZARDMAN, 1, 0); } break; case SERPENT_DEMON_KADESH: if (st.getCond() == 13) { if (player.getInventory().getItemIdFrom(Paperdoll.RHAND) == CRESCENT_MOON_BOW) { st.setCond(14); playSound(player, SOUND_MIDDLE); giveItems(player, TALISMAN_OF_KADESH, 1); } else addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } break; } } }  
×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.