Jump to content



Anúncios Patrocinados








  • Recently Browsing

  • Similar Content

    • By KhayrusS
      A um tempo atrás, Kelvin falou comigo sobre a possibilidade de termos um projeto classic, visto a escassez desse tipo de servidor,   com mais visibilidade para a comunidade.
      A ideia é termos um projeto Classic utilizável e estável, e o melhor de tudo: open source
       
      Discord
      Até hoje só tinha o servidor 1, algumas pessoas me pediram para ter um servidor em português, então segue os dois servidores existentes:
      Discord Server 1 [ENGLISH ONLY]
      Discord Server 2 [Português]
       
      Download compilado
       
      Sobre o projeto:
      No inicio, eu tinha o projeto era apenas para testes de implementações pessoais, basicamente para me manter atualizado com o Java devido a política de atualização semestral adotada.  O projeto está ativo há mais ou menos um ano, com atualizações diárias. Existem 3 colaboradores direto no projeto, e mais alguns indiretos.
      Hoje estamos dando suporte ao protocolo 272, a versão atual do servidores NA.
      Requisitos:
      Java 16 MySql 8 Client protocolo 272 Caracteristícas
      Projeto open source sob licença GPL 3; Disponível em https://github.com/JoeAlisson/L2jOrg Atualizações diárias, porém depende. Tem dia que são muitas, tem dias que são poucas, às vezes nem tem;😛 Pretendo manter o ciclo de atualização da branch master a cada 3 semanas com uma versão um pouco mais estável; Para os mais apressados por atualização, as atualizações diárias ocorrem na branch development (Lembrando que essa branch é de desenvolvimento ativo, então em uma ou outra atualização pode ocorrer algum erro no build ou para iniciar o servidor)  
      A participação da comunidade é essencial para o desenvolvimento de qualquer projeto open source. Eu sei que muitas pessoas, ainda hoje, têm uma visão um pouco deturbada de projetos open source, então vou listar alguns projetos como referência de que um projeto open source pode ser tão bom ou melhor que um projeto privado:
      Java https://github.com/openjdk; MySql https://github.com/mysql; Hirakicp https://github.com/brettwooldridge/HikariCP; EhCache https://github.com/ehcache/ehcache3; Log4J https://github.com/apache/logging-log4j2; e por último mas não menos importante: async-mmocore https://github.com/JoeAlisson/async-mmocore 😛 Claro que existem muitos outros relevantes, mas me restringir a listar projetos que são usados como dependência do L2j ORG.
       
      Não é necessário ser expert em Java ou conhecer tudo de L2j para ajudar no projeto, você pode contribuir com o que puder. Para os interessados no projeto que querem ter uma participação mais ativa, estamos em busca de alguns talentos.
      A participação no projeto vai ser dividida nas categorias:

      Desenvolvedor de Core: É necessário ter conhecimento em programação para implementar e corrigir códigos.
      Desenvolvedor de Datapack: É necessário ter conhecimento em L2J no geral, HTML e XML para trabalhar com shops, npcs, quests.
      Contribuidor: Membro que contribua com os testes do projeto, reporte de bugs, suporte aos usuários e contribuições em geral para o projeto.
      É só entrar em contato comigo por MP e fornecer algumas informações básicas:
      Nome Real:
      Interesse e experiência na área: (Core, Datapack ou Contribuidor)
      Quanto tempo possui para se dedicar ao projeto?
      Possui algum trabalho disponível que possa enviar como referência ? (se tiver mande junto por  MP.) 
       
      Para quem já tiver interesse imediato eu criei um tutorial básico de como compilar o projeto:
       
      Sobre o cliente
      Download Client
      Para utilizar localmente sem modificação do cliente baixe o launch e coloque dentro da system:
      https://github.com/JoeAlisson/L2jOrg/wiki/files/launchL2.zip
      O post ficou mais extenso do que queria, então qualquer dúvida que tiverem é só perguntar.
      []'s
       
    • By junin00
      O proprietário prometeu a cada 10 revisões, os recursos das revisões antigas serão compartilhados.
      Link Source 2.0

      Esse é compilado da revisão atual compartilhado do forum deles.

      Link Build 3.1
       
       
      #--------------------- # Correções Rev. 1.0: #--------------------- Fixed MissQueen in Talking Island, for some reason the spawn was on the roof. Some configs have been translated, the rest will be translated further. Config for endless nipples and arrows. Implementation of Voiced commands (so far only a template and only 1 .online command has been added). (needed for multilingualism). Transferring about 30 old fixes (without commits), I just know the fixing of bugs related to the attack of characters. #--------------------- # Correções Rev. 1.1: #--------------------- If you spam the "any skill" button into a mob and at the same time move somewhere, your Persian will freeze and stake until you take yourself into the target. (FIX) You cannot sit on the throne (knocks out a mistake in the GS) (FIX). Fixed skill Fist Fury (gave effect to all weapons, now only knuckle dusters). Correction of skills Fire Vortex, Wind Vortex, Dark Vortex, Light Vortex, Ice Vortex. #--------------------- # Correções Rev. 1.2: #--------------------- Cut out mariadb, returned mysql-connector-java. (don't even ask why or why). When you buff or heal RB (which has lvl lower than yours by 9), an anchor should be hung (not fat). (FIX) - https://www.youtube.com/watch?v=Z8lemrgOELk Receiving an error in the console when buffed to a low-level RB. (FIX). Getting an error in the console when attacking a low-level RB. (FIX). + with different weapons (FIX). Lard is hanged for helping low-level players. (heal in a party for example). (FIX) - https://www.youtube.com/watch?v=MD-Sq8S9J3E If a skill has a <player hp = "60" /> tag after the trigger, it does not update the character's stats, but the stats change. You should also write a message that the effect has started or ended. On other builds this message is ID: 1133 (since HP has decreased, the effect of $ s1 can be felt.) And ID: 1134 (since HP has increased, the effect of $ s1 will disappear.) (FIX). Fixed auto-attack on the character (previously, for some reason, it did 1 hit and stopped). (FIX). #--------------------- # Correções Rev. 1.3: #--------------------- Fixed a problem with the peaceful zone (it was impossible to beat NPCs and monsters in the peaceful zone). Config for changing the MONTH / DAY / WEEK Olympiad period (month, day, week). Lard is hanged for helping low-level players. (minor adjustments - now the fat is hung up for the buff and works outside the party, respectively). Added AI Frintezza (+ penetration implementation). It still needs a lot of work - but it is already working. Quest Tutorial (rewritten into more sane code, but needs some work and fixes). #--------------------- # Correções Rev. 1.4: #--------------------- * By off, players who have been banned should simply be thrown out of the game, not crashed. * By off, it is forbidden to call a pet in battle. + New AI BrekaOrcOverlord, CatsEyeBandit, DeluLizardmanSpecialAgent, DeluLizardmanSpecialCommander, KarulBugBear, OlMahumGeneral, ScarletStokateNoble, TimakOrcSupplier, TimakOrcTroopLeaderF TurekOrcrc (we will replenish). + Config setting the time of buffs (on request). + Quest Tutorial is completely fixed, functions as it should. * Skill Sweeper, it should absorb when sharpening HP, ie work like DRAIN + there is no sharpening to absorb MP What's new in version 1.3 * Fixed a problem with a peaceful zone (it was impossible to beat NPCs and monsters in a peaceful zone). + Config for changing the period of the Olympiad MONTH / DAY / WEEK (month, day, week). * Lard is hanged for helping low-level players. (minor adjustments - now the fat is hung up for the buff and works outside the party, respectively). + Added AI Frintezza (+ implementation of penetration). It still needs a lot of work - but it is already working. + Quest Tutorial (rewritten into more sane code, but needs to be improved and corrected). #--------------------- # Correções Rev. 1.5: #--------------------- ! Now the build starts with Java 14. ! Upgrade to aCis 391. + now the chat shows where the htm file is located. (more for convenience, for admins). * Corrections in AI, correcting flooding in chat. * TP from Dion Fortress of Resistance (was not the correct point). (Thanks Gauri). + Time and date in the console (more for convenience). * Fixed the initial quest, previously called immediately (now as it should). #--------------------- # Correções Rev. 1.6: #--------------------- Fixed TP coordinates in Seal of Shilen. Fixed TP coordinates in Silent Valey. Fixed TP coordinates in Hot Springs. https://www.youtube.com/watch?v=gyVtyNvnkFI - FIX https://www.youtube.com/watch?v=qBB6Mc3cFq0 - FIX Fixed https://acis.i-live.eu/index.php?topic=10624.0 - FIX Improvement of Bluff, now deploys the target normally. Added missing NPC_IDs in multisell 1001 Fixed problem with picking up items from the ground (earlier, during picking up there was a slight stupor and movement was delayed.). (Thanks to James). quest Q127 - no reward. (Thanks to James). Corrected http://joxi.ru/52aBa1vUbYkE4A (Thanks to James). #--------------------- # Correções Rev. 1.7: #--------------------- Fixed a problem with archers (previously, for some reason, they ran to the target, for example, which was killed), although it should remain in the range. Added config level up to which (inclusive) gatekeepers are free. (Thanks to James) Fixed Lottery Ticket Seller in Elves, Dwarves and Dark Elves town (previously there were Orcs). (Thanks to James) Added max level config to enter Cruma Tower. Added missing items from the pet item vendor (in Gludio). Fixed pagan (previously it was possible to pass without a quest). (+ throws it into the city if there is no quest item). Fixed TP coordinates in Outlaw Forest (Thanks Gauri) Fixed TP coordinates in Pavel Ruins (Thanks Gauri) Fixed TP coordinates in Skyshadow Meadow (Thanks James) Fixed TP coordinates in Antharas Lair (Thanks James) Translated spawnlist_4s.sql -> spawns4s.xml Fixed character can no longer fall under textures (rarely, but it happened - you could 4-5 minutes to run under the map, and had to do a teleport. Fixed a problem with freezing (when the character fell from a height). The next AI fixes, optimized for the style of the aCis themselves (also, the chances of messages are cut in 2) were checked on PTS. Fixed Song of Renewal incorrect cooldown . (Thanks Gauri) Fixed it is impossible to speak with pets in the city. (near sellers for pets). Added a drop multiplier for items with GrandBoss (on request). Now from the game, you can open the htm file. (the NPC you need). (more for convenience, for admins). Added AI for some monsters in GFG (which reproduce). #--------------------- # Correções Rev. 1.8: #--------------------- * Mobs, now you can spoil, manure the dead. (the problem came from me when I was fixing dead target and distance issue). * Problem with manor (duplicate lines + mos belongs to the rune, it was previously gdd). * The problem with the dino island (now belongs to the rune). * Some corrections for manor (duplicate lines removed). * Soul Crystal, not working right. * Huge reworking of all teleports (all points are taken directly from the PTS + adjusted prices for all teleports (previously it was x2)). + Offline trade (by popular demand). * https://www.youtube.com/watch?v=k7oE5Ue5ytA https://www.youtube.com/watch?v=8Cj8ss-kqSE https://www.youtube.com/watch?v=AyvBVCxpYac https://www.youtube.com/watch?v=gZkCEn225J8 + Turn the character towards the NPC when talking. * Several NPCs were in the air. * Guards on sieges (now appear correctly + fixed guards in the rune, which for some reason were missing in the spawnlist aCis). * Major changes to the initial quest, now works correctly. * FakeDeath (for some reason, the character who was killed, got up after death and remained in this position). * A message about the incorrect target should be written only to a dead target. (for us, it was written without a target). #--------------------- # Correções Rev. 1.9: #--------------------- Upgrade to aCis 392. Added herb drop from gremlins (PTS). Fixed character rotation when using the skill (previously it worked in aCis, after update 392 - it was broken). Removed flood protector of skills and actions. Optimization of the code (fixes) that were added earlier. Minor adjustments to the spawnlist (in particular, added unworthy NPCs on sieges). Correction of teleports when using skills (skill spam). (jerks). ForgeOfTheGodMonsters AI adjustments. It's time to return mariadb (it won't affect the work in any way, but there are plans). If you fly to the POI to the baium on a wyvern, the TP should take place to the city. Fixed a bug where, when using a skill on a guard, it could hang a fat or an anchor (appeared after fixing the RB). Added test quests 501 and 503 for 4 and 5 clan lvl, you need a good test. Added config for chat (shaun and trade can be made global + level check). (on request). Fixed a problem with the flag on the siege (when you spawned the flag, the siege would freeze and not end). The problem is fixed that you cannot teleport to the city where the castle is under siege. Fixed a problem with the initial buff (previously for some reason 1-2 buffs were buffed). The price for all night teleports has been corrected, the price should be x2 less. Huge AI rework for frinteza (test required). True siege guards were previously removed after the siege was completed, but then immediately appeared (after 392). #--------------------- # Correções Rev. 2.0: #--------------------- 1) Fixed CA. (did not swing before, appeared in 1.9 after fixing the cast time). 2) Replaced the buffer with a more functional one. (more advanced functionality, many asked). 3) Fix the Olympics, now the character appears at the place from which he flew away, and not a random point in the city. (by PTS). 4) Removed the price of a free teleport. (PTS should be without price). 5) Htm from quests 501 and 503. (I forgot to add in previous revisions). 6) Added service "premium item". (on request). 7) Fixed a problem with malaria. (previously did not work for the player). 8)Fixed mysql path on mariadb. (in the base installer). 9) Fixed SevenSigns (now mobs appear correctly depending on the period). 10) Fixed bug with OfflineTradersTable (null). 11) Fixed a problem with the cast of the seals of the castle (the target is not visible, after update 393). 12) Removed Voiced VoiceBuff command. (there are too many questions about it). 13) Fixed a problem with the SummonFriend skill. (didn't work at all). 14) Fixed a bug with the quest Q501_ProofOfClanAlliance (null). 15) Editing the night teleport. "The Gatekeeper's general teleport fee is discounted at 50% from 8:00 PM to 12:00 AM (midnight) CST (8:00 PM GMT + 1 to 12:00 AM GMT + 1 on the Teon and Franz servers). Sundays and Saturdays are exceptions. " + fixed all prices. 16) Fixed a problem with the use of skills (when the character turned in one direction). 17) Fixed a problem with pets (it was impossible to use food). 18) Rift fix. (it was impossible to get to Anacasel). 19) Fix caste for magicians. 20) Added .expon and .expoff commands (by popular demand). 21) Fixed a serious bug with AutoLoot - earlier it was allowed to take things with more inventory capacity (120 \ 80). Now, when the limit is reached, things fall to the ground. 22) Fixed the work of Frintezza (after updating aCis). 23) Cleaned the HS from flooding (a lot of unnecessary information). 24) Now SuperHaste will not fall off (when you climb or climb a mount). (on request). 25) Full correction of raid bosses (the correct work of his curses if the difference in lvl is more than 9). 26) Fixed problem with WalkerRoutes (walking NPCs). (earlier they twitched somehow incomprehensibly). 27) Turn on clan quests by default. (501, 503 - on tests they showed themselves normally). 28) Minor adjustments to FakeDeath. (now works correctly). 29) Fixed problem with Premium (sometimes caused null). 30) Fixed problem with Premium (enabled even when disabled). 31) ItemHandler for BreakingArrow (works + - as it should). (Who does not understand, arrows for frint in addition to the script itself). 32) Fixed buffs in bufferSkills.xml (ready-made sets). - Thanks James. 33) Fixes for Elpy (experience and SP were not accrued). 34) According to PTS, skills with type TARGET_ONE (skillType) cannot be used on NPCs. 35) Fixed Chapel Guard in Pagan (must not move around the PTS). 36) Fixed announcements, after reboot old ones were also loaded. (// reload). 37) Correction in Benom timer (it was 2.4 hours, should be 24). (Benom appears in the Rune Castle dungeon 24 hours before a siege war. The defending side can teleport to the dungeon and raid the monster until a siege begins.) 38) aCis update 393. #--------------------- # Correções Rev. 2.1: #--------------------- Fixed some NPCs in the Q620_FourGoblets quest (target is not visible). Fixed slip effect (after restart). Corpse Burst skill fixed (for nekra). Fixed a visual bug (2 adena). The stats of the shooting gallery have been fixed (probably x5 was overstated). SevenSignsSpawnManager some spawn fixes. SignsPriest bugs fixed. GamePacketHandler (Fixed Login Warning, there was a wrong config). Fixes for the quest Q501_ProofOfClanAlliance. Updating aCis 394. Server hangs (2 cases fixed, not the fact that we will stop there). Problems with Walker npc, mobs correctly return to the spawn point. Small fix of water (slightly better, but not cake yet). #--------------------- # Correções Rev. 2.2: #--------------------- Updated library mariadb-java-client-2.6.1 -> mariadb-java-client-2.7.0 Fix for mmocore (trying to avoid freezes). - anyone interested in a video about the problem is on the aCis forum. Updating aCis 395. Offline_trade Adjustments: Fixed bug in buying (missing 1 column in sql). Fixed a bug when the Russian title was not saved in the database. - Thanks to Sanya for the report. The .online command, like others, can be disabled and enabled (upon request). Nice fix, the GM char can be exited or re-entered during combat. (on request). Correction for the manor (the code is slightly optimized, and the seed.xml is corrected). Captcha for the bot (by popular demand). Many small errors and typos in the code have been fixed + the code has been optimized. Some parts of the code have been translated for java 14 (we are starting to translate the code a little) . #--------------------- # Correções Rev. 2.3: #--------------------- Due to the release of 396 aCis, I had to post 2.3 ... (the update is just huge). They just made complete nonsense as usual ... (just renamed everything). Update aCis 396 (do not ask my comments, there will be a lot of obscenities). Fix offline traders. (from 2.2). Separated ru \ en configs (stand by RU). Captcha for bots (fix for Linux systems), the old one for some reason did not work (only caused a freeze). #--------------------- # Correções Rev. 2.4: #--------------------- Replaced premium item with premium account. Corrections and errors after aCis update. Fixed a problem with zaken (previously thrown a normal player). Fixed some NPCs in castles (rune, godart, shoutguard). Added missing npc in junkgart and rune. Fixed issue with deleteMe for npc - Possessor of a Precious Soul (242). Fixed miss formula (works more correctly). Trade fix (if you hit the character, he will get up and it will be impossible to interact with him). #--------------------- # Correções Rev. 2.5: #--------------------- NPC belonging to the castle (seller of the clan of things in Rune). Fixed 2 RB (impossible to attack with melee). Correction for PTS (a player who sits on a trade should not get up after a hit), as well as a player who sits on a trade and received damage (can get up from a trade, but cannot sit down until the timer has passed). Aden cannot be sold to the store (via PTS). Errors with a premium account when creating a character. Completion of configs (missed earlier). Edit premium configs (floating point support). Premium account adjustments. Returned the fix back, if the skill has the tag <player hp = "60" /> after the trigger, it does not update the character stats, but the characteristics change. (also added messages about receiving the effect and when the effect leaves). Update aCis 397 Seven Signs adjustments. By PTS up to 40 lvl, teleports are free. #--------------------- # Correções Rev. 2.6: #--------------------- AttackPTS config (enables or disables PTS attack). Corrections for polearm (now does not hit its own). Free teleport up to lvl 40 (after aCis fixes, everything broke). Item ID // info (earlier item ID was not specified). Traveler weapons cannot be sharpened. (according to TCP). - Implemented a new parameter in the datapack is_enchantable (disable sharpening). Added spoil for: Needle Stakato Soldier - 21515, Needle Stakato Drone - 21517, Frenzy Stakato Drone - 21519. FuncEnchant optimization. Fixed a problem with skillMastery (the rollback itself worked, but was not visually displayed). Fixed a problem with Augmentation (namely with active skills, after using a skill, the weapon could not be removed before relog). Fixed bug in offline trade. aCis 398. And many small fixes and fixes after updates from aCis 398. #--------------------- # Correções Rev. 2.7: #--------------------- Missed points 398 and code edits. Turn on frint by default. (previously disabled). 2 new configs: - while the bug report is empty, we will add a little functionality to the assembly (not affecting the operation of the assembly itself). 1) Multiclass 2) Allow the player to add / change a subclass for all village masters - Minor edits of SevenSigns. (namely spawn mobs). Minor tweaks to Premium account. Fixed CursedWeapon (message about the time when you pick up a weapon), also fixed the message when you enter the game (by PTS). Now toggle skills are not canceled when picking up CursedWeapon (by PTS). Fix for Augmented weapons. Now buffs and changes weapons without issue. Save after restart .expon .expoff Items_delayed table. Correction for ships. (previously caused 100% load per percent). Fix for Frintezza (code optimized, superfluous removed). Fixed a bug where the character could die when using Body to Mind. Fixed a bug, according to PTS, a CA can be inserted into the augmented weapon. The character should not stop the movement when we are waiting for the bar xp, mp, cp. Fixed a problem with dressing augmented weapons. Optimization of RequestUnEquipItem. Changed items and prices at OlympiadManagerNpc now fully match PTS. Reworked ShortCut now Augmented weapons are displayed correctly. (according to PTS, Augmented weapons were not displayed earlier or not). Buff and regen on Olympus must be before the start of the battle (according to PTS). reworking soulCrystals.xml now the chances correspond to 100%, previously 1000%. By PTS, teleport to the arena takes 60 seconds, we have 30. (PTS). Admin command // show_cached CachedData system. (for saving .menu options). Buffer fix, now a single and a set of buffs also require a price (specified in xml). Removed ExpCommandEnabled config. Removed .expoff .expon commands (shifted to .menu); Removed serverpackets ShortCutDelete, use ShortCutInit instead (fixes issue with displaying items in shortcade). Added check for active skills checkCondition. Fixed skill Force Blaster - you need charges to use. Config max. sharpening at the Olympics. If enchant> values, then the stats are reset. Added icons for all items (xml). Fixed encoding for Russian configs. Brought back the shift + click for administrators and players. (for players there is an option to disable). Fixed issues with NPCs in orc and dwarf villages (were not tied to castles). New config LvlFreeTeleport (the level to which teleportation is free). Correction for summons (now after killing, they are returned back to the owner). #--------------------- # Correções Rev. 2.8: #--------------------- 1) according to PTS, the soulshots of pets should turn on (we wrote a message that there was no servant). 2) Fixed a problem with samons (no longer fit into the owner). 3) Added functionality aggr_info (for the player). (shift + click). 4) Fixed configs a bit (bugs removed). 5) Added GM exception to check for captcha (for bots). (on request). 6) In the water, when the character sits on the trade, hp did not decrease (appeared after the last trade fix). 7) Corrections for displaying% drop, some values were incorrectly displayed earlier. 😎 New config: Multiplier for items drop with GrandBoss (on request). 9) Fixed a problem with Epics, now, for example, in the AK zone, mobs just don't throw a curse on players> lvl 8 from them, now they need to be attacked. 10) Fixed free teleports by lvl (previously only the price disappeared). 11) Rollback of changes by mmocore. 12) If in the NO_LANDING zone (for example TOI), re-enter the game, the character should appear in the city (by PTS). 13) Fixed Frintezza (previously knocked out an error when spawning). 14) The player has the opportunity to make a TP from the epic RB zone (for example, buy) (according to PTS). 15) Do not restore the effects after returning to the sub class (according to PTS, earlier buffs were returned when they returned to the old sub). 16) Do not impose on the GM character - Death Penalty (on request). 17) Config: Allow teleport to the RB zone? (if you do global gk and tp). 18) Config: Auto learning skills up to a certain level. (only works if AutoLearnSkills is enabled). (on request). 19) Fixed problem with .menu (parameters were not displayed correctly). 20) Fixes for frinteza (skill call error) #--------------------- # Correções Rev. 2.9: #--------------------- 1) Place the EN folder in the config right after compilation. 2) .menu adjustments (disable unnecessary functions by default). 3) Removed the TUTORIAL_GUIDE award - sometimes it happened that it gave out 2-3 books. 4) Added new configs: CnameTemplate, TitleTemplate, PetNameTemplate. (for the possibility of implementing Russian nicknames, etc.). 5) Added a new Dual Box config (ban on PvP with 1 IP, participate in the Olympiad, PK, 2 windows). 6) Fixed a problem with the cast (the cast was lower than what it should be). 7) Fixed a problem with groups of mobs (earlier, when killing the main mob, minions disappeared). 😎 Fixed a problem with groups of mobs (previously, when killing a mob with 1 hit (magic), the rest of the mobs did not aggro). 9) Added missing spoil Death Flyer. 10) Added missing mob Gigantic Flyer. 11) Setting up configs (disable unnecessary by default). 12) Added missing statues for the quest The Other Side of Truth. 13) Fixed problem with Farm (TamedBeast) - (food was wasted by itself). 14) Aggr button for a regular player (in shift click). 15) Fixed NPCs hanging in the air (Orc and Elven Village). 16) Fixed lvl 4 clan (previously it was impossible to interact with the statue). 17) Chat filter. 18) Fixed that after buying things from an offline trader (when he had already left the game), when trying to log in to him, it was written that the account was in use. 19) Correction of Hate in RB to normal values. (previously there was a strange multiplication from magic). 20) With the .menu parameter disabled (stopping experience), when the character dies, the experience now goes away. 21) Minor code correction. 22) Fixed 2 flying NPCs (in the air). 23) Reworking of some skills with the UNLOCK type (work on PTS). 24) Fixed NPE error for epic bosses. 25) Fix the siege of the enemy clan, you can attack without holding down ctrl. 26) Fix the siege after capturing the castle, do not show the HP doors. 27) Fixed package RelationChanged. 28) Fixed domes (previously allies (clan, alliance, party) were buffed). Also after installing the dome (Day of Doom the character was flagged). 29) Fixed NPE calculatePath error. #--------------------- # Correções Rev. 3.0: #--------------------- - Fixed mobs on dino - now they can be maneuvered. (by PTS). - Fixed spawnlist redesigned Imperial Tomb. (by PTS). - Fixed spawnlist added Devil's Pass night mobs. (by PTS). - Fixed SevenSigns, or rather spawn mobs. (earlier it spawned on the contrary, if the light won, then there were light mobs). - Added missed THE_SEED_HAS_BEEN_SOWN message for manor seeds. (by PTS). - Fixed an issue with Lilith (second boss) not letting the winning side go. - Added skipped manor to stakato nest. - Fixed a problem with AREA skills (for example Sleeping Cloud, through CTRL it was possible to throw at non-flagged players and clans). - Removed a fix from version 2.9, which broke the behavior of the player at the Olympics (you could not use SELF buffs). - Fixed issue https://acis.i-live.eu/bugs-report/summon-cp-potion/ - Fixed issue https://acis.i-live.eu/bugs-report/wyvern-summon/ - Fixed problem https://acis.i-live.eu/bugs-report/selected-target-behavior/ - Fixed problem https://rusacis.pp.ua/support-tickets/duehl.81/ - Fixed problem https: / /rusacis.pp.ua/support-tickets/kolizej.85/ - Fixed problem https://rusacis.pp.ua/support-tickets/pri-tp-otmenjajutsja-aury.84/ - Fixed problemhttps://rusacis.pp.ua/support-tickets/aura-of-hate-aggression-in-pvp.86/ - Fixed problem https://rusacis.pp.ua/support-tickets/ne-pravilno-rabotaet -gehenna.79 / - Fixed problem https://rusacis.pp.ua/support-tickets/zombi-oxranniki-na-vxode-v-pagan.76/ - Fixed the problem of respawning of all RBs. (minutes are also taken into account, now only hours). - Fixed epic respawn problem. (minutes are also taken into account, now only hours). - Fixed strider movement speed. (previously cut less than the base one). - Fixed templates for names (default). - SummonFriend must teleport characters to the point (by PTS). - Removed double spawn from catacombs (Forbidden Path). - Fixed 0c respawn for group mobs on the 2nd floor in MOS. - Update aCis 399. - Fixed problem with duplicate manor. (error in the GDD lock). - Added donate manager. #--------------------- # Correções Rev. 3.1: #--------------------- - If you die in the arena (we stand in the arena, not in the city). (by PTS). - We prohibit buffing and healing in the enemy arena (only through ctrl via PTS). - Fixed the problem of the appearance of minions in group mobs (if you kill them, they no longer appear until you kill the leader). - Fixed problem with 2 inscriptions at Donat manager. - Fixed NPE errors aggr_info. - Added a config for disabling messages from dooms (there were many complaints that they were flooding). - Fixed a problem with the sticking of the target at the administrator when the player is summoned (now clears the target on the call). - Fixes for Donat shop, now retains the color of nickname and title after relog. - Config Limit sharpening for the Olympiad - disabled by default. - Fixed the ability to change the nickname of the donate manager by 1 character (previously it was 3). - Implemented functions for the castle (TP, buff). - https://rusacis.pp.ua/support-tickets/funkcii-zamka.91/ - PTS software a player who is cursed with RB (Raid Curse) can use TP and res. - https://rusacis.pp.ua/support-tickets/zapret-na-ispolzovanie-svitkov-soe-pri-debafe-rejd-kurs.75/ - Small adjustments to the respawn of RB and Epics. (Earlier RB could miss its respawn, now it spawns properly). - Fixed AI frinteses, previously the player received invulnerability before relog, now this is not. - Fixed the chance to break the SA. - Fixed file full_install.sql - Thanks aslan. - Mana Potion banks now restore 1500 MP (by TCP). - Fixed the Sweeper skill, there was no animation earlier (the character was just standing). - The sharpening system has been reworked, now it is possible to specify the chance yourself. - Fixed issue with Ant Queen Nurse (not healing AK). - Fixed geo-movement (we fix the load on the CPU by 100% (due to mobs or NPCs that are stuck)). - Fixed nipple problem (after update from aCis). - Fixed problem with element damage (after update from aCis). - Fix many small bugs. - Basically, the emphasis was on correcting errors, some I did not write in the fix list (there is no point).  
      Considerações: O projeto funciona somente com Java JDK 14
      Link GeoData L2J
      Link Geodata L2OFF
       
      Se for iniciar com a geodata L2OFF, você precisará excluir vários quadrados no arquivo "geoengine.properties". O gameserver mostrará o que está faltando.
    • By SGERfjs
      https://www.mediafire.com/file/g6u6kr7h2fw75fz/EventNpc.zip/file

      Effect: EventNPCsEffects.e_u847_berethopen_light
      Staticmeshe: EventNPCsEffectsSM.EventZone01
      add effects guide: 
       
      add staticmeshes guide: 
       
    • By SGERfjs
      bom em C4
      Tem alguns pequenos bugs xD
      Eles não trazem as portas dos Halls (Eles podem ser facilmente adicionados.).
      Para os geodados você deve modificar o existente ou gerar um novo.
      https://www.mediafire.com/file/rzk2o0ptee80332/new_giran.zip/file


      o bug

      Modificado com a versão do Prelude de Unreal
    • By SGERfjs
      Letras sem sombra.
      Funciona em C4

      InterludeFont.zip
    • By SGERfjs
      Link: https://www.mediafire.com/file/lq5hyt0bo2qo2eh/SixNewsSkills.zip/file
       
      As estatísticas que possui são aleatórias, a única coisa que eles deveriam respeitar é o skillType; é de aCis.






       
    • By Ivan Pires
      Introdução
      O sistema ICPNetworks V3 não é somente um site, ele é um painel administrativo onde tudo é gerenciado através dele.
      Nesse novo sistema, vocês encontrarão uma variedade imensa de funções. Entre elas está a mais cobiçada, a entrega automática de doações! (APIs atualizadas!!)
      O sistema conta com 4 formas de pagamentos, sendo 3 delas automáticas:
      Depósito/transferencia para sua conta bancária (Entrega manual) PagSeguro (PIX incluído e entrega automática) MercadoPago (PIX incluído e entrega automática) PayPal (Entrega automática) Outra ferramenta muito interessante é o sistema de templates, com ele você pode rodar qualquer site de lineage 2 dentro do sistema ICPNetworks V3. Você se lembra daquele site antiiiiigo que você sempre quis recolocar online e ele está com a programação desatualizada/insegura? Agora você pode colocar ele online novamente com o sistema ICPNetworks V3! Alem disso, qualquer pessoa poderá adicionar ou editar qualquer template de forma simples e fácil, sabendo apenas o basico de HTML, CSS e JavaScript. VOCÊ NÃO PRECISA SABER PROGRAMAÇÂO!!!
        Compatibilidade
      O sistema foi criado para ser compatível com a grande maioria dos servidores de lineage 2 da atualidade.
      O sistema foi testado nas seguintes crônicas e projetos:
      Interlude: Frozen aCis (versão nova e antiga) Mobius Dream V2 (Precisa criar a coluna accesslevel na tabela characters, com default = '0') Lucera L2OFF AdvExt64 Classic: L2-scripts (Versão Antharas precisa de mais testes) L2jOrg Mobius Lucera Gracia Final: L2jServer High Five: L2-scripts Revolt-Team (Versão do Alex (CCCP)) L2jPS Sunrise   Tutoriais
      Instalação
      Configuração
      Apresentação
      Templates
        Arquivos
      Requisitos para usar o sistema:
      Java (L2j): MySQL MariaDB 10+ PHP 7.4.19+ (com o Driver PDO MySQL instalado) C++ (L2OFF): SQL Server 2012+ PHP 7.4.19+ (com o Driver PDO Sql Serv instalado) Download

      Senha: ByIvanPires
        Créditos
      Antes de tudo, eu gostaria de agradecer ao fórum L2jBrasil e os administradores @Kelvin e @Grundor pelo carinho de ter criado uma área exclusiva só para os conteúdos da ICPNetworks, fiquei muito feliz e lisonjeado. 💗
      Agradeço a todos que ajudaram de todas as formas para que esse projeto pudesse ser concluído.
      Agradeço também a L2jCenter por sempre estar patrocinando os meus projetos.
      Os templates disponibilizados nesse sistema são de autoria dos meus grandes amigos e parceiros @HugoFelipe, @lucasdanilo e meus.
      Não vou nomear todo mundo para não correr o risco de esquecer o nome de ninguém. Mas agradeço a todos de coração! Sem a colaboração de todos, não teríamos chegado até aqui.
      Um forte abraço a todos os membros da L2jBrasil e até a próxima!
       


      ICPNetworks_V3.rar
    • By Haber
      START: 04.04.2021
      WEBSITE: https://top.l2jbrasil.com/index.php?a=in&u=l2temida
       
      I would like to invite everyone to play together on the L2Temida server. The server uses English, so we are open to players from all over the world.
      We have many years of experience related to the game Lineage 2 Interlude, which we dedicate to the server, where you will spend your free time pleasently. We listen to each individual, we consider each proposal, we try to fix all errors related to the game immediately after the notification. We are a young team that strives to make the game give you a lot of joy and let us fulfill ourselves in realizing the goals we have set ourselves.
      Video promoting server L2Temida:
      YOUTUBE
      Rates:
      Experience (EXP) - 8x
      Skill Points (SP) - 8x
      Adena - 6x
      Drop Items - 8x
      Spoil - 9x
      Weight Limit - 3x
      Drop Quest - 6x
      Informations:
      The best protection against Bots (The best servers use it !!)
      Skills, Classes, Drop and Spawn System - PTS !
      Temida Shop is avaible where we can buy Soulshots, mana potions and many other interesting things. We’ll find Mammon there too.
      Buffer (for players and pets) - Yes
      Maximum Buffs Slots - 26 + 4
      Duration of the Buffs, Dances and Songs - 1 hours
      Olympiads Max Enchant - 10
      Sub-Class Quest - Not
      Class Master - Yes (in Giran)
      Offline mode Shop - Yes (.offline)
      Auto Learn Skills - Yes
      Champions System - Yes
      Wedding System - Yes
      Global Gatekeeper - Yes
      Scrools, Life Stones, Divine Books and Giants Codex is Stackable.
      Weight Limit - x3
      LvL Differences in Party - 19
      LvL Differences in RB - 8
      Regen HP, P Def., M Def. and Attack increased on RB x2
      Full C-Grade in Luxury Shop
      Full B-Grade in B Grade Master (Giran)
      Working siege Clan Hall (Fortress of Resistance, Bandit Stronghold, Devastated Castle, Wild Beast Reserve, Rainbow Springs Chateau and Fortress of the Dead).
      1 Box are allowed ( Main + 1 Box ).
      New Player Bonus: Each new player gets Rune of Experience Points 30% and Rune of SP 30% for 5h.
      Coin’s of Luck is the additional currency in game. They can be obtained through Voting and Donation.
      Book and Amulets drop has been blocked.
      Greater CP Potion, CP Potion and Quick HP has 2 sec reuse.
      All commands available here: (.help)
      All configurations and features that were not reported here are Retail, ie equal to the official Lineage II or were considered irrelevant.
      Enchants:
      Safe Enchant - 3
      Max Enchant - 16
      Normal Scroll chance - 60%
      Blessed Scroll chance - 60% and not crystallizes
      Addons:
      Achievements System.
      Rune System.
      Special RB - Granit.
      Special Mob - Dragonfly.
      Radio in Client.
      Costumes.
      Map: CT, FOG, IT, MOS, Catacombs, Necropolis, Devil Isle, Ant Nest.
      Anti Lag System - It improves performance especially on weak computers.
      Custom Interface.
      Events:
      TvT - 11:00, 18:00, 21:00, lvl: 1-81, Reward: 20 FA, 40 CoL. Top reward list - Top-Grade Life Stone - Level 76
      CtF - 11:00, 18:00, 21:00, lvl: 1-81, Reward: 40 CoL, High-Grade Life Stone - Level 76
      DM -  11:00, 18:00, 21:00, lvl: 1-81, Reward: 40 CoL, High-Grade Life Stone - Level 76
      TvT, CtF, DM are interchangeable
      Event Finder - 17:00, 22:00, lvl: 76+, Reward: 200 FA
      Collect Medals and Glittering Medals.
      Kamaloka by L2Temida
      More information can be found on our Forum or Website
      Join Today !
       
       
    • By SGERfjs
      GoogleTranslate-chan say:
      Guia simples para adicionar uma imagem no início do jogo.
      Como isso:

      Resolução 3004x2152 Não sei até onde o jogo pode aguentar, mas vamos fazer uma textura de 4096x4096.
      Precisaremos de qualquer versão do PhotoShop para fazer nossa textura 4096x4096.
      Primeiro eles procuram sua imagem, vou usar este https://www.wallpaperbetter.com/es/hd-wallpaper-gbrse
      Essa textura tem no máximo 7680x4320 pixels, eu reduzi para a metade e fiquei com 3004x2152.
      Eles vão ao Photoshop e criam uma nova camada de 4096x4096 de resolução 72 e dentro dessa camada eles colariam sua imagem, eles teriam algo assim:

      Eles salvam a imagem no formato targa, 32bits com RLE.
      Com UE2Runtime criamos nosso .utx.
      Importamos a textura sem MIPs
      Agora temos duas opções, comprimir a textura com DXT1 ou não.
      Com o DXT1 perderemos qualidade ao ativar a opção LOWER DETAIL.
      Se você não compactá-lo com DXT1, ele sempre será visto em alta definição.
      Eles salvam seu .utx.
      Agora iremos ao nosso compilador para interface.u
      Tendo o compilador, teremos a pasta de interface, system e nwindow.
      Dentro da pasta de interface, na subpasta "Classes" criamos um arquivo chamado "LoginMenuWnd.uc" .uc será o formato do arquivo.
      Dentro, eles irão colar o seguinte:
      class LoginMenuWnd extends UICommonAPI; function OnLoad() { RegisterState("LoginMenuWnd","LoginState"); } defaultproperties { } Vamos para a pasta do sistema e compilar com UIScript.exe, o arquivo interface.u será criado, que é colado no system interlude.
      Então vamos para xdateditor e fazemos:
      selecione a versão, interlúdio neste caso, e então o .xdat.
      No motor de busca que traz escreva algo aleatório para que a lista seja limpa

      Clique com o botão direito e criamos uma nova janela / elemento vazio.

      Uma nova pasta é criada, com a opção de janela, que deveria dizer:  null[Window]
      Em seguida, preencha as seguintes informações em DefaultProperty e Window


      Eles vão ao mecanismo de pesquisa e escrevem "Login" para que apareça apenas o elemento. Há uma subopção dizendo "children".
      Eles clicam com o botão direito e fazem o seguinte:

      Agora eles vão repetir o mesmo procedimento com as seguintes informações:

      Agora vem o importante, por assim dizer:

      No file, adicione o caminho de sua textura.
      Em type, eles colocaram Stretch
      Na layer em Normal
      Em uSize e vSize eles terão que colocar o tamanho de sua imagem, no meu caso, o 4096x4096 seria 3004x2152
      Agora com CTRL + S eles salvariam a configuração.
      Abra o jogo e aproveite o que quer que saia dele. XD
      No meu caso

      Interface.u https://mega.nz/file/HJxmUYyI#d0G_FyWDfum3a-jc94Mj8cviXdA6wVzs9LL34OWz9ms
      xdateditor: https://disk.yandex.ru/d/W8JN8-KhCQGEYg password: EmuDev
      unreal2runtime: https://www.moddb.com/downloads/mirror/20765/125/c07c9809f07bdccb8bbee6ef144b0ee0/?referer=https%3A%2F%2Fwww.google.com%2F
    • By breninhoow
      Já tentei de todas as formas criar Utx e não consigo, eu queria abrir um serve para jogar com amigos nome do serve L2 Detroit alguém me ajuda por favor ?!
  • Posts

