[Resolvido] ajudem a retirar loop de efeito

wevertonvrb
em Resolvidos

wevertonvrb

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/13Posts: 303

então gente eu estou com esse script que faz ficar subindo um efeito no top lvl
ele esta funcionando corretamente mas contem um bug no onAdvance
exemplo  fica subindo um testo escrito "TOP LEVEL" em cima do personagem de maior lvl e
se alguem ultrapassar o lvl deste top o efeito é encerrado e transferido ao novo top ate aee 100%

mas se a pessoa que já é o top upar + um lvl ativa outro testo escrito "TOP LEVEL"
ou seja fica oque ja tinha junto com o +1 novo e se ele upar 10x fica 10 testo e assim vai isso acaba virando flood e atrapalha

então eu gostaria da ajuda de voces para colocar uma tag no onAdvance algo que dezative o efeito para que ele seja ativado novamen

Spoiler

local config = {
    tempo = 3, --tempo em segundos
    mensagem = {
        texto = "TOP LEVEL", --não use mais de 9 caracteres
        efeito = TEXTCOLOR_RED --efeito para a função doSendAnimatedText
    },
    efeito = nil, --efeito da função doSendMagicEffect
    globalstr = 150202 -- uma global storage qualquer q esteje vazia
}
function TopEffect(cid)

    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if not isCreature(cid) or getPlayerName(cid) ~= var[1] then return LUA_ERROR end
    
    doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
    --doSendMagicEffect(getCreaturePosition(cid), config.efeito)
    addEvent(TopEffect, config.tempo*1000, cid)
end
function onLogin(cid)
    if tonumber(getGlobalStorageValue(config.globalstr)) then -- virgin
        local query = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            setGlobalStorageValue(config.globalstr, ":"..query:getDataString("name")..",:"..query:getDataInt("level"))
            TopEffect(cid)
        end
    else
        TopEffect(cid)
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end
function onAdvance(cid, skill, oldLevel, newLevel)
    if skill ~= SKILL__LEVEL then return true end
    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if newLevel > tonumber(var[2]) then
        doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22)
        setGlobalStorageValue(config.globalstr, ":"..getPlayerName(cid)..",:"..newLevel)
        -----docancelTopEffect (cid) ---queria adicionar algo assim antes do TopEffect(cid) seja chamado assim cancelando e evitando o flood de textos
        TopEffect(cid) ----aqui ele chama o TopEffect que faz surgir + 1 efeito
 

    end            
    return true
end


@Poccnn
 

diarmaint

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 09/08/10Posts: 314Char no Tibia: não tenho

  tempo = 3, --tempo em segundos

Eu uso em meu servidor, deixo 10

  tempo = 10, --tempo em segundos

wevertonvrb

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/13Posts: 303
16 minutos atrás, diarmaint disse:

  tempo = 3, --tempo em segundos

Eu uso em meu servidor, deixo 10

  tempo = 10, --tempo em segundos

não é isso que eu quero, quero uma forma de cancelar mesmo pois assim se o player upar 10 lvl seria 1 por segundo isso se n ficar 1 encima do outro em forma de flood, sua sugestão não me serve mas obg

Mendiguinho91

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/10/15Posts: 42

@wevertonvrb

 

use assim:

 

local config = {
    tempo = 3, --tempo em segundos
    mensagem = {
        texto = "TOP LEVEL", --não use mais de 9 caracteres
        efeito = TEXTCOLOR_RED --efeito para a função doSendAnimatedText
    },
    efeito = nil, --efeito da função doSendMagicEffect
    globalstr = 150202 -- uma global storage qualquer q esteje vazia
}
function TopEffect(cid)
    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if not isCreature(cid) or getPlayerName(cid) ~= var[1] then return LUA_ERROR end
    doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
    doSendMagicEffect(getCreaturePosition(cid), config.efeito)
    addEvent(TopEffect, config.tempo*1000, cid)
end
function onLogin(cid)
    if tonumber(getGlobalStorageValue(config.globalstr)) then -- virgin
        local query = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            setGlobalStorageValue(config.globalstr, ":"..query:getDataString("name")..",:"..query:getDataInt("level"))
            TopEffect(cid)
        end
    else
        TopEffect(cid)
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end
function onAdvance(cid, skill, oldLevel, newLevel)
    if skill ~= SKILL__LEVEL then return true end
    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if newLevel > tonumber(var[2]) and getPlayerName(cid) ~= var[1] then
        doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22)
        setGlobalStorageValue(config.globalstr, ":"..getPlayerName(cid)..",:"..newLevel)
        TopEffect(cid)
    end            
    return true
