Ir para conteúdo
  • Cadastre-se

L2JBlueHeart 💙


vert

Posts recomendados


Em 26/05/2019 at 00:18, vert disse:

A mais recente não Elesis;

Eu não tenho acesso... você teria ?

Tambem gostaria muito de vê-la.

Link para o comentário
Compartilhar em outros sites

Bom dia senhores,

Gostaria de saber se há alguma reclamação ou bug encontrado na JBH, caso sim reportem.

@Reign

Poderia postar uma lista das coisas que aconteceram com você para que possa ser montado uma HotFix?

Link para o comentário
Compartilhar em outros sites

Bom dia. Estou praticamente sem tempo devido meu trabalho, por isso minha ausência. Um colega que usa a L2JBH por indicação minha me pediu uma ajuda para adicionar um item específico como drop em todos os raidboss do server dele. Eu tentei adicionar através de um script SQL que encontrei aqui mesmo no fórum, após fazer as devidas alterações para ajustar às tabelas do projeto, contudo sem sucesso. Alguém que tenha um conhecimento mais apurado em SQL e tempo disponível me ajudaria com essa bronca? Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

6 horas atrás, Yanush disse:

Bom dia. Estou praticamente sem tempo devido meu trabalho, por isso minha ausência. Um colega que usa a L2JBH por indicação minha me pediu uma ajuda para adicionar um item específico como drop em todos os raidboss do server dele. Eu tentei adicionar através de um script SQL que encontrei aqui mesmo no fórum, após fazer as devidas alterações para ajustar às tabelas do projeto, contudo sem sucesso. Alguém que tenha um conhecimento mais apurado em SQL e tempo disponível me ajudaria com essa bronca? Desde já agradeço.

Salve irmão,

Poderia por gentileza testar esse SQL:

https://mega.nz/#!icJClaAQ!-d05D-N61j2UXVGkZREkPeDl-JB41pMerltsBJfD8W4

Mas antes de testar configure da forma que desejar creio que não haverá problemas com isso

Outro detalhe, pergunte ao seu amigo se ele encontrou divergências na revisão e nos relate.

 

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Fala rapaziada, encontrei um bug na skill Curse Gloom do necromancer, quando a colocamos no macro e acionamos varias vezes seguida, o reuse delay é anulado

Link para o comentário
Compartilhar em outros sites

Alguns bugs que esqueci de mencionar que encontrei na jBlue.

1 - Quest "Olympiad Undefeated" bugada ao entregar ela com o certificado de cinco vitórias consultivas, e o que acontece? Apenas com o certificado de cinco vitorias qualquer player pode entregar a missão infinitas vezes e assim recebendo e bugando o reward.

2- Skill "Servitor's Share" ou "Servitor Share" (não lembro nome certo), está sendo cancelada quando o char principal recebe algum critico de player, foi testado apenas contra classes físicas. 

3- Vários itens no GM Shop pode ser usado para bugar adena, depois faço a lista e posto aqui, mas como assim bugar adena? Ex: Compro itens por 500k e vendo por 1kk de adena.

Quando lembrar de mais bugs críticos eu posto aqui.

@vert e @TurtleLess boa sorte ?

Link para o comentário
Compartilhar em outros sites

@Reign

O 1 e o 2 temos de dar uma olhada.

O 3 item é referente ao dono do servidor configurar os preços das multisells do gmshop; tanto que nós nem disponibilizamos um GM Shop pré-configurado, o que tem na revisão é o da sunrise...

Link para o comentário
Compartilhar em outros sites

8 horas atrás, vert disse:

@Reign

O 1 e o 2 temos de dar uma olhada.

O 3 item é referente ao dono do servidor configurar os preços das multisells do gmshop; tanto que nós nem disponibilizamos um GM Shop pré-configurado, o que tem na revisão é o da sunrise...

O item 1 eu já possuo a solução.

o 3 Realmente é vacilo do Dono, ou seja não nos responsabilizamos por isso.

o 2 Realmente tem que ser verificado, porem existem variantes.

  • Gostei 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

Jogo um servidor Sunrise, fica aqui duas informações para quem desejar checar no L2JBH.

Weapon Aio
Ao impor a weapon do aio todos os buffers aparecem para o personagem (certo), e ao retira-la o Noblesse Blessing vai junto, sendo necessário dar restart no personagem ou apenas se buffar deste utilizando a weapon aio.

Territory War
É possível adquirir Fame estando dentro do The Einhasad Temple próximo ao High Priest Gregory de Town of Goddard.

   

Link para o comentário
Compartilhar em outros sites

9 horas atrás, RanZum disse:

Jogo um servidor Sunrise, fica aqui duas informações para quem desejar checar no L2JBH.

Weapon Aio
Ao impor a weapon do aio todos os buffers aparecem para o personagem (certo), e ao retira-la o Noblesse Blessing vai junto, sendo necessário dar restart no personagem ou apenas se buffar deste utilizando a weapon aio.