L2JStudio - A new way for Interlude.


Hl4p3x

Recommended Posts



To testando o projeto a quase 2h bem dizer, e pelo visto, ta melhor que a acis, as quests estão tudo funcionando, e o core não é imundo... Acho que ganhou da acis pessoal.. Mas irei testar mais coisas, e tentar descobrir se há bugs, mas seria ótimo se mais pessoas ajuda-se, pq a pack ta parecendo realmente boa. Tem ate npc buff do  tryskell do macro ja implementado.

A source tava tendo problema pra compilar,  estava faltando a pasta lib na pasta java. Eu compilei, quem quiser toma ai.

Source

Pack + backup

Banco de dados ta l2jdb sem senha.

Irei continuar testando, to gostando desse projeto.

Edited by Christian-SDM
  • Like 3
Link to comment
Share on other sites

6 horas atrás, Christian-SDM disse:

 

Cedo demais para falar : melhor que a aCis

 

Mas, Hl4p3x, por que L2JMobius? O que você viu de interessante neste projeto? Está java 14, sim, mas o código está codado para ter performance nessa versão de JAVA? Ou você deu update nele ? Algumas funções de java's mais antigos não tem mais no 14 por que foi modificado, você fez essas alterações ou a pack veio assim?

 

Me explique um pouco o que você viu demais nessa plataforma, eu olhando, e analisando ainda não vi nada demais para usá-lo como BASE. Mas sem dúvidas, você como desenvolvedor da mesma, vai dar o que falar, será um excelente projeto.

