Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro

Alpha Servers
Página 4 de 7 PrimeiroPrimeiro ... 23456 ... ÚltimoÚltimo
Resultados 31 a 40 de 63
  1. #31



    Avatar de Renato
    Data de Ingresso
    Nov 2010
    Localização
    Imperyus
    Posts
    1.099
    Agradecido
    2520
    Agradeceu
    492
    Peso da Avaliação
    30

    Padrão

    Tudo ok então.

    Peço desculpas pelos transtornos, realmente foi falha minha.

    Tópico atualizado.

    Versão da trigger atualizada para 2.1.2.
    Código PHP:
    <?php
        
    if(Weather::getState() == 'Rainy weather') {
            
    $this->removingLittleHorseFromRain();
        }

  2. #32

    Avatar de Mr.Junior
    Data de Ingresso
    Jul 2011
    Localização
    Hortolândia
    Idade
    31
    Posts
    507
    Agradecido
    165
    Agradeceu
    97
    Peso da Avaliação
    18

    Padrão

    Será que funciona na season8 da x-team ?


    /*
    | @modifications - Renato Valer
    | @version - 2.0.0
    | @last update - 2015/08/28 - 09h25min
    | @warning: Não me responsabilizo por uso incorreto e possíveis deadlocks. Use por sua conta e risco.
    */

    USE MuOnline
    GO

    IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'WZ_DISCONNECT_MEMB')
    DROP PROCEDURE [DBO].[WZ_DISCONNECT_MEMB]
    GO

    CREATE PROCEDURE [DBO].[WZ_DISCONNECT_MEMB] @memb___id VARCHAR(10) AS BEGIN

    SET NOCOUNT ON

    DECLARE @Find_ID VARCHAR(10),
    @ConnectStat TINYINT,
    @LoginTime INT,
    @LogoutTime INT,
    @ConnectTM INT,
    @DisConnectTM INT,
    @TimeON_Account BIGINT,
    @TimeON_Char BIGINT,
    @GameIDC VARCHAR(10),
    @CharConnectTM DATETIME,
    @CharConnectTM_Int INT,
    @Now DATETIME,
    @Now_Int INT;

    SET @ConnectStat = 0
    SET @Find_ID = 'NOT'
    SET @Now = GETDATE();

    SELECT @Find_ID = S.memb___id FROM MEMB_STAT S INNER JOIN MEMB_INFO I ON S.memb___id = I.memb___id WHERE I.memb___id = @memb___id;

    IF( @Find_ID <> 'NOT' ) BEGIN

    UPDATE MEMB_STAT SET ConnectStat = @ConnectStat, DisconnectTM = @Now WHERE memb___id = @memb___id;


    /*
    Selecionamos os momentos de login e logout da conta e convertemos para números inteiros.
    */

    SET @ConnectTM = (SELECT DATEDIFF(s, '19700101', MEMB_STAT.ConnectTM) FROM MEMB_STAT WHERE memb___id = @memb___id);
    SET @DisConnectTM = DATEDIFF(s, '19700101', @Now);


    /*
    Executamos os cálculos para obtermos o tempo total online da conta.
    */

    SET @TimeON_Account = @DisConnectTM - @ConnectTM;

    /*
    Atualizamos o tempo total online da conta.
    */

    UPDATE MEMB_INFO SET TimeON = TimeON + @TimeON_Account WHERE memb___id = @memb___id;


    /*
    Selecionando nick do último char logado
    */

    SET @GameIDC = (SELECT GameIDC FROM AccountCharacter WHERE Id = @memb___id);

    /*
    Algum char foi logado antes de sair da conta.
    Mesmo que o cara tenha logado na conta e criado o char, o GameIDC
    só vai ser preenchido se o cara logar na conta.
    Sendo assim, se GameIDC for NULL, indica que nenhum char
    nunca foi logado nessa conta, então não tem necessidade de contar tempo on.
    */
    IF(@GameIDC IS NOT NULL) BEGIN

    /*
    Verificamos se esse char existe.
    Motivo: o cara pode ter clicado em "selecionar char", deletado o char
    e depois deslogado da conta.
    Se não existe, não precisa fazer nada.
    */
    IF EXISTS (SELECT Name FROM Character WHERE AccountID = @memb___id AND Name = @GameIDC) BEGIN

    /*
    Verificação: quando foi o último connect desse char que acabou de deslogar?
    Se for nulo, significa que ocorreu algum problema na trigger, então
    adicionamos o valor de "agora" convertido em timestamp para possibilitar o cálculo.
    */

    SET @CharConnectTM = (SELECT ConnectTM FROM Character WHERE AccountID = @memb___id AND Name = @GameIDC);
    IF (@CharConnectTM IS NULL) BEGIN
    SET @CharConnectTM_Int = DATEDIFF(s, '19700101', @Now);
    END
    /*
    Se não for nulo, convertemos para timestamp.
    */
    ELSE BEGIN
    SET @CharConnectTM_Int = DATEDIFF(s, '19700101', @CharConnectTM);
    END

    /*
    Executamos os cálculos para obtermos o tempo total online
    do último char logado.
    */

    SET @TimeON_Char = (@DisConnectTM - @CharConnectTM_Int);

    /*
    Atualizamos o tempo total online do último char logado.
    */

    UPDATE Character SET TimeON = TimeON + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;

    END
    END
    END
    SE <--- ERRO
    END
    Última edição por Mr.Junior; 03-04-2016 às 02:02 PM.
    "Só tem o direito de criticar aqueles, que pretendem ajudar "

  3. O Seguinte Usuário Agradeceu Mr.Junior Por este Post Útil:


  4. #33

    Avatar de Mr.Junior
    Data de Ingresso
    Jul 2011
    Localização
    Hortolândia
    Idade
    31
    Posts
    507
    Agradecido
    165
    Agradeceu
    97
    Peso da Avaliação
    18

    Padrão

    @ Renato

    No meu teste season8.3 da x-team..

    Esta funcionando porem o tempo total ONLINE da conta é contabilizado já o TEMPO TOTAL ONLINE DO CHAR não esta contabilizando.

    Outra duvida é possível adicionar um ranking diário / semanal e mensal ? Com a contagem de tempo total online do CHAR ?


    /*
    Atualizamos o tempo total online da conta.
    */

    UPDATE MEMB_INFO SET TimeON = TimeON + @TimeON_Account WHERE memb___id = @memb___id;


    /*
    /*
    Atualizamos o tempo total online do último char logado.
    */

    UPDATE Character SET TimeON = TimeON + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;
    EXEMPLO PARA CRIAR O RANKING EM QUE MENCIONEI :

    UPDATE Character SET TimeON = TimeON + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;
    UPDATE Character SET Time_Day = Time_Day + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;
    UPDATE Character SET Time_Week = Time_Week + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;
    UPDATE Character SET Time_Month = Time_Month + @TimeON_Char, DisConnectTM = @Now WHERE AccountID = @memb___id AND Name = @GameIDC;
    Abraços.
    "Só tem o direito de criticar aqueles, que pretendem ajudar "

  5. #34

    Avatar de lucasubatuba
    Data de Ingresso
    Mar 2016
    Localização
    Porto Alegre
    Idade
    30
    Posts
    6
    Agradecido
    0
    Agradeceu
    0
    Peso da Avaliação
    0

    Padrão

    Boa tarde.

    ConnectTM da table Character não está atualizando;
    OnlineHours da table MEMB_STAT não está calculando a diferença entre ConnectTM e DisConnectTM.

    Alguém poderia me ajudar?

    Obrigado.

  6. #35



    Avatar de Renato
    Data de Ingresso
    Nov 2010
    Localização
    Imperyus
    Posts
    1.099
    Agradecido
    2520
    Agradeceu
    492
    Peso da Avaliação
    30

    Padrão

    @lucasubatuba o script não usa coluna "OnlineHours" na table MEMB_STAT. Remova todo e qualquer sistema de contagem de tempo online que use para não dar interferência nesse. Depois, refaça a instalação.


    @Mr.Junior, você rodou a trigger? Usa algum outro sistema de contagem de tempo online além desse meu?
    Me chama no skype pra eu ver o que está acontecendo.
    Última edição por Renato; 05-04-2016 às 10:00 AM.
    Código PHP:
    <?php
        
    if(Weather::getState() == 'Rainy weather') {
            
    $this->removingLittleHorseFromRain();
        }

  7. #36

    Avatar de lucasubatuba
    Data de Ingresso
    Mar 2016
    Localização
    Porto Alegre
    Idade
    30
    Posts
    6
    Agradecido
    0
    Agradeceu
    0
    Peso da Avaliação
    0

    Padrão

    Citação Postado originalmente por Renato Ver Post
    @lucasubatuba o script não usa coluna "OnlineHours" na table MEMB_STAT.
    Poderia me explicar como o script funciona?

    Gostaria de entender o processo para identificar meu erro.

    Obrigado.

  8. #37



    Avatar de Renato
    Data de Ingresso
    Nov 2010
    Localização
    Imperyus
    Posts
    1.099
    Agradecido
    2520
    Agradeceu
    492
    Peso da Avaliação
    30

    Padrão

    @lucasubatuba são 3 scripts que trabalham em conjunto.

    A procedure WZ_CONNECT_MEMB, original da WEBZEN, atualiza a coluna ConnectTM da tabela MEMB_STAT toda vez que a conta loga. Com isso, temos o exato momento em que você fez o login e, portanto, o marco inicial da nossa contagem.

    A trigger AccountCharacter_Online é chamada toda vez que você "entra" ou "sai" de um personagem. Quando você entra, a trigger armazena o momento exato na coluna ConnectTM da tabela Character. Quando você sai do char (sem deslogar da conta), ela armazena esse momento na coluna DisConnectTM da tabela Character e faz um cálculo para saber quanto tempo ficou on. De posse do resultado, ela soma isso à coluna TimeON da tabela Character. Os valores são salvos em segundos.

    A procedure WZ_DISCONNECT_MEMB (modificada) atualiza a coluna DisConnectTM da tabela MEMB_STAT toda vez que a conta é deslogada, bem como a coluna DisConnectTM da tabela Character. Com base nos dados e login e logout da conta, o script calcula quanto tempo a conta ficou online e soma isso à coluna TimeON da tabela MEMB_INFO.
    Além disso, se o logout foi "direto", sem sair do char antes (como dar alt+f4, por exemplo), ela também atualiza o tempo online do char, seguindo a mesma lógica da trigger AccountCharacter_Online. Todo o tempo é armazenado em segundos.


    É isso.
    Por ser um procedimento totalmente sincronizado, não pode existir outro método de contagem de tempo online instalado, caso contrário pode gerar conflitos.

    []'s
    Última edição por Renato; 07-04-2016 às 10:31 AM.
    Código PHP:
    <?php
        
    if(Weather::getState() == 'Rainy weather') {
            
    $this->removingLittleHorseFromRain();
        }

  9. O Seguinte Usuário Agradeceu Renato Por este Post Útil:


  10. #38

    Avatar de lucasubatuba
    Data de Ingresso
    Mar 2016
    Localização
    Porto Alegre
    Idade
    30
    Posts
    6
    Agradecido
    0
    Agradeceu
    0
    Peso da Avaliação
    0

    Padrão

    @Renato

    Primeiramente, gostaria de te agradecer: explicação clara e objetiva. Muito obrigado.

    <?php
    $findSTAT = mssql_query("SELECT * FROM MEMB_STAT WHERE memb___id='".$userName."'");
    $fetchSTAT = mssql_fetch_object($findSTAT);
    $seconds = $fetchSTAT->TimeON;
    $hours = floor($seconds / 3600);
    $seconds -= $hours * 3600;
    $minutes = floor($seconds / 60);
    $seconds -= $minutes * 60;
    $timeON = (''.$hours.'h'.$minutes.'min'.$seconds.'sec');
    echo $timeON;
    ?>

    Utilizando este código, terei o valor referente ao tempo online da conta, independente de qual char estiver, certo? (DisConnectTM - ConnectTM) da tabela MEMB_STAT;

    De acordo com o que você explicou, estou com problema na trigger AccountCharacter_Online,
    Pois a mesma não está armazenando o momento em que logo em um personagem na coluna ConnectTM da tabela Character.

  11. #39



    Avatar de Renato
    Data de Ingresso
    Nov 2010
    Localização
    Imperyus
    Posts
    1.099
    Agradecido
    2520
    Agradeceu
    492
    Peso da Avaliação
    30

    Padrão

    @lucasubatuba sim, com esse código você obtém o tempo online da conta.

    Se fizermos uma pequena modificação, podemos usar o mesmo código para pegar o tempo on do char, bastando informar o "nome" dele com a variável $name.

    Código PHP:
    <?php

    $findSTAT 
    mssql_query("SELECT TimeON FROM Character WHERE name='".$name."'");
    $fetchSTAT mssql_fetch_object($findSTAT); 
    $seconds $fetchSTAT->TimeON;
    $hours floor($seconds 3600);
    $seconds -= $hours 3600;
    $minutes floor($seconds 60);
    $seconds -= $minutes 60;
    $timeON = (''.$hours.'h'.$minutes.'min'.$seconds.'sec');
    echo 
    $timeON;
    Apesar disso resolver, eu recomendo fazer uma classe que poderá ser usada para ambos, pois se você notar, apenas a query muda, de modo que se uma classe for feita, evitará repetição de código.


    Sobre a trigger AccountCharacter_Online, precisaria mais informações sobre o que está acontecendo no SQL.
    Código PHP:
    <?php
        
    if(Weather::getState() == 'Rainy weather') {
            
    $this->removingLittleHorseFromRain();
        }

  12. Os Seguintes 2 Usuários Agradeceram você Renato Por este Post Útil:


  13. #40

    Avatar de lucasubatuba
    Data de Ingresso
    Mar 2016
    Localização
    Porto Alegre
    Idade
    30
    Posts
    6
    Agradecido
    0
    Agradeceu
    0
    Peso da Avaliação
    0

    Padrão

    @Renato

    Na Table MEMB_STAT não possuo a Column TimeON, e sim OnlineHours (que não calcula quanto tempo a conta ficou online).
    Na Table Character como eu já disse, a Column ConnectTM não atualiza com a hora que logo o personagem.

    Fico no aguardo por instruções.

    Obrigado!

 

 
Página 4 de 7 PrimeiroPrimeiro ... 23456 ... ÚltimoÚltimo

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Tópicos Similares

  1. |Dúvida| As vezes não dá para Criar mais Char na Conta
    Por Luciano no fórum Dúvidas
    Respostas: 1
    Último Post: 06-11-2015, 11:52 PM
  2. |Jobs/Query| conta online sem tempo real
    Por hadeslan no fórum Jobs e Querys
    Respostas: 3
    Último Post: 06-09-2015, 01:43 PM
  3. |Dúvida| Como Adicionar Ranking Tempo Char Online
    Por KaKaRoToX no fórum Dúvidas|Pedidos
    Respostas: 0
    Último Post: 17-01-2015, 10:05 PM
  4. |Dúvida| Conta não cadastrada depois de um tempo online.
    Por caahs2feeh no fórum Dúvidas
    Respostas: 5
    Último Post: 09-09-2012, 08:45 PM
  5. Respostas: 8
    Último Post: 11-06-2011, 08:46 PM

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •