32

» WarCraft 3 / Как создать способность

Ну вот пример на jass:
код
function Trig_Surge_Expires_Conditions takes nothing returns boolean
    local trigger trg = GetTriggeringTrigger()
    local integer id = GetHandleId(trg)
    local unit targ = LoadUnitHandle( HashData, id, 0 )
    call DisableTrigger(trg)
    
    call UnitRemoveAbility( targ, 'A0C9' )
    call UnitRemoveAbility( targ, 'B07W' )
    
    call RemoveSavedHandle( HashData, ExSurge, GetHandleId(targ))
    call FlushChildHashtable( HashData, id )
    call S0I(trg)
    set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
    if trg == null then
        //call SetUnitPathing( targ, true )
    endif
    
    set targ = null
    set trg = null
    return false
endfunction

function Trig_Surge_Actions takes nothing returns nothing
    local unit targ = GetSpellTargetUnit( )
    local real dur = RMaxBJ( 1.50 * GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) + 1.50, 3.01 )
    local trigger trg  = LoadTriggerHandle( HashData, ExSurge, GetHandleId(targ) )
    local integer id 
    
    if trg != null then
        call TriggerEvaluate(trg)
    endif
    set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
    if trg != null then
        call TriggerEvaluate(trg)
    endif
    
    set trg = CreateTrigger()
    set id = GetHandleId(trg)
    call SaveTriggerHandle( HashData,ExSurge, GetHandleId(targ), trg )
    call SaveUnitHandle( HashData, id, 0, targ )
    
    call TriggerAddCondition( trg, Condition(function Trig_Surge_Expires_Conditions ) )
    call TriggerRegisterDeathEvent( trg, targ )
    call TriggerRegisterTimerEvent( trg, dur, false )
    call UnitAddAbility( targ, 'A0C9' )
    call UnitMakeAbilityPermanent( targ, true, 'A0C9' ) 
    call SetUnitAbilityLevel( targ, 'A0C9', GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) )
    call AuraUpdateEffect( targ, 'A0R7' )
    call IO1(UD,GetUnitX(targ),GetUnitY(targ))
    call DestroyEffect(AddSpecialEffectTarget("effects\\Surge.mdx",targ,"origin"))
    
    if not IsUnitType( targ,UNIT_TYPE_FLYING)then
         //call SetUnitPhased(targ)
    endif
    
    set targ = null
    set trg = null
endfunction

function  Trig_Surge_Conditions takes nothing  returns boolean
     if GetSpellAbilityId() == 'A0R7' then
        call Trig_Surge_Actions()
     endif
    return false
endfunction

function Register_Surge takes nothing returns nothing
    local trigger trg = CreateTrigger( )
    local integer nIndex = 1
    call TriggerAddCondition( trg, Condition( function Trig_Surge_Conditions ) )
    loop
        exitwhen nIndex > 11
    
        if IsSlotPlayer( Player( nIndex ) ) then
            call TriggerRegisterPlayerUnitEvent( trg, Player( nIndex ), EVENT_PLAYER_UNIT_SPELL_EFFECT, OnlyHero )
        endif
        set nIndex = nIndex + 1
    endloop
    
    set trg = null
endfunction
Это код способности surge, из доты, когда то давно делал. Ну собственно тут довольно примитивный код и как раз пример как нужно следить за юнитом, тут реализован и диспел и перебивание баффа при повторном применении, это не намного сложнее кастомного сна, который я описал выше.
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
32

» WarCraft 3 / Как создать способность

ну почему, собьет, только он ударит - или нанесет урон спеллом, жертва проснется и высасывание прекратится, реализовать конечно можно и иначе.
32

» WarCraft 3 / Как создать способность

rsfghd, конечно можно, то что баффы паузятся - ну кроме мемхака особо ниче не сделать. Тут увы, нужно это учитывать.
32

» WarCraft 3 / Как создать способность

Принятый ответ
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
32

» IrInA Host Bot / Game.dll

LaBlinov369, это хакнутая версия game.dll, в ней исправили лимит карт для мультиплеера, запомните на айкап дорога закрыта с ним, айкап лаунчер считает что с игрой чето нетак. Снимать лимит, не трогая целостность файлов игры умеют многие проги, тот же WFE, был даже отдельный микс файл для снятия лимита.
32

» WarCraft 3 / Автокаст прожимных навыков

Принятый ответ
Механику каста ты никак не изменишь у дефолтных способностей, Берёшь автокаст пустышку к примеру ярость огра, или ледяной щит,и триггерно из них делаешь эти абилки.
32

» WarCraft 3 / Использование ShellExecute

Ну как же, винда вам даст формат диска, ага. Есть 100500 способов без мемхака сделать пакость юзеру, ну это лишено смысла - ибо чтобы это работало, вам нужна популярная карта, своя популярная карта на создание которой уйдет уйма времени и сил, другие популярные карты висят на хостботах, и ваша ломаная версия никому не уперлась, к вам даже не зайдут. Дальше то что?
32

» WarCraft 3 / Друг