Territory War
É possível adquirir Fame estando dentro do The Einhasad Temple próximo ao High Priest Gregory de Town of Goddard.

Sobre o Aio só substituir o nobles pelo master nobles que já resolve esse problema, e isso de Goddard já é bem antigo e não apenas com Sunrise, mas acho que refazendo a zone tbm resolve isso.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, kayllan1 disse:

alguem poderia upa o shif+drop pos o link esta quebrado

O @Azazyel está sem acesso ao PC mas assim que puder, ficou de disponibilizar o arquivo pra galera;

  • Gostei 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
1 hora atrás, Reign disse:

Há alguns erros na system da jblue, botas light apela está errado, ela mostra a aparência da luva e equipa no lugar das botas e deixa o char sem pernas.

Ancient Armor grade B está com o nome trocado para Ancient Weapon.

Posta a system corrigida por gentileza;

Valeu Reign!

Link para o comentário
Compartilhar em outros sites

Boa noite Pessoal.
Primeiramente gostaria de parabenizar todos os envolvidos por terem trabalhado nesta revisão.
Li todos os comentários deste tópico hoje a tarde e parece que temos aqui uma revisão muito boa.

Gostaria de participar dos testes e também contribuir na correção de bugs.
Não tenho muita experiencia com servidores de L2, mas sou Dev Java Junior, acredito que consigo contribuir com alguma coisa.
Já clonei o projeto e fiz o build pelo ant.

Só estou tendo dificuldades ao utilizar o database_installer, não sei se estou fazendo alguma coisa errada.
Executo o .bat, realiza as configurações solicitadas que aparecem, aparece que foi completado com sucesso, mas olho no meu BD e está vazio.
Alguém poderia me auxiliar com isso ?
Grato.

Link para o comentário
Compartilhar em outros sites

20 minutos atrás, Deivid Thome disse:

Boa noite Pessoal.
Primeiramente gostaria de parabenizar todos os envolvidos por terem trabalhado nesta revisão.
Li todos os comentários deste tópico hoje a tarde e parece que temos aqui uma revisão muito boa.

Gostaria de participar dos testes e também contribuir na correção de bugs.
Não tenho muita experiencia com servidores de L2, mas sou Dev Java Junior, acredito que consigo contribuir com alguma coisa.
Já clonei o projeto e fiz o build pelo ant.

Só estou tendo dificuldades ao utilizar o database_installer, não sei se estou fazendo alguma coisa errada.
Executo o .bat, realiza as configurações solicitadas que aparecem, aparece que foi completado com sucesso, mas olho no meu BD e está vazio.
Alguém poderia me auxiliar com isso ?
Grato.

Roda o l2jblueheart.sql que está na pasta do server em seu banco de dados, não precisa usar o instalador da pasta tools.

Link para o comentário
Compartilhar em outros sites

35 minutos atrás, Reign disse:

Roda o l2jblueheart.sql que está na pasta do server em seu banco de dados, não precisa usar o instalador da pasta tools.

Dei uma olhada nos arquivos que clonei do git e não tem esse l2jblueheart.sql
Vi que aqui nos comentários do fórum tem, mas não sei se esta atualizado.

 

 

Link para o comentário
Compartilhar em outros sites

Obrigado Reign.

Não sei se o problema que estou tendo, é um bug, mas subi o servidor certinho, entrei com o personagem GM.

-Nenhum dos comandos de gm funcionam, aparece no chat que o comando não existe.
-Os comandos que eu acredito que seriam mods como o .dressme e .expoff, não acontece nada.
-Não consigo pegar target de nenhum mob ou npc, "Achei que poderia ser alguma coisa do char GM, então criei um novo personagem e acontece a mesma coisa."

São algumas coisas que me deparei e procurei algum arquivo de configuração pra ver se poderia ser alguma coisa, mas não encontrei nada relacionado a isso.
Se alguém puder me ajudar. =D

Editado por Deivid Thome
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Deivid Thome disse:

Obrigado Reign.

Não sei se o problema que estou tendo, é um bug, mas subi o servidor certinho, entrei com o personagem GM.

-Nenhum dos comandos de gm funcionam, aparece no chat que o comando não existe.
-Os comandos que eu acredito que seriam mods como o .dressme e .expoff, não acontece nada.
-Não consigo pegar target de nenhum mob ou npc, "Achei que poderia ser alguma coisa do char GM, então criei um novo personagem e acontece a mesma coisa."

São algumas coisas que me deparei e procurei algum arquivo de configuração pra ver se poderia ser alguma coisa, mas não encontrei nada relacionado a isso.
Se alguém puder me ajudar. =D

Baixe novamente os scripts e tente mais uma vez.

Link para o comentário
Compartilhar em outros sites

  • vert changed the title to L2JBlueHeart
  • 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.