Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Rain System

Nome do Sistema: Rain System

Nome do Autor: Kaotar

Servidor Testado e/ou Versão do Tibia: TSF 0.3.6(8.54), acho que funciona em versões mais antigas, fiz ele para a versão 0.3.3

Créditos: 99% Kaotar (Por Fazer o Script) / 1% Guilherme. (Por trazer e conteudo ao TibiaKing e Organizar o Tópico)

Entre em data/globalevents/script/, crie um arquivo com nome rain.lua, cole o código abaixo, salve e feche:

local rain = Rain:new()


function onThink(interval, lastExecution)

	local minX = 0

	local minY = 0

	local maxX = 120

	local maxY = 150


	local frompos = {x=math.random(minX, maxX), y=math.random(minY, maxY), z=7}

	local topos = {x=math.random(frompos.x, maxX), y=math.random(frompos.y, maxY), z=7}


	local effects = {

		snow = {

			disteffect = CONST_ANI_SNOWBALL,

			effect = CONST_ME_ICETORNADO

		},

		rain = {

			disteffect = CONST_ANI_ICE,

			effect = CONST_ME_LOSEENERGY

		}

	}

	random = math.random(0, 10)

	if (random == 0) then

		rain.chance = math.random(10,50)

		rain:start({fromPos = frompos, toPos = topos}, effects.snow, 300, math.random(100, 500))

	else

		rain.chance = math.random(20,100)

		rain.createItem = {chance = math.random(0,10), item = {itemid = 2016, type = 1}}

		rain:start({fromPos = frompos, toPos = topos}, effects.rain, math.random(100, 1000), math.random(100, 350))

	end

	return TRUE

end
Agora vá em data/globalevents/globalevents.xml e adicione essa TAG:
<globalevent name="rain" interval="200" event="script" value="rain.lua"/>
Depois, vá em data/globalevents/lib/, crie um arquivo com nome Rain.lua, cole o código abaixo, salve e feche:
-- Features:

	-- chance = OBJECT.chance = INT

	-- createItem = OBJECT.createItem = {chance = INT, item = {itemid = INT, type = INT}}



Rain = {ignoreIds = {4526}}


function Rain:new()

    local obj = {}

    setmetatable(obj, self)

    self.__index = self

	return obj

end

function Rain:getPositionInArea(fromPos, toPos)

	self.positions = {}

	for Y = fromPos.y, toPos.y do

		for X = fromPos.x, toPos.x do

			if (getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid ~= 0) then

				if not (string.match(string.lower(getItemNameById(getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid)), "water")) then

					table.insert(self.positions, {x=X, y=Y, z=Z})

				end

			end

		end

	end

	return true

end


function Rain:doRain(position, disteffect, effect)

	if (self.duraction ~= self.executed) then

		local chance = self.chance or 100

		if (math.random(0, 1000) <= chance) then

			for Z = 0, 7 do

				if (getTileThingByPos(({x = position.x, y = position.y, z = Z})).itemid ~= 0) then

					doSendDistanceShoot({x = position.x - 7, y = position.y - 5, z = Z}, {x = position.x, y = position.y, z = Z}, disteffect)

					doSendMagicEffect({x = position.x, y = position.y, z = Z}, effect)

					if (self.createItem) then

						if (math.random(0, 1000) <= self.createItem.chance) then

							if (isInArray(self.ignoreIds, getTileThingByPos({x=X, y=Y, z=Z, stackpos=0}).itemid) == FALSE) then

								local item = doCreateItem(self.createItem.item.itemid, self.createItem.item.type, {x=position.x, y=position.y, z=Z})

								doDecayItem(item)

							end

						end

					end

					break

				end

			end

		end

		return true

	else

		return false

	end

end


function Rain:start(positions, effects, duraction, delay, var)

	self:getPositionInArea(positions.fromPos, positions.toPos)

	if not (self.positions[1]) then

		return false

	end

	self.delay = delay

	self.var = var or self

	self.effects = effects

	self.duraction = duraction

	self.executed = 0

	addEvent(doCallback, self.delay, {var=self.var})

	return true

