28

» WarCraft 3 / Способности и алгоритмы на заказ

Заказ принят

Заказчик: Roy Mustang
Способность: Cyclop Slam
Спелл будет завершен к: без понятия, мб сегодня

остальные спеллы я не в силах сделать ибо хз как запретить контроль над юнитом без мемхака или морфа, но морф не оч хорошо если юниты разные и их много, максимум это отдавать каждые 0.01 сек бежать в точку, чтобы любые другие приказы перебивались, это могу без проблем, хотя какие-то мгновенные касты, без какой-либо задержки (в основном это для даммиков) всё-равно сработают

а захват и бросок это уже надо делать ориентир на саму модель, мб крепить эффект юнита к руке циклопа, это надо маленькую бд делать
наверняка на рефе есть все нужные функции для этих спеллов и там делается одной строчкой
28

» WarCraft 3 / Как запустить один раз стандартный музыкальный трек?

native PlayThematicMusic takes string musicFileName returns nothing
"Музыкальная тема будет проиграна один раз, затем возобновится музыка игры."
28

» WarCraft 3 / Массовая атака

я проверил, и я был прав, если правильно настроить артиллерию то урона по союзникам не будет

а вот и док-ва
Загруженные файлы
28

» WarCraft 3 / Массовая атака

вроде как для артиллерии есть доп. условия урона по целям
28

» WarCraft 3 / Способности и алгоритмы на заказ

Заклинание готово!

Заказчик: KarlikKukold
Способность: Пироапокалипсис
Выполнено: Да

Копируешь абилки, москитов и папку с триггерами в свою карту, отделённый комментарием триггер удаляешь, кол-во столбов настраивается в триггере каста, в цикле, их рандомное появление выбираешь на своё усмотрение, я сделал 4 доп столба на +90 градусов каждый
Загруженные файлы
28

» Блог пользователя under11 / Chain Frost

Гуванч, ну так-то ты на то время знал уже вджасс, но всё равно по коду юзал порой не очень красивые примеры, как создание и удаление группы, вместо темповой глобалки
но я поддерживал твоё стремление клепать абилки, до одного момента
28

» INDIVID.GAME / Cursader Night [Конкурс становления героев]

Kirka_Karma, посмотрел видео до конца, не в темпе повествования дело, а в том, что непонятно куда нужно направляться. Поиски для следующего синематика занимают много времени
28

» WarCraft 3 / [Конкурс становления героев] Crusader

Ronnie, фонтан наполняется на самом деле, просто там беда с анимками и я хз как исправить, пробовать по индексу проигрывать мб

Карта совсем не та, которую мы изначально хотели видеть, Макс лвл тут 5. Всего уровней прокачки до 12 уровня, это мы ещё будем править

Так же прошу не сворачивать игру, а то там бывают какие-то баги с музыкой

Bergi_Bear, да, заменил дизейбл иконок на стан юнита

Но если хочешь можешь подождать, пока я закину прокачку до 12 уровня, когда можно будет прокачать и посмотреть на все улучшения абилок

хотя, улучшения по факту отличаются скейлом эффектов абилок и характеристиками, искл. щит, там несколько моделей юзается и для ярости отдельная в т.ч.
28

» WarCraft 3 / Отсылка к всем игрокам.

а как тогда отослаться к юниту любого игрока, подконтрольному чело8еку, при натравливании на него крипов?
выбрать рандомного юнита из группы юнитов - юниты на всей карте при условии что владелец игрок и юнит жив
28

» WarCraft 3 / Memory hack API v1.4

quq_CCCP, а постоянно обновляемого реса с мх нет? получается самая новая версия то, что ты сейчас в комменты закинул?
28

» WarCraft 3 / Способности и алгоритмы на заказ

Заклинание готово!

Заказчик: Komkozavr
Способность: Магические сети
Выполнено: Да

Спелл не муи, то бишь юзать может только один юнит, выбираются юниты рандомно, варом для поимки в сеть (если требуется - переделаю под самых ближних к точке), кол-во юнитов для поимки выставляется переменной TempInteger, ты найдёшь её в триггере каста, всё остальное в принципе в ро настраивается
Если нужно было прям кастомную поимку лассо вара сделать, то только на в/джассе
Импортнуть думаю не составит труда, но на всякий случай.. Копируешь папку с триггерами и закидываешь в свою карту, абилки настраиваешь у себя в ро и выставляешь по триггерам где они требуются, абилки и москитов перекопируешь тупо, триггер отделённый комментарием тебе не нужен, удалишь
Загруженные файлы
28