Ah, e pra variar né, a pergunta de sempre, por que interlude? Por que não outra chronica qualquer? Por que não algo novo e sim o velho interlude que já existem inúmeros projetos tanto free quanto pagos ? 

Agradeço se puder responder minhas questões, boa sorte com o projeto! ❤️

  • Like 4

Servidor High Five Custom PvP

https://www.la2prime.com

High Five 1000x - Tournament, Dressme full, Olympiad, Balance System, Dinamic PvP, Talisman, Bracelete, Sistemas Goddes of Destruction

Link to comment
Share on other sites

9 horas atrás, Christian-SDM disse:

To testando o projeto a quase 2h bem dizer, e pelo visto, ta melhor que a acis, as quests estão tudo funcionando, e o core não é imundo... Acho que ganhou da acis pessoal.. Mas irei testar mais coisas, e tentar descobrir se há bugs, mas seria ótimo se mais pessoas ajuda-se, pq a pack ta parecendo realmente boa. Tem ate npc buff do  tryskell do macro ja implementado.

A source tava tendo problema pra compilar,  estava faltando a pasta lib na pasta java. Eu compilei, quem quiser toma ai.

Source

Pack + backup

Banco de dados ta l2jdb sem senha.

Irei continuar testando, to gostando desse projeto.

Boa !! Porem estou com erro no hexid , como faço para recriar o hexid ? Nao encontrei nenhum arquivo para tentar recriar ;x  Erro ; Damn! Registration failed! Reason: wrong hexid

