Простые вопросы #2

Статус
В этой теме нельзя размещать новые ответы.
Как можно заглушить определённую способность и потом её активировать? (Как крутилка Джаггера блокирует использование ульты)
 
Последнее редактирование:
Как можно заглушить определённую способность и потом её активировать? (Как ульт Джаггера блокирует использование омнислеша)
Скорее всего это прописано в коде конкретно для омнислеша, варда и крутилки, так как остальные способности можно использовать прямо в ульте.
Прописываешь в OnSpellStart способности нужную проверку и если ее нужно блокировать, то записываешь куда-то, что ее нужно потом вызвать, а также:
Lua:
self:RefundManaCost()
self:EndCooldown()
А затем активируешь
Lua:
CDOTA_BaseNPC:CastAbilityNoTarget(handle ability, int playerIndex)
--либо так, если нужно кастовать прям мгновенно.
CDOTABaseAbility:CastAbility()
 
Скорее всего это прописано в коде конкретно для омнислеша, варда и крутилки, так как остальные способности можно использовать прямо в ульте.
Прописываешь в OnSpellStart способности нужную проверку и если ее нужно блокировать, то записываешь куда-то, что ее нужно потом вызвать, а также:
Lua:
self:RefundManaCost()
self:EndCooldown()
А затем активируешь
Lua:
CDOTA_BaseNPC:CastAbilityNoTarget(handle ability, int playerIndex)
--либо так, если нужно кастовать прям мгновенно.
CDOTABaseAbility:CastAbility()
Может он имеет ввиду как топоры у тролля?
 
что делать если кастомка бесконечно публикуется или обновляется?
 
Подскажите пожалуйста, вот я выдрал в недрах форума вот такой код:
Код:
function CAddonTemplateGameMode:OnEntityKilled( keys )
    local killed_unit = EntIndexToHScript( keys.entindex_killed )
    local killer = EntIndexToHScript( keys.entindex_attacker )

    if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
        for i = 0, PlayerResource:GetPlayerCount() - 1 do
            local gold = 322 -- кол-во голды
            local player = PlayerResource:GetSelectedHeroEntity(i)
            if player:GetTeam() == killer:GetTeam() then
                player:ModifyGold( gold, true, 0 )
            end
        end
    end
end
он дает 322 голды за убийство крипа всей команде, не важно как далеко от крипа ты находился и был ли мертв.
Я был бы очень благодарен если бы вы мне помогли понять или подправить этот код, чтобы голду давало только живым героям и в определенном радиусе от крипа.
И еще вопрос, если у меня 20 видов крипов и я хочу чтобы за каждого из них давало по разному, то мне надо 20 таких функций?
И что делать с опытом, сейчас он работает как надо, но из npc_units_custom. Т.е. там например 200 опыта за крипа делится между героями в определенном радиусе. или это не правильно?
 
Подскажите пожалуйста, вот я выдрал в недрах форума вот такой код:
Код:
function CAddonTemplateGameMode:OnEntityKilled( keys )
    local killed_unit = EntIndexToHScript( keys.entindex_killed )
    local killer = EntIndexToHScript( keys.entindex_attacker )

    if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
        for i = 0, PlayerResource:GetPlayerCount() - 1 do
            local gold = 322 -- кол-во голды
            local player = PlayerResource:GetSelectedHeroEntity(i)
            if player:GetTeam() == killer:GetTeam() then
                player:ModifyGold( gold, true, 0 )
            end
        end
    end
end
он дает 322 голды за убийство крипа всей команде, не важно как далеко от крипа ты находился и был ли мертв.
Я был бы очень благодарен если бы вы мне помогли понять или подправить этот код, чтобы голду давало только живым героям и в определенном радиусе от крипа.
И еще вопрос, если у меня 20 видов крипов и я хочу чтобы за каждого из них давало по разному, то мне надо 20 таких функций?
И что делать с опытом, сейчас он работает как надо, но из npc_units_custom. Т.е. там например 200 опыта за крипа делится между героями в определенном радиусе. или это не правильно?
1)FindUnitsInRadius() IsAlive()
2)нет, тебе нужно 20 проверок на имена юнитов, или через массив сделай... то есть таблицу, как её тут
3)?????
 
1)FindUnitsInRadius() IsAlive()
2)нет, тебе нужно 20 проверок на имена юнитов, или через массив сделай... то есть таблицу, как её тут
3)?????

Я пока только учусь, так что был бы рад более развернутой помощи) вот глянь я хоть на верном пути?
Код:
function CAddonTemplateGameMode:OnEntityKilled( keys )
    local killed_unit = EntIndexToHScript( keys.entindex_killed )
    local killer = EntIndexToHScript( keys.entindex_attacker )
    if killed_unit:GetUnitName() == "npc_dota_neutral_kobold" then
    local enemies = FindUnitsInRadius( DOTA_TEAM_NEUTRALS, tpoint, FIND_UNITS_EVERYWHERE, 300, DOTA_UNIT_TARGET_TEAM_NONE, DOTA_UNIT_TARGET_ALL, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false )
    if #enemies > 0 then
    for _,enemy in pairs( enemies ) do
            local gold = 322 -- кол-во голды
            local player = PlayerResource:GetSelectedHeroEntity(i)
            if player:GetTeam() == killer:GetTeam() then
                player:ModifyGold( gold, true, 0 )
            end
        end
    end
end

а 3-й пункт вот в чем состоит: в файле npc_units_custom, есть строка которая отвечает за эксп и год у крипа, и вот там эксп при смерти крипа дается всем кто рядом, а голд естественно только добившему. Поэтому я и спрашиваю, правильно ли я делаю что эксп задаю только там и нигде больше, а голд в ЛУА пишу
 
Как задать минимальную скорость передвижения или запретить некоторым героям и юнитам передвигаться? Дота позволяет только 100 мса сделать, не меньше. А нужно, чтобы скорость была равна 0, но при этом все функции героя сохранялись.
 
Как задать минимальную скорость передвижения или запретить некоторым героям и юнитам передвигаться? Дота позволяет только 100 мса сделать, не меньше. А нужно, чтобы скорость была равна 0, но при этом все функции героя сохранялись.
MODIFIER_PROPERTY_MOVESPEED_LIMIT
на 1 либо на -1 установи
 
Как работает блокирование снарядов у 1 скилла клинка? И можно их отражать обратно во врагов?
 
Здравствуйте у меня вопрос, как сделать что бы через определенное время менялась карта
Например: Была карта номер 1 прошло 5 минут и карта поменялась на 2?
 
Как работает блокирование снарядов у 1 скилла клинка? И можно их отражать обратно во врагов?
Скорее всего только делать каждые 0.03 ProjectileManager:ProjectileDodge( unit )
Отразить снаряд в валвовской системе снарядов нельзя. Можно только отразить таргетную способность MODIFIER_PROPERTY_REFLECT_SPELL
 
Здравствуйте у меня вопрос, как сделать что бы через определенное время менялась карта
Например: Была карта номер 1 прошло 5 минут и карта поменялась на 2?
Саму карту вроде нельзя, но это тебе к разрыву crumbling island arena или чека на его гитхабе. У него вроде что-то с островам там.
 
к разрыву..
Здравствуйте у меня вопрос, как сделать что бы через определенное время менялась карта
Например: Была карта номер 1 прошло 5 минут и карта поменялась на 2?
Делаешь несколько локаций в одной карте, а потом ограничиваешь движение камеры при смене раундов
Код:
SpawnEntityFromTableSynchronous( "world_bounds", { Min = Vector( 2, 2, 8 ), Max = Vector( 3, 2, 2) } )
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: