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

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


 1
 2二三三.垃圾洞(用饥饿腰带种垃圾洞,不想要的物品可扔进去销毁,夜晚自燃,白天熄灭)
 3
 4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/armor_slurper.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
 5
 6local function wastehole(inst)
 7	local pt = inst:GetPosition()
 8	local wastehole = SpawnPrefab("armorslurper")
 9	wastehole.Transform:SetPosition(pt.x, pt.y, pt.z)
10	wastehole.AnimState:SetBank("tentaclepillar")
11	wastehole.AnimState:SetBuild("tentacle_pillar")
12	wastehole.AnimState:PlayAnimation("idle_hole",true)
13	wastehole.Transform:SetScale(0.5, 0.5, 0.5)
14	wastehole.entity:AddSoundEmitter()
15	MakeObstaclePhysics(wastehole, .5)
16	wastehole:RemoveComponent("inventoryitem")
17	wastehole:RemoveComponent("equippable")
18	wastehole:RemoveComponent("fueled")
19	wastehole:RemoveComponent("deployable")
20	wastehole:RemoveTag("fur")
21	wastehole:RemoveTag("ruins")
22	local minimap = wastehole.entity:AddMiniMapEntity()
23	minimap:SetIcon( "firepit.png" )
24	wastehole:AddComponent("burnable")
25	wastehole.components.burnable:SetFXLevel(5)
26	wastehole.components.burnable:AddBurnFX("character_fire", Vector3(0,1.5,0) )
27	wastehole:ListenForEvent("onignite", function()
28		wastehole:AddComponent("heater")
29		wastehole.components.heater.heat = 50
30	end )
31	wastehole:ListenForEvent("onextinguish", function()
32		wastehole.SoundEmitter:PlaySound("dontstarve/common/fireOut")  
33		if wastehole.components.heater then wastehole:RemoveComponent("heater") end
34	end )
35	wastehole:ListenForEvent( "daytime", function() wastehole.components.burnable:Extinguish() end , GetWorld())
36	wastehole:ListenForEvent( "dusktime", function() wastehole.components.burnable:Ignite(true) end , GetWorld())
37	wastehole:ListenForEvent( "nighttime", function() wastehole.components.burnable:Ignite(true) end , GetWorld())
38	if GetClock():IsDay() then
39	   wastehole.components.burnable:Extinguish()
40	else
41	   wastehole.components.burnable:Ignite(true)
42	end
43	wastehole:AddComponent("workable")
44	wastehole.components.workable:SetWorkAction(ACTIONS.HAMMER)
45	wastehole.components.workable:SetWorkLeft(3)
46	wastehole.components.workable:SetOnFinishCallback(function(wastehole)
47		SpawnPrefab("collapse_big").Transform:SetPosition(wastehole.Transform:GetWorldPosition())
48		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
49		wastehole:Remove()
50	end )
51	local slotpos = { Vector3(0,-75,0)}
52	wastehole:AddComponent("container")
53	wastehole.components.container:SetNumSlots(#slotpos)
54	wastehole.components.container.widgetslotpos = slotpos
55	wastehole.components.container.widgetpos = Vector3(0,600,0)
56	wastehole.components.container.side_align_tip = 160
57	wastehole.components.container.itemtestfn = function(wastehole, item, slot)
58		if item.prefab == "teleportato_ring" or item.prefab == "teleportato_box" or item.prefab == "teleportato_crank" or item.prefab == "teleportato_potato" or item.prefab == "chester_eyebone" or item.prefab == "abigail_flower" or item.prefab == "lucy" or item.prefab == "balloons_empty" or item.prefab == "lighter" or item.prefab == "waxwelljournal" then
59		   return false
60		end
61		return true
62	end
63	wastehole:DoPeriodicTask(0.25, function(wastehole)
64	   if not wastehole.components.container:IsEmpty() then
65		  wastehole.components.container:DestroyContents()
66		  wastehole.SoundEmitter:PlaySound("dontstarve/common/destroy_stone")
67		  local pt0 = wastehole:GetPosition()
68		  SpawnPrefab("collapse_small").Transform:SetPosition(pt0.x, 1, pt0.z)
69	   end
70	end )
71	wastehole:AddTag("wastehole")
72end
73local function OnDeploy (inst, pt)
74	wastehole(inst)
75	inst:Remove()
76end
77	inst:AddComponent("deployable")
78	inst.components.deployable.ondeploy = OnDeploy
79local function onsave(inst, data)
80	if inst:HasTag("wastehole") then
81		data.wastehole = true
82	end
83end
84local function onload(inst, data)
85	if data and data.wastehole then
86	   wastehole(inst)
87	   inst:Remove()
88	end
89end
90	inst.OnSave = onsave
91	inst.OnLoad = onload
92
93	即可用饥饿腰带种垃圾洞,除重要物品外(如露西斧子等),任何不想要的物品都可以扔进去销毁(拿着物品对垃圾洞点鼠标左键),再也不用发愁垃圾越来越多了。垃圾洞里有沼气,在夜晚时会自燃,白天熄灭,可用于照明和取暖,但不能用来烤食物。垃圾洞在小地图上显示为石头营火的图标,不想要垃圾洞时,用锤子砸毁即可。饥饿腰带在魔法选项(画着红骷髅)下,用6个啜食者皮、2个绳子、2个噩梦燃料制造