Razak

Link to comment
Share on other sites

2 horas atrás, Lire disse:

Cedo demais para falar : melhor que a aCis

 

Mas, Hl4p3x, por que L2JMobius? O que você viu de interessante neste projeto? Está java 14, sim, mas o código está codado para ter performance nessa versão de JAVA? Ou você deu update nele ? Algumas funções de java's mais antigos não tem mais no 14 por que foi modificado, você fez essas alterações ou a pack veio assim?

 

Me explique um pouco o que você viu demais nessa plataforma, eu olhando, e analisando ainda não vi nada demais para usá-lo como BASE. Mas sem dúvidas, você como desenvolvedor da mesma, vai dar o que falar, será um excelente projeto.

Ah, e pra variar né, a pergunta de sempre, por que interlude? Por que não outra chronica qualquer? Por que não algo novo e sim o velho interlude que já existem inúmeros projetos tanto free quanto pagos ? 

Agradeço se puder responder minhas questões, boa sorte com o projeto! ❤️

Inicialmente rodei muito para achar algo decente na versão Interlude. Procurei muito para trabalhar em cima.
Até que peguei a JMobius para testar e vi que realmente tem um bom trabalho na source do projeto.
Java 14 (Não é full JDK14 ainda), todas as quests funcionais, as que tiver bug, facilmente será fixada, todas as AI e boss funcionando corretamente, spawns, stats e skills vamos trabalhar o CORE para fazer o correto balanceamento de classes sem comprometer o trabalho correto dos skils (Power/Chance). Acis é uma boa base, sem dúvida, mas o desenvolvedor, ao meu ver, já está enrolando para finalizar o projeto e sempre fica mudando o nome dos arquivos e movendo para outro lugar, dificultando o update do mesmo e entendimento de quem é leigo no assunto. Nada contra a aCis, mas nada muito a favor. Quanto ao "Por quê Interlude?" Logo mais entro com um projeto H5 também com base em L2jServer "latest" e com oq falta implementado (Nevits, PC, Quests, Insntancias).

Bom, acho que é isso! A source ta ai e o projeto logo mais começará a ser atualizado. 😉

Agora, razak1995 disse:

Boa !! Porem estou com erro no hexid , como faço para recriar o hexid ? Nao encontrei nenhum arquivo para tentar recriar ;x  Erro ; Damn! Registration failed! Reason: wrong hexid

Acabei de fixar esse lapso, amigão!

CONFERE AQUI

Edited by Hl4p3x
  • Like 2
  • I love it 1

PYKlyRG.jpg&key=822e505460230a53f5b13227467836b3217127e6dec74c5c3b3701e6d02541d8

Lineage 2 Interlude & High Five
L2STUDIO, seu servidor está aqui!

Link to comment
Share on other sites

Update 09:
 

DOWNLOAD DO COMPILADO

Custom Daily Reward from aCis to L2jServer/Mobius e...

- Implementado no sistema de ganho diário para players configurações extras.
- Novo backup e sql para o sistema.
- Adicionado as SQL do projeto e um sistema fácil de instalação para pessoas que não tem muita experiencia.
  • Like 2

