代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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”按钮,可修理小屋中的装备、恢复食物新鲜度、烘干物品。小屋日夜灯火通明,会照亮周边。不想要小屋时,用锤子砸掉即可,如果库房没有清空,里面的物品会掉在地上