代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个芦苇制造