PYKlyRG.jpg&key=822e505460230a53f5b13227467836b3217127e6dec74c5c3b3701e6d02541d8

Lineage 2 Interlude & High Five
L2STUDIO, seu servidor está aqui!

Link to comment
Share on other sites

6 horas atrás, Lire disse:

Cedo demais para falar : melhor que a aCis

 

Mas, Hl4p3x, por que L2JMobius? O que você viu de interessante neste projeto? Está java 14, sim, mas o código está codado para ter performance nessa versão de JAVA? Ou você deu update nele ? Algumas funções de java's mais antigos não tem mais no 14 por que foi modificado, você fez essas alterações ou a pack veio assim?

 

Me explique um pouco o que você viu demais nessa plataforma, eu olhando, e analisando ainda não vi nada demais para usá-lo como BASE. Mas sem dúvidas, você como desenvolvedor da mesma, vai dar o que falar, será um excelente projeto.

Ah, e pra variar né, a pergunta de sempre, por que interlude? Por que não outra chronica qualquer? Por que não algo novo e sim o velho interlude que já existem inúmeros projetos tanto free quanto pagos ? 

Agradeço se puder responder minhas questões, boa sorte com o projeto! ❤️

Não dei certeza de se melhor que a acis, e sim que pode ta melhor.Não falei corretamente, O projeto ta em testes, mas em poucas horas que estou fazendo testes, digo que  estou gostando muito mais que a acis, só pelas quests ta muito a frente da acis, e te todos grand bosses na pack, todos mesmo, Acis ta longe disso, e a revisao não tem  o core poluido igual  a l2jfrozen, o core é mais limpo, mas acis ta um pouco mais leve, mas é porque falta muita coisa na acis pra se implementada, agora o jeito é testar tudo e reportar tudo de errado que encontrar.

Edited by Christian-SDM
Link to comment
Share on other sites

7 minutos atrás, Christian-SDM disse:

Fui atacar orfen lv 78 ele tava azul, ate ai normal. fui atacar ele, e fiquei pedrificado, mas gerou esse erro ai

Nenhuma descrição de foto disponível.

Testei aqui com char GM, porem com status (Weapon, Armor..) normais sem enchant 65535 e ele ta normal. Mas vou verificar!

PYKlyRG.jpg&key=822e505460230a53f5b13227467836b3217127e6dec74c5c3b3701e6d02541d8

Lineage 2 Interlude & High Five
L2STUDIO, seu servidor está aqui!

Link to comment
Share on other sites

oi Eu sei que é muito mais trabalho. mas é de opinião que, se eles puderem fazer um tutorial em vídeo sobre como instalar o pacote de dados e como configurar algo mínimo, como taxas, para pessoas como eu, por exemplo, que não têm muito conhecimento

 

Edited by canibal10
Link to comment
Share on other sites

23 hours ago, Lire said:

Cedo demais para falar : melhor que a aCis

 

Mas, Hl4p3x, por que L2JMobius? O que você viu de interessante neste projeto? Está java 14, sim, mas o código está codado para ter performance nessa versão de JAVA? Ou você deu update nele ? Algumas funções de java's mais antigos não tem mais no 14 por que foi modificado, você fez essas alterações ou a pack veio assim?

 

Me explique um pouco o que você viu demais nessa plataforma, eu olhando, e analisando ainda não vi nada demais para usá-lo como BASE. Mas sem dúvidas, você como desenvolvedor da mesma, vai dar o que falar, será um excelente projeto.

Ah, e pra variar né, a pergunta de sempre, por que interlude? Por que não outra chronica qualquer? Por que não algo novo e sim o velho interlude que já existem inúmeros projetos tanto free quanto pagos ? 

Agradeço se puder responder minhas questões, boa sorte com o projeto! ❤️

A voice of reason and wisdom.

aCis need rework of geoengine, movement and new spawn manager - only datapack is strong part of the project

  • Like 1
Link to comment
Share on other sites

