Ir para conteúdo

Featured Replies

Postado

Boa noite, não sei se já existe este script aqui no fórum caso não aqui está.

Este script foi testado na versão 8.6 TFS 0.4, funciona em servidores de Tibia, Pokemon, Narutibia etc...

 

Bom neste script eu tive como base o script de banner da PXG aonde você coloca ele em uma Hunt e ganha uma porcentagem X a mais de experiencia.

 

Instalando o Script

 

- Vá em data/lib crie um arquivo com o nome bannerExp.lua e cole o código abaixo nele:

-- Configurações --

effect_invoke_banner = 10 -- efeito que saira no banner quando ele for colocado no chao
effect_decay_banner = 2 -- efeito que saira no banner quando o tempo dele acabar
effect_kill_banner = 36 -- efeito que saira no banner quando o player matar um monstro e ganhar o bonus de exp

banner_radius_x = 5 -- distancia maxima em x que ira ocorreu o bonus
banner_radius_y = 5 -- distancia maxima em y que ira ocorreu o bonus

time_in_minutes = 60 -- configurado em minutos (caso queira em horas só colocar 60 * 60)
remove_banner_item = false -- Se estiver TRUE o item de criacao do banner sera removido do player, caso esteja FALSE o item não sera removido. 

config_banner = {

    --[ID DO ITEM CRIAR O BANNER] = {banner_id = ID DO BANNER, exp_bonus = % EXP PLAYER IRA GANHAR, time_left = TEMPO PARA SUBIR O BANNER},
	[4865] = {banner_id = 8617, exp_bonus = 20, time_left = 20},
	[4866] = {banner_id = 8618, exp_bonus = 25, time_left = 10},
	[4867] = {banner_id = 8619, exp_bonus = 35, time_left = 15},
	[4868] = {banner_id = 8620, exp_bonus = 45, time_left = 20},

}

-- Não Mexer --
time_banner = 7899987 
player_use_banner = 78999788 
storage_banner_x = 7889911 
storage_banner_y = 7889912 
storage_banner_z = 7889913 
storage_banner_id = 7884544 
storage_exp = 7889915 
rate_level = SKILL__LEVEL

 

- Agora vá em data/actions/scripts e crie um arquivo chamado bannerexp.lua e cole isto dentro:


function onUse(cid, item, frompos, itemEx, topos)

	if (getPlayerStorageValue(cid, player_use_banner) >= 1) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce ja esta usando o banner.")
		return true
	end
	
	if (config_banner[item.itemid]) then
		local banner = config_banner[item.itemid]
		if (remove_banner_item == true or remove_banner_item == TRUE) then
			doPlayerRemoveItem(cid, item.itemid, 1)
		end
		CreateBanner(cid, banner, itemEx)
		TimeBannerCheck(cid, banner, getThingPos(itemEx.uid))
		EffectBanner(getThingPos(itemEx.uid))
	end

end

function CreateBanner(cid, banner, itemEx)
	doCreateItem(banner.banner_id, getThingPos(itemEx.uid))
	doSendMagicEffect(getThingPos(itemEx.uid), effect_invoke_banner)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce usou o banner de ["..banner.exp_bonus.."% EXP], ele tem duração de "..banner.time_left.." minuto(s).")
	setPlayerStorageValue(cid, storage_banner_x, getThingPos(itemEx.uid).x)
	setPlayerStorageValue(cid, storage_banner_y, getThingPos(itemEx.uid).y)
	setPlayerStorageValue(cid, storage_banner_z, getThingPos(itemEx.uid).z)
	setPlayerStorageValue(cid, storage_banner_id, banner.banner_id)
	setPlayerStorageValue(cid, storage_exp, banner.exp_bonus)
	setPlayerStorageValue(cid, player_use_banner, 1)
	setPlayerStorageValue(cid, time_banner, os.time() + (banner.time_left * time_in_minutes))
end

function TimeBannerCheck(cid, banner, banner_pos)
	if not isCreature(cid) then
		doRemoveItem(getTileItemById(banner_pos, banner.banner_id).uid)
		doSendMagicEffect(banner_pos, effect_decay_banner)
		return true
	end

	if (getPlayerStorageValue(cid, time_banner) == os.time()) then
		doRemoveItem(getTileItemById(banner_pos, banner.banner_id).uid)
		doSendMagicEffect(banner_pos, effect_decay_banner)
		setPlayerStorageValue(cid, player_use_banner, -1)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O Banner de ["..banner.exp_bonus.."% EXP] terminou.")
		return true
	end

	addEvent(function()
		TimeBannerCheck(cid, banner, banner_pos)
	end, 1000)
end

- Em Actions.XML cole esta tag: 

<action itemid="4865" script="bannerexp.lua"/>

Aonde está 4865 você coloca o(s) ITEM_ID que será usado para summonar o banner no chão.

 

