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

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



二五五.天然温泉(用触手皮种温泉,可恢复生命和脑,可抓鱼)

	用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/tentaclespots.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

local function spa(inst)
	local pt = inst:GetPosition()
	local spa = SpawnPrefab("tentaclespots")
	spa.Transform:SetPosition(pt.x, pt.y, pt.z)
	spa.AnimState:SetBank("marsh_tile")
	spa.AnimState:SetBuild("marsh_tile")
	spa.AnimState:PlayAnimation("idle_cave",true)
	spa.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
	spa.AnimState:SetLayer( LAYER_BACKGROUND )
	spa.AnimState:SetSortOrder( 3 )
	spa.Transform:SetScale(1.5, 1.5, 1.5)
	spa:RemoveComponent("inventoryitem")
	spa:RemoveComponent("stackable")
	spa:RemoveComponent("fuel")
	spa:RemoveComponent("burnable")
	spa:RemoveComponent("propagator")
	spa:RemoveComponent("deployable")
	if spa.components.edible then spa:RemoveComponent("edible") end
	spa:AddTag("NOCLICK")
	spa:AddTag("spa")
	spa:DoPeriodicTask(math.random(10,20), function(spa)
		local pt1 = spa:GetPosition()
		local names = {"fish","eel"}
		local name = names[math.random(#names)]
		local fish = SpawnPrefab(name)
		fish.Transform:SetPosition(pt1.x+(math.random(4)-math.random(4)), 0, pt1.z+(math.random(4)-math.random(4)))
		SpawnPrefab("splash").Transform:SetPosition(fish.Transform:GetWorldPosition())
		spa:DoTaskInTime(0.5, function(spa)
			local pos = Vector3(spa.Transform:GetWorldPosition())
			local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5)
			for k,v in pairs(ents) do
				if v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then
				   if v.prefab == "fish" or v.prefab == "eel" then
					  SpawnPrefab("splash").Transform:SetPosition(v.Transform:GetWorldPosition())
					  v:Remove()
				   end
				end
			end
		end )
	end )
	spa:DoPeriodicTask(3, function(spa)
		local pos2 = Vector3(spa.Transform:GetWorldPosition())
		local ents = TheSim:FindEntities(pos2.x,pos2.y,pos2.z, 4.8)
		for k,v in pairs(ents) do
			if v:HasTag("player") then
			   v.components.health:DoDelta(v.components.health.maxhealth*.02)
			   v.components.sanity:DoDelta(v.components.sanity.max*.02)
			end
		end
	end )
	local rock1 = SpawnPrefab("tentaclespots")
	rock1.Transform:SetPosition(pt.x-3.3-0.5, 0, pt.z-3.3+0.5)
	rock1.AnimState:SetBank("rock")
	rock1.AnimState:SetBuild("rock")
	rock1.AnimState:PlayAnimation("full")
	rock1.Transform:SetScale(2, 2, 2)
	rock1:AddTag("sparock")
	rock1:RemoveComponent("inventoryitem")
	rock1:RemoveComponent("stackable")
	rock1:RemoveComponent("fuel")
	rock1:RemoveComponent("burnable")
	rock1:RemoveComponent("propagator")
	rock1:RemoveComponent("deployable")
	if rock1.components.edible then rock1:RemoveComponent("edible") end
	rock1:AddComponent("workable")
	rock1.components.workable:SetWorkAction(ACTIONS.HAMMER)
	rock1.components.workable:SetWorkLeft(3)
	rock1.components.workable:SetOnFinishCallback(function(rock1)
		SpawnPrefab("collapse_big").Transform:SetPosition(rock1.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
		local pos3 = Vector3(rock1.Transform:GetWorldPosition())
		local ents = TheSim:FindEntities(pos3.x,pos3.y,pos3.z, 10)
		for k,v in pairs(ents) do
			if v:HasTag("spa") then
			   v:Remove()
			end
			if v:HasTag("sparock") then
			   v:Remove()
			end
		end
		rock1:Remove()
	end )
	local rock2 = SpawnPrefab("tentaclespots")
	rock2.Transform:SetPosition(pt.x-2.1-2.8, 0, pt.z-2.1+2.8)
	rock2.AnimState:SetBank("firepit")
	rock2.AnimState:SetBuild("firepit")
	rock2.AnimState:PlayAnimation("idle",false)
	rock2.Transform:SetScale(0.6, 1, 0.6)
	rock2:AddTag("sparock")
	rock2:RemoveComponent("inventoryitem")
	rock2:RemoveComponent("stackable")
	rock2:RemoveComponent("fuel")
	rock2:RemoveComponent("burnable")
	rock2:RemoveComponent("propagator")
	rock2:RemoveComponent("deployable")
	if rock2.components.edible then rock2:RemoveComponent("edible") end
	rock2:AddComponent("burnable")
	rock2.components.burnable:SetFXLevel(5)
	rock2.components.burnable:AddBurnFX("campfirefire", Vector3(0,0.6,0) )
	rock2.components.burnable:Ignite(true)
	rock2:AddComponent("cooker")
	local rock3 = SpawnPrefab("tentaclespots")
	rock3.Transform:SetPosition(pt.x+2.1+2.1, 0, pt.z-2.1+2.1)
	rock3.AnimState:SetBank("flowers")
	rock3.AnimState:SetBuild("flowers")
	rock3.AnimState:PlayAnimation("f10")
	rock3.Transform:SetScale(1.8, 1.8, 1.8)
	rock3:AddTag("sparock")
	rock3:RemoveComponent("inventoryitem")
	rock3:RemoveComponent("stackable")
	rock3:RemoveComponent("fuel")
	rock3:RemoveComponent("burnable")
	rock3:RemoveComponent("propagator")
	rock3:RemoveComponent("deployable")
	if rock3.components.edible then rock3:RemoveComponent("edible") end
end
local function OnDeploy (inst, pt)
	spa(inst)
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("spa") then
		data.spa = true
	end
	if inst:HasTag("sparock") then
		data.sparock = true
	end
end
local function onload(inst, data)
	if data and data.spa then
	   spa(inst)
	   inst:Remove()
	end
	if data and data.sparock then
	   inst:Remove()
	end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可用触手皮种温泉(拿着1个触手皮对地面点鼠标右键,如果拿着多个触手皮,则不会种出来),站在水里可以取暖,并补充生命值和脑值。温泉里会有鱼跳出水面,按住键盘空格键不放,有机会抓住鱼,在温泉旁的火盆里烤鱼吃吧。不想要温泉时,用锤子砸掉大石头即可