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

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



六.糖豆敢死队(按键盘T键召唤糖豆敢死队,对敌发动自杀式爆炸,鼠标左键点击可退钱)

	用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playercontroller")的下一行插入以下内容:

TheInput:AddKeyUpHandler(KEY_T, function()
	if inst.components.inventory:Has("goldnugget", 2) then
	   inst.components.inventory:ConsumeByName("goldnugget", 2)
	   inst.AnimState:PlayAnimation("give")
	   inst.SoundEmitter:PlaySound("dontstarve/HUD/research_available")
	   local bean = SpawnPrefab("goatmilk")
	   local pt = GetPlayer():GetPosition()
	   bean.Transform:SetPosition(pt.x+(math.random(3)-math.random(3)), 0, pt.z+(math.random(3)-math.random(3)))
	   SpawnPrefab("collapse_small").Transform:SetPosition(bean.Transform:GetWorldPosition())
	   bean.AnimState:SetBank("treedrake")
	   bean.AnimState:SetBuild("treedrake_build")
	   bean.AnimState:PlayAnimation("enter")
	   bean.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
	   bean.Transform:SetScale(1.2, 1.2, 1.2)
	   bean.Transform:SetFourFaced()
	   local sound = bean.entity:AddSoundEmitter()
	   local shadow = bean.entity:AddDynamicShadow()
	   shadow:SetSize(1.25, .75)
	   MakeCharacterPhysics(bean, 1, .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} }
	   bean.colour_idx = math.random(#colours)
	   bean.AnimState:SetMultColour(colours[bean.colour_idx][1],colours[bean.colour_idx][2],colours[bean.colour_idx][3],1)
	   bean:RemoveComponent("edible")
	   bean:RemoveComponent("perishable")
	   bean:RemoveComponent("stackable")
	   bean:RemoveComponent("inventoryitem")
	   bean:RemoveTag("catfood")
	   bean.persists = false
	   bean:AddComponent("named")
	   bean.components.named:SetName("Jelly Bean")
	   bean:AddComponent("follower")
	   bean.components.follower:SetLeader(GetPlayer())
	   bean:AddComponent("health")
	   bean.components.health:SetMaxHealth(10)
	   bean.components.health:SetInvincible(true)
	   bean:AddComponent("combat")
	   bean.components.combat:SetDefaultDamage(1)
	   bean.components.combat:SetAttackPeriod(2)
	   bean.components.combat:SetRange(0.5)
	   bean.components.combat:SetRetargetFunction(1, function(bean)
		   if not bean.components.health:IsDead() then
			   return FindEntity(bean, 25, function(guy)
				   if guy.components.combat then
					  return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
				   end
			   end )
		   end
	   end )
	   bean.components.combat:SetKeepTargetFunction(function(bean, target) return target and target:IsValid() end )
	   bean:AddComponent("locomotor")
	   bean.components.locomotor.walkspeed = 15
	   bean:SetStateGraph("SGbirchnutdrake")
	   local brain = require "brains/abigailbrain"
	   bean:SetBrain(brain)
	   bean:DoPeriodicTask(0.25, function()
		   local pos = Vector3(bean.Transform:GetWorldPosition())
		   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 2)
		   for k,v in pairs(ents) do
			   if v and v.components.combat and v.components.health and not v.components.health:IsDead() then
				  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
					 GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
					 SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
					 SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
					 GetClock():DoLightningLighting()
					 GetPlayer().components.playercontroller:ShakeCamera(v, "FULL", 0.7, 0.02, .5, 40)
					 v.components.health:Kill()
					 bean:Remove()
				  end
			   end
		   end
	   end )
	   bean.components.inspectable.getstatus = function(bean)
		   inst.SoundEmitter:PlaySound("dontstarve/HUD/research_available")
		   SpawnPrefab("collapse_small").Transform:SetPosition(bean.Transform:GetWorldPosition())
		   for k = 1, 2 do
			   local goldnugget = SpawnPrefab("goldnugget")
			   inst.components.inventory:GiveItem(goldnugget)
		   end
		   bean:Remove()
	   end
	   bean:AddTag("companion")
	   bean:AddTag("beans")
	end
end )

	即可按键盘T键召唤糖豆敢死队,花费2个黄金,身上黄金数不足时无法召唤。糖豆敢死队员将冲向你的敌人,对其发动自杀式爆炸,并杀伤周边敌人。鼠标点击多余的糖豆敢死队员,可清退它们,换回2个黄金(放入主角物品栏)。存档退出后再读档,糖豆敢死队将离开,在之前将它们都清退掉吧