代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二0三.宠物熊(用黄色护身符种宠物熊,是战场好帮手,左键点击可停在原地,喂大肉可补血)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/amulet.lua文件,在inst.AnimState:PlayAnimation("yellowamulet")的下一行插入以下内容:
5
6local function SetStandState(inst, state)
7 inst.StandState = string.lower(state)
8end
9local function OnDeploy (inst, pt)
10 local mybear = SpawnPrefab("yellowamulet")
11 mybear.Transform:SetPosition(pt.x, pt.y, pt.z)
12 mybear.AnimState:SetBank("bearger")
13 mybear.AnimState:SetBuild("bearger_build")
14 mybear.AnimState:PlayAnimation("idle_loop", true)
15 mybear.Transform:SetScale(0.5, 0.5, 0.5)
16 mybear.Transform:SetFourFaced()
17 local sound = mybear.entity:AddSoundEmitter()
18 local shadow = mybear.entity:AddDynamicShadow()
19 shadow:SetSize(3, 1.8)
20 MakeCharacterPhysics(mybear, 500, 1)
21 mybear:RemoveComponent("equippable")
22 mybear:RemoveComponent("inventoryitem")
23 mybear:RemoveComponent("fueled")
24 mybear:RemoveComponent("deployable")
25 SetStandState(mybear, "QUAD")
26 mybear.CanGroundPound = false
27 mybear.SetStandState = SetStandState
28 mybear.IsStandState = function(mybear, state)
29 return mybear.StandState == string.lower(state)
30 end
31 mybear.WorkEntities = function(mybear)
32 mybear.SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
33 GetPlayer().components.playercontroller:ShakeCamera(mybear, "FULL", 0.5, 0.05, 2, 40)
34 end
35 mybear:AddComponent("groundpounder")
36 mybear.components.groundpounder.destroyer = true
37 mybear.components.groundpounder.damageRings = 3
38 mybear.components.groundpounder.destructionRings = 4
39 mybear.components.groundpounder.numRings = 5
40 mybear:AddComponent("named")
41 mybear.components.named:SetName("My Bear")
42 mybear:AddComponent("inventory")
43 mybear:AddComponent("knownlocations")
44 mybear:AddComponent("timer")
45 mybear:AddComponent("eater")
46 mybear.components.eater.foodprefs = {"MEAT"}
47 mybear:AddComponent("follower")
48 mybear.components.follower:SetLeader(GetPlayer())
49 mybear:AddComponent("lootdropper")
50 mybear.components.lootdropper:SetLoot({"meat", "meat", "meat", "meat", "bearger_fur"})
51 mybear:AddComponent("health")
52 mybear.components.health:SetMaxHealth(10000)
53 mybear:AddComponent("combat")
54 mybear.components.combat:SetDefaultDamage(300)
55 mybear.components.combat:SetAttackPeriod(0.5)
56 mybear.components.combat.hiteffectsymbol = "bearger_body"
57 mybear.components.combat:SetAreaDamage(4, 1)
58 mybear.components.combat.playerdamagepercent = 0
59 mybear.components.combat:SetRange(2, 4)
60 mybear.components.combat:SetHurtSound("dontstarve_DLC001/creatures/bearger/hurt")
61 mybear.components.combat:SetRetargetFunction(1, function(mybear)
62 if not mybear.components.health:IsDead() then
63 return FindEntity(mybear, 25, function(guy)
64 if guy.components.combat then
65 return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
66 end
67 end )
68 end
69 end )
70 mybear.components.combat:SetKeepTargetFunction(function(mybear, target) return target and target:IsValid() end )
71 mybear:ListenForEvent("attacked", function(mybear, data)
72 if data.attacker ~= GetPlayer() then
73 mybear.components.combat:SetTarget(data.attacker)
74 else
75 mybear.components.combat:SetTarget(nil)
76 end
77 end )
78 mybear:AddComponent("locomotor")
79 mybear.components.locomotor.walkspeed = 15
80 mybear.components.locomotor.runspeed = 20
81 mybear.components.locomotor:SetShouldRun(true)
82 mybear:SetStateGraph("SGbearger")
83 local brain = require "brains/abigailbrain"
84 mybear:SetBrain(brain)
85 mybear:AddComponent("trader")
86 mybear.components.trader:SetAcceptTest(function(mybear, item)
87 if item.prefab == "meat" then
88 return mybear.components.health:GetPercent() < 1
89 end
90 return false
91 end )
92 mybear.components.trader.onaccept = function(mybear, giver, item)
93 if item.prefab == "meat" then
94 mybear.components.health:DoDelta(2000)
95 end
96 end
97 mybear.components.inspectable.getstatus = function(mybear)
98 if not mybear:HasTag("stophere") then
99 mybear:AddTag("stophere")
100 mybear.components.locomotor:Stop()
101 mybear:SetBrain(nil)
102 mybear.components.follower:SetLeader(nil)
103 mybear.AnimState:PlayAnimation("sleep_loop",true)
104 else
105 mybear:RemoveTag("stophere")
106 local brain = require "brains/abigailbrain"
107 mybear:SetBrain(brain)
108 mybear:RestartBrain()
109 mybear.components.follower:SetLeader(GetPlayer())
110 end
111 end
112 mybear:AddTag("companion")
113 mybear:AddTag("mybears")
114 inst:Remove()
115end
116 inst:AddComponent("deployable")
117 inst.components.deployable.ondeploy = OnDeploy
118local function onsave(inst, data)
119 if inst:HasTag("mybears") then
120 data.mybears = true
121 end
122 if inst:HasTag("stophere") then
123 data.stophere = true
124 end
125end
126local function onload(inst, data)
127 if data and data.mybears then
128 inst.AnimState:SetBank("bearger")
129 inst.AnimState:SetBuild("bearger_build")
130 inst.AnimState:PlayAnimation("idle_loop", true)
131 inst.Transform:SetScale(0.5, 0.5, 0.5)
132 inst.Transform:SetFourFaced()
133 local sound = inst.entity:AddSoundEmitter()
134 local shadow = inst.entity:AddDynamicShadow()
135 shadow:SetSize(3, 1.8)
136 MakeCharacterPhysics(inst, 500, 1)
137 inst:RemoveComponent("equippable")
138 inst:RemoveComponent("inventoryitem")
139 inst:RemoveComponent("fueled")
140 inst:RemoveComponent("deployable")
141 SetStandState(inst, "QUAD")
142 inst.CanGroundPound = false
143 inst.SetStandState = SetStandState
144 inst.IsStandState = function(inst, state)
145 return inst.StandState == string.lower(state)
146 end
147 inst.WorkEntities = function(inst)
148 inst.SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
149 GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.5, 0.05, 2, 40)
150 end
151 inst:AddComponent("groundpounder")
152 inst.components.groundpounder.destroyer = true
153 inst.components.groundpounder.damageRings = 3
154 inst.components.groundpounder.destructionRings = 4
155 inst.components.groundpounder.numRings = 5
156 inst:AddComponent("named")
157 inst.components.named:SetName("My Bear")
158 inst:AddComponent("inventory")
159 inst:AddComponent("knownlocations")
160 inst:AddComponent("timer")
161 inst:AddComponent("eater")
162 inst.components.eater.foodprefs = {"MEAT"}
163 inst:AddComponent("follower")
164 inst.components.follower:SetLeader(GetPlayer())
165 inst:AddComponent("lootdropper")
166 inst.components.lootdropper:SetLoot({"meat", "meat", "meat", "meat", "bearger_fur"})
167 inst:AddComponent("health")
168 inst.components.health:SetMaxHealth(10000)
169 inst:AddComponent("combat")
170 inst.components.combat:SetDefaultDamage(300)
171 inst.components.combat:SetAttackPeriod(0.5)
172 inst.components.combat.hiteffectsymbol = "bearger_body"
173 inst.components.combat:SetAreaDamage(4, 1)
174 inst.components.combat.playerdamagepercent = 0
175 inst.components.combat:SetRange(2, 4)
176 inst.components.combat:SetHurtSound("dontstarve_DLC001/creatures/bearger/hurt")
177 inst.components.combat:SetRetargetFunction(1, function(inst)
178 if not inst.components.health:IsDead() then
179 return FindEntity(inst, 25, function(guy)
180 if guy.components.combat then
181 return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
182 end
183 end )
184 end
185 end )
186 inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )
187 inst:ListenForEvent("attacked", function(inst, data)
188 if data.attacker ~= GetPlayer() then
189 inst.components.combat:SetTarget(data.attacker)
190 else
191 inst.components.combat:SetTarget(nil)
192 end
193 end )
194 inst:AddComponent("locomotor")
195 inst.components.locomotor.walkspeed = 15
196 inst.components.locomotor.runspeed = 20
197 inst.components.locomotor:SetShouldRun(true)
198 inst:SetStateGraph("SGbearger")
199 local brain = require "brains/abigailbrain"
200 inst:SetBrain(brain)
201 inst:AddComponent("trader")
202 inst.components.trader:SetAcceptTest(function(inst, item)
203 if item.prefab == "meat" then
204 return inst.components.health:GetPercent() < 1
205 end
206 return false
207 end )
208 inst.components.trader.onaccept = function(inst, giver, item)
209 if item.prefab == "meat" then
210 inst.components.health:DoDelta(2000)
211 end
212 end
213 inst.components.inspectable.getstatus = function(inst)
214 if not inst:HasTag("stophere") then
215 inst:AddTag("stophere")
216 inst.components.locomotor:Stop()
217 inst:SetBrain(nil)
218 inst.components.follower:SetLeader(nil)
219 inst.AnimState:PlayAnimation("sleep_loop",true)
220 else
221 inst:RemoveTag("stophere")
222 local brain = require "brains/abigailbrain"
223 inst:SetBrain(brain)
224 inst:RestartBrain()
225 inst.components.follower:SetLeader(GetPlayer())
226 end
227 end
228 inst:AddTag("companion")
229 inst:AddTag("mybears")
230 end
231 if data and data.stophere then
232 inst:AddTag("stophere")
233 inst.components.locomotor:Stop()
234 inst:SetBrain(nil)
235 inst.components.follower:SetLeader(nil)
236 inst.AnimState:PlayAnimation("sleep_loop",true)
237 end
238end
239 inst.OnSave = onsave
240 inst.OnLoad = onload
241
242 即可用黄色护身符种宠物熊,它身强力壮,是战斗时的好帮手。鼠标左键点熊,可让它停在原地,再次点击可继续跟随。给宠物熊大肉(拿着大肉对其点鼠标左键),可为它补血,最多5块可补满。不想要宠物熊了,杀死即可(按Ctrl + 鼠标左键攻击),它不会还手。宠物熊行走时会撞碎阻挡的建筑、植物,所以不要让它离你的基地太近。黄色护身符在远古选项(画着远古祭坛)下,用2个铥矿石、3个噩梦燃料、1个黄色宝石制造