Ir para conteúdo
  • Cadastre-se

L2 Updater


Enkel

Posts recomendados

Fala pessoal!

Vim mostrar pra vocês um launcher com atualização automática que desenvolvi semana passada. Espero que vocês gostem!

Citar

Obs 1: O nome [L2 Kree] é fictício e usei ele somente pra "tapar buraco" no desenvolvimento. Não existe L2 Kree e nunca existirá.

Obs 2: As mensagens estão em inglês pq eu iria vender o launcher em um fórum gringo, mas desisti de vender.

 

Prévia:

jEytfnt.png

Prévia em video: https://www.youtube.com/watch?v=-NbV0WFztUI

 

Informações:

  • Suporte a SmartGuard
  • Funciona em todas as crônicas
  • Criação de contas direto no launcher
  • Fácil de distribuir (~ 13 arquivos super leves)
  • Compressão dos arquivos de atualização (reduz o download necessário)
  • Efeitos agradáveis de se ver (por exemplo, ao passar o mouse em cima do botão "Play", tem um som bem legal no fundo)
  • O aplicativo é COMPLETAMENTE customizável (sério, dá pra customizar TUDO)
  • Utiliza as seguintes tecnologias:
    • Delphi: Executáveis
    • PHP/SQL: Parte web backend
    • HTML5/CSS3/jQuery: Parte web frontend

A fazer:

  • Transferir algumas propriedades do CSS3 para o jQuery por conta de compatibilidade. Atualmente o launcher só roda com essas animações no HTML em computadores que possuem o Microsoft Edge instalado. (Caso o usuário não tenha o Edge instalado, algumas animações NÃO funcionarão)

-----------------

Estou aberto a sugestões também!

Editado por Enkel
Formatação do tópico.
  • Gostei 7
  • Não gostei 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites


Legal meu velho!
Ficou show hein!
Só por curiosidade,
ele vem com o compressor de arquivos ou só o launcher mesmo?

Tem foda que é foda...

 

Lucas Dresch

Desenvolvimento de Jogos Digitais  Unity e L2J

Link para o comentário
Compartilhar em outros sites

23 horas atrás, lucasdresch disse:

Legal meu velho!
Ficou show hein!
Só por curiosidade,
ele vem com o compressor de arquivos ou só o launcher mesmo?

Todos os arquivos são comprimidos em BZip para que vc faça um upload rapido, e o launcher descomprime eles automaticamente.

Link para o comentário
Compartilhar em outros sites

Em 25/10/2017 at 16:04, Enkel disse:

Todos os arquivos são comprimidos em BZip para que vc faça um upload rapido, e o launcher descomprime eles automaticamente.

ficou muito legal cara
parabéns pela idéia
ficou muito foda mesmo
pena ser só p mostrar, se não eu já tava brincando de traduzir a barca
kkkkk
 

Tem foda que é foda...

 

Lucas Dresch

Desenvolvimento de Jogos Digitais  Unity e L2J

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, lucasdresch disse:

ficou muito legal cara
parabéns pela idéia
ficou muito foda mesmo
pena ser só p mostrar, se não eu já tava brincando de traduzir a barca
kkkkk
 

 

Muito obrigado!!

 

@off

Você tem algum servidor live? Se tiver, eu passo pra você via MP a versão em pt-br pra você colocar no seu servidor.

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, Enkel disse:

Muito obrigado!!
@off
Você tem algum servidor live? Se tiver, eu passo pra você via MP a versão em pt-br pra você colocar no seu servidor.


tenho sim meu velho
mas está em fase de testes por tempo indeterminado...
pq ainda tem muito bug p corrigir
kkkkk
se quiser mandar eu posso fazer um multilanguage p as partes backend e frontend sem compromisso e te remando no privado
;)
na verdade eu sou fã de fazer multilinguage no L2
consegui fazer a system funcionar o multilanguage
só me travei onde pede algumas línguas que n encontrei system
como Philipines e uma outra que nunca lembro o nome...
as demais consegui fazer funcionar quase todas sem bugs
e estas q n consegui,
quando pede arquivos do padrão da tal linguagem q n tenho
da uns bug mto loco
kkkk
 

Tem foda que é foda...

 

Lucas Dresch

Desenvolvimento de Jogos Digitais  Unity e L2J

Link para o comentário
Compartilhar em outros sites

2 horas atrás, lucasdresch disse:


