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

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


  1
  2一七五.霸王斧(用蜻蜓鳞片种霸王斧,攻击敌人时震开并伤害周围敌人,可吸敌人的血)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/dragon_scales.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function OnDeploy (inst, pt)
  7	local bigaxe = SpawnPrefab("dragon_scales")
  8	bigaxe.Transform:SetPosition(pt.x, pt.y, pt.z)
  9	bigaxe.AnimState:SetBank("Lucy_axe")
 10	bigaxe.AnimState:SetBuild("Lucy_axe")
 11	bigaxe.AnimState:PlayAnimation("idle")
 12	bigaxe.components.inventoryitem:ChangeImageName("lucy")
 13	bigaxe:AddComponent("named")
 14	bigaxe.components.named:SetName("Poleaxe")
 15	bigaxe:RemoveComponent("stackable")
 16	bigaxe:RemoveComponent("deployable")
 17	bigaxe:AddComponent("equippable")
 18	bigaxe.components.equippable.equipslot = EQUIPSLOTS.HANDS
 19	bigaxe.components.equippable:SetOnEquip(function(bigaxe, owner)
 20		owner.AnimState:OverrideSymbol("swap_object", "swap_lucy_axe", "swap_lucy_axe")
 21		owner.AnimState:Show("ARM_carry")
 22		owner.AnimState:Hide("ARM_normal")
 23		bigaxe.fire = SpawnPrefab( "campfirefire" )
 24		local follower = bigaxe.fire.entity:AddFollower()
 25		follower:FollowSymbol( owner.GUID, "swap_object", -2, -135, 1 )
 26		bigaxe.fire.AnimState:SetMultColour(255/255,0/255,0/255,1)
 27		bigaxe.fire:RemoveComponent("heater")
 28		bigaxe.fire.persists = false
 29	end )
 30	bigaxe.components.equippable:SetOnUnequip(function(bigaxe, owner)
 31		owner.AnimState:Hide("ARM_carry") 
 32		owner.AnimState:Show("ARM_normal") 
 33		bigaxe.fire:Remove()
 34		bigaxe.fire = nil
 35	end )
 36	bigaxe:AddComponent("weapon")
 37	bigaxe.components.weapon:SetDamage(500)
 38	bigaxe.components.weapon:SetOnAttack(function(bigaxe, attacker, target)
 39		GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
 40		SpawnPrefab("groundpoundring_fx").Transform:SetPosition(attacker.Transform:GetWorldPosition())
 41		GetPlayer().components.playercontroller:ShakeCamera(attacker, "FULL", 0.5, 0.05, 2, 40)
 42		if target.components.locomotor then target.components.locomotor:Stop() end
 43		if target.components.health:GetPercent() < 0.3 then
 44		   target.AnimState:SetMultColour(255/255,0/255,0/255,1)
 45		end
 46		attacker.components.health:DoDelta(150)
 47		attacker:StartThread(function()
 48			for k = 1, 3 do
 49				local blood = SpawnPrefab("splash")
 50				blood.Transform:SetPosition(target.Transform:GetWorldPosition())
 51				blood.AnimState:SetMultColour(255/255,0/255,0/255,1)
 52				blood.Transform:SetScale(2, 2, 2)
 53				Sleep(.1)
 54			end
 55		end )
 56		target:AddTag("nomove")
 57		target:DoTaskInTime(0.4, function() target:RemoveTag("nomove") end )
 58		local pos = Vector3(attacker.Transform:GetWorldPosition())
 59		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 8)
 60		for k,v in pairs(ents) do
 61			if v.components.health and v.components.combat and not v.components.health:IsDead() and not v:HasTag("nomove") then
 62			   if v.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == v or v:HasTag("monster") then
 63				  SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
 64				  v.components.health:DoDelta(-300)
 65				  local pt01 = attacker:GetPosition()
 66				  local pt02 = v:GetPosition()
 67				  v.Transform:SetPosition((pt02.x-pt01.x)*1.5+pt02.x, 0, (pt02.z-pt01.z)*1.5+pt02.z)
 68				  if v.components.locomotor then v.components.locomotor:Stop() end
 69				  if v.components.health:GetPercent() < 0.3 then
 70					 v.AnimState:SetMultColour(255/255,0/255,0/255,1)
 71				  end
 72			   end
 73			end
 74		end
 75	end )
 76	bigaxe:AddComponent("tool")
 77	bigaxe.components.tool:SetAction(ACTIONS.CHOP, 15)
 78	bigaxe:AddTag("bigaxes")
 79	inst.components.stackable:Get():Remove()
 80end
 81	inst:AddComponent("deployable")
 82	inst.components.deployable.ondeploy = OnDeploy
 83local function onsave(inst, data)
 84	if inst:HasTag("bigaxes") then
 85	   data.bigaxes = true
 86	end
 87end
 88local function onload(inst, data)
 89  if data and data.bigaxes then
 90	inst.AnimState:SetBank("Lucy_axe")
 91	inst.AnimState:SetBuild("Lucy_axe")
 92	inst.AnimState:PlayAnimation("idle")
 93	inst.components.inventoryitem:ChangeImageName("lucy")
 94	inst:AddComponent("named")
 95	inst.components.named:SetName("Poleaxe")
 96	inst:RemoveComponent("stackable")
 97	inst:RemoveComponent("deployable")
 98	inst:AddComponent("equippable")
 99	inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
