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

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


  1
  2一九六.口袋浣熊(用纸种口袋浣熊,捕猎、战斗好帮手,喂鱼变身超级浣熊)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/papyrus.lua文件,在inst:AddComponent("inventoryitem")的下一行插入以下内容:
  5
  6local function OnDeploy (inst, pt)
  7	local coon = SpawnPrefab("papyrus")
  8	coon.Transform:SetPosition(pt.x, pt.y, pt.z)
  9	coon.AnimState:SetBank("catcoon")
 10	coon.AnimState:SetBuild("catcoon_build")
 11	coon.AnimState:PlayAnimation("idle_loop")
 12	coon.Transform:SetFourFaced()
 13	coon.Transform:SetScale(0.8, 0.8, 0.8)
 14	coon.entity:AddSoundEmitter()
 15	local shadow = coon.entity:AddDynamicShadow()
 16	shadow:SetSize(2,0.75)
 17	coon:RemoveComponent("stackable")
 18	coon:RemoveComponent("fuel")
 19	coon:RemoveComponent("tradable")
 20	coon:RemoveComponent("burnable")
 21	coon:RemoveComponent("propagator")
 22	coon:RemoveComponent("deployable")
 23	coon:RemoveTag("cattoy")
 24	coon.components.inventoryitem:ChangeImageName("catcoonhat")
 25	coon:AddComponent("named")
 26	coon.components.named:SetName("Catcoon")
 27	coon:AddComponent("follower")
 28	coon.components.follower:SetLeader(GetPlayer())
 29	coon:AddComponent("locomotor")
 30	coon.components.locomotor.walkspeed = 12
 31	coon:SetStateGraph("SGcatcoon")
 32	local brain = require "brains/abigailbrain"
 33	coon:SetBrain(brain)
 34	coon:AddComponent("health")
 35	coon.components.health:SetMaxHealth(3000)
 36	coon:AddComponent("lootdropper")
 37	coon.components.lootdropper:SetLoot({"smallmeat"})
 38	coon:AddComponent("combat")
 39	coon.components.combat:SetDefaultDamage(50)
 40	coon.components.combat:SetRange(4)
 41	coon.components.combat:SetAttackPeriod(0.5)
 42	coon.components.combat:SetHurtSound("dontstarve_DLC001/creatures/catcoon/hurt")
 43	coon.components.combat.battlecryinterval = 20
 44	coon.components.combat:SetRetargetFunction(1, function(coon)
 45		if not coon.components.health:IsDead() then
 46			return FindEntity(GetPlayer(), 20, function(guy)
 47				if guy.components.health and not guy.components.health:IsDead() then
 48				   return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster") or guy:HasTag("smallcreature")
 49				end
 50			end)
 51		end
 52	end )
 53	coon.components.combat:SetKeepTargetFunction(function(coon, target) return target and target:IsValid() end )
 54	coon:ListenForEvent("attacked", function(coon, data)
 55		if data.attacker ~= GetPlayer() then
 56		   coon.components.combat:SetTarget(data.attacker)
 57		else
 58		   coon.components.health:Kill()
 59		end
 60	end )
 61	coon:AddComponent( "playerprox" )
 62	coon.components.playerprox:SetDist(3,5)
 63	coon.components.playerprox:SetOnPlayerNear(function(coon) coon.components.locomotor.walkspeed = 5 end )
 64	coon.components.playerprox:SetOnPlayerFar(function(coon) coon.components.locomotor.walkspeed = 12 end )
 65	coon:AddComponent("trader")
 66	coon.components.trader:SetAcceptTest(function(coon, item)
 67		if not coon:HasTag("supercoon") then
 68		   if item.prefab == "fish" then
 69			  return true
 70		   end
 71		   if item.prefab == "smallmeat" then
 72			  return coon.components.health:GetPercent() < 1
 73		   end
 74		end
 75		return false
 76	end )
 77	coon.components.trader.onaccept = function(coon, giver, item)
 78		if item.prefab == "fish" then
 79		   coon:AddTag("supercoon")
 80		   coon.components.named:SetName("SuperCatcoon")
 81		   SpawnPrefab("collapse_big").Transform:SetPosition(coon.Transform:GetWorldPosition())
 82		   coon.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 83		   coon.Transform:SetScale(1.3, 1.3, 1.3)
 84		   coon.components.inventoryitem.canbepickedup = false
 85		   coon.components.health:SetInvincible(true)
 86		   coon.components.combat:SetDefaultDamage(500)
 87		   coon:DoTaskInTime(60, function(coon)
 88			   coon:RemoveTag("supercoon")
 89			   coon.components.named:SetName("Catcoon")
 90			   SpawnPrefab("collapse_big").Transform:SetPosition(coon.Transform:GetWorldPosition())
 91			   coon.AnimState:SetBloomEffectHandle("")
 92			   coon.Transform:SetScale(0.8, 0.8, 0.8)
 93			   coon.components.inventoryitem.canbepickedup = true
 94			   coon.components.health:SetInvincible(false)
 95			   coon.components.combat:SetDefaultDamage(50)
 96		   end )
 97		end
 98		if item.prefab == "smallmeat" then
 99		   coon.components.health:DoDelta(1000)
