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

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


  1
  2二一六.鬼影重重(夜晚墓地有大量亡魂游荡,购买亡魂之心让主角变身亡魂)
  3
  4	1.MT管理器打开游戏目录/assets/scripts/prefabs/gravestone.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function createghostnpc(inst)
  7	for k = 1,math.random(3,7) do
  8		local pt = inst:GetPosition()
  9		local ghostnpc = SpawnPrefab("deadlyfeast")
 10		ghostnpc.Transform:SetPosition(pt.x+(math.random(20)-math.random(20)), 0, pt.z+(math.random(20)-math.random(20)))
 11		ghostnpc.entity:AddSoundEmitter()
 12		ghostnpc.AnimState:SetBank("ghost")
 13		ghostnpc.AnimState:SetBuild("ghost_build")
 14		ghostnpc.AnimState:PlayAnimation("idle", true)
 15		ghostnpc.Transform:SetFourFaced()
 16		MakeGhostPhysics(ghostnpc, 1, .5)
 17		local minimap = ghostnpc.entity:AddMiniMapEntity()
 18		minimap:SetIcon("whitespider_den.png")
 19		ghostnpc.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 20		local light = ghostnpc.entity:AddLight()
 21		light:SetIntensity(.6)
 22		light:SetRadius(.5)
 23		light:SetFalloff(.6)
 24		light:Enable(true)
 25		light:SetColour(180/255, 195/255, 225/255)
 26		local brain = require "brains/leifbrain"
 27		ghostnpc:SetBrain(brain)
 28		ghostnpc:AddComponent("locomotor")
 29		ghostnpc.components.locomotor.walkspeed = 5
 30		ghostnpc.components.locomotor.runspeed = 5
 31		ghostnpc:SetStateGraph("SGghost")
 32		ghostnpc:AddTag("ghostnpcs")
 33		ghostnpc:RemoveComponent("edible")
 34		ghostnpc:RemoveComponent("inventoryitem")
 35		ghostnpc:RemoveTag("meat")
 36		ghostnpc:AddComponent("sanityaura")
 37		ghostnpc.components.sanityaura.aura = -TUNING.SANITYAURA_SMALL
 38		ghostnpc:AddComponent("health")
 39		ghostnpc.components.health:SetMaxHealth(500)
 40		ghostnpc:AddComponent("trader")
 41		ghostnpc.components.trader:SetAcceptTest(function(ghostnpc, item) 
 42			if GetPlayer().components.inventory:Has("goldnugget", 30) then
 43			   if item.prefab == "goldnugget" then
 44				  return true
 45			   end
 46			end
 47			return false
 48		end )
 49		ghostnpc.components.trader.onaccept = function(ghostnpc, giver, item)
 50			GetPlayer().components.inventory:ConsumeByName("goldnugget", 29)
 51			local ghostheart = SpawnPrefab("deadlyfeast")
 52			ghostheart.AnimState:SetBank("egg")
 53			ghostheart.AnimState:SetBuild("tallbird_egg")
 54			ghostheart.AnimState:PlayAnimation("cooked")
 55			ghostheart.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
 56			ghostheart:RemoveComponent("edible")
 57			ghostheart:RemoveTag("meat")
 58			ghostheart:AddComponent("equippable")
 59			ghostheart.components.equippable:SetOnEquip( function(ghostheart, owner)
 60				if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
 61				   owner.components.locomotor:Stop()
 62				   owner.components.playercontroller:Enable(false)
 63				   owner:DoTaskInTime(0.3, function()
 64					   SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
 65					   owner.AnimState:SetBank("ghost")
 66					   owner.AnimState:SetBuild("ghost_build")
 67					   owner:SetStateGraph("SGghost")
 68					   owner.AnimState:PlayAnimation("idle", true)
 69					   owner.Transform:SetScale(1.2,1.2,1.2)
 70					   local shadow = owner.entity:AddDynamicShadow()
 71					   shadow:SetSize( 0, 0 )
 72					   owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 73					   local light = owner.entity:AddLight()
 74					   light:SetIntensity(.6)
 75					   light:SetRadius(20)
 76					   light:SetFalloff(.6)
 77					   light:Enable(true)
 78					   light:SetColour(180/255, 195/255, 225/255)
 79					   owner.components.locomotor.walkspeed = 20
 80					   owner.components.locomotor.runspeed = 20
 81					   owner.components.health:DoDelta(owner.components.health.maxhealth)
 82					   owner.components.health:SetInvincible(true)
 83					   owner.components.hunger:DoDelta(owner.components.hunger.max)
 84					   owner.components.hunger:Pause()
 85					   owner.components.sanity:DoDelta(owner.components.sanity.max)
 86					   owner.components.sanity.ignore = true
 87					   owner.components.combat:SetDefaultDamage(1000)
 88					   owner:AddComponent("aura")
 89					   owner.components.aura.radius = 3
 90					   owner.components.aura.tickperiod = 0.5
 91					   owner.components.aura.ignoreallies = true
 92					   owner.components.aura.auratestfn = function(ghostnpc, target)
 93						   if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
 94							  return true
 95						   end
 96						   return false
 97					   end
 98					   owner.components.temperature:SetTemp(20)
 99					   owner.components.playercontroller:Enable(true)
100				   end )
101				end
102			end )
103			ghostheart.components.equippable:SetOnUnequip( function(ghostheart, owner)
104				SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
105				owner.components.locomotor:Stop()
106				owner.components.playercontroller:Enable(false)
107				owner:DoTaskInTime(0.3, function() 
108					owner.AnimState:SetBank("wilson")
109					if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
110					if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
111					if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
112					if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
113					if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
114					if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
115					if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
116					if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
117					if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
118					if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
119					if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
120					owner:SetStateGraph("SGwilson")
121					owner.AnimState:PlayAnimation("idle")
122					owner.Transform:SetScale(1,1,1)
123					local shadow = owner.entity:AddDynamicShadow()
124					shadow:SetSize( 1.3, .6 )
125					owner.AnimState:SetBloomEffectHandle("")
126					owner.Light:Enable(false)
127					owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
128					owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
129					owner.components.health:SetInvincible(false)
130					owner.components.hunger:Resume()
131					owner.components.sanity.ignore = false
132					owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
133					owner.components.combat.hiteffectsymbol = "torso"
134					owner:RemoveComponent("aura")
135					owner.components.temperature:SetTemp(nil)
136					owner.components.playercontroller:Enable(true)
137					ghostheart:Remove()
138				end )
139			end )
140			ghostheart.components.equippable.equipslot = EQUIPSLOTS.HANDS
141			ghostheart:AddTag("ghostheart")
142			GetPlayer().components.inventory:GiveItem(ghostheart)
143		end
144		ghostnpc:AddComponent("combat")
145		ghostnpc.components.combat:SetDefaultDamage(3)
146		ghostnpc.components.combat:SetAttackPeriod(1)
147		ghostnpc.components.combat:SetRetargetFunction(2, function(ghostnpc)
148			if not ghostnpc.components.health:IsDead() then
149				return FindEntity(ghostnpc, 25, function(guy)
150					if guy:HasTag("monster") then return guy end
151					if guy:HasTag("player") and guy.components.inventory and not guy.components.inventory:FindItem(function(item) return item.prefab == "nightmarefuel" end ) then return guy end
152				end )
153			end
154		end )
155		ghostnpc:ListenForEvent("attacked", function(ghostnpc, data)
156			ghostnpc.components.combat:SetTarget(data.attacker)
157			ghostnpc.components.combat:ShareTarget(data.attacker, 35, function(dude) return dude:HasTag("ghostnpcs") and not dude.components.health:IsDead() end, 5)
158		end )
159		ghostnpc:AddComponent("aura")
160		ghostnpc.components.aura.radius = 2
161		ghostnpc.components.aura.tickperiod = 1
162		ghostnpc.components.aura.ignoreallies = true
163		ghostnpc.components.aura.auratestfn = function(ghostnpc, target)
164		  if target:HasTag("ghostnpcs") then return false end
165		  if target.components.combat.target == ghostnpc or ghostnpc.components.combat.target == target then
166			 return true
167		  end
168		end
169		ghostnpc:ListenForEvent("death", function()
170			local gems = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem","thulecite","goldnugget"}
171			local gem = gems[math.random(#gems)]
172			SpawnPrefab(gem).Transform:SetPosition(ghostnpc.Transform:GetWorldPosition())
173		end )
174		ghostnpc:ListenForEvent( "daytime", function() ghostnpc:Remove() end , GetWorld())
175	end
176end
177	inst:ListenForEvent( "dusktime", function() createghostnpc(inst) end , GetWorld())
178
179
180	2.MT管理器打开游戏目录/assets/scripts/prefabs/deadlyfeast.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
181
182local function onsave(inst, data)
183	if inst:HasTag("ghostnpcs") then
184		data.ghostnpcs = true
185	end
186	if inst:HasTag("ghostheart") then
187		data.ghostheart = true
188	end
189end
190local function onload(inst, data)
191	if data and data.ghostnpcs then
192		inst.entity:AddSoundEmitter()
193		inst.AnimState:SetBank("ghost")
194		inst.AnimState:SetBuild("ghost_build")
195		inst.AnimState:PlayAnimation("idle", true)
196		inst.Transform:SetFourFaced()
197		MakeGhostPhysics(inst, 1, .5)
198		local minimap = inst.entity:AddMiniMapEntity()
199		minimap:SetIcon("whitespider_den.png")
200		inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
201		local light = inst.entity:AddLight()
202		light:SetIntensity(.6)
203		light:SetRadius(.5)
204		light:SetFalloff(.6)
205		light:Enable(true)
206		light:SetColour(180/255, 195/255, 225/255)
207		local brain = require "brains/leifbrain"
208		inst:SetBrain(brain)
209		inst:AddComponent("locomotor")
210		inst.components.locomotor.walkspeed = 5
211		inst.components.locomotor.runspeed = 5
212		inst:SetStateGraph("SGghost")
213		inst:AddTag("ghostnpcs")
214		inst:RemoveComponent("edible")
215		inst:RemoveComponent("inventoryitem")
216		inst:RemoveTag("meat")
217		inst:AddComponent("sanityaura")
218		inst.components.sanityaura.aura = -TUNING.SANITYAURA_SMALL
219		inst:AddComponent("health")
220		inst.components.health:SetMaxHealth(500)
221		inst:AddComponent("trader")
222		inst.components.trader:SetAcceptTest(function(inst, item) 
223			if GetPlayer().components.inventory:Has("goldnugget", 30) then
224			   if item.prefab == "goldnugget" then
225				  return true
226			   end
227			end
228			return false
229		end )
230		inst.components.trader.onaccept = function(inst, giver, item)
231			GetPlayer().components.inventory:ConsumeByName("goldnugget", 29)
232			local ghostheart = SpawnPrefab("deadlyfeast")
233			ghostheart.AnimState:SetBank("egg")
234			ghostheart.AnimState:SetBuild("tallbird_egg")
235			ghostheart.AnimState:PlayAnimation("cooked")
236			ghostheart.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
237			ghostheart:RemoveComponent("edible")
238			ghostheart:RemoveTag("meat")
239			ghostheart:AddComponent("equippable")
240			ghostheart.components.equippable:SetOnEquip( function(ghostheart, owner)
241				if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
242				   owner.components.locomotor:Stop()
243				   owner.components.playercontroller:Enable(false)
244				   owner:DoTaskInTime(0.3, function()
245					   SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
246					   owner.AnimState:SetBank("ghost")
247					   owner.AnimState:SetBuild("ghost_build")
248					   owner:SetStateGraph("SGghost")
249					   owner.AnimState:PlayAnimation("idle", true)
250					   owner.Transform:SetScale(1.2,1.2,1.2)
251					   local shadow = owner.entity:AddDynamicShadow()
252					   shadow:SetSize( 0, 0 )
253					   owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
254					   local light = owner.entity:AddLight()
255					   light:SetIntensity(.6)
256					   light:SetRadius(20)
257					   light:SetFalloff(.6)
258					   light:Enable(true)
259					   light:SetColour(180/255, 195/255, 225/255)
260					   owner.components.locomotor.walkspeed = 20
261					   owner.components.locomotor.runspeed = 20
262					   owner.components.health:DoDelta(owner.components.health.maxhealth)
263					   owner.components.health:SetInvincible(true)
264					   owner.components.hunger:DoDelta(owner.components.hunger.max)
265					   owner.components.hunger:Pause()
266					   owner.components.sanity:DoDelta(owner.components.sanity.max)
267					   owner.components.sanity.ignore = true
268					   owner.components.combat:SetDefaultDamage(1000)
269					   owner:AddComponent("aura")
270					   owner.components.aura.radius = 3
271					   owner.components.aura.tickperiod = 0.5
272					   owner.components.aura.ignoreallies = true
273					   owner.components.aura.auratestfn = function(inst, target)
274						   if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
275							  return true
276						   end
277						   return false
278					   end
279					   owner.components.temperature:SetTemp(20)
280					   owner.components.playercontroller:Enable(true)
281				   end )
282				end
283			end )
284			ghostheart.components.equippable:SetOnUnequip( function(ghostheart, owner)
285				SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
286				owner.components.locomotor:Stop()
287				owner.components.playercontroller:Enable(false)
288				owner:DoTaskInTime(0.3, function() 
289					owner.AnimState:SetBank("wilson")
290					if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
291					if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
292					if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
293					if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
294					if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
295					if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
296					if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
297					if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
298					if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
299					if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
300					if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
301					owner:SetStateGraph("SGwilson")
302					owner.AnimState:PlayAnimation("idle")
303					owner.Transform:SetScale(1,1,1)
304					local shadow = owner.entity:AddDynamicShadow()
305					shadow:SetSize( 1.3, .6 )
306					owner.AnimState:SetBloomEffectHandle("")
307					owner.Light:Enable(false)
308					owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
309					owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
310					owner.components.health:SetInvincible(false)
311					owner.components.hunger:Resume()
312					owner.components.sanity.ignore = false
313					owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
314					owner.components.combat.hiteffectsymbol = "torso"
315					owner:RemoveComponent("aura")
316					owner.components.temperature:SetTemp(nil)
317					owner.components.playercontroller:Enable(true)
318					ghostheart:Remove()
319				end )
320			end )
321			ghostheart.components.equippable.equipslot = EQUIPSLOTS.HANDS
322			ghostheart:AddTag("ghostheart")
323			GetPlayer().components.inventory:GiveItem(ghostheart)
324		end
325		inst:AddComponent("combat")
326		inst.components.combat:SetDefaultDamage(3)
327		inst.components.combat:SetAttackPeriod(1)
328		inst.components.combat:SetRetargetFunction(2, function(inst)
329			if not inst.components.health:IsDead() then
330				return FindEntity(inst, 25, function(guy)
331					if guy:HasTag("monster") then return guy end
332					if guy:HasTag("player") and guy.components.inventory and not guy.components.inventory:FindItem(function(item) return item.prefab == "nightmarefuel" end ) then return guy end
333				end )
334			end
335		end )
336		inst:ListenForEvent("attacked", function(inst, data)
337			inst.components.combat:SetTarget(data.attacker)
338			inst.components.combat:ShareTarget(data.attacker, 35, function(dude) return dude:HasTag("ghostnpcs") and not dude.components.health:IsDead() end, 5)
339		end )
340		inst:AddComponent("aura")
341		inst.components.aura.radius = 2
342		inst.components.aura.tickperiod = 1
343		inst.components.aura.ignoreallies = true
344		inst.components.aura.auratestfn = function(inst, target)
345		  if target:HasTag("ghostnpcs") then return false end
346		  if target.components.combat.target == inst or inst.components.combat.target == target then
347			 return true
348		  end
349		end
350		inst:ListenForEvent("death", function()
351			local gems = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem","thulecite","goldnugget"}
352			local gem = gems[math.random(#gems)]
353			SpawnPrefab(gem).Transform:SetPosition(inst.Transform:GetWorldPosition())
354		end )
355		inst:ListenForEvent( "daytime", function() inst:Remove() end , GetWorld())
356	end
357	if data and data.ghostheart then
358			inst.AnimState:SetBank("egg")
359			inst.AnimState:SetBuild("tallbird_egg")
360			inst.AnimState:PlayAnimation("cooked")
361			inst.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
362			inst:RemoveComponent("edible")
363			inst:RemoveTag("meat")
364			inst:AddComponent("equippable")
365			inst.components.equippable:SetOnEquip( function(inst, owner)
366				if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
367				   owner.components.locomotor:Stop()
368				   owner.components.playercontroller:Enable(false)
369				   owner:DoTaskInTime(0.3, function()
370					   SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
371					   owner.AnimState:SetBank("ghost")
372					   owner.AnimState:SetBuild("ghost_build")
373					   owner:SetStateGraph("SGghost")
374					   owner.AnimState:PlayAnimation("idle", true)
375					   owner.Transform:SetScale(1.2,1.2,1.2)
376					   local shadow = owner.entity:AddDynamicShadow()
377					   shadow:SetSize( 0, 0 )
378					   owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
379					   local light = owner.entity:AddLight()
380					   light:SetIntensity(.6)
381					   light:SetRadius(20)
382					   light:SetFalloff(.6)
383					   light:Enable(true)
384					   light:SetColour(180/255, 195/255, 225/255)
385					   owner.components.locomotor.walkspeed = 20
386					   owner.components.locomotor.runspeed = 20
387					   owner.components.health:DoDelta(owner.components.health.maxhealth)
388					   owner.components.health:SetInvincible(true)
389					   owner.components.hunger:DoDelta(owner.components.hunger.max)
390					   owner.components.hunger:Pause()
391					   owner.components.sanity:DoDelta(owner.components.sanity.max)
392					   owner.components.sanity.ignore = true
393					   owner.components.combat:SetDefaultDamage(1000)
394					   owner:AddComponent("aura")
395					   owner.components.aura.radius = 3
396					   owner.components.aura.tickperiod = 0.5
397					   owner.components.aura.ignoreallies = true
398					   owner.components.aura.auratestfn = function(ghostnpc, target)
399						   if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
400							  return true
401						   end
402						   return false
403					   end
404					   owner.components.temperature:SetTemp(20)
405					   owner.components.playercontroller:Enable(true)
406				   end )
407				end
408			end )
409			inst.components.equippable:SetOnUnequip( function(inst, owner)
410				SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
411				owner.components.locomotor:Stop()
412				owner.components.playercontroller:Enable(false)
413				owner:DoTaskInTime(0.3, function() 
414					owner.AnimState:SetBank("wilson")
415					if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
416					if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
417					if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
418					if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
419					if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
420					if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
421					if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
422					if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
423					if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
424					if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
425					if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
426					owner:SetStateGraph("SGwilson")
427					owner.AnimState:PlayAnimation("idle")
428					owner.Transform:SetScale(1,1,1)
429					local shadow = owner.entity:AddDynamicShadow()
430					shadow:SetSize( 1.3, .6 )
431					owner.AnimState:SetBloomEffectHandle("")
432					owner.Light:Enable(false)
433					owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
434					owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
435					owner.components.health:SetInvincible(false)
436					owner.components.hunger:Resume()
437					owner.components.sanity.ignore = false
438					owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
439					owner.components.combat.hiteffectsymbol = "torso"
440					owner:RemoveComponent("aura")
441					owner.components.temperature:SetTemp(nil)
442					owner.components.playercontroller:Enable(true)
443					inst:Remove()
444				end )
445			end )
446			inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
447			inst:AddTag("ghostheart")
448	end
449end
450	inst.OnSave = onsave
451	inst.OnLoad = onload
452
453	即可在夜晚时,墓地有大量亡魂游荡,会主动攻击你,且靠近它们会降脑,消灭亡魂可获得宝石、铥矿石、黄金。亡魂在小地图上显示为白蜘蛛的图标。如果身上携带了噩梦燃料,亡魂就不会主动攻击你,给亡魂30个黄金(拿着黄金对亡魂点鼠标左键),可购买亡魂之心,装备它即可变身亡魂,生命、饥饿、脑全部锁死,按Ctrl + 鼠标左键攻击,且任何攻击你的敌人都会被自动烫死。卸载亡魂之心即可变回人,同时亡魂之心消失,想再变身就多买一些吧。如果修改了“小病小灾”,在主角感冒和食物中毒时,装备亡魂之心也不会变身