100	inst.components.equippable:SetOnEquip(function(inst, owner)
101		owner.AnimState:OverrideSymbol("swap_object", "swap_lucy_axe", "swap_lucy_axe")
102		owner.AnimState:Show("ARM_carry")
103		owner.AnimState:Hide("ARM_normal")
104		inst.fire = SpawnPrefab( "campfirefire" )
105		local follower = inst.fire.entity:AddFollower()
106		follower:FollowSymbol( owner.GUID, "swap_object", -2, -135, 1 )
107		inst.fire.AnimState:SetMultColour(255/255,0/255,0/255,1)
108		inst.fire:RemoveComponent("heater")
109		inst.fire.persists = false
110	end )
111	inst.components.equippable:SetOnUnequip(function(inst, owner)
112		owner.AnimState:Hide("ARM_carry") 
113		owner.AnimState:Show("ARM_normal") 
114		inst.fire:Remove()
115		inst.fire = nil
116	end )
117	inst:AddComponent("weapon")
118	inst.components.weapon:SetDamage(500)
119	inst.components.weapon:SetOnAttack(function(inst, attacker, target)
120		GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
121		SpawnPrefab("groundpoundring_fx").Transform:SetPosition(attacker.Transform:GetWorldPosition())
122		GetPlayer().components.playercontroller:ShakeCamera(attacker, "FULL", 0.5, 0.05, 2, 40)
123		if target.components.locomotor then target.components.locomotor:Stop() end
124		if target.components.health:GetPercent() < 0.3 then
125		   target.AnimState:SetMultColour(255/255,0/255,0/255,1)
126		end
127		attacker.components.health:DoDelta(150)
128		attacker:StartThread(function()
129			for k = 1, 3 do
130				local blood = SpawnPrefab("splash")
131				blood.Transform:SetPosition(target.Transform:GetWorldPosition())
132				blood.AnimState:SetMultColour(255/255,0/255,0/255,1)
133				blood.Transform:SetScale(2, 2, 2)
134				Sleep(.1)
135			end
136		end )
137		target:AddTag("nomove")
138		target:DoTaskInTime(0.4, function() target:RemoveTag("nomove") end )
139		local pos = Vector3(attacker.Transform:GetWorldPosition())
140		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 8)
141		for k,v in pairs(ents) do
142			if v.components.health and v.components.combat and not v.components.health:IsDead() and not v:HasTag("nomove") then
143			   if v.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == v or v:HasTag("monster") then
144				  SpawnPrefab("explode_small").Transform:SetPosition(v.Transform:GetWorldPosition())
145				  v.components.health:DoDelta(-300)
146				  local pt01 = attacker:GetPosition()
147				  local pt02 = v:GetPosition()
148				  v.Transform:SetPosition((pt02.x-pt01.x)*1.5+pt02.x, 0, (pt02.z-pt01.z)*1.5+pt02.z)
149				  if v.components.locomotor then v.components.locomotor:Stop() end
150				  if v.components.health:GetPercent() < 0.3 then
151					 v.AnimState:SetMultColour(255/255,0/255,0/255,1)
152				  end
153			   end
154			end
155		end
156	end )
157	inst:AddComponent("tool")
158	inst.components.tool:SetAction(ACTIONS.CHOP, 15)
159	inst:AddTag("bigaxes")
160  end
161end
162	inst.OnSave = onsave
163	inst.OnLoad = onload
164
165	即可用蜻蜓鳞片种霸王斧,装备霸王斧攻击时,自动会吸取敌人的血,补充主角生命值,同时震开并伤害周围的敌人(区域攻击),减少你被围殴的机会。霸王斧用来砍树也极其锋利,一斧便可砍倒一棵。蜻蜓鳞片靠打蜻蜓获得,也可在“巨型超市”花9-11个黄金购得