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

原帖链接: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秒后果实变成腐烂食物,可用来快速生产肥料。不想要小型温室时,用锤子砸掉即可,记得先取出里面的物品哦。蝴蝶翅膀可打死蝴蝶获得