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

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


  1
  2二六0.奶报箱(用苔藓种奶报箱,放入黄金,每天清晨送来报纸和5瓶牛奶,读报纸可补脑)
  3
  4	MT管理器打开游戏目录/assets/scripts/prefabs/cutlichen.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function itemtest(inst, item, slot)
  7	if item.prefab == "goldnugget" or item.prefab == "goatmilk" or item.prefab == "cutlichen" then
  8	   return true
  9	end
 10	return false
 11end
 12local slotpos = { Vector3(0,32+4,0), Vector3(0,-(32+4),0), Vector3(0,-(64+32+8+4),0)}
 13local widgetbuttoninfo = {
 14	text = "Buy",
 15	position = Vector3(0, 95, 0),
 16	fn = function(inst)
 17		if inst:HasTag("milkcartons") and inst.components.container:Has("goldnugget", 1) then
 18		   inst.components.container:ConsumeByName("goldnugget", 1)
 19		   GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
 20		   local newspaper = SpawnPrefab("cutlichen")
 21		   newspaper.AnimState:SetBank("blueprint")
 22		   newspaper.AnimState:SetBuild("blueprint")
 23		   newspaper.AnimState:PlayAnimation("idle")
 24		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
 25		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
 26		   newspaper:AddComponent("named")
 27		   newspaper.components.named:SetName("Newspaper")
 28		   newspaper:RemoveComponent("stackable")
 29		   newspaper:RemoveComponent("edible")
 30		   newspaper:RemoveComponent("perishable")
 31		   newspaper:RemoveComponent("container")
 32		   newspaper:RemoveComponent("deployable")
 33		   newspaper.components.inspectable.getstatus = function(newspaper)
 34			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
 35			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
 36			   newspaper:Remove()
 37		   end
 38		   newspaper:AddTag("newspapers")
 39		   GetPlayer().components.inventory:GiveItem(newspaper)
 40		end
 41	end }
 42local function OnDeploy (inst, pt)
 43	local milkcarton = SpawnPrefab("cutlichen")
 44	milkcarton.Transform:SetPosition(pt.x, pt.y, pt.z)
 45	milkcarton.AnimState:SetBank("icebox")
 46	milkcarton.AnimState:SetBuild("ice_box")
 47	milkcarton.AnimState:PlayAnimation("closed")
 48	milkcarton.Transform:SetScale(0.6, 0.6, 0.6)
 49	milkcarton.AnimState:SetMultColour(0/255,185/255,255/255,1)
 50	milkcarton:AddComponent("named")
 51	milkcarton.components.named:SetName("Milk carton")
 52	milkcarton:RemoveComponent("stackable")
 53	milkcarton:RemoveComponent("inventoryitem")
 54	milkcarton:RemoveComponent("edible")
 55	milkcarton:RemoveComponent("perishable")
 56	milkcarton:RemoveComponent("deployable")
 57	milkcarton.components.container.canbeopened = true
 58	milkcarton:AddComponent("workable")
 59	milkcarton.components.workable:SetWorkAction(ACTIONS.HAMMER)
 60	milkcarton.components.workable:SetWorkLeft(3)
 61	milkcarton.components.workable:SetOnFinishCallback(function(milkcarton)
 62		SpawnPrefab("collapse_big").Transform:SetPosition(milkcarton.Transform:GetWorldPosition())
 63		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 64		milkcarton:Remove()
 65	end )
 66	milkcarton:ListenForEvent( "daytime", function()
 67		if milkcarton.components.container:Has("goldnugget", 5) then
 68		   milkcarton.components.container:ConsumeByName("goldnugget", 5)
 69		   for k = 1, 5 do
 70			   local goatmilk = SpawnPrefab("goatmilk")
 71			   milkcarton.components.container:GiveItem(goatmilk)
 72		   end
 73		   local newspaper = SpawnPrefab("cutlichen")
 74		   newspaper.AnimState:SetBank("blueprint")
 75		   newspaper.AnimState:SetBuild("blueprint")
 76		   newspaper.AnimState:PlayAnimation("idle")
 77		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
 78		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
 79		   newspaper:AddComponent("named")
 80		   newspaper.components.named:SetName("Newspaper")
 81		   newspaper:RemoveComponent("stackable")
 82		   newspaper:RemoveComponent("edible")
 83		   newspaper:RemoveComponent("perishable")
 84		   newspaper:RemoveComponent("container")
 85		   newspaper:RemoveComponent("deployable")
 86		   newspaper.components.inspectable.getstatus = function(newspaper)
 87			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
 88			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
 89			   newspaper:Remove()
 90		   end
 91		   newspaper:AddTag("newspapers")
 92		   milkcarton.components.container:GiveItem(newspaper)
 93		end
 94	end, GetWorld())
 95	milkcarton:AddTag("milkcartons")
 96	inst.components.stackable:Get():Remove()
 97end
 98	inst:AddComponent("deployable")
 99	inst.components.deployable.ondeploy = OnDeploy