Haha, mobius interlude foi criada baseado na frozen, mudaram toda a engine se baseando na Acis, até renomeou todo o projeto com classes iguais pra facilitar o recebimento de fixes do Triyskel ☺️, ai falar que é melhor que Acis é sacanagem. ( Acis só não é terminada, porque  Tryskel não quer, ele enrola de proposito (eu acho).

Ao meu ver, é mais interessante iniciar um projeto na Acis e adicionar o que falta para ficar uma rev show (Não mods, mas sim quests, correções entre outras coisas)

- Iniciar um projeto baseado na Mobius que baseia-se na frozen pra iniciar e na Acis para correções adicionais?

Mobius é apenas mais organizado o core, porem e a mesma coisa de vc ter uma casa simples e mantê-la sempre arrumada, a impressão que se dá e outra.

Por mais que a mobius seja organizada etc e tudo mais, a Acis tem um fino trato no geral.

 

Otima iniciativa, só não entenda minhas palavras como crítica!

  • Like 1
Link to comment
Share on other sites

6 horas atrás, SkyDoidao disse:

Haha, mobius interlude foi criada baseado na frozen, mudaram toda a engine se baseando na Acis, até renomeou todo o projeto com classes iguais pra facilitar o recebimento de fixes do Triyskel ☺️, ai falar que é melhor que Acis é sacanagem. ( Acis só não é terminada, porque  Tryskel não quer, ele enrola de proposito (eu acho).

Ao meu ver, é mais interessante iniciar um projeto na Acis e adicionar o que falta para ficar uma rev show (Não mods, mas sim quests, correções entre outras coisas)

- Iniciar um projeto baseado na Mobius que baseia-se na frozen pra iniciar e na Acis para correções adicionais?

Mobius é apenas mais organizado o core, porem e a mesma coisa de vc ter uma casa simples e mantê-la sempre arrumada, a impressão que se dá e outra.

Por mais que a mobius seja organizada etc e tudo mais, a Acis tem um fino trato no geral.

 

Otima iniciativa, só não entenda minhas palavras como crítica!

Tranquilo! Está ai para usar quem quiser. 😉

  • Like 1
  • Thanks 2

PYKlyRG.jpg&key=822e505460230a53f5b13227467836b3217127e6dec74c5c3b3701e6d02541d8

Lineage 2 Interlude & High Five
L2STUDIO, seu servidor está aqui!

Link to comment
Share on other sites

Em 01/05/2020 at 11:41, Hl4p3x disse:

Tranquilo! Está ai para usar quem quiser. 😉

Isso é verdade, mas os argumentos do rapaz, estão certos. :s

Mas claro, o tempo é seu e você dedica ele como achar mais conveniente

  • Like 1

Servidor High Five Custom PvP

https://www.la2prime.com

High Five 1000x - Tournament, Dressme full, Olympiad, Balance System, Dinamic PvP, Talisman, Bracelete, Sistemas Goddes of Destruction

Link to comment
Share on other sites

  • Kelvin pinned this topic

Estou tendo esse problema, instalei, java 14 instalado, mysql 8.0 tambem ok, instalou  o banco de dados certinho, fica subindo erros das tabelas..hgthtrh.png.e857f5d93414a22943d0d8b58a92341d.png

Positividade Sempre.

Link to comment
Share on other sites

Em 29/04/2020 at 12:20, Hl4p3x disse:

Acis é uma boa base, sem dúvida, mas o desenvolvedor, ao meu ver, já está enrolando para finalizar o projeto e sempre fica mudando o nome dos arquivos e movendo para outro lugar, dificultando o update do mesmo e entendimento de quem é leigo no assunto. Nada contra a aCis, mas nada muito a favor. Quanto ao "Por quê Interlude?" Logo mais entro com um projeto H5 também com base em L2jServer "latest" e com oq falta implementado (Nevits, PC, Quests, Insntancias).
Bom, acho que é isso! A source ta ai e o projeto logo mais começará a ser atualizado. 😉

Acabei de fixar esse lapso, amigão!

CONFERE AQUI

Concordo plenamente.

Cada projeto criado tem o seu valor! os desenvolvedores capricham nas correções que o projeto precisa para deixa-lo 100%, esse é o foco deles.  uns são mais completos em umas partes e outros em outras partes, independente se o seu é uma junção de JaCis, Jfrozen, Jserver ou outras, o importante é estar estável para que possamos ter um jogo limpo  e sem bugs! esse será o diferencial de todos os outros, além disso todos vão querer usar, espero que não desista do seu projeto man, eu vou testar e farei o possível para colaborar.

a primeira coisa que vou checar é se ela já tem os fixes de duplicação! mais testarei as principais quest's. logo mais os bosses por completo, quando tiver tempo é claro.

 

Edited by RootZerO
  • Like 2
  • Thanks 1

P46KGqJ_d.webp?maxwidth=760&fidelity=grand

Link to comment
Share on other sites

Uma pequena correção no game\data\scripts\ai\bosses

baium.ai

 
/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package ai.bosses;

import static org.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
import static org.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Logger;

import org.l2jserver.Config;
import org.l2jserver.commons.concurrent.ThreadPool;
import org.l2jserver.commons.util.Rnd;
import org.l2jserver.gameserver.datatables.SkillTable;
import org.l2jserver.gameserver.geoengine.GeoEngine;
import org.l2jserver.gameserver.instancemanager.GrandBossManager;
import org.l2jserver.gameserver.model.Effect;
import org.l2jserver.gameserver.model.Skill;
import org.l2jserver.gameserver.model.StatSet;
import org.l2jserver.gameserver.model.WorldObject;
import org.l2jserver.gameserver.model.actor.Creature;
import org.l2jserver.gameserver.model.actor.Summon;
import org.l2jserver.gameserver.model.actor.instance.GrandBossInstance;
import org.l2jserver.gameserver.model.actor.instance.MonsterInstance;
import org.l2jserver.gameserver.model.actor.instance.NpcInstance;
import org.l2jserver.gameserver.model.actor.instance.PlayerInstance;
import org.l2jserver.gameserver.model.entity.Announcements;
import org.l2jserver.gameserver.model.quest.Quest;
import org.l2jserver.gameserver.model.quest.QuestTimer;
import org.l2jserver.gameserver.model.zone.type.BossZone;
import org.l2jserver.gameserver.network.serverpackets.Earthquake;
import org.l2jserver.gameserver.network.serverpackets.MoveToPawn;
import org.l2jserver.gameserver.network.serverpackets.PlaySound;
import org.l2jserver.gameserver.network.serverpackets.SocialAction;
import org.l2jserver.gameserver.util.Util;

/**
 * Baium AI Note1: if the server gets rebooted while players are still fighting Baium, there is no lock, but players also lose their ability to wake baium up. However, should another person enter the room and wake him up, the players who had stayed inside may join the raid. This can be helpful for
 * players who became victims of a reboot (they only need 1 new player to enter and wake up baium) and is not too exploitable since any player wishing to exploit it would have to suffer 5 days of being parked in an empty room. Note2: Neither version of Baium should be a permanent spawn. This script
 * is fully capable of spawning the statue-version when the lock expires and switching it to the mob version promptly. Additional notes ( source http://aleenaresron.blogspot.com/2006_08_01_archive.html ): * Baium only first respawns five days after his last death. And from those five days he will
 * respawn within 1-8 hours of his last death. So, you have to know his last time of death. * If by some freak chance you are the only one in Baium's chamber and NO ONE comes in [ha, ha] you or someone else will have to wake Baium. There is a good chance that Baium will automatically kill whoever
 * wakes him. There are some people that have been able to wake him and not die, however if you've already gone through the trouble of getting the bloody fabric and camped him out and researched his spawn time, are you willing to take that chance that you'll wake him and not be able to finish your
 * quest? Doubtful. [ this powerful attack vs the player who wakes him up is NOT yet implemented here] * once someone starts attacking Baium no one else can port into the chamber where he is. Unlike with the other raid bosses, you can just show up at any time as long as you are there when they die.
 * Not true with Baium. Once he gets attacked, the port to Baium closes. byebye, see you in 5 days. If nobody attacks baium for 30 minutes, he auto-despawns and unlocks the vortex
 * @author Fulminus version 0.1
 */
public class Baium extends Quest
{
	protected static final Logger LOGGER = Logger.getLogger(Baium.class.getName());
	
	private Creature _target;
	private Skill _skill;
	private static final int STONE_BAIUM = 29025;
	private static final int ANGELIC_VORTEX = 31862;
	private static final int LIVE_BAIUM = 29020;
	private static final int ARCHANGEL = 29021;
	
	// Baium status tracking,
	private static final byte ASLEEP = 0; // baium is in the stone version, waiting to be woken up. Entry is unlocked,
	private static final byte AWAKE = 1; // baium is awake and fighting. Entry is locked.
	private static final byte DEAD = 2; // baium has been killed and has not yet spawned. Entry is locked,
	
	// Archangel locations.
	// @formatter:off
	private static final int[][] ANGEL_LOCATION =
	{
		{114239, 17168, 10080, 63544},
		{115780, 15564, 10080, 13620},
		{114880, 16236, 10080, 5400},
		{115168, 17200, 10080, 0},
		{115792, 16608, 10080, 0},
	};
	// @formatter:on
	
	private long _lastAttackVsBaiumTime = 0;
	private final List<NpcInstance> _minions = new CopyOnWriteArrayList<>();
	protected BossZone _zone;
	
	public Baium()
	{
		super(-1, "ai/bosses");
		
		final int[] mob =
		{
			LIVE_BAIUM
		};
		registerMobs(mob);
		
		// Quest NPC starter initialization
		addStartNpc(STONE_BAIUM);
		addStartNpc(ANGELIC_VORTEX);
		addTalkId(STONE_BAIUM);
		addTalkId(ANGELIC_VORTEX);
		_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
		final StatSet info = GrandBossManager.getInstance().getStatSet(LIVE_BAIUM);
		final Integer status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);
		if (status == DEAD)
		{
			// load the unlock date and time for baium from DB
			final long temp = (info.getLong("respawn_time") - System.currentTimeMillis());
			if (temp > 0)
			{
				// the unlock time has not yet expired. Mark Baium as currently locked (dead). Setup a timer
				// to fire at the correct time (calculate the time between now and the unlock time,
				// setup a timer to fire after that many msec)
				startQuestTimer("baium_unlock", temp, null, null);
			}
			else
			{
				// the time has already expired while the server was offline. Delete the saved time and
				// immediately spawn the stone-baium. Also the state need not be changed from ASLEEP
				addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
				if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
				{
					Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
				}
				GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP);
			}
		}
		else if (status == AWAKE)
		{
			final int loc_x = info.getInt("loc_x");
			final int loc_y = info.getInt("loc_y");
			final int loc_z = info.getInt("loc_z");
			final int heading = info.getInt("heading");
			final int hp = info.getInt("currentHP");
			final int mp = info.getInt("currentMP");
			final GrandBossInstance baium = (GrandBossInstance) addSpawn(LIVE_BAIUM, loc_x, loc_y, loc_z, heading, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss " + baium.getName() + " spawned in world.");
			}
			GrandBossManager.getInstance().addBoss(baium);
			ThreadPool.schedule(() ->
			{
				try
				{
					baium.setCurrentHpMp(hp, mp);
					baium.setInvul(true);
					// _baium.setImobilised(true);
					baium.broadcastPacket(new SocialAction(baium.getObjectId(), 2));
					startQuestTimer("baium_wakeup", 15000, baium, null);
				}
				catch (Exception e)
				{
					LOGGER.warning(e.getMessage());
				}
			}, 100L);
		}
		else
		{
			addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
			}
		}
	}
	
	@Override
	public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
	{
		if (event.equals("baium_unlock"))
		{
			GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP);
			addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
			}
		}
		else if (event.equals("skill_range") && (npc != null))
		{
			callSkillAI(npc);
		}
		else if (event.equals("clean_player"))
		{
			_target = getRandomTarget(npc);
		}
		else if (event.equals("baium_wakeup") && (npc != null))
		{
			if (npc.getNpcId() == LIVE_BAIUM)
			{
				npc.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
				npc.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(), 40, 5));
				// start monitoring baium's inactivity
				_lastAttackVsBaiumTime = System.currentTimeMillis();
				startQuestTimer("baium_despawn", 60000, npc, null, true);
				if (player != null)
				{
					player.reduceCurrentHp(99999999, player);
				}
				
				npc.setRunning();
				
				startQuestTimer("skill_range", 500, npc, null, true);
				final NpcInstance baium = npc;
				ThreadPool.schedule(() ->
				{
					try
					{
						baium.setInvul(false);
						// baium.setImobilised(false);
						// for (NpcInstance minion : _Minions)
						// minion.setShowSummonAnimation(false);
						baium.getAttackByList().addAll(_zone.getCharactersInside());
					}
					catch (Exception e)
					{
						LOGGER.warning(e.getMessage());
					}
				}, 11100L);
				// TODO: the person who woke baium up should be knocked across the room, onto a wall, and
				// lose massive amounts of HP.
				for (int[] element : ANGEL_LOCATION)
				{
					final MonsterInstance angel = (MonsterInstance) addSpawn(ARCHANGEL, element[0], element[1], element[2], element[3], false, 0);
					angel.setInvul(true);
					_minions.add(angel);
					angel.getAttackByList().addAll(_zone.getCharactersInside());
					angel.isAggressive();
				}
			}
			// despawn the live baium after 30 minutes of inactivity
			// also check if the players are cheating, having pulled Baium outside his zone...
		}
		else if (event.equals("baium_despawn") && (npc != null))
		{
			if (npc.getNpcId() == LIVE_BAIUM)
			{
				// just in case the zone reference has been lost (somehow...), restore the reference
				if (_zone == null)
				{
					_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
				}
				if ((_lastAttackVsBaiumTime + (Config.BAIUM_SLEEP * 1000)) < System.currentTimeMillis())
				{
					npc.deleteMe(); // despawn the live-baium
					for (NpcInstance minion : _minions)
					{
						if (minion != null)
						{
							minion.getSpawn().stopRespawn();
							minion.deleteMe();
						}
					}
					_minions.clear();
					addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0); // spawn stone-baium
					GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP); // mark that Baium is not awake any more
					_zone.oustAllPlayers();
					cancelQuestTimer("baium_despawn", npc, null);
				}
				else if (((_lastAttackVsBaiumTime + 300000) < System.currentTimeMillis()) && (npc.getCurrentHp() < ((npc.getMaxHp() * 3) / 4.0)))
				{
					npc.setTarget(npc);
					npc.doCast(SkillTable.getInstance().getInfo(4135, 1));
					if (GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) != AWAKE)
					{
						cancelQuestTimer("baium_despawn", npc, null);
					}
				}
			}
		}
		return super.onAdvEvent(event, npc, player);
	}
	
	@Override
	public String onTalk(NpcInstance npc, PlayerInstance player)
	{
		final int npcId = npc.getNpcId();
		String htmltext = "";
		if (_zone == null)
		{
			_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
		}
		if (_zone == null)
		{
			return "<html><body>Angelic Vortex:<br>You may not enter while admin disabled this zone</body></html>";
		}
		
		final Integer status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);
		if ((npcId == STONE_BAIUM) && (status == ASLEEP))
		{
			if (Config.ALLOW_DIRECT_TP_TO_BOSS_ROOM || _zone.isPlayerAllowed(player))
			{
				// once Baium is awaken, no more people may enter until he dies, the server reboots, or
				// 30 minutes pass with no attacks made against Baium.
				GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, AWAKE);
				npc.deleteMe();
				final GrandBossInstance baium = (GrandBossInstance) addSpawn(LIVE_BAIUM, npc);
				GrandBossManager.getInstance().addBoss(baium);
				ThreadPool.schedule(() ->
				{
					try
					{
						baium.setInvul(true);
						baium.setRunning();
						baium.broadcastPacket(new SocialAction(baium.getObjectId(), 2));
						startQuestTimer("baium_wakeup", 15000, baium, player);
						// _baium.setShowSummonAnimation(false);
					}
					catch (Throwable e)
					{
						LOGGER.warning(e.getMessage());
					}
				}, 100L);
			}
			else
			{
				htmltext = "Conditions are not right to wake up Baium";
			}
		}
		else if (npcId == ANGELIC_VORTEX)
		{
			if (player.isFlying())
			{
				// print "Player "+player.getName()+" attempted to enter Baium's lair while flying!";
				return "<html><body>Angelic Vortex:<br>You may not enter while flying a wyvern</body></html>";
			}
			
			if ((status == ASLEEP) && (player.getQuestState(getName()).getQuestItemsCount(4295) > 0)) // bloody fabric
			{
				player.getQuestState(getName()).takeItems(4295, 1);
				// allow entry for the player for the next 30 secs (more than enough time for the TP to happen)
				// Note: this just means 30secs to get in, no limits on how long it takes before we get out.
				_zone.allowPlayerEntry(player, 30);
				player.teleToLocation(113100, 14500, 10077);
			}
			else
			{
				npc.showChatWindow(player, 1);
			}
		}
		return htmltext;
	}
	
	@Override
	public String onSpellFinished(NpcInstance npc, PlayerInstance player, Skill skill)
	{
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return null;
		}
		else if ((npc.getNpcId() == LIVE_BAIUM) && !npc.isInvul())
		{
			callSkillAI(npc);
		}
		return super.onSpellFinished(npc, player, skill);
	}
	
	@Override
	public String onAttack(NpcInstance npc, PlayerInstance attacker, int damage, boolean isPet)
	{
		if (!_zone.isInsideZone(attacker))
		{
			attacker.reduceCurrentHp(attacker.getCurrentHp(), attacker, false);
			return super.onAttack(npc, attacker, damage, isPet);
		}
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return super.onAttack(npc, attacker, damage, isPet);
		}
		else if ((npc.getNpcId() == LIVE_BAIUM) && !npc.isInvul())
		{
			if (attacker.getMountType() == 1)
			{
				int sk4258 = 0;
				final Effect[] effects = attacker.getAllEffects();
				if ((effects != null) && (effects.length != 0))
				{
					for (Effect e : effects)
					{
						if (e.getSkill().getId() == 4258)
						{
							sk4258 = 1;
						}
					}
				}
				if (sk4258 == 0)
				{
					npc.setTarget(attacker);
					npc.doCast(SkillTable.getInstance().getInfo(4258, 1));
				}
			}
			// update a variable with the last action against baium
			_lastAttackVsBaiumTime = System.currentTimeMillis();
			callSkillAI(npc);
		}
		return super.onAttack(npc, attacker, damage, isPet);
	}
	
	@Override
	public String onKill(NpcInstance npc, PlayerInstance killer, boolean isPet)
	{
		npc.broadcastPacket(new PlaySound(1, "BS01_D", npc));
		cancelQuestTimer("baium_despawn", npc, null);
		// spawn the "Teleportation Cubic" for 15 minutes (to allow players to exit the lair)
		addSpawn(29055, 115203, 16620, 10078, 0, false, 900000); // //should we teleport everyone out if the cubic despawns??
		// "lock" baium for 5 days and 1 to 8 hours [i.e. 432,000,000 + 1*3,600,000 + random-less-than(8*3,600,000) millisecs]
		final long respawnTime = (Config.BAIUM_RESP_FIRST + Rnd.get(Config.BAIUM_RESP_SECOND)) * 3600000;
		GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, DEAD);
		startQuestTimer("baium_unlock", respawnTime, null, null);
		// also save the respawn time so that the info is maintained past reboots
		final StatSet info = GrandBossManager.getInstance().getStatSet(LIVE_BAIUM);
		info.set("respawn_time", System.currentTimeMillis() + respawnTime);
		GrandBossManager.getInstance().setStatSet(LIVE_BAIUM, info);
		for (NpcInstance minion : _minions)
		{
			if (minion != null)
			{
				minion.getSpawn().stopRespawn();
				minion.deleteMe();
			}
		}
		_minions.clear();
		
		if (getQuestTimer("skill_range", npc, null) != null)
		{
			getQuestTimer("skill_range", npc, null).cancel();
		}
		
		return super.onKill(npc, killer, isPet);
	}
	
	public Creature getRandomTarget(NpcInstance npc)
	{
		final List<Creature> result = new ArrayList<>();
		final Collection<WorldObject> objs = npc.getKnownList().getKnownObjects().values();
		{
			for (WorldObject obj : objs)
			{
				if ((obj instanceof Creature) && (((((Creature) obj).getZ() < (npc.getZ() - 100)) && (((Creature) obj).getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc)))
				{
					continue;
				}
				if ((obj instanceof PlayerInstance) && Util.checkIfInRange(9000, npc, obj, true) && !((Creature) obj).isDead())
				{
					result.add((PlayerInstance) obj);
				}
				if ((obj instanceof Summon) && Util.checkIfInRange(9000, npc, obj, true) && !((Creature) obj).isDead())
				{
					result.add((Summon) obj);
				}
			}
		}
		if (result.isEmpty())
		{
			for (NpcInstance minion : _minions)
			{
				if (minion != null)
				{
					result.add(minion);
				}
			}
		}
		
		if (result.isEmpty())
		{
			return null;
		}
		
		final Object[] characters = result.toArray();
		final QuestTimer timer = getQuestTimer("clean_player", npc, null);
		if (timer != null)
		{
			timer.cancel();
		}
		startQuestTimer("clean_player", 20000, npc, null);
		return (Creature) characters[Rnd.get(characters.length)];
	}
	
	public synchronized void callSkillAI(NpcInstance npc)
	{
		if (npc.isInvul() || npc.isCastingNow())
		{
			return;
		}
		
		if ((_target == null) || _target.isDead() || !(_zone.isInsideZone(_target)))
		{
			_target = getRandomTarget(npc);
			if (_target != null)
			{
				_skill = SkillTable.getInstance().getInfo(getRandomSkill(npc), 1);
			}
		}
		
		final Creature target = _target;
		Skill skill = _skill;
		if (skill == null)
		{
			skill = SkillTable.getInstance().getInfo(getRandomSkill(npc), 1);
		}
		if ((target == null) || target.isDead() || !(_zone.isInsideZone(target)))
		{
			// npc.setCastingNow(false);
			return;
		}
		
		if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			npc.setTarget(target);
			// npc.setCastingNow(true);
			if (getDist(skill.getCastRange()) > 0)
			{
				npc.broadcastPacket(new MoveToPawn(npc, target, getDist(skill.getCastRange())));
			}
			try
			{
				wait(1000);
				npc.stopMove(null);
				npc.doCast(skill);
			}
			catch (Exception e)
			{
				LOGGER.warning(e.getMessage());
			}
		}
		else
		{
			npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
			// npc.setCastingNow(false);
		}
	}
	
	public int getRandomSkill(NpcInstance npc)
	{
		int skill;
		if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4131;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4130;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4131;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4130;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4131;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4128;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4129;
		}
		else
		{
			skill = 4127;
		}
		return skill;
	}
	
	@Override
	public String onSkillUse(NpcInstance npc, PlayerInstance caster, Skill skill)
	{
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return null;
		}
		npc.setTarget(caster);
		return super.onSkillUse(npc, caster, skill);
	}
	
	public int getDist(int range)
	{
		int dist = 0;
		switch (range)
		{
			case -1:
			{
				break;
			}
			case 100:
			{
				dist = 85;
				break;
			}
			default:
			{
				dist = range - 85;
				break;
			}
		}
		return dist;
	}
	
	public static void main(String[] args)
	{
		new Baium();
	}
}

