第202页:天使蝴蝶
展开二零二.天使蝴蝶(用雨衣种天使蝴蝶,为你照亮,电击来犯之敌,可收入物品栏)
用记事本打开游戏目录\data\DLC0001\scripts\prefabs\raincoat.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
local function OnDeploy (inst, pt)
local scalewing = SpawnPrefab("raincoat")
scalewing.Transform:SetPosition(pt.x, pt.y, pt.z)
scalewing.AnimState:SetBank("butterfly")
scalewing.AnimState:SetBuild("butterfly_basic")
scalewing.AnimState:PlayAnimation("idle")
scalewing.AnimState:SetRayTestOnBB(true);
scalewing.Transform:SetTwoFaced()
scalewing.Transform:SetScale(1.5, 1.5, 1.5)
scalewing.AnimState:SetMultColour(255/255,0/255,115/255,0.8)
scalewing.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
scalewing.entity:AddSoundEmitter()
local shadow = scalewing.entity:AddDynamicShadow()
shadow:SetSize(.8, .5)
RemovePhysicsColliders(scalewing)
scalewing.entity:AddLight()
scalewing.Light:SetFalloff(1)
scalewing.Light:SetIntensity(.8)
scalewing.Light:SetRadius(12)
scalewing.Light:SetColour(180/255, 195/255, 50/255)
scalewing.Light:Enable(true)
scalewing:RemoveComponent("inventoryitem")
scalewing:RemoveComponent("equippable")
scalewing:RemoveComponent("waterproofer")
scalewing:RemoveComponent("fueled")
scalewing:RemoveComponent("insulator")
scalewing:RemoveComponent("deployable")
scalewing:AddComponent("inventoryitem")
scalewing.components.inventoryitem:ChangeImageName("butterfly")
scalewing:AddComponent("named")
scalewing.components.named:SetName("Butterfly")
scalewing:AddComponent("follower")
scalewing.components.follower:SetLeader(GetPlayer())
scalewing:AddComponent("locomotor")
scalewing.components.locomotor.walkspeed = 8
scalewing:SetStateGraph("SGbutterfly")
local brain = require "brains/abigailbrain"
scalewing:SetBrain(brain)
scalewing:AddComponent("health")
scalewing.components.health:SetMaxHealth(10)
scalewing.components.health:SetInvincible(true)
scalewing:AddComponent("combat")
scalewing.components.combat:SetDefaultDamage(0)
scalewing.components.combat:SetRange(2)
scalewing.components.combat:SetAttackPeriod(0.5)
scalewing.components.combat:SetRetargetFunction(1, function(scalewing)
if not scalewing.components.health:IsDead() then
return FindEntity(GetPlayer(), 20, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == scalewing or scalewing.components.combat.target == guy or guy:HasTag("monster")
end
end)
end
end )
scalewing.components.combat:SetKeepTargetFunction(function(scalewing, target) return target and target:IsValid() end )
scalewing:AddTag("duty")
scalewing.task = scalewing:DoPeriodicTask(0.5, function(scalewing)
local target = FindEntity(scalewing, 3, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == scalewing or scalewing.components.combat.target == guy or guy:HasTag("monster")
end
end )
if target then
if target.components.combat then target.components.combat:SetTarget(scalewing) end
if target.components.locomotor then target.components.locomotor:Stop() end
SpawnPrefab("lightning_rod_fx").Transform:SetPosition(target.Transform:GetWorldPosition())
scalewing.SoundEmitter:PlaySound("dontstarve/common/lightningrod")
target.components.health:DoDelta(-100)
end
end )
scalewing.components.inventoryitem:SetOnDroppedFn(function(scalewing)
scalewing:AddTag("duty")
scalewing.Light:Enable(true)
scalewing.task = scalewing:DoPeriodicTask(0.5, function(scalewing)
local target = FindEntity(scalewing, 3, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == scalewing or scalewing.components.combat.target == guy or guy:HasTag("monster")
end
end )
if target then
if target.components.combat then target.components.combat:SetTarget(scalewing) end
if target.components.locomotor then target.components.locomotor:Stop() end
SpawnPrefab("lightning_rod_fx").Transform:SetPosition(target.Transform:GetWorldPosition())
scalewing.SoundEmitter:PlaySound("dontstarve/common/lightningrod")
target.components.health:DoDelta(-100)
end
end )
end )
scalewing.components.inventoryitem:SetOnPickupFn(function(scalewing)
scalewing:RemoveTag("duty")
scalewing.Light:Enable(false)
if scalewing.task then scalewing.task:Cancel() scalewing.task = nil end
end )
scalewing.components.inventoryitem:SetOnPutInInventoryFn(function(scalewing)
scalewing:RemoveTag("duty")
scalewing.Light:Enable(false)
if scalewing.task then scalewing.task:Cancel() scalewing.task = nil end
end )
scalewing:AddTag("scalewings")
inst:Remove()
end
inst:AddComponent("deployable")
inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
if inst:HasTag("scalewings") then
data.scalewings = true
end
if inst:HasTag("duty") then
data.duty = true
end
end
local function onload(inst, data)
if data and data.scalewings then
inst.AnimState:SetBank("butterfly")
inst.AnimState:SetBuild("butterfly_basic")
inst.AnimState:PlayAnimation("idle")
inst.AnimState:SetRayTestOnBB(true);
inst.Transform:SetTwoFaced()
inst.Transform:SetScale(1.5, 1.5, 1.5)
inst.AnimState:SetMultColour(255/255,0/255,115/255,0.8)
inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
inst.entity:AddSoundEmitter()
local shadow = inst.entity:AddDynamicShadow()
shadow:SetSize(.8, .5)
RemovePhysicsColliders(inst)
inst.entity:AddLight()
inst.Light:SetFalloff(1)
inst.Light:SetIntensity(.8)
inst.Light:SetRadius(12)
inst.Light:SetColour(180/255, 195/255, 50/255)
inst.Light:Enable(true)
inst:RemoveComponent("inventoryitem")
inst:RemoveComponent("equippable")
inst:RemoveComponent("waterproofer")
inst:RemoveComponent("fueled")
inst:RemoveComponent("insulator")
inst:RemoveComponent("deployable")
inst:AddComponent("inventoryitem")
inst.components.inventoryitem:ChangeImageName("butterfly")
inst:AddComponent("named")
inst.components.named:SetName("Butterfly")
inst:AddComponent("follower")
inst.components.follower:SetLeader(GetPlayer())
inst:AddComponent("locomotor")
inst.components.locomotor.walkspeed = 8
inst:SetStateGraph("SGbutterfly")
local brain = require "brains/abigailbrain"
inst:SetBrain(brain)
inst:AddComponent("health")
inst.components.health:SetMaxHealth(10)
inst.components.health:SetInvincible(true)
inst:AddComponent("combat")
inst.components.combat:SetDefaultDamage(0)
inst.components.combat:SetRange(2)
inst.components.combat:SetAttackPeriod(0.5)
inst.components.combat:SetRetargetFunction(1, function(inst)
if not inst.components.health:IsDead() then
return FindEntity(GetPlayer(), 20, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == inst or inst.components.combat.target == guy or guy:HasTag("monster")
end
end)
end
end )
inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )
inst.components.inventoryitem:SetOnDroppedFn(function(inst)
inst:AddTag("duty")
inst.Light:Enable(true)
inst.task = inst:DoPeriodicTask(0.5, function(inst)
local target = FindEntity(inst, 3, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == inst or inst.components.combat.target == guy or guy:HasTag("monster")
end
end )
if target then
if target.components.combat then target.components.combat:SetTarget(inst) end
if target.components.locomotor then target.components.locomotor:Stop() end
SpawnPrefab("lightning_rod_fx").Transform:SetPosition(target.Transform:GetWorldPosition())
inst.SoundEmitter:PlaySound("dontstarve/common/lightningrod")
target.components.health:DoDelta(-100)
end
end )
end )
inst.components.inventoryitem:SetOnPickupFn(function(inst)
inst:RemoveTag("duty")
inst.Light:Enable(false)
if inst.task then inst.task:Cancel() inst.task = nil end
end )
inst.components.inventoryitem:SetOnPutInInventoryFn(function(inst)
inst:RemoveTag("duty")
inst.Light:Enable(false)
if inst.task then inst.task:Cancel() inst.task = nil end
end )
inst:AddTag("scalewings")
end
if data and data.duty then
inst:AddTag("duty")
inst.task = inst:DoPeriodicTask(0.5, function(inst)
local target = FindEntity(inst, 3, function(guy)
if guy.components.health and not guy.components.health:IsDead() then
return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy.components.combat.target == inst or inst.components.combat.target == guy or guy:HasTag("monster")
end
end )
if target then
if target.components.combat then target.components.combat:SetTarget(inst) end
if target.components.locomotor then target.components.locomotor:Stop() end
SpawnPrefab("lightning_rod_fx").Transform:SetPosition(target.Transform:GetWorldPosition())
inst.SoundEmitter:PlaySound("dontstarve/common/lightningrod")
target.components.health:DoDelta(-100)
end
end )
end
end
inst.OnSave = onsave
inst.OnLoad = onload
即可用雨衣种天使蝴蝶,会跟随你,为你照亮。任何企图攻击你的敌人,都会遭到天使蝴蝶的电击,杀伤其生命值,并阻止其靠近你。鼠标左键点击天使蝴蝶,可收入物品栏,显示为蝴蝶图标。不想要天使蝴蝶了,在物品栏中对其按鼠标右键即可。雨衣在穿戴选项(画着礼帽)下,用2个触手皮、2个绳子、2个硬骨头制造
更多相关内容请关注:饥荒专区
责任编辑:Shy夏夏