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

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



一八九.避魔圈(按键盘F9键在地上画避魔圈,任何生物靠近都将被弹开,再按F9键取消)

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

TheInput:AddKeyUpHandler(KEY_F9, function()
	if not inst:HasTag("havelifebuoy") then
	   inst:AddTag("havelifebuoy")
	   inst.components.locomotor:Stop()
	   inst.AnimState:PlayAnimation("give")
	   inst.components.health:DoDelta(-10)
	   GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.7, 0.02, .5, 40)
	   GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
	   SpawnPrefab("groundpoundring_fx").Transform:SetPosition(inst.Transform:GetWorldPosition())
	   SpawnPrefab("tauntfire_fx").Transform:SetPosition(inst.Transform:GetWorldPosition())
	   inst:DoTaskInTime(0.5, function() 
		   local pt = inst:GetPosition()
		   local lifebuoy = SpawnPrefab("firesuppressor_placer")
		   lifebuoy.Transform:SetPosition(pt.x, 0, pt.z)
		   lifebuoy.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
		   lifebuoy.AnimState:SetLayer( LAYER_BACKGROUND )
		   lifebuoy.AnimState:SetSortOrder( 1 )
		   lifebuoy.Transform:SetScale(1.1, 1.1, 1.1)
		   lifebuoy.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
		   lifebuoy.AnimState:SetMultColour(255/255,0/255,0/255,1)
		   lifebuoy.persists = false
		   lifebuoy:DoPeriodicTask(0.3, function()
			   local pos = Vector3(lifebuoy.Transform:GetWorldPosition())
			   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 10)
			   for k,v in pairs(ents) do
				   if v.components.health and v.components.combat and not v.components.health:IsDead() and not v:HasTag("player") and not v:HasTag("wall") then
					  GetPlayer().SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo")
					  SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
					  v.components.health:DoDelta(-200)
					  local pt1 = lifebuoy:GetPosition()
					  local pt2 = v:GetPosition()
					  v.Transform:SetPosition((pt2.x-pt1.x)*1.5+pt2.x, 0, (pt2.z-pt1.z)*1.5+pt2.z)
				   end
			   end
		   end )
		   lifebuoy:AddTag("NOCLICK")
		   lifebuoy:AddTag("lifebuoy")
	   end )
	else
	   inst:RemoveTag("havelifebuoy")
	   inst.components.locomotor:Stop()
	   inst.AnimState:PlayAnimation("give")
	   GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
	   SpawnPrefab("tauntfire_fx").Transform:SetPosition(inst.Transform:GetWorldPosition())
	   local pos = Vector3(inst.Transform:GetWorldPosition())
	   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 3000)
	   for k,v in pairs(ents) do
		   if v:HasTag("lifebuoy") then
			  v:Remove()
		   end
	   end
	end
end )

	即可按键盘F9键在地上画避魔圈,主角站在圈中,任何生物靠近都将被弹开,并杀伤其生命值,再次按键盘F9键收掉避魔圈。避魔圈是一种血魔法,每画一次,主角将消耗10点生命,在生命值较低时,请勿施法