代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二七九.小型温室(用蝴蝶翅膀种小型温室,放入种子,10秒长出果实)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/butterflywings.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function OnDeploy (inst, pt)
7 local oven = SpawnPrefab("butterflywings")
8 oven.Transform:SetPosition(pt.x, pt.y, pt.z)
9 oven.AnimState:SetBank("skull_chest")
10 oven.AnimState:SetBuild("skull_chest")
11 oven.AnimState:PlayAnimation("closed")
12 oven.Transform:SetScale(1.5, 1.5, 1.5)
13 oven:AddTag("fridge")
14 oven:AddTag("ovens")
15 oven:RemoveComponent("edible")
16 oven:RemoveComponent("tradable")
17 oven:RemoveComponent("stackable")
18 oven:RemoveComponent("inventoryitem")
19 oven:RemoveComponent("perishable")
20 oven:RemoveComponent("deployable")
21 oven:RemoveTag("cattoy")
22 oven:AddComponent("workable")
23 oven.components.workable:SetWorkAction(ACTIONS.HAMMER)
24 oven.components.workable:SetWorkLeft(3)
25 oven.components.workable:SetOnFinishCallback(function(oven)
26 SpawnPrefab("collapse_big").Transform:SetPosition(oven.Transform:GetWorldPosition())
27 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
28 oven:Remove()
29 end )
30 oven.components.container.canbeopened = true
31 inst.components.stackable:Get():Remove()
32end
33 inst:AddComponent("deployable")
34 inst.components.deployable.ondeploy = OnDeploy
35local function onsave(inst, data)
36 if inst:HasTag("ovens") then
37 data.ovens = true
38 end
39end
40local function onload(inst, data)
41 if data and data.ovens then
42 inst.AnimState:SetBank("skull_chest")
43 inst.AnimState:SetBuild("skull_chest")
44 inst.AnimState:PlayAnimation("closed")
45 inst.Transform:SetScale(1.5, 1.5, 1.5)
46 inst:AddTag("fridge")
47 inst:AddTag("ovens")
48 inst:RemoveComponent("edible")
49 inst:RemoveComponent("tradable")
50 inst:RemoveComponent("stackable")
51 inst:RemoveComponent("inventoryitem")
52 inst:RemoveComponent("perishable")
53 inst:RemoveComponent("deployable")
54 inst:RemoveTag("cattoy")
55 inst:AddComponent("workable")
56 inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
57 inst.components.workable:SetWorkLeft(3)
58 inst.components.workable:SetOnFinishCallback(function(inst)
59 SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
60 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
61 inst:Remove()
62 end )
63 inst.components.container.canbeopened = true
64 end
65end
66local function itemtest(inst, item, slot)
67 if item.prefab == "carrot" or item.prefab == "corn" or item.prefab == "pumpkin" or item.prefab == "eggplant" or item.prefab == "durian" or item.prefab == "pomegranate" or item.prefab == "dragonfruit" or item.prefab == "carrot_seeds" or item.prefab == "corn_seeds" or item.prefab == "pumpkin_seeds" or item.prefab == "eggplant_seeds" or item.prefab == "durian_seeds" or item.prefab == "pomegranate_seeds" or item.prefab == "dragonfruit_seeds" or item.prefab == "seeds" or item.prefab == "spoiled_food" or item.prefab == "lightbulb" or item.prefab == "watermelon_seeds" or item.prefab == "watermelon" then
68 return true
69 end
70 return false
71end
72local slotpos = {}
73for y = 2, 0, -1 do
74 for x = 0, 14 do
75 table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2+75,0))
76 end
77end
78 inst.OnSave = onsave
79 inst.OnLoad = onload
80 inst:AddComponent("container")
81local widgetbuttoninfo = {
82 text = "Start",
83 position = Vector3(450, -150, 0),
84 fn = function(inst)
85 if inst:HasTag("ovens") and inst.components.container:Has("lightbulb", 1) then
86 inst.components.container:ConsumeByName("lightbulb", 1)
87 inst.components.container:Close(GetPlayer())
88 inst.components.container.canbeopened = false
89 inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
90 inst:DoTaskInTime(10, function()
91 inst.AnimState:SetBloomEffectHandle("")
92 GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
93 inst.components.container.canbeopened = true
94 for k,v in pairs(inst.components.container.slots) do
95 if v and v.prefab == "carrot_seeds" then
96 v:Remove()
97 local carrot = SpawnPrefab("carrot")
98 inst.components.container:GiveItem(carrot)
99 end
100 if v and v.prefab == "corn_seeds" then
101 v:Remove()
102 local corn = SpawnPrefab("corn")
103 inst.components.container:GiveItem(corn)
104 end
105 if v and v.prefab == "pumpkin_seeds" then
106 v:Remove()
107 local pumpkin = SpawnPrefab("pumpkin")
108 inst.components.container:GiveItem(pumpkin)
109 end
110 if v and v.prefab == "eggplant_seeds" then
111 v:Remove()
112 local eggplant = SpawnPrefab("eggplant")
113 inst.components.container:GiveItem(eggplant)
114 end
115 if v and v.prefab == "durian_seeds" then
116 v:Remove()
117 local durian = SpawnPrefab("durian")
118 inst.components.container:GiveItem(durian)
119 end
120 if v and v.prefab == "pomegranate_seeds" then
121 v:Remove()
122 local pomegranate = SpawnPrefab("pomegranate")
123 inst.components.container:GiveItem(pomegranate)
124 end
125 if v and v.prefab == "dragonfruit_seeds" then
126 v:Remove()
127 local dragonfruit = SpawnPrefab("dragonfruit")
128 inst.components.container:GiveItem(dragonfruit)
129 end
130 if v and v.prefab == "watermelon_seeds" then
131 v:Remove()
132 local watermelon = SpawnPrefab("watermelon")
133 inst.components.container:GiveItem(watermelon)
134 end
135 if v and v.prefab == "seeds" then
136 v:Remove()
137 local names = {"carrot","corn","pumpkin","eggplant","durian","pomegranate","dragonfruit","watermelon"}
138 local name = names[math.random(#names)]
139 local fruit = SpawnPrefab(name)
140 inst.components.container:GiveItem(fruit)
141 end
142 if v.prefab == "carrot" or v.prefab == "corn" or v.prefab == "pumpkin" or v.prefab == "eggplant" or v.prefab == "durian" or v.prefab == "pomegranate" or v.prefab == "dragonfruit" or v.prefab == "watermelon" then
143 v:Remove()
144 local spoiled = SpawnPrefab("spoiled_food")
145 inst.components.container:GiveItem(spoiled)
146 end
147 end
148 end )
149 end
150 end }
151 inst.components.container.widgetbuttoninfo = widgetbuttoninfo
152 inst.components.container.acceptsstacks = false
153 inst.components.container:SetNumSlots(#slotpos)
154 inst.components.container.widgetslotpos = slotpos
155 inst.components.container.widgetpos = Vector3(-250,200,0)
156 inst.components.container.side_align_tip = 160
157 inst.components.container.canbeopened = false
158 inst.components.container.itemtestfn = itemtest
159 inst.components.container.onopenfn = function(inst) inst.AnimState:PlayAnimation("open") end
160 inst.components.container.onclosefn = function(inst) inst.AnimState:PlayAnimation("close") end
161
162 即可用蝴蝶翅膀种小型温室(拿着1个蝴蝶翅膀对地面点鼠标右键,如果拿着多个,则不会种出来),无论冬夏都可种植农作物。鼠标左键点小型温室,可打开格子。将种子放入格子,并放1个荧光果(提供电能)后,点格子下面的Start按钮,植物即开始生长(温室亮灯)。10秒后(温室灯灭)即可打开温室,收获你的果实吧。每次种植都将消耗1个荧光果,格子内没有荧光果时,温室不会工作。如果把果实留在格子内,并点Start按钮(仍须有荧光果),则10秒后果实变成腐烂食物,可用来快速生产肥料。不想要小型温室时,用锤子砸掉即可,记得先取出里面的物品哦。蝴蝶翅膀可打死蝴蝶获得