代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个黄金。如果每天想多订牛奶和报纸,就多种几个奶报箱吧。不想要奶报箱了,用锤子砸毁即可。苔藓可在洞穴中采到。不要与“用苔藓种苔藓(苔藓可移植)”一同修改