Ir para conteúdo
  • Cadastre-se

Source aCis 364+ Diff 363/364


Bian

Posts recomendados


Obrigado, Bian!

 

Changeset 363 (617)


Benom, Castles, Castle Manor, Event listeners, Sieges, Seven Signs, Inventories, Misc

Benom
- Addition of Benom script.

Castles
- CastleManager cleanup by svipben. Castles are hold on a Map, the key being castleId.
- Castle doormen "busy" HTM is shared among all instances (39 HTMs dropped).
- Drop _siegeRegistrationEndDate. The registration end time is now directly calculated from siege date (siege date - 1 day). It could generate issues if you didn't edit both times. regTimeEnd dissapears from castle.sql.
- Static informations are now loaded from castles.xml (circlet id, related tickets, related NPCs, artifact id) and have been unhardcoded.
- Create MercenaryTicket model, holding ticket infos. Each Castle got its own List of static tickets.
- NPC getCastle() is entirely cleaned up and generated from castles.xml.
- Castle model must be generated from a castle id and castle name.
- Drop entirely castle index logic wherever it was used (replaced by castleId logic).
- Move removeCirclet logic from CastleManager to Castle.
- Avoid to generate pointless integers for each L2WyvernManager.
- Add retail HTMs and core logic for Mercenary Managers. Introduce Seven Signs buylists (show different output depending who is currently owning the Seal of Strife).
- Castle entity rework :
- now holds Set<ItemInstance> _droppedTickets (before held by MercTicketManager).
- now holds int _circletId (before held by CastleManager).
- now holds List<Integer> _relatedNpcIds (before was generated on the fly using weird castle index and distance check).
- now holds List<MercenaryTicket> _tickets (before held by MercTicketManager on multiple splitted static arrays ; which weren't even holding Seven Signs state).
- now holds List<L2Npc> _siegeGuards (before held by MercTicketManager).
- Artifact is now linked by id, and not by instance.
- Dropped tickets are now processed by ItemsOnGroundTaskManager.

Castle Manor
- L2Manor (seeds.xml parsing) is merged with CastleManorManager. Castles related procure/crop lists are moved to CastleManorManager aswell (easier to handle database storage that way).
- The different internal classes are now moved into model.manor package.
- Addition of ManorMode enum.
- CastleManorManager follows latest L2J for the writing style.
- Complete ExShowCropInfo, ExShowCropSetting, ExShowManorDefaultInfo, ExShowSeedInfo, RequestSetSeed packets.
- Delete 6 admincommands related to manor. Keep only //manor, based on latest L2J. Incorporate //manor into game_menu.htm.
- Fix seed/harvest issues.
- CastleUpdater is dropped. The automatic saving is now handled on CastleManorManager (save manor states every 2h). No more alternative saving Config.

Event listeners
- Addition of an event layer for sieges addSiegeNotify(castleId). Rework the system to handle siege status with an Enum, under SiegeStatus (which drops 2 booleans).
- Item listener is now lazy initialized (as it was used for a single item until now, which avoid to generate 6k empty lists for nothing).

Sieges
- Teleport system during siege is entirely redone and fixed. All ppl are moved to second closest town, no matter what.
- Drop SiegeManager and split content between castle entity initialization, Config, CastleManager. getSieges() method is dropped, use getCastles() / getSiege on a for loop to get them.
- When a Life Control or Flame Control Tower is destroyed, a little, not-attackable version of it spawns.
- Add 2 SystemMessage related to sieges (when all life controls are destroyed, and when you try to use L2Doormen open/close doors function when castle is being sieged).
- Add Ressurection siege conditions (can't ress if not participant to a siege, if attacker hasn't a flag or if defender hasn't anymore Life Crystals).

Seven Signs
- Introduce following Enums : CabalType, SealType, PeriodType. Those enums are 'improved versions' and hold more infos (which avoid few static methods).
- Due to previous change, all seven signs related tables must be edited.
- Complete cleanup, which avoids sometimes 15-18 .get() calls and avoid String operations (notably on cabal type).

Inventories
- Drop Warehouse abstract layer, and slight cleanup on Inventories.
- Creation of ItemState Enum to enforce item related modifications.
- Replace ItemContainer CopyOnWriteArrayList for ConcurrentSkipListSet (because of terrible performance on write).
- Order items (avoid the items jump on inventories), based on inventory's item addition (similar to L2OFF ; I didn't see other rule). We use an unused ItemInstance variable to store it, _time.
- Edit items.sql to optimize datatypes. Drop useless column time_of_use.
- Drop ItemInstance.changeCountWithoutTrace (single use).
- Drop L2PcInstance._arrowItem (no uses).
- Cleanup L2PcInstance.reduceArrowCount (probably can be replaced entirely by a simple destroyItem) && checkAndEquipArrows.

Misc
- Due to mercenary tickets handling edition, ItemsOnGroundTaskManager has to be mandatory, so SaveDroppedItem config is now dropped to avoid admin "lack of brain" issue. All timers and configs are still reachable.
- Drop StartingAdena config (value was wrong, and it can be handle with another config).
- Edit default GC type for CMS, which avoid lag spikes.
- Fix pet gain system (wolf, sin eater, etc). Ty Erlandys for the complete fix.
- Drop deprecated KnownListUpdateInterval config, ty SweeTs for reminder.
- Cleanup L2PcInstance.storeEffect() - ty svipben.
- getName() / getTitle()
- Headquarters name/title follows L2OFF. Ty RooT for fix.
- isCustomNpc() approach is given up. We rely on templates to feed name/title, but current name/title can be changed (which fixes changename admincommand).
- changename is merged with setname. Both changename and changename_menu commands are dropped. You can now settitle on L2Npc (it is temporary, similar to setname).
- HennaTable StatsSet is re-used (avoid to generate 180 HashMaps).
- MapRegionTable uses getInstance() logic (that's the point of singleton).
- Edit TownZone "taxById" variable to "castleId", which is friendlier to understand.
- Merge summon conditions SiegeManager.checkIfOkToSummon && SevenSigns.checkSummonConditions in L2PcInstance.checkUseMagicConditions (single use).
- L2PcInstance.isCastleLord is cleaned up (compare castle ids directly, not godamn Castle entities).
- Cleanup GatekeeperSpirit script.
- Fix NPE on ExListPartyMatchingWaitingRoom, ty sahar for report.
- //create_set admincommand is extended :
- armorsets.xml now hold set name. ArmorSetsTable use StatsSet to feed ArmorSet objects.
- A new panel is generated with existing sets (because good luck to remember chestId).
- ArmorSet model is cleaned up.
- CastleManorManager seeds parsing is slightly edited (StatsSet is reused).
- Clicking on "Item" button simply popup itemcreation.htm.
- Duel system : partymatch system is ended for any players (was written as TODO since Duel rework).
- Edit checkEffectRangeInsidePeaceZone x, y, z parameters for Location.
- Move and cleanup signet cast condition from L2Character to L2PcInstance.checkDoCastConditions.

PS : castle guards spawn (from neutral castle) system isn't yet processed. Don't report it.
PS : due to heavy changes, it is STRONGLY adviced to make a clean installation of tables if you got no clue about what you are doing.

Due to the HUGE amount of edited engines (Seven Signs, Manor, Castles, Sieges,...), consider it as a part I, even if it's not finalized. I need your reviews to complete the part II. This changeset, in term of coding, worth 3 to 4 regular revisions. Unfortunately, as everything depends of everything, it couldn't be done of another mean.

Some things have been voluntarly broken - I think notably about NPC guards, but most shouldn't. Consider to report everything. Due to the amount of code, I couldn't test all, and didn't test Benom, Seven Signs && Manor.

Changeset 364 (636)


Scheme buffer v2, Auctioneer, Misc

Tryskell, the scheme buffer v2 !
- skill names and descriptions, hold by XML rather than Config.
- less panels, easier to use.
- paging system to avoid scrolling effect.
- no "blinking" effect.
- Drop of BufferMaxSkillsPerScheme config (now uses player max).

Auctioneer instance is reworked :
- bypasses work anew (caused by getCastle() refactor)
- fix "Back" button on Bidders list (ty Anarchy)
- Cleanup and more safety (ConcurrentHashMap, less calls of .get(), everything is try/catch, return is correctly used, paging system is refreshed).

Misc
- Fix Lucky skill acquisition. Ty Ailierynn for report.
- Valakas doesn't use a dummy anymore which lighten the code and avoid to bug custom raidboss checkers showing wrong location.
- Revert interaction range edit (100 is buggy, return back to 150) until someone decides to care about all types of range in one throw.
- Fix Broadcasting Tower knownlist issue. Methods are sync-ed with observe olympiad. Drop _observerMode boolean (can be guessed with clever use of _savedLocation). inObserveMode() renamed for isInObserveMode().
- Fix the "unhandled slot type" issue. Ty Sahar.
- Addition of Flame/Control infos on castle admin panel.
- Wrath skill enchant route fix. Ty Sahar.
- Olympiads : No forced stand up on L2OFF.
- Olympiads : You are teleported back to a random town location, not your saved location.
- teachTo is slightly edited ; avoid to generate 6k empty ArrayList and drop most of getters. Ty katara.
- Rework the NPC skills holding system, avoid to generate 28k empty ArrayList.
- Rework L2TamedBeast (cleaner version).
- Fix previous revision regarding GrandBoss using returnHome. Ty Sahar.
- Fix social/abnormal admin panels/commands. Ty katara for report.

Ty to SweeTs for buffer design and Sahar for XML definition.

izwy85.png

Editado por Leonardo Holanda
Link para o comentário
Compartilhar em outros sites

Antes de mais nada muito obrigado pelo post.

Eu gostaria de saber se tem como eu adicionar as diffs sem perder o que foi adicionado antes.

Provavelmente não, vai dar conflito de linhas e não vai funcionar as diff.

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

Provavelmente não, vai dar conflito de linhas e não vai funcionar as diff.

Poderia me explicar uma coisa no seu ponto de vista? Tipo, vocês vivem trabalhando na aCis vejo muita gente pegando aCis de base como projetos, ou até mesmo criando projetos para vender. Tipo, cada vez que sai uma att é trocentas coisa adicionadas arrumadas e modificadas, porque vocês continuam usando? Tipo eu sei que eles mudaram a Engine da mesma e ela é bem mais limpa e leve, porém, ela é super incompleta no quesito "ter tudo do Interlude" e cada vez que sai uma atualização e uma carambaiada de coisas . Porque vocês usam ?

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

@Elesis

 

Sua pergunta já contém a resposta.

 

Não adianta estar tudo funcionando, e o código ser uma nojeira, não conseguir evoluir de maneira simples e fácil, ter consistência etc etc etc e tal.

 

Muitos (um ou dois são ok) dos projetos L2j jogam no lixo todo o conceito de POO, o que a L2jaCis traz é um grande alívio para o L2j.

 

Estou a bastante tempo distante do L2j, mas na época em que eu mexia bastante, era extremamente flexível criar um mod, corrigir um problema, criar um determinado comportamento.

 

Entendam: Ter uma base sólida, bem escrita, que seja simples de entender, ter uma versatilidade/flexibilidade, na minha opinião é o mais importante, o resto é questão de tempo.

 

Esses projetos privados ai, se coloca o código no github, vamos chorar de tristeza...

 

Aprendam Java, e o use para estudar afundo POO, pegue como base L2jaCis e façam seus projetos. Gostam de reclamar, mas não querem estudar, não possuem nem argumentos para discutir.

 

L2jaCis nunca faltou nada para mim, muito pelo contrário, só ajudou nos projetos que eu fazia.

 

O que desejam:

ServerConfig config = new ServerConfig();
config.noBugs(true);
config.percent(100);
config.noNullPointerException(true);
config.quest(Enum.ALL);
config.numPlayersWithoutLag(5000);

Server server = new Server(config);
server.start();

O projeto pode ser baixado de graça e eles não te obrigam a pagar, existe uma comunidade forte no projeto L2jaCis, todo tipo de evento/mod/quest pode ser encontrado na internet, e querem CHORAR?

É cada pergunta viu, se não gosta do projeto, simples não o use.

Editado por Bluur

Full Stack Developer


Link para o comentário
Compartilhar em outros sites

 

Agradeço pela resposta, mas eu não estou chorando, não estou reclamando, o que eu fiz foi uma pergunta para entender o porque vocês usam, não estou falando sobre estudar ir a fundo etc. E sim o motivo ao qual usam, eu na minha opinião não vejo lógica em certas coisas como, "não adianta o código ser uma nojeira" eu realmente não consigo entender esse comentário.

 

Vale ressaltar, em NENHUM momento eu reclamei ou dei algum tipo de trash talk no projeto, o que eu fiz foi uma pergunta, do porque usar algo que tecnicamente, está incompleto e em desenvolvimento, e a cada release sai updates gigantescos tão grande que você tem que baixar tudo de novo e começar do zero a implementação das coisas ( eu acho não sei se tem outra forma) Eu não sou de mexer com Java, estou procurando saber, por isso pergunto, como falei antes, obrigado pela resposta

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

É exatamente está a questão não usamos.

 

Quem usa é para aprender e criar códigos em cima do projeto por ter uma base limpa e ser mais fácil mexer.

 

Por isso mesmo que você não vê quase nenhum live server utilizando o mesmo.

 

Existe uma forma de atualizar sem perder nada mas você teria que ter acesso a svn ou ter uma própria com 2 projetos iguais no eclipse 1 deles você mantem atualizado e commita quando sair as diff nova e o que é modificado você somente atualiza, mas como são muitas linhas modificadas vai dar uns erros nada que uma meia hora você não corrija eles.

 

O projeto pode ser baixado de graça e eles não te obrigam a pagar, existe uma comunidade forte no projeto L2jaCis, todo tipo de evento/mod/quest pode ser encontrado na internet, e querem CHORAR?

Só pagam 10€, pra ter acesso a 10 changeset, ou esperam alguma alma caridosa postar...

Link para o comentário
Compartilhar em outros sites

Existe uma forma de atualizar sem perder nada mas você teria que ter acesso a svn ou ter uma própria com 2 projetos iguais no eclipse 1 deles você mantem atualizado e commita quando sair as diff nova e o que é modificado você somente atualiza, mas como são muitas linhas modificadas vai dar uns erros nada que uma meia hora você não corrija eles.

Desculpe-me a ignorância, mas poderia explicar um pouco melhor? Eu entendi mas me enrolei.

Link para o comentário
Compartilhar em outros sites

Desculpe-me a ignorância, mas poderia explicar um pouco melhor? Eu entendi mas me enrolei.

Não tem como explicar melhor só se desanhar.

 

  1. Você tem que ter a SVN.
  2. Dar checkout nela em 2 projetos diferente no eclipse.
  3. 1 Deles você coloca os MOD.
  4. O outro você coloca os changeset quando sair e commita
  5. E com o que possui os mod você da update dai você vai ter que corrigir uns erros que vão dar devido a alteração nas linhas que você adicionou os mod.
Editado por Bian
Link para o comentário
Compartilhar em outros sites

Muito obrigado pela contribuição :) Agora só falta os eventos dá acis . Bian ou Marlon assim que vocês poderem envie um MP pra mim quero falar com algum de vocês .

Não tenho os eventos não, mande a MP ai.

Link para o comentário
Compartilhar em outros sites

@bian

Entendi bian obrigado pelo resumão, era isso que eu queria saber, pois não vejo muita lógica pegar e usar ela em um servidor. Obrigado

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

"não adianta o código ser uma nojeira" eu realmente não consigo entender esse comentário.

 

 

Exatamente, você não entende, e acha que só porque funciona, tá de boa. E simplesmente nem esquento a cabeça, porque imagina,se pensássemos assim estaríamos presos em algum projeto arcaíco.

 

Só pagam 10€, pra ter acesso a 10 changeset, ou esperam alguma alma caridosa postar...

 

Te obrigaram a pagar? Então tem algo errado nisso.

 

Não vou criar textão para discutir projeto x e y.

 

E usem github (youtube tem várias aulas).

 

Abraços.

Editado por Bluur

Full Stack Developer


Link para o comentário
Compartilhar em outros sites

 

Não tem como explicar melhor só se desanhar.

 

  1. Você tem que ter a SVN.
  2. Dar checkout nela em 2 projetos diferente no eclipse.
  3. 1 Deles você coloca os MOD.
  4. O outro você coloca os changeset quando sair e commita
  5. E com o que possui os mod você da update dai você vai ter que corrigir uns erros que vão dar devido a alteração nas linhas que você adicionou os mod.

 

 

Não consegui nao, mesmo assim obrigado.

Link para o comentário
Compartilhar em outros sites

 

Relaxa ai cara e_e nossa o que vocês tem ?

 

Vocês são DEV's com intuito de fazer seus projetos, já eu não, eu apenas faço o servidor e coloco pra rodar. Não sei porque vocês mexem com isso, se é por gosto, passa-tempo, ou pra vender futuramente, ou até mesmo abrir um servidor. No meu ponto de vista você pode fazer um servidor jogável com plataformas que temos ai, apesar que IL não dura muita coisa não, principalmente os no-custom. (Por favor não de exemplos de servidores que duraram um monte bla bla)

 

Bom não vou mais discutir sobre isso até porque parece que vocês ficam bravos quando alguém fala da aCis, isso que nem hateei ela, só fiz uma pergunta, passar bem e obrigado as respostas.

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

Te obrigaram a pagar? Então tem algo errado nisso.

 

Não mas quem me passou os changeset pagou para ter acesso, e não estamos discutindo X e nem Y.

 

Eu tenho minha SVN própria então não utilizo o GitHub.

Link para o comentário
Compartilhar em outros sites

    [javac] Compiling 1675 source files to C:\Users\PC\workspace\aCis\aCis_gameserver\build\classes
    [javac] C:\Users\PC\workspace\aCis\aCis_gameserver\java\net\sf\l2j\Config.java:1208: error: method loadSieges() is already defined in class Config
    [javac] 	private static final void loadSieges()
    [javac] 	                          ^
    [javac] C:\Users\PC\workspace\aCis\aCis_gameserver\java\net\sf\l2j\gameserver\model\itemcontainer\Inventory.java:541: error: method unEquipItemInBodySlotAndRecord(ItemInstance) is already defined in class Inventory
    [javac] 	public ItemInstance[] unEquipItemInBodySlotAndRecord(ItemInstance item)
    [javac] 	                      ^
    [javac] 2 errors

Alguém pode me ajudar com esse erro ao compilar ?

Link para o comentário
Compartilhar em outros sites

    [javac] Compiling 1675 source files to C:\Users\PC\workspace\aCis\aCis_gameserver\build\classes
    [javac] C:\Users\PC\workspace\aCis\aCis_gameserver\java\net\sf\l2j\Config.java:1208: error: method loadSieges() is already defined in class Config
    [javac] 	private static final void loadSieges()
    [javac] 	                          ^
    [javac] C:\Users\PC\workspace\aCis\aCis_gameserver\java\net\sf\l2j\gameserver\model\itemcontainer\Inventory.java:541: error: method unEquipItemInBodySlotAndRecord(ItemInstance) is already defined in class Inventory
    [javac] 	public ItemInstance[] unEquipItemInBodySlotAndRecord(ItemInstance item)
    [javac] 	                      ^
    [javac] 2 errors

Alguém pode me ajudar com esse erro ao compilar ?

 

Esta duplicado os métodos nessa classe deve ser erro na hora de adicionar diff.

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

    • 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; } } }  
    • Trate de comparar Test Of Sagittarius entre L2jOrion y L2jProyectX y son exactamente iguales, excepto por el import sys que esta adaptado.
    • esse projeto ta usando frozen 1.5? ultima vez que testei, ate quest soulshot newbie tava com problema. se for python, voces podem ver na l2jorion, la o dev que desenvolveu, ele arrumou todas as quests, pelo menos quando usei em server 5x, nao tive problema relacionado a quests. certamente vai te que mudar somente imports e talvez copiar algum metodo novo de algumas quests a referente drop items
    • COD-157    224_TestOfSagittarius                        - Testado e Funcionando, mas con bug al comienzo de la mision, no avanzan subquest queda na inicial  
×
×
  • 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.