JV

Fogo Dinâmico

Por Jvchequer, 13 de dez. de 2007 em Actions e Talkactions

20
4.3k
JvchequerJ
13 de dezembro de 2007 às 13:57

Créditos: newsoftzzz(pelo code) e SuperGillis(Pela Action recriando o Code)

 

O SuperGillis resolveu recriar o code do fogo dinâmico do newsoftzzz, porém, ao invés de fazer em C++ ele fez de um modo muito mais prático, em Lua.

 

Está é o Code Recriado pelo SuperGillis

 

Faça um arquivo chamado fire.lua e coloque-o em sua pasta Data.

Dentro do fire.lua deve conter o que está escrito abaixo.

dofile('data/wood.lua')

fires = {}

function addFire(pos, toItemId)
local fire = getFire(pos)
if fire ~= nil then
	transFormFire(fire, pos)
else
	local uid = doCreateItem(1489, 1, pos)
	if uid > 0 then
		local info = nil
		if burningStuff[toItemId] == nil then
			info = burningStuff[1]
		else
			info = burningStuff[toItemId]
		end
		fires[posToStr(pos)] = {interval = info[1], event = 0, continue = 1, running = 0, data = info}
		fires[posToStr(pos)].event = addEvent(checkFire, info[1], {pos = pos})
	end
end
return 1
end

function posToStr(pos)
return (pos.x..' '..pos.y..' '..pos.z)
end

function strToPos(str)
local firstPoint = string.find(str, ' ')
local secondPoint = string.find(str, ' ', firstPoint+1)
local outputPos = {x=0, y=0, z=0}
outputPos.x = tonumber(string.sub(str, 1, firstPoint-1))
outputPos.y = tonumber(string.sub(str, firstPoint+1, secondPoint-1))
outputPos.z = tonumber(string.sub(str, secondPoint+1))
return outputPos
end

function getFire(pos)
local fire = getThingfromPos({x=pos.x, y=pos.y, z=pos.z, stackpos=2})
if fire ~= nil and isInArray({1487, 1488, 1489}, fire.itemid) == 1 then
	return fire
end
return nil
end

function transFormFire(fire, pos)
local toId = math.min(math.max(fire.itemid-1, 1487), 1489)
doTransformItem(fire.uid, toId)
return toId
end

function checkFire(vars)
if fires[posToStr(vars.pos)] == nil then
	return 0
end
local fire = getFire(vars.pos)
if fire == nil then
	return 0
end
if math.random(0, 100) < fires[posToStr(vars.pos)].data[3] then
	local randX = math.random(-1, 1)
	local randY = math.random(-1, 1)
	if randX == 0 and randY == 0 then
		transFormFire(fire, vars.pos)
	else
		local coX = vars.pos.x+randX
		local coY = vars.pos.y+randY
		local coZ = vars.pos.z
		local wood = getThingfromPos({x=coX, y=coY, z=coZ, stackpos=1})
		if wood == nil then
			return 0
		end
		if burningStuff[wood.itemid] ~= nil then
			addFire({x=coX, y=coY, z=coZ, stackpos=2}, wood.itemid)
		end
	end
end
if fires[posToStr(vars.pos)].running > fires[posToStr(vars.pos)].data[2]*1000 then
	print('[checkFire] Stopping!')
	local wood = getThingfromPos({x=vars.pos.x, y=vars.pos.y, z=vars.pos.z, stackpos=1})
	if wood ~= nil then
		fires[posToStr(vars.pos)].continue = 0
		doRemoveItem(wood.uid)
	end
	doDecayItem(fire.uid)
end
if fires[posToStr(vars.pos)].continue == 0 then
	fires[posToStr(vars.pos)] = nil
	return 0
end
if fire.itemid == 1487 then
	fires[posToStr(vars.pos)].running = fires[posToStr(vars.pos)].running+fires[posToStr(vars.pos)].data[1]
	--print('[checkFire] '..fires[posToStr(vars.pos)].running)
end
fires[posToStr(vars.pos)].event = addEvent(checkFire, fires[posToStr(vars.pos)].data[1], vars)
return 1
end

 

Faça um arquivo chamado wood.lua e coloque-o em sua pasta Data.

Dentro do fire.lua deve conter o que está escrito abaixo.

 

--[[ info
[id] = {check, burn, chance}

id = the id of the item that you want to be burnt
burn = after howmuch seconds (when the big flame started) must the item dissapear
chance = how big is the chance that the fire jumps to another burning item?
]]--

burningStuff = {
-- wet trees
[2700] = {2000, 30, 80},
[2700] = {2000, 30, 80},
[2701] = {2000, 30, 80},
[2702] = {2000, 30, 80},
[2703] = {2000, 30, 80},
[2704] = {2000, 30, 80},
[2705] = {2000, 30, 80},
[2706] = {2000, 30, 80},
[2707] = {2000, 30, 80},
[2708] = {2000, 30, 80},
[2711] = {2000, 30, 80},
[2712] = {2000, 30, 80},
-- dry trees
[2709] = {1500, 20, 85},
[2710] = {1500, 20, 85},
[2713] = {1500, 20, 85},
[2714] = {1500, 20, 85},
[2715] = {1500, 20, 85},
[2716] = {1500, 20, 85},
[2717] = {1500, 20, 85},
[2718] = {1500, 20, 85},
[2719] = {1500, 20, 85},
[2720] = {1500, 20, 85},
[2721] = {1500, 20, 85},
[2722] = {1500, 20, 85},
}

 

Depois adicione antes de tudo no global.lua o código a seguir.

dofile('data/fire.lua')

 

 

Você também poderá escolher vários itens para queimar as árvores adicionando-os a este código abaixo.

Depois de escolher os itens, ou deixar como realmente é só por o código abaixo no começo do fire.lua

 

function onUse(cid, item, frompos, item2, topos)
if isInArray({1488, 1489}, item2.itemid) or burningStuff[item2.itemid] ~= nil then
	return addFire(topos, item2.itemid)
end
return 0
end

 

 

Caso tenha algum erro de tradução feito por minha pessoa, por favor, me comunique.

Não dou Suporte.

 

 

Espero que aproveitem a Action,

 

Sem mais.

Editado Dezembro 13 por JV Chequer

BeoWulfB
13 de dezembro de 2007 às 14:26

Nossa. que bacana. Pena que a minha equipe, Kingdom Age, já possuiu isto, em LUA também, mas muito bem feito e aprabéns a eles por divulgarem e criarem em lua, mais bem feito e menor.

ShrimpzinS
13 de dezembro de 2007 às 14:52

Não Entendi a Função Disso.

Felipe MoraesF
13 de dezembro de 2007 às 15:06

boa jv :D

deve ser bem manero isso ae

Editado Dezembro 13 por pekeboi

Conde SapoC
13 de dezembro de 2007 às 20:59

sem comentários

só aplausos

aplauso.gif

 

 

 

:XTibia_smile:

speedyksS
14 de dezembro de 2007 às 16:17

Como disse nosso amigo Conde Sapo :D

So Aplausos >=D

 

aplauso.gif

14 de dezembro de 2007 às 19:24
Não Entendi a Função Disso.

 

 

esse aqui ele poe fogo nas arvores e ele vai passando pras otras como um incendio

silkssS
16 de dezembro de 2007 às 22:15

Legal! Assim da pra fazer o OT serve ficar muito mais realista! =D

 

Boa JV!

 

Cya

JvchequerJ
17 de dezembro de 2007 às 13:34

Que bom que tenham gostados.

 

Fuçando na NET se pode achar várias coisas legais para os OTS ;D

AlttliA
17 de dezembro de 2007 às 18:15

Isso é como se fosse um incêndio...

 

Mas em incêndios reais o fogo o faz a árvore desaparecer e sim faz ela virar carvão ;]

podia transformar as arvores nas arvores secas... seria melhor e mais legal..

ThthtT
17 de dezembro de 2007 às 20:33

muito legal

eu estou viajando, quando eu voltar eu testo

18 de dezembro de 2007 às 11:09

verdade poderia virar dead tree neh

NostradamusN
19 de dezembro de 2007 às 16:38

na verdade o newszoftzz não tem crédito algum pelo código, e sim pela idéia apenas. O código foi totalmente feito pelo SuperGillis.

DeadKennedyD
19 de dezembro de 2007 às 17:03

Nossa, realmente incrivel...

Realista e divertido!

 

Sem mais comentários...

:hi:

1 mês depois...
linkayL
04 de janeiro de 2008 às 19:41

:winksmiley02: Parabens

Otimo topico e o fogo tem um efeito bem legal