Ir para conteúdo
Entre para seguir isso  
Kaotar

Rain System

Recommended Posts

Kaotar    5
Kaotar

Nome do Sistema ou Script: 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
Descrição e/ou Informações Adicionais: Sistema de chuva +D

 

Ae galerinha, olha eu postando algo aqui de novo(não sei por que de novo, acho que nunca tinha postado nada)..

Bom lhe apresento meu sistema de chuva, feita para a antiga Apocalipse Team, que não existe mais e decidi postar o script.

 

Bom para começar a instalação será necessário o download do script no final do tópico(PS: quando eu conseguir anexar, por enquanto será necessário copiar um por um).

 

[spoiler=Scripts]

Script:

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

Lib:

-- 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

 

 

Instalação: Primeiro coloque a lib dentro da pasta "data/globalevents/lib/" e salve com o nome Rain.lua e coloque o script dentro da pasta "data/globalevents/script/" e salve com o nome rain.lua. Será necessário adiciona duas tags para que o script funcione uma no arquivo "data/globalevents/lib/globalevents.lua" e outra no arquivo "data/globalevents/globalevents.xml". Segue abaixo as tags.

 

[spoiler=globalevents.lua]

dofile(getDataDir() .."globalevents/lib/Rain.lua")

 

[spoiler=globalevents.xml]

<globalevent name="rain" interval="200" event="script" value="rain.lua"/>

 

 

Configurando: O script não necessita de muitas configurações, apenas mude as variáveis como seu gosto:

[spoiler=Variaveis]

	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 deixa a chuva muito feia.

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

[spoiler=Argumentos]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.

 

SS:raind.jpg

Só para vocês terem uma idéia de como é.

Compartilhar este post


Link para o post
Flatronez    1
Flatronez

Gostei mesmo! Dependendo da imaginação de quem for usar, dá pra fazer chover até itens xD

 

 

aprovadog.png

Compartilhar este post


Link para o post
Mock    32
Mock

Mock aproves.

Seção exclusiva flatronencias '-'

Compartilhar este post


Link para o post
pejuge2    1
pejuge2

Wow, merecia exclusivo...

Compartilhar este post


Link para o post
Roku    0
Roku

Wow merecia exclusivo²

Compartilhar este post


Link para o post
Chriistian    0
Chriistian

Muito bom,testado e aprovado.

Compartilhar este post


Link para o post
Flatronez    1
Flatronez

Fail meu, era pra eu ter movido pra lá mesmo :palm:

Compartilhar este post


Link para o post
dragonlorde    0
dragonlorde

Cara que legal so pela SS da pra ve a qualidade

O script esta inpecavel

Parabens aew!

Compartilhar este post


Link para o post
Foreign    0
Foreign

Bem Legal , Mais Ja Sabia Desse Sistema De Rain , Ele Vem Junto Com o Alissow OT's 3.9 ! : D Mesmo Assim Achei Bem Legal , Gogo Faze Chuver Pig [/semsintido

uHUHAuhuhHU

Compartilhar este post


Link para o post
Kaotar    5
Kaotar

@TOPIC

Vlw pelos elogios galera

 

@Foreign

Cara desculpe, não sou atualizado em ots, porém pode ter um script de chuva no Allison, mas igual ao meu é impossível por que somente os ex-membros do Apocalipse que viram este script até agora.

Flws

Compartilhar este post


Link para o post
vodkasiri    0
vodkasiri

coitado do cara que tiver andando, aoeiasoea vai levar um meteorito na cabeça OIEOASIESOAIESAOIEA

 

mt massa parabéns. (:

Compartilhar este post


Link para o post
Mickfern    32
Mickfern

Cara, muito legal, pela ss da pra ver que é mt bom e mt loko. Vlw pela contribuição ai, merece exclusivo mesmo, tested e aproved.

Compartilhar este post


Link para o post
Chriistian    0
Chriistian

Ae cara, eu adiciono alguns efeitos ou troco por esses mais não sai o efeito desejado sai um outro qualquer.

Compartilhar este post


Link para o post
Delo Vicious    0
Delo Vicious

uhuuu, vo tentar mudar, se não der eu volto aqui pra pergunta oque eu devo fazer :X

Compartilhar este post


Link para o post
Kaotar    5
Kaotar

@Chriistian

 

Não esquece de mudar na função rain:start,

Leia os argumentos da função. =D

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

Troque a essa ai para a nova =D.

 

Fui

Compartilhar este post


Link para o post
GustavoMassa    1
GustavoMassa

Muito bom!

Bem criativo ta de parabens, ótimo script ;D

Compartilhar este post


Link para o post
Lyon    3
Lyon

Sem duvidas,é digno de aplausos!:yes:

Compartilhar este post


Link para o post
Rei_vegeta    0
Rei_vegeta

como todos dissem impecavel.

nunca tinha visto algo assim antes.

tirando uma magia que eu tinha feito antes que mostra todos os efeito

mais nao caia nada no chao.

por favor de uma olhada na area de ideias talvez vc possa me ajudar.

http://forums.otserv.com.br/f330/

Compartilhar este post


Link para o post
god_dreamer    1
god_dreamer

Duvida aqui:

 

local minX = 0

local minY = 0

local maxX = 120

local maxY = 150

 

Local minX seeria a posição Topos = X, e local minY seria frompos = Y?

Compartilhar este post


Link para o post
fran68    0
fran68

up:

Eu acho que é Asin como configurá-lo.

aaaa1g.png

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×