代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二四二.自动门(用木盔甲种自动门,进出自动开关)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/armor_wood.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function OnDeploy (inst, pt)
7 local door1 = SpawnPrefab("armorwood")
8 door1.Transform:SetPosition(pt.x+0.55, pt.y, pt.z-0.55)
9 door1.AnimState:SetBank("winter_meter")
10 door1.AnimState:SetBuild("winter_meter")
11 door1.AnimState:SetPercent("meter", 1)
12 door1.Transform:SetScale(1, 0.7, 1)
13 MakeObstaclePhysics(door1, 0.48)
14 door1:RemoveComponent("inventoryitem")
15 door1:RemoveComponent("fuel")
16 door1:RemoveComponent("armor")
17 door1:RemoveComponent("equippable")
18 door1:RemoveComponent("burnable")
19 door1:RemoveComponent("propagator")
20 door1:RemoveComponent("deployable")
21 door1:RemoveTag("wood")
22 door1:AddComponent("workable")
23 door1.components.workable:SetWorkAction(ACTIONS.HAMMER)
24 door1.components.workable:SetWorkLeft(2)
25 door1.components.workable:SetOnFinishCallback(function(door1)
26 SpawnPrefab("collapse_big").Transform:SetPosition(door1.Transform:GetWorldPosition())
27 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
28 door1:Remove()
29 end )
30 door1:AddComponent( "playerprox" )
31 door1.components.playerprox:SetDist(2,3)
32 door1.components.playerprox:SetOnPlayerNear(function(door1)
33 door1.Transform:SetScale(0.1, 0.7, 1)
34 door1.Physics:SetActive(false)
35 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
36 end )
37 door1.components.playerprox:SetOnPlayerFar(function(door1)
38 door1.Transform:SetScale(1, 0.7, 1)
39 door1.Physics:SetActive(true)
40 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
41 end )
42 door1.components.inspectable.getstatus = function(door1)
43 door1.Transform:SetScale(0.1, 0.7, 1)
44 door1.Physics:SetActive(false)
45 door1:DoTaskInTime(3, function(door1)
46 door1.Transform:SetScale(1, 0.7, 1)
47 door1.Physics:SetActive(true)
48 end )
49 end
50 door1:AddTag("doors")
51 local door2 = SpawnPrefab("armorwood")
52 door2.Transform:SetPosition(pt.x-0.55, pt.y, pt.z+0.55)
53 door2.AnimState:SetBank("winter_meter")
54 door2.AnimState:SetBuild("winter_meter")
55 door2.AnimState:SetPercent("meter", 1)
56 door2.Transform:SetScale(1, 0.7, 1)
57 MakeObstaclePhysics(door2, 0.48)
58 door2:RemoveComponent("inventoryitem")
59 door2:RemoveComponent("fuel")
60 door2:RemoveComponent("armor")
61 door2:RemoveComponent("equippable")
62 door2:RemoveComponent("burnable")
63 door2:RemoveComponent("propagator")
64 door2:RemoveComponent("deployable")
65 door2:RemoveTag("wood")
66 door2:AddComponent("workable")
67 door2.components.workable:SetWorkAction(ACTIONS.HAMMER)
68 door2.components.workable:SetWorkLeft(2)
69 door2.components.workable:SetOnFinishCallback(function(door2)
70 SpawnPrefab("collapse_big").Transform:SetPosition(door2.Transform:GetWorldPosition())
71 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
72 door2:Remove()
73 end )
74 door2:AddComponent( "playerprox" )
75 door2.components.playerprox:SetDist(2,3)
76 door2.components.playerprox:SetOnPlayerNear(function(door2)
77 door2.Transform:SetScale(0.1, 0.7, 1)
78 door2.Physics:SetActive(false)
79 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
80 end )
81 door2.components.playerprox:SetOnPlayerFar(function(door2)
82 door2.Transform:SetScale(1, 0.7, 1)
83 door2.Physics:SetActive(true)
84 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
85 end )
86 door2.components.inspectable.getstatus = function(door2)
87 door2.Transform:SetScale(0.1, 0.7, 1)
88 door2.Physics:SetActive(false)
89 door2:DoTaskInTime(3, function(door2)
90 door2.Transform:SetScale(1, 0.7, 1)
91 door2.Physics:SetActive(true)
92 end )
93 end
94 door2:AddTag("doors")
95 inst:Remove()
96end
97 inst:AddComponent("deployable")
98 inst.components.deployable.ondeploy = OnDeploy
99local function onsave(inst, data)
100 if inst:HasTag("doors") then
101 data.doors = true
102 end
103end
104local function onload(inst, data)
105 if data and data.doors then
106 inst.AnimState:SetBank("winter_meter")
107 inst.AnimState:SetBuild("winter_meter")
108 inst.AnimState:SetPercent("meter", 1)
109 inst.Transform:SetScale(1, 0.7, 1)
110 MakeObstaclePhysics(inst, 0.48)
111 inst:RemoveComponent("inventoryitem")
112 inst:RemoveComponent("fuel")
113 inst:RemoveComponent("armor")
114 inst:RemoveComponent("equippable")
115 inst:RemoveComponent("burnable")
116 inst:RemoveComponent("propagator")
117 inst:RemoveComponent("deployable")
118 inst:RemoveTag("wood")
119 inst:AddComponent("workable")
120 inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
121 inst.components.workable:SetWorkLeft(2)
122 inst.components.workable:SetOnFinishCallback(function(inst)
123 SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
124 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
125 inst:Remove()
126 end )
127 inst:AddComponent( "playerprox" )
128 inst.components.playerprox:SetDist(2,3)
129 inst.components.playerprox:SetOnPlayerNear(function(inst)
130 inst.Transform:SetScale(0.1, 0.7, 1)
131 inst.Physics:SetActive(false)
132 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
133 end )
134 inst.components.playerprox:SetOnPlayerFar(function(inst)
135 inst.Transform:SetScale(1, 0.7, 1)
136 inst.Physics:SetActive(true)
137 GetPlayer().SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
138 end )
139 inst.components.inspectable.getstatus = function(inst)
140 inst.Transform:SetScale(0.1, 0.7, 1)
141 inst.Physics:SetActive(false)
142 inst:DoTaskInTime(3, function(inst)
143 inst.Transform:SetScale(1, 0.7, 1)
144 inst.Physics:SetActive(true)
145 end )
146 end
147 inst:AddTag("doors")
148 end
149end
150 inst.OnSave = onsave
151 inst.OnLoad = onload
152
153 即可用木盔甲种自动门,进出时自动开关,为方便宠物进出,也可以手动开关,鼠标左键点击可开门,3秒后自动关门。种门时,可先建好一排墙,然后砸掉其中2堵,在留下的空地正中间种下自动门,即可与墙完美契合。自动门有方向的限制,只可种在正面的墙之间(进入游戏默认的方向),不能种在侧面的墙之间。不需要自动门时,用锤子砸毁即可。木盔甲在战斗选项(画着两把剑)下,用8个木头、2个绳子制造