Resultados 1 a 5 de 5
  1. #1
    Membro Schimidt's Avatar
    Data de Ingresso
    Sep 2014
    Posts
    134
    Thanks Thanks Given 
    6
    Thanks Thanks Received 
    5
    Thanked in
    2 Posts
    Mencionado
    10 Post(s)
    MEU HUMOR
    Scared

    Query Premiar uma guilda inteira no Top Mensal

    Olá, alguém poderia me ajudar com uma duvida cruel?!

    O Score da minha Guida Zera todo mês, queria fazer com que todos os membros dela ganhassem vip

    Todo dia 1 roda essa simples query:
    Código PHP:
    UPDATE Guild SET G_Score 
    Queria colocar vip para todos os membros da guild que tiver + score
    Atualmente faço isso manualmente, porém nao é sempre que tenho tempo pra fazer isso. mesmo que seja apenas 1x por mês

    Obrigado desde já.

  2. #2
    Lendário russo1's Avatar

    Data de Ingresso
    Feb 2015
    Posts
    458
    Thanks Thanks Given 
    52
    Thanks Thanks Received 
    63
    Thanked in
    26 Posts
    Mencionado
    70 Post(s)
    MEU HUMOR
    Daring
    Conheço essa query pra premiar a guild, você pode fazer adaptações..

    Código:
        DECLARE @V_USER VARCHAR(8);
        DECLARE @V_GUILD VARCHAR(10);
        DECLARE @V_LOGIND VARCHAR(400);
        DECLARE @V_LOGIN VARCHAR(15);
        DECLARE @V_LEVEL VARCHAR(1);
    
        SET @V_GUILD = 'NOME DA GUILD';
        SET @V_LOGIN = '_';
        SET @V_LOGIND = '_';
    
        DECLARE C_GUILD CURSOR FOR (SELECT Name, G_Level FROM GuildMember
        WHERE G_Name = @V_GUILD)
    
        OPEN C_GUILD;
        FETCH NEXT FROM C_GUILD INTO @V_USER, @V_LEVEL;
        WHILE(@@FETCH_STATUS=0) BEGIN
    
        SET @V_LOGIN = ISNULL((SELECT DISTINCT(AccountID) FROM Character WHERE Name =     @V_USER), ' ')
        IF NOT (@V_LOGIN IS NULL) AND NOT (@V_LOGIN = ' ') BEGIN
        IF not CHARINDEX(@V_LOGIN, @V_LOGIND) > 0 BEGIN
        SET @V_LOGIND = @V_LOGIND + @V_LOGIN+'_';
        IF @V_LEVEL = '1' BEGIN
        UPDATE MEMB_INFO
        SET Gold = Gold + 50
        WHERE memb___id = @V_LOGIN;
        END
        ELSE BEGIN
        IF @V_LEVEL IS NULL BEGIN
        UPDATE MEMB_INFO
        SET Gold = Gold + 30
        WHERE memb___id = @V_LOGIN;
        END
        ELSE BEGIN
        UPDATE MEMB_INFO
        SET Gold = Gold + 40
        WHERE memb___id = @V_LOGIN;
        END;
        END;
        print 'O membro do login ' + @V_LOGIN + ' foi premiado';
        END;
        END;
        FETCH NEXT FROM C_GUILD INTO @V_USER, @V_LEVEL;
        END;
        CLOSE C_GUILD;
        DEALLOCATE C_GUILD;
        GO
    Onde esta NOME DA GUILD Coloque o nome da guild que vai receber os golds
    Onde esta 'SET Gold = Gold + 50 ' = Quantidade de Golds que o Guild Master vai ganhar.
    Onde esta 'SET Gold = Gold + 40 '= Quantidade de Golds que Assistente e Battle Master vai ganhar.
    Onde esta 'SET Gold = Gold + 30 '= Quantidade de Golds que os Membros vão ganhar.
    Onde esta ''Gold'' mude para sua tabela de Gold ou Cash dependendo de qual moeda você vai dar, altere de acordo com seu servidor.

  3. #3
    Membro Bacon's Avatar
    Data de Ingresso
    Feb 2018
    Posts
    10
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts
    Mencionado
    6 Post(s)
    País
    Brazil
    @[Somente membros podem ver os links. ]
    Tenho mais Afinidade com MySQL, mas creio que algo simples assim não seja tão diferente... então vou mandar aqui algo que talvez funcione, testa pra gente e avisa o que rolou

    Bom, pra começar precisamos saber qual database você usa, pois os sistemas de VIP mudam conforme a database.. Mas, pra selecionar todos os logins que estão em uma guild com score acima de 'X' é mais ou menos isto:

    Código:
    DECLARE @Score INT
    SET @Score = '0' -- Score das guilds que ganharão VIP
    
    SELECT
         c.AccountID
    FROM
         dbo.Character c
         JOIN dbo.GuildMember gm ON (gm.Name = c.Name)
         JOIN dbo.Guild g ON (g.G_Name = gm.G_Name)
    WHERE
           g.G_Score >= @Score
    GROUP BY
           c.AccountID
    Com este select, é só usar dentro de um UPDATE pra colocar o vip, por exemplo:

    Código:
    DECLARE @Score INT
    SET @Score = '0' -- Score das guilds que ganharão VIP
    
    
    UPDATE MEMB_INFO SET AccountLevel = '1'
        WHERE memb___id IN (
    -- SELECT la de cima --
    SELECT
         c.AccountID
    FROM
         dbo.Character c
         JOIN dbo.GuildMember gm ON (gm.Name = c.Name)
         JOIN dbo.Guild g ON (g.G_Name = gm.G_Name)
    WHERE
           g.G_Score >= @Score
    GROUP BY
           c.AccountID
    -- Fim do SELECT la de cima --
    );
    Porem se quiser que eu ajude com isto tambem é só dizer qual database está usando.. abraços
    Last edited by Bacon; 02/03/2018 at 12:59 AM.

  4. #4
    Membro Schimidt's Avatar
    Data de Ingresso
    Sep 2014
    Posts
    134
    Thanks Thanks Given 
    6
    Thanks Thanks Received 
    5
    Thanked in
    2 Posts
    Mencionado
    10 Post(s)
    MEU HUMOR
    Scared
    @[Somente membros podem ver os links. ]

    Obrigado pelo interesse em ajudar,
    deu pra entender mais ou menos, SQL nao é meu forte rs

    Database = MuOnline
    Vip =MEMB_INFO
    Coluna: Vip

    Só quero que Seta o tipo de Vip, pois o GS nao ler os dias, apenas o site,
    eu quero uma cois na verdade bem + avançada

    Tipo. vai ser uma sala VIP

    Todo dia primeiro quero add o Vip pra melhor guilda e remover de todos, entendeu ?

    Estou estudando um pouco sobre SQL, mas se poder me da essa força eu agradeço muito mano.

  5. #5
    Membro Bacon's Avatar
    Data de Ingresso
    Feb 2018
    Posts
    10
    Thanks Thanks Given 
    0
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts
    Mencionado
    6 Post(s)
    País
    Brazil
    Entendi... Quanto a retirar o vip dos membros da guild vencedora anterior seria um pouco mais complexo, pois temos que considerar que podem ter comprado o vip, ou 'N' outras coisas... Alem disso, teria que criar uma nova tabela pra registrar as guilds vencedoras de cada mês, pra então tirar o vip da guild anterior..
    Mas pra adicionar o vip pra nova guild seria isso:


    Código:
    DECLARE @VipNum VARCHAR(15)
    DECLARE @VipColumn VARCHAR(15)
    DECLARE @LoginColumn VARCHAR(15)
    DECLARE @VipTable VARCHAR(15)
    DECLARE @sql VARCHAR(2000)
    
    
    SET @VipTable = 'MEMB_INFO' -- Tabela Vip
    SET @LoginColumn = 'memb___id' -- Coluna Login
    SET @VipColumn = 'Vip' -- Coluna Vip
    SET @VipNum = '1' -- Numero do Vip
    
    
    SET @sql = 'UPDATE ' + @VipTable + ' SET ' + @VipColumn + ' = ' + @VipNum + '
        WHERE ' + @LoginColumn + ' IN (
    -- SELECT da Guild --
    SELECT
         c.AccountID
    FROM
         dbo.Character c
         JOIN dbo.GuildMember gm ON (gm.Name = c.Name)
         JOIN dbo.Guild g ON (g.G_Name = gm.G_Name)
    WHERE
           g.G_Name = (SELECT TOP 1 G_Name FROM dbo.Guild ORDER BY G_Score DESC) -- Select da guild com mais Score
    GROUP BY
           c.AccountID
    -- Fim do SELECT da Guild --
    );'
    EXEC(@sql); -- Executar o comando (Query)
    
    Last edited by Bacon; 02/03/2018 at 11:35 AM.

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  
Sobre nós
Somos uma comunidade em atividade a 8 anos que aborda assuntos relacionados a games em geral, principalmente games MMORPG. e que busca sempre ajudar os membros através de conteúdos, tutoriais e suporte...
Nossos anunciantes
Hinetworks
VelozHost
InovHost
Rede Sociais