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

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


  1
  2二二五.荒野之狼(吃蜗牛龟粘液变成狼,打败别的狼成为领袖)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/slurtleslime.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function item_oneaten(inst, eater)
  7	if eater:HasTag("player") then
  8		local pos = GetPlayer():GetPosition()
  9		GetSeasonManager():DoLightningStrike(pos)
 10		eater.components.locomotor:Stop()
 11		eater.components.playercontroller:Enable(false)
 12		eater:DoTaskInTime(1, function() 
 13			eater.AnimState:SetBank("hound")
 14			eater.AnimState:SetBuild("hound_red")
 15			eater.AnimState:PlayAnimation("idle")
 16			eater:SetStateGraph("SGhound")
 17			eater:RemoveTag("scarytoprey")
 18			eater:AddTag("monster")
 19			local light = eater.entity:AddLight()
 20			light:SetFalloff(1)
 21			light:SetIntensity(.8)
 22			light:SetRadius(20)
 23			light:Enable(true)
 24			light:SetColour(0/255, 255/255, 0/255)
 25			eater:ListenForEvent("attacked", function(eater)
 26				local pt = eater:GetPosition()
 27				eater.Transform:SetPosition(pt.x+(math.random(5)-math.random(5)), 0, pt.z+(math.random(5)-math.random(5)))
 28			end )
 29			eater.components.locomotor.runspeed = 25
 30			eater.components.sanity:DoDelta(eater.components.sanity.max)
 31			eater.components.sanity.ignore = true
 32			eater.components.health:StartRegen(100, 10)
 33			eater.components.combat:SetDefaultDamage(500)
 34			eater.components.combat:SetAttackPeriod(0.1)
 35			eater.components.eater:SetCarnivore()
 36			eater.components.temperature:SetTemp(20)
 37			eater.components.playercontroller:Enable(true)
 38			GetPlayer().HUD.controls.crafttabs:Hide()
 39			GetPlayer().HUD.controls.inv:Hide()
 40			GetPlayer().HUD.controls.mapcontrols.minimapBtn:Hide()
 41			local head = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.HEAD)
 42			GetPlayer().components.inventory:DropItem(head)
 43			local hands = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.HANDS)
 44			GetPlayer().components.inventory:DropItem(hands)
 45			local body = GetPlayer().components.inventory:GetEquippedItem(EQUIPSLOTS.BODY)
 46			GetPlayer().components.inventory:DropItem(body)
 47			eater.components.playeractionpicker.leftclickoverride = function(eater, target_ent, pos)
 48				if eater.components.combat:CanTarget(target_ent) then
 49				   return eater.components.playeractionpicker:SortActionList({ACTIONS.ATTACK}, target_ent, nil)
 50				end
 51				if target_ent and target_ent.components.edible and eater.components.eater:CanEat(target_ent) then
 52				   return eater.components.playeractionpicker:SortActionList({ACTIONS.EAT}, target_ent, nil)
 53				end
 54			end
 55			eater:DoPeriodicTask(3, function(eater)
 56			  if math.random() < 0.05 then
 57				if eater.components.hunger:GetPercent() > 0.995 then
 58				   local pt1 = eater:GetPosition()
 59				   local wolf = SpawnPrefab("slurtleslime")
 60				   wolf.Transform:SetPosition(pt1.x+(math.random(10)-math.random(10)), 0, pt1.z+(math.random(10)-math.random(10)))
 61				   wolf.AnimState:SetBank("hound")
 62				   wolf.AnimState:SetBuild("hound")
 63				   wolf.AnimState:PlayAnimation("idle")
 64				   wolf.Transform:SetFourFaced()
 65				   local sound = wolf.entity:AddSoundEmitter()
 66				   local shadow = wolf.entity:AddDynamicShadow()
 67				   shadow:SetSize( 2.5, 1.5 )
 68				   MakeCharacterPhysics(wolf, 10, .5)
 69				   wolf:AddComponent("locomotor")
 70				   wolf.components.locomotor.runspeed = 25
 71				   wolf:SetStateGraph("SGhound")
 72				   local brain = require "brains/frogbrain"
 73				   wolf:SetBrain(brain)
 74				   wolf:RemoveComponent("stackable")
 75				   wolf:RemoveComponent("fuel")
 76				   wolf:RemoveComponent("inventoryitem")
 77				   wolf:RemoveComponent("explosive")
 78				   wolf:RemoveComponent("burnable")
 79				   wolf:RemoveComponent("propagator")
 80				   wolf:RemoveComponent("edible")
 81				   wolf:AddComponent("follower")
 82				   wolf:AddComponent("knownlocations")
 83				   wolf:AddComponent("lootdropper")
 84				   wolf.components.lootdropper:SetLoot({"meat", "meat"})
 85				   wolf:AddComponent("health")
 86				   wolf.components.health:SetMaxHealth(2000)
 87				   wolf.components.health:StartRegen(100, 10)
 88				   wolf:AddComponent("combat")
 89				   wolf.components.combat:SetDefaultDamage(20)
 90				   wolf.components.combat:SetAttackPeriod(0.1)
 91				   wolf.components.combat:SetTarget(eater)
 92				   wolf.AnimState:SetMultColour(255/255,0/255,0/255,1)
 93				   wolf.components.combat:SetRetargetFunction(1, function(wolf)
 94					   if not wolf.components.health:IsDead() then
 95						  return FindEntity(wolf, 300, function(guy)
 96								 return guy:HasTag("player")
 97						  end )
 98					   end
 99				   end )
100				   wolf.components.combat:SetKeepTargetFunction(function(wolf, target) return target and target:IsValid() end )
101				   wolf.task = wolf:DoPeriodicTask(1, function(customer)
102					   if wolf.components.health.currenthealth < 1000 then
103						  wolf.components.combat:SetTarget(nil)
104						  wolf:RemoveTag("goodbye")
105						  local brain = require "brains/abigailbrain"
106						  wolf:SetBrain(brain)
107						  wolf:RestartBrain()
108						  wolf.components.follower:SetLeader(GetPlayer())
109						  wolf.AnimState:SetMultColour(255/255,255/255,255/255,1)
110						  wolf.components.combat:SetRetargetFunction(2, function(wolf)
111							  if not wolf.components.health:IsDead() then
112								 return FindEntity(wolf, 20, function(guy)
113									 if guy.components.health and not guy.components.health:IsDead() and not guy:HasTag("wolfs") then
114										return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy
115									 end
116								 end )
117							  end
118						  end )
119						  wolf.components.combat:SetKeepTargetFunction(function(wolf, target) return target and target:IsValid() end )
120						  if wolf.task then wolf.task:Cancel() wolf.task = nil end
121					   end
122				   end )
123				   wolf:AddTag("monster")
124				   wolf:AddTag("wolfs")
125				   wolf:AddTag("goodbye")
126				end
127			  end
128			end )
129		end )
130	end
131end
132	inst:AddComponent("edible")
133	inst.components.edible:SetOnEatenFn(item_oneaten)
134	inst.components.edible.hungervalue = 1
135	inst.components.edible.foodtype = "VEGGIE"
136local function onsave(inst, data)
137	if inst:HasTag("wolfs") then
138		data.wolfs = true
139	end
140	if inst:HasTag("goodbye") then
141		data.goodbye = true
142	end
143end
144local function onload(inst, data)
145	if data and data.goodbye then
146	   inst:Remove()
147	end
148	if data and data.wolfs then
149	   inst.AnimState:SetBank("hound")
150	   inst.AnimState:SetBuild("hound")
151	   inst.AnimState:PlayAnimation("idle")
152	   inst.Transform:SetFourFaced()
153	   local sound = inst.entity:AddSoundEmitter()
154	   local shadow = inst.entity:AddDynamicShadow()
155	   shadow:SetSize( 2.5, 1.5 )
156	   MakeCharacterPhysics(inst, 10, .5)
157	   inst:AddComponent("locomotor")
158	   inst.components.locomotor.runspeed = 25
159	   inst:SetStateGraph("SGhound")
160	   inst:RemoveComponent("stackable")
161	   inst:RemoveComponent("fuel")
162	   inst:RemoveComponent("inventoryitem")
163	   inst:RemoveComponent("explosive")
164	   inst:RemoveComponent("burnable")
165	   inst:RemoveComponent("propagator")
166	   inst:RemoveComponent("edible")
167	   inst:AddComponent("follower")
168	   inst:AddComponent("knownlocations")
169	   inst:AddComponent("lootdropper")
170	   inst.components.lootdropper:SetLoot({"meat", "meat"})
171	   inst:AddComponent("health")
172	   inst.components.health:SetMaxHealth(2000)
173	   inst.components.health:StartRegen(100, 10)
174	   inst:AddComponent("combat")
175	   inst.components.combat:SetDefaultDamage(20)
176	   inst.components.combat:SetAttackPeriod(0.1)
177	   local brain = require "brains/abigailbrain"
178	   inst:SetBrain(brain)
179	   inst.components.follower:SetLeader(GetPlayer())
180	   inst.components.combat:SetRetargetFunction(2, function(inst)
181		   if not inst.components.health:IsDead() then
182			  return FindEntity(inst, 20, function(guy)
183				  if guy.components.health and not guy.components.health:IsDead() and not guy:HasTag("wolfs") then
184					 return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy
185				  end
186			  end )
187		   end
188	   end )
189	   inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )
190	   inst:AddTag("monster")
191	   inst:AddTag("wolfs")
192	end
193end
194	inst.OnSave = onsave
195	inst.OnLoad = onload
196
197	即可吃蜗牛龟粘液让主角变成狼,体验野生动物的生活。可喜的是,你将拥有强大的生命力(自动回血),超快的跑动速度和恐怖的咬合能力,黑夜也不会影响你看清前方,甚至由于没有了人的味道,一些小动物将无法躲避你。可悲的是,你必须告别之前所有的伙伴,连“新移民”都会主动攻击你,离开人类的生活,流浪在荒郊野外。战斗中,由于你的体重变轻,被打时会被甩出去,因此要学会扬长避短,发挥速度和攻击力的优势,跑过去咬上一口就躲,千万不要与敌人原地肉搏。当你进食到最饱时,有一定概率出现别的狼(全身红色)挑战你,打败它(它身上不再呈红色),则将成为你的小弟,用锋利的牙齿发展起你的狼群吧。如果实在受不了荒野的生活了,存档退出再读档,即可变回人,但狼小弟将继续跟随你。使用大力士、伍迪作主角时,不适用此项,不要与“变身传奇”、“饥饿的儿童”一同修改。蜗牛龟粘液可打蜗牛龟和蜗牛窝获得