end

 

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Cara. Se eu fosse tu eu colocaria a função topeffect em uma variável global e verificaria se ela está sendo usada, caso sim, eu pararia ela é reiniciar ia,  assim evitanto de chamar ela diversas vezes e causando spam.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Mendiguinho91

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/10/15Posts: 42
1 hora atrás, Poccnn disse:

Cara. Se eu fosse tu eu colocaria a função topeffect em uma variável global e verificaria se ela está sendo usada, caso sim, eu pararia ela é reiniciar ia,  assim evitanto de chamar ela diversas vezes e causando spam.

 

já está em uma variável global, era só checar se o player que upou era o mesmo que já era top... só isso! abraços ;):

wevertonvrb

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/13Posts: 303
4 horas atrás, Mendiguinho91 disse:

@wevertonvrb

 

use assim:

 

local config = {
    tempo = 3, --tempo em segundos
    mensagem = {
        texto = "TOP LEVEL", --não use mais de 9 caracteres
        efeito = TEXTCOLOR_RED --efeito para a função doSendAnimatedText
    },
    efeito = nil, --efeito da função doSendMagicEffect
    globalstr = 150202 -- uma global storage qualquer q esteje vazia
}
function TopEffect(cid)
    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if not isCreature(cid) or getPlayerName(cid) ~= var[1] then return LUA_ERROR end
    doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
    doSendMagicEffect(getCreaturePosition(cid), config.efeito)
    addEvent(TopEffect, config.tempo*1000, cid)
end
function onLogin(cid)
    if tonumber(getGlobalStorageValue(config.globalstr)) then -- virgin
        local query = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            setGlobalStorageValue(config.globalstr, ":"..query:getDataString("name")..",:"..query:getDataInt("level"))
            TopEffect(cid)
        end
    else
        TopEffect(cid)
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end
function onAdvance(cid, skill, oldLevel, newLevel)
    if skill ~= SKILL__LEVEL then return true end
    local var = tostring(getGlobalStorageValue(config.globalstr)):gsub(':', ''):explode(',')
    if newLevel > tonumber(var[2]) and getPlayerName(cid) ~= var[1] then
        doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22)
        setGlobalStorageValue(config.globalstr, ":"..getPlayerName(cid)..",:"..newLevel)
        TopEffect(cid)
    end            
    return true
end

 

desta forma o efeito aparece ate mesmo para lvl 10 mesmo que ele esteja longe de ser o top

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino
7 horas atrás, Mendiguinho91 disse:

 

já está em uma variável global, era só checar se o player que upou era o mesmo que já era top... só isso! abraços ;):

 

Segue.

Citar
function TopEffect(cid)

 

A função não está em uma variável. 

 

Citar

Topeffect = function()

 

Isso é uma função em uma variável. 

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Mendiguinho91

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/10/15Posts: 42
10 horas atrás, wevertonvrb disse:

desta forma o efeito aparece ate mesmo para lvl 10 mesmo que ele esteja longe de ser o top

 

só se for no seu mundo, o script checa se o newLevel é maior que o var[2]

 

n tem como não cara

wevertonvrb

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/13Posts: 303
3 horas atrás, Mendiguinho91 disse:

 

só se for no seu mundo, o script checa se o newLevel é maior que o var[2]

 

n tem como não cara

ok olha isso  >>>>http://prntscr.com/eaqioz

e isso >>>> http://prntscr.com/eaqkad

o script tem algum erro em alguma checagem talvez ate loguin pois o efeito esta com um lvl 41 sendo q o top é lvl bem maior

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

@wevertonvrb. Vou te dar uma idéia de como resolver teu problema. 

 

Citar

Eventotop = nil

if Eventotop then stopEvent(Eventotop) end

Eventotop = addEvent(topeffect, ...)

 

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

wevertonvrb

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/13Posts: 303
53 minutos atrás, Poccnn disse:

@wevertonvrb. Vou te dar uma idéia de como resolver teu problema. 

 

 

obg resolvido sera que pode me ajudar na action que te marquei? uma action bugando a outra da uma ajudinha? valew rep +

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Dúvida sanada. Tópico movido para Suporte - Resolvidos.

Caso o usuário necessite, solicite a reabertura do tópico.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."