» WarCraft 3 / Исчезающая иконка способности и отсутствие срабатывания

Lodnar, оно не должно так ломать абилки, вероятно криво настроенный канал

Автору советую убрать длительность графики и следовать в течении времени

Так же почитать как правильно настраивать способность пустышку на основе канала
28

» WarCraft 3 / Способности и алгоритмы на заказ

Заклинание готово!

Заказчик: Стас Орлов
Способность: Laughing Skull
Выполнено: Да

Инструкция по импорту
Скопировать триггер Spell в свою карту, иметь инициализированную хэш-таблицу в редакторе переменных под названием H, если уже есть переменная с таким названием - то делай хэш-таблицу с другим названием, благодаря редактору джнгп ты можешь автозаменой пройтись по коду и заменить udg_H на udg_названиеПеременной, либо скопировать код в какой-нибудь текстовик и там заменить, закинув после обратно в редактор
Желательно чтобы ты запрелоадил юнитов и скиллы, первый каст подлагивает на 0.01 сек на моём древнем компе. Так же я не проверял наличие утечек
Настройки все в коде, делал исключительно на джассе, юзал некоторые вариковские переменные, так что имей ввиду, спелл муи
Если что-то не так или работает не так, как ты хотел - пиши
Сам спелл хотелось бы на вджассе конечно сделать
Ах да, тип урона и атаки там статичны и настраиваются непосредственно в нанесении урона, но раз уж ты попросил искл. на джассе это сделать, то я думаю ты шаришь за него и сможешь настроить как надо
код
function DestroyEffectEx takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    call DestroyEffect( LoadEffectHandle( udg_H, GetHandleId( t ), 0 ) )
    call FlushChildHashtable( udg_H, GetHandleId( t ) )
    call DestroyTimer( t )
    set t = null
endfunction

function rCond takes nothing returns boolean
    local unit u = GetFilterUnit( )
    
    if IsUnitEnemy( u, bj_groupEnumOwningPlayer ) and not IsUnitType( u, UNIT_TYPE_DEAD ) and u != bj_lastReplacedUnit then
        set bj_groupRandomConsidered = bj_groupRandomConsidered + 1
        if GetRandomInt( 1, bj_groupRandomConsidered ) == 1 then
            set bj_groupRandomCurrentPick = u
        endif
    endif
    
    set u = null
    return false
endfunction

