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

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


  1
  2二四一.我的小屋(用巨鹿眼球种小屋,左键点击可睡觉,右键点击打开库房,点按钮可修理装备、恢复食物新鲜、烘干物品)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/deerclops_eyeball.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local slotpos = {}
  7for y = 2, 0, -1 do
  8	for x = 0, 11 do
  9		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2+75,0))
 10		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2-175,0))
 11		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2-425,0))
 12	end
 13end
 14local widgetbuttoninfo = {
 15	text = "Repair",
 16	position = Vector3(741, 135, 0),
 17	fn = function(inst)
 18		GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
 19		inst.components.container:Close(GetPlayer())
 20		for k,v in pairs(inst.components.container.slots) do
 21			if v.components.fueled then
 22			   v.components.fueled.currentfuel = v.components.fueled.maxfuel
 23			end
 24			if v.components.finiteuses then
 25			   v.components.finiteuses.current = v.components.finiteuses.total
 26			end
 27			if v.components.armor then
 28			   v.components.armor.condition = v.components.armor.maxcondition
 29			end
 30			if v.components.perishable then
 31			   v.components.perishable.perishremainingtime = v.components.perishable.perishtime
 32			end
 33			if v.components.moisturelistener then
 34			   v.components.moisturelistener.wet = false
 35			end
 36		end
 37		inst:DoTaskInTime(0.1, function() inst.components.container:Open(GetPlayer()) end )
 38end }
 39local function OnDeploy (inst, pt)
 40	local house = SpawnPrefab("deerclops_eyeball")
 41	house.Transform:SetPosition(pt.x, pt.y, pt.z)
 42	house.AnimState:SetBank("walrus_house")
 43	house.AnimState:SetBuild("walrus_house")
 44	house.AnimState:PlayAnimation("lit", true)
 45	house.Transform:SetScale(1.5, 1.5, 1.5)
 46	MakeObstaclePhysics(house, 1)
 47	local minimap = house.entity:AddMiniMapEntity()
 48	minimap:SetIcon( "igloo.png" )
 49	house:RemoveComponent("inventoryitem")
 50	house:RemoveComponent("edible")
 51	house:RemoveComponent("stackable")
 52	house:RemoveComponent("deployable")
 53	local light = house.entity:AddLight()
 54	light:SetFalloff(1)
 55	light:SetIntensity(.8)
 56	light:SetRadius(10)
 57	light:Enable(true)
 58	light:SetColour(180/255, 195/255, 50/255)
 59	house:AddComponent("named")
 60	house.components.named:SetName("My House")
 61	house:AddComponent("workable")
 62	house.components.workable:SetWorkAction(ACTIONS.HAMMER)
 63	house.components.workable:SetWorkLeft(3)
 64	house.components.workable:SetOnFinishCallback(function(house)
 65		house.Light:Enable(false)
 66		SpawnPrefab("collapse_big").Transform:SetPosition(house.Transform:GetWorldPosition())
 67		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 68	house.components.container:DropEverything()
 69		house:Remove()
 70	end )
 71	house:AddComponent("machine")
 72	house.components.machine.turnonfn = function() house.components.container:Open(GetPlayer()) end
 73	house.components.machine.turnofffn = function() house.components.container:Open(GetPlayer()) end
 74	house:AddComponent("sleepingbag")
 75	house.components.sleepingbag.onsleep = function(house, sleeper)
 76		sleeper.components.health:SetInvincible(true)
 77		sleeper.components.playercontroller:Enable(false)
 78		GetPlayer().HUD:Hide()
 79		TheFrontEnd:Fade(false,1)
 80		house:DoTaskInTime(1.2, function() 
 81		   GetPlayer().HUD:Show()
 82		   TheFrontEnd:Fade(true,1) 
 83		   GetClock():MakeNextDay()
 84		   sleeper.components.health:SetInvincible(false)
 85		   sleeper.components.playercontroller:Enable(true)
 86		   sleeper.components.sanity:DoDelta(sleeper.components.sanity.max)
 87		   sleeper.components.hunger:DoDelta(sleeper.components.hunger.max)
 88		   sleeper.components.health:DoDelta(sleeper.components.health.maxhealth)
 89		   sleeper.components.temperature:SetTemperature(20)
 90		   if sleeper.components.moisture then sleeper.components.moisture:SetMoistureLevel(0) end
 91		end)
 92	end
 93	house:AddTag("houses")
 94	inst.components.stackable:Get():Remove()
 95end
 96	inst:AddComponent("deployable")
 97	inst.components.deployable.ondeploy = OnDeploy
 98local function onsave(inst, data)
 99	if inst:HasTag("houses") then
