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

原帖链接: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个企鹅腿。不想要企鹅养殖场时烧掉即可