function rMove takes nothing returns nothing
    local timer t
    local integer i   = GetHandleId( GetExpiredTimer( ) )
    local unit caster
    local unit dummy  = LoadUnitHandle( udg_H, i, 1 )
    local unit target = LoadUnitHandle( udg_H, i, 2 )
    local real x  = GetUnitX( dummy )
    local real y  = GetUnitY( dummy )
    local real x1 = GetUnitX( target )
    local real y1 = GetUnitY( target )
    local real a  = Atan2( y1 - y, x1 - x )
    local real s  = LoadReal( udg_H, i, 7 )
    local real sc
    local real fly
    local real d
    local boolean b
    local boolean b1 = false
    local integer c
    local group g
    local boolexpr bb
    
    set d = SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) )
    
    set x = x + s * Cos( a )
    set y = y + s * Sin( a )
    
    if SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) ) > d then
        set b1 = true
        set x = x1
        set y = y1
    endif
    
    call SetUnitX( dummy, x )
    call SetUnitY( dummy, y )
    call SetUnitFacing( dummy, a * bj_RADTODEG )
    
    if b1 or SquareRoot( ( x - x1 ) * ( x - x1 ) + ( y - y1 ) * ( y - y1 ) ) <= LoadReal( udg_H, i, 8 ) or GetUnitTypeId( target ) == 0 then
        set c = LoadInteger( udg_H, i, 9 )
        set b = false
        set caster = LoadUnitHandle( udg_H, i, 0 )
        set bj_groupEnumOwningPlayer  = GetOwningPlayer( caster )
        
        if GetUnitTypeId( target ) != 0 then
            set bj_lastCreatedUnit = CreateUnit( bj_groupEnumOwningPlayer, LoadInteger( udg_H, i, 11 ), x, y, a * bj_RADTODEG )
            call UnitAddAbility( bj_lastCreatedUnit, LoadInteger( udg_H, i, 12 ) )
            call IssueTargetOrder( bj_lastCreatedUnit, "thunderbolt", target )
            call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 0.50 )
            
            call UnitDamageTarget( caster, target, LoadReal( udg_H, i, 3 ), false, false, null, null, null )
            
            set t = CreateTimer( )
            call SaveEffectHandle( udg_H, GetHandleId( t ), 0, AddSpecialEffectTarget( LoadStr( udg_H, i, 13 ), target, LoadStr( udg_H, i, 14 ) ) )
            call TimerStart( t, LoadReal( udg_H, i, 6 ), false, function DestroyEffectEx )
            set t = null
        endif
        
        if c <= 0 then
            set b = true
        else
            set g  = CreateGroup( )
            set bb = Condition( function rCond )
            
            set bj_groupRandomConsidered  = 0
            set bj_groupRandomCurrentPick = null
            set bj_lastReplacedUnit       = target
            
            call GroupEnumUnitsInRange( g, x, y, LoadReal( udg_H, i, 4 ), bb )
            call DestroyGroup( g )
            set g = null
            
            if bj_groupRandomCurrentPick == null then
                set b = true
            endif
        endif
        
        set fly = GetUnitFlyHeight( dummy )
        call KillUnit( dummy )
        
        if b then
            call PauseTimer( GetExpiredTimer( ) )
            call DestroyTimer( GetExpiredTimer( ) )
            call FlushChildHashtable( udg_H, i )
        else
            set dummy = CreateUnit( bj_groupEnumOwningPlayer, LoadInteger( udg_H, i, 10 ), x, y, Atan2( GetUnitY( bj_groupRandomCurrentPick ) - y, GetUnitX( bj_groupRandomCurrentPick ) - x ) * bj_RADTODEG )
            call UnitAddAbility( dummy, 'Arav' )
            call SetUnitFlyHeight( dummy, fly, 0.00 )
            set sc = LoadReal( udg_H, i, 5 )
            call SetUnitScale( dummy, sc, sc, sc )
            
            call SaveUnitHandle( udg_H, i, 1, dummy )
            call SaveUnitHandle( udg_H, i, 2, bj_groupRandomCurrentPick )
            call SaveInteger( udg_H, i, 9, c - 1 )
        endif
        
        set caster = null
    endif

    set dummy  = null
    set target = null
endfunction

