代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二九六.企鹅养殖场(用蜂巢种企鹅养殖场,买小企鹅,养大后卖出赚黄金)
3
4 用MT管理器打开游戏目录/assets/scripts/prefabs/honeycomb.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function penguinshop(inst)
7 local pt = inst:GetPosition()
8 local peddler = SpawnPrefab("honeycomb")
9 peddler.Transform:SetPosition(pt.x, pt.y, pt.z)
10 peddler.AnimState:SetBank("wilson")
11 peddler.AnimState:SetBuild("willow")
12 peddler.AnimState:OverrideSymbol("swap_hat", "hat_straw", "swap_hat")
13 peddler.AnimState:Show("HAT")
14 peddler.AnimState:Show("HAT_HAIR")
15 peddler.AnimState:Hide("HAIR_NOHAT")
16 peddler.AnimState:Hide("HAIR")
17 peddler.AnimState:OverrideSymbol("swap_body", "armor_grass", "swap_body")
18 peddler.AnimState:Hide("ARM_carry")
19 peddler.AnimState:Show("ARM_normal")
20 peddler.Transform:SetFourFaced()
21 peddler.AnimState:PlayAnimation("idle")
22 peddler:AddTag("peddler")
23 peddler:RemoveComponent("stackable")
24 peddler:RemoveComponent("tradable")
25 peddler:RemoveComponent("inventoryitem")
26 local light = peddler.entity:AddLight()
27 light:SetFalloff(1)
28 light:SetIntensity(.8)
29 light:SetRadius(10)
30 light:SetColour(180/255, 195/255, 50/255)
31 light:Enable(true)
32 MakeLargeBurnable(peddler)
33 MakeLargePropagator(peddler)
34 peddler.components.inspectable.getstatus = function(peddler)
35 peddler.AnimState:PlayAnimation("give")
36 GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/get_gold")
37 local pos = Vector3(peddler.Transform:GetWorldPosition())
38 local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 10)
39 for k,v in pairs(ents) do
40 if v:HasTag("penguin_2") then
41 for k = 1, 20 do
42 SpawnPrefab("goldnugget").Transform:SetPosition(v.Transform:GetWorldPosition())
43 end
44 v:Remove()
45 end
46 end
47 end
48 peddler:AddComponent("trader")
49 peddler.components.trader:SetAcceptTest(function(peddler, item)
50 if GetPlayer().components.inventory:Has("goldnugget", 10) then
51 if item.prefab == "goldnugget" then
52 return true
53 end
54 end
55 return false
56 end )
57 peddler.components.trader.onaccept = function(peddler, giver, item)
58 peddler.AnimState:PlayAnimation("give")
59 GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
60 GetPlayer().components.inventory:ConsumeByName("goldnugget", 9)
61 local penguin = SpawnPrefab("honeycomb")
62 penguin.Transform:SetPosition(pt.x+3.1, 0, pt.z+3.1)
63 penguin.AnimState:SetBank("penguin")
64 penguin.AnimState:SetBuild("penguin_build")
65 penguin.Transform:SetFourFaced()
66 penguin.AnimState:PlayAnimation("idle_loop", true)
67 penguin.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
68 penguin.entity:AddSoundEmitter()
69 local minimap = penguin.entity:AddMiniMapEntity()
70 minimap:SetIcon( "penguin.png" )
71 MakeCharacterPhysics(penguin, 50, .5)
72 penguin:AddComponent("follower")
73 penguin.components.follower:SetLeader(GetPlayer())
74 local brain = require "brains/abigailbrain"
75 penguin:SetBrain(brain)
76 penguin:AddComponent("locomotor")
77 penguin.components.locomotor.walkspeed = 0.75
78 penguin.components.locomotor.directdrive = false
79 penguin:SetStateGraph("SGpenguin")
80 penguin:AddComponent("combat")
81 penguin.components.combat.hiteffectsymbol = "body"
82 penguin.components.combat:SetAttackPeriod(1)
83 penguin.components.combat:SetRange(2.5)
84 penguin.components.combat:SetDefaultDamage(1)
85 penguin:ListenForEvent("attacked", function(penguin, data) penguin.components.combat:SetTarget(data.attacker) end )
86 penguin:AddComponent("health")
87 penguin.components.health:SetMaxHealth(50)
88 penguin.Transform:SetScale(0.7, 0.7, 0.7)
89 penguin:RemoveComponent("stackable")
90 penguin:RemoveComponent("tradable")
91 penguin:RemoveComponent("inventoryitem")
92 penguin:AddTag("retinue")
93 penguin:AddTag("penguin_1")
94 penguin:AddComponent("lootdropper")
95 penguin.components.lootdropper:SetLoot({"smallmeat", "smallmeat"})
96 penguin.components.inspectable.getstatus = function(penguin)
97 if not penguin:HasTag("retinue") then
98 local brain = require "brains/abigailbrain"
99 penguin:SetBrain(brain)
100 penguin.components.follower:SetLeader(GetPlayer())
101 penguin.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
102 penguin:AddTag("retinue")
103 else
104 local brain = require "brains/leifbrain"
105 penguin:SetBrain(brain)
106 penguin.components.follower:SetLeader(nil)
107 penguin.AnimState:SetBloomEffectHandle("")
108 penguin:RemoveTag("retinue")
109 end
110 end
111 penguin:DoTaskInTime(math.random(480,560), function()
112 if not penguin:HasTag("penguin_2") then
113 penguin.AnimState:PlayAnimation("taunt")
114 penguin.Transform:SetScale(1, 1, 1)
115 penguin:AddTag("penguin_2")
116 penguin.components.lootdropper:SetLoot({"meat", "meat", "drumstick", "drumstick"})
117 end
118 end )
119 penguin:DoPeriodicTask(math.random(120,180), function()
120 if penguin:HasTag("penguin_2") then
121 SpawnPrefab("bird_egg").Transform:SetPosition(penguin.Transform:GetWorldPosition())
122 end
123 end)
124 end
125 local ice = SpawnPrefab("honeycomb")
126 ice.Transform:SetPosition(pt.x+1, 0, pt.z+1)
127 ice.AnimState:SetBank("penguin_ice")
128 ice.AnimState:SetBuild("penguin_ice")
129 ice.AnimState:PlayAnimation("idle")
130 ice.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
131 ice.AnimState:SetLayer( LAYER_BACKGROUND )
132 ice.AnimState:SetSortOrder( 1 )
133 ice.Transform:SetRotation( 225 )
134 ice:RemoveComponent("stackable")
135 ice:RemoveComponent("tradable")
136 ice:RemoveComponent("inventoryitem")
137 ice:AddTag("goodbye")
138 ice:AddTag("NOCLICK")
139 MakeLargeBurnable(ice)
140 MakeLargePropagator(ice)
141 local model1 = SpawnPrefab("honeycomb")
142 model1.Transform:SetPosition(pt.x+2-1, 0, pt.z-2-1)
143 model1.AnimState:SetBank("penguin")
144 model1.AnimState:SetBuild("penguin_build")
145 model1.Transform:SetFourFaced()
146 model1.AnimState:PlayAnimation("idle_loop", true)
147 model1.Transform:SetRotation( 270 )
148 model1.Transform:SetScale(2, 2, 2)
149 model1:RemoveComponent("stackable")
150 model1:RemoveComponent("tradable")
151 model1:RemoveComponent("inventoryitem")
152 model1.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
153 model1:AddTag("goodbye")
154 MakeLargeBurnable(model1)
155 MakeLargePropagator(model1)
156 local model2 = SpawnPrefab("honeycomb")
157 model2.Transform:SetPosition(pt.x-2-1, 0, pt.z+2-1)
158 model2.AnimState:SetBank("penguin")
159 model2.AnimState:SetBuild("penguin_build")
160 model2.Transform:SetFourFaced()
161 model2.AnimState:PlayAnimation("idle_loop", true)
162 model2.Transform:SetRotation( 90 )
163 model2.Transform:SetScale(2, 2, 2)
164 model2:RemoveComponent("stackable")
165 model2:RemoveComponent("tradable")
166 model2:RemoveComponent("inventoryitem")
167 model2.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
168 model2:AddTag("goodbye")
169 MakeLargeBurnable(model2)
170 MakeLargePropagator(model2)
171end
172
173local function OnDeploy (inst, pt)
174 penguinshop(inst)
175 inst.components.stackable:Get():Remove()
176end
177 inst:AddComponent("deployable")
178 inst.components.deployable.ondeploy = OnDeploy
179local function onsave(inst, data)
180 if inst:HasTag("peddler") then data.peddler = true end
181 if inst:HasTag("goodbye") then data.goodbye = true end
182 if inst:HasTag("penguin_1") then data.penguin_1 = true end
183 if inst:HasTag("penguin_2") then data.penguin_2 = true end
184 if inst:HasTag("retinue") then data.retinue = true end
185end
186local function onload(inst, data)
187 if data and data.peddler then
188 penguinshop(inst)
189 inst:Remove()
190 end
191 if data and data.goodbye then
192 inst:Remove()
193 end
194 if data and data.penguin_1 then
195 inst.AnimState:SetBank("penguin")
196 inst.AnimState:SetBuild("penguin_build")
197 inst.Transform:SetFourFaced()
198 inst.AnimState:PlayAnimation("idle_loop", true)
199 inst.entity:AddSoundEmitter()
200 local minimap = inst.entity:AddMiniMapEntity()
201 minimap:SetIcon( "penguin.png" )
202 MakeCharacterPhysics(inst, 50, .5)
203 inst:AddComponent("follower")
204 inst.components.follower:SetLeader(nil)
205 local brain = require "brains/leifbrain"
206 inst:SetBrain(brain)
207 inst:AddComponent("locomotor")
208 inst.components.locomotor.walkspeed = 0.75
209 inst.components.locomotor.directdrive = false
210 inst:SetStateGraph("SGpenguin")
211 inst:AddComponent("combat")
212 inst.components.combat.hiteffectsymbol = "body"
213 inst.components.combat:SetAttackPeriod(1)
214 inst.components.combat:SetRange(2.5)
215 inst.components.combat:SetDefaultDamage(1)
216 inst:ListenForEvent("attacked", function(inst, data) inst.components.combat:SetTarget(data.attacker) end )
217 inst:AddComponent("health")
218 inst.components.health:SetMaxHealth(50)
219 inst.Transform:SetScale(0.7, 0.7, 0.7)
220 inst:RemoveComponent("stackable")
221 inst:RemoveComponent("tradable")
222 inst:RemoveComponent("inventoryitem")
223 inst:AddTag("penguin_1")
224 inst:AddComponent("lootdropper")
225 inst.components.lootdropper:SetLoot({"smallmeat", "smallmeat"})
226 inst.components.inspectable.getstatus = function(inst)
227 if not inst:HasTag("retinue") then
228 local brain = require "brains/abigailbrain"
229 inst:SetBrain(brain)
230 inst.components.follower:SetLeader(GetPlayer())
231 inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
232 inst:AddTag("retinue")
233 else
234 local brain = require "brains/leifbrain"
235 inst:SetBrain(brain)
236 inst.components.follower:SetLeader(nil)
237 inst.AnimState:SetBloomEffectHandle("")
238 inst:RemoveTag("retinue")
239 end
240 end
241 inst:DoTaskInTime(math.random(480,560), function()
242 if not inst:HasTag("penguin_2") then
243 inst.AnimState:PlayAnimation("taunt")
244 inst.Transform:SetScale(1, 1, 1)
245 inst:AddTag("penguin_2")
246 inst.components.lootdropper:SetLoot({"meat", "meat", "drumstick", "drumstick"})
247 end
248 end )
249 inst:DoPeriodicTask(math.random(120,180), function()
250 if inst:HasTag("penguin_2") then
251 SpawnPrefab("bird_egg").Transform:SetPosition(inst.Transform:GetWorldPosition())
252 end
253 end)
254 end
255 if data and data.penguin_2 then
256 inst.Transform:SetScale(1, 1, 1)
257 inst:AddTag("penguin_2")
258 inst.components.lootdropper:SetLoot({"meat", "meat", "drumstick", "drumstick"})
259 end
260 if data and data.retinue then
261 local brain = require "brains/abigailbrain"
262 inst:SetBrain(brain)
263 inst.components.follower:SetLeader(GetPlayer())
264 inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
265 inst:AddTag("retinue")
266 end
267end
268 inst.OnSave = onsave
269 inst.OnLoad = onload
270
271 即可用蜂巢种企鹅养殖场(手里拿着1个蜂巢对地面点鼠标右键,如果拿着多个蜂巢,则不会种出来),拿着黄金对老板点鼠标左键,可以购买小企鹅,每只10个黄金。小企鹅会跟着你,鼠标左键点企鹅可停止跟随,再点则继续跟随(手里不要拿武器,以免误杀)。把它们带到你建造的企鹅圈,圈养起来吧,如果有淘气的企鹅啄墙,把它带离墙边即可。1-2天后,小企鹅长成大企鹅,并会下蛋,你可以继续养它们获得企鹅蛋,也可以带它们去企鹅养殖场,让它们停在冰面上,鼠标左键点老板,即可卖掉冰面上的大企鹅,收购价每只20个黄金。保护好你的企鹅群,从此作一个快乐的养鹅人吧。如果企鹅走失,可以打开小地图查找,将显示企鹅图标。杀掉小企鹅,会掉2个小肉(修改过“巨型超市”则增加掉落1-2个黄金),杀掉大企鹅会掉2个大肉和2个企鹅腿。不想要企鹅养殖场时烧掉即可