YN242-自动门(用木盔甲种自动门,进出自动开关)
代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。 原帖链接: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个绳子制造