BR
creatureevent

TopLevel Effect

Por Bruno, 14 de abr. de 2015 em Globalevents e Spells

toplevel effect
tibia
script
otserv
21
11.6k
BrunoB
14 de abril de 2015 às 15:00

Introdução

Ele simplesmente manda um efeito para o Top Level caso ele estiver online, além disso, ele checa quando o top é ultrapassado e o efeito passa automaticamente ao novo top.

 

Instalação:

 

Em data/creaturescripts/creaturescripts.xml adicione:

 

<event type="login" name="TopEffect" event="script" value="topeffect.lua"/>
<event type="advance" name="CheckTop" event="script" value="topeffect.lua"/>
Agora crie um arquivo em data/creaturescripts/scripts com o nome topeffect.lua e adicione:

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

local config = {
	tempo = 10, --tempo em segundos
	mensagem = {
		texto = "[TOP]", --não use mais de 9 caracteres
		efeito = TEXTCOLOR_LIGHTBLUE --efeito para a função doSendAnimatedText
	},
	efeito = 30, --efeito da função doSendMagicEffect
	globalstr = 5687 -- 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)
			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))
				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

Espero que gostem :)

LeoTKL
14 de abril de 2015 às 17:08

Teria alguma print de como fica in-game?

1 mês depois...
BrunoB
23 de maio de 2015 às 06:06

Teria alguma print de como fica in-game?

Ele fica subindo um efeito de texto, de x em x tempos, com a mensagem: [TOP]

É algo um tanto quanto simples...

1 mês depois...
XtudomuitoX
04 de junho de 2015 às 19:20

Poderia dizer como coloco uma storage com valor tipo (5212,4), pq no msm Server tem graduação:

 

(5212,1) genin

(5212,2) chunin

(5212,3) jounin

(5212,4) hokage

 

aí quem fosse o top vira a graduação hokage.

BrunoB
04 de junho de 2015 às 21:30

Poderia dizer como coloco uma storage com valor tipo (5212,4), pq no msm Server tem graduação:

 

(5212,1) genin

(5212,2) chunin

(5212,3) jounin

(5212,4) hokage

 

aí quem fosse o top vira a graduação hokage.

setPlayerStorageValue(cid, 5212, 1) -- genin

setPlayerStorageValue(cid, 5212, 2) -- chunin

setPlayerStorageValue(cid, 5212, 3) -- jounin

setPlayerStorageValue(cid, 5212, 4) -- hokage

XtudomuitoX
04 de junho de 2015 às 22:07

Eu n entendo muito de script, poderia dizer onde eu coloco no seu script.

Editado Junho 5 por Xtudomuito

JosegvbJ
09 de junho de 2015 às 00:24

hola, fiz o test com o script e fica lindao demais porem nao e ativado so com o top, o script e ativado qndo qualquer um upa 1 lvl ele "vira o top" msm sendo lvl 3 e tendo lvls 500 no server

BrunoB
09 de junho de 2015 às 06:40

hola, fiz o test com o script e fica lindao demais porem nao e ativado so com o top, o script e ativado qndo qualquer um upa 1 lvl ele "vira o top" msm sendo lvl 3 e tendo lvls 500 no server

Vou verificar e para encontrar o bug e arrumar.

3 semanas depois...
VodkartV
23 de junho de 2015 às 23:00
Refiz o código de outro jeito, as TAGS são as MESMAS.



Editado Junho 23 por Vodkart

BrunoB
24 de junho de 2015 às 05:47

Refiz o código de outro jeito, as TAGS são as MESMAS.

 

Créditos ao Bruno: http://pastebin.com/raw.php?i=pr8G8DQH

HAahhaa, depois vou testar e atualizo no principal.

Esse foi um dos meus primeiros scripts quando comecei mexer com lua, nunca mais alterei ele.

 

Vlw vod.

1 mês depois...
LaionelL
19 de julho de 2015 às 19:40

Ficaria melhor se tivesse alguma Print .-.

adorationA
21 de julho de 2015 às 16:13

Como pongo el storage al top lvl?

BrunoB
21 de julho de 2015 às 16:18

Como pongo el storage al top lvl?

Pode colocar nas funções onLogin e onAdvance.

adorationA
21 de julho de 2015 às 16:49

ñao entendi XD

 

function onLogin(player)
player:loadVipData()
player:updateVipTime()
local loginStr = "Welcome to " .. configManager.getString(configKeys.SERVER_NAME) .. "!"
if player:getLastLoginSaved() <= 0 then
loginStr = loginStr .. " Please choose your outfit."
player:sendOutfitWindow()
else
if loginStr ~= "" then
player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
end
loginStr = string.format("Your last visit was on %s.", os.date("%a %b %d %X %Y", player:getLastLoginSaved()))
end
player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
??

Editado Julho 21 por adoration

BrunoB
21 de julho de 2015 às 17:53

Cara, me refiro à função do script que eu postei aqui...

Se você prestar atenção ele trata essas duas funções...

Então nelas você poderia usar para atribuir uma storage ao top level.