Ir para conteúdo

Featured Replies

Postado

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

 

Resolvido por Belmont

Ir para solução
  • Respostas 7
  • Visualizações 1.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • usa assim: https://pastebin.com/raw/zLdgfNNK

  • @JEAN JR Tenta assim <event type="login" name="TopEffect" event="script" value="topeffect.lua"/> <event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>

Postado
  • 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+ :)     

Postado
  • Autor
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.

Postado

@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+ :)     

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo