Есть кто шарит в этой теме? поможете показать где как надо делать? вот то что у меня получилось адаптировать из EBF кода но он для кв итема, а мне для луа нужно.
Просто уже 3й день маюсь этой штукой и ничего почти не выходит, работает сейчас так: при ударе дает молнию, но только 1 по основной цели, по остальным бьет если для основной цели удар был смертельным и то пускает дальше только 1 молнию.
Код:
function CDOTA_BaseNPC:LightningJump( ability,target,particle )
LinkLuaModifier("modifier_arc_lightning_hammer","lua_item/modifier_arc_lightning_hammer.lua",LUA_MODIFIER_MOTION_NONE)
require('libraries/timers')
local caster = self
local radius = ability:GetSpecialValueFor("lightning_range")
local damage = ability:GetSpecialValueFor("lightning_damage")
local damage_type = ability:GetAbilityDamageType()
local delay = ability:GetSpecialValueFor("lightning_delay")
if not delay then delay = 0.25 end
print("Lightning delay is "..delay)
if not radius then radius = 600 end
print("Lightning radius is "..radius)
if caster:IsRealHero() then
if not target:IsMagicImmune() then
ApplyDamage({victim = target, attacker = caster, damage = damage, damage_type = damage_type})
else
print("Target is magic immune")
end
target:RemoveModifierByName("modifier_arc_lightning_hammer")
print("Remove modifier")
local timer = Timers:CreateTimer(delay,
function()
print("Start Lightning Timer")
local current
for i=0,ability.instance do
if ability.target[i] ~= nil then
if ability.target[i] == target then
current = i
end
end
end
if target.hit == nil then
target.hit = {}
end
target.hit[current] = true
print(ability.jump_count[current].." Jumps")
ability.jump_count[current] = ability.jump_count[current] - 1
print(ability.jump_count[current].." Jumps remaining")
if ability.jump_count[current] > 0 then
local units = FindUnitsInRadius(caster:GetTeamNumber(),
target:GetAbsOrigin(),
nil,
radius,
DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_ALL,
DOTA_UNIT_TARGET_FLAG_NONE,
FIND_ANY_ORDER, false)
local closest = radius
local new_target
for _,unit in pairs(units) do
if unit == target then return end
local unit_location = unit:GetAbsOrigin()
local vector_distance = target:GetAbsOrigin() - unit_location
local distance = (vector_distance):Length2D()
if distance < closest then
if unit.hit == nil then
new_target = unit
closest = distance
elseif unit.hit[current] == nil then
new_target = unit
closest = distance
end
end
end
if new_target then
local ID0 = ParticleManager:CreateParticle(particle, PATTACH_WORLDORIGIN, target)
ParticleManager:SetParticleControl(ID0,0,target:GetAbsOrigin() + target:GetBoundingMaxs().z)
ParticleManager:SetParticleControl(ID0,1,new_target:GetAbsOrigin() + new_target:GetBoundingMaxs().z)
ability.target[current] = new_target
print("New target name "..new_target:GetName())
print("Add new modifier")
new_target:AddNewModifier(caster,ability, "modifier_arc_lightning_hammer", {})
else
print("Ability target Nil 1")
ability.target[current] = nil
end
else
print("Ability target Nil 2")
ability.target[current] = nil
end
end)
end
end
function CDOTA_BaseNPC:NewInstance( ability,target,particle )
local caster = self
if caster:IsRealHero() then
if ability.instance == nil then
print("Create instance")
ability.instance = 0
ability.jump_count = {}
ability.target = {}
else
print("Instance + 1")
ability.instance = ability.instance + 1
print("Instance = "..ability.instance)
end
print("Set target and jump count")
ability.jump_count[ability.instance] = ability:GetSpecialValueFor("jump_count")
print(ability.jump_count[ability.instance].." Jumps count")
ability.target[ability.instance] = target
local ID0 = ParticleManager:CreateParticle(particle, PATTACH_WORLDORIGIN, caster)
ParticleManager:SetParticleControl(ID0,0,caster:GetAbsOrigin() + caster:GetBoundingMaxs().z)
ParticleManager:SetParticleControl(ID0,1,target:GetAbsOrigin() + target:GetBoundingMaxs().z)
end
end
Код:
if modifier_arc_lightning_hammer == nil then modifier_arc_lightning_hammer = class({}) end
function modifier_arc_lightning_hammer:IsHidden( )
return true
end
function modifier_arc_lightning_hammer:OnCreated( )
print("Lightning created")
local ability = self:GetAbility()
print(ability:GetName().." Ability name")
local caster = self:GetCaster()
if not self:GetParent():IsMagicImmune() then
ApplyDamage({victim = self:GetParent(),attacker = caster,damage = ability:GetSpecialValueFor("lightning_damage"),damage_type = DAMAGE_TYPE_MAGICAL})
else
print("Target is magic immune")
end
caster:LightningJump(self:GetAbility(),self:GetParent(),"particles/lightning_custom.vpcf")
end
Код:
if item_lesser_lightning == nil then item_lesser_lightning = class({}) end
LinkLuaModifier("modifier_lesser_lightning_passive","items/item_lesser_lightning.lua",LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier("modifier_arc_lightning_hammer","lua_item/modifier_arc_lightning_hammer.lua",LUA_MODIFIER_MOTION_NONE)
function item_lesser_lightning:GetIntrinsicModifierName( )
return "modifier_lesser_lightning_passive"
end
if modifier_lesser_lightning_passive == nil then modifier_lesser_lightning_passive = class({}) end
function modifier_lesser_lightning_passive:IsHidden( )
return true
end
function modifier_lesser_lightning_passive:IsPurgable( )
return false
end
function modifier_lesser_lightning_passive:DeclareFunctions( )
return {MODIFIER_EVENT_ON_ATTACK_LANDED,MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE}
end
function modifier_lesser_lightning_passive:GetModifierPreAttack_BonusDamage( )
return self:GetAbility():GetSpecialValueFor("dmg")
end
function modifier_lesser_lightning_passive:GetModifierAttackSpeedBonus_Constant( )
return self:GetAbility():GetSpecialValueFor("atk")
end
function modifier_lesser_lightning_passive:GetModifierOrbPriority( )
return DOTA_ORB_PRIORITY_ITEM_UNIQUE
end
function modifier_lesser_lightning_passive:OnAttackLanded( params )
local caster = self:GetCaster()
local ability = self:GetAbility()
local chance = ability:GetSpecialValueFor("chance")
if params.attacker == caster then
if RollPercentage(100) then
if self:IsActiveOrb() then
print("Start Lightning")
params.target:AddNewModifier(caster,ability,"modifier_arc_lightning_hammer",{})
caster:NewInstance(ability,params.target,"particles/lightning_custom.vpcf")
end
end
end
end
Последнее редактирование модератором: