diff --git a/.gitignore b/.gitignore index f872263893..72982b47a8 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,10 @@ /tools/MapleIdRetriever/dist/ /tools/MapleIdRetriever/nbproject/private/ +/tools/MapleInvalidItemIdFetcher/build/ +/tools/MapleInvalidItemIdFetcher/dist/ +/tools/MapleInvalidItemIdFetcher/nbproject/private/ + /tools/MapleMapInfoRetriever/build/ /tools/MapleMapInfoRetriever/dist/ /tools/MapleMapInfoRetriever/nbproject/private/ @@ -51,4 +55,4 @@ /tools/MapleSkillMakerReagentIndexer/dist/ /tools/MapleSkillMakerReagentIndexer/nbproject/private/ -/out +/out \ No newline at end of file diff --git a/docs/feature_list.md b/docs/feature_list.md index 4881b9179a..44a1fe1bed 100644 --- a/docs/feature_list.md +++ b/docs/feature_list.md @@ -117,6 +117,7 @@ External tools: * MapleArrowFetcher - Updates min/max quantity dropped on all arrows drop data, calculations based on mob level and whether it's a boss or not. * MapleCouponInstaller - Retrieves coupon info from the WZ and makes a SQL table with it. The server will use that table to gather info regarding rates and intervals. * MapleIdRetriever - Two behaviors: generates a SQL table with relation (id, name) of the handbook given as input. Given a file with names, outputs a file with ids. +* MapleInvalidItemIdFetcher - Generates a file listing all inexistent itemid's currently laying on the DB. * MapleMapInfoRetriever - Basic tool for detecting missing info nodes on the map field structures (maps failing to have an info node on the WZ is an critical issue). * MapleMesoFetcher - Creates meso drop data for mobs with more than 4 items (thus overworld mobs), calculations based on mob level and whether it's a boss or not. * MapleMobBookIndexer - Generates a SQL table with all relations of cardid and mobid present in the mob book. diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt index bb14bc4e37..5ebe979a29 100644 --- a/docs/mychanges_ptbr.txt +++ b/docs/mychanges_ptbr.txt @@ -1,4 +1,4 @@ -NEW NPC SCRIPTS: +NEW NPC SCRIPTS: Coco -> 9000017 Agent E -> 9000036 @@ -29,8 +29,8 @@ Corrigi um bug no elevador. Consertei o script restante do Grendel. 25 --- 27 Julho 2015, -Criei uma variação do auto-assign, que leva em conta caracteristicas nos stats dos equips. -Consertei upar até 2 niveis por expGain(). +Criei uma variação do auto-assign, que leva em conta caracteristicas nos stats dos equips. +Consertei upar até 2 niveis por expGain(). OBS.: Dar um jeito de automatizar o script para colocar scrolls OP a venda NPC Coco (9000017) sera o novo vendedor de scrolls @@ -75,7 +75,7 @@ Correcao de bug que nao contabilizava queda de hp qdo um char loga em um mapa. Correcao de bug que nao retirava corretamente recursos de projeteis. 6 Novembro 2015, -Movimentação no ranking agora é contabilizado corretamente. +Movimentação no ranking agora é contabilizado corretamente. 11 Dezembro 2015, Correcao de bug que nao permitia ao tentar aceitar quest remotamente (lightbulb). @@ -95,7 +95,7 @@ Correcao de bug, onde clientes podiam congelar apos acessar o Cash Shop. Correcao de bug. 18 Julho 2016, -Bazaar NPC (Donation Box): venda automatica de um item designado e todos os itens que estiverem imediatamente após. +Bazaar NPC (Donation Box): venda automatica de um item designado e todos os itens que estiverem imediatamente após. Spindle: NPC scroll seller. 26 Julho 2016, @@ -104,197 +104,197 @@ Correcao de bug. 01 Agosto 2016, Correcao de scripts (Agent E, Donation Box), correcao de bug. -19 Março 2017, -Mimi: nova quest, envolvendo manipulações em ambos cliente e servidor. Tirado o aspecto global. -Não é possível alterar QuestInfo.img.xml do lado do cliente... +19 Março 2017, +Mimi: nova quest, envolvendo manipulações em ambos cliente e servidor. Tirado o aspecto global. +Não é possível alterar QuestInfo.img.xml do lado do cliente... -26 - 27 Março 2017, -Elaboração do IMG XML Parser, atuando complementarmente com o HaRepacker v4.2.2. -Correção de scripts de NPCs e quests. +26 - 27 Março 2017, +Elaboração do IMG XML Parser, atuando complementarmente com o HaRepacker v4.2.2. +Correção de scripts de NPCs e quests. -28 - 31 Março 2017, +28 - 31 Março 2017, Revamp dos WZs e XMLs referentes ao cliente MapleStory e ao servidor MapleSolaxia. -Inclusão de printStackTraces nos blocos catches do sistema. +Inclusão de printStackTraces nos blocos catches do sistema. 01 - 02 Abril 2017, -Correção de bug que impedia carregamento do mapa Singapore: Spooky World. -Adição dos cards de mob restantes no drop_data do DB. +Correção de bug que impedia carregamento do mapa Singapore: Spooky World. +Adição dos cards de mob restantes no drop_data do DB. 03 Abril 2017, -Inclusão de scripts para interceptar condições de corrida em eventos de viagem. -Correção no script do Mr. Do. -Sparta lv100 não surge mais em mob de nível baixo. -Diversas alterações corretivas em itens das tabelas drop_data e reactordrops no BD. +Inclusão de scripts para interceptar condições de corrida em eventos de viagem. +Correção no script do Mr. Do. +Sparta lv100 não surge mais em mob de nível baixo. +Diversas alterações corretivas em itens das tabelas drop_data e reactordrops no BD. 04 Abril 2017, -Correção na API sobre progresso das quests. +Correção na API sobre progresso das quests. 06 Abril 2017, -Tentativa de correção em casos de falta de respawn em certas areas do jogo. -Otimização de funções que lidam com popular ou despopular areas. +Tentativa de correção em casos de falta de respawn em certas areas do jogo. +Otimização de funções que lidam com popular ou despopular areas. 07 Abril 2017, -Correção nos métodos que completam quests, que não atribuíam corretamente itens que dependem de jobs. -Agora é possível variar atributos de mobs a serem spawnados (classes ChangeableStats, OverrideStats). -Removido ataques letais (1HP/1MP) de bosses em Dojo, que tornava impossível a completude do mesmo. -Adição de novos scripts de evento no jogo. +Correção nos métodos que completam quests, que não atribuíam corretamente itens que dependem de jobs. +Agora é possível variar atributos de mobs a serem spawnados (classes ChangeableStats, OverrideStats). +Removido ataques letais (1HP/1MP) de bosses em Dojo, que tornava impossível a completude do mesmo. +Adição de novos scripts de evento no jogo. 08 - 09 Abril 2017, -Adição de efeito: Zombify. -Adição da expedição BPQ. -Aprimoramento de métodos que usam acesso concorrente no projeto. -Diversas pequenas alterações nos WZs do cliente/servidor. +Adição de efeito: Zombify. +Adição da expedição BPQ. +Aprimoramento de métodos que usam acesso concorrente no projeto. +Diversas pequenas alterações nos WZs do cliente/servidor. 10 Abril 2017, -Navio de Crimson Balrogs agora são renderizados na tela, mesmo depois de mudar de mapas. -Adição de client alternativo: MapleStory sem Damage Cap. -Adição de expedições PiratePQ e EllinPQ. +Navio de Crimson Balrogs agora são renderizados na tela, mesmo depois de mudar de mapas. +Adição de client alternativo: MapleStory sem Damage Cap. +Adição de expedições PiratePQ e EllinPQ. 11 - 12 Abril 2017, -Implementação do PiratePQ. +Implementação do PiratePQ. 17 Abril 2017, -Correção de bugs envolvendo reactors no PiratePQ, e potencialmente em outros pontos também. +Correção de bugs envolvendo reactors no PiratePQ, e potencialmente em outros pontos também. 18 Abril 2017, -Adição de area boss: giant centipede. -Correção do evento Hak: viajantes não estavam sendo devidamente liberados no fim do evento. -Adição de documentação para portforwarding do sistema. +Adição de area boss: giant centipede. +Correção do evento Hak: viajantes não estavam sendo devidamente liberados no fim do evento. +Adição de documentação para portforwarding do sistema. 21 Abril 2017, -Implementação do EllinPQ. -Correção em módulos da classe ActivateItemReactor. -Atualização em diversos drops nos SQLs. +Implementação do EllinPQ. +Correção em módulos da classe ActivateItemReactor. +Atualização em diversos drops nos SQLs. 22 Abril 2017, -Várias correções envolvendo concorrências em propriedades do MapleCharacter. -Adição de constante USE_EQUIPMNT_LVLUP: dá pra nivelar qualquer equip até o nível desejado. -Algumas correções em quests no cliente e no servidor. -Correção de bug que gerava client stuck para Outlaw, quando chamava 2 summons e mudava de mapa. +Várias correções envolvendo concorrências em propriedades do MapleCharacter. +Adição de constante USE_EQUIPMNT_LVLUP: dá pra nivelar qualquer equip até o nível desejado. +Algumas correções em quests no cliente e no servidor. +Correção de bug que gerava client stuck para Outlaw, quando chamava 2 summons e mudava de mapa. 23 - 25 Abril 2017, -Introdução de métodos que auxiliam na normalização dos scripts para PQs. +Introdução de métodos que auxiliam na normalização dos scripts para PQs. Nova PQ: Boss Rush PQ. -Correção de situações nas PQs Ellin e Pirate. +Correção de situações nas PQs Ellin e Pirate. 26 Abril 2017, -Adição de Happyville, via Rooney. -Correção: mapas com "everlast" fazendo os itens dropados sumirem. -Correção: itens dropados na área dos NPCs Snowman não podem ser pegos por outros jogadores. -Correção: bug no par de comandos unban/ban não permitindo IP de cliente voltar a reconectar ao jogo. +Adição de Happyville, via Rooney. +Correção: mapas com "everlast" fazendo os itens dropados sumirem. +Correção: itens dropados na área dos NPCs Snowman não podem ser pegos por outros jogadores. +Correção: bug no par de comandos unban/ban não permitindo IP de cliente voltar a reconectar ao jogo. 29 Abril 2017, -Novos métodos para uso especializado em eventos caracteristicos de PQ. -Aprimoração da Boss Rush PQ: novo sistema de recompensas. +Novos métodos para uso especializado em eventos caracteristicos de PQ. +Aprimoração da Boss Rush PQ: novo sistema de recompensas. 01 Maio 2017, -Correção de bugs menores na BRPQ. -Refatoração de código pertinente aos Cash USEs para Pet. -Animação para Pets ao consumirem pet food. +Correção de bugs menores na BRPQ. +Refatoração de código pertinente aos Cash USEs para Pet. +Animação para Pets ao consumirem pet food. 02 Maio 2017, -Reestruturação e refatoração de código para PQs (funções específicas para uso em PQs). -Reimplementação da Kerning PQ. +Reestruturação e refatoração de código para PQs (funções específicas para uso em PQs). +Reimplementação da Kerning PQ. 03 Maio 2017, -Para quests que podem ser repetidas, adição de mensagem mencionando o tempo restante para recomeçá-la. +Para quests que podem ser repetidas, adição de mensagem mencionando o tempo restante para recomeçá-la. 04 - 05 Maio 2017, -Correção de bug no sistema de keybinding em casos onde certas mecanicas de jogo e itens não eram salvos devido a ids conflituosos com certas skills. -Finalização da reimplementação da Kerning PQ, com adição de novos mecanismos esperados em eventos/PQs. -Adição de barra de HP para bosses King Slime, Alishar e Snack Bar. +Correção de bug no sistema de keybinding em casos onde certas mecanicas de jogo e itens não eram salvos devido a ids conflituosos com certas skills. +Finalização da reimplementação da Kerning PQ, com adição de novos mecanismos esperados em eventos/PQs. +Adição de barra de HP para bosses King Slime, Alishar e Snack Bar. 08 Maio 2017, -Adição de funcionalidade para PQs/eventos: ao sair de evento, remove-se todos os itens listados como exclusivo para evento. -Diversas correções em mecânicas das PQs/eventos. -Sistema de lobbys para PQs agora. É possível instanciar mais de uma PQ em um mesmo channel. +Adição de funcionalidade para PQs/eventos: ao sair de evento, remove-se todos os itens listados como exclusivo para evento. +Diversas correções em mecânicas das PQs/eventos. +Sistema de lobbys para PQs agora. É possível instanciar mais de uma PQ em um mesmo channel. 12 - 13 Maio 2017, Nova ferramenta: monta uma tabela SQL que armazena id-nome de todos os itens descritos nos arquivos handbook e realiza buscas por nomes, retornando seus ids. -Implementação da LPQ. +Implementação da LPQ. 14 Maio 2017, Sistema de Lobbys na BRPQ: aloca lobbys disponiveis para times de acordo com o level medio dos jogadores. Sword Earrings: +30HP -> +1 W.att / Shield Earrings: +1ACC -> +1 M.att 15 Maio 2017, -Implementação da LMPQ. +Implementação da LMPQ. 16 Maio 2017, -Implementação da HPQ. +Implementação da HPQ. 17 Maio 2017, -Correção de bug com o item "Pet Name Tag", que não retirava o item após ser usado. -Correção em bug de uma quest (id 3927) de Ariant que envolve uma "parede". +Correção de bug com o item "Pet Name Tag", que não retirava o item após ser usado. +Correção em bug de uma quest (id 3927) de Ariant que envolve uma "parede". 18 - 19 Maio 2017, -Implementação das mecânicas do Horntail (spawn e kill). -Correção de bugs em casos onde valores de EXP ganhos excedem o limite máximo de um inteiro de 32bits. +Implementação das mecânicas do Horntail (spawn e kill). +Correção de bugs em casos onde valores de EXP ganhos excedem o limite máximo de um inteiro de 32bits. 20 Maio 2017, -Adição: mecânica de cadeia para GMs. +Adição: mecânica de cadeia para GMs. Em conjunto com vcoc, adicionaram-se comandos: !clearslot, !hide/unhide, !jail, !itemvac e !healmap. -Correção de bug em tabela SQL que continha informação imcompleta para com alguns registros de cards e respectivos mobs. +Correção de bug em tabela SQL que continha informação imcompleta para com alguns registros de cards e respectivos mobs. 21 Maio 2017, -Refatoração de código referente ao métodos de coleta de item pelos jogadores. -Retiradas inconsistências entre infos de mobbook e "cartão-de-visitas" do jogador. +Refatoração de código referente ao métodos de coleta de item pelos jogadores. +Retiradas inconsistências entre infos de mobbook e "cartão-de-visitas" do jogador. Foi retirado o gargalo no sistema sempre que jogador incorpora um novo card ao mobbook. Consertado bug em potencial ao tentar completar quest que requer item equipado. -Adição de scrolls: Scroll for cold protection, Scroll for spike for shoes. +Adição de scrolls: Scroll for cold protection, Scroll for spike for shoes. Consertado quest-evento Dollhouse. 23 - 24 Maio 2017, -Revamp na DB referente às Alliances. -Solução parcial ao problema das Guild Alliances. Pode-se criar uma, sair, expulsar e trocar ranks de jogadores. +Revamp na DB referente às Alliances. +Solução parcial ao problema das Guild Alliances. Pode-se criar uma, sair, expulsar e trocar ranks de jogadores. 25 Maio 2017, -Solução final ao problema das Guild Alliances. Todas as funcionalidades implementadas. +Solução final ao problema das Guild Alliances. Todas as funcionalidades implementadas. Registros de objetos MapleGuildCharacter agora esta sincronizado entre MapleCharacter's e MapleGuild's. 26 Maio 2017, -Correção e proteção a acessos concorrentes em mecânicas de comercialização entre jogadores. -Quests com limite de tempo agora expiram. Tempo restante também é mostrado na aba da quest. +Correção e proteção a acessos concorrentes em mecânicas de comercialização entre jogadores. +Quests com limite de tempo agora expiram. Tempo restante também é mostrado na aba da quest. Estrutura de dados que lida com status de quests do jogador agora foi protegido para acesso concorrente. -Montarias, tanto como pets, não ficam com "fome" com o tempo caso os flags PETS_NEVER_HUNGRY estejam setados. +Montarias, tanto como pets, não ficam com "fome" com o tempo caso os flags PETS_NEVER_HUNGRY estejam setados. 27 - 28 Maio 2017, -Reajuste de diretório dos scripts de NPCs, agora podendo ser acessados por todos os mundos. +Reajuste de diretório dos scripts de NPCs, agora podendo ser acessados por todos os mundos. Consertado casos onde jogador tenta acessar o Cash Shop, enquanto abertas janelas/abas interativas, ocasionando crash no jogo. -Resolvido alguns problemas com Player Shops, não retornado todos os itens ao jogador ao sair da loja. -Refatoração de código referente às diversas naturezas de fechamento das janelas interativas (minigames, messenger, npc/player shops, etc), agora utilizando um mesmo código. -Adição de restrição de acesso ao Cash Shop pelos jogadores presentes nas salas da Free Market (evitando assim fechamento de lojas de jogadores que tentem acessar o CS). +Resolvido alguns problemas com Player Shops, não retornado todos os itens ao jogador ao sair da loja. +Refatoração de código referente às diversas naturezas de fechamento das janelas interativas (minigames, messenger, npc/player shops, etc), agora utilizando um mesmo código. +Adição de restrição de acesso ao Cash Shop pelos jogadores presentes nas salas da Free Market (evitando assim fechamento de lojas de jogadores que tentem acessar o CS). 29 - 30 Maio 2017, -Implementação da estrutura referente aos cupons de UP EXP & drop. -MapleCouponInstaller: ferramenta desenvolvida para coleta de informações referentes ao rate e faixa de tempo que os cupons se ativam. +Implementação da estrutura referente aos cupons de UP EXP & drop. +MapleCouponInstaller: ferramenta desenvolvida para coleta de informações referentes ao rate e faixa de tempo que os cupons se ativam. 31 Maio 2017, Compilada uma nova tabela de EXP para equips no jogo. -Adicionado novo sistema de EXP e nivelamento para todos os equipamentos, para além daqueles de tipo Reverse e Timeless. +Adicionado novo sistema de EXP e nivelamento para todos os equipamentos, para além daqueles de tipo Reverse e Timeless. 01 Junho 2017, -Consertadas mecânicas principais para deletar character, possivelmente eliminando quaisquer resíduos do mesmo da DB. Requer que ENABLE_PIC esteja ativado para funcionar. +Consertadas mecânicas principais para deletar character, possivelmente eliminando quaisquer resíduos do mesmo da DB. Requer que ENABLE_PIC esteja ativado para funcionar. 02 Junho 2017, Otimizado e corrigido problemas de queda de desempenho ao atribuir lvups a itens com stats muito elevados, que ocasionavam crashs no servidor. -Adicionado funcionalidade USE_ULTRA_THREE_SNAILS. Valor mostrado não é condizente com o dano contabilizado (motivo: client edit). +Adicionado funcionalidade USE_ULTRA_THREE_SNAILS. Valor mostrado não é condizente com o dano contabilizado (motivo: client edit). 03 Junho 2017, Sistema de PIN agora completamente funcional. Corrigido sistema de ranking para agora mostrar player rankings de acordo com o mundo que ele se encontra. Adicionado barra de HP para o boss da BalrogPQ. -Equips apenas cosméticos (sem stats e/ou possibilidade de melhorar) não mais ganham EXP e, consequentemente, nivelam. +Equips apenas cosméticos (sem stats e/ou possibilidade de melhorar) não mais ganham EXP e, consequentemente, nivelam. 04 Junho 2017, -Otimizados o método de ganho de stats de equips ao nivelar. +Otimizados o método de ganho de stats de equips ao nivelar. Diversos ajustes finos nos comandos existentes. Adicionados novos comandos: proitem, seteqstats, buffme, buffmap. -Vários ajustes finos em alguns comandos. +Vários ajustes finos em alguns comandos. 05 Junho 2017, Novo NPC Skillbook announcer: Abdula. -Consertada a função que retorna se uma skill pertence ou não à árvore de habilidades do jogador. +Consertada a função que retorna se uma skill pertence ou não à árvore de habilidades do jogador. 06 Junho 2017, Corrigido command empowerme. @@ -302,87 +302,87 @@ Corrigidos exploits relacionados a algumas das skills do empowerme. Corrigido possivel loop infinito no sistema de EXP. 07 - 10 Junho 2017, -Implementação da OPQ. +Implementação da OPQ. 11 Junho 2017, -Correção de alguns bugs vindos com o commit da OPQ. -Incrementada a documentação referente aos métodos usados nos scripts de eventos. +Correção de alguns bugs vindos com o commit da OPQ. +Incrementada a documentação referente aos métodos usados nos scripts de eventos. 12 Junho 2017, -Correção de falha em criação de guilds, não atribuindo corretamente o título de mestre da guild ao criador. +Correção de falha em criação de guilds, não atribuindo corretamente o título de mestre da guild ao criador. 13 Junho 2017, -Mudança nas mecânicas de busca por portais ao transportar cada jogador: quando não for definido, escolhe-se um spawn point aleatoriamente. -Implementação de fila de espera para Guilds na GPQ (funciona em harmonia com o sistema de lobbys). +Mudança nas mecânicas de busca por portais ao transportar cada jogador: quando não for definido, escolhe-se um spawn point aleatoriamente. +Implementação de fila de espera para Guilds na GPQ (funciona em harmonia com o sistema de lobbys). 14 Junho 2017, -Correção de bug envolvendo abuso de conversa com NPC logo após o sinal de dispose, ocasionando frequentemente crashes no cliente. +Correção de bug envolvendo abuso de conversa com NPC logo após o sinal de dispose, ocasionando frequentemente crashes no cliente. 15 - 17 Junho 2017, -Correção de bug na função de atribuição de EXP, que não permitia receber valores negativos de EXP. -Implementação da GPQ. +Correção de bug na função de atribuição de EXP, que não permitia receber valores negativos de EXP. +Implementação da GPQ. 18 Junho 2017, -Correção de problema de concorrência referente às alterações nos rates do server. -Consertado bugs referentes ao comando "level", não reatribuindo rates apropriadamente. +Correção de problema de concorrência referente às alterações nos rates do server. +Consertado bugs referentes ao comando "level", não reatribuindo rates apropriadamente. 19 Junho 2017, -Consertado cupons não aparecendo apropriadamente na região de buffs. -Consertado alguns problemas de concorrência com cupons. -Consertado alguns problemas de concorrência com character buffs. +Consertado cupons não aparecendo apropriadamente na região de buffs. +Consertado alguns problemas de concorrência com cupons. +Consertado alguns problemas de concorrência com character buffs. 20 Junho 2017, -Definido um suporte para o esquema de expedições, tal como pode ser visto na CWKPQ. +Definido um suporte para o esquema de expedições, tal como pode ser visto na CWKPQ. 21 Junho 2017, -Corrigido vários aspectos de guilds e alliances, que operavam irregularmente no cliente. +Corrigido vários aspectos de guilds e alliances, que operavam irregularmente no cliente. Corrigido "player logged in" aparecendo sempre que jogador troca de canal. -MGC do jogador agora está sincronizado com o MGC da guild, não o contrário. +MGC do jogador agora está sincronizado com o MGC da guild, não o contrário. 23 - 26 Junho 2017, -Diversas reimplementações de mecânicas da CWKPQ, ainda trabalho em progresso. +Diversas reimplementações de mecânicas da CWKPQ, ainda trabalho em progresso. 27 Junho 2017, -Reestruturação parcial do esquema de footholds do stage 4 da CWKPQ. +Reestruturação parcial do esquema de footholds do stage 4 da CWKPQ. 28 - 29 Junho 2017, Acabamento final da CWKPQ. -Corrigido bug no esquema de recuperação de diretórios dos mapas, referenciados em String.wz. +Corrigido bug no esquema de recuperação de diretórios dos mapas, referenciados em String.wz. 30 Junho 2017, -Corrigido bug em mecânica de hpDec que permitia aos jogadores postergarem o efeito de decréscimo de HP. -Elaborada funcionalidade que permite salvar o "tempo até expirar" para quests com janela de tempo muito alta (as que usam "timeLimit2"). +Corrigido bug em mecânica de hpDec que permitia aos jogadores postergarem o efeito de decréscimo de HP. +Elaborada funcionalidade que permite salvar o "tempo até expirar" para quests com janela de tempo muito alta (as que usam "timeLimit2"). 03 Julho 2017, -Corrigido cliente não mostrando dano tomado pelo player se ele está com GM escondido para os outros GMs. -Corrigido cliente não mostrando dano dado pelo summon para outros players. +Corrigido cliente não mostrando dano tomado pelo player se ele está com GM escondido para os outros GMs. +Corrigido cliente não mostrando dano dado pelo summon para outros players. 07 - 09 Julho 2017, Corrigido parcialmente Mystic Doors. 10 - 11 Julho 2017, -Abertas novas quests para a região de Masteria (Phantom Woods / Crimsonwood mountain). -Codificados novos NPCs para a região de Masteria. +Abertas novas quests para a região de Masteria (Phantom Woods / Crimsonwood mountain). +Codificados novos NPCs para a região de Masteria. Adicionado drop data para mobs na Pendergast Mansion. -Corrigido Mystic Doors podendo ser lançadas em declives, potencialmente mal-colocando players em mapas-alvo. +Corrigido Mystic Doors podendo ser lançadas em declives, potencialmente mal-colocando players em mapas-alvo. Corrigido mount equipado por player de nivel baixo potencialmente crashando o client. 12 - 14 Julho 2017, -Corrigido quests onde player pode escolher recompensa não recompensando corretamente. +Corrigido quests onde player pode escolher recompensa não recompensando corretamente. Corrigido mapas em CBD/Singapore fazendo jogador "cair" do mapa. Adicionado no sql lojas de NPCs de Malaysia. Adicionado minidungeon "ByeBye station" (Malaysia). -Codificada expedição Scarlion/Targa. -Corrigido exploit com mini-dungeons (toda party, independente de localização atual, movida para dentro da MD). +Codificada expedição Scarlion/Targa. +Corrigido exploit com mini-dungeons (toda party, independente de localização atual, movida para dentro da MD). 15 Julho 2017, Adicionado area boss Snack Bar. Corrigido bugs com "buffmap" desconectando players em certos casos. 16 - 17 Julho 2017, -Adicionados HTPQ e expedição Horntail. +Adicionados HTPQ e expedição Horntail. Corrigido bugs com levelup de equipamentos provocando Integer overflow (stats negativos) nos clientes. -Corrigido ataque de Octopus (summon) não revelando direção a clientes de terceiros. +Corrigido ataque de Octopus (summon) não revelando direção a clientes de terceiros. Corrigido caso onde player usando chair morre sem desequipar a chair, levando clientes a mostrar chairs ao lado do player. Nova feature: cura extra de chairs de mapa. @@ -390,59 +390,59 @@ Nova feature: cura extra de chairs de mapa. Corrigido varias falhas de concorrencia na classe dos players. Corrigido reator das portas do dojo as vezes lancando nulls. Adicionado sistema de lobbys pro Dojo (multiplas partys podendo acessar salas do Dojo concorrentemente, com limite). -Adicionado proteção de acesso concorrente a certas propriedades dos players. +Adicionado proteção de acesso concorrente a certas propriedades dos players. 21 Julho 2017, Corrigido scripts dojang_Eff (agora aplicando para todos) e dojang_1st (agora somente para o primeiro player entrando no mapa). Dojo agora funcional, com sistema de lobbys aplicado. -Bosses no dojo agora dropam buffs e mobs poções. +Bosses no dojo agora dropam buffs e mobs poções. 22 - 23 Julho 2017, -Corrigido vários aspectos errôneos referente ao funcionamento das Mystic Doors. +Corrigido vários aspectos errôneos referente ao funcionamento das Mystic Doors. Comando adicionado: recharge. Adicionado/modificado alguns scripts de portais relacionados a mapas de skills de 4th job. 24 Julho 2017, -Adicionada mecânica permitindo quests entregarem itens mesmo que não haja slots vazios para garantir tal ação. +Adicionada mecânica permitindo quests entregarem itens mesmo que não haja slots vazios para garantir tal ação. 25 Julho 2017, -Adicionadas barras de HP para bosses da região de Zipangu/Showa. -Adicionada expedição para bosses de Showa. +Adicionadas barras de HP para bosses da região de Zipangu/Showa. +Adicionada expedição para bosses de Showa. Adicionados chairs a venda por NPCs ao longo de Maple World. 26 - 27 Julho 2017, -HP Bar de bosses agora aparecem de forma inteligente, de acordo com quem o jogador está alvejando. -Adicionadas expedições para Zakum e Pinkbean. +HP Bar de bosses agora aparecem de forma inteligente, de acordo com quem o jogador está alvejando. +Adicionadas expedições para Zakum e Pinkbean. 31 Julho 2017, Otimizado carregamento de skills ao iniciar o server. -Workaround em bosses tais como Riche e Ice Witch, anteriormente inderrotáveis. +Workaround em bosses tais como Riche e Ice Witch, anteriormente inderrotáveis. 01 Agosto 2017, -Adicionado drop data para tais bosses anteriormente inderrotáveis. +Adicionado drop data para tais bosses anteriormente inderrotáveis. 02 Agosto 2017, -Consertado bug em alguns eventos, relacionado à função isEventLeader. -Consertado quests não dando item certo apropriadamente, no caso de escolhas. +Consertado bug em alguns eventos, relacionado à função isEventLeader. +Consertado quests não dando item certo apropriadamente, no caso de escolhas. 03 Agosto 2017, Quests agora retiram itens antes de entregar recompensas. -Após a primeira inicialização, PQs inicializarão mais rápido, uma vez que há um sistema preparador de EIMs ativo. +Após a primeira inicialização, PQs inicializarão mais rápido, uma vez que há um sistema preparador de EIMs ativo. 04 - 05 Agosto 2017, Novo scroll: antibanish. Retorna ao local de onde foi banido pela ultima vez. -Resolvido alguns problemas de concorrência com MapleMapFactory. +Resolvido alguns problemas de concorrência com MapleMapFactory. Removidos drops inexistentes da DB. Resolvido problema com GMs de level alto recebendo bloqueio MWLB. 07 - 10 Agosto 2017, Adicionada Magatia PQ. -Resolvido bug no Dojo impedindo mesma party de tentar entrar de novo se saiu sem acabá-la. +Resolvido bug no Dojo impedindo mesma party de tentar entrar de novo se saiu sem acabá-la. Resolvido bugs nos scripts de 2nd job. 14 Agosto 2017, Resolvidos alguns bugs em alguns NPCs e mapa de Mu Lung. -Resolvido algumas inconsistências entre MapleCharacter <-> MaplePartyCharacter, ocasionando infos erroneas em Guilds. +Resolvido algumas inconsistências entre MapleCharacter <-> MaplePartyCharacter, ocasionando infos erroneas em Guilds. 15 Agosto 2017, Rebalanceado ganho de equip exp. @@ -450,203 +450,203 @@ Atualizado amostra na tela de lvup stats de equips para os jogadores. Reactors agora dropam itens de quest somente se o player possui a mesma ativada. 16 Agosto 2017, -Consertado corrente de quests da Temple of Time. Agora Pink Bean é alcancável. +Consertado corrente de quests da Temple of Time. Agora Pink Bean é alcancável. Adicionadas algumas chairs ao SQL. 17 Agosto 2017, Consertado Orbis Tower ainda aplicando DOT ao player, mesmo com bolha ativada. Adicionado Boss HPBar em Rombot. Consertado problema de keybinding para USEs com id batendo com id de skills fora da arvore de habilidades do jogador. -Consertado bug em scripts de alguns forjadores de itens que não verificava corretamente a quantidade de itens a tirar do jogador antes de fazer o item. +Consertado bug em scripts de alguns forjadores de itens que não verificava corretamente a quantidade de itens a tirar do jogador antes de fazer o item. Adidionado loots para mobs de Kerning Square. Consertado comandos de hair e face. 18 Agosto 2017, -Consertado skill Dispel não aparecendo efeito aos outros jogadores. +Consertado skill Dispel não aparecendo efeito aos outros jogadores. Atualizados alguns scripts de viagens transferindo jogadores a pontos aleatorios nas chegadas. Atualizado relatorio de drop data no monster book. 20 - 22 Agosto 2017, -Refatoradas algumas referências de identificação de itens, quando constantes, para ser realizados pelo classe estática ItemConstants ao invés da classe MapleItemInformationProvider. +Refatoradas algumas referências de identificação de itens, quando constantes, para ser realizados pelo classe estática ItemConstants ao invés da classe MapleItemInformationProvider. Adicionados door portals em Kerning City Square. -Refatorado acesso ao DB. Conexões agora podem ser lançadas em paralelo, com um limite máximo de conexões. Excedente espera até que um fique livre. +Refatorado acesso ao DB. Conexões agora podem ser lançadas em paralelo, com um limite máximo de conexões. Excedente espera até que um fique livre. Adicionado MESO como quest RequirementType. Quests agora podem checar por meso de um jogador. Mais drop data e HPBar em bosses. 23 Agosto 2017, Consertado problema com overflow ao scrollar equips resultando em equips com stats negativos. -Consertado pets não expirando corretamente (possivelmente crashando o cliente se no meio do jogo). +Consertado pets não expirando corretamente (possivelmente crashando o cliente se no meio do jogo). 24 - 25 Agosto 2017, -Acesso à DB usando HikariCP (melhor ganho em desempenho e código mais enxuto). +Acesso à DB usando HikariCP (melhor ganho em desempenho e código mais enxuto). Resolvido bugs com hatch egg e evolvePet. Adicionado energy bar e skills funcionais no Dojo. Consertado cash pet food retirando stats de mount em Character Info. 26 Agosto 2017, Consertado bug no sistema de exp de pets. -Refatorado sistema de trades, agora verificando por slots disponíveis similarmente ao sistema usado pelas rewards de quests. +Refatorado sistema de trades, agora verificando por slots disponíveis similarmente ao sistema usado pelas rewards de quests. 27 Agosto 2017, -Hero's Will retira a maioria dos diseases. Tonico retira slow além de weakness. +Hero's Will retira a maioria dos diseases. Tonico retira slow além de weakness. Consertado comando itemvac coletando quest itens e itens de outros jogadores. -Novo comando: cake. Chama cake boss com valor customizável de HP. +Novo comando: cake. Chama cake boss com valor customizável de HP. 28 Agosto 2017, Parties agora podem sair do Dojo sem precisar esperar o timeout expirar. Ao entrar no Dojo, jogadores tem energy points resetados pra zero. -Adicionado informação de NX ganho ao coletar cupons. +Adicionado informação de NX ganho ao coletar cupons. Pets em outros slots agora equipam devidamente. 31 Agosto 2017, -Refatorado autoassigner para focar nos stats primários a partir da avaliação do valor base do stat secundário com o 1º e 2º equips mais forte, ao invés de somente o 1º. +Refatorado autoassigner para focar nos stats primários a partir da avaliação do valor base do stat secundário com o 1º e 2º equips mais forte, ao invés de somente o 1º. Corrigido bug de acesso concorrente no sistema de rate cupons. 01 Setembro 2017, -Comando rates e equiplv agora usam visual ao invés de escrever no chat. -Corrigido NPC crafters crashando o cliente no caso onde o player não tem slot disponível para o novo item. +Comando rates e equiplv agora usam visual ao invés de escrever no chat. +Corrigido NPC crafters crashando o cliente no caso onde o player não tem slot disponível para o novo item. 02 Setembro 2017, -Refatorado sistema de schedules para mounts e pets. Agora o server passa a instanciar as chamadas às funções que definem "cansaço" nos animais, ao invés de instanciar uma task para cada. +Refatorado sistema de schedules para mounts e pets. Agora o server passa a instanciar as chamadas às funções que definem "cansaço" nos animais, ao invés de instanciar uma task para cada. 04 Setembro 2017, -Adicionado sistema de exclusão de itens (pet feature) no server. +Adicionado sistema de exclusão de itens (pet feature) no server. Party recebe update de HP de jogadores ao ressucitarem na city. -Flash Jump's levam o update necessário ao trocar de job. 3a pessoa agora pode ver a animação do FJ. +Flash Jump's levam o update necessário ao trocar de job. 3a pessoa agora pode ver a animação do FJ. 05 Setembro 2017, Corrigido mais alguns aspectos do autoassigner. -Corrigido itens saindo para fora do mapa. Nova posição do drop leva em conta as bordas da camera do jogador. +Corrigido itens saindo para fora do mapa. Nova posição do drop leva em conta as bordas da camera do jogador. 07 Setembro 2017, Adicionado Vega's Spell. -3rd job event agora possui tempo-limite e verifica se há jogadores já enfrentando o desafio. +3rd job event agora possui tempo-limite e verifica se há jogadores já enfrentando o desafio. 10 Setembro 2017, Protegido contra acesso concorrente classes MonsterBook e MapleInventory. Nova feature: autosaver. 11 Setembro 2017, -Consertado pet ignore não recuperando dados dos pets em alguns casos. +Consertado pet ignore não recuperando dados dos pets em alguns casos. 12 Setembro 2017, Explorer mount quest como evento, com timeout e expulsa o player se o hog morre. 14 - 15 Setembro 2017, Adicionado AmoriaPQ. -Consertado um problema em Inventory Sort que lançava exceção caso tivesse que ordenar vetores vazios. +Consertado um problema em Inventory Sort que lançava exceção caso tivesse que ordenar vetores vazios. 16 Setembro 2017, -Refatorado sistema de schedules para hired merchants. Agora o server passa a instanciar as chamadas às funções que fecham as hired merchants, ao invés de instanciar uma task para cada. +Refatorado sistema de schedules para hired merchants. Agora o server passa a instanciar as chamadas às funções que fecham as hired merchants, ao invés de instanciar uma task para cada. 18 - 21 Setembro 2017, Refatorado sistema de schedules para skill cooldowns e buff expiretimes. -Completamente reestruturado sistema de buffs. Nova flag permite permanência de buffs mais fortes mesmo que novos buffs surjam. +Completamente reestruturado sistema de buffs. Nova flag permite permanência de buffs mais fortes mesmo que novos buffs surjam. 22 Setembro 2017, Adicionado buffs para GPQ. -Consertado GPQ não iniciando devido a problemas com o script de evento. +Consertado GPQ não iniciando devido a problemas com o script de evento. 23 Setembro 2017, Adicionado Water of Life. -Consertado bug com sistema novo de buffs ao entrar no cash shop e em outros cenários onde não se detectava o melhor buff corretamente. +Consertado bug com sistema novo de buffs ao entrar no cash shop e em outros cenários onde não se detectava o melhor buff corretamente. 25 - 27 Setembro 2017, -Adicionado proteção de acesso concorrente a ações de Hired Merchant e Player Shop. -Corrigido alguns problemas com Hired Merchant não retornando a quantidade correta de itens. +Adicionado proteção de acesso concorrente a ações de Hired Merchant e Player Shop. +Corrigido alguns problemas com Hired Merchant não retornando a quantidade correta de itens. Adicionado Owl of Minerva. Corrigido um bug no sistema de checagem de slots. 28 Setembro 2017, -Adidionado wish tickets à AmoriaPQ. +Adidionado wish tickets à AmoriaPQ. 02 - 03 Outubro 2017, -Adicionado proteção de acesso concorrente em MapleParty. -Corrigido bug em sistema de distribuição de EXP para party. -Corrigido bug de overflow em distribuição de EXP. -Corrigido bug com scrolls não usando slots quando resultam em sucesso. +Adicionado proteção de acesso concorrente em MapleParty. +Corrigido bug em sistema de distribuição de EXP para party. +Corrigido bug de overflow em distribuição de EXP. +Corrigido bug com scrolls não usando slots quando resultam em sucesso. Refatorado sistema de schedules para disease expiretimes. 05 Outubro 2017, -Alterado level mínimo para receber exp de um mob de base level - 5 para - 20 (cliente destaca infos do mob em vermelho se o jogador está abaixo desta faixa). +Alterado level mínimo para receber exp de um mob de base level - 5 para - 20 (cliente destaca infos do mob em vermelho se o jogador está abaixo desta faixa). 07 Outubro 2017, Consertado players podendo criar party sendo level menor que 10. Players abaixo do level 10 agora podem convidar outros menores que 10 para party, se o servidor permitir. 09 Outubro 2017, -Adicionado proteção de acesso concorrente em invocação de scripts na EventInstanceManager. +Adicionado proteção de acesso concorrente em invocação de scripts na EventInstanceManager. Alterado tempo-limite em mapas da PiratePQ para seguir o determinado para cada mapa. 12 Outubro 2017, Corrigido alguns bugs com a PPQ. -Se houve sucesso usando white scroll, slot ainda é usado. +Se houve sucesso usando white scroll, slot ainda é usado. 15 Outubro 2017, -Corrigido Mini-dungeons não liberando os jogadores corretamente. Se player entra em outra sessão de MD antes de dar o timeout da primeira, o timeout leva efeito mesmo fora da sessão. +Corrigido Mini-dungeons não liberando os jogadores corretamente. Se player entra em outra sessão de MD antes de dar o timeout da primeira, o timeout leva efeito mesmo fora da sessão. Corrigido um bug/exploit que permitia stackar map chair recovery. -Corrigido um bug no inventário de CASH mesclando itens de mesmo id. -Adicionado contador de buscas por itens realizados pelos jogadores ao usar Owl. Sugestão de mais pesquisados na Owl implementado. +Corrigido um bug no inventário de CASH mesclando itens de mesmo id. +Adicionado contador de buscas por itens realizados pelos jogadores ao usar Owl. Sugestão de mais pesquisados na Owl implementado. 17 Outubro 2017, -Consertado Roaring Tiger Messenger aparecendo fora da tela ao final da animação. -Consertado bugs envolvendo ganho de EXP em party, para casos onde o level do mob alvo é bem maior que o do atacante/leecher. +Consertado Roaring Tiger Messenger aparecendo fora da tela ao final da animação. +Consertado bugs envolvendo ganho de EXP em party, para casos onde o level do mob alvo é bem maior que o do atacante/leecher. 20 - 21 Outubro 2017, -Bonus de Map chair rearranjado como uma skill, buffando jogador no momento que a codição de ativação é atingida. +Bonus de Map chair rearranjado como uma skill, buffando jogador no momento que a codição de ativação é atingida. Hired Merchant agora verifica devidamente se jogador possui slot antes de liberar a compra de um item. Pequeno conserto de acesso concorrente com o Storage. -Corrigido Map chair não removendo task corretamente caso jogador mude de mapa inesperadamente. +Corrigido Map chair não removendo task corretamente caso jogador mude de mapa inesperadamente. 22 Outubro 2017, Corrigido itens com ownership diferente sendo agrupados num mesmo slot, perdendo a referencia de dono. Implementado feature "Arrange Items" do MapleStorage. Ele faz os devidos agrupamentos de itens e organiza os itens do storage. -Corrigido storage mesclando itens que deveriam ser únicos (que não poderiam haver mais de um num mesmo slot, ou no inventário do jogador). +Corrigido storage mesclando itens que deveriam ser únicos (que não poderiam haver mais de um num mesmo slot, ou no inventário do jogador). Corrigido bug onde colocar um pet equipado no Cash Inventory e voltar ao jogo causaria crash no jogador. 23 - 24 Outubro 2017, -Adicionado proteção contra acesso concorrente em módulos de MapleMonster. +Adicionado proteção contra acesso concorrente em módulos de MapleMonster. Corrigido bug com Venom fazendo aparecer "dano 1" no DOT. -Corrigido sistema de EXP agora contabilizando devidamente HP curado pelo mob na distribuição do EXP. +Corrigido sistema de EXP agora contabilizando devidamente HP curado pelo mob na distribuição do EXP. 25 Outubro 2017, -Corrigido alguns problemas com as configs de inicialização do HikariCP. -Corrigido bug com inicialização de NPC scripts podendo desconectar o jogador se instaciado múltiplas vezes. +Corrigido alguns problemas com as configs de inicialização do HikariCP. +Corrigido bug com inicialização de NPC scripts podendo desconectar o jogador se instaciado múltiplas vezes. 26 Outubro 2017, -Adicionado feature de randomização dos stats ganhos de HP e MP. Stat ganho de MP leva na contabilização INT do jogador. +Adicionado feature de randomização dos stats ganhos de HP e MP. Stat ganho de MP leva na contabilização INT do jogador. 27 - 28 Outubro 2017, -Alterado fairness de alguns locks do server para atender em fila requisições de acesso ao código atômico. -Corrigido jogadores "pulando mapas" se estiverem jogando com Internet lenta e tentarem usar portais múltiplas vezes. -Corrigido storage não liberando devidamente o jogador em casos onde o mesmo não possa executar uma transação por falta de nível 15. -Corrigido sistema de buffs não computando buffs com valor zero não sendo apropriadamente ativados no jogador. +Alterado fairness de alguns locks do server para atender em fila requisições de acesso ao código atômico. +Corrigido jogadores "pulando mapas" se estiverem jogando com Internet lenta e tentarem usar portais múltiplas vezes. +Corrigido storage não liberando devidamente o jogador em casos onde o mesmo não possa executar uma transação por falta de nível 15. +Corrigido sistema de buffs não computando buffs com valor zero não sendo apropriadamente ativados no jogador. 29 Outubro 2017, -Adicionado drop data para diversas versões de Fairy, Yetis e Pepes. -Adicionado proteção contra acesso concorrente em MapleGuild e MapleAlliance. +Adicionado drop data para diversas versões de Fairy, Yetis e Pepes. +Adicionado proteção contra acesso concorrente em MapleGuild e MapleAlliance. 30 Outubro 2017, Adicionado drop data de mesos para o restante dos mobs que dropam 4 ou mais itens. 31 Outubro 2017, Corrigido bug ao mudar classe de Aran desconectando o jogador. -Corrigido drop data de flechas agora dropando bundles ao invés de uma quantidade unitária. +Corrigido drop data de flechas agora dropando bundles ao invés de uma quantidade unitária. 01 - 02 Novembro 2017, -Modificado licenças do projeto. +Modificado licenças do projeto. Corrigido um bug no sistema que calcula slotMax dos itens. -Corrigido npcs/portais/reatores e outros mecanismos enviando jogadores para spawnpoints aleatórios onde não deveria. -Corrigido buff Wind Walk não cancelando quando atacando. +Corrigido npcs/portais/reatores e outros mecanismos enviando jogadores para spawnpoints aleatórios onde não deveria. +Corrigido buff Wind Walk não cancelando quando atacando. 03 Novembro 2017, Modificado custom questline: recompensa deixa de ser PAC com chaos scrolls p/ map chair skill com itens de Maple. Adicionado quest de Horus' Eye. -Consertado Wind Walk agora atuando corretamente, não uma outra versão de Dark Sight. +Consertado Wind Walk agora atuando corretamente, não uma outra versão de Dark Sight. 04 Novembro 2017, -Corrigido WK Charge skills não sobrescrevendo uma à outra ao ativar as skills. -Implementado nova ferramenta: MapleQuestItemFetcher. Ela vasculha a DB e os XMLs em busca de informações perdidas quanto aos itens de quest. +Corrigido WK Charge skills não sobrescrevendo uma à outra ao ativar as skills. +Implementado nova ferramenta: MapleQuestItemFetcher. Ela vasculha a DB e os XMLs em busca de informações perdidas quanto aos itens de quest. 05 Novembro 2017, Adicionado sistema de level cap para jobs correntes. @@ -654,116 +654,124 @@ Revisto acesso concorrente sobre o componente EM da classe EIM. 07 Novembro 2017, Refatorado esquema de schedules por toda a source, diminuindo drasticamente as chamadas ao TimerManager. -Refatorado algumas chamadas à DB, busca somente aquilo que é necessário. +Refatorado algumas chamadas à DB, busca somente aquilo que é necessário. 08 - 09 Novembro 2017, Adicionado packet para extra slot pendant. -Corrigido possível bug em MapleMapFactory. -Modificado todas as DB tables agora utilizando InnoDB (ganhos do MyISAM em contraste se tornou ínfimo, para casos críticos). +Corrigido possível bug em MapleMapFactory. +Modificado todas as DB tables agora utilizando InnoDB (ganhos do MyISAM em contraste se tornou ínfimo, para casos críticos). 11 Novembro 2017, -Adicionado proteção contra acesso concorrente em scripts de portais, eliminando possíveis inconsistencias por script. +Adicionado proteção contra acesso concorrente em scripts de portais, eliminando possíveis inconsistencias por script. Implementado as skills de 2o job de Aran nas questlines. Corrigido GM shop sendo liberado pra jogadores em Amherst. 13 - 14 Novembro 2017, -Modificado ID de jogador agora começando em 20,000,000, evitando assim clash de id de jogador (que tb representa seu OID) com OIDs de objetos do mapa. -Nova ferramenta: MapleSkillMakerFetcher. A ferramenta lê info pertinente às descrições de itens feitos pelo Maker e as compila numa tabela, pra ser usada na DB. +Modificado ID de jogador agora começando em 20,000,000, evitando assim clash de id de jogador (que tb representa seu OID) com OIDs de objetos do mapa. +Nova ferramenta: MapleSkillMakerFetcher. A ferramenta lê info pertinente às descrições de itens feitos pelo Maker e as compila numa tabela, pra ser usada na DB. Corrigida questline de mounts e skills de Aran. 15 Novembro 2017, Implementado sistema de auditoria de deadlocks: ThreadTracker. Corrigido bug onde jogadores recebem dano de mobs de mapas anteriores (que acarretavam em problemas com OID e natureza dos objetos). -Corrigido alguns problemas com exceção sendo lançada ao tentar desligar o server. +Corrigido alguns problemas com exceção sendo lançada ao tentar desligar o server. 16 - 17 Novembro 2017, -Rearranjado ID de jogador agora começando de 1 mais uma vez. Espera-se que não haja mais de 1bil de jogadores registrados. -Corrigido timer de quest não saindo do cliente quando dado o termino bem-sucedido da quest. +Rearranjado ID de jogador agora começando de 1 mais uma vez. Espera-se que não haja mais de 1bil de jogadores registrados. +Corrigido timer de quest não saindo do cliente quando dado o termino bem-sucedido da quest. Corrigido MapleArrowFetcher atribuindo valores iguais para min e max ranges. Max deve sempre ser maior que min. -Corrigido bug no ThreadTracker não mostrando os últimos locks capturados pelas threads corretamente. +Corrigido bug no ThreadTracker não mostrando os últimos locks capturados pelas threads corretamente. 18 - 20 Novembro 2017, Implementado items sendo dropados de reatores intervaladamente, GMS-like. -Adicionado informação ao jogador que tentar completar uma quest com item necessário equipado. -Nova ferramenta: MapleMapInfoRetriever. Detecção básica de mapas com sem nó de info em sua estrutura WZ. +Adicionado informação ao jogador que tentar completar uma quest com item necessário equipado. +Nova ferramenta: MapleMapInfoRetriever. Detecção básica de mapas com sem nó de info em sua estrutura WZ. Adicionado scripts para Power B. Fore npc. 21 - 23 Novembro 2017, -Implementado Maker skill (métodos de packets pelo menos já existiam). +Implementado Maker skill (métodos de packets pelo menos já existiam). Corrigido bug em MapleSkillMakerFetcher, atualizado DB com as tabelas normalizadas. -Nova ferramenta: MapleSkillMakerReagentIndexer. Agrupa no banco de dados informação pertinente aos reagentes do Maker, para serem usados pelo server. +Nova ferramenta: MapleSkillMakerReagentIndexer. Agrupa no banco de dados informação pertinente aos reagentes do Maker, para serem usados pelo server. Quests nivelando/utilizando o Maker funcionam corretamente agora. 25 - 26 Novembro 2017, -Implementado região de Neo City. Progressão do jogo e sistema de quests fluem normalmente agora. -Corrigido um bug onde mobs de PQ não atribuem experiência aos jogadores por serem "baixo nível". +Implementado região de Neo City. Progressão do jogo e sistema de quests fluem normalmente agora. +Corrigido um bug onde mobs de PQ não atribuem experiência aos jogadores por serem "baixo nível". Corrigido um bug de deadlock com respawn de reatores. -Reatores que consomem drops agora checam por possíveis drops ao se registrar no mapa (seja por respawn ou primeiro spawn). -Aprimorado mecânicas da EllinPQ. +Reatores que consomem drops agora checam por possíveis drops ao se registrar no mapa (seja por respawn ou primeiro spawn). +Aprimorado mecânicas da EllinPQ. 28 Novembro 2017, -Diversas refatorações de classes no projeto. +Diversas refatorações de classes no projeto. Novo release: HeavenMS. 02 Dezembro 2017, -Adicionado informação de classes nos NPCs para os 2o jobs de Explorer. +Adicionado informação de classes nos NPCs para os 2o jobs de Explorer. 04 Dezembro 2017, -Adicionado quests para a região de Nihal Desert. -Nova ferramenta: MapleQuestMesoFetcher. Busca nos WZs por checagens perdidas em quests onde se precisa pagar uma certa quantia para completá-las. +Adicionado quests para a região de Nihal Desert. +Nova ferramenta: MapleQuestMesoFetcher. Busca nos WZs por checagens perdidas em quests onde se precisa pagar uma certa quantia para completá-las. 07 Dezembro 2017, -Reatores que buscam itens no chão agora buscam por itens ao mudar de estado. +Reatores que buscam itens no chão agora buscam por itens ao mudar de estado. Corrigido 3o job de Cygnus. 08 - 09 Dezembro 2017, -Removido UI que aponta erroneamente "Stat Upgrade" nos níveis 15, 20, 25 e 30. -Adicionado comando "droplimit", cuja funcionalidade é informar ao jogador a quantidade de drops no mapa em contraste com o limite permitido. +Removido UI que aponta erroneamente "Stat Upgrade" nos níveis 15, 20, 25 e 30. +Adicionado comando "droplimit", cuja funcionalidade é informar ao jogador a quantidade de drops no mapa em contraste com o limite permitido. 11 - 12 Dezembro 2017, -Resolvido bug onde contador do drops do mapa não atualizaria seu valor em casos onde reatores consomem itens ou ao se aplicar comandos como "cleardrops". -Corrigido server enviando packets com BroadcastMessage somente para o world 0, ao invés de ser para o world alvo. -MapleQuestItemFetcher agora mostra quests já expiradas no relatório. +Resolvido bug onde contador do drops do mapa não atualizaria seu valor em casos onde reatores consomem itens ou ao se aplicar comandos como "cleardrops". +Corrigido server enviando packets com BroadcastMessage somente para o world 0, ao invés de ser para o world alvo. +MapleQuestItemFetcher agora mostra quests já expiradas no relatório. 17 - 19 Dezembro 2017, Implementado New Years card. -Adicionado informação, destinado ao dono da loja, de compra de itens dos Player Shops e dos Hired Merchants. +Adicionado informação, destinado ao dono da loja, de compra de itens dos Player Shops e dos Hired Merchants. Resolvido um problema com overflow em Player Shops. 20 - 22 Dezembro 2017, Resolvido problema com itens ainda saindo das bordas de alguns mapas em certos casos. Corrigido Enhanced Crafting com a Agent E rodando probabilidade do Chaos Scroll ao fazer o item. -Resolvido um problema com certos mapas não possuindo minimapa fazendo drops cairem sempre na posição x = 0. +Resolvido um problema com certos mapas não possuindo minimapa fazendo drops cairem sempre na posição x = 0. Corrigido pets reduzindo fullness enquanto no Cash Shop ou no MTS. -Corrigido bug em skills de PQ/Dojo para players que tem skill level = 0. Espera-se que todos possam "ativá-las". -Modificado mapa de fora do dojo agora resetando dojo energy, evitando assim possível exploit com skills do dojo. -Corrigido exploit em dojos permitindo que jogadores acessem mapas de estágios avançados se não progrediram juntos nos estágios anteriores. -Pontos agora estão sendo corretamente atribuídos aos jogadores que estão sendo automaticamente levados para o próximo rest point (quando um jogador passa pelo último portal de cada etapa). -Corrigido jogador comprando itens one-of-a-kind dos Hired Merchants quando não se pode obtê-los. +Corrigido bug em skills de PQ/Dojo para players que tem skill level = 0. Espera-se que todos possam "ativá-las". +Modificado mapa de fora do dojo agora resetando dojo energy, evitando assim possível exploit com skills do dojo. +Corrigido exploit em dojos permitindo que jogadores acessem mapas de estágios avançados se não progrediram juntos nos estágios anteriores. +Pontos agora estão sendo corretamente atribuídos aos jogadores que estão sendo automaticamente levados para o próximo rest point (quando um jogador passa pelo último portal de cada etapa). +Corrigido jogador comprando itens one-of-a-kind dos Hired Merchants quando não se pode obtê-los. 23 - 24 Dezembro 2017, -Corrigido checagem de itens no inventário não verificando apropriadamente itens one-of-a-kind. -Adicionado e corrigido vários aspectos do Duey. Descoberto opcodes e respostas de ações de jogadores. +Corrigido checagem de itens no inventário não verificando apropriadamente itens one-of-a-kind. +Adicionado e corrigido vários aspectos do Duey. Descoberto opcodes e respostas de ações de jogadores. Corrigido autopot agora contabilizando bonus de HP e MP dos equipamentos nos stats a serem checados. Adicionado Ereve na lista de plataformas de Orbis. 27 Dezembro 2017, -Corrigido AP reset modificando stats de forma errônea. +Corrigido AP reset modificando stats de forma errônea. 03 Janeiro 2018, -Corrigido item megafone permitindo o display de equipamentos não-comercializáveis, mesmo marcados como Untradeable. +Corrigido item megafone permitindo o display de equipamentos não-comercializáveis, mesmo marcados como Untradeable. 10 - 13 Janeiro 2018, -Incrementado portal de MK Castle agora permitindo uso dos 2 itens possíveis. -Resolvido alguns logs de erros disparados por mapas nulos no código-fonte. +Incrementado portal de MK Castle agora permitindo uso dos 2 itens possíveis. +Resolvido alguns logs de erros disparados por mapas nulos no código-fonte. Resolvido pequenos problemas de volatidade (nulos) nas referencias ao jogador em alguns handlers. Corrigido alguns problemas com copyright em alguns arquivos. -Corrigido exploit com refinadores de minerais permitindo números iguais ou menores que zero como entrada. +Corrigido exploit com refinadores de minerais permitindo números iguais ou menores que zero como entrada. 14 - 15 Janeiro 2018, Melhorado pet autopot, agora utilizando os outros slots do mesmo item caso o slot alvo tenha sido completamente usado. Pet autopot agora considera o reuso de pots que fornecem ganho de porcentagem de HP ou MP. -Diminuídas levemente as chances de dropar os itens Moon Rock e Star Rock. -Função de listagem de itens no inventário agora ordena os itens de acordo com posição dos mesmos. +Diminuídas levemente as chances de dropar os itens Moon Rock e Star Rock. +Função de listagem de itens no inventário agora ordena os itens de acordo com posição dos mesmos. Incrementado diversos aspectos das questlines das doorways em Victoria Island. -Melhorado mecânica de convite para Alliances agora utilizando o balão apropriado, similar aos utilizados para Party e Guild. \ No newline at end of file +Melhorado mecânica de convite para Alliances agora utilizando o balão apropriado, similar aos utilizados para Party e Guild. + +02 - 03 Fevereiro 2018, +Corrigido bug no servidor que situacionalmente eliminava completamente os dados salvos de mounts. +Corrigido itemid inválidos nos drops da DB. +Adicionado quest rate (multiplicador de ganhos ao completar quests). +Pequeno ajuste na área de alcançe dos drops no mapa. Espera-se que os drops agora não caiam fora do mapa em grande quantidade. +Nova ferramenta: MapleInvalidItemIdFetcher. Busca no DB por todos os itemids inválidos e os lista em um arquivo. +Atualizado lista de drops no monster book. \ No newline at end of file diff --git a/scripts/npc/commands.js b/scripts/npc/commands.js index 502116b747..bdd23d304a 100644 --- a/scripts/npc/commands.js +++ b/scripts/npc/commands.js @@ -83,7 +83,7 @@ function writeSolaxiaCommandsLv4() { //SuperGM addCommand("exprate", ""); addCommand("mesorate", ""); addCommand("droprate", ""); - addCommand("bossdroprate", ""); + addCommand("questrate", ""); addCommand("itemvac", ""); addCommand("forcevac", ""); addCommand("zakum", ""); diff --git a/sql/db_database.sql b/sql/db_database.sql index fbf92e00c3..da8a669121 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -10516,8 +10516,8 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (10294, 9500135, 4031170, 1, 1, 7100, 500000), (10295, 9500136, 4031170, 1, 1, 7100, 500000), (10296, 9500137, 4031170, 1, 1, 7100, 500000), -(10297, 7130300, 4031171, 1, 1, 7101, 400000), -(10298, 7160000, 4031171, 1, 1, 7101, 400000), +(10297, 7130300, 4031171, 1, 1, 7101, 100000), +(10298, 7160000, 4031171, 1, 1, 7101, 100000), (10299, 6130200, 4031175, 1, 1, 7101, 300000), (10300, 6230300, 4031175, 1, 1, 7101, 300000), (10301, 6230400, 4031175, 1, 1, 7101, 300000), @@ -16132,7 +16132,7 @@ INSERT INTO `monstercarddata` (`id`, `cardid`, `mobid`) VALUES (116, 2383003, 4130102), (117, 2383004, 4130103), (118, 2383006, 4230505), -(119, 2383007, 9300255), +(119, 2383007, 4110302), (120, 2383008, 4230102), (121, 2383009, 4230104), (122, 2383010, 4230506), diff --git a/sql/db_drops.sql b/sql/db_drops.sql index f476485896..5303bcdd24 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -14497,8 +14497,8 @@ USE `heavenms`; (9301003, 4130004, 1, 1, 0, 3000), (7160000, 4131007, 1, 1, 0, 3000), (9301003, 4131007, 1, 1, 0, 3000), -(7160000, 4031171, 1, 1, 0, 7000), -(9301003, 4031171, 1, 1, 0, 7000), +(7160000, 4031171, 1, 1, 7101, 100000), +(9301003, 4031171, 1, 1, 7101, 100000), (7160000, 2000006, 1, 1, 0, 40000), (9301003, 2000006, 1, 1, 0, 40000), (7160000, 2000002, 1, 1, 0, 40000), @@ -14894,7 +14894,7 @@ USE `heavenms`; (8120105, 1472031, 1, 1, 0, 700), (8120105, 1482010, 1, 1, 0, 700), (7130300, 4000148, 1, 1, 0, 200000), -(7130300, 4031171, 1, 1, 0, 7000), +(7130300, 4031171, 1, 1, 7101, 100000), (7130300, 2000004, 1, 1, 0, 40000), (7130300, 2000005, 1, 1, 0, 40000), (7130300, 2002004, 1, 1, 0, 10000), @@ -20008,10 +20008,14 @@ USE `heavenms`; (9400613, 4010006, 1, 1, 0, 7000), (9400613, 4020002, 1, 1, 0, 7000), (9400613, 1082258, 1, 1, 0, 5000), -(9400613, 1072421, 1, 1, 0, 5000); +(9400613, 1072421, 1, 1, 0, 5000), +(4110302, 2383007, 1, 1, 0, 8000); # (dropperid, itemid, minqty, maxqty, questid, chance) + # delete all inexistent itemids + DELETE FROM temp_data WHERE itemid=2290109; + # delete item drops from other mobs named Freezer DELETE FROM temp_data WHERE dropperid=9300090; DELETE FROM temp_data WHERE dropperid=9420501; diff --git a/src/client/MapleClient.java b/src/client/MapleClient.java index eacf752589..786876a1f7 100644 --- a/src/client/MapleClient.java +++ b/src/client/MapleClient.java @@ -914,7 +914,7 @@ public class MapleClient { worlda.removePlayer(player); player.saveCooldowns(); - player.saveToDB(); + player.saveToDB(true); if (player != null) {//no idea, occur :( player.empty(false); } diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java index 579224701a..11bbea503b 100644 --- a/src/client/command/Commands.java +++ b/src/client/command/Commands.java @@ -518,8 +518,10 @@ public class Commands { if(player.getCouponDropRate() != 1) showMsg += "Coupon DROP Rate: #k" + player.getCouponDropRate() + "x#k" + "\r\n"; showMsg += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n"; - showMsg += "\r\n" + "#eBOSSDROP RATE#n" + "\r\n"; - showMsg += "Server BOSSDROP Rate: #e#b" + c.getWorldServer().getBossDropRate() + "x#k#n" + "\r\n"; + if(ServerConstants.USE_QUEST_RATE) { + showMsg += "\r\n" + "#eQUEST RATE#n" + "\r\n"; + showMsg += "Server QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n"; + } player.showHint(showMsg); break; @@ -529,7 +531,7 @@ public class Commands { showMsg_ += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + "\r\n"; showMsg_ += "MESO Rate: #e#b" + player.getMesoRate() + "x#k#n" + "\r\n"; showMsg_ += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n"; - showMsg_ += "BOSSDROP Rate: #e#b" + c.getWorldServer().getBossDropRate() + "x#k#n" + "\r\n"; + if(ServerConstants.USE_QUEST_RATE) showMsg_ += "QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n"; player.showHint(showMsg_); break; @@ -2252,15 +2254,15 @@ public class Commands { c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Drop Rate has been changed to " + droprate + "x.")); break; - case "bossdroprate": + case "questrate": if (sub.length < 2){ - player.yellowMessage("Syntax: !bossdroprate "); + player.yellowMessage("Syntax: !questrate "); break; } - int bossdroprate = Math.max(Integer.parseInt(sub[1]), 1); - c.getWorldServer().setBossDropRate(bossdroprate); - c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Boss Drop Rate has been changed to " + bossdroprate + "x.")); + int questrate = Math.max(Integer.parseInt(sub[1]), 1); + c.getWorldServer().setQuestRate(questrate); + c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Quest Rate has been changed to " + questrate + "x.")); break; case "itemvac": diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java index 384232cf40..37c0d5daff 100644 --- a/src/constants/ServerConstants.java +++ b/src/constants/ServerConstants.java @@ -70,12 +70,13 @@ public class ServerConstants { public static final boolean USE_ERASE_PET_ON_EXPIRATION = false;//Forces pets to be removed from inventory when expire time comes, rather than converting it to a doll. public static final boolean USE_BUFF_MOST_SIGNIFICANT = true; //When applying buffs, the player will stick with the highest stat boost among the listed, rather than overwriting stats. public static final boolean USE_MAKER_FEE_HEURISTICS = true; //Apply compiled values for stimulants and reagents into the Maker fee calculations (max error revolves around 50k mesos). Set false to use basic constant values instead (results are never higher than requested by the client-side). + public static final boolean USE_QUEST_RATE = false; //Exp/Meso gained by quests uses fixed server exp/meso rate times quest rate as multiplier, instead of player rates. //Server Rates And Experience public static final int EXP_RATE = 10; public static final int MESO_RATE = 10; public static final int DROP_RATE = 10; - public static final int BOSS_DROP_RATE = 20; + public static final int QUEST_RATE = 5; //Multiplier for Exp & Meso gains when completing a quest. Only available when USE_QUEST_RATE is true. Stacks with server Exp & Meso rates. public static final double EQUIP_EXP_RATE = 10.0; //Rate for equipment exp gain, grows linearly. Set 1.0 for default (about 100~200 same-level range mobs killed to pass equip from level 1 to 2). public static final double PARTY_BONUS_EXP_RATE = 1.0; //Rate for the party exp reward. diff --git a/src/net/server/CreateINI.java b/src/net/server/CreateINI.java index b60cd4021a..df97a58a4c 100644 --- a/src/net/server/CreateINI.java +++ b/src/net/server/CreateINI.java @@ -60,8 +60,8 @@ public class CreateINI { sb.append("mesorate").append(b).append("=").append( Integer.parseInt(con.readLine(" Meso rate: "))).append("\r\n"); - sb.append("bossdroprate").append(b).append("=").append( - Integer.parseInt(con.readLine(" Boss drop rate: "))).append("\r\n"); + sb.append("questrate").append(b).append("=").append( + Integer.parseInt(con.readLine(" Quest rate: "))).append("\r\n"); System.out.println(nextline); sb.append("\r\n"); diff --git a/src/net/server/Server.java b/src/net/server/Server.java index fd2ecf5c07..79969d3446 100644 --- a/src/net/server/Server.java +++ b/src/net/server/Server.java @@ -335,7 +335,7 @@ public class Server implements Runnable { ServerConstants.EXP_RATE, ServerConstants.DROP_RATE, ServerConstants.MESO_RATE, - ServerConstants.BOSS_DROP_RATE); + ServerConstants.QUEST_RATE); worldRecommendedList.add(new Pair<>(i, p.getProperty("whyamirecommended" + i))); worlds.add(world); diff --git a/src/net/server/channel/handlers/MoveDragonHandler.java b/src/net/server/channel/handlers/MoveDragonHandler.java index b8b08bd529..c806b82d25 100644 --- a/src/net/server/channel/handlers/MoveDragonHandler.java +++ b/src/net/server/channel/handlers/MoveDragonHandler.java @@ -32,7 +32,6 @@ import tools.data.input.SeekableLittleEndianAccessor; public class MoveDragonHandler extends AbstractMovementPacketHandler { - @Override public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { final MapleCharacter chr = c.getPlayer(); diff --git a/src/net/server/channel/handlers/MovePlayerHandler.java b/src/net/server/channel/handlers/MovePlayerHandler.java index 78a4c758ca..6e6f4aa811 100644 --- a/src/net/server/channel/handlers/MovePlayerHandler.java +++ b/src/net/server/channel/handlers/MovePlayerHandler.java @@ -23,12 +23,12 @@ package net.server.channel.handlers; import client.MapleClient; import java.util.List; -import net.server.channel.handlers.AbstractMovementPacketHandler; import server.movement.LifeMovementFragment; import tools.MaplePacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MovePlayerHandler extends AbstractMovementPacketHandler { + @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { slea.skip(9); final List res = parseMovement(slea); diff --git a/src/net/server/channel/handlers/MoveSummonHandler.java b/src/net/server/channel/handlers/MoveSummonHandler.java index 78117909d2..1e5762705f 100644 --- a/src/net/server/channel/handlers/MoveSummonHandler.java +++ b/src/net/server/channel/handlers/MoveSummonHandler.java @@ -21,7 +21,6 @@ */ package net.server.channel.handlers; -import net.server.channel.handlers.AbstractMovementPacketHandler; import java.awt.Point; import java.util.Collection; import java.util.List; @@ -33,6 +32,7 @@ import tools.MaplePacketCreator; import tools.data.input.SeekableLittleEndianAccessor; public final class MoveSummonHandler extends AbstractMovementPacketHandler { + @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { int oid = slea.readInt(); Point startPos = new Point(slea.readShort(), slea.readShort()); diff --git a/src/net/server/world/World.java b/src/net/server/world/World.java index f02e6bef1d..5b1e8c0e55 100644 --- a/src/net/server/world/World.java +++ b/src/net/server/world/World.java @@ -77,7 +77,7 @@ import tools.locks.MonitoredLockType; */ public class World { - private int id, flag, exprate, droprate, mesorate, bossdroprate; + private int id, flag, exprate, droprate, mesorate, questrate; private String eventmsg; private List channels = new ArrayList<>(); private Map messengers = new HashMap<>(); @@ -114,14 +114,14 @@ public class World { private ScheduledFuture charactersSchedule; - public World(int world, int flag, String eventmsg, int exprate, int droprate, int mesorate, int bossdroprate) { + public World(int world, int flag, String eventmsg, int exprate, int droprate, int mesorate, int questrate) { this.id = world; this.flag = flag; this.eventmsg = eventmsg; this.exprate = exprate; this.droprate = droprate; this.mesorate = mesorate; - this.bossdroprate = bossdroprate; + this.questrate = questrate; runningPartyId.set(1); runningMessengerId.set(1); @@ -215,12 +215,12 @@ public class World { } } - public int getBossDropRate() { - return bossdroprate; + public int getQuestRate() { + return questrate; } - public void setBossDropRate(int bossdrop) { - this.bossdroprate = bossdrop; + public void setQuestRate(int quest) { + this.questrate = quest; } public PlayerStorage getPlayerStorage() { diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index 587c175476..4911053548 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -2610,7 +2610,7 @@ public class MapleMap { } public void setMapPointBoundings(int px, int py, int h, int w) { - mapArea.setBounds(px + 45, py, w - 90, h); + mapArea.setBounds(px + 60, py, w - 120, h); } public void setMapLineBoundings(int vrTop, int vrBottom, int vrLeft, int vrRight) { diff --git a/src/server/quest/actions/ExpAction.java b/src/server/quest/actions/ExpAction.java index 74cee66874..6ed18644c5 100644 --- a/src/server/quest/actions/ExpAction.java +++ b/src/server/quest/actions/ExpAction.java @@ -22,6 +22,7 @@ package server.quest.actions; import client.MapleCharacter; +import constants.ServerConstants; import provider.MapleData; import provider.MapleDataTool; import server.quest.MapleQuest; @@ -50,7 +51,11 @@ public class ExpAction extends MapleQuestAction { if (chr.isBeginnerJob() && chr.getLevel() < 10) { chr.gainExp(exp, true, true); } else { - chr.gainExp(exp * chr.getExpRate(), true, true); + if(!ServerConstants.USE_QUEST_RATE) { + chr.gainExp(exp * chr.getExpRate(), true, true); + } else { + chr.gainExp(exp * ServerConstants.EXP_RATE * ServerConstants.QUEST_RATE, true, true); + } } } } diff --git a/src/server/quest/actions/MesoAction.java b/src/server/quest/actions/MesoAction.java index 96dddb416f..9ea5c7d561 100644 --- a/src/server/quest/actions/MesoAction.java +++ b/src/server/quest/actions/MesoAction.java @@ -22,6 +22,7 @@ package server.quest.actions; import client.MapleCharacter; +import constants.ServerConstants; import provider.MapleData; import provider.MapleDataTool; import server.quest.MapleQuest; @@ -48,6 +49,14 @@ public class MesoAction extends MapleQuestAction { @Override public void run(MapleCharacter chr, Integer extSelection) { - chr.gainMeso(mesos < 0 ? mesos : mesos * chr.getMesoRate(), true, false, true); + if(mesos < 0) { + chr.gainMeso(mesos, true, false, true); + } else { + if(!ServerConstants.USE_QUEST_RATE) { + chr.gainMeso(mesos * chr.getMesoRate(), true, false, true); + } else { + chr.gainMeso(mesos * ServerConstants.MESO_RATE * ServerConstants.QUEST_RATE, true, false, true); + } + } } } diff --git a/tools/MapleInvalidItemIdFetcher/build.xml b/tools/MapleInvalidItemIdFetcher/build.xml new file mode 100644 index 0000000000..c6f488a07e --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project MapleInvalidItemIdFetcher. + + + diff --git a/tools/MapleInvalidItemIdFetcher/lib/mysql-connector-java-bin.jar b/tools/MapleInvalidItemIdFetcher/lib/mysql-connector-java-bin.jar new file mode 100644 index 0000000000..0539039f71 Binary files /dev/null and b/tools/MapleInvalidItemIdFetcher/lib/mysql-connector-java-bin.jar differ diff --git a/tools/MapleInvalidItemIdFetcher/lib/result.txt b/tools/MapleInvalidItemIdFetcher/lib/result.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/MapleInvalidItemIdFetcher/manifest.mf b/tools/MapleInvalidItemIdFetcher/manifest.mf new file mode 100644 index 0000000000..328e8e5bc3 --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/tools/MapleInvalidItemIdFetcher/nbproject/build-impl.xml b/tools/MapleInvalidItemIdFetcher/nbproject/build-impl.xml new file mode 100644 index 0000000000..9b93214fb2 --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/nbproject/build-impl.xml @@ -0,0 +1,1448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set platform.home + Must set platform.bootcp + Must set platform.java + Must set platform.javac + + The J2SE Platform is not correctly set up. + Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. + Either open the project in the IDE and setup the Platform with the same name or add it manually. + For example like this: + ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) + or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + ${platform.java} -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/MapleInvalidItemIdFetcher/nbproject/genfiles.properties b/tools/MapleInvalidItemIdFetcher/nbproject/genfiles.properties new file mode 100644 index 0000000000..cbd9b38c40 --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=00ad4c76 +build.xml.script.CRC32=c56709d2 +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=00ad4c76 +nbproject/build-impl.xml.script.CRC32=07c7055b +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/tools/MapleInvalidItemIdFetcher/nbproject/project.properties b/tools/MapleInvalidItemIdFetcher/nbproject/project.properties new file mode 100644 index 0000000000..c3cd7345c5 --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/nbproject/project.properties @@ -0,0 +1,77 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=MapleInvalidItemIdFetcher +application.vendor=RonanLana +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Os arquivos em build.classes.dir que devem ser exclu\u00eddos do jar de distribui\u00e7\u00e3o +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/MapleInvalidItemIdFetcher.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.mysql-connector-java-bin.jar=lib/mysql-connector-java-bin.jar +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.mysql-connector-java-bin.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=maplenoitemidfetcher.MapleNoItemIdFetcher +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=JDK_1.7 +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/tools/MapleInvalidItemIdFetcher/nbproject/project.xml b/tools/MapleInvalidItemIdFetcher/nbproject/project.xml new file mode 100644 index 0000000000..8b85c66cfe --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + MapleInvalidItemIdFetcher + + + + + + + + + + diff --git a/tools/MapleInvalidItemIdFetcher/src/maplenoitemidfetcher/MapleNoItemIdFetcher.java b/tools/MapleInvalidItemIdFetcher/src/maplenoitemidfetcher/MapleNoItemIdFetcher.java new file mode 100644 index 0000000000..585015e692 --- /dev/null +++ b/tools/MapleInvalidItemIdFetcher/src/maplenoitemidfetcher/MapleNoItemIdFetcher.java @@ -0,0 +1,274 @@ +/* + This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server + Copyleft (L) 2017 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package maplenoitemidfetcher; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * + * @author RonanLana + * + * This application finds inexistent itemids within the drop data from + * the Maplestory database specified by the URL below. This program + * assumes all itemids haves at most 7 digits. + * + * A file is generated listing all the inexistent ids. + */ +public class MapleNoItemIdFetcher { + static String host = "jdbc:mysql://localhost:3306/heavenms"; + static String driver = "com.mysql.jdbc.Driver"; + static String username = "root"; + static String password = ""; + + static String wzPath = "../../wz"; + static String newFile = "lib/result.txt"; + + static Connection con = null; + static PrintWriter printWriter = null; + static InputStreamReader fileReader = null; + static BufferedReader bufferedReader = null; + static byte status = 0; + static int itemId = -1; + + static Set existingIds = new HashSet<>(); + static Set nonExistingIds = new HashSet<>(); + + private static String getName(String token) { + int i, j; + char[] dest; + String d; + + i = token.lastIndexOf("name"); + i = token.indexOf("\"", i) + 1; //lower bound of the string + j = token.indexOf("\"", i); //upper bound + + dest = new char[100]; + token.getChars(i, j, dest, 0); + + d = new String(dest); + return(d); + } + + private static void forwardCursor(int st) { + String line = null; + + try { + while(status >= st && (line = bufferedReader.readLine()) != null) { + simpleToken(line); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } + + private static void simpleToken(String token) { + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + status += 1; + } + } + + private static void translateToken(String token) { + String d; + + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + if(status == 1) { //getting ItemId + d = getName(token); + itemId = Integer.parseInt(d.substring(1, 8)); + + existingIds.add(itemId); + forwardCursor(status); + } + + status += 1; + } + } + + private static void readItemDataFile(File file) { + // This will reference one line at a time + String line = null; + + try { + fileReader = new InputStreamReader(new FileInputStream(file), "UTF-8"); + bufferedReader = new BufferedReader(fileReader); + + status = 0; + try { + while((line = bufferedReader.readLine()) != null) { + translateToken(line); + } + } catch(NumberFormatException npe) { + // second criteria, itemid is on the name of the file + + try { + itemId = Integer.parseInt(file.getName().substring(0, 7)); + existingIds.add(itemId); + } catch(NumberFormatException npe2) {} + } + + bufferedReader.close(); + fileReader.close(); + } + + catch(FileNotFoundException ex) { + System.out.println("Unable to open file '" + file.getName() + "'"); + } + catch(IOException ex) { + System.out.println("Error reading file '" + file.getName() + "'"); + } + } + + private static void readEquipDataDirectory(String dirPath) { + File[] folders = new File(dirPath).listFiles(); + //If this pathname does not denote a directory, then listFiles() returns null. + + for (File folder : folders) { // enter all subfolders + if (folder.isDirectory()) { + System.out.println("Reading '" + dirPath + "/" + folder.getName() + "'..."); + + try { + File[] files = folder.listFiles(); + + for (File file : files) { // enter all XML files under subfolders + if (file.isFile()) { + itemId = Integer.parseInt(file.getName().substring(0, 8)); + existingIds.add(itemId); + } + } + } catch (NumberFormatException nfe) {} + } + } + } + + private static void readItemDataDirectory(String dirPath) { + File[] folders = new File(dirPath).listFiles(); + //If this pathname does not denote a directory, then listFiles() returns null. + + for (File folder : folders) { // enter all subfolders + if (folder.isDirectory()) { + System.out.println("Reading '" + dirPath + "/" + folder.getName() + "'..."); + + File[] files = folder.listFiles(); + + for (File file : files) { // enter all XML files under subfolders + if (file.isFile()) { + readItemDataFile(file); + } + } + } + } + } + + private static void evaluateDropsFromTable(String table) throws SQLException { + PreparedStatement ps = con.prepareStatement("SELECT DISTINCT itemid FROM " + table + ";"); + ResultSet rs = ps.executeQuery(); + + while(rs.next()) { + if(!existingIds.contains(rs.getInt(1))) { + nonExistingIds.add(rs.getInt(1)); + } + } + + rs.close(); + ps.close(); + } + + private static void evaluateDropsFromDb() { + try { + System.out.println("Evaluating item data on DB..."); + + Class.forName(driver).newInstance(); + con = DriverManager.getConnection(host, username, password); + + evaluateDropsFromTable("drop_data"); + evaluateDropsFromTable("reactordrops"); + + if(!nonExistingIds.isEmpty()) { + List list = new ArrayList<>(nonExistingIds); + Collections.sort(list); + + for(Integer i : list) { + printWriter.println(i); + } + } + + System.out.println("Inexistent itemid count: " + nonExistingIds.size()); + System.out.println("Total itemid count: " + existingIds.size()); + + con.close(); + } + + catch(ClassNotFoundException e) { + System.out.println("Error: could not find class"); + System.out.println(e.getMessage()); + } + + catch(InstantiationException e) { + System.out.println("Error: instantiation failure"); + System.out.println(e.getMessage()); + } + + catch(SQLException e) { + e.printStackTrace(); + } + + catch(Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + try { + printWriter = new PrintWriter(newFile, "UTF-8"); + + existingIds.add(0); // meso itemid + readEquipDataDirectory(wzPath + "/Character.wz"); + readItemDataDirectory(wzPath + "/Item.wz"); + + evaluateDropsFromDb(); + + printWriter.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } +} diff --git a/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml b/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml index 0ed21ccd26..d9d0ef9321 100644 --- a/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml +++ b/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml @@ -3926,14 +3926,15 @@ - - - - - - - - + + + + + + + + + @@ -12330,24 +12331,23 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -13044,17 +13044,16 @@ - - - - - - - - - - - + + + + + + + + + + @@ -13619,8 +13618,7 @@ - - + diff --git a/wz/String.wz/MonsterBook.img.xml b/wz/String.wz/MonsterBook.img.xml index 0ed21ccd26..d9d0ef9321 100644 --- a/wz/String.wz/MonsterBook.img.xml +++ b/wz/String.wz/MonsterBook.img.xml @@ -3926,14 +3926,15 @@ - - - - - - - - + + + + + + + + + @@ -12330,24 +12331,23 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -13044,17 +13044,16 @@ - - - - - - - - - - - + + + + + + + + + + @@ -13619,8 +13618,7 @@ - - +