Ir para conteúdo
  • Cadastre-se

(Resolvido)SCRIPT EFEITO EM TOP LEVEL (TEMPO REAL)


Ir para solução Resolvido por Belmont,

Posts Recomendados

Pessoal estou com este script que solta uma Mensagem de Efeito no TOP level do servidor, porem a parte de onAdvanced não está funcionando.

No caso essa parte deveria funcionar da seguinte forma: Outro player upa e fica com essa mensagem de TOP LEVEL e do antigo TOP LEVEL some, porem ela só funciona quando o atual TOP LEVEL desloga e loga novamente. E eu queria que esse script funcionasse em tempo real.

 

Esse código é do @Bruno Minervino

 

 

<event type="login" name="TopEffect" event="script" value="topeffect.lua"/>
<event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>

 

--[[
	Script by Bruno Minervino para o Tibia King
	Caso for postar, colocar os créditos
]]

local config = {
	tempo = 2, --tempo em segundos
	mensagem = {
		texto = "[*KING*]", --não use mais de 9 caracteres
		efeito = TEXTCOLOR_LIGHTBLUE --efeito para a função doSendAnimatedText
	},
	efeito = 30, --efeito da função doSendMagicEffect
	globalstr = 121221 -- uma global storage qualquer q esteje vazia
}

--[[ Não mexa em nada abaixo ]]
--local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0

function onLogin(cid)
	local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
	if (query:getID() ~= -1) then
		local pid = query:getDataString("id")
		local name = query:getDataString("name")
		if getPlayerName(cid) == name then
			if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end
			setGlobalStorageValue(config.globalstr, pid)
			doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22)
			doSetMonsterOutfit(cid, 102)
			TopEffect(cid)
		end
	end
	registerCreatureEvent(cid, "CheckTop")
	return true
end

function onAdvance(cid, skill, oldlevel, newlevel)
	if skill == 8 then
		local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
		if (query:getID() ~= -1) then
			local level = tonumber(query:getDataString("level"))
			if level < newlevel and topPlayer ~= getPlayerID(cid) then
				doBroadcastMessage("O jogador " .. getPlayerName(cid) .. " tornou-se o novo Top Level. Parabens!", 22)
				topPlayer = getPlayerID(cid)
				doSaveServer()
				setGlobalStorageValue(config.globalstr, getPlayerID(cid))
				doSetMonsterOutfit(cid, 102)
				TopEffect(cid)
			end			
		end
	end
	return true
end

function TopEffect(cid)
	if not isPlayer(cid) then return true end
	if topPlayer == getPlayerID(cid) then
		doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
		doSendMagicEffect(getCreaturePosition(cid), config.efeito)
		addEvent(TopEffect, config.tempo * 1000, cid)
	end
end

function getPlayerNameById(id)
	local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id))
	if query:getID() ~= -1 then
		return query:getDataString("name")
	end
	return 0
end

function getPlayerIdByName(name)
	local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name))
	if query:getID() ~= -1 then
		return tonumber(query:getDataString("id"))
	end
	return 0
end

function getPlayerID(cid)
	return getPlayerIdByName(getPlayerName(cid))
end

 

Link para o post
Compartilhar em outros sites
  • Moderador
  • Solução

@JEAN JR Tenta assim

	<event type="login" name="TopEffect" event="script" value="topeffect.lua"/>
    <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>
Spoiler

local config = {
    tempo = 5,
    mensagem = {
        texto = "[*KING*]",
        efeito = TEXTCOLOR_LIGHTBLUE
    },
    efeito = 30,
    globalstr = 121221
}

local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0

function onLogin(cid)
    local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
    if (query:getID() ~= -1) then
        local pid = query:getDataString("id")
        local name = query:getDataString("name")
        if getPlayerName(cid) == name then
            if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end
            setGlobalStorageValue(config.globalstr, pid)
            TopEffect(cid)
        end
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end

