代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2一九八.找矿蜗牛(用蜗牛龟盔甲种找矿蜗牛,为你勘探新石矿)
3
4 用MT管理器打开游戏目录/assets/scripts/prefabs/armor_snurtleshell.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function OnDeploy (inst, pt)
7 local snail = SpawnPrefab("armorsnurtleshell")
8 snail.Transform:SetPosition(pt.x, pt.y, pt.z)
9 snail.AnimState:SetBank("slurtle")
10 snail.AnimState:SetBuild("slurtle")
11 snail.AnimState:PlayAnimation("idle", true)
12 snail.Transform:SetFourFaced()
13 local sound = snail.entity:AddSoundEmitter()
14 local brain = require "brains/leifbrain"
15 snail:SetBrain(brain)
16 snail:AddComponent("locomotor")
17 snail.components.locomotor.walkspeed = 7
18 snail:SetStateGraph("SGslurtle")
19 local minimap = snail.entity:AddMiniMapEntity()
20 minimap:SetIcon( "slurtle_den.png" )
21 snail.components.inventoryitem:ChangeImageName("armorsnurtleshell")
22 snail:RemoveComponent("armor")
23 snail:RemoveComponent("equippable")
24 snail:RemoveComponent("useableitem")
25 snail:RemoveComponent("deployable")
26 snail:RemoveTag("shell")
27 snail:RemoveComponent("inventoryitem")
28 snail:AddComponent("combat")
29 snail:AddComponent("health")
30 snail.components.health:SetMaxHealth(1000)
31 snail.components.health:SetInvincible(true)
32 snail.components.health.nofadeout = true
33 snail.task = snail:DoPeriodicTask(math.random(8,12), function(snail)
34 local pt1 = snail:GetPosition()
35 local rocks = {"rock1","rock2","rock_flintless","rock_ice"}
36 local rock = rocks[math.random(#rocks)]
37 local newrock = SpawnPrefab(rock)
38 newrock.Transform:SetPosition(pt1.x, 0, pt1.z)
39 newrock.Physics:SetActive(false)
40 newrock:DoTaskInTime(3, function(newrock) newrock.Physics:SetActive(true) end )
41 SpawnPrefab("splash_ocean").Transform:SetPosition(pt1.x, 0, pt1.z)
42 snail.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
43 GetPlayer().components.playercontroller:ShakeCamera(snail, "FULL", 0.2, 0.02, .25, 40)
44 end )
45 snail:AddComponent("inventoryitem")
46 snail.components.inventoryitem:SetOnPutInInventoryFn(function(snail)
47 snail:RemoveTag("sports")
48 snail.components.locomotor:Stop()
49 snail:SetBrain(nil)
50 if snail.task then snail.task:Cancel() snail.task = nil end
51 end )
52 snail.components.inventoryitem:SetOnDroppedFn(function(snail)
53 snail:AddTag("sports")
54 local brain = require "brains/leifbrain"
55 snail:SetBrain(brain)
56 snail:RestartBrain()
57 snail.task = snail:DoPeriodicTask(math.random(8,12), function(snail)
58 local pt1 = snail:GetPosition()
59 local rocks = {"rock1","rock2","rock_flintless","rock_ice"}
60 local rock = rocks[math.random(#rocks)]
61 local newrock = SpawnPrefab(rock)
62 newrock.Transform:SetPosition(pt1.x, 0, pt1.z)
63 newrock.Physics:SetActive(false)
64 newrock:DoTaskInTime(3, function(newrock) newrock.Physics:SetActive(true) end )
65 SpawnPrefab("splash_ocean").Transform:SetPosition(pt1.x, 0, pt1.z)
66 snail.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
67 GetPlayer().components.playercontroller:ShakeCamera(snail, "FULL", 0.2, 0.02, .25, 40)
68 end )
69 end )
70 snail:AddTag("sports")
71 snail:AddTag("companion")
72 snail:AddTag("snails")
73 inst:Remove()
74end
75 inst:AddComponent("deployable")
76 inst.components.deployable.ondeploy = OnDeploy
77
78local function onsave(inst, data)
79 if inst:HasTag("snails") then
80 data.snails = true
81 end
82 if inst:HasTag("sports") then
83 data.sports = true
84 end
85end
86local function onload(inst, data)
87 if data and data.snails then
88 inst.AnimState:SetBank("slurtle")
89 inst.AnimState:SetBuild("slurtle")
90 inst.AnimState:PlayAnimation("idle", true)
91 inst.Transform:SetFourFaced()
92 local sound = inst.entity:AddSoundEmitter()
93 inst:AddComponent("locomotor")
94 inst.components.locomotor.walkspeed = 7
95 inst:SetStateGraph("SGslurtle")
96 local minimap = inst.entity:AddMiniMapEntity()
97 minimap:SetIcon( "slurtle_den.png" )
98 inst.components.inventoryitem:ChangeImageName("armorsnurtleshell")
99 inst:RemoveComponent("armor")
100 inst:RemoveComponent("equippable")
101 inst:RemoveComponent("useableitem")
102 inst:RemoveComponent("deployable")
103 inst:RemoveTag("shell")
104 inst:RemoveComponent("inventoryitem")
105 inst:AddComponent("combat")
106 inst:AddComponent("health")
107 inst.components.health:SetMaxHealth(1000)
108 inst.components.health:SetInvincible(true)
109 inst.components.health.nofadeout = true
110 inst:AddComponent("inventoryitem")
111 inst.components.inventoryitem:SetOnPutInInventoryFn(function(inst)
112 inst:RemoveTag("sports")
113 inst.components.locomotor:Stop()
114 inst:SetBrain(nil)
115 if inst.task then inst.task:Cancel() inst.task = nil end
116 end )
117 inst.components.inventoryitem:SetOnDroppedFn(function(inst)
118 inst:AddTag("sports")
119 local brain = require "brains/leifbrain"
120 inst:SetBrain(brain)
121 inst:RestartBrain()
122 inst.task = inst:DoPeriodicTask(math.random(8,12), function(inst)
123 local pt1 = inst:GetPosition()
124 local rocks = {"rock1","rock2","rock_flintless","rock_ice"}
125 local rock = rocks[math.random(#rocks)]
126 local newrock = SpawnPrefab(rock)
127 newrock.Transform:SetPosition(pt1.x, 0, pt1.z)
128 newrock.Physics:SetActive(false)
129 newrock:DoTaskInTime(3, function(newrock) newrock.Physics:SetActive(true) end )
130 SpawnPrefab("splash_ocean").Transform:SetPosition(pt1.x, 0, pt1.z)
131 inst.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
132 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
133 end )
134 end )
135 inst:AddTag("companion")
136 inst:AddTag("snails")
137 end
138 if data and data.sports then
139 local brain = require "brains/leifbrain"
140 inst:SetBrain(brain)
141 inst:RestartBrain()
142 inst.task = inst:DoPeriodicTask(math.random(8,12), function(inst)
143 local pt1 = inst:GetPosition()
144 local rocks = {"rock1","rock2","rock_flintless","rock_ice"}
145 local rock = rocks[math.random(#rocks)]
146 local newrock = SpawnPrefab(rock)
147 newrock.Transform:SetPosition(pt1.x, 0, pt1.z)
148 newrock.Physics:SetActive(false)
149 newrock:DoTaskInTime(3, function(newrock) newrock.Physics:SetActive(true) end )
150 SpawnPrefab("splash_ocean").Transform:SetPosition(pt1.x, 0, pt1.z)
151 inst.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
152 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
153 end )
154 inst:AddTag("sports")
155 local pt2 = GetPlayer():GetPosition()
156 inst.Transform:SetPosition(pt2.x+1, 0, pt2.z+1)
157 end
158end
159 inst.OnSave = onsave
160 inst.OnLoad = onload
161
162 即可用蜗牛龟盔甲种找矿蜗牛,鼠标左键点蜗牛,可将其放入物品栏(显示为蜗牛龟盔甲的图标)。在空旷的地上放下找矿蜗牛,它会为你勘探出新的石矿,石头从此成为可再生资源。找矿蜗牛只会专注于找矿,不会跟随你,别把它弄丢了,如果真找不到了,存档退出后再读档,它会出现在你身边。不想要找矿蜗牛时,在物品栏中对其按鼠标右键即可。蜗牛龟盔甲可在地下一层打蜗牛龟时获得,如果修改了“巨型超市”,也可以花9-11个黄金购买