Advertisement
Guest User

Sticky Membrane Lua

a guest
Dec 21st, 2015
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.91 KB | None | 0 0
  1. function StickyMembraneDistanceCheck( keys )
  2.     local caster = keys.caster
  3.     local attacker = keys.attacker
  4.     local ability = keys.ability
  5.     local duration = ability:GetLevelSpecialValueFor("bonus_duration", ability:GetLevel() - 1)
  6.    
  7.     local caster_location = caster:GetAbsOrigin()
  8.     local attacker_location = attacker:GetAbsOrigin()
  9.  
  10.     local damage_pct = ability:GetLevelSpecialValueFor("bonus_damage", ability:GetLevel() - 1)/100
  11.     local attack_damage = attacker:GetAttackDamage()
  12.     damage_stacks = attack_damage * damage_pct
  13.    
  14.     local distance = (caster_location - attacker_location):Length2D()
  15.     print(distance)
  16.     local trigger_radius = ability:GetLevelSpecialValueFor("trigger_radius", (ability:GetLevel() - 1))
  17.    
  18.    
  19.     if distance <= trigger_radius and not attacker:IsMagicImmune() and not attacker:IsBuilding() then
  20.         ability:ApplyDataDrivenModifier(caster, attacker, "modifier_sticky_membrane_disarm", {})
  21.         ability:ApplyDataDrivenModifier(attacker, caster, "modifier_sticky_membrane_bonus", {})
  22.         local stacks = caster:GetModifierStackCount("modifier_sticky_membrane_bonus", ability)
  23.         caster:SetModifierStackCount("modifier_sticky_membrane_bonus", ability, stacks + damage_stacks)
  24.  
  25.         local projTable = {
  26.             Target = caster,
  27.             Source = attacker,
  28.             Ability = ability,
  29.             EffectName = "particles/units/heroes/hero_rubick/rubick_spell_steal.vpcf",
  30.             bDodgeable = false,
  31.             bProvidesVision = false,
  32.             iMoveSpeed = 400,
  33.             iSourceAttachment = DOTA_PROJECTILE_ATTACHMENT_ATTACK_1,
  34.             vSpawnOrigin = attacker:GetAbsOrigin()
  35.         }
  36.         ProjectileManager:CreateTrackingProjectile( projTable )
  37.  
  38.         Timers:CreateTimer(duration, function()
  39.             local remove_stacks = caster:GetModifierStackCount("modifier_sticky_membrane_bonus", ability)
  40.             if caster:HasModifier("modifier_sticky_membrane_bonus") then
  41.                 caster:SetModifierStackCount("modifier_sticky_membrane_bonus", ability, remove_stacks - damage_stacks)
  42.             end
  43.         end)
  44.     end
  45. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement