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

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



二七一.全自动播种机(给避雷针植物,自动种下一百多个)

	用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/lightningrod.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

local slotpos = { Vector3(0,-75,0)}
local function itemtest(inst, item, slot)
	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
	   return true
	end
	return false
end
local widgetbuttoninfo = {
	text = "Do",
	position = Vector3(0, -145, 0),
	fn = function(inst)
		if GetPlayer().components.inventory:Has("goldnugget", 50) then
		   if inst.components.container:Has("twigs", 1) then
			  inst.components.container:ConsumeByName("twigs", 1)
			  inst.plants = "sapling"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("cutgrass", 1) then
			  inst.components.container:ConsumeByName("cutgrass", 1)
			  inst.plants = "grass"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("petals", 1) then
			  inst.components.container:ConsumeByName("petals", 1)
			  inst.plants = "flower"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("petals_evil", 1) then
			  inst.components.container:ConsumeByName("petals_evil", 1)
			  inst.plants = "flower_evil"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("cutreeds", 1) then
			  inst.components.container:ConsumeByName("cutreeds", 1)
			  inst.plants = "reeds"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("red_cap", 1) then
			  inst.components.container:ConsumeByName("red_cap", 1)
			  inst.plants = "red_mushroom"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("green_cap", 1) then
			  inst.components.container:ConsumeByName("green_cap", 1)
			  inst.plants = "green_mushroom"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("blue_cap", 1) then
			  inst.components.container:ConsumeByName("blue_cap", 1)
			  inst.plants = "blue_mushroom"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("carrot", 1) then
			  inst.components.container:ConsumeByName("carrot", 1)
			  inst.plants = "carrot_planted"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("berries", 1) then
			  inst.components.container:ConsumeByName("berries", 1)
			  inst.plants = "berrybush2"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("mandrake", 1) then
			  inst.components.container:ConsumeByName("mandrake", 1)
			  inst.plants = "mandrake"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("foliage", 1) then
			  inst.components.container:ConsumeByName("foliage", 1)
			  inst.plants = "cave_fern"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("cave_banana", 1) then
			  inst.components.container:ConsumeByName("cave_banana", 1)
			  inst.plants = "cave_banana_tree"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("cutlichen", 1) then
			  inst.components.container:ConsumeByName("cutlichen", 1)
			  inst.plants = "lichen"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("lightbulb", 1) then
			  inst.components.container:ConsumeByName("lightbulb", 1)
			  inst.plants = "flower_cave_triple"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("pinecone", 1) then
			  inst.components.container:ConsumeByName("pinecone", 1)
			  inst.plants = "evergreen_tall"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("charcoal", 1) then
			  inst.components.container:ConsumeByName("charcoal", 1)
			  inst.plants = "mushtree_tall"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("acorn", 1) then
			  inst.components.container:ConsumeByName("acorn", 1)
			  inst.plants = "deciduoustree_tall"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   if inst.components.container:Has("cactus_meat", 1) then
			  inst.components.container:ConsumeByName("cactus_meat", 1)
			  inst.plants = "cactus"
			  GetPlayer().components.inventory:ConsumeByName("goldnugget", 50)
		   end
		   local pt = Vector3(inst.Transform:GetWorldPosition())
		   inst:StartThread(function()
			   for k = 1, 25 do
				   local result_offset = FindValidPositionByFan(1 * 2 * PI, 4, 25, function(offset)
					   local x,y,z = (pt + offset):Get()
					   local ents = TheSim:FindEntities(x,y,z , 1)
					   return not next(ents) 
				   end)
				   if result_offset then
					   local plant = SpawnPrefab(inst.plants)
					   plant.Transform:SetPosition((pt + result_offset):Get())
					   GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
					   local fx = SpawnPrefab("splash_ocean")
					   local pos = pt + result_offset
					   fx.Transform:SetPosition(pos.x, pos.y, pos.z)
					   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
				   end
				   Sleep(.33)
			   end
			   for k = 1, 37 do
				   local result_offset = FindValidPositionByFan(1 * 2 * PI, 6, 37, function(offset)
					   local x,y,z = (pt + offset):Get()
					   local ents = TheSim:FindEntities(x,y,z , 1)
					   return not next(ents) 
				   end)
				   if result_offset then
					   local plant = SpawnPrefab(inst.plants)
					   plant.Transform:SetPosition((pt + result_offset):Get())
					   GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
					   local fx = SpawnPrefab("splash_ocean")
					   local pos = pt + result_offset
					   fx.Transform:SetPosition(pos.x, pos.y, pos.z)
					   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
				   end
				   Sleep(.23)
			   end
			   for k = 1, 50 do
				   local result_offset = FindValidPositionByFan(1 * 2 * PI, 8, 50, function(offset)
					   local x,y,z = (pt + offset):Get()
					   local ents = TheSim:FindEntities(x,y,z , 1)
					   return not next(ents) 
				   end)
				   if result_offset then
					   local plant = SpawnPrefab(inst.plants)
					   plant.Transform:SetPosition((pt + result_offset):Get())
					   GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
					   local fx = SpawnPrefab("splash_ocean")
					   local pos = pt + result_offset
					   fx.Transform:SetPosition(pos.x, pos.y, pos.z)
					   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
				   end
				   Sleep(.13)
			   end
		   end)
		end
end }
	inst:AddComponent("container")
	inst.components.container:SetNumSlots(#slotpos)
	inst.components.container.widgetslotpos = slotpos
	inst.components.container.widgetpos = Vector3(0,180,0)
	inst.components.container.side_align_tip = 160
	inst.components.container.itemtestfn = itemtest
	inst.components.container.acceptsstacks = false
	inst.components.container.widgetbuttoninfo = widgetbuttoninfo

	即可在空旷的地上建一个避雷针,鼠标左键点避雷针可打开格子,在格子中放入植物后点Do按钮,可自动种下100多株该植物,将花费50个黄金,身上黄金数不足时不会种植。可种植的17种植物有:给树枝种树苗、给草种草、给花瓣种花、给噩梦花瓣种噩梦花、给芦苇种芦苇、给红蘑菇种红蘑菇、给绿蘑菇种绿蘑菇、给蓝蘑菇种蓝蘑菇、给胡萝卜种胡萝卜、给浆果种果树丛、给曼德拉草种曼德拉草、给叶子种蕨类植物、给香蕉种香蕉树、给苔藓种苔藓、给荧光果种三朵洞穴花、给松果种树、给木炭种蘑菇树、给仙人掌肉种仙人掌、给橡果种橡树(橡树种下时不显示,存档退出再读档就可正常显示)。注意,其中果树丛、香蕉树、树、蘑菇树等种好后人无法通行,可以用“瑞士手杖”瞬移(或“神奇跳跃”跳出来),并用“收割者”大面积收获