YN220-象之树(用紫色护身符种象之树,白天周围有巨象群活动,狩猎它们吧)
代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。 原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html 1 2二二0.象之树(用紫色护身符种象之树,白天周围有巨象群活动,狩猎它们吧) 3 4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/amulet.lua文件,在inst.AnimState:PlayAnimation("purpleamulet")的下一行插入以下内容: 5 6local function makebananatree(inst) 7 local pt = inst:GetPosition() 8 local bananatree = SpawnPrefab("purpleamulet") 9 bananatree.Transform:SetPosition(pt.x, pt.y, pt.z) 10 bananatree.AnimState:SetBank("cave_banana_tree") 11 bananatree.AnimState:SetBuild("cave_banana_tree") 12 bananatree.AnimState:PlayAnimation("idle_loop",true) 13 bananatree.Transform:SetScale(1.5, 1.5, 1.5) 14 bananatree:AddComponent("named") 15 bananatree.components.named:SetName("Banana Tree") 16 bananatree:RemoveComponent("equippable") 17 bananatree:RemoveComponent("inventoryitem") 18 bananatree:RemoveComponent("fueled") 19 bananatree:RemoveComponent("deployable") 20 bananatree:AddComponent("workable") 21 bananatree.components.workable:SetWorkAction(ACTIONS.CHOP) 22 bananatree.components.workable:SetWorkLeft(10) 23 bananatree.components.workable:SetOnFinishCallback(function() 24 SpawnPrefab("collapse_big").Transform:SetPosition(bananatree.Transform:GetWorldPosition()) 25 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood") 26 bananatree:Remove() 27 end ) 28 bananatree:ListenForEvent( "daytime", function() 29 local pos = Vector3(bananatree.Transform:GetWorldPosition()) 30 local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 5) 31 for k,v in pairs(ents) do 32 if v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then 33 if v.prefab == "cave_banana" then 34 v:Remove() 35 end 36 end 37 end 38 bananatree:DoTaskInTime(0.3, function(bananatree) 39 bananatree:StartThread(function() 40 for k = 1,math.random(4,8) do 41 local pt1 = bananatree:GetPosition() 42 local banana = SpawnPrefab("cave_banana") 43 banana.Transform:SetPosition(pt1.x+(math.random(5)-math.random(5)), 5, pt1.z+(math.random(5)-math.random(5))) 44 Sleep(0.3) 45 end 46 end ) 47 end ) 48 for k = 1,math.random(5,10) do 49 local elephant = SpawnPrefab("purpleamulet") 50 elephant.Transform:SetPosition(pt.x+(math.random(30)-math.random(30)), 0, pt.z+(math.random(30)-math.random(30))) 51 elephant.AnimState:SetBank("koalefant") 52 elephant.AnimState:SetBuild("koalefant_winter_build") 53 elephant.AnimState:PlayAnimation("idle_loop", true) 54 local sound = elephant.entity:AddSoundEmitter() 55 local shadow = elephant.entity:AddDynamicShadow() 56 shadow:SetSize( 4.5, 2 ) 57 elephant.Transform:SetFourFaced() 58 MakeCharacterPhysics(elephant, 500, 1.5) 59 elephant:AddComponent("named") 60 elephant.components.named:SetName("Elephant") 61 elephant.Transform:SetScale(1.5, 1.5, 1.5) 62 local minimap = elephant.entity:AddMiniMapEntity() 63 minimap:SetIcon( "cave_banana_tree.png" ) 64 elephant:RemoveComponent("equippable") 65 elephant:RemoveComponent("inventoryitem") 66 elephant:RemoveComponent("fueled") 67 elephant:RemoveComponent("deployable") 68 elephant:AddComponent("knownlocations") 69 elephant:AddComponent("health") 70 elephant.components.health:SetMaxHealth(1000) 71 elephant:AddComponent("combat") 72 elephant.components.combat.hiteffectsymbol = "beefalo_body" 73 elephant.components.combat:SetDefaultDamage(30) 74 elephant.components.combat:SetAttackPeriod(2) 75 elephant.components.combat:SetRetargetFunction(3, function(elephant) 76 if not elephant.components.health:IsDead() then 77 return FindEntity(elephant, 25, function(guy) 78 return guy:HasTag("monster") 79 end ) 80 end 81 end ) 82 elephant.components.combat:SetKeepTargetFunction(function(elephant, target) return target and target:IsValid() end ) 83 elephant:ListenForEvent("attacked", function(elephant, data) 84 elephant.components.combat:SetTarget(data.attacker) 85 elephant.components.combat:ShareTarget(data.attacker, 10, function(dude) return dude:HasTag("elephants") and not dude.components.health:IsDead() end, 1) 86 end ) 87 elephant:AddComponent("lootdropper") 88 elephant.components.lootdropper:SetLoot({"meat","meat","meat","meat","meat","meat","meat","meat","meat","meat","trunk_winter"}) 89 elephant:AddComponent("locomotor") 90 elephant.components.locomotor.walkspeed = 2 91 elephant.components.locomotor.runspeed = 4 92 elephant:SetStateGraph("SGkoalefant") 93 local brain = require "brains/frogbrain" 94 elephant:SetBrain(brain) 95 elephant:ListenForEvent( "nighttime", function() elephant:Remove() end , GetWorld()) 96 elephant:DoPeriodicTask(math.random(30, 60), function(elephant) 97 if not elephant.components.combat.target then 98 local sgnames = {"bellow","graze","alert","shake"} 99 local sgname = sgnames[math.random(#sgnames)] 100 elephant.sg:GoToState(sgname) 101 end 102 end ) 103 elephant:DoPeriodicTask(math.random(120, 240), function(inst) 104 SpawnPrefab("poop").Transform:SetPosition(elephant.Transform:GetWorldPosition()) 105 end ) 106 if math.random() < 0.5 then 107 elephant:AddTag("redelephants") 108 elephant.AnimState:SetBuild("koalefant_summer_build") 109 elephant.components.lootdropper:SetLoot({"meat","meat","meat","meat","meat","meat","meat","meat","meat","meat","trunk_summer"}) 110 end 111 elephant:AddTag("elephants") 112 end 113 end , GetWorld()) 114 bananatree:AddTag("bananatree") 115end 116local function OnDeploy (inst, pt) 117 makebananatree(inst) 118 inst:Remove() 119end 120 inst:AddComponent("deployable") 121 inst.components.deployable.ondeploy = OnDeploy 122local function onsave(inst, data) 123 if inst:HasTag("bananatree") then 124 data.bananatree = true 125 end 126 if inst:HasTag("elephants") then 127 data.elephants = true 128 end 129 if inst:HasTag("redelephants") then 130 data.redelephants = true 131 end 132end 133local function onload(inst, data) 134 if data and data.bananatree then 135 makebananatree(inst) 136 inst:Remove() 137 end 138 if data and data.elephants then 139 inst.AnimState:SetBank("koalefant") 140 inst.AnimState:SetBuild("koalefant_winter_build") 141 inst.AnimState:PlayAnimation("idle_loop", true) 142 local sound = inst.entity:AddSoundEmitter() 143 local shadow = inst.entity:AddDynamicShadow() 144 shadow:SetSize( 4.5, 2 ) 145 inst.Transform:SetFourFaced() 146 MakeCharacterPhysics(inst, 500, 1.5) 147 inst:AddComponent("named") 148 inst.components.named:SetName("Elephant") 149 inst.Transform:SetScale(1.5, 1.5, 1.5) 150 local minimap = inst.entity:AddMiniMapEntity() 151 minimap:SetIcon( "cave_banana_tree.png" ) 152 inst:RemoveComponent("equippable") 153 inst:RemoveComponent("inventoryitem") 154 inst:RemoveComponent("fueled") 155 inst:RemoveComponent("deployable") 156 inst:AddComponent("knownlocations") 157 inst:AddComponent("health") 158 inst.components.health:SetMaxHealth(1000) 159 inst:AddComponent("combat") 160 inst.components.combat.hiteffectsymbol = "beefalo_body" 161 inst.components.combat:SetDefaultDamage(30) 162 inst.components.combat:SetAttackPeriod(2) 163 inst.components.combat:SetRetargetFunction(3, function(inst) 164 if not inst.components.health:IsDead() then 165 return FindEntity(inst, 25, function(guy) 166 return guy:HasTag("monster") 167 end ) 168 end 169 end ) 170 inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end ) 171 inst:ListenForEvent("attacked", function(inst, data) 172 inst.components.combat:SetTarget(data.attacker) 173 inst.components.combat:ShareTarget(data.attacker, 10, function(dude) return dude:HasTag("elephants") and not dude.components.health:IsDead() end, 1) 174 end ) 175 inst:AddComponent("lootdropper") 176 inst.components.lootdropper:SetLoot({"meat","meat","meat","meat","meat","meat","meat","meat","meat","meat","trunk_winter"}) 177 inst:AddComponent("locomotor") 178 inst.components.locomotor.walkspeed = 2 179 inst.components.locomotor.runspeed = 4 180 inst:SetStateGraph("SGkoalefant") 181 local brain = require "brains/frogbrain" 182 inst:SetBrain(brain) 183 inst:ListenForEvent( "nighttime", function() inst:Remove() end , GetWorld()) 184 inst:DoPeriodicTask(math.random(30, 60), function(inst) 185 if not inst.components.combat.target then 186 local sgnames = {"bellow","graze","alert","shake"} 187 local sgname = sgnames[math.random(#sgnames)] 188 inst.sg:GoToState(sgname) 189 end 190 end ) 191 inst:DoPeriodicTask(math.random(120, 240), function(inst) 192 SpawnPrefab("poop").Transform:SetPosition(inst.Transform:GetWorldPosition()) 193 end ) 194 inst:AddTag("elephants") 195 end 196 if data and data.redelephants then 197 inst:AddTag("redelephants") 198 inst.AnimState:SetBuild("koalefant_summer_build") 199 inst.components.lootdropper:SetLoot({"meat","meat","meat","meat","meat","meat","meat","meat","meat","meat","trunk_summer"}) 200 end 201end 202 inst.OnSave = onsave 203 inst.OnLoad = onload 204 205 即可用紫色护身符种象之树,白天会掉落香蕉,并有巨象群在周围活动,夜晚离开。巨象不会主动攻击你,想狩猎它们时,尽量选择落单的巨象,否则其他巨象会一起反击。巨象在小地图上显示为香蕉图标,它们是天然的肉库,杀死一只可获得10块大肉及象鼻,并且会不断产便便,缺少肥料的话,可以在象之树附近拾取。不想要象之树了,砍掉即可,象群会在黑夜离去。紫色护身符在魔法选项(画着红骷髅)下,用6个黄金、4个噩梦燃料、2个紫宝石制造