Ir para conteúdo

Fogo Dinâmico


Jvchequer

Posts Recomendados

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.

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...