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

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



二四八.迷你花坛(用燧石种花坛,给种子长出花朵,每晚招来萤火虫)

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

local names = {"f1","f2","f3","f4","f5","f6","f7","f8","f9","f10"}
local function OnDeploy (inst, pt)
	local flowerpot = SpawnPrefab("flint")
	flowerpot.Transform:SetPosition(pt.x, pt.y, pt.z)
	flowerpot.AnimState:SetBank("firepit")
	flowerpot.AnimState:SetBuild("firepit")
	flowerpot.AnimState:PlayAnimation("idle",false)
	flowerpot.Transform:SetScale(0.5, 0.8, 0.5)
	flowerpot:RemoveComponent("edible")
	flowerpot:RemoveComponent("tradable")
	flowerpot:RemoveComponent("stackable")
	flowerpot:RemoveComponent("inventoryitem")
	flowerpot:RemoveComponent("bait")
	flowerpot:RemoveTag("molebait")
	flowerpot:AddTag("flowerpot")
	flowerpot:AddComponent("workable")
	flowerpot.components.workable:SetWorkAction(ACTIONS.HAMMER)
	flowerpot.components.workable:SetWorkLeft(3)
	flowerpot.components.workable:SetOnFinishCallback(function(flowerpot)
		SpawnPrefab("collapse_big").Transform:SetPosition(flowerpot.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
		local pos1 = Vector3(flowerpot.Transform:GetWorldPosition())
		local ents = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 0.5)
		for k,v in pairs(ents) do
			if v:HasTag("newflower") then
			   v:Remove()
			end
		end
		flowerpot:Remove()
	end )
	flowerpot:ListenForEvent( "dusktime", function()
		if flowerpot:HasTag("flowering") then
		   for k = 1,math.random(2,5) do
			   local pt1 = flowerpot:GetPosition()
			   local fireflies = SpawnPrefab("fireflies")
			   fireflies.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3)))
		   end
		end
	end , GetWorld() )
	flowerpot:ListenForEvent( "daytime", function()
		local pos = Vector3(flowerpot.Transform:GetWorldPosition())
		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
		for k,v in pairs(ents) do
			if v.prefab == "fireflies" and not v.components.inventoryitem:IsHeld() then
			   v:Remove()
			end
		end
	end , GetWorld() )
	flowerpot:AddComponent("trader")
	flowerpot.components.trader:SetAcceptTest(function(flowerpot, item)
		if not flowerpot:HasTag("flowering") then
		   if item.prefab == "seeds" then
			  return true
		   end
		end
		return false
	end )
	flowerpot.components.trader.onaccept = function(flowerpot, giver, item)
		local flower = SpawnPrefab("flint")
		flower.AnimState:SetBank("flowers")
		flower.AnimState:SetBuild("flowers")
		flower.animname = names[math.random(#names)]
		flower.AnimState:PlayAnimation(flower.animname)
		flower.AnimState:SetRayTestOnBB(true)
		flower.Transform:SetScale(1.5, 1.5, 1.5)
		flower.Physics:SetActive(false)
		local follower = flower.entity:AddFollower()
		follower:FollowSymbol( flowerpot.GUID, "swap_object", 0, -50, 0 )
		flower:RemoveComponent("edible")
		flower:RemoveComponent("tradable")
		flower:RemoveComponent("stackable")
		flower:RemoveComponent("inventoryitem")
		flower:RemoveComponent("bait")
		flower:RemoveTag("molebait")
		flower:AddComponent("sanityaura")
		flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
		flower:AddComponent("pickable")
		flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
		flower.components.pickable:SetUp("petals", 0.1)
	flower.components.pickable.onpickedfn = function(flower)
			flower:Remove()
			flower = nil
			flowerpot:RemoveTag("flowering")
		end
		flower:AddTag("newflower")
		flower:AddTag("goodbye")
		flowerpot:AddTag("flowering")
	end
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("goodbye") then
		data.goodbye = true
	end
	if inst:HasTag("flowerpot") then
		data.flowerpot = true
	end
	if inst:HasTag("flowering") then
		data.flowering = true
	end
end
local function onload(inst, data)
	if data and data.goodbye then
	   inst:Remove()
	end
	if data and data.flowerpot then
	   inst.AnimState:SetBank("firepit")
	   inst.AnimState:SetBuild("firepit")
	   inst.AnimState:PlayAnimation("idle",false)
	   inst.Transform:SetScale(0.5, 0.8, 0.5)
	   inst:RemoveComponent("edible")
	   inst:RemoveComponent("tradable")
	   inst:RemoveComponent("stackable")
	   inst:RemoveComponent("inventoryitem")
	   inst:RemoveComponent("bait")
	   inst:RemoveTag("molebait")
	   inst:AddTag("flowerpot")
	   inst:AddComponent("workable")
	   inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
	   inst.components.workable:SetWorkLeft(3)
	   inst.components.workable:SetOnFinishCallback(function(inst)
		   SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
		   GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
		   local pos1 = Vector3(inst.Transform:GetWorldPosition())
		   local ents = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 0.5)
		   for k,v in pairs(ents) do
			   if v:HasTag("newflower") then
				  v:Remove()
			   end
		   end
		   inst:Remove()
	   end )
	   inst:ListenForEvent( "dusktime", function()
		   if inst:HasTag("flowering") then
			  for k = 1,math.random(2,5) do
				  local pt1 = inst:GetPosition()
				  local fireflies = SpawnPrefab("fireflies")
				  fireflies.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3)))
			  end
		   end
	   end , GetWorld() )
	   inst:ListenForEvent( "daytime", function()
		   local pos = Vector3(inst.Transform:GetWorldPosition())
		   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
		   for k,v in pairs(ents) do
			   if v.prefab == "fireflies" and not v.components.inventoryitem:IsHeld() then
				  v:Remove()
			   end
		   end
	   end , GetWorld() )
	   inst:AddComponent("trader")
	   inst.components.trader:SetAcceptTest(function(inst, item)
		   if not inst:HasTag("flowering") then
			  if item.prefab == "seeds" then
				 return true
			  end
		   end
		   return false
	   end )
	   inst.components.trader.onaccept = function(inst, giver, item)
		   local flower = SpawnPrefab("flint")
		   flower.AnimState:SetBank("flowers")
		   flower.AnimState:SetBuild("flowers")
		   flower.animname = names[math.random(#names)]
		   flower.AnimState:PlayAnimation(flower.animname)
		   flower.AnimState:SetRayTestOnBB(true)
		   flower.Transform:SetScale(1.5, 1.5, 1.5)
		   flower.Physics:SetActive(false)
		   local follower = flower.entity:AddFollower()
		   follower:FollowSymbol( inst.GUID, "swap_object", 0, -50, 0 )
		   flower:RemoveComponent("edible")
		   flower:RemoveComponent("tradable")
		   flower:RemoveComponent("stackable")
		   flower:RemoveComponent("inventoryitem")
		   flower:RemoveComponent("bait")
		   flower:RemoveTag("molebait")
		   flower:AddComponent("sanityaura")
		   flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
		   flower:AddComponent("pickable")
		   flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
		   flower.components.pickable:SetUp("petals", 0.1)
	   flower.components.pickable.onpickedfn = function(flower)
			   flower:Remove()
			   flower = nil
			   inst:RemoveTag("flowering")
		   end
		   flower:AddTag("newflower")
		   flower:AddTag("goodbye")
		   inst:AddTag("flowering")
	   end
	end
	if data and data.flowering then
	   local flower = SpawnPrefab("flint")
	   flower.AnimState:SetBank("flowers")
	   flower.AnimState:SetBuild("flowers")
	   flower.animname = names[math.random(#names)]
	   flower.AnimState:PlayAnimation(flower.animname)
	   flower.AnimState:SetRayTestOnBB(true)
	   flower.Transform:SetScale(1.5, 1.5, 1.5)
	   flower.Physics:SetActive(false)
	   local follower = flower.entity:AddFollower()
	   follower:FollowSymbol( inst.GUID, "swap_object", 0, -50, 0 )
	   flower:RemoveComponent("edible")
	   flower:RemoveComponent("tradable")
	   flower:RemoveComponent("stackable")
	   flower:RemoveComponent("inventoryitem")
	   flower:RemoveComponent("bait")
	   flower:RemoveTag("molebait")
	   flower:AddComponent("sanityaura")
	   flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
	   flower:AddComponent("pickable")
	   flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
	   flower.components.pickable:SetUp("petals", 0.1)
	   flower.components.pickable.onpickedfn = function(flower)
		   flower:Remove()
		   flower = nil
		   inst:RemoveTag("flowering")
	   end
	   flower:AddTag("newflower")
	   flower:AddTag("goodbye")
	   inst:AddTag("flowering")
	end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可用燧石种迷你花坛,在花坛中放入1个种子(拿着种子对花坛点鼠标左键),可开一朵花,品种随机。鼠标左键点花朵,可摘花(获得花瓣)。当花坛中有花时,靠近可以补脑,并且每晚都会招来萤火虫(天亮时消失),尽情捕捉吧。如果同时修改了“网上宠宠店”,就可以将抓到的萤火虫在线卖掉换黄金。不想要迷你花坛时,用锤子砸掉即可