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

原帖链接: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种植物有:给树枝种树苗、给草种草、给花瓣种花、给噩梦花瓣种噩梦花、给芦苇种芦苇、给红蘑菇种红蘑菇、给绿蘑菇种绿蘑菇、给蓝蘑菇种蓝蘑菇、给胡萝卜种胡萝卜、给浆果种果树丛、给曼德拉草种曼德拉草、给叶子种蕨类植物、给香蕉种香蕉树、给苔藓种苔藓、给荧光果种三朵洞穴花、给松果种树、给木炭种蘑菇树、给仙人掌肉种仙人掌、给橡果种橡树(橡树种下时不显示,存档退出再读档就可正常显示)。注意,其中果树丛、香蕉树、树、蘑菇树等种好后人无法通行,可以用“瑞士手杖”瞬移(或“神奇跳跃”跳出来),并用“收割者”大面积收获