Ir para conteúdo
  • Cadastre-se
  • 0

Skill Cooltime ( Skill volta do 0 após restart )


Chaazy

Pergunta

Ha algum tempo venho tentando resolver um problema na l2jfrozen 1132, ja pesquisei em vários fóruns,porem sem sucesso.

O que acontece é o seguinte. Skills que contem o reusedelay maior (buffs como heroic, battle roar, rage, frenzy, zealot, ultimate defense etc...) assim que você os usa e deixa ele carregar 30,50,90% que seja, se o player tomar dc, critical error ou ate mesmo dar restart, o skill volta do 0! Ele simplesmente não volta de onde parou, e mesmo ficando 1 hora sem entrar no jogo a skill não termina de carregar, é como se não salva-se os dados das skills.

Alguém pode ajudar? 

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

Posts recomendados


  • 0

Como você mesmo falou, não está salvando no banco de dados essa informação ou essa informação não está sendo restaurada. Você precisa salvar essa informação no método 'onDisconnection' da classe L2GameClient e restaurar no método que carrega os dados do player na classe L2PcInstance. Geralmente essa informação é salva na tabela 'characters_skills_save'.  Infelizmente não conheço a Frozen pra te ajudar além disso.

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

  • 0
 

Como você mesmo falou, não está salvando no banco de dados essa informação ou essa informação não está sendo restaurada. Você precisa salvar essa informação no método 'onDisconnection' da classe L2GameClient e restaurar no método que carrega os dados do player na classe L2PcInstance. Geralmente essa informação é salva na tabela 'characters_skills_save'.  Infelizmente não conheço a Frozen pra te ajudar além disso.

Obrigado mesmo assim, já é um ponto de partida!

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0

Basta ir em L2PcInstance

Procure por
public void restoreEffects(final boolean activateEffects)

Tem todas as informações que você precisa sobre a restauração do player.

Basta corrigir da forma que vc quiser, eu não utilizo frozen, mas corrigi na que eu utilizo à tempos.

Certa vez no meu server, para burlarem o tempo reuse skill, eles trocavam de subclasse, a skill voltava zerada.

Nesse caso precisa modificar tb.

Link para o comentário
Compartilhar em outros sites

  • 0
 

Basta ir em L2PcInstance


Procure por
public void restoreEffects(final boolean activateEffects)

Tem todas as informações que você precisa sobre a restauração do player.

Basta corrigir da forma que vc quiser, eu não utilizo frozen, mas corrigi na que eu utilizo à tempos.

Certa vez no meu server, para burlarem o tempo reuse skill, eles trocavam de subclasse, a skill voltava zerada.

Nesse caso precisa modificar tb.

   

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

pode me dizer onde devo alterar?

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0
 

Aparentemente essa parte do código está correta. Procura pelo método que salva essas informações no DB, provavelmente algo parecido com 'storeEffects'.

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Seria isso?

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0
 

Isso. Eu preciso só de mais duas informações:

o valor dessa constante  ADD_SKILL_SAVE;

e o código dessa classe: TimeStamp.

 

Código da TimeStamp 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Valor da Constant ADD_SKILL_SAVE seria isso?

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0

É isso mesmo. Existem duas abordagens:

  • A skill ser restaurada com o cooltime  que estava quando o player deslogou;
  • O cooltime ser baseado no tempo real, por exemplo: A skill tem restando 10 min de cooltime, se o player logar apenas depois que os 10 min  passou, a skill já estaria pronta pra uso.

Qual delas você quer ?

Link para o comentário
Compartilhar em outros sites

  • 0
 

É isso mesmo. Existem duas abordagens:

  • A skill ser restaurada com o cooltime  que estava quando o player deslogou;
  • O cooltime ser baseado no tempo real, por exemplo: A skill tem restando 10 min de cooltime, se o player logar apenas depois que os 10 min  passou, a skill já estaria pronta pra uso.

Qual delas você quer ?

Com o cooltime baseado no tempo real, pois assim resolve o problema de logar bom tempo depois e a skill começando do 0.

Dessa forma se o player tomar dc e voltar 1 minuto depois, a skill vai continuar seu cooltime normalmente? Exemplo:

Tomei dc com heroic 50%, demorei 1 minuto pra logar novamente e o mesmo vai estar 60%.

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é que está sendo salvo o reuseDelay da skill no DB, por isso ela sempre volta do 0.

Para a skill ser restaurada com o cooltime  que estava quando o player deslogou, no método storeEffect, é necessário apenas mudar essa linha

 

statement.setLong(6, t.getReuse());

para essa :

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Já para a segunda alternativa a mudança pode ser realizada no método restoreEffects. Após as linhas

O conteúdo está oculto, favor efetuar login ou se cadastrar!

