代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。

原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html



二五0.小油灯(用蜘蛛腺体种小油灯,放在地上自动点燃,无限燃烧,可烧炭、烤食物、取暖、照明)

	1.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/log.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

	inst:AddComponent("cookable")
	inst.components.cookable.product = "charcoal"


	2.用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/spidergland.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

local colours=
{
	{198/255,43/255,43/255},
	{79/255,153/255,68/255},
	{35/255,105/255,235/255},
	{233/255,208/255,69/255},
	{109/255,50/255,163/255},
	{222/255,126/255,39/255},
}
local function OnDeploy (inst, pt)
	local lamp = SpawnPrefab("spidergland")
	lamp.Transform:SetPosition(pt.x, pt.y, pt.z)
	lamp.AnimState:SetBank("trinkets")
	lamp.AnimState:SetBuild("trinkets")
	lamp.AnimState:PlayAnimation(tostring(2))
	lamp.components.inventoryitem:ChangeImageName("trinket_2")
	lamp.entity:AddSoundEmitter()
	lamp.Transform:SetScale(1.2,1.2,1.2)
	lamp.colour_idx = math.random(#colours)
	lamp.AnimState:SetMultColour(colours[lamp.colour_idx][1],colours[lamp.colour_idx][2],colours[lamp.colour_idx][3],1)
	lamp:RemoveComponent("stackable")
	lamp:RemoveComponent("tradable")
	lamp:RemoveComponent("healer")
	lamp:RemoveComponent("burnable")
	lamp:RemoveComponent("propagator")
	lamp:RemoveComponent("deployable")
	lamp:RemoveTag("cattoy")
	lamp:AddComponent("cooker")
	lamp:AddComponent("burnable")
	lamp.components.burnable:SetFXLevel(3)
	lamp.components.burnable:AddBurnFX("campfirefire", Vector3(0,0.5,0) )
	lamp.components.burnable:Ignite(true)
	lamp.components.inventoryitem:SetOnDroppedFn(function() lamp.components.burnable:Ignite(true) lamp:AddTag("ontheground") end )
	lamp.components.inventoryitem:SetOnPickupFn(function() lamp.components.burnable:Extinguish() lamp:RemoveTag("ontheground") end )
	lamp.components.inventoryitem:SetOnPutInInventoryFn(function() lamp.components.burnable:Extinguish() lamp:RemoveTag("ontheground") end )
	lamp:ListenForEvent("onignite", function()
		if not lamp.components.cooker then lamp:AddComponent("cooker") end
	end )
	lamp:ListenForEvent("onextinguish", function()
		lamp.SoundEmitter:PlaySound("dontstarve/common/fireOut")  
		if lamp.components.cooker then lamp:RemoveComponent("cooker") end
	end )
	lamp:AddComponent("workable")
	lamp.components.workable:SetWorkAction(ACTIONS.HAMMER)
	lamp.components.workable:SetWorkLeft(3)
	lamp.components.workable:SetOnFinishCallback(function(lamp)
		SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(lamp.Transform:GetWorldPosition())
		lamp:Remove()
	end )
	lamp:AddTag("ontheground")
	lamp:AddTag("light")
	lamp:AddTag("lamps")
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy

local function onsave(inst, data)
	if inst:HasTag("lamps") then
	   data.lamps = true
	end
	if inst:HasTag("ontheground") then
	   data.ontheground = true
	end
	data.colour_idx = inst.colour_idx
end
local function onload(inst, data)
  if data and data.lamps then
	inst.AnimState:SetBank("trinkets")
	inst.AnimState:SetBuild("trinkets")
	inst.AnimState:PlayAnimation(tostring(2))
	inst.components.inventoryitem:ChangeImageName("trinket_2")
	inst.entity:AddSoundEmitter()
	inst.Transform:SetScale(1.2,1.2,1.2)
	inst.colour_idx = math.random(#colours)
	inst.AnimState:SetMultColour(colours[inst.colour_idx][1],colours[inst.colour_idx][2],colours[inst.colour_idx][3],1)
	inst:RemoveComponent("stackable")
	inst:RemoveComponent("tradable")
	inst:RemoveComponent("healer")
	inst:RemoveComponent("burnable")
	inst:RemoveComponent("propagator")
	inst:RemoveComponent("deployable")
	inst:RemoveTag("cattoy")
	inst:AddComponent("burnable")
	inst.components.burnable:SetFXLevel(3)
	inst.components.burnable:AddBurnFX("campfirefire", Vector3(0,0.5,0) )
	inst.components.inventoryitem:SetOnDroppedFn(function() inst.components.burnable:Ignite(true) inst:AddTag("ontheground") end )
	inst.components.inventoryitem:SetOnPickupFn(function() inst.components.burnable:Extinguish() inst:RemoveTag("ontheground") end )
	inst.components.inventoryitem:SetOnPutInInventoryFn(function() inst.components.burnable:Extinguish() inst:RemoveTag("ontheground") end )
	inst:ListenForEvent("onignite", function()
		if not inst.components.cooker then inst:AddComponent("cooker") end
	end )
	inst:ListenForEvent("onextinguish", function()
		inst.SoundEmitter:PlaySound("dontstarve/common/fireOut")  
		if inst.components.cooker then inst:RemoveComponent("cooker") end
	end )
	inst:AddComponent("workable")
	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
	inst.components.workable:SetWorkLeft(3)
	inst.components.workable:SetOnFinishCallback(function(inst)
		SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(inst.Transform:GetWorldPosition())
		inst:Remove()
	end )
	inst:AddTag("light")
	inst:AddTag("lamps")
  end
  if data and data.ontheground then
	inst.components.burnable:Ignite(true)
	inst:AddComponent("cooker")
	inst:AddTag("ontheground")
  end
  if data and data.colour_idx then
	 inst.colour_idx = math.min(#colours, data.colour_idx)
	 inst.AnimState:SetMultColour(colours[inst.colour_idx][1],colours[inst.colour_idx][2],colours[inst.colour_idx][3],1)
  end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可用蜘蛛腺体种小油灯(颜色随机),无须任何燃料,放在地上自动点燃,拿起来自动熄灭。拿着木头对油灯按鼠标左键,可将木头烧成炭。也可烤食物、取暖、照明,出行必备。不想要小油灯时,用锤子砸掉即可