Pequena correção no game\data\scripts\ai\bosses

Edited by RootZerO
  • Like 1

P46KGqJ_d.webp?maxwidth=760&fidelity=grand

Link to comment
Share on other sites

2 horas atrás, RootZerO disse:

Uma pequena correção no game\data\scripts\ai\bosses

baium.ai

  Ocultar conteúdo

/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package ai.bosses;

import static org.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
import static org.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Logger;

import org.l2jserver.Config;
import org.l2jserver.commons.concurrent.ThreadPool;
import org.l2jserver.commons.util.Rnd;
import org.l2jserver.gameserver.datatables.SkillTable;
import org.l2jserver.gameserver.geoengine.GeoEngine;
import org.l2jserver.gameserver.instancemanager.GrandBossManager;
import org.l2jserver.gameserver.model.Effect;
import org.l2jserver.gameserver.model.Skill;
import org.l2jserver.gameserver.model.StatSet;
import org.l2jserver.gameserver.model.WorldObject;
import org.l2jserver.gameserver.model.actor.Creature;
import org.l2jserver.gameserver.model.actor.Summon;
import org.l2jserver.gameserver.model.actor.instance.GrandBossInstance;
import org.l2jserver.gameserver.model.actor.instance.MonsterInstance;
import org.l2jserver.gameserver.model.actor.instance.NpcInstance;
import org.l2jserver.gameserver.model.actor.instance.PlayerInstance;
import org.l2jserver.gameserver.model.entity.Announcements;
import org.l2jserver.gameserver.model.quest.Quest;
import org.l2jserver.gameserver.model.quest.QuestTimer;
import org.l2jserver.gameserver.model.zone.type.BossZone;
import org.l2jserver.gameserver.network.serverpackets.Earthquake;
import org.l2jserver.gameserver.network.serverpackets.MoveToPawn;
import org.l2jserver.gameserver.network.serverpackets.PlaySound;
import org.l2jserver.gameserver.network.serverpackets.SocialAction;
import org.l2jserver.gameserver.util.Util;

/**
 * Baium AI Note1: if the server gets rebooted while players are still fighting Baium, there is no lock, but players also lose their ability to wake baium up. However, should another person enter the room and wake him up, the players who had stayed inside may join the raid. This can be helpful for
 * players who became victims of a reboot (they only need 1 new player to enter and wake up baium) and is not too exploitable since any player wishing to exploit it would have to suffer 5 days of being parked in an empty room. Note2: Neither version of Baium should be a permanent spawn. This script
 * is fully capable of spawning the statue-version when the lock expires and switching it to the mob version promptly. Additional notes ( source http://aleenaresron.blogspot.com/2006_08_01_archive.html ): * Baium only first respawns five days after his last death. And from those five days he will
 * respawn within 1-8 hours of his last death. So, you have to know his last time of death. * If by some freak chance you are the only one in Baium's chamber and NO ONE comes in [ha, ha] you or someone else will have to wake Baium. There is a good chance that Baium will automatically kill whoever
 * wakes him. There are some people that have been able to wake him and not die, however if you've already gone through the trouble of getting the bloody fabric and camped him out and researched his spawn time, are you willing to take that chance that you'll wake him and not be able to finish your
 * quest? Doubtful. [ this powerful attack vs the player who wakes him up is NOT yet implemented here] * once someone starts attacking Baium no one else can port into the chamber where he is. Unlike with the other raid bosses, you can just show up at any time as long as you are there when they die.
 * Not true with Baium. Once he gets attacked, the port to Baium closes. byebye, see you in 5 days. If nobody attacks baium for 30 minutes, he auto-despawns and unlocks the vortex
 * @author Fulminus version 0.1
 */
public class Baium extends Quest
{
	protected static final Logger LOGGER = Logger.getLogger(Baium.class.getName());
	
	private Creature _target;
	private Skill _skill;
	private static final int STONE_BAIUM = 29025;
	private static final int ANGELIC_VORTEX = 31862;
	private static final int LIVE_BAIUM = 29020;
	private static final int ARCHANGEL = 29021;
	
	// Baium status tracking,
	private static final byte ASLEEP = 0; // baium is in the stone version, waiting to be woken up. Entry is unlocked,
	private static final byte AWAKE = 1; // baium is awake and fighting. Entry is locked.
	private static final byte DEAD = 2; // baium has been killed and has not yet spawned. Entry is locked,
	
	// Archangel locations.
	// @formatter:off
	private static final int[][] ANGEL_LOCATION =
	{
		{114239, 17168, 10080, 63544},
		{115780, 15564, 10080, 13620},
		{114880, 16236, 10080, 5400},
		{115168, 17200, 10080, 0},
		{115792, 16608, 10080, 0},
	};
	// @formatter:on
	
	private long _lastAttackVsBaiumTime = 0;
	private final List<NpcInstance> _minions = new CopyOnWriteArrayList<>();
	protected BossZone _zone;
	