- Agora vá em data/creatureevents/scripts crie um arquivo chamado bannerexp.lua e cole isto dentro dele:


function onKill(cid, target)
	
	if not isMonster(target) then
		return true
	end

	if (getPlayerStorageValue(cid, storage_banner_id) <= -1) then
		return true
	end

	local banner_pos = {x=getPlayerStorageValue(cid, storage_banner_x), y=getPlayerStorageValue(cid, storage_banner_y), z=getPlayerStorageValue(cid, storage_banner_z)}

	if (getTileItemById(banner_pos, getPlayerStorageValue(cid, storage_banner_id)).uid >= 1) then
		if not (CheckPlayerInArea(cid, banner_pos)) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce esta fora da area do bonus.")
		end
	else
		doPlayerSetRate(cid, rate_level,1)
	end

	
	return true
end

function CheckPlayerInArea(cid, banner_pos)
	for x=banner_pos.x-banner_radius_x, banner_pos.x+banner_radius_x do
		for y=banner_pos.y-banner_radius_y, banner_pos.y+banner_radius_y do
			local banner_area = {x=x,y=y,z=banner_pos.z}
			local player = getTopCreature(banner_area).uid
			if (isPlayer(player)) then
				AddBonusExp(cid, banner_pos)
				return true
			end
		end
	end
end

function AddBonusExp(cid, banner_pos)
	doPlayerSetExperienceRate(cid, (1+(getPlayerStorageValue(cid, storage_exp)/100))+(getPlayerExtraExpRate(cid)/100))
	doSendMagicEffect(banner_pos, effect_kill_banner)
end

function getPlayerExtraExpRate(cid)
    return (getPlayerRates(cid)[rate_level]-1)*100
end

- Em Creatureevents.XML cole está tag:

<event type="kill" name="BannerExp" event="script" value="bannerexp.lua"/>

- Agora no arquivo login.lua em data/creatureevents/scripts cole este código antes do último return true:

registerCreatureEvent(cid, "BannerExp")
	if (getPlayerStorageValue(cid, 78999788) >= 1) then
		setPlayerStorageValue(cid, 78999788, -1)
	end

 

Explicação: (Configuração fica no arquivo adicionado no data/lib)

 

1° Aqui você configura a área em que o player tem que estar matando o monstro para poder ganhar o bônus 

banner_radius_x = 5 -- distancia maxima em x que ira ocorreu o bonus
banner_radius_y = 5 -- distancia maxima em y que ira ocorreu o bonus

 

2° Aqui você adiciona um novo banner (Lembre-se de adicionar o itemid que você colocar entre colchetes lá na tag em Actions.XML)

-[ID DO ITEM CRIAR O BANNER] = {banner_id = ID DO BANNER, exp_bonus = % EXP PLAYER IRA GANHAR, time_left = TEMPO PARA SUMIR O BANNER},

 

É isso... Script básico mais eu acho que vai ser bastante útil para muitos servidores.

 

-- ATUALIZAÇÃO --

- Adicionado mensagem quando o player sair da área do bônus!

- Adicionado variável que controla se o item da criação do banner será removido do player ou não. (Alterar a variável remove_banner_item em data/lib/bannerExp.lua). 

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

  • Respostas 8
  • Visualizações 1.8k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

Postado
  • Autor

@leozincorsair Boa noite:

 

4.thumb.png.4d2029dd8c963f5213742acf51532c2b.png

 

Explicando: 

 

A área que esta marcada em vermelho, será aonde ocorrerá o bônus de experiencia (que foi configurado no arquivo data/lib nas variáveis banner_radius_x e banner_radius_y). Caso o player esteja dentro desta área e matar um monstro, ocorrerá o efeito no banner como mostra no gif abaixo indicando que ele esta dentro da área e que houve um acréscimo na exp, caso contrario não ocorrera o efeito e nem o acréscimo de exp.

 

Obs: O banner só funcionará para o player que colocou ele.

 

teste.thumb.gif.688b997d9fc73f797c67c4467f48adce.gif

Postado
25 minutos atrás, MatteusDeli disse:

@leozincorsair Boa noite:

 

4.thumb.png.4d2029dd8c963f5213742acf51532c2b.png

 

Explicando: 

 

A área que esta marcada em vermelho, será aonde ocorrerá o bônus de experiencia (que foi configurado no arquivo data/lib nas variáveis banner_radius_x e banner_radius_y). Caso o player esteja dentro desta área e matar um monstro, ocorrerá o efeito no banner como mostra no gif abaixo indicando que ele esta dentro da área e que houve um acréscimo na exp, caso contrario não ocorrera o efeito e nem o acréscimo de exp.

 

Obs: O banner só funcionará para o player que colocou ele.

 

teste.thumb.gif.688b997d9fc73f797c67c4467f48adce.gif

 

obrigado, entendi mt bem

 

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