YN202-天使蝴蝶(用雨衣种天使蝴蝶,为你照亮,电击来犯之敌,可收入物品栏)
代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。 原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html 二0二.天使蝴蝶(用雨衣种天使蝴蝶,为你照亮,电击来犯之敌,可收入物品栏) 用MT管理器打开游戏目录/assets/DLC0002/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个硬骨头制造