	public Baium()
	{
		super(-1, "ai/bosses");
		
		final int[] mob =
		{
			LIVE_BAIUM
		};
		registerMobs(mob);
		
		// Quest NPC starter initialization
		addStartNpc(STONE_BAIUM);
		addStartNpc(ANGELIC_VORTEX);
		addTalkId(STONE_BAIUM);
		addTalkId(ANGELIC_VORTEX);
		_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
		final StatSet info = GrandBossManager.getInstance().getStatSet(LIVE_BAIUM);
		final Integer status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);
		if (status == DEAD)
		{
			// load the unlock date and time for baium from DB
			final long temp = (info.getLong("respawn_time") - System.currentTimeMillis());
			if (temp > 0)
			{
				// the unlock time has not yet expired. Mark Baium as currently locked (dead). Setup a timer
				// to fire at the correct time (calculate the time between now and the unlock time,
				// setup a timer to fire after that many msec)
				startQuestTimer("baium_unlock", temp, null, null);
			}
			else
			{
				// the time has already expired while the server was offline. Delete the saved time and
				// immediately spawn the stone-baium. Also the state need not be changed from ASLEEP
				addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
				if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
				{
					Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
				}
				GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP);
			}
		}
		else if (status == AWAKE)
		{
			final int loc_x = info.getInt("loc_x");
			final int loc_y = info.getInt("loc_y");
			final int loc_z = info.getInt("loc_z");
			final int heading = info.getInt("heading");
			final int hp = info.getInt("currentHP");
			final int mp = info.getInt("currentMP");
			final GrandBossInstance baium = (GrandBossInstance) addSpawn(LIVE_BAIUM, loc_x, loc_y, loc_z, heading, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss " + baium.getName() + " spawned in world.");
			}
			GrandBossManager.getInstance().addBoss(baium);
			ThreadPool.schedule(() ->
			{
				try
				{
					baium.setCurrentHpMp(hp, mp);
					baium.setInvul(true);
					// _baium.setImobilised(true);
					baium.broadcastPacket(new SocialAction(baium.getObjectId(), 2));
					startQuestTimer("baium_wakeup", 15000, baium, null);
				}
				catch (Exception e)
				{
					LOGGER.warning(e.getMessage());
				}
			}, 100L);
		}
		else
		{
			addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
			}
		}
	}
	
	@Override
	public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
	{
		if (event.equals("baium_unlock"))
		{
			GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP);
			addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0);
			if (Config.ANNOUNCE_TO_ALL_SPAWN_RB)
			{
				Announcements.getInstance().announceToAll("Raid boss Baium Stone spawned in world.");
			}
		}
		else if (event.equals("skill_range") && (npc != null))
		{
			callSkillAI(npc);
		}
		else if (event.equals("clean_player"))
		{
			_target = getRandomTarget(npc);
		}
		else if (event.equals("baium_wakeup") && (npc != null))
		{
			if (npc.getNpcId() == LIVE_BAIUM)
			{
				npc.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
				npc.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(), 40, 5));
				// start monitoring baium's inactivity
				_lastAttackVsBaiumTime = System.currentTimeMillis();
				startQuestTimer("baium_despawn", 60000, npc, null, true);
				if (player != null)
				{
					player.reduceCurrentHp(99999999, player);
				}
				
				npc.setRunning();
				
				startQuestTimer("skill_range", 500, npc, null, true);
				final NpcInstance baium = npc;
				ThreadPool.schedule(() ->
				{
					try
					{
						baium.setInvul(false);
						// baium.setImobilised(false);
						// for (NpcInstance minion : _Minions)
						// minion.setShowSummonAnimation(false);
						baium.getAttackByList().addAll(_zone.getCharactersInside());
					}
					catch (Exception e)
					{
						LOGGER.warning(e.getMessage());
					}
				}, 11100L);
				// TODO: the person who woke baium up should be knocked across the room, onto a wall, and
				// lose massive amounts of HP.
				for (int[] element : ANGEL_LOCATION)
				{
					final MonsterInstance angel = (MonsterInstance) addSpawn(ARCHANGEL, element[0], element[1], element[2], element[3], false, 0);
					angel.setInvul(true);
					_minions.add(angel);
					angel.getAttackByList().addAll(_zone.getCharactersInside());
					angel.isAggressive();
				}
			}
			// despawn the live baium after 30 minutes of inactivity
			// also check if the players are cheating, having pulled Baium outside his zone...
		}
		else if (event.equals("baium_despawn") && (npc != null))
		{
			if (npc.getNpcId() == LIVE_BAIUM)
			{
				// just in case the zone reference has been lost (somehow...), restore the reference
				if (_zone == null)
				{
					_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
				}
				if ((_lastAttackVsBaiumTime + (Config.BAIUM_SLEEP * 1000)) < System.currentTimeMillis())
				{
					npc.deleteMe(); // despawn the live-baium
					for (NpcInstance minion : _minions)
					{
						if (minion != null)
						{
							minion.getSpawn().stopRespawn();
							minion.deleteMe();
						}
					}
					_minions.clear();
					addSpawn(STONE_BAIUM, 116033, 17447, 10104, 40188, false, 0); // spawn stone-baium
					GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, ASLEEP); // mark that Baium is not awake any more
					_zone.oustAllPlayers();
					cancelQuestTimer("baium_despawn", npc, null);
				}
				else if (((_lastAttackVsBaiumTime + 300000) < System.currentTimeMillis()) && (npc.getCurrentHp() < ((npc.getMaxHp() * 3) / 4.0)))
				{
					npc.setTarget(npc);
					npc.doCast(SkillTable.getInstance().getInfo(4135, 1));
					if (GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) != AWAKE)
					{
						cancelQuestTimer("baium_despawn", npc, null);
					}
				}
			}
		}
		return super.onAdvEvent(event, npc, player);
	}
	
	@Override
	public String onTalk(NpcInstance npc, PlayerInstance player)
	{
		final int npcId = npc.getNpcId();
		String htmltext = "";
		if (_zone == null)
		{
			_zone = GrandBossManager.getInstance().getZone(113100, 14500, 10077);
		}
		if (_zone == null)
		{
			return "<html><body>Angelic Vortex:<br>You may not enter while admin disabled this zone</body></html>";
		}
		
		final Integer status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);
		if ((npcId == STONE_BAIUM) && (status == ASLEEP))
		{
			if (Config.ALLOW_DIRECT_TP_TO_BOSS_ROOM || _zone.isPlayerAllowed(player))
			{
				// once Baium is awaken, no more people may enter until he dies, the server reboots, or
				// 30 minutes pass with no attacks made against Baium.
				GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, AWAKE);
				npc.deleteMe();
				final GrandBossInstance baium = (GrandBossInstance) addSpawn(LIVE_BAIUM, npc);
				GrandBossManager.getInstance().addBoss(baium);
				ThreadPool.schedule(() ->
				{
					try
					{
						baium.setInvul(true);
						baium.setRunning();
						baium.broadcastPacket(new SocialAction(baium.getObjectId(), 2));
						startQuestTimer("baium_wakeup", 15000, baium, player);
						// _baium.setShowSummonAnimation(false);
					}
					catch (Throwable e)
					{
						LOGGER.warning(e.getMessage());
					}
				}, 100L);
			}
			else
			{
				htmltext = "Conditions are not right to wake up Baium";
			}
		}
		else if (npcId == ANGELIC_VORTEX)
		{
			if (player.isFlying())
			{
				// print "Player "+player.getName()+" attempted to enter Baium's lair while flying!";
				return "<html><body>Angelic Vortex:<br>You may not enter while flying a wyvern</body></html>";
			}
			
			if ((status == ASLEEP) && (player.getQuestState(getName()).getQuestItemsCount(4295) > 0)) // bloody fabric
			{
				player.getQuestState(getName()).takeItems(4295, 1);
				// allow entry for the player for the next 30 secs (more than enough time for the TP to happen)
				// Note: this just means 30secs to get in, no limits on how long it takes before we get out.
				_zone.allowPlayerEntry(player, 30);
				player.teleToLocation(113100, 14500, 10077);
			}
			else
			{
				npc.showChatWindow(player, 1);
			}
		}
		return htmltext;
	}
	
	@Override
	public String onSpellFinished(NpcInstance npc, PlayerInstance player, Skill skill)
	{
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return null;
		}
		else if ((npc.getNpcId() == LIVE_BAIUM) && !npc.isInvul())
		{
			callSkillAI(npc);
		}
		return super.onSpellFinished(npc, player, skill);
	}
	
	@Override
	public String onAttack(NpcInstance npc, PlayerInstance attacker, int damage, boolean isPet)
	{
		if (!_zone.isInsideZone(attacker))
		{
			attacker.reduceCurrentHp(attacker.getCurrentHp(), attacker, false);
			return super.onAttack(npc, attacker, damage, isPet);
		}
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return super.onAttack(npc, attacker, damage, isPet);
		}
		else if ((npc.getNpcId() == LIVE_BAIUM) && !npc.isInvul())
		{
			if (attacker.getMountType() == 1)
			{
				int sk4258 = 0;
				final Effect[] effects = attacker.getAllEffects();
				if ((effects != null) && (effects.length != 0))
				{
					for (Effect e : effects)
					{
						if (e.getSkill().getId() == 4258)
						{
							sk4258 = 1;
						}
					}
				}
				if (sk4258 == 0)
				{
					npc.setTarget(attacker);
					npc.doCast(SkillTable.getInstance().getInfo(4258, 1));
				}
			}
			// update a variable with the last action against baium
			_lastAttackVsBaiumTime = System.currentTimeMillis();
			callSkillAI(npc);
		}
		return super.onAttack(npc, attacker, damage, isPet);
	}
	
	@Override
	public String onKill(NpcInstance npc, PlayerInstance killer, boolean isPet)
	{
		npc.broadcastPacket(new PlaySound(1, "BS01_D", npc));
		cancelQuestTimer("baium_despawn", npc, null);
		// spawn the "Teleportation Cubic" for 15 minutes (to allow players to exit the lair)
		addSpawn(29055, 115203, 16620, 10078, 0, false, 900000); // //should we teleport everyone out if the cubic despawns??
		// "lock" baium for 5 days and 1 to 8 hours [i.e. 432,000,000 + 1*3,600,000 + random-less-than(8*3,600,000) millisecs]
		final long respawnTime = (Config.BAIUM_RESP_FIRST + Rnd.get(Config.BAIUM_RESP_SECOND)) * 3600000;
		GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM, DEAD);
		startQuestTimer("baium_unlock", respawnTime, null, null);
		// also save the respawn time so that the info is maintained past reboots
		final StatSet info = GrandBossManager.getInstance().getStatSet(LIVE_BAIUM);
		info.set("respawn_time", System.currentTimeMillis() + respawnTime);
		GrandBossManager.getInstance().setStatSet(LIVE_BAIUM, info);
		for (NpcInstance minion : _minions)
		{
			if (minion != null)
			{
				minion.getSpawn().stopRespawn();
				minion.deleteMe();
			}
		}
		_minions.clear();
		
		if (getQuestTimer("skill_range", npc, null) != null)
		{
			getQuestTimer("skill_range", npc, null).cancel();
		}
		
		return super.onKill(npc, killer, isPet);
	}
	
	public Creature getRandomTarget(NpcInstance npc)
	{
		final List<Creature> result = new ArrayList<>();
		final Collection<WorldObject> objs = npc.getKnownList().getKnownObjects().values();
		{
			for (WorldObject obj : objs)
			{
				if ((obj instanceof Creature) && (((((Creature) obj).getZ() < (npc.getZ() - 100)) && (((Creature) obj).getZ() > (npc.getZ() + 100))) || !GeoEngine.getInstance().canSeeTarget(obj, npc)))
				{
					continue;
				}
				if ((obj instanceof PlayerInstance) && Util.checkIfInRange(9000, npc, obj, true) && !((Creature) obj).isDead())
				{
					result.add((PlayerInstance) obj);
				}
				if ((obj instanceof Summon) && Util.checkIfInRange(9000, npc, obj, true) && !((Creature) obj).isDead())
				{
					result.add((Summon) obj);
				}
			}
		}
		if (result.isEmpty())
		{
			for (NpcInstance minion : _minions)
			{
				if (minion != null)
				{
					result.add(minion);
				}
			}
		}
		
		if (result.isEmpty())
		{
			return null;
		}
		
		final Object[] characters = result.toArray();
		final QuestTimer timer = getQuestTimer("clean_player", npc, null);
		if (timer != null)
		{
			timer.cancel();
		}
		startQuestTimer("clean_player", 20000, npc, null);
		return (Creature) characters[Rnd.get(characters.length)];
	}
	
	public synchronized void callSkillAI(NpcInstance npc)
	{
		if (npc.isInvul() || npc.isCastingNow())
		{
			return;
		}
		
		if ((_target == null) || _target.isDead() || !(_zone.isInsideZone(_target)))
		{
			_target = getRandomTarget(npc);
			if (_target != null)
			{
				_skill = SkillTable.getInstance().getInfo(getRandomSkill(npc), 1);
			}
		}
		
		final Creature target = _target;
		Skill skill = _skill;
		if (skill == null)
		{
			skill = SkillTable.getInstance().getInfo(getRandomSkill(npc), 1);
		}
		if ((target == null) || target.isDead() || !(_zone.isInsideZone(target)))
		{
			// npc.setCastingNow(false);
			return;
		}
		
		if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			npc.setTarget(target);
			// npc.setCastingNow(true);
			if (getDist(skill.getCastRange()) > 0)
			{
				npc.broadcastPacket(new MoveToPawn(npc, target, getDist(skill.getCastRange())));
			}
			try
			{
				wait(1000);
				npc.stopMove(null);
				npc.doCast(skill);
			}
			catch (Exception e)
			{
				LOGGER.warning(e.getMessage());
			}
		}
		else
		{
			npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
			// npc.setCastingNow(false);
		}
	}
	
	public int getRandomSkill(NpcInstance npc)
	{
		int skill;
		if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4131;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4.0))
		{
			if (Rnd.get(100) < 10)
			{
				skill = 4130;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4131;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4128;
			}
			else if (Rnd.get(100) < 10)
			{
				skill = 4129;
			}
			else
			{
				skill = 4127;
			}
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4130;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4131;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4128;
		}
		else if (Rnd.get(100) < 10)
		{
			skill = 4129;
		}
		else
		{
			skill = 4127;
		}
		return skill;
	}
	
	@Override
	public String onSkillUse(NpcInstance npc, PlayerInstance caster, Skill skill)
	{
		if (npc.isInvul())
		{
			npc.getAI().setIntention(AI_INTENTION_IDLE);
			return null;
		}
		npc.setTarget(caster);
		return super.onSkillUse(npc, caster, skill);
	}
	
	public int getDist(int range)
	{
		int dist = 0;
		switch (range)
		{
			case -1:
			{
				break;
			}
			case 100:
			{
				dist = 85;
				break;
			}
			default:
			{
				dist = range - 85;
				break;
			}
		}
		return dist;
	}
	
	public static void main(String[] args)
	{
		new Baium();
	}
}

Pequena correção no game\data\scripts\ai\bosses

Obrigado!
Git updated

  • Like 2

PYKlyRG.jpg&key=822e505460230a53f5b13227467836b3217127e6dec74c5c3b3701e6d02541d8

Lineage 2 Interlude & High Five
L2STUDIO, seu servidor está aqui!

Link to comment
Share on other sites

  • Join now

    Be part of the largest and oldest communities about Lineage2 in Latin America.

×
×
  • Create New...

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.