Ir para conteúdo
  • Cadastre-se

Command /Menu C4 + Tutorial


BAN - L2JDev

Posts recomendados

Venho trazer um Comando /Menu para Versão C4 Scions of Destiny

e um Tutorial Explicativo!

5Ct6tHd.gif

Em L2PcInstance Vamos Criar uma Boolean de nome _isPartyInvProt para dar um nome para chamar

+ private boolean _isPartyInvProt = false;

Sem seguida Vamos criar _isPartyInvProt Public Boolean para Ligar e Desligar a Proteção PartyInvite

+ public boolean isPartyInvProt(){
+ return _isPartyInvProt; }

 

Sem Seguida vamos criar _isPartyInvProt Public void para retornar o valor da Boolean

+ public void setIsPartyInvProt(boolean value) {
+  _isPartyInvProt = value;}

Isso vale para Comandos Party

5Ct6tHd.gif

Em L2PcInstance Vamos Criar uma Boolean de nome _isInTradeProt para dar um nome para chamar

+ private boolean _isInTradeProt = false;

Sem seguida Vamos criar _isInTradeProt Public Boolean para Ligar e Desligar a Proteção Trade

+ public boolean isInTradeProt(){
+ return _isInTradeProt; }

 

 

Sem Seguida vamos criar _isInTradeProt Public void para retornar o valor da Boolean

+ public void setIsPartyInvProt(boolean value) {
+  _isInTradeProt= value;}

Isso vale para o Comandos Trade

5Ct6tHd.gif

Em L2PcInstance Vamos Criar uma Boolean de nome _messageRefusal para dar um nome para chamar

+ private boolean _messageRefusal = false;

 

Sem seguida Vamos criar _messageRefusal Public Boolean para Ligar e Desligar a Proteção Trade

+ public boolean getMessageRefusal(){
+ return _messageRefusal; }

 

Sem Seguida vamos criar _messageRefusal Public void para retornar o valor da Boolean Atualizar Status

+ public void setMessageRefusal(boolean mode) {
+  _messageRefusal = mode;

sendPacket(new EtcStatusUpdate(this));}

Isso vale para o Comandos Message Refusal

5Ct6tHd.gif

Em L2PcInstance Vamos Criar uma Boolean de nome _getGainXpSp para dar um nome para chamar

+ private boolean _getGainXpSp = false;

 

Sem seguida Vamos criar _getGainXpSp Public Boolean para Ligar e Desligar a Proteção Trade

+ public boolean getGainXpSp(){
+ return _getGainXpSp; }

 

Sem Seguida vamos criar _messageRefusal Public void para retornar o valor da Boolean

+ public void setMessageRefusal(boolean XpSp) {
+  _getGainXpSp = XpSp;}

Isso vale parao Comando End XP and SP

5Ct6tHd.gif

Em L2World Vamos Criar uma Private Final de Valor

+ private final Map<Integer, L2PcInstance> _allPlayers;

Em Seguida Vamos Criar uma Public Collection para gerar numero inteiro de jogadores

    public Collection<L2PcInstance> getAllPlayers(){
        return _allPlayers.values();}

Isso vale para o Comando PlayerOnline

5Ct6tHd.gif

Em RequestJoinParty Vamos Chamar a isPartyInvProt() para soltar uma mensagem, ao Ativar Dentro da public void runImpl

+ if (target.isPartyInvProt()){
+ requestor.sendMessage("The player you tried to invite is in offline Party mode.");
return;}

Isso vale para Comandos Party

5Ct6tHd.gif

Em TradeRequest Vamos Chamar a getMessageRefusal() para soltar uma mensagem, ao Ativar Dentro da public void runImpl

+ if (partner.getTradeRefusal()){
+ player.sendMessage("Target is in trade refusal mode.");
return;}

Isso vale para Comando Menssagen Refusal

5Ct6tHd.gif

Em Say2 Vamos Chamar a getMessageRefusal() para soltar uma mensagem, ao Ativar Dentro da public void runImpl

+ if (player.getMessageRefusal()){
+ player.sendPacket(new SystemMessage(SystemMessageId.THE_PERSON_IS_IN_MESSAGE_REFUSAL_MODE));}

5Ct6tHd.gif

Em EtcStatusUpdate Vamos Chamar a getMessageRefusal() para Ativar a Boolean Protected void writeImpl

+ writeD((_player.getMessageRefusal() || _player.isInRefusalMode() || _player.isChatBanned()) ? 1 : 0);

5Ct6tHd.gif

