代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个触手皮对地面点鼠标右键,如果拿着多个触手皮,则不会种出来),站在水里可以取暖,并补充生命值和脑值。温泉里会有鱼跳出水面,按住键盘空格键不放,有机会抓住鱼,在温泉旁的火盆里烤鱼吃吧。不想要温泉时,用锤子砸掉大石头即可