Rain System Com Ss

gui56
Por gui56
em Globalevents e Spells

gui56

The Lord
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/08Posts: 85Char no Tibia: Drunk Outlaw

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% Zakk (Por trazer e conteudo ao XTIBIA 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

twitters.jpg

 

blsp.jpg

Henrique Moura

Ex-administrador
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 17/02/08Posts: 2541

Muuuuito bom rapaz, realmente excelente.

Tópico organizado e bem explicado.

 

Abraços.

KaKilo ~
 


Lom14fD.png

luisfe23

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 31/10/08Posts: 871Char no Tibia: Luis Felipe Knight

Ótimo script e tópico organizado.

Parabens, continue sempre trazendo conteudo ao XTibia.

 

Abraços.

luisfe23 here

gui56

The Lord
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/08Posts: 85Char no Tibia: Drunk Outlaw

@Henrique Moura

Muito Obrigaado !

Abraço.

 

@luisfe23

Obrigado cara.

Abraço!

twitters.jpg

 

blsp.jpg

dwhfms

Eterno Coordenador - ou não :(
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 08/05/08Posts: 1342

Excelente Script Rapaz, muito bom mesmo!! Só uma dúvida:

 

O sistema não pesa no servidor? Deixa com Lag e tal? Ou roda tranquilo?

 

Abraços!

Entrada como Estagiário: 10/05/09

Entrada na Equipe de Imprensa: 23/06/09

Coordenador de Imprensa: 11/09/09

Coordenador de Redação: 20/03/11

Coordenador de Imprensa: 11/07/11

Diretor de Publicidade: 19/10/12

Contato: wonhelder@xtibia.com

 

"Não podemos prever o futuro, mas podemos criá-lo." Paul Pilzer

"Todo homem morre, mas são poucos os que realmente vivem." William Wallace

 



 

Conheça o Facebook do XTibia.com, lá você vê o melhor conteúdo do XTibia e ainda pode concorrer a prêmios incríveis!

 

facebooklogoq.jpg

gui56

The Lord
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/08Posts: 85Char no Tibia: Drunk Outlaw

@Won Helder

cara, acredito que tudo depende da velocidade da sua conexão com a internet e o desempenho do servidor que estará hospedando o OT, se tudo for bom, acho que nao terá laag não.

twitters.jpg

 

blsp.jpg

digo327

~~Gammy Fan~~
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/05/10Posts: 19Char no Tibia: Lord Tyz

Gostei muito do seu script.

 

Sao daqueles que vale a pena adicionar ao serv.

 

Abraço

Es fan do Gammy?? Entao poe esta barra na tua assinatura xD

 

~~Hail Gammy Bear~~

 

gammy.png

Ja ouviste o Gammy hj?? Nao?? Porque??

Oapocalipse

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/04/07Posts: 57Char no Tibia: Careta Feia

Muito bom! mas tem como retirar esse gelo? +REP

 

por favro, me passa um config boa pro escript. Pois quando usei aki, n fiko bom :\

gui56

The Lord
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/08Posts: 85Char no Tibia: Drunk Outlaw

Muito bom! mas tem como retirar esse gelo? +REP

 

por favro, me passa um config boa pro escript. Pois quando usei aki, n fiko bom :\

 

Edita nessa parte:

 

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	}

 

Ali ta mostrando o efeito "CONST_ANI_ICE" o ICE é o gelo.

twitters.jpg

 

blsp.jpg

zani123

http://HeroesOT.com
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 07/03/08Posts: 231Gênero: Masculino

Ja tinha visto esse script. Mas mesmo assim, vlw por trazer ao Xtibia.

 

Surpreenda-se no melhor server. Crie sua conta e ganhe dois dias VIP e Triple EXP até os 15 resets. Junte sua team, crie uma guild e venha para a war!

 

http://www.TheHeroesOfTime.com

thumbnail_Final - Copia - Copia.jpg

 

logo thot 200 - Copia.png

DevilMoon

@leonartei
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/01/10Posts: 706Gênero: MasculinoChar no Tibia: Bakwin

Muinto Bom cara o Ruin que deve dar uma Leg Tremenda no Ot, ja vi varios ots com esse sistema dava um leg fdp!

Contato: DevilMoon@Xtibia.com

gui56

The Lord
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/06/08Posts: 85Char no Tibia: Drunk Outlaw

Obrigado galera, quanto ao LAG, acredito que se o host do servidor for consideravelmente bom não vai dar LAG, outra possibilidade é diminuir a área em que a Chuva cai editando essa parte:

 

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}

 

Abraços.

twitters.jpg

 

blsp.jpg

caiocesar2

|.| Sou da época que Avatar era moda |.| ~ User Since 2005
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 03/12/06Posts: 149Char no Tibia: Kanye Rusty

Muito bom, parabéns :positive:

Achei bem legal.

 

Abraços

<< caiocesar2 >> Membro desde 2006 do Melhor Forum de Tibia e Otserver!

tyyyn.jpg

 

svjfjs.png

 

vemverfakejq6.gif

Celulares :

www.digivag.com.br

fenix123

Fenixlot Otserv...
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 07/07/10Posts: 29

Ei Galera. Fis tudo certinho so nao entendi essa parte

 

function onThink(interval, lastExecution)

local minX = 0

local minY = 0

local maxX = 120

local maxY = 150

 

Tpw o que eu tenho que editar ale?