代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2三0八.百变存钱罐(用鱼竿种百变存钱罐,每天获得3个黄金的零花钱,可变外型、防雷击、照明、补脑)
3
4 用MT管理器打开游戏目录/assets/scripts/prefabs/fishingrod.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function itemtest(inst, item, slot)
7 if item.prefab == "goldnugget" then
8 return true
9 end
10 return false
11end
12local slotpos = { Vector3(0,-75,0)}
13local widgetbuttoninfo = {
14 text = "Change",
15 position = Vector3(0, -15, 0),
16 fn = function(inst)
17 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
18 inst:RemoveTag("doll_1") inst:RemoveTag("doll_2") inst:RemoveTag("doll_3") inst:RemoveTag("doll_4") inst:RemoveTag("doll_5") inst:RemoveTag("doll_6") inst:RemoveTag("doll_7") inst:RemoveTag("doll_8") inst:RemoveTag("doll_9") inst:RemoveTag("doll_10")
19 if math.random()<.08 then
20 inst:AddTag("doll_1")
21 inst.AnimState:SetBank("bearger")
22 inst.AnimState:SetBuild("bearger_build")
23 inst.AnimState:PlayAnimation("idle_loop")
24 inst.Transform:SetScale(0.2,0.2,0.2)
25 elseif math.random()<.16 then
26 inst:AddTag("doll_2")
27 inst.AnimState:SetBank("lightning_goat")
28 inst.AnimState:SetBuild("lightning_goat_build")
29 inst.AnimState:PlayAnimation("idle_loop")
30 inst.Transform:SetScale(0.6,0.6,0.6)
31 elseif math.random()<.24 then
32 inst:AddTag("doll_3")
33 inst.AnimState:SetBank("leif")
34 inst.AnimState:SetBuild("leif_build")
35 inst.AnimState:PlayAnimation("idle_loop")
36 inst.Transform:SetScale(0.35,0.35,0.35)
37 elseif math.random()<.32 then
38 inst:AddTag("doll_4")
39 inst.AnimState:SetBank("beefalo")
40 inst.AnimState:SetBuild("beefalo_build")
41 inst.AnimState:PlayAnimation("idle_loop")
42 inst.Transform:SetScale(0.5,0.5,0.5)
43 elseif math.random()<.4 then
44 inst:AddTag("doll_5")
45 inst.AnimState:SetBank("rook")
46 inst.AnimState:SetBuild("rook_build")
47 inst.AnimState:PlayAnimation("idle")
48 inst.Transform:SetScale(0.3,0.3,0.3)
49 elseif math.random()<.48 then
50 inst:AddTag("doll_6")
51 inst.AnimState:SetBank("deerclops")
52 inst.AnimState:SetBuild("deerclops_build")
53 inst.AnimState:PlayAnimation("idle_loop")
54 inst.Transform:SetScale(0.35,0.35,0.35)
55 elseif math.random()<.56 then
56 inst:AddTag("doll_7")
57 inst.AnimState:SetBank("rook")
58 inst.AnimState:SetBuild("rook_rhino")
59 inst.AnimState:PlayAnimation("idle")
60 inst.Transform:SetScale(0.3,0.3,0.3)
61 elseif math.random()<.64 then
62 inst:AddTag("doll_8")
63 inst.AnimState:SetBank("Pig_King")
64 inst.AnimState:SetBuild("Pig_King")
65 inst.AnimState:PlayAnimation("idle")
66 inst.Transform:SetScale(0.4,0.4,0.4)
67 elseif math.random()<.72 then
68 inst:AddTag("doll_9")
69 inst.AnimState:SetBank("goosemoose")
70 inst.AnimState:SetBuild("goosemoose_build")
71 inst.AnimState:PlayAnimation("idle")
72 inst.Transform:SetScale(0.3,0.3,0.3)
73 elseif math.random()<.95 then
74 inst:AddTag("doll_10")
75 inst.AnimState:SetBank("dragonfly")
76 inst.AnimState:SetBuild("dragonfly_build")
77 inst.AnimState:PlayAnimation("idle")
78 inst.Transform:SetScale(0.3,0.3,0.3)
79 else
80 inst.AnimState:SetBank("trinkets")
81 inst.AnimState:SetBuild("trinkets")
82 inst.AnimState:PlayAnimation(tostring(4))
83 inst.Transform:SetScale(1.5,1.5,1.5)
84 end
85 end }
86local function OnDeploy (inst, pt)
87 local doll = SpawnPrefab("fishingrod")
88 doll.Transform:SetPosition(pt.x, pt.y, pt.z)
89 doll.AnimState:SetBank("trinkets")
90 doll.AnimState:SetBuild("trinkets")
91 doll.AnimState:PlayAnimation(tostring(4))
92 doll.Transform:SetFourFaced()
93 doll.Transform:SetScale(1.5,1.5,1.5)
94 local light = doll.entity:AddLight()
95 light:SetFalloff(0.5)
96 light:SetIntensity(.8)
97 light:SetRadius(3.0)
98 light:SetColour(180/255, 195/255, 50/255)
99 light:Enable(true)
100 MakeObstaclePhysics(doll, 0.5)
101 doll:RemoveComponent("fishingrod")
102 doll:RemoveComponent("finiteuses")
103 doll:RemoveComponent("inventoryitem")
104 doll:RemoveComponent("equippable")
105 if doll.components.weapon then doll:RemoveComponent("weapon") end
106 doll:RemoveComponent("deployable")
107 doll.components.container.canbeopened = true
108 doll:AddComponent("named")
109 doll.components.named:SetName("Piggy bank")
110 doll:AddComponent("sanityaura")
111 doll.components.sanityaura.aura = TUNING.SANITYAURA_MED
112 doll:AddTag("lightningrod")
113 doll:ListenForEvent("lightningstrike", function()
114 doll.AnimState:SetBloomEffectHandle( "shaders/anim.ksh" )
115 doll:DoTaskInTime(60, function()
116 doll.AnimState:SetBloomEffectHandle("")
117 end )
118 end )
119 doll:AddComponent("workable")
120 doll.components.workable:SetWorkAction(ACTIONS.HAMMER)
121 doll.components.workable:SetWorkLeft(3)
122 doll.components.workable:SetOnFinishCallback(function(doll)
123 doll.Light:Enable(false)
124 doll.components.container:DropEverything()
125 SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(doll.Transform:GetWorldPosition())
126 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
127 doll:Remove()
128 end )
129 doll:ListenForEvent( "daytime", function()
130 for k = 1, 3 do
131 local goldnugget = SpawnPrefab("goldnugget")
132 doll.components.container:GiveItem(goldnugget)
133 end
134 end, GetWorld())
135 doll:AddTag("scarytoprey")
136 doll:AddTag("dolls")
137 inst:Remove()
138end
139 inst:AddComponent("deployable")
140 inst.components.deployable.ondeploy = OnDeploy
141local function onsave(inst, data)
142 if inst:HasTag("dolls") then
143 data.dolls = true
144 end
145 if inst:HasTag("doll_1") then
146 data.doll_1 = true
147 end
148 if inst:HasTag("doll_2") then
149 data.doll_2 = true
150 end
151 if inst:HasTag("doll_3") then
152 data.doll_3 = true
153 end
154 if inst:HasTag("doll_4") then
155 data.doll_4 = true
156 end
157 if inst:HasTag("doll_5") then
158 data.doll_5 = true
159 end
160 if inst:HasTag("doll_6") then
161 data.doll_6 = true
162 end
163 if inst:HasTag("doll_7") then
164 data.doll_7 = true
165 end
166 if inst:HasTag("doll_8") then
167 data.doll_8 = true
168 end
169 if inst:HasTag("doll_9") then
170 data.doll_9 = true
171 end
172 if inst:HasTag("doll_10") then
173 data.doll_10 = true
174 end
175end
176local function onload(inst, data)
177 if data and data.dolls then
178 inst.AnimState:SetBank("trinkets")
179 inst.AnimState:SetBuild("trinkets")
180 inst.AnimState:PlayAnimation(tostring(4))
181 inst.Transform:SetFourFaced()
182 inst.Transform:SetScale(1.5,1.5,1.5)
183 local light = inst.entity:AddLight()
184 light:SetFalloff(0.5)
185 light:SetIntensity(.8)
186 light:SetRadius(3.0)
187 light:SetColour(180/255, 195/255, 50/255)
188 light:Enable(true)
189 MakeObstaclePhysics(inst, 0.5)
190 inst:RemoveComponent("fishingrod")
191 inst:RemoveComponent("finiteuses")
192 inst:RemoveComponent("inventoryitem")
193 inst:RemoveComponent("equippable")
194 if inst.components.weapon then inst:RemoveComponent("weapon") end
195 inst:RemoveComponent("deployable")
196 inst.components.container.canbeopened = true
197 inst:AddComponent("named")
198 inst.components.named:SetName("Piggy bank")
199 inst:AddComponent("sanityaura")
200 inst.components.sanityaura.aura = TUNING.SANITYAURA_MED
201 inst:AddTag("lightningrod")
202 inst:ListenForEvent("lightningstrike", function()
203 inst.AnimState:SetBloomEffectHandle( "shaders/anim.ksh" )
204 inst:DoTaskInTime(60, function()
205 inst.AnimState:SetBloomEffectHandle("")
206 end )
207 end )
208 inst:AddComponent("workable")
209 inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
210 inst.components.workable:SetWorkLeft(3)
211 inst.components.workable:SetOnFinishCallback(function(inst)
212 inst.Light:Enable(false)
213 inst.components.container:DropEverything()
214 SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(inst.Transform:GetWorldPosition())
215 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
216 inst:Remove()
217 end )
218 inst:ListenForEvent( "daytime", function()
219 for k = 1, 3 do
220 local goldnugget = SpawnPrefab("goldnugget")
221 inst.components.container:GiveItem(goldnugget)
222 end
223 end, GetWorld())
224 inst:AddTag("scarytoprey")
225 inst:AddTag("dolls")
226 end
227 if data and data.doll_1 then
228 inst:AddTag("doll_1")
229 inst.AnimState:SetBank("bearger")
230 inst.AnimState:SetBuild("bearger_build")
231 inst.AnimState:PlayAnimation("idle_loop")
232 inst.Transform:SetScale(0.2,0.2,0.2)
233 end
234 if data and data.doll_2 then
235 inst:AddTag("doll_2")
236 inst.AnimState:SetBank("lightning_goat")
237 inst.AnimState:SetBuild("lightning_goat_build")
238 inst.AnimState:PlayAnimation("idle_loop")
239 inst.Transform:SetScale(0.6,0.6,0.6)
240 end
241 if data and data.doll_3 then
242 inst:AddTag("doll_3")
243 inst.AnimState:SetBank("leif")
244 inst.AnimState:SetBuild("leif_build")
245 inst.AnimState:PlayAnimation("idle_loop")
246 inst.Transform:SetScale(0.35,0.35,0.35)
247 end
248 if data and data.doll_4 then
249 inst:AddTag("doll_4")
250 inst.AnimState:SetBank("beefalo")
251 inst.AnimState:SetBuild("beefalo_build")
252 inst.AnimState:PlayAnimation("idle_loop")
253 inst.Transform:SetScale(0.5,0.5,0.5)
254 end
255 if data and data.doll_5 then
256 inst:AddTag("doll_5")
257 inst.AnimState:SetBank("rook")
258 inst.AnimState:SetBuild("rook_build")
259 inst.AnimState:PlayAnimation("idle")
260 inst.Transform:SetScale(0.3,0.3,0.3)
261 end
262 if data and data.doll_6 then
263 inst:AddTag("doll_6")
264 inst.AnimState:SetBank("deerclops")
265 inst.AnimState:SetBuild("deerclops_build")
266 inst.AnimState:PlayAnimation("idle_loop")
267 inst.Transform:SetScale(0.35,0.35,0.35)
268 end
269 if data and data.doll_7 then
270 inst:AddTag("doll_7")
271 inst.AnimState:SetBank("rook")
272 inst.AnimState:SetBuild("rook_rhino")
273 inst.AnimState:PlayAnimation("idle")
274 inst.Transform:SetScale(0.3,0.3,0.3)
275 end
276 if data and data.doll_8 then
277 inst:AddTag("doll_8")
278 inst.AnimState:SetBank("Pig_King")
279 inst.AnimState:SetBuild("Pig_King")
280 inst.AnimState:PlayAnimation("idle")
281 inst.Transform:SetScale(0.4,0.4,0.4)
282 end
283 if data and data.doll_9 then
284 inst:AddTag("doll_9")
285 inst.AnimState:SetBank("goosemoose")
286 inst.AnimState:SetBuild("goosemoose_build")
287 inst.AnimState:PlayAnimation("idle")
288 inst.Transform:SetScale(0.3,0.3,0.3)
289 end
290 if data and data.doll_10 then
291 inst:AddTag("doll_10")
292 inst.AnimState:SetBank("dragonfly")
293 inst.AnimState:SetBuild("dragonfly_build")
294 inst.AnimState:PlayAnimation("idle")
295 inst.Transform:SetScale(0.3,0.3,0.3)
296 end
297end
298 inst.OnSave = onsave
299 inst.OnLoad = onload
300 inst:AddComponent("container")
301 inst.components.container:SetNumSlots(#slotpos)
302 inst.components.container.widgetslotpos = slotpos
303 inst.components.container.widgetpos = Vector3(0,150,0)
304 inst.components.container.side_align_tip = 160
305 inst.components.container.itemtestfn = itemtest
306 inst.components.container.widgetbuttoninfo = widgetbuttoninfo
307 inst.components.container.canbeopened = false
308
309 即可用鱼竿种百变存钱罐,鼠标左键点存钱罐可打开格子,每天将获得3个黄金的零花钱,在格子中拿取。点格子上方的“Change”按钮,可使存钱罐改换为巨鹿、猪王、熊等造型。百变存钱罐放在家中,可防雷击、照明,靠近会补脑,并且可以吓阻火鸡、兔子等小动物,让它们不敢偷吃你扔在地上的食物。不想要百变存钱罐了,用锤子砸掉即可,里面的黄金会掉在地上。鱼竿在生存选项(画着绳套)下,用2个树枝、2个蛛丝制造