function onAdvance(cid, skill, oldlevel, newlevel)
    if skill == 8 then
        local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            local level = tonumber(query:getDataString("level"))
            if level < newlevel and topPlayer ~= getPlayerID(cid) then
                topPlayer = getPlayerID(cid)
                doSaveServer()
                setGlobalStorageValue(config.globalstr, getPlayerID(cid))
                TopEffect(cid)
            end            
        end
    end
    return true
end

function TopEffect(cid)
    if not isPlayer(cid) then return true end
    if topPlayer == getPlayerID(cid) then
        doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
        doSendMagicEffect(getCreaturePosition(cid), config.efeito)
        addEvent(TopEffect, config.tempo * 1000, cid)
    end
end

function getPlayerNameById(id)
    local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id))
    if query:getID() ~= -1 then
        return query:getDataString("name")
    end
    return 0
end

function getPlayerIdByName(name)
    local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name))
    if query:getID() ~= -1 then
        return tonumber(query:getDataString("id"))
    end
    return 0
end

function getPlayerID(cid)
    return getPlayerIdByName(getPlayerName(cid))
end

 

Editado por Phineasz (veja o histórico de edições)

Meu Curso sobre Programação para OTServer

Programando OTServer

 

Peça o seu script! Entre agora mesmo no grupo

Developing

 

Conteúdos:

 

Discord: Belmont#7352

Não esqueça do REP+ :)     

Link para o post
Compartilhar em outros sites
7 horas atrás, Phineasz disse:

@JEAN JR Tenta assim


	<event type="login" name="TopEffect" event="script" value="topeffect.lua"/>
    <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>
  Ocultar conteúdo

local config = {
    tempo = 5,
    mensagem = {
        texto = "[*KING*]",
        efeito = TEXTCOLOR_LIGHTBLUE
    },
    efeito = 30,
    globalstr = 121221
}

local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0

function onLogin(cid)
    local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
    if (query:getID() ~= -1) then
        local pid = query:getDataString("id")
        local name = query:getDataString("name")
        if getPlayerName(cid) == name then
            if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end
            setGlobalStorageValue(config.globalstr, pid)
            TopEffect(cid)
        end
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end

function onAdvance(cid, skill, oldlevel, newlevel)
    if skill == 8 then
        local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            local level = tonumber(query:getDataString("level"))
            if level < newlevel and topPlayer ~= getPlayerID(cid) then
                topPlayer = getPlayerID(cid)
                doSaveServer()
                setGlobalStorageValue(config.globalstr, getPlayerID(cid))
                TopEffect(cid)
            end            
        end
    end
    return true
end

function TopEffect(cid)
    if not isPlayer(cid) then return true end
    if topPlayer == getPlayerID(cid) then
        doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
        doSendMagicEffect(getCreaturePosition(cid), config.efeito)
        addEvent(TopEffect, config.tempo * 1000, cid)
    end
end

function getPlayerNameById(id)
    local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id))
    if query:getID() ~= -1 then
        return query:getDataString("name")
    end
    return 0
end

function getPlayerIdByName(name)
    local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name))
    if query:getID() ~= -1 then
        return tonumber(query:getDataString("id"))
    end
    return 0
end

function getPlayerID(cid)
    return getPlayerIdByName(getPlayerName(cid))
end

 

 

Vou testar assim que chegar em casa e darei o feedback.

Porem pelo que vi vc apenas tirou o comentario do 

 

(local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0) certo ? 

 

Se a resposta for Sim: eu tirei aquela linha pq ela só estava setando a storage apenas no PLAYER1 e quando o PLAYER2 pegava TOP LEVEL o efeito não ficava nem no PLAYER1 nem no PLAYER2. E quando o PLAYER1 pegava novamente o TOP LEVEL o efeito ia novamente pra ele. Por esse motivo comentei aquela linha.

Link para o post
Compartilhar em outros sites
  • Moderador

@JEAN JR O meu aqui estar funcionando perfeitamente, quando um Top Level é ultrapassado, o efeito é dado ao novo Top Level, e assim sucessivamente