Em PcStat Vamos Chamar a getGainXpSp() Dentro da Public Boolean addExp

+ if (!getActiveChar().getGainXpSp() && (value > 0)){
return false;}

Em Seguinda vamos procurar a Public Boolean addSp

+ if (!getActiveChar().getGainXpSp() && (value > 0)){
return false;}

5Ct6tHd.gif

Agora Vamos criar nossa public Class Menu.Java

 

Vamos Criar uma class de nome Public Class Menu Vamos usar implements ira ficar assim

+ Public Class Menu implements IUserCommandHandler{

}

 

 

Segundo Passo Vamos Criar uma Private Static Final String ACTIVED DESATIVED Ira ficar assim

   + private static final String ACTIVED = "<font color=00FF00>ON</font>";
    + private static final String DESATIVED = "<font color=FF0000>OFF</font>";

 

Logo a pos Vamos Criar um Private Static Final Int[] COMMAND_IDS ={
        118
    };

Apos Criar um implements  IUserCommandHandler Ela ira pedir um Metodo  @Overrride Public Boolean(int id, L2PcInstance player) Ira ficar assim

 

    @Overrride
    Public Boolean useUserCommand(int id, L2PcInstance player){
        if (id == 118){
sendMainWindow(player);}
return true;}

Ao chamar o Comand Inteiro 118 Vai abrir Chat Chamado sendMainWindow Para Criar o Chat sendMainWindow

+ public static void sendMainWindow(L2PcInstance player){

Vamos Abrir um Chat em Html Com

+ NpcHtmlMessage htm = new NpcHtmlMessage(0);

Agora Vamos fazer um Calendario pra Reconhecer o Horario do Servidor Atualmente!

   + int t = GameTimeController.getInstance().getGameTime();
+ int h = t/60;
+ int m = t%60;
+ SimpleDateFormat format = new SimpleDateFormat("h:mm a");
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.HOUR_OF_DAY, h);
+ cal.set(Calendar.MINUTE, m);

Agora Vamos colocar o Caminho da Html a ser Aberta com o Comando 118

+ htm.setFile("data/html/mods/menu.htm");

Abaixo Colocaremos o que Html vai ler

        +htm.replace("%online%", L2World.getInstance().getAllPlayers().size());
+ htm.replace("%partyRefusal%", player.isPartyInvProt() ? ACTIVED : DESATIVED);
+ htm.replace("%tradeRefusal%", player.isInTradeProt() ? ACTIVED : DESATIVED);
+ htm.replace("%cantGainXP%", player.getGainXpSp() ? ACTIVED : DESATIVED);
+ htm.replace("%messageRefusal%", player.getMessageRefusal() ? ACTIVED : DESATIVED);
+ htm.replace("%time%",  format.format(cal.getTime()));
player.sendPacket(htm);
+ return;

}

E ao Final da Class Menu Colocaremos um Metodo @Override Public Int[] getUserCommandList() resultado

+@Override
+ public int[] getUserCommandList(){
+ return COMMAND_IDS;}

}

5Ct6tHd.gif

Obrigado a Todos! 

Eu não afirmo ser um desenvolvedor especialista java, nem mesmo perto disto.

Mais Se você ja conhece esse metodos não deixe de Curtir

Codigo Completo Em Pastebin

https://pastebin.com/aUx9iTFa

Obs: Isso Vale para todas as Versão L2Java Existente!
Em nem uma Das Class Citadas a Cima Coloquei os import Porque algumas podem estar em local diferente mais ira mostrar um Erro em cada Class sem Import o Proprio Eclipes Ira mostrar onde esta cada importe a ser Adicionado

Resultado!

Sp70EE7.png

Editado por Juvenil Amaro™
  • Gostei 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites


7 minutos atrás, Marlon disse:

Gostei do tópico Júvenil, está ficando bom meu querido! Parabéns.

Obrigado Fiquei 6 Horas com o topico em criação e ao meu ver ainda esta bagunçado, quando o tutorial e feito por escrita e complicado um pouco.

Estou animado com C4 resolvi compartilhar um conteudo que Membros gostaria de entender !

Esses Metodos a cima usa em quase todos futuros Mods a serem adicionados 

6 minutos atrás, Christian-SDM disse:

Mas esse mod ja existe nao ? pq tenho ele no meu projeto c4, a diff era do interlude mas n muda nada pra adaptar 

Quando crio um engine ediferente eu uso uma Source limpa sem codigos adicionados sendo assim não existe em C4

Link para o comentário
Compartilhar em outros sites

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