Ir para conteúdo
  • Cadastre-se

slym

Membro
  • Total de itens

    113
  • Registro em

  • Última visita

  • Prêmios recebidos

    1

Tudo que slym postou

  1. @Ivan Piresivan, na classic antharas (l2 scripts) tem alguns problemas de compatibilidade dos DB, algumas colunas como a isBase na tabela character, na tabela clan_data, também não existe uma coluna chamada hasCastle, entre outras incompatibilidades que estas nao me permitem testar, se vc precisar podemos fazer alguns testes juntos e me deixo a disposição para o que eu puder ajudar. Outra coisa, o informer, esta puxando itens que não possuem nessa revisão, como um draconic bow, devo estar fazendo algo errado ou é devido a essa incompatibilidade mesmo? o mesmo acontece com alguns boses e castelos. No mais, é um excelente trabalho e ser disponibilizado gratuito na nossa comunidade é um trabalho muito humano! Meu muito obrigado!
  2. Completando o que o @Netinho falou, seria interessante você criar um bloqueio na geodata especifica naquele ponto, mas claro, isso requer um pouco mais de conhecimento, é simples de fazer mas teria que esudar um pouquinho. O metodo pelo monument of heros é valido, spawne varios criando uma barreira de npcs, dependendo do servidor é possivel que esses spawns sejam feito em conjunto com o starter do evento.
  3. Seria no caso eu ir em cada functions e, por exemplo, onde ta "$db_name" alterar para $db_name1 e $db_name2, e também cria-los na "global_configuration"? dei uma olhada nos arquivos e só consegui ver lá essa questão dos dbs... e alterar também no "connection" kkkkkk desculpa se não tiver nada have
  4. @Ivan Pires Ivan, gostaria de tentar a adaptar o site para l2jscripts classic, é muito complexo a adptação?
  5. Estava usando o MySql 8, ao mudar pro 5.7 resolveu este erro em especifico.
  6. Cada system tem um protocolo, sendo o protocolo usado pela sua system é o 431. No servidor é possivel a configuração de um numero maximo e minimo de protocolos aceitos, sendo no seu caso o max 746 e o min 737, você precisa alterar isso. Não me lembro exatamente onde se configura isso, mas geralmente fica ou no altsettings.properties, ou gameserver.properties, loginserver.properties... Abra essas properties e use o Ctrl+F pra localizar.
  7. Fala bro, qual a versão do seu mysql? E seu banco de dados é referente a qual pack?
  8. O Ivan ja respondeu essa duvida em topicos passados. Se for l2j tem q ir na tabela accounts e colocar acesslevel 1 se for l2off é na icp_accounts, nisso voce tera acesso ao painel e podera postar as news, a questão é que mesmo acessando o painel adm eu ainda não consegui postar uma noticia, poderia testar aí pra ver se é só aqui ou se é nos arquivos mesmo. //EDIT Consegui sim postar a noticia, aparentemente foi só um erro com a minha conta de adm, eu havia acabado de criar e estava online, dei logout e loguei novamente resolveu.
  9. Também sempre pensei isso sobre a utilização de dois dbs rsrsrs. Aguardo sim a nova atualização, de qualquer forma, agradeço muito o suporte e me coloco a disposição para testar o site ou alguma outra ajuda em que for útil. Parabéns mais uma vez pela iniciativa.
  10. entendi, segue a estrutura e os dados: [Hidden Content]
  11. [Hidden Content] peguei a pasta de instalação do db virgem (install sql), dentro do arquivos do server, separei por l2game e l2auth q são os nomes dos dbs, ve se assim fica melhor. Não consegui salvar o bkp com outro formato. Caso os arquivos virgens não sejam suficientes, exportei os dbs q uso para sql. [Hidden Content]
  12. Boa tarde, pessoal não sei onde posso estar errando. Acredito que seja algum problema com minha database. quando tento ligar o site vinculado ao meu servidor aparece a seguinte mensagem e o site não termina de carregar direito. Uso o AppServ e a uma versão da L2JScripts Classic Antharas (abaixo os 2dbs L2auth e L2game) [Hidden Content] Obrigado especial @Ivan Pires site ficou show!
  13. Minha opnião como frequentador da comunidade l2j desde 2009 é uma só, como desde os primórdios do l2 private sempre existirá pessoas ruins e pessoas boas, tem servidor que visa o lucro acima de tudo e tem servidor que visa o lucro, a jogabilidade, a durabilidade entre outros fatores, tem de tudo meu brother! O player é livre pra escolher, tem gente que escolhe pq tem streamer jogando, tem gente q escolhe pelas características do servidor, e tem player que quer ta no meio da comunidade tóxica, uma coisa é certa, L2 deixou de ser altamente lucrativo como na década passada mas ainda sim da muito dinheiro resta saber como que você vai conseguir ser relevante, tem adm que só sabe ganhar dinheiro em cima de corrupção, que me parece ser o caso desse vagabundo aí do video, ja tem outros que conseguem sobressair sem isso, não generalizem, tem gente trabalhando sério e com transparência. O que a comunidade L2jBr deve fazer? se posicionar contra vagabundos e corruptos, expor esse tipo de atitude com repulsa, esse tipo de gente só diminui a comunidade e estraga a experiência de quem quer diversão, e nesse contexto, deixo meus parabéns ao Kelvin e Grundor pela posição tomada, o L2 sempre ganhara força com atitudes como essa. A esses adms que pensam que estão lucrando com essas atitudes, me resta a pena e a certeza de que infelizmente essa pessoa sofrerá muito, pq o aprendizado de marketing, administração e noções de comércio e economia que um servidor pode trazer ficará deturpado e o sucesso em outros projetos não relacionados a Lineage nunca virá, a corrupção é uma ilusão e pode ter certeza que se o cara q faz isso investisse o dinheiro na própria comunidade esses valores poderiam ser muito maiores devido ao aumento no numero de players jogadores do MMO. Desculpem os erros e o texto cansativo, fiz sem revisar e pelo celular. Abraço a toda comunidade que trabalha com honestidade!
  14. @okysborh os buffs vampirics nas crônicas 3.0+ dão bônus para skills magics tbm. Exemplo do Vampiric Rage: [Hidden Content]
  15. slym

    Droplist L2Classic

    Ia dizer isso haushsushus você ter um dentro do seu próprio server é pra poucos ahushsushs Fico show! Acompanhando o site, projetão, essa nova geração que ta chegando vai pegar coisa boa
  16. slym

    Droplist L2Classic

    É exatamente isso, essa ferramenta será disponibilizada? seria necessário a criação da tabela droplist, como você citou, quando usada a l2jscript? Excelente trabalho, impressionado com a qualidade, muito bem feito. O único adendo a ser feito, talvez você não tenha reparado ou ainda não tenha terminado, mas não ta separando entre drop e spoil, utilizei o mob hames orc sniper como teste e tanto o drop common quanto o spoil estão classificados como "drop". No mais, parabéns, mais uma vez.
  17. slym

    Droplist L2Classic

    Ivan, a partir disso, teria como a busca pelo drop de algum item de forma mais fácil? Trabalho na scripts e tenho muita dificuldade em saber se um item esta com o drop correto, tenho que descobrir o NPC q dropa ele e ir olhar dentro da xml, gostaria de digitar o id do item e aparecer o npc q dropa, você sabe alguma forma de fazer isso?
  18. slym

    Classic (Kamael)

    não consegui utilizar o VIP tiers system, to deixando passar batido alguma config?
  19. obrigado amigos, pessoal do forum sempre me ajudando, vcs são feras. @dwbryel Que pena cara o projeto é muito bom, achei na net sim mas tenho pretensão de comprar, vou tentar entrar em contato com o desenvolvedor e dar uma doação como forma de auxilio.
  20. Infelizmente não funcionou amigo, estou com medo de ter q alterar outros arquivos tbm.
  21. Amigos, tenho um problema com o script das olympiadas do pack L2JMobius - Antharas 2.2 No classic não existe a quest de nobles, consequentemente para participar das oly tbm não é necessario. O player consegue se cadastrar para a batalha tranquilo, mas quando ele quer cancelar a participação o script não cancela, exceto se o player for nobles, realizei o seguinte teste para chegar a essa conclusão: cadastrei nas olympiaas e tentei cancelar -> não deu; utilizei o //setnoble e consegui cancelar a participação. Acredito que o erro esteja nessa parte do script: case "unregister": { OlympiadManager.getInstance().unRegisterNoble(player); break; } Ja tentei alterar de diversas formas mas sou muito leigo em java, resultado: não rolou duahsdhsdhad Se alguma alma boa poder me dar uma luz, abaixo vou postar todo o arquivo OlyManager.java /* * 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 <[Hidden Content];. */ package ai.others.OlyManager; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.enums.CategoryType; import com.l2jmobius.gameserver.handler.BypassHandler; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.olympiad.CompetitionType; import com.l2jmobius.gameserver.model.olympiad.Olympiad; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ExOlympiadMatchList; import ai.AbstractNpcAI; /** * Olympiad Manager AI. * @author St3eT */ public final class OlyManager extends AbstractNpcAI implements IBypassHandler { // NPC private static final int MANAGER = 31688; // Misc private static final int EQUIPMENT_MULTISELL = 3168801; private static final String[] BYPASSES = { "watchmatch", "arenachange" }; private static final Logger LOGGER = Logger.getLogger(OlyManager.class.getName()); private OlyManager() { addStartNpc(MANAGER); addFirstTalkId(MANAGER); addTalkId(MANAGER); BypassHandler.getInstance().registerHandler(this); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { String htmltext = null; switch (event) { case "OlyManager-info.html": case "OlyManager-infoHistory.html": case "OlyManager-infoRules.html": case "OlyManager-infoPoints.html": case "OlyManager-infoPointsCalc.html": case "OlyManager-rank.html": case "OlyManager-rewards.html": { htmltext = event; break; } case "index": { htmltext = onFirstTalk(npc, player); break; } case "joinMatch": { if (OlympiadManager.getInstance().isRegistered(player)) { htmltext = "OlyManager-registred.html"; } else { switch (LocalDate.now().get(WeekFields.of(DayOfWeek.MONDAY, 7).weekOfMonth())) { case 1: case 2: case 3: // First 3 weeks of month is 1v1 + 1v1 class matches { htmltext = getHtm(player, "OlyManager-joinMatch.html"); break; } default:// Rest is only 1v1 class matches { htmltext = getHtm(player, "OlyManager-joinMatchClass.html"); break; } } htmltext = htmltext.replace("%olympiad_round%", String.valueOf(Olympiad.getInstance().getPeriod())); htmltext = htmltext.replace("%olympiad_week%", String.valueOf(Olympiad.getInstance().getCurrentCycle())); htmltext = htmltext.replace("%olympiad_participant%", String.valueOf(OlympiadManager.getInstance().getCountOpponents())); } break; } case "register1v1": case "register1v1class": { if (player.isSubClassActive()) { htmltext = "OlyManager-subclass.html"; } else if ((!player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && !player.isInCategory(CategoryType.FOURTH_CLASS_GROUP)) || (player.getLevel() < 55)) // avoid exploits { htmltext = "OlyManager-noNoble.html"; } else if (Olympiad.getInstance().getNoblePoints(player) <= 0) { htmltext = "OlyManager-noPoints.html"; } else if (!player.isInventoryUnder80(false)) { player.sendPacket(SystemMessageId.UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_AND_SLOT_COUNT_ARE_LESS_THAN_80_PERCENT_OF_CAPACITY); } else if (event.equals("register1v1")) { OlympiadManager.getInstance().registerNoble(player, CompetitionType.NON_CLASSED); } else { OlympiadManager.getInstance().registerNoble(player, CompetitionType.CLASSED); } break; } case "unregister": { OlympiadManager.getInstance().unRegisterNoble(player); break; } case "calculatePoints": { final int points = Olympiad.getInstance().getOlympiadTradePoint(player, false); if (points == 0) { htmltext = "OlyManager-calculateNoEnough.html"; } else if (points < 20) { if (Hero.getInstance().isUnclaimedHero(player.getObjectId()) || Hero.getInstance().isHero(player.getObjectId())) { htmltext = "OlyManager-calculateEnough.html"; } else { htmltext = "OlyManager-calculateNoEnough.html"; } } else { htmltext = "OlyManager-calculateEnough.html"; } break; } case "calculatePointsDone": { if (player.isInventoryUnder80(false)) { final int tradePoints = Olympiad.getInstance().getOlympiadTradePoint(player, true); if (tradePoints > 0) { giveItems(player, Config.ALT_OLY_COMP_RITEM, tradePoints * Config.ALT_OLY_MARK_PER_POINT); } } else { player.sendPacket(SystemMessageId.UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_AND_SLOT_COUNT_ARE_LESS_THAN_80_PERCENT_OF_CAPACITY); } break; } case "showEquipmentReward": { MultisellData.getInstance().separateAndSend(EQUIPMENT_MULTISELL, player, npc, false); break; } case "rank_2": // Gladiator case "rank_3": // Warlord case "rank_5": // Paladin case "rank_6": // Dark Avenger case "rank_8": // Treasure Hunter case "rank_9": // Hawkeye case "rank_12": // Sorcerer case "rank_13": // Necromancer case "rank_14": // Warlock case "rank_16": // Bishop case "rank_17": // Prophet case "rank_20": // Temple Knight case "rank_21": // Sword Singer case "rank_23": // Plains Walker case "rank_24": // Silver Ranger case "rank_27": // Spellsinger case "rank_28": // Elemental Summoner case "rank_30": // Elven Elder case "rank_33": // Shillien Knight case "rank_34": // Bladedancer case "rank_36": // Abyss Walker case "rank_37": // Phantom Ranger case "rank_40": // Spellhowler case "rank_41": // Phantom Summoner case "rank_43": // Shillien Elder case "rank_46": // Destroyer case "rank_48": // Tyrant case "rank_51": // Overlord case "rank_52": // Warcryer case "rank_55": // Bounty Hunter case "rank_88": // Duelist case "rank_89": // Dreadnought case "rank_90": // Phoenix Knight case "rank_91": // Hell Knight case "rank_92": // Sagittarius case "rank_93": // Adventurer case "rank_94": // Archmage case "rank_95": // Soultaker case "rank_96": // Arcana Lord case "rank_97": // Cardinal case "rank_98": // Hierophant case "rank_99": // Eva's Templar case "rank_100": // Sword Muse case "rank_101": // Wind Rider case "rank_102": // Moonlight Sentinel case "rank_103": // Mystic Muse case "rank_104": // Elemental Master case "rank_105": // Eva's Saint case "rank_106": // Shillien Templar case "rank_107": // Spectral Dancer case "rank_108": // Ghost Hunter case "rank_109": // Ghost Sentinel case "rank_110": // Storm Screamer case "rank_111": // Spectral Master case "rank_112": // Shillien Saint case "rank_113": // Titan case "rank_114": // Grand Khavatari case "rank_115": // Dominator case "rank_116": // Doom Cryer case "rank_117": // Fortune Seeker case "rank_118": // Maestro { final int classId = Integer.parseInt(event.replace("rank_", "")); final List<String> names = Olympiad.getInstance().getClassLeaderBoard(classId); htmltext = getHtm(player, "OlyManager-rankDetail.html"); int index = 1; for (String name : names) { htmltext = htmltext.replace("%Rank" + index + "%", String.valueOf(index)); htmltext = htmltext.replace("%Name" + index + "%", name); index++; if (index > 15) { break; } } for (; index <= 15; index++) { htmltext = htmltext.replace("%Rank" + index + "%", ""); htmltext = htmltext.replace("%Name" + index + "%", ""); } break; } } return htmltext; } @Override public String onFirstTalk(L2Npc npc, L2PcInstance player) { String htmltext = null; if (!player.isCursedWeaponEquipped()) { htmltext = (!player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && !player.isInCategory(CategoryType.FOURTH_CLASS_GROUP)) || (player.getLevel() < 55) ? "OlyManager-noNoble.html" : "OlyManager-noble.html"; } else { htmltext = "OlyManager-noCursed.html"; } return htmltext; } @Override public boolean useBypass(String command, L2PcInstance activeChar, L2Character bypassOrigin) { try { final L2Npc olymanager = activeChar.getLastFolkNPC(); if (command.startsWith(BYPASSES[0])) // list { if (!Olympiad.getInstance().inCompPeriod()) { activeChar.sendPacket(SystemMessageId.THE_OLYMPIAD_GAMES_ARE_NOT_CURRENTLY_IN_PROGRESS); return false; } activeChar.sendPacket(new ExOlympiadMatchList()); } else if ((olymanager == null) || (olymanager.getId() != MANAGER) || (!activeChar.inObserverMode() && !activeChar.isInsideRadius(olymanager, 300, false, false))) { return false; } else if (OlympiadManager.getInstance().isRegisteredInComp(activeChar)) { activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_OBSERVE_A_OLYMPIAD_GAMES_MATCH_WHILE_YOU_ARE_ON_THE_WAITING_LIST); return false; } else if (!Olympiad.getInstance().inCompPeriod()) { activeChar.sendPacket(SystemMessageId.THE_OLYMPIAD_GAMES_ARE_NOT_CURRENTLY_IN_PROGRESS); return false; } else if (activeChar.isOnEvent()) { activeChar.sendMessage("You can not observe games while registered on an event"); return false; } else { final int arenaId = Integer.parseInt(command.substring(12).trim()); final OlympiadGameTask nextArena = OlympiadGameManager.getInstance().getOlympiadTask(arenaId); if (nextArena != null) { final List<Location> spectatorSpawns = nextArena.getStadium().getZone().getSpectatorSpawns(); if (spectatorSpawns.isEmpty()) { LOGGER.warning(getClass().getSimpleName() + ": Zone: " + nextArena.getStadium().getZone() + " doesn't have specatator spawns defined!"); return false; } final Location loc = spectatorSpawns.get(Rnd.get(spectatorSpawns.size())); activeChar.enterOlympiadObserverMode(loc, arenaId); } } return true; } catch (Exception e) { LOGGER.log(Level.WARNING, "Exception in " + getClass().getSimpleName(), e); } return false; } @Override public String[] getBypassList() { return BYPASSES; } public static void main(String[] args) { new OlyManager(); } }
  22. Galera, to com o seguinte warning quando compilo o pack l2j scripts 2.0 zaken: copila ok, mas surgem varios bugs quando rodando o projeto, por exemplo, os buffs não são restaurados quando se reloga e alguns buffs não estão dando os efeitos. alterei o stop para stopEffects e não funcionou, ja tentei alterar o texto de diversas formas e não obtive sucesso. Abaixo vou deixar a parte do script q da o primeiro warning, acredito que resolvendo este o resto segue o mesmo padrão: if(attacker != this || (skill != null && skill.isOffensive())) { final TIntSet effectsToRemove = new TIntHashSet(); for(Abnormal effect : getAbnormalList()) { if(effect.getSkill().isDispelOnDamage()) effectsToRemove.add(effect.getSkill().getId()); } getAbnormalList().stop(effectsToRemove); if(isMeditated()) getAbnormalList().stop(EffectType.Meditation); startAttackStanceTask(); checkAndRemoveInvisible(); }
  23. Boa tarde, amigos. É com enorme felicidade que venho trazer a solução desse problema. Primeira coisa, os valores a serem editados é na linha "power" da xml msm, o que estava acontecendo é que o valor minimo e maximo dessa linha esta configurado para 20 e 100, portanto muitas vezes se fazermos o calculo de acordo com o Formulas.java a alteração não se torna significativa, como por exemplo no caso da skill Seal of Binding: POWER x statMod x SkillMod x mAtkMod x lvlMod 20-100 x 087 x 0,40 x 0,61 x 0,96 = 4,10% até 20% *Valores referentes a um over full s, buffado e o char que estava sendo debuff era um sagi full s tbm buffado, portanto os valores são simbolicos e referentes a esse teste somente* o problema era que eu colocava o power acima de 300 e o server não entendia o valor e jogava no minimo ( 20 ), para solucionar, fiz o seguinte, procurei aonde era limitado o valor "power" de 20 a 100 e encontrei no seguinte arquivo: /aCis_gameserver/java/net/sf/l2j/gameserver/model/L2Skill.java mais precisamente entre as linhas 664 até a 667 // to let debuffs succeed even without specified power return (_power <= 0 || 100 < _power) ? 20 : _power; } } aumentei aonde esta 100 para 999, e consegui arrumar deboa, agora posso varios o power de todos os debuffs. Dica: No arquivo "server.properties" nas configs do server, tem uma parte de developer que esta marcada False, para que o calculo da chance do debuff seja feito e fique visivel para você no GS Console deve se alterar para True. FAÇA ISSO APENAS COM O SERVER OFFLINE, POIS O FLOOD NO GS CONSOLE FICA ALTISSIMO. Vlw galera! Desculpem o flood, mas achei melhor deixar separado a solução em post diferentes para facilitar quem tiver com duvida.
  24. Boa noite amigos, mais uma vez trago essa duvida para essa seção. Me deparei com a seguinte situação utilizando a Acis 372, fui alterar a chance do root do over (Seal of Binding - 1208, xml abaixo) e como nas outras packs acreditei que fosse somente alterar o "power", porem, o power da skill de acordo com o source code é 40, portanto, se eu aumentasse para 80 eu ja teria que notar, em tese, uma alteração na quantidade de vezes em que o debuff "entra", na pratica não foi isso que aconteceu, coloquei diversos valores (80, 99, 100, 200, 500....1000) e a chance não muda. Até aí tudo bem, fui atras de entender o problema no java, mas sou mt leigo, vasculhando toda a internet que o google me propos encontrei relatos do pessoal mandando alterar o arquivo Formulas.java e outros mandando alterar as handles (maneira mais facil, porem a grande maioria dos debuffs não possui uma handle própria, como é o caso do Cancel (Cancel.java)), abrindo o formulas.java e tentando entender o que o codigo determina, mudei algumas variaveis mas tbm não obtive sucesso, vou postar abaixo a xml da skill e o trecho do código ao qual eu acho que faz referência a este fator. XML: <skill id="1208" levels="17" name="Seal of Binding" enchantLevels1="30" enchantLevels2="30" > <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table> <table name="#ench2MpConsume"> 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 65 64 63 62 61 60 59 58 57 56 55 54 53 </table> <table name="#ench2mpInitialConsume"> 20 20 19 19 19 19 18 18 18 18 17 17 17 17 16 16 16 16 16 15 15 15 15 14 14 14 14 13 13 13 </table> <table name="#mpInitialConsume"> 7 8 9 11 12 13 14 16 16 17 18 18 19 19 20 20 21 </table> <table name="#mpConsume"> 27 32 36 42 47 52 56 61 64 66 69 71 74 76 78 80 82 </table> <table name="#magicLvl"> 25 30 35 40 44 48 52 56 58 60 62 64 66 68 70 72 74 </table> <table name="#ench1Power"> 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 48 48 48 49 49 49 50 </table> <set name="mpInitialConsume" val="#mpInitialConsume"/> <set name="mpConsume" val="#mpConsume"/> <set name="magicLvl" val="#magicLvl"/> <set name="power" val="40"/> <set name="lvlDepend" val="2"/> <set name="target" val="TARGET_AURA"/> <set name="skillRadius" val="200"/> <set name="reuseDelay" val="20000"/> <set name="hitTime" val="4000"/> <set name="skillType" val="ROOT"/> <set name="isMagic" val="true"/> <set name="isDebuff" val="true" /> <set name="operateType" val="OP_ACTIVE"/> <enchant1 name="power" val="#ench1Power"/> <enchant1 name="magicLvl" val="#enchantMagicLvl"/> <enchant2 name="magicLvl" val="#enchantMagicLvl"/> <enchant2 name="mpConsume" val="#ench2MpConsume"/> <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume"/> <for> <effect count="1" name="Root" time="30" val="0" stackOrder="1" stackType="root_magically"/> </for> </skill> Formula.java (trecho que eu acho que faz referência, pode ser que eu esteja fazendo bobagem dhuashdasd) public static boolean calcEffectSuccess(Creature attacker, Creature target, EffectTemplate effect, L2Skill skill, byte shld, boolean bss) { if (shld == SHIELD_DEFENSE_PERFECT_BLOCK) // perfect block return false; final L2SkillType type = effect.effectType; final double baseChance = effect.effectPower; if (type == null) return Rnd.get(10) < baseChance; if (type.equals(L2SkillType.CANCEL)) // CANCEL type lands always return true; final double statModifier = calcSkillStatModifier(type, target); final double skillModifier = calcSkillVulnerability(attacker, target, skill, type); final double mAtkModifier = getMatkModifier(attacker, target, skill, bss); final double lvlModifier = getLevelModifier(attacker, target, skill); final double rate = Math.max(1, Math.min((baseChance * statModifier * skillModifier * mAtkModifier * lvlModifier), 99)); if (Config.DEVELOPER) _log.info("calcEffectSuccess(): Name:" + skill.getName() + " eff.type:" + type.toString() + " power:" + baseChance + " statMod:" + String.format("%1.2f", statModifier) + " skillMod:" + String.format("%1.2f", skillModifier) + " mAtkMod:" + String.format("%1.2f", mAtkModifier) + " lvlMod:" + String.format("%1.2f", lvlModifier) + " total:" + String.format("%1.2f", rate) + "%"); return (Rnd.get(100) < rate); }
×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.