Cuberite Forum

Full Version: Fire.LuA
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
anyone know how to add TNT boxes to this so they can be ignited? also does anyone know how to make railroads work? they dont link together andyou cant put a cart on it



PHP Code:
local FirePlugin = {} FirePlugin.__index = FirePlugin FireBlocks = {} function FirePlugin:new() local t = {} setmetatable(t, FirePlugin) local w = Lua__cPlugin:new() tolua.setpeer(w, t) w:tolua__set_instance(w) return w end function IsForeverBurnable( BlockID ) if( BlockID == E_BLOCK_BLOODSTONE ) then return true end return false end function IsBurnable( BlockID ) if( BlockID == E_BLOCK_LEAVES or BlockID == E_BLOCK_LOG BlockID) then return true end return false end function FindBurnableAround( X, Y, Z ) World = cRoot:Get():GetWorld() ListBurnables = {} if( IsBurnable( World:GetBlock(X-1, Y, Z) ) ) then table.insert( ListBurnables, { ["x"] = X-1, ["y"] = Y, ["z"] = Z } ) end if( IsBurnable( World:GetBlock(X+1, Y, Z) ) ) then table.insert( ListBurnables, { ["x"] = X+1, ["y"] = Y, ["z"] = Z } ) end if( IsBurnable( World:GetBlock(X, Y-1, Z) ) ) then table.insert( ListBurnables, { ["x"] = X, ["y"] = Y-1, ["z"] = Z } ) end if( IsBurnable( World:GetBlock(X, Y+1, Z) ) ) then table.insert( ListBurnables, { ["x"] = X, ["y"] = Y+1, ["z"] = Z } ) end if( IsBurnable( World:GetBlock(X, Y, Z-1) ) ) then table.insert( ListBurnables, { ["x"] = X, ["y"] = Y, ["z"] = Z-1 } ) end if( IsBurnable( World:GetBlock(X, Y, Z+1) ) ) then table.insert( ListBurnables, { ["x"] = X, ["y"] = Y, ["z"] = Z+1 } ) end return ListBurnables end function FirePlugin:OnDisable() Log( Plugin:GetName() .. " v." .. Plugin:GetVersion() .. " is shutting down..." ) end function FirePlugin:Initialize() self:SetName( "Fire" ) self:SetVersion( 1 ) PluginManager = cRoot:Get():GetPluginManager() PluginManager:AddHook( self, cPluginManager.E_PLUGIN_TICK ) PluginManager:AddHook( self, cPluginManager.E_PLUGIN_BLOCK_PLACE ) PluginManager:AddHook( self, cPluginManager.E_PLUGIN_BLOCK_DIG ) Log( "Initialized " .. self:GetName() .. " v." .. self:GetVersion() ) return true end function FirePlugin:OnBlockPlace( PacketData, Player ) if( PacketData.m_ItemType == E_BLOCK_FIRE or PacketData.m_ItemType == E_ITEM_FLINT_AND_STEEL ) then if( PacketData.m_Direction > -1 ) then local X = PacketData.m_PosX local Y = PacketData.m_PosY local Z = PacketData.m_PosZ X, Y, Z = AddDirection( X, Y, Z, PacketData.m_Direction ) --Since flint and steel doesn't do anything on the server side yet if( PacketData.m_ItemType == E_ITEM_FLINT_AND_STEEL ) then local World = cRoot:Get():GetWorld() World:SetBlock( X, Y, Z, E_BLOCK_FIRE, 0 ) end if( not IsForeverBurnable( World:GetBlock( X, Y-1, Z ) ) ) then table.insert( FireBlocks, { ["x"] = X, ["y"] = Y, ["z"] = Z } ) end end end return false -- dont forbid placing the fire end -- To put out fires! :D function FirePlugin:OnBlockDig( PacketData, Player ) if( PacketData.m_Direction < 0 ) then return false end local X = PacketData.m_PosX local Y = PacketData.m_PosY local Z = PacketData.m_PosZ X, Y, Z = AddDirection( X, Y, Z, PacketData.m_Direction ) local World = cRoot:Get():GetWorld() if( World:GetBlock( X, Y, Z ) == E_BLOCK_FIRE ) then World:SetBlock( X, Y, Z, E_BLOCK_AIR, 0 ) end return false end NumTicks = 0 function FirePlugin:Tick( DeltaTime ) if( NumTicks < 10 ) then -- Only spread every 10 ticks, to make sure it doesnt happen too fast NumTicks = NumTicks + 1 return end NumTicks = 0 World = cRoot:Get():GetWorld() NewTable = {} for key,val in pairs(FireBlocks) do X = val["x"] Y = val["y"] Z = val["z"] Burnables = FindBurnableAround(X, Y, Z) if( math.random(10) > 5 ) then table.insert( NewTable, val ) elseif( #Burnables > 0 ) then ToBurn = Burnables[ math.random( #Burnables ) ] World:SetBlock( ToBurn["x"], ToBurn["y"], ToBurn["z"], E_BLOCK_FIRE, 0 ) table.insert( NewTable, ToBurn ) table.insert( NewTable, val ) else World:SetBlock( X, Y, Z, 0, 0 ) end end FireBlocks = NewTable end Plugin = FirePlugin:new() cRoot:Get():GetPluginManager():AddPlugin( Plugin )
(02-28-2011, 10:06 AM)distroyed123 Wrote: [ -> ]anyone know how to add TNT boxes to this so they can be ignited? also does anyone know how to make railroads work? they dont link together andyou cant put a cart on it

Needs to be implemented into MCServer.
(03-01-2011, 02:47 AM)Tybor Wrote: [ -> ]
(02-28-2011, 10:06 AM)distroyed123 Wrote: [ -> ]anyone know how to add TNT boxes to this so they can be ignited? also does anyone know how to make railroads work? they dont link together andyou cant put a cart on it

Needs to be implemented into MCServer.

ahh ok, didnt know if everything needed to be emplemented