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

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


  1
  2二五五.天然温泉(用触手皮种温泉,可恢复生命和脑,可抓鱼)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/tentaclespots.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function spa(inst)
  7	local pt = inst:GetPosition()
  8	local spa = SpawnPrefab("tentaclespots")
  9	spa.Transform:SetPosition(pt.x, pt.y, pt.z)
 10	spa.AnimState:SetBank("marsh_tile")
 11	spa.AnimState:SetBuild("marsh_tile")
 12	spa.AnimState:PlayAnimation("idle_cave",true)
 13	spa.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
 14	spa.AnimState:SetLayer( LAYER_BACKGROUND )
 15	spa.AnimState:SetSortOrder( 3 )
 16	spa.Transform:SetScale(1.5, 1.5, 1.5)
 17	spa:RemoveComponent("inventoryitem")
 18	spa:RemoveComponent("stackable")
 19	spa:RemoveComponent("fuel")
 20	spa:RemoveComponent("burnable")
 21	spa:RemoveComponent("propagator")
 22	spa:RemoveComponent("deployable")
 23	if spa.components.edible then spa:RemoveComponent("edible") end
 24	spa:AddTag("NOCLICK")
 25	spa:AddTag("spa")
 26	spa:DoPeriodicTask(math.random(10,20), function(spa)
 27		local pt1 = spa:GetPosition()
 28		local names = {"fish","eel"}
 29		local name = names[math.random(#names)]
 30		local fish = SpawnPrefab(name)
 31		fish.Transform:SetPosition(pt1.x+(math.random(4)-math.random(4)), 0, pt1.z+(math.random(4)-math.random(4)))
 32		SpawnPrefab("splash").Transform:SetPosition(fish.Transform:GetWorldPosition())
 33		spa:DoTaskInTime(0.5, function(spa)
 34			local pos = Vector3(spa.Transform:GetWorldPosition())
 35			local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
 36			for k,v in pairs(ents) do
 37				if v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then
 38				   if v.prefab == "fish" or v.prefab == "eel" then
 39					  SpawnPrefab("splash").Transform:SetPosition(v.Transform:GetWorldPosition())
 40					  v:Remove()
 41				   end
 42				end
 43			end
 44		end )
 45	end )
 46	spa:DoPeriodicTask(3, function(spa)
 47		local pos2 = Vector3(spa.Transform:GetWorldPosition())
 48		local ents = TheSim:FindEntities(pos2.x,pos2.y,pos2.z, 4.8)
 49		for k,v in pairs(ents) do
 50			if v:HasTag("player") then
 51			   v.components.health:DoDelta(v.components.health.maxhealth*.02)
 52			   v.components.sanity:DoDelta(v.components.sanity.max*.02)
 53			end
 54		end
 55	end )
 56	local rock1 = SpawnPrefab("tentaclespots")
 57	rock1.Transform:SetPosition(pt.x-3.3-0.5, 0, pt.z-3.3+0.5)
 58	rock1.AnimState:SetBank("rock")
 59	rock1.AnimState:SetBuild("rock")
 60	rock1.AnimState:PlayAnimation("full")
 61	rock1.Transform:SetScale(2, 2, 2)
 62	rock1:AddTag("sparock")
 63	rock1:RemoveComponent("inventoryitem")
 64	rock1:RemoveComponent("stackable")
 65	rock1:RemoveComponent("fuel")
 66	rock1:RemoveComponent("burnable")
 67	rock1:RemoveComponent("propagator")
 68	rock1:RemoveComponent("deployable")
 69	if rock1.components.edible then rock1:RemoveComponent("edible") end
 70	rock1:AddComponent("workable")
 71	rock1.components.workable:SetWorkAction(ACTIONS.HAMMER)
 72	rock1.components.workable:SetWorkLeft(3)
 73	rock1.components.workable:SetOnFinishCallback(function(rock1)
 74		SpawnPrefab("collapse_big").Transform:SetPosition(rock1.Transform:GetWorldPosition())
 75		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
 76		local pos3 = Vector3(rock1.Transform:GetWorldPosition())
 77		local ents = TheSim:FindEntities(pos3.x,pos3.y,pos3.z, 10)
 78		for k,v in pairs(ents) do
 79			if v:HasTag("spa") then
 80			   v:Remove()
 81			end
 82			if v:HasTag("sparock") then
 83			   v:Remove()
 84			end
 85		end
 86		rock1:Remove()
 87	end )
 88	local rock2 = SpawnPrefab("tentaclespots")
 89	rock2.Transform:SetPosition(pt.x-2.1-2.8, 0, pt.z-2.1+2.8)
 90	rock2.AnimState:SetBank("firepit")
 91	rock2.AnimState:SetBuild("firepit")
 92	rock2.AnimState:PlayAnimation("idle",false)
 93	rock2.Transform:SetScale(0.6, 1, 0.6)
 94	rock2:AddTag("sparock")
 95	rock2:RemoveComponent("inventoryitem")
 96	rock2:RemoveComponent("stackable")
 97	rock2:RemoveComponent("fuel")
 98	rock2:RemoveComponent("burnable")
 99	rock2:RemoveComponent("propagator")
100	rock2:RemoveComponent("deployable")
101	if rock2.components.edible then rock2:RemoveComponent("edible") end
102	rock2:AddComponent("burnable")
103	rock2.components.burnable:SetFXLevel(5)
104	rock2.components.burnable:AddBurnFX("campfirefire", Vector3(0,0.6,0) )
105	rock2.components.burnable:Ignite(true)
106	rock2:AddComponent("cooker")
107	local rock3 = SpawnPrefab("tentaclespots")
108	rock3.Transform:SetPosition(pt.x+2.1+2.1, 0, pt.z-2.1+2.1)
109	rock3.AnimState:SetBank("flowers")
110	rock3.AnimState:SetBuild("flowers")
111	rock3.AnimState:PlayAnimation("f10")
112	rock3.Transform:SetScale(1.8, 1.8, 1.8)
113	rock3:AddTag("sparock")
114	rock3:RemoveComponent("inventoryitem")
115	rock3:RemoveComponent("stackable")
116	rock3:RemoveComponent("fuel")
117	rock3:RemoveComponent("burnable")
118	rock3:RemoveComponent("propagator")
119	rock3:RemoveComponent("deployable")
120	if rock3.components.edible then rock3:RemoveComponent("edible") end
121end
122local function OnDeploy (inst, pt)
123	spa(inst)
124	inst.components.stackable:Get():Remove()
125end
126	inst:AddComponent("deployable")
127	inst.components.deployable.ondeploy = OnDeploy
128local function onsave(inst, data)
129	if inst:HasTag("spa") then
130		data.spa = true
131	end
132	if inst:HasTag("sparock") then
133		data.sparock = true
134	end
135end
136local function onload(inst, data)
137	if data and data.spa then
138	   spa(inst)
139	   inst:Remove()
140	end
141	if data and data.sparock then
142	   inst:Remove()
143	end
144end
145	inst.OnSave = onsave
146	inst.OnLoad = onload
147
148	即可用触手皮种温泉(拿着1个触手皮对地面点鼠标右键,如果拿着多个触手皮,则不会种出来),站在水里可以取暖,并补充生命值和脑值。温泉里会有鱼跳出水面,按住键盘空格键不放,有机会抓住鱼,在温泉旁的火盆里烤鱼吃吧。不想要温泉时,用锤子砸掉大石头即可