tenho sim meu velho
mas está em fase de testes por tempo indeterminado...
pq ainda tem muito bug p corrigir
kkkkk
se quiser mandar eu posso fazer um multilanguage p as partes backend e frontend sem compromisso e te remando no privado
;)
na verdade eu sou fã de fazer multilinguage no L2
consegui fazer a system funcionar o multilanguage
só me travei onde pede algumas línguas que n encontrei system
como Philipines e uma outra que nunca lembro o nome...
as demais consegui fazer funcionar quase todas sem bugs
e estas q n consegui,
quando pede arquivos do padrão da tal linguagem q n tenho
da uns bug mto loco
kkkk
 

Bacana!

 

Agradeço, mas já atualizei o launcher pra que o usuário escolha o idioma desejado. Desejo sucesso no seu projeto!!

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

Que chique rapaz. Ficou show!
Realmente, uma pena você não compartilhar.

Eu precisava de um no estilo Classic. Vou ter que aprender a fazer essas paradas huahua

"And I now wait to shake the hand of fate

Like the dusk awaiting dawn"

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Diego Fonseca disse:

Que chique rapaz. Ficou show!
Realmente, uma pena você não compartilhar.

Eu precisava de um no estilo Classic. Vou ter que aprender a fazer essas paradas huahua

o software em si é bem fácil, o mais complicado na minha opinião é desenhar o layout completo... isso sim requer conhecimento em design gráfico... 

Eu tenho o launcher retail padrão do lineage desde o c4 totalmente refeitos por mim mesmo, no Delphi XE4 e XE7

4maxIivwTbSx0XHrDZKzbQ.png

Infelizmente ainda não vi nenhum launcher com a temática do classic, até estou afim de fazer um eu mesmo.. Seria top ter um layout desses, se tiver interesse de encarar o desafio, me manda mp com algum layout que a gente conversa a respeito.. 

Editado por Wallace Carvalho

Caso tenha alguma sugestão para aplicativos, por favor envie por MP.

 WhatsApp: 22 98156-2591 

L2JDREAM PROJECT

Link para o comentário
Compartilhar em outros sites

L2Updater sources are full of errors my friend...post here your updater to scan with virustotal...if you scan almost all custom updaters they contain virus and this is a good way to lose players!!!

Players need a good clean updater in order to succeed with your server that's is for sure!!

 

Link para o comentário
Compartilhar em outros sites

"And I now wait to shake the hand of fate

Like the dusk awaiting dawn"

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Diego Fonseca disse:

Bom dia,

Você postou o link para download?

Bom dia!

 

Não irei disponibilizar ele (gratuitamente), amigo. Recomendo que dê uma olhada em outros updaters aqui no fórum, caso precise de um de imediato. O updater do Wallace é um bom updater, inclusive.

Link para o comentário
Compartilhar em outros sites

Ok Enkel, mas essa seção do fórum é para desenvolvimento de aplicativos para o fórum, não trabalhos particulares.

Infelizmente algum moderador da área irá remover seu tópico.

Se você deseja mostrar o launcher em formato de imagem pode postar em artworks.

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Marian Gabriel Alfons disse:

My updater is virus or error free as well....+ I can make any design!!!

https://www.virustotal.com/pt/file/5d8d58f2f395651fc21c5c5aee80c406ff0b5d62e3fe508fcc5952d36eb5c302/analysis/1512074106/

Meu updater só apresentou esse ai pois é a versão onde a URL fica direto no executável, se eu colocar a versão q puxa do l2.ini não há nenhuma detecção... enfim..

O código foi todo refeito por mim no XE4 e XE7 (são duas versões diferentes) então ta sem falsas acusações.. Diferente do povo que usa o código do antigo l2updater feito em delphi 7 que acusa virus até no .zip da source..

 

7 horas atrás, Enkel disse:

Bom dia!

 

Não irei disponibilizar ele (gratuitamente), amigo. Recomendo que dê uma olhada em outros updaters aqui no fórum, caso precise de um de imediato. O updater do Wallace é um bom updater, inclusive.

Infelizmente terei que fechar seu tópico por não ser um aplicativo para a comunidade l2jbr e sim um projeto privado possivelmente para fins comerciais.. 

 

Editado por Wallace Carvalho

Caso tenha alguma sugestão para aplicativos, por favor envie por MP.

 WhatsApp: 22 98156-2591 

L2JDREAM PROJECT

Link para o comentário
Compartilhar em outros sites

  • Wallz locked this Tópico
Visitante
Este tópico está impedido de receber novos posts.
  • 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.