Мне нравится ваш подход, найти халявного учителя, а то и работника...
32

» WarCraft 3 / Как сделать всплывающий урон от такой способности?

Принятый ответ
FriendlyGuest, такие способности делаются не так, у вас ошибка в реализации, если ты хочешь спелл со снярядом, то либо ты делаешь триггерный снаряд и спелл пустышку или хитрость с детекиом урона. При касте молотка бурь, ты создаёшь новый триггер с событием - время вышло ( примерное время полёта снаряда, от 0.6 до 3 сёк), событие цель умирает, событие цель получила урон. В условии делаются все действия, если триггер сработал от истечения времени или от смерти, то утилизируем триггер, иначе проверяем урон, он ровно 0.00, урон от кластера и цель имеет бафф стана, тогда наносим полный урон по формуле. Сам молоток урона не наносит, такая реализация позволяет юзать без проблемно все дефолт абилки со снарядами и дебаффом, чётко отслеживаю их попадание и промахи или блок амулет защиты. Разумеется на гуи нехватает инструментов для этого и это делается на jass, но код очень прост, могу сделать пример как буду дома.
32

» WarCraft 3 / Ресурсы карт

На будущее, карты в студию, как и наработки, ссылки, то не понятно что за спел и что конкретно он требует для своей работы.
32

» WarCraft 3 / Обучение jass

С массивами тоже не все так просто, но это все хрень, в реальной игре такого нет как и такого обьёма данных, по 10к+ записей, это все ахинея и не заслуживает внимания. Нет ничего плохого ни в глобалках ни в хештаблице, и ненадо пытается все на массивах делать или исключительно все на хт.
32

» WarCraft 3 / Обучение jass

Vlod, ага, там много ошибок и глупостей. Но факт что хт не нужно боятся, они не настолько медленные чтобы отказыватся, разница - одно обращение к хт = 2 обращения к массиву примерно, в мемхаке анрайза есть тест на скорость, можите попробовать, сравнить разницу.
32

» WarCraft 3 / Как сделать всплывающий урон от такой способности?

Немного не понял что хотите добится, и причем тут полный урон?
При касте способности цели мгновенно наносится урон по формуле 'Уровень способности Х 2 х ловкость героя, включая бонусы на момент каста', вроде все верно но не мешало бы использовать переменные и вычислить урон 1 раз, не делая рассчет 2 раза, для функции урона и для функции текстага.
Если вам нужен урон с учетом резиста - тут нужен отдельный триггер с событием юнит получает урон, условием что урон выше 0, ну и действием записать входящий урон в глобальную переменную, из которой вы прочитаете кол-во урона с учетом резистов в своем триггере, т.к событие урона сработает раньше реального нанесения урона.
32

» WarCraft 3 / Обучение jass

Потом видосики мало помогают, нужно запоминать Хотя-бы базовые функции и синтаксис, а по видео это не сделать, особенно с такими предметами.
32

» WarCraft 3 / Обучение jass

Народ наверное от такого обучения точно забьёт варкравт.
32

» WarCraft 3 / Модели зданий и юнитов

Ну есть ещё вариант прям с игры скриншотить и вырезать, запустили, сделали скрин и с него вырезали.
32

» WarCraft 3 / Рекомендации по успешным проектам

МрачныйВорон, есть еще Infection attack - тоже ниче такая карта, идея интересная, реализация хромает, дикие лаги в конце игры из за утечек.
32

» WarCraft 3 / Магазин на фреймах

Анрайз оставил тест, для измерения скорости работы функций, в попугаях конечно, но даёт понять насколько сильно различается ресурсоемкость функций, какие то более быстрее а какие то медленные. Можите по сравнивать ваш код, и наглядно сравнить что даёт оптимизация, и какова разница между нативками и кастом кодом.
32

» WarCraft 3 / Магазин на фреймах

Просто стоит учитывать что вызов внутринних функций игры посредством мемхака очень ресурсоемкий, и юзать все эти callthis, stdcall нужно с умом.
Нативки или код в движке гораздо шустрее, потому все и пилят Длл с этими магазинами, талантами и тому подобным, ибо когда в карте и без того много чего, 6 кадров обеспечено, не стоит юзать функции этого типа бездумно.
32

» WarCraft 3 / Рекомендации по успешным проектам

Vlod, вопрос в другом - как ты расскажешь другим игрокам о твоей карте, кроме рекламы? То что кому то зайдет, а кому то нет - офк, так всегда, ептить есть люди которые за годы игр в варкрафте не играли ниразу в доту, ниче такого в этом нет, не нравится, не интересно. Но ваша карте чудесным образом не появится в папочке "maps" всех игроков платформы.
То что у всех свои интересы, тоже совершенно нормально, кому то подавай рпг, кому то арены, я вот от тдшек и таг карт фанатею (петры имхо баганая имбалансная карта), кто то кроме доты ниче не признает, ну многие балдеют от минигр вроде are you lucker или Uther paty - в них кстати норм играть именно с друзьями.
32

» WarCraft 3 / Рекомендации по успешным проектам

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