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

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


 1
 2一八四.家园防御系统(暗夜照明灯自动向靠近的敌人发射炮弹)
 3
 4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/nightlight.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
 5
 6local function onattack(inst)
 7	local pos = Vector3(inst.Transform:GetWorldPosition())
 8	local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 30)
 9	for k,v in pairs(ents) do
10		if v.components.health and v.components.combat and not v.components.health:IsDead() then
11		   if v.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == v or v:HasTag("monster") then
12			  inst.components.weapon:LaunchProjectile(inst, v)
13			  v.components.health:DoDelta(-5000)
14			  inst.SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo")
15			  SpawnPrefab("collapse_small").Transform:SetPosition(v.Transform:GetWorldPosition())
16			  SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
17			  GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.7, 0.02, .5, 40)
18			  inst.components.fueled:InitializeFuelLevel(1000)
19		   end
20		end
21	end
22end
23local function turnon(inst)
24	inst.components.machine.ison = true
25	inst.task = inst:DoPeriodicTask(.5, function() onattack(inst) end)
26	inst.components.burnable:IsBurning()
27	inst.components.fueled:InitializeFuelLevel(1000)
28	end
29local function turnoff(inst)
30	inst.components.machine.ison = false
31	if inst.task then inst.task:Cancel() inst.task = nil end
32	inst.components.burnable:Extinguish()
33	inst.components.fueled:InitializeFuelLevel(0)
34end
35	inst:AddComponent("machine")
36	inst.components.machine.turnonfn = turnon
37	inst.components.machine.turnofffn = turnoff
38	inst:AddComponent("weapon")
39	inst.components.weapon:SetDamage(0)
40	inst.components.weapon:SetProjectile("eye_charge")
41
42	即可对暗夜照明灯按鼠标右键开启家园防御系统,自动向靠近的敌人发射炮弹(不会攻击同伴),再按鼠标右键关闭。建在基地附近,无惧任何敌人。暗影照明灯在魔法选项(画着红骷髅)下,用8个黄金、2个噩梦燃料、1个红宝石建造