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

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


 1
 2.糖豆敢死队(按键盘T键召唤糖豆敢死队,对敌发动自杀式爆炸,鼠标左键点击可退钱)
 3
 4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playercontroller")的下一行插入以下内容:
 5
 6TheInput:AddKeyUpHandler(KEY_T, function()
 7	if inst.components.inventory:Has("goldnugget", 2) then
 8	   inst.components.inventory:ConsumeByName("goldnugget", 2)
 9	   inst.AnimState:PlayAnimation("give")
10	   inst.SoundEmitter:PlaySound("dontstarve/HUD/research_available")
11	   local bean = SpawnPrefab("goatmilk")
12	   local pt = GetPlayer():GetPosition()
13	   bean.Transform:SetPosition(pt.x+(math.random(3)-math.random(3)), 0, pt.z+(math.random(3)-math.random(3)))
14	   SpawnPrefab("collapse_small").Transform:SetPosition(bean.Transform:GetWorldPosition())
15	   bean.AnimState:SetBank("treedrake")
16	   bean.AnimState:SetBuild("treedrake_build")
17	   bean.AnimState:PlayAnimation("enter")
18	   bean.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
19	   bean.Transform:SetScale(1.2, 1.2, 1.2)
20	   bean.Transform:SetFourFaced()
21	   local sound = bean.entity:AddSoundEmitter()
22	   local shadow = bean.entity:AddDynamicShadow()
23	   shadow:SetSize(1.25, .75)
24	   MakeCharacterPhysics(bean, 1, .25)
25	   local colours= { {198/255,43/255,43/255}, {79/255,153/255,68/255}, {35/255,105/255,235/255}, {233/255,208/255,69/255}, {109/255,50/255,163/255}, {222/255,126/255,39/255} }
26	   bean.colour_idx = math.random(#colours)
27	   bean.AnimState:SetMultColour(colours[bean.colour_idx][1],colours[bean.colour_idx][2],colours[bean.colour_idx][3],1)
28	   bean:RemoveComponent("edible")
29	   bean:RemoveComponent("perishable")
30	   bean:RemoveComponent("stackable")
31	   bean:RemoveComponent("inventoryitem")
32	   bean:RemoveTag("catfood")
33	   bean.persists = false
34	   bean:AddComponent("named")
35	   bean.components.named:SetName("Jelly Bean")
36	   bean:AddComponent("follower")
37	   bean.components.follower:SetLeader(GetPlayer())
38	   bean:AddComponent("health")
39	   bean.components.health:SetMaxHealth(10)
40	   bean.components.health:SetInvincible(true)
41	   bean:AddComponent("combat")
42	   bean.components.combat:SetDefaultDamage(1)
43	   bean.components.combat:SetAttackPeriod(2)
44	   bean.components.combat:SetRange(0.5)
45	   bean.components.combat:SetRetargetFunction(1, function(bean)
46		   if not bean.components.health:IsDead() then
47			   return FindEntity(bean, 25, function(guy)
48				   if guy.components.combat then
49					  return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
50				   end
51			   end )
52		   end
53	   end )
54	   bean.components.combat:SetKeepTargetFunction(function(bean, target) return target and target:IsValid() end )
55	   bean:AddComponent("locomotor")
56	   bean.components.locomotor.walkspeed = 15
57	   bean:SetStateGraph("SGbirchnutdrake")
58	   local brain = require "brains/abigailbrain"
59	   bean:SetBrain(brain)
60	   bean:DoPeriodicTask(0.25, function()
61		   local pos = Vector3(bean.Transform:GetWorldPosition())
62		   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 2)
63		   for k,v in pairs(ents) do
64			   if v and v.components.combat and v.components.health and not v.components.health:IsDead() then
65				  if v.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == v or v.components.combat.target == bean or bean.components.combat.target == v or v:HasTag("monster") then
66					 GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
67					 SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
68					 SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
69					 GetClock():DoLightningLighting()
70					 GetPlayer().components.playercontroller:ShakeCamera(v, "FULL", 0.7, 0.02, .5, 40)
71					 v.components.health:Kill()
72					 bean:Remove()
73				  end
74			   end
75		   end
76	   end )
77	   bean.components.inspectable.getstatus = function(bean)
78		   inst.SoundEmitter:PlaySound("dontstarve/HUD/research_available")
79		   SpawnPrefab("collapse_small").Transform:SetPosition(bean.Transform:GetWorldPosition())
80		   for k = 1, 2 do
81			   local goldnugget = SpawnPrefab("goldnugget")
82			   inst.components.inventory:GiveItem(goldnugget)
83		   end
84		   bean:Remove()
85	   end
86	   bean:AddTag("companion")
87	   bean:AddTag("beans")
88	end
89end )
90
91	即可按键盘T键召唤糖豆敢死队,花费2个黄金,身上黄金数不足时无法召唤。糖豆敢死队员将冲向你的敌人,对其发动自杀式爆炸,并杀伤周边敌人。鼠标点击多余的糖豆敢死队员,可清退它们,换回2个黄金(放入主角物品栏)。存档退出后再读档,糖豆敢死队将离开,在之前将它们都清退掉吧