代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。

原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html


  1
  2.宠物熊(用黄色护身符种宠物熊,是战场好帮手,左键点击可停在原地,喂大肉可补血)
  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个黄色宝石制造