第216页:鬼影重重
展开二一六.鬼影重重(夜晚墓地有大量亡魂游荡,购买亡魂之心让主角变身亡魂)
1.用记事本打开游戏目录\data\scripts\prefabs\gravestone.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local function createghostnpc(inst)
for k = 1,math.random(3,7) do
local pt = inst:GetPosition()
local ghostnpc = SpawnPrefab("deadlyfeast")
ghostnpc.Transform:SetPosition(pt.x+(math.random(20)-math.random(20)), 0, pt.z+(math.random(20)-math.random(20)))
ghostnpc.entity:AddSoundEmitter()
ghostnpc.AnimState:SetBank("ghost")
ghostnpc.AnimState:SetBuild("ghost_build")
ghostnpc.AnimState:PlayAnimation("idle", true)
ghostnpc.Transform:SetFourFaced()
MakeGhostPhysics(ghostnpc, 1, .5)
local minimap = ghostnpc.entity:AddMiniMapEntity()
minimap:SetIcon("whitespider_den.png")
ghostnpc.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
local light = ghostnpc.entity:AddLight()
light:SetIntensity(.6)
light:SetRadius(.5)
light:SetFalloff(.6)
light:Enable(true)
light:SetColour(180/255, 195/255, 225/255)
local brain = require "brains/leifbrain"
ghostnpc:SetBrain(brain)
ghostnpc:AddComponent("locomotor")
ghostnpc.components.locomotor.walkspeed = 5
ghostnpc.components.locomotor.runspeed = 5
ghostnpc:SetStateGraph("SGghost")
ghostnpc:AddTag("ghostnpcs")
ghostnpc:RemoveComponent("edible")
ghostnpc:RemoveComponent("inventoryitem")
ghostnpc:RemoveTag("meat")
ghostnpc:AddComponent("sanityaura")
ghostnpc.components.sanityaura.aura = -TUNING.SANITYAURA_SMALL
ghostnpc:AddComponent("health")
ghostnpc.components.health:SetMaxHealth(500)
ghostnpc:AddComponent("trader")
ghostnpc.components.trader:SetAcceptTest(function(ghostnpc, item)
if GetPlayer().components.inventory:Has("goldnugget", 30) then
if item.prefab == "goldnugget" then
return true
end
end
return false
end )
ghostnpc.components.trader.onaccept = function(ghostnpc, giver, item)
GetPlayer().components.inventory:ConsumeByName("goldnugget", 29)
local ghostheart = SpawnPrefab("deadlyfeast")
ghostheart.AnimState:SetBank("egg")
ghostheart.AnimState:SetBuild("tallbird_egg")
ghostheart.AnimState:PlayAnimation("cooked")
ghostheart.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
ghostheart:RemoveComponent("edible")
ghostheart:RemoveTag("meat")
ghostheart:AddComponent("equippable")
ghostheart.components.equippable:SetOnEquip( function(ghostheart, owner)
if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.AnimState:SetBank("ghost")
owner.AnimState:SetBuild("ghost_build")
owner:SetStateGraph("SGghost")
owner.AnimState:PlayAnimation("idle", true)
owner.Transform:SetScale(1.2,1.2,1.2)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 0, 0 )
owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
local light = owner.entity:AddLight()
light:SetIntensity(.6)
light:SetRadius(20)
light:SetFalloff(.6)
light:Enable(true)
light:SetColour(180/255, 195/255, 225/255)
owner.components.locomotor.walkspeed = 20
owner.components.locomotor.runspeed = 20
owner.components.health:DoDelta(owner.components.health.maxhealth)
owner.components.health:SetInvincible(true)
owner.components.hunger:DoDelta(owner.components.hunger.max)
owner.components.hunger:Pause()
owner.components.sanity:DoDelta(owner.components.sanity.max)
owner.components.sanity.ignore = true
owner.components.combat:SetDefaultDamage(1000)
owner:AddComponent("aura")
owner.components.aura.radius = 3
owner.components.aura.tickperiod = 0.5
owner.components.aura.ignoreallies = true
owner.components.aura.auratestfn = function(ghostnpc, target)
if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
return true
end
return false
end
owner.components.temperature:SetTemp(20)
owner.components.playercontroller:Enable(true)
end )
end
end )
ghostheart.components.equippable:SetOnUnequip( function(ghostheart, owner)
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
owner.AnimState:SetBank("wilson")
if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
owner:SetStateGraph("SGwilson")
owner.AnimState:PlayAnimation("idle")
owner.Transform:SetScale(1,1,1)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 1.3, .6 )
owner.AnimState:SetBloomEffectHandle("")
owner.Light:Enable(false)
owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
owner.components.health:SetInvincible(false)
owner.components.hunger:Resume()
owner.components.sanity.ignore = false
owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
owner.components.combat.hiteffectsymbol = "torso"
owner:RemoveComponent("aura")
owner.components.temperature:SetTemp(nil)
owner.components.playercontroller:Enable(true)
ghostheart:Remove()
end )
end )
ghostheart.components.equippable.equipslot = EQUIPSLOTS.HANDS
ghostheart:AddTag("ghostheart")
GetPlayer().components.inventory:GiveItem(ghostheart)
end
ghostnpc:AddComponent("combat")
ghostnpc.components.combat:SetDefaultDamage(3)
ghostnpc.components.combat:SetAttackPeriod(1)
ghostnpc.components.combat:SetRetargetFunction(2, function(ghostnpc)
if not ghostnpc.components.health:IsDead() then
return FindEntity(ghostnpc, 25, function(guy)
if guy:HasTag("monster") then return guy end
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
end )
end
end )
ghostnpc:ListenForEvent("attacked", function(ghostnpc, data)
ghostnpc.components.combat:SetTarget(data.attacker)
ghostnpc.components.combat:ShareTarget(data.attacker, 35, function(dude) return dude:HasTag("ghostnpcs") and not dude.components.health:IsDead() end, 5)
end )
ghostnpc:AddComponent("aura")
ghostnpc.components.aura.radius = 2
ghostnpc.components.aura.tickperiod = 1
ghostnpc.components.aura.ignoreallies = true
ghostnpc.components.aura.auratestfn = function(ghostnpc, target)
if target:HasTag("ghostnpcs") then return false end
if target.components.combat.target == ghostnpc or ghostnpc.components.combat.target == target then
return true
end
end
ghostnpc:ListenForEvent("death", function()
local gems = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem","thulecite","goldnugget"}
local gem = gems[math.random(#gems)]
SpawnPrefab(gem).Transform:SetPosition(ghostnpc.Transform:GetWorldPosition())
end )
ghostnpc:ListenForEvent( "daytime", function() ghostnpc:Remove() end , GetWorld())
end
end
inst:ListenForEvent( "dusktime", function() createghostnpc(inst) end , GetWorld())
2.用记事本打开游戏目录\data\scripts\prefabs\deadlyfeast.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local function onsave(inst, data)
if inst:HasTag("ghostnpcs") then
data.ghostnpcs = true
end
if inst:HasTag("ghostheart") then
data.ghostheart = true
end
end
local function onload(inst, data)
if data and data.ghostnpcs then
inst.entity:AddSoundEmitter()
inst.AnimState:SetBank("ghost")
inst.AnimState:SetBuild("ghost_build")
inst.AnimState:PlayAnimation("idle", true)
inst.Transform:SetFourFaced()
MakeGhostPhysics(inst, 1, .5)
local minimap = inst.entity:AddMiniMapEntity()
minimap:SetIcon("whitespider_den.png")
inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
local light = inst.entity:AddLight()
light:SetIntensity(.6)
light:SetRadius(.5)
light:SetFalloff(.6)
light:Enable(true)
light:SetColour(180/255, 195/255, 225/255)
local brain = require "brains/leifbrain"
inst:SetBrain(brain)
inst:AddComponent("locomotor")
inst.components.locomotor.walkspeed = 5
inst.components.locomotor.runspeed = 5
inst:SetStateGraph("SGghost")
inst:AddTag("ghostnpcs")
inst:RemoveComponent("edible")
inst:RemoveComponent("inventoryitem")
inst:RemoveTag("meat")
inst:AddComponent("sanityaura")
inst.components.sanityaura.aura = -TUNING.SANITYAURA_SMALL
inst:AddComponent("health")
inst.components.health:SetMaxHealth(500)
inst:AddComponent("trader")
inst.components.trader:SetAcceptTest(function(inst, item)
if GetPlayer().components.inventory:Has("goldnugget", 30) then
if item.prefab == "goldnugget" then
return true
end
end
return false
end )
inst.components.trader.onaccept = function(inst, giver, item)
GetPlayer().components.inventory:ConsumeByName("goldnugget", 29)
local ghostheart = SpawnPrefab("deadlyfeast")
ghostheart.AnimState:SetBank("egg")
ghostheart.AnimState:SetBuild("tallbird_egg")
ghostheart.AnimState:PlayAnimation("cooked")
ghostheart.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
ghostheart:RemoveComponent("edible")
ghostheart:RemoveTag("meat")
ghostheart:AddComponent("equippable")
ghostheart.components.equippable:SetOnEquip( function(ghostheart, owner)
if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.AnimState:SetBank("ghost")
owner.AnimState:SetBuild("ghost_build")
owner:SetStateGraph("SGghost")
owner.AnimState:PlayAnimation("idle", true)
owner.Transform:SetScale(1.2,1.2,1.2)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 0, 0 )
owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
local light = owner.entity:AddLight()
light:SetIntensity(.6)
light:SetRadius(20)
light:SetFalloff(.6)
light:Enable(true)
light:SetColour(180/255, 195/255, 225/255)
owner.components.locomotor.walkspeed = 20
owner.components.locomotor.runspeed = 20
owner.components.health:DoDelta(owner.components.health.maxhealth)
owner.components.health:SetInvincible(true)
owner.components.hunger:DoDelta(owner.components.hunger.max)
owner.components.hunger:Pause()
owner.components.sanity:DoDelta(owner.components.sanity.max)
owner.components.sanity.ignore = true
owner.components.combat:SetDefaultDamage(1000)
owner:AddComponent("aura")
owner.components.aura.radius = 3
owner.components.aura.tickperiod = 0.5
owner.components.aura.ignoreallies = true
owner.components.aura.auratestfn = function(inst, target)
if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
return true
end
return false
end
owner.components.temperature:SetTemp(20)
owner.components.playercontroller:Enable(true)
end )
end
end )
ghostheart.components.equippable:SetOnUnequip( function(ghostheart, owner)
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
owner.AnimState:SetBank("wilson")
if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
owner:SetStateGraph("SGwilson")
owner.AnimState:PlayAnimation("idle")
owner.Transform:SetScale(1,1,1)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 1.3, .6 )
owner.AnimState:SetBloomEffectHandle("")
owner.Light:Enable(false)
owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
owner.components.health:SetInvincible(false)
owner.components.hunger:Resume()
owner.components.sanity.ignore = false
owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
owner.components.combat.hiteffectsymbol = "torso"
owner:RemoveComponent("aura")
owner.components.temperature:SetTemp(nil)
owner.components.playercontroller:Enable(true)
ghostheart:Remove()
end )
end )
ghostheart.components.equippable.equipslot = EQUIPSLOTS.HANDS
ghostheart:AddTag("ghostheart")
GetPlayer().components.inventory:GiveItem(ghostheart)
end
inst:AddComponent("combat")
inst.components.combat:SetDefaultDamage(3)
inst.components.combat:SetAttackPeriod(1)
inst.components.combat:SetRetargetFunction(2, function(inst)
if not inst.components.health:IsDead() then
return FindEntity(inst, 25, function(guy)
if guy:HasTag("monster") then return guy end
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
end )
end
end )
inst:ListenForEvent("attacked", function(inst, data)
inst.components.combat:SetTarget(data.attacker)
inst.components.combat:ShareTarget(data.attacker, 35, function(dude) return dude:HasTag("ghostnpcs") and not dude.components.health:IsDead() end, 5)
end )
inst:AddComponent("aura")
inst.components.aura.radius = 2
inst.components.aura.tickperiod = 1
inst.components.aura.ignoreallies = true
inst.components.aura.auratestfn = function(inst, target)
if target:HasTag("ghostnpcs") then return false end
if target.components.combat.target == inst or inst.components.combat.target == target then
return true
end
end
inst:ListenForEvent("death", function()
local gems = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem","thulecite","goldnugget"}
local gem = gems[math.random(#gems)]
SpawnPrefab(gem).Transform:SetPosition(inst.Transform:GetWorldPosition())
end )
inst:ListenForEvent( "daytime", function() inst:Remove() end , GetWorld())
end
if data and data.ghostheart then
inst.AnimState:SetBank("egg")
inst.AnimState:SetBuild("tallbird_egg")
inst.AnimState:PlayAnimation("cooked")
inst.components.inventoryitem:ChangeImageName("tallbirdegg_cooked")
inst:RemoveComponent("edible")
inst:RemoveTag("meat")
inst:AddComponent("equippable")
inst.components.equippable:SetOnEquip( function(inst, owner)
if owner == GetPlayer() and not GetPlayer():HasTag("poisoning") and not GetPlayer():HasTag("fever") then
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.AnimState:SetBank("ghost")
owner.AnimState:SetBuild("ghost_build")
owner:SetStateGraph("SGghost")
owner.AnimState:PlayAnimation("idle", true)
owner.Transform:SetScale(1.2,1.2,1.2)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 0, 0 )
owner.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
local light = owner.entity:AddLight()
light:SetIntensity(.6)
light:SetRadius(20)
light:SetFalloff(.6)
light:Enable(true)
light:SetColour(180/255, 195/255, 225/255)
owner.components.locomotor.walkspeed = 20
owner.components.locomotor.runspeed = 20
owner.components.health:DoDelta(owner.components.health.maxhealth)
owner.components.health:SetInvincible(true)
owner.components.hunger:DoDelta(owner.components.hunger.max)
owner.components.hunger:Pause()
owner.components.sanity:DoDelta(owner.components.sanity.max)
owner.components.sanity.ignore = true
owner.components.combat:SetDefaultDamage(1000)
owner:AddComponent("aura")
owner.components.aura.radius = 3
owner.components.aura.tickperiod = 0.5
owner.components.aura.ignoreallies = true
owner.components.aura.auratestfn = function(ghostnpc, target)
if target.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == target then
return true
end
return false
end
owner.components.temperature:SetTemp(20)
owner.components.playercontroller:Enable(true)
end )
end
end )
inst.components.equippable:SetOnUnequip( function(inst, owner)
SpawnPrefab("collapse_big").Transform:SetPosition(owner.Transform:GetWorldPosition())
owner.components.locomotor:Stop()
owner.components.playercontroller:Enable(false)
owner:DoTaskInTime(0.3, function()
owner.AnimState:SetBank("wilson")
if GetPlayer().prefab == "wilson" then owner.AnimState:SetBuild("wilson") end
if GetPlayer().prefab == "wendy" then owner.AnimState:SetBuild("wendy") end
if GetPlayer().prefab == "wes" then owner.AnimState:SetBuild("wes") end
if GetPlayer().prefab == "wickerbottom" then owner.AnimState:SetBuild("wickerbottom") end
if GetPlayer().prefab == "willow" then owner.AnimState:SetBuild("willow") end
if GetPlayer().prefab == "wolfgang" then owner.AnimState:SetBuild("wolfgang") end
if GetPlayer().prefab == "wx78" then owner.AnimState:SetBuild("wx78") end
if GetPlayer().prefab == "woodie" then owner.AnimState:SetBuild("woodie") end
if GetPlayer().prefab == "waxwell" then owner.AnimState:SetBuild("waxwell") end
if GetPlayer().prefab == "wathgrithr" then owner.AnimState:SetBuild("wathgrithr") end
if GetPlayer().prefab == "webber" then owner.AnimState:SetBuild("webber") end
owner:SetStateGraph("SGwilson")
owner.AnimState:PlayAnimation("idle")
owner.Transform:SetScale(1,1,1)
local shadow = owner.entity:AddDynamicShadow()
shadow:SetSize( 1.3, .6 )
owner.AnimState:SetBloomEffectHandle("")
owner.Light:Enable(false)
owner.components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
owner.components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
owner.components.health:SetInvincible(false)
owner.components.hunger:Resume()
owner.components.sanity.ignore = false
owner.components.combat:SetDefaultDamage(TUNING.UNARMED_DAMAGE)
owner.components.combat.hiteffectsymbol = "torso"
owner:RemoveComponent("aura")
owner.components.temperature:SetTemp(nil)
owner.components.playercontroller:Enable(true)
inst:Remove()
end )
end )
inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
inst:AddTag("ghostheart")
end
end
inst.OnSave = onsave
inst.OnLoad = onload
即可在夜晚时,墓地有大量亡魂游荡,会主动攻击你,且靠近它们会降脑,消灭亡魂可获得宝石、铥矿石、黄金。亡魂在小地图上显示为白蜘蛛的图标。如果身上携带了噩梦燃料,亡魂就不会主动攻击你,给亡魂30个黄金(拿着黄金对亡魂点鼠标左键),可购买亡魂之心,装备它即可变身亡魂,生命、饥饿、脑全部锁死,按Ctrl + 鼠标左键攻击,且任何攻击你的敌人都会被自动烫死。卸载亡魂之心即可变回人,同时亡魂之心消失,想再变身就多买一些吧。如果修改了“小病小灾”,在主角感冒和食物中毒时,装备亡魂之心也不会变身
更多相关内容请关注:饥荒专区
责任编辑:Shy夏夏