adicionar:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Trocar essa parte do código:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

por essa:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Seguir a mesma lógica pra parte mais abaixo do código. Além disso, confirmar que a coluna systime faz parte do select da constante RESTORE_SKILL_SAVE

Link para o comentário
Compartilhar em outros sites

  • 0
 

O problema é que está sendo salvo o reuseDelay da skill no DB, por isso ela sempre volta do 0.

Para a skill ser restaurada com o cooltime  que estava quando o player deslogou, no método storeEffect, é necessário apenas mudar essa linha

para essa :

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Já para a segunda alternativa a mudança pode ser realizada no método restoreEffects. Após as linhas

O conteúdo está oculto, favor efetuar login ou se cadastrar!

adicionar:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Trocar essa parte do código:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

por essa:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Seguir a mesma lógica pra parte mais abaixo do código. Além disso, confirmar que a coluna systime faz parte do select da constante RESTORE_SKILL_SAVE

Muito Obrigado mesmo KhayrusS!!! Me ajudou demais ❤️ Porém fiz algumas alterações nos códigos ficando da seguinte forma:

Adicionei a linha 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

abaixo das linhas 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Troquei esse parte código 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

por esta

O conteúdo está oculto, favor efetuar login ou se cadastrar!

E segui a mesma logica para os codigos abaixo. O meu problema era no RestoreEffects, dessa forma se eu usar a skill e ele tiver 50%, se eu tomar dc ou der restart a skill continua carregando normalmente ? e quando voltar a skill vai continuar de onde ela estiver.

Mas com isso tambem apareceu um novo bug, que nao tinha como saber com a skill voltando do 0 toda vez.

Se eu usar uma skill (ex: Heroic) e der 2 restarts seguidos, a skill volta carregada 100%.

Pode me ajudar a arrumar isso também?

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0
 

Dois restarts rápidos ? Depois do segundo restart, antes de logar, novamente, valor do systime continua correto no DB ?

Sim 2 restarts rapidos, notei o seguinte. Se usar a skill e atualizar a db com o char logado, não aparece que a skill foi salva, não mostra systime, reuse essas coisas, ai quando dou o primeiro restart com o char e atualizo a db, mostra os dados salvos corretamente, systime e tudo.

Assim que dou o segundo restart, as informações que foram salvas na db somem. Ai a skill volta do 100% 

Editado por Chaazy

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0
10 horas atrás, KhayrusS disse:

Isso é um pouco estranho mesmo.

Posta o código do método addTimestamp

Vou postar todos os códigos.

StoreEffect

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

restoreEffect

O conteúdo está oculto, favor efetuar login ou se cadastrar!

TimeStamp

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Valor da ADD/RESTORE skills save

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Acho que são esses os responsaveis. 

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0

Quando as skills vão ser salvas há uma condição que se aplica quando o efeito ainda está em uso:

1 hora atrás, Chaazy disse:
O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

O problema é que nessa condição o timestamp da skill é procurado utilizando o método getReuseHashCode:

1 hora atrás, Chaazy disse:
O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Mas o método addTimeStamp está utilizando o método getId para salvar a informação:

1 hora atrás, Chaazy disse:
O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Acredito que modificando-o para utilizar o getReuseHashCode esse problema não irá mais acontecer

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Link para o comentário
Compartilhar em outros sites

  • 0
22 horas atrás, KhayrusS disse:

Quando as skills vão ser salvas há uma condição que se aplica quando o efeito ainda está em uso:

O problema é que nessa condição o timestamp da skill é procurado utilizando o método getReuseHashCode:

Mas o método addTimeStamp está utilizando o método getId para salvar a informação:

Acredito que modificando-o para utilizar o getReuseHashCode esse problema não irá mais acontecer

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Meu amigo você é demais! Problema resolvido! Vou postar a correção no tópico dos fixes da Frozen 1132.

Muito Obrigado KhayrusS. Abraço

Eduardo Garcia ?

Link para o comentário
Compartilhar em outros sites

  • 0

can you help me too please i use frozen revision=1073 i have the same problem

 

error: cannot find symbol
    [javac]                 final long remainingTime = systime - System.currentTimeMillis();
    [javac]                                            ^

 

error: cannot find symbol
    [javac]                     addTimeStamp(new TimeStamp(skill, reuseDelay, systime));
    [javac]                                                                   ^

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

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

  • 0

Probably ur code is a bit different. So u need to figure out based on what was said here how ur code works.

For instance, on the Rev 1132 there is a class TimeStamp inside of the class L2PCInstance, but on 1073 looks like don't have it. Thats why this error: cannot find symbol

8 horas atrás, ayioko disse:

ddTimeStamp(new TimeStamp(skill, reuseDelay, systime));

 

Link para o comentário
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





×
×
  • 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.