Заказчик: Roy Mustang Способность: Cyclop Slam Спелл будет завершен к: без понятия, мб сегодня
остальные спеллы я не в силах сделать ибо хз как запретить контроль над юнитом без мемхака или морфа, но морф не оч хорошо если юниты разные и их много, максимум это отдавать каждые 0.01 сек бежать в точку, чтобы любые другие приказы перебивались, это могу без проблем, хотя какие-то мгновенные касты, без какой-либо задержки (в основном это для даммиков) всё-равно сработают
а захват и бросок это уже надо делать ориентир на саму модель, мб крепить эффект юнита к руке циклопа, это надо маленькую бд делать
наверняка на рефе есть все нужные функции для этих спеллов и там делается одной строчкой
Заказчик: KarlikKukold Способность: Пироапокалипсис Выполнено: Да
Копируешь абилки, москитов и папку с триггерами в свою карту, отделённый комментарием триггер удаляешь, кол-во столбов настраивается в триггере каста, в цикле, их рандомное появление выбираешь на своё усмотрение, я сделал 4 доп столба на +90 градусов каждый
Гуванч, ну так-то ты на то время знал уже вджасс, но всё равно по коду юзал порой не очень красивые примеры, как создание и удаление группы, вместо темповой глобалки
но я поддерживал твоё стремление клепать абилки, до одного момента
Kirka_Karma, посмотрел видео до конца, не в темпе повествования дело, а в том, что непонятно куда нужно направляться. Поиски для следующего синематика занимают много времени
Заказчик: Komkozavr Способность: Магические сети Выполнено: Да
Спелл не муи, то бишь юзать может только один юнит, выбираются юниты рандомно, варом для поимки в сеть (если требуется - переделаю под самых ближних к точке), кол-во юнитов для поимки выставляется переменной TempInteger, ты найдёшь её в триггере каста, всё остальное в принципе в ро настраивается
Если нужно было прям кастомную поимку лассо вара сделать, то только на в/джассе
Импортнуть думаю не составит труда, но на всякий случай.. Копируешь папку с триггерами и закидываешь в свою карту, абилки настраиваешь у себя в ро и выставляешь по триггерам где они требуются, абилки и москитов перекопируешь тупо, триггер отделённый комментарием тебе не нужен, удалишь
Заказчик: Стас Орлов Способность: 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
Способности у Crasader 12/10? При том что первый скилл - стандартный скилл горного короля? 🤣
Ну если бы оно не ломало броню, не подкидываало противников которые без брони и являются лёгкими, не имело усилений от ярости и духов, тогда я бы согласился с наездом)
Механически у этой штуки больше потенциал чем я вижуализировал
Всё что там от горного короля на самом деле это трещины и звук эффекта, а сам эффект под землю опускается
Капец, крестоносец и вправду стала победной картой, я в шоке, даже несмотря на то, что я практически угробил её своими действиями и механиками Говорил же драгонлору, что вытащим за счёт ланда)
Ред. rsfghd
» WarCraft 3 / Массовая атака
» WarCraft 3 / Способности и алгоритмы на заказ
Заказ принят
Способность: Cyclop Slam
Спелл будет завершен к: без понятия, мб сегодня
наверняка на рефе есть все нужные функции для этих спеллов и там делается одной строчкой
Ред. rsfghd
» WarCraft 3 / Как запустить один раз стандартный музыкальный трек?
» WarCraft 3 / Массовая атака
» WarCraft 3 / Массовая атака
Ред. rsfghd
» WarCraft 3 / Способности и алгоритмы на заказ
Заклинание готово!
Способность: Пироапокалипсис
Выполнено: Да
» Блог пользователя under11 / Chain Frost
но я поддерживал твоё стремление клепать абилки, до одного момента
» INDIVID.GAME / Cursader Night [Конкурс становления героев]
» WarCraft 3 / [Конкурс становления героев] Crusader
» WarCraft 3 / Отсылка к всем игрокам.
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / Способности и алгоритмы на заказ
Ред. rsfghd
» WarCraft 3 / Способности и алгоритмы на заказ
Заклинание готово!
Способность: Магические сети
Выполнено: Да
Если нужно было прям кастомную поимку лассо вара сделать, то только на в/джассе
Импортнуть думаю не составит труда, но на всякий случай.. Копируешь папку с триггерами и закидываешь в свою карту, абилки настраиваешь у себя в ро и выставляешь по триггерам где они требуются, абилки и москитов перекопируешь тупо, триггер отделённый комментарием тебе не нужен, удалишь
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / Memory hack API v1.4
» WarCraft 3 / Исчезающая иконка способности и отсутствие срабатывания
Ред. rsfghd
» WarCraft 3 / Способности и алгоритмы на заказ
Заклинание готово!
Способность: Laughing Skull
Выполнено: Да
Настройки все в коде, делал исключительно на джассе, юзал некоторые вариковские переменные, так что имей ввиду, спелл муи
Если что-то не так или работает не так, как ты хотел - пиши
Сам спелл хотелось бы на вджассе конечно сделать
если и есть утечки, то это вообще незначительно
» WarCraft 3 / Способности и алгоритмы на заказ
Заказ принят
Способность: Laughing Skull
Спелл будет завершен к: без понятия, мб сегодня
» WarCraft 3 / пассивно-нейтральный юнит -> юнит игрока
» Блог пользователя under11 / Chain Frost
» XGM Конкурсы / Итоги конкурса становления героев 2021
Ред. rsfghd
» XGM Конкурсы / Итоги конкурса становления героев 2021
Механически у этой штуки больше потенциал чем я вижуализировал
» XGM Конкурсы / Итоги конкурса становления героев 2021
Говорил же драгонлору, что вытащим за счёт ланда)
» WarCraft 3 / [Конкурс становления героев] Рецензии от судьи Makkad