100	inst.components.deployable.min_spacing = 1
101	inst:AddComponent("container")
102	inst.components.container.widgetbuttoninfo = widgetbuttoninfo
103	inst.components.container:SetNumSlots(#slotpos)
104	inst.components.container.widgetslotpos = slotpos
105	inst.components.container.widgetpos = Vector3(0,150,0)
106	inst.components.container.side_align_tip = 160
107	inst.components.container.canbeopened = false
108	inst.components.container.onopenfn = function(inst) inst.AnimState:PlayAnimation("open") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
109	inst.components.container.onclosefn = function(inst) inst.AnimState:PlayAnimation("close") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
110	inst.components.container.itemtestfn = itemtest
111	inst:AddTag("fridge")
112local function onsave(inst, data)
113	if inst:HasTag("milkcartons") then
114		data.milkcartons = true
115	end
116	if inst:HasTag("newspapers") then
117		data.newspapers = true
118	end
119end
120local function onload(inst, data)
121  if data and data.milkcartons then
122	inst.AnimState:SetBank("icebox")
123	inst.AnimState:SetBuild("ice_box")
124	inst.AnimState:PlayAnimation("closed")
125	inst.Transform:SetScale(0.6, 0.6, 0.6)
126	inst.AnimState:SetMultColour(0/255,185/255,255/255,1)
127	inst:AddComponent("named")
128	inst.components.named:SetName("Milk carton")
129	inst:RemoveComponent("stackable")
130	inst:RemoveComponent("inventoryitem")
131	inst:RemoveComponent("edible")
132	inst:RemoveComponent("perishable")
133	inst:RemoveComponent("deployable")
134	inst.components.container.canbeopened = true
135	inst:AddComponent("workable")
136	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
137	inst.components.workable:SetWorkLeft(3)
138	inst.components.workable:SetOnFinishCallback(function(inst)
139		SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
140		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
141		inst:Remove()
142	end )
143	inst:ListenForEvent( "daytime", function()
144		if inst.components.container:Has("goldnugget", 5) then
145		   inst.components.container:ConsumeByName("goldnugget", 5)
146		   for k = 1, 5 do
147			   local goatmilk = SpawnPrefab("goatmilk")
148			   inst.components.container:GiveItem(goatmilk)
149		   end
150		   local newspaper = SpawnPrefab("cutlichen")
151		   newspaper.AnimState:SetBank("blueprint")
152		   newspaper.AnimState:SetBuild("blueprint")
153		   newspaper.AnimState:PlayAnimation("idle")
154		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
155		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
156		   newspaper:AddComponent("named")
157		   newspaper.components.named:SetName("Newspaper")
158		   newspaper:RemoveComponent("stackable")
159		   newspaper:RemoveComponent("edible")
160		   newspaper:RemoveComponent("perishable")
161		   newspaper:RemoveComponent("container")
162		   newspaper:RemoveComponent("deployable")
163		   newspaper.components.inspectable.getstatus = function(newspaper)
164			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
165			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
166			   newspaper:Remove()
167		   end
168		   newspaper:AddTag("newspapers")
169		   inst.components.container:GiveItem(newspaper)
170		end
171	end, GetWorld())
172	inst:AddTag("milkcartons")
173  end
174  if data and data.newspapers then
175	inst.AnimState:SetBank("blueprint")
176	inst.AnimState:SetBuild("blueprint")
177	inst.AnimState:PlayAnimation("idle")
178	inst.components.inventoryitem:ChangeImageName("blueprint")
179	inst.Transform:SetScale(1.2, 1.2, 1.2)
180	inst:AddComponent("named")
181	inst.components.named:SetName("Newspaper")
182	inst:RemoveComponent("stackable")
183	inst:RemoveComponent("edible")
184	inst:RemoveComponent("perishable")
185	inst:RemoveComponent("container")
186	inst:RemoveComponent("deployable")
187	inst.components.inspectable.getstatus = function(inst)
188		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
189		GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
190		inst:Remove()
191	end
192	inst:AddTag("newspapers")
193  end
194end
195	inst.OnSave = onsave
196	inst.OnLoad = onload
197
198	即可用苔藓种奶报箱,鼠标左键点奶报箱可打开格子,在格子中放入黄金(订奶预付款,最少5个黄金),第二天清晨将送来5瓶牛奶,并免费赠送一份报纸,同时扣除5个黄金。将报纸放入物品栏,对其点鼠标右键可读报,将补满脑值。如果格子中有黄金,点格子上方的“Buy”按钮,可以额外购买报纸,每份1个黄金。如果每天想多订牛奶和报纸,就多种几个奶报箱吧。不想要奶报箱了,用锤子砸毁即可。苔藓可在洞穴中采到。不要与“用苔藓种苔藓(苔藓可移植)”一同修改