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

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


  1
  2.百变存钱罐(用鱼竿种百变存钱罐,每天获得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个蛛丝制造