100		end
101	end
102	coon:AddTag("coons")
103	inst.components.stackable:Get():Remove()
104end
105	inst:AddComponent("deployable")
106	inst.components.deployable.ondeploy = OnDeploy
107local function onsave(inst, data)
108	if inst:HasTag("coons") then
109		data.coons = true
110	end
111end
112local function onload(inst, data)
113  if data and data.coons then
114	inst.AnimState:SetBank("catcoon")
115	inst.AnimState:SetBuild("catcoon_build")
116	inst.AnimState:PlayAnimation("idle_loop")
117	inst.Transform:SetFourFaced()
118	inst.Transform:SetScale(0.8, 0.8, 0.8)
119	inst.entity:AddSoundEmitter()
120	local shadow = inst.entity:AddDynamicShadow()
121	shadow:SetSize(2,0.75)
122	inst:RemoveComponent("stackable")
123	inst:RemoveComponent("fuel")
124	inst:RemoveComponent("tradable")
125	inst:RemoveComponent("burnable")
126	inst:RemoveComponent("propagator")
127	inst:RemoveComponent("deployable")
128	inst:RemoveTag("cattoy")
129	inst.components.inventoryitem:ChangeImageName("catcoonhat")
130	inst:AddComponent("named")
131	inst.components.named:SetName("Catcoon")
132	inst:AddComponent("follower")
133	inst.components.follower:SetLeader(GetPlayer())
134	inst:AddComponent("locomotor")
135	inst.components.locomotor.walkspeed = 12
136	inst:SetStateGraph("SGcatcoon")
137	local brain = require "brains/abigailbrain"
138	inst:SetBrain(brain)
139	inst:AddComponent("health")
140	inst.components.health:SetMaxHealth(3000)
141	inst:AddComponent("lootdropper")
142	inst.components.lootdropper:SetLoot({"smallmeat"})
143	inst:AddComponent("combat")
144	inst.components.combat:SetDefaultDamage(50)
145	inst.components.combat:SetRange(4)
146	inst.components.combat:SetAttackPeriod(0.5)
147	inst.components.combat:SetHurtSound("dontstarve_DLC001/creatures/catcoon/hurt")
148	inst.components.combat.battlecryinterval = 20
149	inst.components.combat:SetRetargetFunction(1, function(inst)
150		if not inst.components.health:IsDead() then
151			return FindEntity(GetPlayer(), 20, function(guy)
152				if guy.components.health and not guy.components.health:IsDead() then
153				   return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster") or guy:HasTag("smallcreature")
154				end
155			end)
156		end
157	end )
158	inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )
159	inst:ListenForEvent("attacked", function(inst, data)
160		if data.attacker ~= GetPlayer() then
161		   inst.components.combat:SetTarget(data.attacker)
162		else
163		   inst.components.health:Kill()
164		end
165	end )
166	inst:AddComponent( "playerprox" )
167	inst.components.playerprox:SetDist(3,5)
168	inst.components.playerprox:SetOnPlayerNear(function(inst) inst.components.locomotor.walkspeed = 5 end )
169	inst.components.playerprox:SetOnPlayerFar(function(inst) inst.components.locomotor.walkspeed = 12 end )
170	inst:AddComponent("trader")
171	inst.components.trader:SetAcceptTest(function(inst, item)
172		if not inst:HasTag("supercoon") then
173		   if item.prefab == "fish" then
174			  return true
175		   end
176		   if item.prefab == "smallmeat" then
177			  return inst.components.health:GetPercent() < 1
178		   end
179		end
180		return false
181	end )
182	inst.components.trader.onaccept = function(inst, giver, item)
183		if item.prefab == "fish" then
184		   inst:AddTag("supercoon")
185		   inst.components.named:SetName("SuperCatcoon")
186		   SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
187		   inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
188		   inst.Transform:SetScale(1.3, 1.3, 1.3)
189		   inst.components.inventoryitem.canbepickedup = false
190		   inst.components.health:SetInvincible(true)
191		   inst.components.combat:SetDefaultDamage(500)
192		   inst:DoTaskInTime(60, function(inst)
193			   inst:RemoveTag("supercoon")
194			   inst.components.named:SetName("Catcoon")
195			   SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
196			   inst.AnimState:SetBloomEffectHandle("")
197			   inst.Transform:SetScale(0.8, 0.8, 0.8)
198			   inst.components.inventoryitem.canbepickedup = true
199			   inst.components.health:SetInvincible(false)
200			   inst.components.combat:SetDefaultDamage(50)
201		   end )
202		end
203		if item.prefab == "smallmeat" then
204		   inst.components.health:DoDelta(1000)
205		end
206	end
207	inst:AddTag("coons")
208  end
209end
210	inst.OnSave = onsave
211	inst.OnLoad = onload
212
213	即可用纸种口袋浣熊,帮你捕猎、战斗。鼠标左键点浣熊,可将其放入物品栏(显示为浣熊帽的图标)。喂浣熊小肉,可为其补血(3块可补满),如果喂浣熊鱼,则变身超级浣熊,不会受伤,攻击力提高10倍,60秒后变回来。在超级浣熊状态下,口袋浣熊无法被拿起,也不接受食物。不想要口袋浣熊了,在物品栏中对其按鼠标右键即可。纸在精炼选项(画着白色宝石)下,用4个芦苇制造