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

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


  1
  2二四八.迷你花坛(用燧石种花坛,给种子长出花朵,每晚招来萤火虫)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/flint.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local names = {"f1","f2","f3","f4","f5","f6","f7","f8","f9","f10"}
  7local function OnDeploy (inst, pt)
  8	local flowerpot = SpawnPrefab("flint")
  9	flowerpot.Transform:SetPosition(pt.x, pt.y, pt.z)
 10	flowerpot.AnimState:SetBank("firepit")
 11	flowerpot.AnimState:SetBuild("firepit")
 12	flowerpot.AnimState:PlayAnimation("idle",false)
 13	flowerpot.Transform:SetScale(0.5, 0.8, 0.5)
 14	flowerpot:RemoveComponent("edible")
 15	flowerpot:RemoveComponent("tradable")
 16	flowerpot:RemoveComponent("stackable")
 17	flowerpot:RemoveComponent("inventoryitem")
 18	flowerpot:RemoveComponent("bait")
 19	flowerpot:RemoveTag("molebait")
 20	flowerpot:AddTag("flowerpot")
 21	flowerpot:AddComponent("workable")
 22	flowerpot.components.workable:SetWorkAction(ACTIONS.HAMMER)
 23	flowerpot.components.workable:SetWorkLeft(3)
 24	flowerpot.components.workable:SetOnFinishCallback(function(flowerpot)
 25		SpawnPrefab("collapse_big").Transform:SetPosition(flowerpot.Transform:GetWorldPosition())
 26		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
 27		local pos1 = Vector3(flowerpot.Transform:GetWorldPosition())
 28		local ents = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 0.5)
 29		for k,v in pairs(ents) do
 30			if v:HasTag("newflower") then
 31			   v:Remove()
 32			end
 33		end
 34		flowerpot:Remove()
 35	end )
 36	flowerpot:ListenForEvent( "dusktime", function()
 37		if flowerpot:HasTag("flowering") then
 38		   for k = 1,math.random(2,5) do
 39			   local pt1 = flowerpot:GetPosition()
 40			   local fireflies = SpawnPrefab("fireflies")
 41			   fireflies.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3)))
 42		   end
 43		end
 44	end , GetWorld() )
 45	flowerpot:ListenForEvent( "daytime", function()
 46		local pos = Vector3(flowerpot.Transform:GetWorldPosition())
 47		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
 48		for k,v in pairs(ents) do
 49			if v.prefab == "fireflies" and not v.components.inventoryitem:IsHeld() then
 50			   v:Remove()
 51			end
 52		end
 53	end , GetWorld() )
 54	flowerpot:AddComponent("trader")
 55	flowerpot.components.trader:SetAcceptTest(function(flowerpot, item)
 56		if not flowerpot:HasTag("flowering") then
 57		   if item.prefab == "seeds" then
 58			  return true
 59		   end
 60		end
 61		return false
 62	end )
 63	flowerpot.components.trader.onaccept = function(flowerpot, giver, item)
 64		local flower = SpawnPrefab("flint")
 65		flower.AnimState:SetBank("flowers")
 66		flower.AnimState:SetBuild("flowers")
 67		flower.animname = names[math.random(#names)]
 68		flower.AnimState:PlayAnimation(flower.animname)
 69		flower.AnimState:SetRayTestOnBB(true)
 70		flower.Transform:SetScale(1.5, 1.5, 1.5)
 71		flower.Physics:SetActive(false)
 72		local follower = flower.entity:AddFollower()
 73		follower:FollowSymbol( flowerpot.GUID, "swap_object", 0, -50, 0 )
 74		flower:RemoveComponent("edible")
 75		flower:RemoveComponent("tradable")
 76		flower:RemoveComponent("stackable")
 77		flower:RemoveComponent("inventoryitem")
 78		flower:RemoveComponent("bait")
 79		flower:RemoveTag("molebait")
 80		flower:AddComponent("sanityaura")
 81		flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
 82		flower:AddComponent("pickable")
 83		flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
 84		flower.components.pickable:SetUp("petals", 0.1)
 85	flower.components.pickable.onpickedfn = function(flower)
 86			flower:Remove()
 87			flower = nil
 88			flowerpot:RemoveTag("flowering")
 89		end
 90		flower:AddTag("newflower")
 91		flower:AddTag("goodbye")
 92		flowerpot:AddTag("flowering")
 93	end
 94	inst.components.stackable:Get():Remove()
 95end
 96	inst:AddComponent("deployable")
 97	inst.components.deployable.ondeploy = OnDeploy
 98local function onsave(inst, data)
 99	if inst:HasTag("goodbye") then
100		data.goodbye = true
101	end
102	if inst:HasTag("flowerpot") then
103		data.flowerpot = true
104	end
105	if inst:HasTag("flowering") then
106		data.flowering = true
107	end
108end
109local function onload(inst, data)
110	if data and data.goodbye then
111	   inst:Remove()
112	end
113	if data and data.flowerpot then
114	   inst.AnimState:SetBank("firepit")
115	   inst.AnimState:SetBuild("firepit")
116	   inst.AnimState:PlayAnimation("idle",false)
117	   inst.Transform:SetScale(0.5, 0.8, 0.5)
118	   inst:RemoveComponent("edible")
119	   inst:RemoveComponent("tradable")
120	   inst:RemoveComponent("stackable")
121	   inst:RemoveComponent("inventoryitem")
122	   inst:RemoveComponent("bait")
123	   inst:RemoveTag("molebait")
124	   inst:AddTag("flowerpot")
125	   inst:AddComponent("workable")
126	   inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
127	   inst.components.workable:SetWorkLeft(3)
128	   inst.components.workable:SetOnFinishCallback(function(inst)
129		   SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
130		   GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
131		   local pos1 = Vector3(inst.Transform:GetWorldPosition())
132		   local ents = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 0.5)
133		   for k,v in pairs(ents) do
134			   if v:HasTag("newflower") then
135				  v:Remove()
136			   end
137		   end
138		   inst:Remove()
139	   end )
140	   inst:ListenForEvent( "dusktime", function()
141		   if inst:HasTag("flowering") then
142			  for k = 1,math.random(2,5) do
143				  local pt1 = inst:GetPosition()
144				  local fireflies = SpawnPrefab("fireflies")
145				  fireflies.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3)))
146			  end
147		   end
148	   end , GetWorld() )
149	   inst:ListenForEvent( "daytime", function()
150		   local pos = Vector3(inst.Transform:GetWorldPosition())
151		   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
152		   for k,v in pairs(ents) do
153			   if v.prefab == "fireflies" and not v.components.inventoryitem:IsHeld() then
154				  v:Remove()
155			   end
156		   end
157	   end , GetWorld() )
158	   inst:AddComponent("trader")
159	   inst.components.trader:SetAcceptTest(function(inst, item)
160		   if not inst:HasTag("flowering") then
161			  if item.prefab == "seeds" then
162				 return true
163			  end
164		   end
165		   return false
166	   end )
167	   inst.components.trader.onaccept = function(inst, giver, item)
168		   local flower = SpawnPrefab("flint")
169		   flower.AnimState:SetBank("flowers")
170		   flower.AnimState:SetBuild("flowers")
171		   flower.animname = names[math.random(#names)]
172		   flower.AnimState:PlayAnimation(flower.animname)
173		   flower.AnimState:SetRayTestOnBB(true)
174		   flower.Transform:SetScale(1.5, 1.5, 1.5)
175		   flower.Physics:SetActive(false)
176		   local follower = flower.entity:AddFollower()
177		   follower:FollowSymbol( inst.GUID, "swap_object", 0, -50, 0 )
178		   flower:RemoveComponent("edible")
179		   flower:RemoveComponent("tradable")
180		   flower:RemoveComponent("stackable")
181		   flower:RemoveComponent("inventoryitem")
182		   flower:RemoveComponent("bait")
183		   flower:RemoveTag("molebait")
184		   flower:AddComponent("sanityaura")
185		   flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
186		   flower:AddComponent("pickable")
187		   flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
188		   flower.components.pickable:SetUp("petals", 0.1)
189	   flower.components.pickable.onpickedfn = function(flower)
190			   flower:Remove()
191			   flower = nil
192			   inst:RemoveTag("flowering")
193		   end
194		   flower:AddTag("newflower")
195		   flower:AddTag("goodbye")
196		   inst:AddTag("flowering")
197	   end
198	end
199	if data and data.flowering then
200	   local flower = SpawnPrefab("flint")
201	   flower.AnimState:SetBank("flowers")
202	   flower.AnimState:SetBuild("flowers")
203	   flower.animname = names[math.random(#names)]
204	   flower.AnimState:PlayAnimation(flower.animname)
205	   flower.AnimState:SetRayTestOnBB(true)
206	   flower.Transform:SetScale(1.5, 1.5, 1.5)
207	   flower.Physics:SetActive(false)
208	   local follower = flower.entity:AddFollower()
209	   follower:FollowSymbol( inst.GUID, "swap_object", 0, -50, 0 )
210	   flower:RemoveComponent("edible")
211	   flower:RemoveComponent("tradable")
212	   flower:RemoveComponent("stackable")
213	   flower:RemoveComponent("inventoryitem")
214	   flower:RemoveComponent("bait")
215	   flower:RemoveTag("molebait")
216	   flower:AddComponent("sanityaura")
217	   flower.components.sanityaura.aura = TUNING.SANITYAURA_SMALL
218	   flower:AddComponent("pickable")
219	   flower.components.pickable.picksound = "dontstarve/wilson/pickup_plants"
220	   flower.components.pickable:SetUp("petals", 0.1)
221	   flower.components.pickable.onpickedfn = function(flower)
222		   flower:Remove()
223		   flower = nil
224		   inst:RemoveTag("flowering")
225	   end
226	   flower:AddTag("newflower")
227	   flower:AddTag("goodbye")
228	   inst:AddTag("flowering")
229	end
230end
231	inst.OnSave = onsave
232	inst.OnLoad = onload
233
234	即可用燧石种迷你花坛,在花坛中放入1个种子(拿着种子对花坛点鼠标左键),可开一朵花,品种随机。鼠标左键点花朵,可摘花(获得花瓣)。当花坛中有花时,靠近可以补脑,并且每晚都会招来萤火虫(天亮时消失),尽情捕捉吧。如果同时修改了“网上宠宠店”,就可以将抓到的萤火虫在线卖掉换黄金。不想要迷你花坛时,用锤子砸掉即可