代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1 2二五四.噩梦草(用鸟粪种噩梦草,可采噩梦燃料,有一定概率出现地下巨人) 3 4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/guano.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容: 5 6local items = { SWORD = "swap_ham_bat" } 7local function EquipItem(inst, item) 8 if item then 9 inst.AnimState:OverrideSymbol("swap_object", item, item) 10 inst.AnimState:Show("ARM_carry") 11 inst.AnimState:Hide("ARM_normal") 12 end 13end 14 inst.items = items 15 inst.equipfn = EquipItem 16 EquipItem(inst) 17local function OnDeploy (inst, pt) 18 local darkgrass = SpawnPrefab("guano") 19 darkgrass.Transform:SetPosition(pt.x, pt.y, pt.z) 20 darkgrass.AnimState:SetBank("marsh_plant") 21 darkgrass.AnimState:SetBuild("marsh_plant") 22 darkgrass.AnimState:PlayAnimation("idle") 23 darkgrass.Transform:SetScale(1.8, 1.8, 1.8) 24 darkgrass.AnimState:SetMultColour(255/255,255/255,0/255,1) 25 darkgrass:RemoveComponent("stackable") 26 darkgrass:RemoveComponent("inventoryitem") 27 darkgrass:RemoveComponent("fertilizer") 28 darkgrass:RemoveComponent("smotherer") 29 darkgrass:RemoveComponent("fuel") 30 darkgrass:RemoveComponent("burnable") 31 darkgrass:RemoveComponent("propagator") 32 darkgrass:RemoveComponent("deployable") 33 MakeMediumBurnable(darkgrass) 34 MakeSmallPropagator(darkgrass) 35 if darkgrass.flies then darkgrass.flies:Remove() darkgrass.flies = nil end 36 darkgrass:AddComponent("workable") 37 darkgrass.components.workable:SetWorkAction(ACTIONS.DIG) 38 darkgrass.components.workable:SetWorkLeft(1) 39 darkgrass.components.workable:SetOnFinishCallback(function(darkgrass) 40 SpawnPrefab("nightmarefuel").Transform:SetPosition(darkgrass.Transform:GetWorldPosition()) 41 darkgrass:Remove() 42 end ) 43 darkgrass:AddComponent("pickable") 44 darkgrass.components.pickable:SetUp("nightmarefuel", 480) 45 darkgrass.components.pickable:SetOnRegenFn(function(darkgrass) darkgrass.AnimState:SetMultColour(255/255,255/255,0/255,1) end ) 46 darkgrass.components.pickable:SetOnPickedFn(function(darkgrass) 47 darkgrass.AnimState:SetMultColour(255/255,255/255,255/255,1) 48 if math.random()<0.05 then 49 GetPlayer().components.playercontroller:ShakeCamera(darkgrass, "FULL", 1.5, 0.03, 2, 30) 50 GetPlayer().SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo") 51 SpawnPrefab("collapse_big").Transform:SetPosition(darkgrass.Transform:GetWorldPosition()) 52 local giant = SpawnPrefab("guano") 53 giant.Transform:SetPosition(darkgrass.Transform:GetWorldPosition()) 54 giant.entity:AddSoundEmitter() 55 giant.AnimState:SetBank("wilson") 56 giant.AnimState:SetBuild("wolfgang") 57 giant.AnimState:PlayAnimation("idle") 58 giant.AnimState:OverrideSymbol("swap_object", "swap_ham_bat", "swap_ham_bat") 59 giant.AnimState:OverrideSymbol("swap_body", "armor_slurper", "swap_body") 60 giant.AnimState:Show("ARM_carry") 61 giant.AnimState:Hide("ARM_normal") 62 giant.Transform:SetFourFaced() 63 giant.Transform:SetScale(3.5,3.5,3.5) 64 local sound = giant.entity:AddSoundEmitter() 65 local shadow = giant.entity:AddDynamicShadow() 66 shadow:SetSize( 6, 3.5 ) 67 MakeCharacterPhysics(giant, 200, 1) 68 local minimap = giant.entity:AddMiniMapEntity() 69 minimap:SetIcon("wolfgang.png") 70 local brain = require "brains/leifbrain" 71 giant:SetBrain(brain) 72 giant:AddComponent("locomotor") 73 giant.components.locomotor.walkspeed = 1 74 giant.components.locomotor.runspeed = 2 75 giant:SetStateGraph("SGshadowwaxwell") 76 giant:RemoveComponent("stackable") 77 giant:RemoveComponent("inventoryitem") 78 giant:RemoveComponent("fertilizer") 79 giant:RemoveComponent("smotherer") 80 giant:RemoveComponent("fuel") 81 giant:RemoveComponent("burnable") 82 giant:RemoveComponent("propagator") 83 giant:RemoveComponent("deployable") 84 if giant.flies then giant.flies:Remove() giant.flies = nil end 85 giant:AddComponent("follower") 86 giant:AddComponent("inventory") 87 giant:AddComponent("combat") 88 giant.components.combat.hiteffectsymbol = "torso" 89 giant.components.combat:SetDefaultDamage(70) 90 giant.components.combat:SetAttackPeriod(3) 91 giant.components.combat.onhitotherfn = function() 92 giant.SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo") 93 GetPlayer().components.playercontroller:ShakeCamera(giant, "FULL", 0.5, 0.05, 2, 40) 94 end 95 giant.components.combat:SetAreaDamage(5, 0.8) 96 giant.components.combat:SetRetargetFunction(3, function(giant) 97 if not giant.components.health:IsDead() then 98 return FindEntity(giant, 20, function(guy) 99 return giant.components.combat:CanTarget(guy) and not guy:HasTag("giant") 100 end ) 101 end 102 end ) 103 giant:ListenForEvent("attacked", function(giant, data) 104 giant.components.combat:SetTarget(data.attacker) 105 end ) 106 giant.Physics:SetCollisionCallback(function(giant, other) 107 if other and other.components.workable and other.components.workable.workleft > 0 then 108 other.components.workable:Destroy(giant) 109 end 110 end ) 111 giant:AddComponent("health") 112 giant.components.health:SetMaxHealth(8000) 113 giant.components.health.nofadeout = true 114 giant:AddComponent("sanityaura") 115 giant.components.sanityaura.aura = -TUNING.SANITYAURA_LARGE 116 giant:ListenForEvent("death", function() 117 local pt1 = giant:GetPosition() 118 for k = 1,math.random(20,35) do 119 local gold = SpawnPrefab("goldnugget") 120 gold.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3))) 121 end 122 local rewards = {"walrus_tusk","trunk_summer","trunk_winter","deerclops_eyeball","minotaurhorn"} 123 local reward = rewards[math.random(#rewards)] 124 SpawnPrefab(reward).Transform:SetPosition(pt1.x, 0, pt1.z) 125 end ) 126 giant:DoTaskInTime(480, function(giant) 127 giant:Remove() 128 end ) 129 giant:AddTag("monster") 130 giant:AddTag("giant") 131 end 132 end ) 133 darkgrass:AddTag("darkgrass") 134 inst.components.stackable:Get():Remove() 135end 136 inst:AddComponent("deployable") 137 inst.components.deployable.ondeploy = OnDeploy 138local function onsave(inst, data) 139 if inst:HasTag("darkgrass") then 140 data.darkgrass = true 141 end 142 if inst:HasTag("giant") then 143 data.giant = true 144 end 145end 146local function onload(inst, data) 147 if data and data.darkgrass then 148 inst.AnimState:SetBank("marsh_plant") 149 inst.AnimState:SetBuild("marsh_plant") 150 inst.AnimState:PlayAnimation("idle") 151 inst.Transform:SetScale(1.8, 1.8, 1.8) 152 inst.AnimState:SetMultColour(255/255,255/255,0/255,1) 153 inst:RemoveComponent("stackable") 154 inst:RemoveComponent("inventoryitem") 155 inst:RemoveComponent("fertilizer") 156 inst:RemoveComponent("smotherer") 157 inst:RemoveComponent("fuel") 158 inst:RemoveComponent("burnable") 159 inst:RemoveComponent("propagator") 160 inst:RemoveComponent("deployable") 161 MakeMediumBurnable(inst) 162 MakeSmallPropagator(inst) 163 if inst.flies then inst.flies:Remove() inst.flies = nil end 164 inst:AddComponent("workable") 165 inst.components.workable:SetWorkAction(ACTIONS.DIG) 166 inst.components.workable:SetWorkLeft(1) 167 inst.components.workable:SetOnFinishCallback(function(inst) 168 SpawnPrefab("nightmarefuel").Transform:SetPosition(inst.Transform:GetWorldPosition()) 169 inst:Remove() 170 end ) 171 inst:AddComponent("pickable") 172 inst.components.pickable:SetUp("nightmarefuel", 480) 173 inst.components.pickable:SetOnRegenFn(function(inst) inst.AnimState:SetMultColour(255/255,255/255,0/255,1) end ) 174 inst.components.pickable:SetOnPickedFn(function(inst) 175 inst.AnimState:SetMultColour(255/255,255/255,255/255,1) 176 if math.random()<0.05 then 177 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 1.5, 0.03, 2, 30) 178 GetPlayer().SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo") 179 SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition()) 180 local giant = SpawnPrefab("guano") 181 giant.Transform:SetPosition(inst.Transform:GetWorldPosition()) 182 giant.entity:AddSoundEmitter() 183 giant.AnimState:SetBank("wilson") 184 giant.AnimState:SetBuild("wolfgang") 185 giant.AnimState:PlayAnimation("idle") 186 giant.AnimState:OverrideSymbol("swap_object", "swap_ham_bat", "swap_ham_bat") 187 giant.AnimState:OverrideSymbol("swap_body", "armor_slurper", "swap_body") 188 giant.AnimState:Show("ARM_carry") 189 giant.AnimState:Hide("ARM_normal") 190 giant.Transform:SetFourFaced() 191 giant.Transform:SetScale(3.5,3.5,3.5) 192 local sound = giant.entity:AddSoundEmitter() 193 local shadow = giant.entity:AddDynamicShadow() 194 shadow:SetSize( 6, 3.5 ) 195 MakeCharacterPhysics(giant, 200, 1) 196 local minimap = giant.entity:AddMiniMapEntity() 197 minimap:SetIcon("wolfgang.png") 198 local brain = require "brains/leifbrain" 199 giant:SetBrain(brain) 200 giant:AddComponent("locomotor") 201 giant.components.locomotor.walkspeed = 1 202 giant.components.locomotor.runspeed = 2 203 giant:SetStateGraph("SGshadowwaxwell") 204 giant:RemoveComponent("stackable") 205 giant:RemoveComponent("inventoryitem") 206 giant:RemoveComponent("fertilizer") 207 giant:RemoveComponent("smotherer") 208 giant:RemoveComponent("fuel") 209 giant:RemoveComponent("burnable") 210 giant:RemoveComponent("propagator") 211 giant:RemoveComponent("deployable") 212 if giant.flies then giant.flies:Remove() giant.flies = nil end 213 giant:AddComponent("follower") 214 giant:AddComponent("inventory") 215 giant:AddComponent("combat") 216 giant.components.combat.hiteffectsymbol = "torso" 217 giant.components.combat:SetDefaultDamage(70) 218 giant.components.combat:SetAttackPeriod(3) 219 giant.components.combat.onhitotherfn = function() 220 giant.SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo") 221 GetPlayer().components.playercontroller:ShakeCamera(giant, "FULL", 0.5, 0.05, 2, 40) 222 end 223 giant.components.combat:SetAreaDamage(5, 0.8) 224 giant.components.combat:SetRetargetFunction(3, function(giant) 225 if not giant.components.health:IsDead() then 226 return FindEntity(giant, 20, function(guy) 227 return giant.components.combat:CanTarget(guy) and not guy:HasTag("giant") 228 end ) 229 end 230 end ) 231 giant:ListenForEvent("attacked", function(giant, data) 232 giant.components.combat:SetTarget(data.attacker) 233 end ) 234 giant.Physics:SetCollisionCallback(function(giant, other) 235 if other and other.components.workable and other.components.workable.workleft > 0 then 236 other.components.workable:Destroy(giant) 237 end 238 end ) 239 giant:AddComponent("health") 240 giant.components.health:SetMaxHealth(8000) 241 giant.components.health.nofadeout = true 242 giant:AddComponent("sanityaura") 243 giant.components.sanityaura.aura = -TUNING.SANITYAURA_LARGE 244 giant:ListenForEvent("death", function() 245 local pt1 = giant:GetPosition() 246 for k = 1,math.random(20,35) do 247 local gold = SpawnPrefab("goldnugget") 248 gold.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3))) 249 end 250 local rewards = {"walrus_tusk","trunk_summer","trunk_winter","deerclops_eyeball","minotaurhorn"} 251 local reward = rewards[math.random(#rewards)] 252 SpawnPrefab(reward).Transform:SetPosition(pt1.x, 0, pt1.z) 253 end ) 254 giant:DoTaskInTime(480, function(giant) 255 giant:Remove() 256 end ) 257 giant:AddTag("monster") 258 giant:AddTag("giant") 259 end 260 end ) 261 inst:AddTag("darkgrass") 262 end 263 if data and data.giant then 264 inst.entity:AddSoundEmitter() 265 inst.AnimState:SetBank("wilson") 266 inst.AnimState:SetBuild("wolfgang") 267 inst.AnimState:PlayAnimation("idle") 268 inst.AnimState:OverrideSymbol("swap_object", "swap_ham_bat", "swap_ham_bat") 269 inst.AnimState:OverrideSymbol("swap_body", "armor_slurper", "swap_body") 270 inst.AnimState:Show("ARM_carry") 271 inst.AnimState:Hide("ARM_normal") 272 inst.Transform:SetFourFaced() 273 inst.Transform:SetScale(3.5,3.5,3.5) 274 local sound = inst.entity:AddSoundEmitter() 275 local shadow = inst.entity:AddDynamicShadow() 276 shadow:SetSize( 6, 3.5 ) 277 MakeCharacterPhysics(inst, 200, 1) 278 local minimap = inst.entity:AddMiniMapEntity() 279 minimap:SetIcon("wolfgang.png") 280 local brain = require "brains/leifbrain" 281 inst:SetBrain(brain) 282 inst:AddComponent("locomotor") 283 inst.components.locomotor.walkspeed = 1 284 inst.components.locomotor.runspeed = 2 285 inst:SetStateGraph("SGshadowwaxwell") 286 inst:RemoveComponent("stackable") 287 inst:RemoveComponent("inventoryitem") 288 inst:RemoveComponent("fertilizer") 289 inst:RemoveComponent("smotherer") 290 inst:RemoveComponent("fuel") 291 inst:RemoveComponent("burnable") 292 inst:RemoveComponent("propagator") 293 inst:RemoveComponent("deployable") 294 if inst.flies then inst.flies:Remove() inst.flies = nil end 295 inst:AddComponent("follower") 296 inst:AddComponent("inventory") 297 inst:AddComponent("combat") 298 inst.components.combat.hiteffectsymbol = "torso" 299 inst.components.combat:SetDefaultDamage(70) 300 inst.components.combat:SetAttackPeriod(3) 301 inst.components.combat.onhitotherfn = function() 302 inst.SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo") 303 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.5, 0.05, 2, 40) 304 end 305 inst.components.combat:SetAreaDamage(5, 0.8) 306 inst.components.combat:SetRetargetFunction(3, function(inst) 307 if not inst.components.health:IsDead() then 308 return FindEntity(inst, 20, function(guy) 309 return inst.components.combat:CanTarget(guy) and not guy:HasTag("giant") 310 end ) 311 end 312 end ) 313 inst:ListenForEvent("attacked", function(inst, data) 314 inst.components.combat:SetTarget(data.attacker) 315 end ) 316 inst.Physics:SetCollisionCallback(function(inst, other) 317 if other and other.components.workable and other.components.workable.workleft > 0 then 318 other.components.workable:Destroy(inst) 319 end 320 end ) 321 inst:AddComponent("health") 322 inst.components.health:SetMaxHealth(8000) 323 inst.components.health.nofadeout = true 324 inst:AddComponent("sanityaura") 325 inst.components.sanityaura.aura = -TUNING.SANITYAURA_LARGE 326 inst:ListenForEvent("death", function() 327 local pt1 = inst:GetPosition() 328 for k = 1,math.random(20,35) do 329 local gold = SpawnPrefab("goldnugget") 330 gold.Transform:SetPosition(pt1.x+(math.random(3)-math.random(3)), 0, pt1.z+(math.random(3)-math.random(3))) 331 end 332 local rewards = {"walrus_tusk","trunk_summer","trunk_winter","deerclops_eyeball","minotaurhorn"} 333 local reward = rewards[math.random(#rewards)] 334 SpawnPrefab(reward).Transform:SetPosition(pt1.x, 0, pt1.z) 335 end ) 336 inst:DoTaskInTime(480, function(inst) 337 inst:Remove() 338 end ) 339 inst:AddTag("monster") 340 inst:AddTag("giant") 341 end 342end 343 inst.OnSave = onsave 344 inst.OnLoad = onload 345 346 即可用鸟粪(白色便便)种噩梦草(请远离基地种植),可采摘噩梦燃料,每天都能采一次。采摘时有一定概率出现地下巨人,将攻击你,消灭巨人可获得黄金、巨鹿眼球、远古守护者角、海象牙等宝物。巨人的血量及攻击力都很强,如果打不过,就先逃跑避避风头,一天后巨人将回到地下。巨人在小地图上显示为大力士的图标,绕着点走吧