function rSpell_Actions takes nothing returns nothing
    local timer t     = CreateTimer( )
    local unit caster = GetTriggerUnit( )
    local unit target = GetSpellTargetUnit( )
    local integer id  = GetHandleId( t )
    local integer lvl = GetUnitAbilityLevel( caster, GetSpellAbilityId( ) )
    local integer count
    local integer dummy
    local integer dummyId
    local integer dummySpellId
    local real distance
    local real dmg
    local real radius
    local real scale
    local real scaleff
    local real effTm
    local real speed
    local real fly
    local string eff
    local string effT
    
    set dummyId = 'u003' // равкод юнита для стана
    if     lvl == 1 then
        set distance = 50.00   // дистанция попадания
        set speed    = 5.00    // скорость
        set dmg      = 50.00   // урон
        set count    = 4       // кол-во отскоков
        set radius   = 500.00  // радиус поиска целей
        set scale    = 1.00    // размер снаряда
        set dummy    = 'u001'  // равкод снаряда
        set eff      = "Abilities\\Spells\\NightElf\\shadowstrike\\ShadowStrikeMissile.mdl" // эффект при попадании снаряда
        set effT     = "chest" // точка крепления эффекта при попадании
        set effTm    = 0.00    // время удаления эффекта
        set fly      = 50.00   // высота снаряда
        set dummySpellId = 'A001' // равкод абилки для стана
    elseif lvl == 2 then
        set distance = 60.00
        set speed    = 6.00
        set dmg      = 75.00
        set count    = 5
        set radius   = 700.00
        set scale    = 1.50
        set dummy    = 'u002'
        set eff      = "Abilities\\Weapons\\SkeletalMageMissile\\SkeletalMageMissile.mdl"
        set effT     = "chest"
        set effTm    = 0.00
        set fly      = 60.00
        set dummySpellId = 'A002'
    else
        set distance = 50.00
        set speed    = 7.00
        set dmg      = 100.00
        set count    = 6
        set radius   = 900.00
        set scale    = 1.75
        set dummy    = 'u000'
        set eff      = "Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl"
        set effT     = "origin"
        set effTm    = 0.00
        set fly      = 40.00
        set dummySpellId = 'A003'
    endif
    
    set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer( caster ), dummy, GetUnitX( caster), GetUnitY( caster ), Atan2( GetUnitY( target ) - GetUnitY( caster ), GetUnitX( target ) - GetUnitX( caster ) ) * bj_RADTODEG )
    call SetUnitScale( bj_lastCreatedUnit, scale, scale, scale )
    call UnitAddAbility( bj_lastCreatedUnit, 'Arav' )
    call SetUnitFlyHeight( bj_lastCreatedUnit, fly, 0.00 )
    
    call SaveUnitHandle( udg_H, id, 0, caster )
    call SaveUnitHandle( udg_H, id, 1, bj_lastCreatedUnit )
    call SaveUnitHandle( udg_H, id, 2, target )
    call SaveReal( udg_H, id, 3, dmg )
    call SaveReal( udg_H, id, 4, radius )
    call SaveReal( udg_H, id, 5, scale )
    call SaveReal( udg_H, id, 6, effTm )
    call SaveReal( udg_H, id, 7, speed )
    call SaveReal( udg_H, id, 8, distance )
    call SaveInteger( udg_H, id, 9, count )
    call SaveInteger( udg_H, id, 10, dummy )
    call SaveInteger( udg_H, id, 11, dummyId )
    call SaveInteger( udg_H, id, 12, dummySpellId )
    call SaveStr( udg_H, id, 13, eff )
    call SaveStr( udg_H, id, 14, effT )
    
    call TimerStart( t, 0.01, true, function rMove )
    
    set t      = null
    set caster = null
    set target = null
endfunction

//===========================================================================
function rSpell_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A000' then
        call rSpell_Actions( )
    endif
    return false
endfunction

function InitTrig_Spell takes nothing returns nothing
    local integer index = 0
    set gg_trg_Spell = CreateTrigger(  )
    
    loop
        call TriggerRegisterPlayerUnitEvent( gg_trg_Spell, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null )
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    
    call TriggerAddCondition( gg_trg_Spell, Condition( function rSpell_Conditions ) )
endfunction


вот со счётчиком, но уже с вджассом, то бишь в обычном редакторе не откроешь
если и есть утечки, то это вообще незначительно
Загруженные файлы
28

» WarCraft 3 / Способности и алгоритмы на заказ

Заказ принят

Заказчик: Стас Орлов
Способность: Laughing Skull
Спелл будет завершен к: без понятия, мб сегодня
28

» Блог пользователя under11 / Chain Frost

ну красавчик, шо, только со скейлами эффектов стоило поиграться и сделать зависимыми от уровня
28

» XGM Конкурсы / Итоги конкурса становления героев 2021

x10azgmfx, драгонлор уже писал несколько раз, что собирает список всех используемых моделей и авторов, он обязательно укажет что, чьё и откуда
28

» XGM Конкурсы / Итоги конкурса становления героев 2021

Способности у Crasader 12/10? При том что первый скилл - стандартный скилл горного короля? 🤣
Ну если бы оно не ломало броню, не подкидываало противников которые без брони и являются лёгкими, не имело усилений от ярости и духов, тогда я бы согласился с наездом)
Механически у этой штуки больше потенциал чем я вижуализировал

Всё что там от горного короля на самом деле это трещины и звук эффекта, а сам эффект под землю опускается
28

» XGM Конкурсы / Итоги конкурса становления героев 2021

Капец, крестоносец и вправду стала победной картой, я в шоке, даже несмотря на то, что я практически угробил её своими действиями и механиками
Говорил же драгонлору, что вытащим за счёт ланда)
28

» WarCraft 3 / [Конкурс становления героев] Рецензии от судьи Makkad

не стоило играть версию с архива, у нас была залита поновее на тот момент, с исправлениями критических багов)