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

原帖链接: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个黄金购买