100		data.houses = true
101	end
102end
103local function onload(inst, data)
104  if data and data.houses then
105	inst.AnimState:SetBank("walrus_house")
106	inst.AnimState:SetBuild("walrus_house")
107	inst.AnimState:PlayAnimation("lit", true)
108	inst.Transform:SetScale(1.5, 1.5, 1.5)
109	MakeObstaclePhysics(inst, 1)
110	local minimap = inst.entity:AddMiniMapEntity()
111	minimap:SetIcon( "igloo.png" )
112	inst:RemoveComponent("inventoryitem")
113	inst:RemoveComponent("edible")
114	inst:RemoveComponent("stackable")
115	inst:RemoveComponent("deployable")
116	local light = inst.entity:AddLight()
117	light:SetFalloff(1)
118	light:SetIntensity(.8)
119	light:SetRadius(10)
120	light:Enable(true)
121	light:SetColour(180/255, 195/255, 50/255)
122	inst:AddComponent("named")
123	inst.components.named:SetName("My House")
124	inst:AddComponent("workable")
125	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
126	inst.components.workable:SetWorkLeft(3)
127	inst.components.workable:SetOnFinishCallback(function(inst)
128		inst.Light:Enable(false)
129		SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
130		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
131	inst.components.container:DropEverything()
132		inst:Remove()
133	end )
134	inst:AddComponent("machine")
135	inst.components.machine.turnonfn = function() inst.components.container:Open(GetPlayer()) end
136	inst.components.machine.turnofffn = function() inst.components.container:Open(GetPlayer()) end
137	inst:AddComponent("sleepingbag")
138	inst.components.sleepingbag.onsleep = function(inst, sleeper)
139		sleeper.components.health:SetInvincible(true)
140		sleeper.components.playercontroller:Enable(false)
141		GetPlayer().HUD:Hide()
142		TheFrontEnd:Fade(false,1)
143		inst:DoTaskInTime(1.2, function() 
144		   GetPlayer().HUD:Show()
145		   TheFrontEnd:Fade(true,1) 
146		   GetClock():MakeNextDay()
147		   sleeper.components.health:SetInvincible(false)
148		   sleeper.components.playercontroller:Enable(true)
149		   sleeper.components.sanity:DoDelta(sleeper.components.sanity.max)
150		   sleeper.components.hunger:DoDelta(sleeper.components.hunger.max)
151		   sleeper.components.health:DoDelta(sleeper.components.health.maxhealth)
152		   sleeper.components.temperature:SetTemperature(20)
153		   if sleeper.components.moisture then sleeper.components.moisture:SetMoistureLevel(0) end
154		end)
155	end
156	inst:AddTag("houses")
157  end
158end
159	inst.OnSave = onsave
160	inst.OnLoad = onload
161	inst:AddComponent("container")
162	inst.components.container:SetNumSlots(#slotpos)
163	inst.components.container.widgetslotpos = slotpos
164	inst.components.container.widgetpos = Vector3(-150,300,0)
165	inst.components.container.side_align_tip = 160
166	inst.components.container.widgetbuttoninfo = widgetbuttoninfo
167	inst.components.container.canbeopened = false
168	inst:AddTag("fridge")
169
170	即可用巨鹿眼球种小屋,鼠标左键点小屋可睡觉(白天也可以睡),睡醒后会将脑、饥饿、生命全部补满,去除湿度,并解除中暑、冻伤状态。鼠标右键点击小屋,会打开库房(远离小屋自动关闭),共108格存储空间,具有冷藏功能。点格子右上角的“Repair”按钮,可修理小屋中的装备、恢复食物新鲜度、烘干物品。小屋日夜灯火通明,会照亮周边。不想要小屋时,用锤子砸掉即可,如果库房没有清空,里面的物品会掉在地上