代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个种子(拿着种子对花坛点鼠标左键),可开一朵花,品种随机。鼠标左键点花朵,可摘花(获得花瓣)。当花坛中有花时,靠近可以补脑,并且每晚都会招来萤火虫(天亮时消失),尽情捕捉吧。如果同时修改了“网上宠宠店”,就可以将抓到的萤火虫在线卖掉换黄金。不想要迷你花坛时,用锤子砸掉即可