代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二七一.全自动播种机(给避雷针植物,自动种下一百多个)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/lightningrod.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local slotpos = { Vector3(0,-75,0)}
7local function itemtest(inst, item, slot)
8 if item.prefab == "twigs" or item.prefab == "cutgrass" or item.prefab == "petals" or item.prefab == "petals_evil" or item.prefab == "cutreeds" or item.prefab == "red_cap" or item.prefab == "green_cap" or item.prefab == "blue_cap" or item.prefab == "carrot" or item.prefab == "berries" or item.prefab == "mandrake" or item.prefab == "foliage" or item.prefab == "cave_banana" or item.prefab == "cutlichen" or item.prefab == "lightbulb" or item.prefab == "pinecone" or item.prefab == "charcoal" or item.prefab == "acorn" or item.prefab == "cactus_meat" then
9 return true
10 end
11 return false
12end
13local widgetbuttoninfo = {
14 text = "Do",
15 position = Vector3(0, -145, 0),
16 fn = function(inst)
17 if GetPlayer().components.inventory:Has("goldnugget", 50) then
18 if inst.components.container:Has("twigs", 1) then
19 inst.components.container:ConsumeByName("twigs", 1)
20 inst.plants = "sapling"
21 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
22 end
23 if inst.components.container:Has("cutgrass", 1) then
24 inst.components.container:ConsumeByName("cutgrass", 1)
25 inst.plants = "grass"
26 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
27 end
28 if inst.components.container:Has("petals", 1) then
29 inst.components.container:ConsumeByName("petals", 1)
30 inst.plants = "flower"
31 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
32 end
33 if inst.components.container:Has("petals_evil", 1) then
34 inst.components.container:ConsumeByName("petals_evil", 1)
35 inst.plants = "flower_evil"
36 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
37 end
38 if inst.components.container:Has("cutreeds", 1) then
39 inst.components.container:ConsumeByName("cutreeds", 1)
40 inst.plants = "reeds"
41 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
42 end
43 if inst.components.container:Has("red_cap", 1) then
44 inst.components.container:ConsumeByName("red_cap", 1)
45 inst.plants = "red_mushroom"
46 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
47 end
48 if inst.components.container:Has("green_cap", 1) then
49 inst.components.container:ConsumeByName("green_cap", 1)
50 inst.plants = "green_mushroom"
51 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
52 end
53 if inst.components.container:Has("blue_cap", 1) then
54 inst.components.container:ConsumeByName("blue_cap", 1)
55 inst.plants = "blue_mushroom"
56 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
57 end
58 if inst.components.container:Has("carrot", 1) then
59 inst.components.container:ConsumeByName("carrot", 1)
60 inst.plants = "carrot_planted"
61 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
62 end
63 if inst.components.container:Has("berries", 1) then
64 inst.components.container:ConsumeByName("berries", 1)
65 inst.plants = "berrybush2"
66 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
67 end
68 if inst.components.container:Has("mandrake", 1) then
69 inst.components.container:ConsumeByName("mandrake", 1)
70 inst.plants = "mandrake"
71 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
72 end
73 if inst.components.container:Has("foliage", 1) then
74 inst.components.container:ConsumeByName("foliage", 1)
75 inst.plants = "cave_fern"
76 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
77 end
78 if inst.components.container:Has("cave_banana", 1) then
79 inst.components.container:ConsumeByName("cave_banana", 1)
80 inst.plants = "cave_banana_tree"
81 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
82 end
83 if inst.components.container:Has("cutlichen", 1) then
84 inst.components.container:ConsumeByName("cutlichen", 1)
85 inst.plants = "lichen"
86 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
87 end
88 if inst.components.container:Has("lightbulb", 1) then
89 inst.components.container:ConsumeByName("lightbulb", 1)
90 inst.plants = "flower_cave_triple"
91 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
92 end
93 if inst.components.container:Has("pinecone", 1) then
94 inst.components.container:ConsumeByName("pinecone", 1)
95 inst.plants = "evergreen_tall"
96 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
97 end
98 if inst.components.container:Has("charcoal", 1) then
99 inst.components.container:ConsumeByName("charcoal", 1)
100 inst.plants = "mushtree_tall"
101 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
102 end
103 if inst.components.container:Has("acorn", 1) then
104 inst.components.container:ConsumeByName("acorn", 1)
105 inst.plants = "deciduoustree_tall"
106 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
107 end
108 if inst.components.container:Has("cactus_meat", 1) then
109 inst.components.container:ConsumeByName("cactus_meat", 1)
110 inst.plants = "cactus"
111 GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
112 end
113 local pt = Vector3(inst.Transform:GetWorldPosition())
114 inst:StartThread(function()
115 for k = 1, 25 do
116 local result_offset = FindValidPositionByFan(1 * 2 * PI, 4, 25, function(offset)
117 local x,y,z = (pt + offset):Get()
118 local ents = TheSim:FindEntities(x,y,z , 1)
119 return not next(ents)
120 end)
121 if result_offset then
122 local plant = SpawnPrefab(inst.plants)
123 plant.Transform:SetPosition((pt + result_offset):Get())
124 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
125 local fx = SpawnPrefab("splash_ocean")
126 local pos = pt + result_offset
127 fx.Transform:SetPosition(pos.x, pos.y, pos.z)
128 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
129 end
130 Sleep(.33)
131 end
132 for k = 1, 37 do
133 local result_offset = FindValidPositionByFan(1 * 2 * PI, 6, 37, function(offset)
134 local x,y,z = (pt + offset):Get()
135 local ents = TheSim:FindEntities(x,y,z , 1)
136 return not next(ents)
137 end)
138 if result_offset then
139 local plant = SpawnPrefab(inst.plants)
140 plant.Transform:SetPosition((pt + result_offset):Get())
141 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
142 local fx = SpawnPrefab("splash_ocean")
143 local pos = pt + result_offset
144 fx.Transform:SetPosition(pos.x, pos.y, pos.z)
145 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
146 end
147 Sleep(.23)
148 end
149 for k = 1, 50 do
150 local result_offset = FindValidPositionByFan(1 * 2 * PI, 8, 50, function(offset)
151 local x,y,z = (pt + offset):Get()
152 local ents = TheSim:FindEntities(x,y,z , 1)
153 return not next(ents)
154 end)
155 if result_offset then
156 local plant = SpawnPrefab(inst.plants)
157 plant.Transform:SetPosition((pt + result_offset):Get())
158 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
159 local fx = SpawnPrefab("splash_ocean")
160 local pos = pt + result_offset
161 fx.Transform:SetPosition(pos.x, pos.y, pos.z)
162 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
163 end
164 Sleep(.13)
165 end
166 end)
167 end
168end }
169 inst:AddComponent("container")
170 inst.components.container:SetNumSlots(#slotpos)
171 inst.components.container.widgetslotpos = slotpos
172 inst.components.container.widgetpos = Vector3(0,180,0)
173 inst.components.container.side_align_tip = 160
174 inst.components.container.itemtestfn = itemtest
175 inst.components.container.acceptsstacks = false
176 inst.components.container.widgetbuttoninfo = widgetbuttoninfo
177
178 即可在空旷的地上建一个避雷针,鼠标左键点避雷针可打开格子,在格子中放入植物后点Do按钮,可自动种下100多株该植物,将花费50个黄金,身上黄金数不足时不会种植。可种植的17种植物有:给树枝种树苗、给草种草、给花瓣种花、给噩梦花瓣种噩梦花、给芦苇种芦苇、给红蘑菇种红蘑菇、给绿蘑菇种绿蘑菇、给蓝蘑菇种蓝蘑菇、给胡萝卜种胡萝卜、给浆果种果树丛、给曼德拉草种曼德拉草、给叶子种蕨类植物、给香蕉种香蕉树、给苔藓种苔藓、给荧光果种三朵洞穴花、给松果种树、给木炭种蘑菇树、给仙人掌肉种仙人掌、给橡果种橡树(橡树种下时不显示,存档退出再读档就可正常显示)。注意,其中果树丛、香蕉树、树、蘑菇树等种好后人无法通行,可以用“瑞士手杖”瞬移(或“神奇跳跃”跳出来),并用“收割者”大面积收获