Meu Curso sobre Programação para OTServer

Programando OTServer

 

Peça o seu script! Entre agora mesmo no grupo

Developing

 

Conteúdos:

 

Discord: Belmont#7352

Não esqueça do REP+ :)     

Link para o post
Compartilhar em outros sites
3 horas atrás, Vodkart disse:

Jaja eu chego em casa e tentarei

2 horas atrás, Phineasz disse:

@JEAN JR O meu aqui estar funcionando perfeitamente, quando um Top Level é ultrapassado, o efeito é dado ao novo Top Level, e assim sucessivamente

 

Vou testar quando chegar então.

15 horas atrás, Phineasz disse:

@JEAN JR Tenta assim


	<event type="login" name="TopEffect" event="script" value="topeffect.lua"/>
    <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>
  Ocultar conteúdo

local config = {
    tempo = 5,
    mensagem = {
        texto = "[*KING*]",
        efeito = TEXTCOLOR_LIGHTBLUE
    },
    efeito = 30,
    globalstr = 121221
}

local topPlayer = getGlobalStorageValue(config.globalstr) > 0 and getGlobalStorageValue(config.globalstr) or 0

function onLogin(cid)
    local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
    if (query:getID() ~= -1) then
        local pid = query:getDataString("id")
        local name = query:getDataString("name")
        if getPlayerName(cid) == name then
            if topPlayer ~= getPlayerID(cid) then topPlayer = getPlayerID(cid) end
            setGlobalStorageValue(config.globalstr, pid)
            TopEffect(cid)
        end
    end
    registerCreatureEvent(cid, "CheckTop")
    return true
end

function onAdvance(cid, skill, oldlevel, newlevel)
    if skill == 8 then
        local query = db.getResult("SELECT `id`, `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
        if (query:getID() ~= -1) then
            local level = tonumber(query:getDataString("level"))
            if level < newlevel and topPlayer ~= getPlayerID(cid) then
                topPlayer = getPlayerID(cid)
                doSaveServer()
                setGlobalStorageValue(config.globalstr, getPlayerID(cid))
                TopEffect(cid)
            end            
        end
    end
    return true
end

function TopEffect(cid)
    if not isPlayer(cid) then return true end
    if topPlayer == getPlayerID(cid) then
        doSendAnimatedText(getCreaturePosition(cid), config.mensagem.texto, config.mensagem.efeito)
        doSendMagicEffect(getCreaturePosition(cid), config.efeito)
        addEvent(TopEffect, config.tempo * 1000, cid)
    end
end

function getPlayerNameById(id)
    local query = db.getResult("SELECT `name` FROM `players` WHERE `id` = " .. db.escapeString(id))
    if query:getID() ~= -1 then
        return query:getDataString("name")
    end
    return 0
end

function getPlayerIdByName(name)
    local query = db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name))
    if query:getID() ~= -1 then
        return tonumber(query:getDataString("id"))
    end
    return 0
end

function getPlayerID(cid)
    return getPlayerIdByName(getPlayerName(cid))
end

 

 

Mano, muito obrigado ! Funcionou perfeitamente kkkk REP+

Link para o post
Compartilhar em outros sites
  • Moderador

@JEAN JR Confia que é sucesso kkk, faz um bom proveito ai do script :) 

Marca o tópico como respondido para quem tiver com a mesma dúvida/problema vim aqui e tentar resolver

Meu Curso sobre Programação para OTServer

Programando OTServer

 

Peça o seu script! Entre agora mesmo no grupo

Developing

 

Conteúdos:

 

Discord: Belmont#7352

Não esqueça do REP+ :)     

Link para o post
Compartilhar em outros sites
2 minutos atrás, Phineasz disse:

@JEAN JR Confia que é sucesso kkk, faz um bom proveito ai do script :) 

Marca o tópico como respondido para quem tiver com a mesma dúvida/problema vim aqui e tentar resolver

 

KKK PODE DEIXAR, VLW MSM !

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

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

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo