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

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


  1
  2二八0.随身灭火器(用寒冬背心种随身灭火器,装备后可灭火)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/trunkvest.lua文件,在inst.AnimState:SetBuild("armor_trunkvest_winter")的下一行插入以下内容:
  5
  6local function OnDeploy2(inst, pt)
  7	local extinguisher = SpawnPrefab("trunkvest_winter")
  8	extinguisher.Transform:SetPosition(pt.x, pt.y, pt.z)
  9	extinguisher.AnimState:SetBank("firefighter")
 10	extinguisher.AnimState:SetBuild("firefighter")
 11	extinguisher.AnimState:PlayAnimation("idle_on_loop")
 12	extinguisher.Transform:SetScale(0.5, 0.5, 0.5)
 13	extinguisher:RemoveComponent("inventoryitem")
 14	extinguisher:RemoveComponent("equippable")
 15	extinguisher:RemoveComponent("insulator")
 16	extinguisher:RemoveComponent("fueled")
 17	extinguisher:RemoveComponent("deployable")
 18	extinguisher:AddComponent("workable")
 19	extinguisher.components.workable:SetWorkAction(ACTIONS.HAMMER)
 20	extinguisher.components.workable:SetWorkLeft(3)
 21	extinguisher.components.workable:SetOnFinishCallback(function(extinguisher)
 22		SpawnPrefab("collapse_big").Transform:SetPosition(extinguisher.Transform:GetWorldPosition())
 23		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 24		extinguisher:Remove()
 25	end )
 26	extinguisher:AddComponent("inventoryitem")
 27	extinguisher.components.inventoryitem:ChangeImageName("firesuppressor")
 28	extinguisher:AddComponent("equippable")
 29	extinguisher.components.equippable.equipslot = EQUIPSLOTS.HANDS
 30	extinguisher.components.equippable:SetOnEquip(function(extinguisher, owner)
 31		extinguisher.task = extinguisher:DoPeriodicTask(1, function(extinguisher)
 32			local waterring = SpawnPrefab("groundpoundring_fx")
 33			waterring.Transform:SetPosition(owner.Transform:GetWorldPosition())
 34			waterring.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 35			local pos = Vector3(extinguisher.Transform:GetWorldPosition())
 36			local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 10)
 37			for k,v in pairs(ents) do
 38				if v.components.burnable and v.components.burnable:IsBurning() then
 39				   if v.prefab == "cactus" or v.prefab == "berrybush" or v.prefab == "berrybush2" or v.prefab == "carrot_planted" or v.prefab == "cave_banana_tree" or v.prefab == "cave_fern" or v.prefab == "deciduoustree" or v.prefab == "deciduoustree_normal" or v.prefab == "deciduoustree_tall" or v.prefab == "deciduoustree_short" or v.prefab == "evergreen" or v.prefab == "evergreen_normal" or v.prefab == "evergreen_tall" or v.prefab == "evergreen_short" or v.prefab == "evergreen_sparse" or v.prefab == "evergreen_sparse_normal" or v.prefab == "evergreen_sparse_tall" or v.prefab == "evergreen_sparse_short" or v.prefab == "flower" or v.prefab == "flower_evil" or v.prefab == "grass" or v.prefab == "marsh_bush" or v.prefab == "red_mushroom" or v.prefab == "green_mushroom" or v.prefab == "blue_mushroom" or v.prefab == "mushtree_tall" or v.prefab == "mushtree_medium" or v.prefab == "mushtree_small" or v.prefab == "sapling" or v.prefab == "flower_cave" or v.prefab == "flower_cave_double" or v.prefab == "flower_cave_triple" or v.prefab == "lichen" or v.prefab == "livingtree" or v.prefab == "marsh_tree" or v.prefab == "reeds" then
 40					  if v.components.propagator then v.components.propagator.spreading = false end
 41					  SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
 42					  SpawnPrefab(v.prefab).Transform:SetPosition(v.Transform:GetWorldPosition())
 43					  GetPlayer().SoundEmitter:PlaySound("dontstarve/common/fireOut")
 44					  v:Remove()
 45				   end
 46				   if v.prefab == "treasurechest" or v.prefab == "slow_farmplot" or v.prefab == "fast_farmplot" or v.prefab == "tent" or v.prefab == "wall_wood" or v.prefab == "wall_hay" or v.prefab == "cookpot" or v.prefab == "beebox" or v.prefab == "homesign" or v.prefab == "researchlab" or v.prefab == "researchlab2" or v.prefab == "researchlab3" or v.prefab == "researchlab4" or v.prefab == "meatrack" or v.prefab == "pighouse" or v.prefab == "rabbithouse" or v.prefab == "pottedfern" or v.prefab == "rainometer" or v.prefab == "winterometer" or v.prefab == "resurrectionstatue" or v.prefab == "siestahut" then
 47					  SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
 48					  GetPlayer().SoundEmitter:PlaySound("dontstarve/common/fireOut")
 49					  v.components.burnable:Extinguish(true)
 50				   end
 51				end
 52			end
 53		end )
 54	end )
 55	extinguisher.components.equippable:SetOnUnequip(function(extinguisher, owner)
 56		if extinguisher.task then extinguisher.task:Cancel() extinguisher.task = nil end
 57	end )
 58	extinguisher:AddTag("extinguishers")
 59	inst:Remove()
 60end
 61	inst:AddComponent("deployable")
 62	inst.components.deployable.ondeploy = OnDeploy2
 63local function onsave2(inst, data)
 64	if inst:HasTag("extinguishers") then
 65	   data.extinguishers = true
 66	end
 67end
 68local function onload2(inst, data)
 69  if data and data.extinguishers then
 70	inst.AnimState:SetBank("firefighter")
 71	inst.AnimState:SetBuild("firefighter")
 72	inst.AnimState:PlayAnimation("idle_on_loop")
 73	inst.Transform:SetScale(0.5, 0.5, 0.5)
 74	inst:RemoveComponent("inventoryitem")
 75	inst:RemoveComponent("equippable")
 76	inst:RemoveComponent("insulator")
 77	inst:RemoveComponent("fueled")
 78	inst:RemoveComponent("deployable")
 79	inst:AddComponent("workable")
 80	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
 81	inst.components.workable:SetWorkLeft(3)
 82	inst.components.workable:SetOnFinishCallback(function(inst)
 83		SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
 84		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 85		inst:Remove()
 86	end )
 87	inst:AddComponent("inventoryitem")
 88	inst.components.inventoryitem:ChangeImageName("firesuppressor")
 89	inst:AddComponent("equippable")
 90	inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
 91	inst.components.equippable:SetOnEquip(function(inst, owner)
 92		inst.task = inst:DoPeriodicTask(1, function(inst)
 93			local waterring = SpawnPrefab("groundpoundring_fx")
 94			waterring.Transform:SetPosition(owner.Transform:GetWorldPosition())
 95			waterring.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 96			local pos = Vector3(inst.Transform:GetWorldPosition())
 97			local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 10)
 98			for k,v in pairs(ents) do
 99				if v.components.burnable and v.components.burnable:IsBurning() then
100				   if v.prefab == "cactus" or v.prefab == "berrybush" or v.prefab == "berrybush2" or v.prefab == "carrot_planted" or v.prefab == "cave_banana_tree" or v.prefab == "cave_fern" or v.prefab == "deciduoustree" or v.prefab == "deciduoustree_normal" or v.prefab == "deciduoustree_tall" or v.prefab == "deciduoustree_short" or v.prefab == "evergreen" or v.prefab == "evergreen_normal" or v.prefab == "evergreen_tall" or v.prefab == "evergreen_short" or v.prefab == "evergreen_sparse" or v.prefab == "evergreen_sparse_normal" or v.prefab == "evergreen_sparse_tall" or v.prefab == "evergreen_sparse_short" or v.prefab == "flower" or v.prefab == "flower_evil" or v.prefab == "grass" or v.prefab == "marsh_bush" or v.prefab == "red_mushroom" or v.prefab == "green_mushroom" or v.prefab == "blue_mushroom" or v.prefab == "mushtree_tall" or v.prefab == "mushtree_medium" or v.prefab == "mushtree_small" or v.prefab == "sapling" or v.prefab == "flower_cave" or v.prefab == "flower_cave_double" or v.prefab == "flower_cave_triple" or v.prefab == "lichen" or v.prefab == "livingtree" or v.prefab == "marsh_tree" or v.prefab == "reeds" then
101					  if v.components.propagator then v.components.propagator.spreading = false end
102					  SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
103					  SpawnPrefab(v.prefab).Transform:SetPosition(v.Transform:GetWorldPosition())
104					  GetPlayer().SoundEmitter:PlaySound("dontstarve/common/fireOut")
105					  v:Remove()
106				   end
107				   if v.prefab == "treasurechest" or v.prefab == "slow_farmplot" or v.prefab == "fast_farmplot" or v.prefab == "tent" or v.prefab == "wall_wood" or v.prefab == "wall_hay" or v.prefab == "cookpot" or v.prefab == "beebox" or v.prefab == "homesign" or v.prefab == "researchlab" or v.prefab == "researchlab2" or v.prefab == "researchlab3" or v.prefab == "researchlab4" or v.prefab == "meatrack" or v.prefab == "pighouse" or v.prefab == "rabbithouse" or v.prefab == "pottedfern" or v.prefab == "rainometer" or v.prefab == "winterometer" or v.prefab == "resurrectionstatue" or v.prefab == "siestahut" then
108					  SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
109					  GetPlayer().SoundEmitter:PlaySound("dontstarve/common/fireOut")
110					  v.components.burnable:Extinguish(true)
111				   end
112				end
113			end
114		end )
115	end )
116	inst.components.equippable:SetOnUnequip(function(inst, owner)
117		if inst.task then inst.task:Cancel() inst.task = nil end
118	end )
119	inst:AddTag("extinguishers")
120  end
121end
122	inst.OnSave = onsave2
123	inst.OnLoad = onload2
124
125	即可用寒冬背心种随身灭火器,装备随身灭火器,可向外吹出强气流,靠近着火的建筑、植物,会自动灭火,让你对燃烧的基地不再束手无策。不想要随身灭火器了,用锤子砸掉即可。夏日背心在穿戴选项(画着帽子)下,用1个蓝色象鼻、8个蛛丝制造、2个牛毛制造