CustomGames.ru - Dota 2 пользовательские игры

Сплэш для дальнего боя

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kkee

  • 9
  • Мощь: 0
Сплэш для дальнего боя
« : 04-04-2016, 12:44:05 »
кто может скинуть скрипт сплэша на дальников и txt и lua и объяснить как это делается?
« Последнее редактирование: 04-04-2016, 16:03:31 от -ExotiC- »

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: скрипт
« Ответ #1 : 04-04-2016, 14:03:05 »
кто может скинуть скрипт сплэша на дальников и txt и lua и объяснить как это делается?
Есть отличная команда о которой я ток недавно узнал
Код
hero:PerformAttack(hTarget, bUseCastAttackOrb,bProcessProcs, bSkipCooldown, bIgnoreInvis)
Она совершает атаку на выбраного юнита. Так что ты можешь просто искать рядом с врагом других врагов и используя эту команду делать сплеш.
Ну или использовать стандартную дотовскую:
Код
DoCleaveAttack
Подробнее:
https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API/Global.DoCleaveAttack

Оффлайн kkee

  • 9
  • Мощь: 0
Re: скрипт
« Ответ #2 : 04-04-2016, 14:41:33 »
мне нужен скрипт предмета сплеша типо battlefury

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: скрипт
« Ответ #3 : 04-04-2016, 14:47:22 »
мне нужен скрипт предмета сплеша типо battlefury
Тут насколько я знаю не очень любят давать все готовое.

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: скрипт
« Ответ #4 : 04-04-2016, 14:53:02 »
Тут насколько я знаю не очень любят давать все готовое.

Хахахах, в точку.

Однако, сколько ни учи, все равно каждый раз по новой приходят люди и хотят готовенькое. Поэтому я решил давать готовенькое: нервы экономятся. 


kkee, если хочешь готовенькое, то придется ждать. Сколько - не известно. Лично у меня нет времени на предмет.  Может кто-то тебе и сделает. 

А так, Cry тебе все необходимое уже сказал.

Оффлайн kkee

  • 9
  • Мощь: 0
Re: скрипт
« Ответ #5 : 04-04-2016, 15:54:24 »
crydes а можешь дать исходники ангел арены?

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: скрипт
« Ответ #6 : 04-04-2016, 16:05:57 »
crydes а можешь дать исходники ангел арены?
Неа :)

Оффлайн kkee

  • 9
  • Мощь: 0
Re: Сплэш для дальнего боя
« Ответ #7 : 04-04-2016, 16:33:03 »
я холи буку посмотреть хотел

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Сплэш для дальнего боя
« Ответ #8 : 04-04-2016, 16:35:38 »
Если научишься искать инфу, то найдешь на форуме способ залезть в его код.

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Сплэш для дальнего боя
« Ответ #9 : 04-04-2016, 16:46:14 »
я холи буку посмотреть хотел
Файл снарядов я где то уже на форуме кидал вроде.
Спойлер
Код
local projectiles = require("heroes/projectiles")

function HolyBook_attack( keys )
local caster = keys.caster
if caster and not caster:IsRealHero() then return end
local target = keys.target
local ability = keys.ability

local position = keys.target:GetAbsOrigin()
local team = keys.target:GetOpposingTeamNumber() 
local radius = keys.Radius
local damage_percent = keys.ability:GetLevelSpecialValueFor( "damage_percent", keys.ability:GetLevel() - 1 )

local damage = keys.Damage*(damage_percent/100)
local fly_time
local projectile_temp = projectiles[caster:GetUnitName()]
local projectile_model, projectile_speed

if projectile_temp then
projectile_model = projectile_temp.model
projectile_speed = projectile_temp.speed
else
projectile_model = ""
projectile_speed = 2000
end

local is_first = false
for i = 0, 5 do
local item = caster:GetItemInSlot(i)

if item then
if (item:GetName() == "item_holy_book" or item:GetName() == "item_holy_book_2" ) and not is_first then
if item ~= ability and caster:GetUnitName() == "npc_dota_hero_storm_spirit" then damage = damage/2.5 end
if item ~= ability then damage = damage/2 end

is_first = true
end
end
end

local units = FindUnitsInRadius(team, position, nil, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false)
local caster_attack_speed = caster:GetAttacksPerSecond()

for _, x in pairs(units) do
if x ~= keys.target then
if x and caster and x:GetTeamNumber() ~= caster:GetTeamNumber() and IsValidEntity(x) and x:IsAlive() then

if projectile_model and caster_attack_speed < 8 then
local info = {
      Target = x,
        Source = keys.target,
        EffectName = projectile_model,
        bDodgeable = false,
        bProvidesVision = true,
        iMoveSpeed = projectile_speed,
        iVisionRadius = 0,
        iVisionTeamNumber = caster:GetTeamNumber(),
    }
    ProjectileManager:CreateTrackingProjectile( info )
    fly_time = FindDistance(x:GetAbsOrigin(), position) / projectile_speed
    else
    fly_time = 0.1
    end
    Timers:CreateTimer(fly_time, function()
      if x and IsValidEntity(x) and x:IsAlive() and caster and IsValidEntity(caster) then
      if x:GetUnitName() == "npc_dota_hero_meepo" then
      damage = damage/4
      end
      if target then
      if x:IsIllusion() or target:IsIllusion() then
      damage = damage / 5
      end
      else
      if x:IsIllusion() then
      damage = damage / 5
      end
      end
      ApplyDamage({ victim = x, attacker = caster, damage = damage, damage_type = DAMAGE_TYPE_PURE })
      end
      return nil
  end )
end

end
end
end

function FindDistance(vec1, vec2)
return math.sqrt(math.abs(vec1.x - vec2.x)^2 + math.abs(vec1.y - vec2.y)^2 + math.abs(vec1.z - vec2.z)^2 )
end
[свернуть]
« Последнее редактирование: 04-04-2016, 16:50:22 от CryDeS »

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Сплэш для дальнего боя
« Ответ #10 : 04-04-2016, 16:49:04 »
Но можно сделать проще.
Код
function HolyBook_attack( keys )
local caster = keys.caster
if caster and not caster:IsRealHero() then return end
local target = keys.target
local ability = keys.ability

local position = keys.target:GetAbsOrigin()
local team = keys.target:GetOpposingTeamNumber() 
local radius = keys.Radius
local damage_percent = keys.ability:GetLevelSpecialValueFor( "damage_percent", keys.ability:GetLevel() - 1 )

local damage = keys.Damage*(damage_percent/100)

local units = FindUnitsInRadius(team, position, nil, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NO_INVIS, 0, false)

for _, unit in pairs(units) do
caster:PerformAttack(unit, false, false, false, false, true)
end
end

Оффлайн kkee

  • 9
  • Мощь: 0
Re: Сплэш для дальнего боя
« Ответ #11 : 04-04-2016, 16:51:11 »
а куда эту функцию заливать?

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Сплэш для дальнего боя
« Ответ #12 : 04-04-2016, 16:57:04 »
а куда эту функцию заливать?
Давай ка ты чутка почитаешь гайдики и потом придешь, мб поймешь лучше куда заливать.

Оффлайн kkee

  • 9
  • Мощь: 0
Re: Сплэш для дальнего боя
« Ответ #13 : 04-04-2016, 16:59:27 »
в npc_items_custom и там предмет свой?

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Сплэш для дальнего боя
« Ответ #14 : 04-04-2016, 17:01:23 »
в npc_items_custom и там предмет свой?
Ага. И событие в модификаторе OnAttackLanded