Создание скила

Maloy

Пользователь
19 Дек 2019
10
0
Проект
rofl
мне надо к скилу добавить что при касте этого скила герой(который кастует этот скил ) умирает с шансом 1%, помогите )
 

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
я бы сделал что-то типо такого, вроде должно работать

Код:
function suicid (keys)
      local unit= keys.caster
    local kill = RandomInt(1,100)
if kill == 1 then
unit:forcekill(true)
end
end
 
Последнее редактирование:
  • Нравится
Реакции: DDSuper

Maloy

Пользователь
19 Дек 2019
10
0
Проект
rofl
я бы сделал что-то типо такого, вроде должно работать

Код:
function suicid (keys)
      local unit= keys.caster
    local kill = RandomInt(1,100)
if kill == 1 then
unit:forcekill(true)
end
end
я не понимаю куда это написать тк как за основу скила у меня взят скил из доты
 

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
со стандартным ничего не выйдет,
пиши скил с 0 или используй spelllibrary
 
  • Нравится
Реакции: almazist1

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
И опять же скажу, что и с дотовским скиллом это можно
можно мне пример?
"luna_lucent_beam"
{
// General
//-------------------------------------------------------------------------------------------------------------
"ID" "5222" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats.
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG"
"FightRecapLevel" "1"
"AbilitySound" "Hero_Luna.LucentBeam.Target"

// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "800"
"AbilityCastPoint" "0.4"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "6.0 6.0 6.0 6.0"


// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "90 100 110 120"

// Stats
//-------------------------------------------------------------------------------------------------------------
"AbilityModifierSupportValue" "0.5" // Mostly about the damage

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"stun_duration" "0.8"
}
"02"
{
"var_type" "FIELD_INTEGER"
"beam_damage" "75 150 225 300"
"LinkedSpecialBonus" "special_bonus_unique_luna_1"
}
}
"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1"
}
 
  • Нравится
Реакции: kain и Niker323

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
можно мне пример?
"luna_lucent_beam"
{
// General
//-------------------------------------------------------------------------------------------------------------
"ID" "5222" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats.
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG"
"FightRecapLevel" "1"
"AbilitySound" "Hero_Luna.LucentBeam.Target"

// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "800"
"AbilityCastPoint" "0.4"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "6.0 6.0 6.0 6.0"


// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "90 100 110 120"

// Stats
//-------------------------------------------------------------------------------------------------------------
"AbilityModifierSupportValue" "0.5" // Mostly about the damage

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"stun_duration" "0.8"
}
"02"
{
"var_type" "FIELD_INTEGER"
"beam_damage" "75 150 225 300"
"LinkedSpecialBonus" "special_bonus_unique_luna_1"
}
}
"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1"
}
есть фильтры, мне не надо вот это кв
 
  • Грусть
Реакции: vulkantsk
20 Дек 2016
892
170
Так лол, нет никакой проблемы это к стандартному скилу добавить. Сразу 3 способа в голову пришло, чуть позже распишу самый простой, если будет время.
 

Дикий Пёс

Друзья CG
28 Июн 2017
411
96
Проект
Petri Reborn
зачем добавлять чтото к стандартным скилам если можно писать свои? и да фильтры первое что приходит в голову
 
20 Дек 2016
892
170
зачем добавлять чтото к стандартным скилам если можно писать свои? и да фильтры первое что приходит в голову
А зачем делать какие-то кастомки, если можно писать свою доту?
Ладно еще, если надо сделать только один скил, и это какой-нибудь бим луны, а не ульта Кробы. Но если понадобится запилить кастомную механику для всех/ряда скилов доты? Не будешь же их все переписывать, тем более что вольво не особо запариваются над сохранением работоспособности API при выпуске патчей, мб пока ты будешь делать вторую половину скилов, первая перестанет работать. По факту даже переписывание одного скила без реального на то основания - бесполезное изобретение велосипеда (который скорее всего и работать будет хуже, чем оригинал, сужу по SpellLibrary. Автору, кончено, респект, но от абилок оттуда тем еще говном несёт)
 
  • Нравится
Реакции: almazist1
20 Дек 2016
892
170
Самый простой способ здесь - слушатель.

Перехожу сюда, и ищу подходящее по смыслу название. (если кто-нибудь вдруг знает, поделитесь плиз ссылкой на актуальный список)

dota_player_used_ability - вроде то, что нужно. Там на сайте еще типо список аргументов прилагается, но лучше распечать таблицу самому и посмотреть, что там.
Код:
ListenToGameEvent( 'dota_player_used_ability', function( kv )
    table.foreach( kv, print )
end, nil )

В примере я буду использовать копьё марса. Вот, что вернула мне консоль.
Код:
abilityname    mars_spear
caster_entindex    745
game_event_listener    1585446915
game_event_name    dota_player_used_ability
PlayerID    0
splitscreenplayer    -1
Как видно, параметров тут намного больше, чем дано на сайте. Это лишь доказывает, что принт неизвестной таблицы в подобных системах - самый рациональный способ узнать, какие же данные у меня есть для дальнейшей работы.

Возьмем только нужное.
abilityname [без комментариев]
caster_entindex - 'entindex' в доте всегда обозначает индекс (уникальный идентификатор) сущности. В данном случае это индекс кастера (того, кто применил способность). Чтобы по индексу получить саму сущность, существует функция EntIndexToHScript

Рабочий код:
Код:
    ListenToGameEvent( 'dota_player_used_ability', function( kv )
        if kv.caster_entindex ~= nil and kv.abilityname == 'mars_spear' then
            local caster = EntIndexToHScript( kv.caster_entindex )
            if caster and not caster:IsNull() then
                if RandomFloat(0,100) <= 1 then
                    caster:ForceKill( true )
                end
            end
        end
    end, nil )


???
Всё.. Я сам вначале думал, что кода будет минимум в 3 раза больше, но задача оказалась прям максимально тривиальной...
 
  • Нравится
Реакции: .фи
Реклама: