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

原帖链接: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个绳子制造