end


function doCallback(p)

	for _, v in pairs(p.var.positions) do

		if not (p.var:doRain(v, p.var.effects.disteffect, p.var.effects.effect)) then

			return true

		end

	end

	addEvent(doCallback, p.var.delay, {var=p.var})

	p.var.executed = p.var.executed+1

end
Agora vá em data/globalevents/lib/globalevents.lua e adicione essa TAG:
dofile(getDataDir() .."globalevents/lib/Rain.lua")
Configurando: O script não necessita de muitas configurações, apenas mude as variáveis como seu gosto:
local minX = 0

	local minY = 0

	local maxX = 120

	local maxY = 150

Bom essa configuração muda apenas a posição das chuvas se quiser mudar a densidade da chuva mude a linha rain.chance = math.random(20,100), lembrando não ultrapasse muito do valor 100, pois pode deixar a chuva muito feia.

Para entender melhor a função rain:start(positions, effects, duraction, delay) postarei o que cada argumento significa.

positions - sera um tabela com 2 posições chamadas fromPos e toPos. Exemplo : {fromPos = {x=10, y=10, z=7}, toPos={x=20, y=20, z=7}

effects - será uma tabela com os efeitos mandando no solo e de cima para baixo. Exemplo: rain = {disteffect = CONST_ANI_ICE, effect = CONST_ME_LOSEENERGY }

duraction - será o numero de vezes que ira "chover", ou seja, cair efeitos, dando assim a duração da chuva. Exemplo: 100

delay - será a diferença do tempo de cada pingo de chuva influencia a densidade da chuva, lembrando que também tem a variável chance

Para tornar a chuva mais intensa diminua o delay e aumente o duraction e a chance, mais fraca o inverso.

Para chuvas mais duradouras aumente o delay e o duraction.

Também é possível que o script crie "poças de agua" isso é configurado na linha rain.createItem = {chance = math.random(0,10), item = {itemid = 2016, type = 1}}.

Para aqueles que sabem mexer em script é possível fazer chover meteoros mudando os efeitos e varias outras coisas a sua imaginação.

Para mudar de quanto enquanto tempo a chuva ira acontecer devera mudar a tag do globalevents.xml na parte de interval.

Considerações finais: Não é aconselhável usar a snow do jeito que está configurado, pois está bem feio, também há um erro que sempre que ocorre uma nova chuva se uma antiga esta acontecendo, a velha para, e a novo começa. É fácil arrumar, porém eu só não arrumei pois isso pode acarretar novos bugs.

Screenshot:

raind.jpg

29161_4.png

 

 

2d168ur.png

 

Link para o post
Compartilhar em outros sites
  • 10 months later...

Acho que esse tópico está velho de mais :P

Cuidado com o flood Calvin.

O tópico está muito desorganizado.

 http://baiakuza.com/
IP: baiakuza.com
TIBIA: 10.96
Baiak Custom [ High Exp Rate ]

 

 

 

 

Link para o post
Compartilhar em outros sites
  • 2 years later...

Desculpem-me reviver o tópico, mas eu gostária de saber se alguem testou esse Script em um TFS 0.4, alguem testou?

Conlheça o projeto:

QtzGx2h.png

Link para o post
Compartilhar em outros sites
  • 1 year later...
  • 1 month later...
Em 08/02/2016 21:41:06, Alysson334 disse:

como faz chove

Meu amigo temos um tópico recente para fazer chover, segue a este tópico

 

Tópico: 

 

Criador, a procura de mapper e scripter para server de tibia 8.6 DEDICADO

 

| IP: real-world.servegame.com | XP: 650 | Baiak EDITED (PRÓPRIO) | DEDICADO 24horas Online | Aberto 10.12.15 |

logo.png

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo