WarCraft 3: Предметы, интересные баги и фитчи!

» Раздел: Триггеры и объекты
» Автор оригинала: quq_CCCP, DracoL1ch

Вступление

К сожалению все чаще вижу что наши картастоители знают о предметах очень мало и все еще допускают ошибки 10 летней давности.

Усиливающие предметы или Руны

Наверняка всем известна эта классификация предметов, усиливающие предметы ( они же руны, книги, монетки ) это предметы которые применяются сразу после того как герой (юнит ) их подобрал, при этом неважно что у героя ( юнита ) заполнен инвентарь, руна будет использована "как ни в чём не бывало", что довольно часто используют в системах сборки предметов, где рецепт можно купить даже с заполненным инвентарем на ровне со стандартным использованием как одноразовый бонус.
Увы но посей день очень мало людей знают о багах и фитчах усиливающих предметов.

Баги усиливающих предметов

  1. Модели усиливающих предметов не удаляются после их использования, этот баг довольно часто встречается в Hero Defence - картах, где прокачка персонажа производится рунами, от руны после применения остается розовый кубик едва заметный на земле ( зависит от модели руны ) что является утечкой, а так же 100500 таких вот ошметков рун начинает вызывать жуткие просадки фпс когда игрок смотрт на землю забитую такими ошметками.
Этот баг связан с моделями усиливающих предметов и имеет 2 пути решения:
A) Удаление предмета сразу после получения его юнитом.
» Пример на jass
function Trig_Rune_Remover_Conditions takes nothing returns boolean
    return GetItemType(GetManipulatedItem()) == ITEM_TYPE_POWERUP 
endfunction

function Trig_Rune_Remover_Actions takes nothing returns nothing
    call RemoveItem( GetManipulatedItem() )
endfunction

//===========================================================================
function InitTrig_Rune_Remover takes nothing returns nothing
    set gg_trg_Rune_Remover = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Rune_Remover, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddCondition( gg_trg_Rune_Remover, Condition( function Trig_Rune_Remover_Conditions ) )
    call TriggerAddAction( gg_trg_Rune_Remover, function Trig_Rune_Remover_Actions )
endfunction
Ну а так же...
Б) Замена моделей усиливающих предметов на импортные, не содержащие изъяна ( таким методом воспользовался небезызвестный IceFrog )
Вот ссылочка на модель руны из доты xgm.guru/files/100/173200/RuneWithoutDeath.mdx
  1. Усиливающие предметы не могут поднять юниты, находящихся под эффектами некоторых способностей или триггерных действий:
A) Пауза
	native PauseUnit takes unit whichUnit, boolean flag returns nothing
на GUI :
Юниты подвергшиеся паузе, не могут подбирать усиливающие предметы, предмет останется лежать на земле возле героя (юнита)
Увы этот баг печально известен в Dota Allstars как баг Scorpion King, Obsidian Destroyer, Faire Dragon и Linken Spehre на что можно посмотреть ниже:
Лечится проверкой:
native IsUnitPaused takes unit whichHero returns boolean
На GUI:
Ну и снятием паузы если вам приспичило вручить юниту предмет прямо сейчас, либо подождать пока пауза не покинет юнита.
Б) Отключить прочие способности (ANcl - channel )
При чем же здеь канал, способность пустышка - которая является основной для домодельных триггерных заклинаний?
А вот при чем, у этой способности есть одно поле-настройки:
Эффект точно такой же как и от паузы, юнит не сможет подобрать предмет.
Как не удивительно в общеизвестной Dota Allstars есть проявление этого бага, у героя Pudge и именуется баг Bottle и Pudge, если интересно то поищите видео на YouTube самостоятельно.
В) Блокировка инвентаря: Что что, инвентарь героя не блокируется! - скажут большинство картаделов новичков, но это не так:
Заблокировать инвентарь можно способностью на основе 'ANdo' (doom) RUS Печать Преисподней - эта способностью обладает эффектом, напоминающий обычное Безмолвие ( ANsi ) silence RUS Безмолвие - способности темной охотницы что блокирует активные способности юнитов, находящихся под эффектом этой способности но куда сильнее, эффект Печати Преисподней распространяется даже на пассивные способности, инвентарь и предметы.
Лекарство только одно - проверка баффа этой способности:
GetUnitAbilityLevel( GetTriggerUnit( ), 'BNdo' ) > 0
На GUI:
Имейте ввиду, что баф способности на основе 'ANdo' (doom) RUS Печать Преисподней нельзя рассеять обычными диспелами или иммунитетом к магии, поможет только триггерное удаление баффа способности:
call UnitRemoveAbility( GetTriggerUnit( ) , 'BNdo' )
На GUI:
Баг 'Amlf' ( manaflare ) RUS Заклинание Крови - эта способность лесных дракончиков которая тоже блокирует инвентарь пока она активна, учтите что 'Amlf' ( manaflare ) RUS Заклинание Крови можно рассеять только если это разрешено в игровых константах, метод проверки тот же- проверка баффа этой способности не будем повторятся.
Маленькая хитрость
Способность Предметы (герой) может быть заблокирована любым безмолвием если в её настройках указать 2 и более уровней, может быть полезно для замены 'ANdo' (doom) RUS Печать Преисподней которая отключает почти все способности.
Не забываем что с заблокированным инвентарем нам не получится подбирать руны!

Фитчи усиливающих предметов

Казалось бы какие еще могут быть фитчи у усиливающих предметов, только баги с утечками - вероятно так думает большинство картаделов, по этому использует руны по самому примитивному способу - одноразовый бонус.
Немного теории - усиливающие предметы, это предметы которые активируются при получению юнитом с активным инвентарем, руны активируют записанные в них способности по 4 сценариям:
  1. В качестве цели способность указанная в настройках руны требует конкретный обьект, тогда каст этой способности будет произведет во того юнита, который её подобрал - при этом учитываются цели в настройках заклинания и так называемые Хардкодные цели
  2. В качестве цели способность указанная в настройках руны требует точку, тогда каст этой способности произойдет по координатам руны, которая лежит на земле - при этом все параметры каста будут в порядке, источником урона ( если способность наносит урон. ) будет юнит который подобрал руну.
  3. В качестве цели способность указанная в настройках руны не требует цели но должна быть активирована, тогда каст произойдет по координатам юнита, как будто юнит сам кастанул эту способность.
  4. В качестве цели способность указанная в настройках руны не требует цели, но и не должны активироваться ( Пассивные способности )
Внезапно руны могут кастануть даже пассивную способность, но увы конечно же не любую, удивительно но если в настройках способности указать 'AOen' (endurance aura) RUS Аура выносливости - то юнит подобравший руну получит бафф ауры на несколько секунд, увы только на самого себя, окружающим бафф не достанется.
Способности активируемые рунами - называются Пассивным кастом, его нельзя отследить ни одним из следующих событий:
constant unitevent EVENT_UNIT_SPELL_CAST=ConvertUnitEvent(290)
constant unitevent EVENT_UNIT_SPELL_CHANNEL=ConvertUnitEvent(289)
constant unitevent EVENT_UNIT_SPELL_EFFECT=ConvertUnitEvent(291)
constant unitevent EVENT_UNIT_USE_ITEM=ConvertUnitEvent(87)
На GUI:
Так же руны игнорируют такие состояния юнитов как оглушение, сокрытие,безмолвие, морфы и прочее.
Не все активные способности могут корректно работать в рунах, яркий пример 'AOsf' (summonwolf) RUS Дух волка и 'AOmi' (mirrorimage) RUS иллюзия - юниты вызванные этими способностями через руну погибнут, сразу же после появления - поэтому используйте аналоги, вроде 'ANsq' (summonquilbest) - RUS дух кабана или 'Aill' - посох иллюзий (у последнего нету строчного ид приказа, довольствуемся цифирным 852274 - wand of illusion ) .
Руны, впрочем как и другие предметы могут одновременно активировать не 1 а 4 способности, причем даже разные, руны не проверяют ID приказа и кулдауны способностей, как остальные предметы.

Нестандартное использование усиливающих предметов

» Полезные функции

function UnitAddPowerUpItem takes unit u, integer id returns boolean // автор DracoL1ch, помогает безопасно вручать руны даже не героям.
    local item it
    local boolean invAdded = false
    local boolean added = true
    
    set it = CreateItem( id, GetUnitX( u ), GetUnitY( u ) )
    if GetUnitAbilityLevel(u, 'AInv') == 0 then     //AInv -> Inventory
        set invAdded = true
        call UnitAddAbility(u, 'AInv')              //AInv -> Inventory
    endif
    
    if UnitAddItem(u, it) == false then
        set added = false
    elseif GetWidgetLife(it) > 0.00 then
        set added = false
    endif
    
    call RemoveItem(it)
    
    if invAdded then
        call UnitRemoveAbility(u, 'AInv')           //AInv -> Inventory
    endif

    set it = null
    return added
endfunction

function IsUnitDead takes unit u returns boolean 
    return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
endfunction

Проходимец, или сделаем аналог Phase Bots из Dota:

» Пример #1 сделаем фейс бутс из доты
Думаю многие знакомы с такой шмоткой в карте IceFrog'а где есть предмет при активации которого можно проходить сквозь юнитов, причем пройти в непроходимое место или сквозь здание не получится.
Основано сие чудо на способности 'AOwk' (windwalk) RUS Стремительность - настраиваем способность для предмета как на скриншоте:
Скорость, иконку, бафф и кулдаун настраиваем по вкусу, Урон от подлого удара - обязательно убираем, как и разрешенные цели иначе у нас не будут работать орб эффекты и пассивные способности при активной Стремительности.
Время перемещения в невидимость - еще 1 важный параметр, вводим -1 чтобы юнит никогда не стал невидимым.
Не влияет на результат но тем не менее важно:
Удаляйте как можно больше описаний, эффектов, иконок у дамми способностей, все это дело загружается в память но не дает никакого эффекта, посему удаляйте все не используемые иконки и описания у дамми способностей.
Можно добавить эту способность предмету и радоваться, но многие заметят что стоит герою произнести любое заклиненные как эффект способности пропадет.
Но тут нам помогут наши волшебные руны:
  1. Делаем руну как на скриншоте:
Модель руны обязательно меняем, на пустую или dummy.mdx - чтобы не оставлять спецэффектов смерти руны когда юнит будет её подбирать, это спасет от еще 1 бага -
если игрок не видит сметь руны из за тумана войны, этот спецэффект будет ждать своего часа, пока игрок не увидит это место и не получит просадку фпс если там было много рун и увидит эффект их смерти.
После вручаем руну вот таким кодом:
 	local unit u = GetTriggerUnit( )
    set bj_lastCreatedItem = CreateItem( id нашей руны, GetUnitX( u ), GetUnitY( u ) )
    call UnitAddItem( u, bj_lastCreatedItem )
    call RemoveItem( bj_lastCreatedItem )
    set u = null
на GUI:
И вуаля у нас постоянный эффект проходимости сквозь юнитов, который не сбивается кастом способностей героя (юнита), мы же можем суть руну сразу после каста способности.
вот финальный код:
// Требуются 2 функции из кастом кода карты
// 'A001' - способность активатор
// 'INWW' - руна со стремительностью
// 'BNwk' - бафф стремительности от руны
// udg_DATA - хештаблица.
function Trig_Phase_Boots_Conditions takes nothing returns boolean
    return GetSpellAbilityId( ) == 'A001' // ро код вашей способности, не забывайте менять!
endfunction

function Timer_Phase_Boots_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer id = GetHandleId( t )
    local unit WindWalker = LoadUnitHandle( udg_DATA, id, 0 )
    local integer time = LoadInteger( udg_DATA, id, 1 )
    local boolean IsDead = IsUnitDead( WindWalker )
    
    call SaveInteger( udg_DATA, id, 1, time + 1 )
    
    if IsDead or time > 25 then // обязательно проверяйте жив ли юнит, мертвые не могут подбирать руны.
    
        if not IsDead then      // проверка на то что юнит жив, мертвых лучше не трогать.
            if GetUnitAbilityLevel( WindWalker, 'BNwk' ) > 0 then
                call UnitRemoveAbility( WindWalker, 'BNwk' ) // удаляем бафф если время истекло.
            endif
        endif
    
        call PauseTimer( t )
        call DestroyTimer( t )
        call FlushChildHashtable( udg_DATA, id )
        
    elseif GetUnitAbilityLevel( WindWalker, 'BNwk' ) < 1 then // проверяем нет ли у юнита баффа.
        if not UnitAddPowerUpItem( WindWalker, 'INWW' ) then // вручаем руну стремительности
            call BJDebugMsg( "Ошибка - юнит неможет поднять предмет!" )
        endif
    endif
    
    set t = null
endfunction

function Trig_Phase_Boots_Actions takes nothing returns nothing
    local unit WindWalker = GetSpellAbilityUnit( )
    local timer t = CreateTimer( )
    local integer id = GetHandleId( t )
    
    set bj_lastCreatedItem = CreateItem( 'INWW', GetUnitX( WindWalker ), GetUnitY( WindWalker ) )
    
    if UnitAddItem( WindWalker, bj_lastCreatedItem ) then
        call SaveUnitHandle( udg_DATA, id, 0, WindWalker )
        call SaveInteger( udg_DATA, id, 1, 0 )
        call TimerStart( t, 0.20, true, function Timer_Phase_Boots_Expires )
    else
        call BJDebugMsg( "Ошибка - юнит неможет поднять предмет!" )
        call DestroyTimer( t )
        call FlushChildHashtable( udg_DATA, id )
    endif
    
    call RemoveItem( bj_lastCreatedItem )
    
    set WindWalker = null
endfunction

//===========================================================================
function InitTrig_Phase_Boots takes nothing returns nothing
    set gg_trg_Phase_Boots = CreateTrigger( )
    // Под себя добавляем события какие нам вздумаются, в тест карте только 1 игрок.
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Phase_Boots, Player( 0 ), EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Phase_Boots, Condition( function Trig_Phase_Boots_Conditions ) )
    call TriggerAddAction( gg_trg_Phase_Boots, function Trig_Phase_Boots_Actions )
endfunction

Паленая кошка, или руны могут применять огненный дождь?

Руны могут применять даже Прирываемые (channeling) способности, не требуя от применившего стоять неподвижно. При этом сам каст происходит не по координатам поднявшего предмет героя (юнита) а по координатам этого самого предмета, лежащего на земле.
Казалось бы что в этом хорошего, огненный дождь рядом с тем кто подобрал руну, герой же подбирает руны подходя к ним почти в плотную?
Но тут есть маленькая хитрость:
native UnitAddItem takes unit whichUnit, item whichItem returns boolean
На GUI:
Эта функция вручит юнит предмету, лежащий в любом месте на карте, не перемещая сам предмет к юниту, что нам и полезно - создадим руну огненного дождя над нейтральными крипами и вручим её триггерным действием UnitAddItem нашему герою, и огненный дождь идет над этими нейтральными монстрами, которые кстати побегут бить нашего героя ибо урон будет наносится от его лица.

Все нелюди должны быть уничтожены! Или Дуэль по мотивам Dota 2

У усиливающих предметов есть еще интересные свойства, одно из них оставить эффект способности навсегда у юнита который подобрал способность, одна из группы этих способностей Морфы (ну или метаморфозы), а эффект которые они оставляют на юните это флаг - Непрерываемый
» Немного теории об этом
Морфы по своей сути способности выключатели, они как и "Жар преисподней" или "щит пехотинца" могут быть включены и выключены, но только вот что если юнит будет оглушён или вовсе мертв?
А для того и существует флаг Непрерываемый, он гарантирует что юнит выполнит приказ "во что-бы то не стало", даже если он умрет. Морфы славились этими багами еще во времена царя гороха, и близзарды их переделывали, но не все поправили и теперь метаморфоза + руна = Непрерывемый на всегда!
Руна удаляет способность сразу после выполнения, не давая метаморфозе выполнится еще раз чтобы завершить перевоплощение и снять флаг Неприрываемый
Так как сам морф то не произошел, юнит не изменяется а остается каким был, но уже с бонусом в виде неспособности изменить первый отданный приказ.
Что нам нужно:
  • Способность на основе 'AEme' (metamorphosis) RUS Перевоплощение 1 штука.
  • Дамми руна (рецепт приготовления описан выше ) 1 штука.
  • Немного смекалки и терпения.
Настраиваем саму метаморфозу:
-Все параметры в 0
-Удаляем все лишние описания.
-Флаг "Непрерываемый" - оставляем как есть, остальные не ставим.
-Альтернативная форма боевой единицы - дамми герой (какой неважно, лиж бы он был летающим) иначе ничего не выйдет.
-Нормальная форма боевой единицы - не имеет значения, оставляем как есть.

Помещаем все это дело в нашу дамми руну и вручаем герою, приказываем ему атаковать и вуаля! Он атакует и плевать хотел на ваши приказы, как будто он оглушен - ни 1 кнопка не кликается, как и предметы в инвентаре, панель приказов при этом полностью активна а не затемнена как от "Безмолвия" или ""Печати преисподней".
На юнита перестануть действовать дизейблы основанные на приказах, включая паузу юнита
Исключения которые плевать хотели на флаг - Непрерываемый:
  1. 'AUsl' - (sleep) RUS Сон - война войной а сон по расписанию! (c) DracoL1ch
  2. 'Apos' - (possesion) RUS одержимость - тоже чхать хотела что там на уме у юнита.
  3. 'Afrz' - (freezingbreath) RUS Ледяное дыхание - способность ледяных змеев нежити, тоже остановит юнита несмотря ни на что, но учтите её бафф не удалить триггерно у юнита.
Но как же вернуть все на место? Юнит же останется такм даже после смерти!
А очень просто, все что нужно это выполнить любой морф до конца, как следует. Для этого достаточно сделать цель юнита недостижимой и вручить ему морф и приказать использовать.
К примеру у нас дуэль и два героя лупят друг друга, делаем их неуязвимыми - результат они не могут бить друг друга, очередь приказов свободна, ну и вручаем им морв ф другого юнита, который тут же завершится после применения (длительность 0.01 сек) и ура, юнит вернулся в прежнее сосотояние, можно радоваться!
Будет несомненно полезно:
Способность 'Aave' (avengerform) RUS Превратится в сфинкса тоже морф, который в отличии от прочих морфов не сбивает текущий приказ и не блокируется безмолвием!

Я ужас летящий на крыльях ночи, или как превратится в ворону!

Способности морфов добавленные в усиливающие предметы могут не только багатся, добавляя флаг - непрерываемый но и вполне успешно изменять одну боевую единицу в другую.
Правда тут нужен свой неповторимый рецепт, который подойдет нам только если мы захотим превратить наземную боевую единицу в летающую ( все необходимые анимации + высота взлета прилагаются )
Итак компоненты:
  • Способность 'Aave' (avengerform) RUS Сфинкс 2 штуки. Если вдруг вы собрались остаться вороной навсегда, хватит и одной.
  • Два героя (юнита), один наземный что является его нормальной формой а второй воздушный для взлета в воздух.
  • Две дамми руны, рецепт изготовления коих я описал выше. Для желающих каркать до конца своих дней хватит и одной...
Далее начинаем настройку способностей:
-Все параметры в 0, такие как длительность воздействия, иконки и положение кнопок на карте команд.
-Нормальная форма боевой единицы - наш наземный герой (юнит)
-Альтернативная форма боевой единицы - наш летающий герой (юнит)
-Флаги - Немедленное приземление, Немедленный взлёт, Непрерываемый, Постоянное. ( все кроме Требуется оплата )
-Длительность регулировки высоты и Время задержки приземления настраиваем по вкусу.
» Должно получится вот это:
Далее помещаем наш морф в заранее заготовленную дамми руну и вручаем герою, результат должен быть примерно таким:
Правда красиво, а самое главное такой морф не сбивает текущие приказы героя и не блокируется такими эффектами как оглушение или безмолвие, главное чтобы инвентарь героя был активен!
Но как же вернутся на землю, если нам надоело летать и каркать? Переставить формы юнита в настройках морфа - а вот фиг вам, тут нужен свой рецепт!
Настраиваем вторую способность на основе 'Aave' (avengerform) RUS Сфинкс , которую мы приготовили для обратного превращения, и так настраиваем:
-Все параметры в 0, такие как длительность воздействия, иконки и положение кнопок на карте команд.
-Нормальная форма боевой единицы - наш наземный герой (юнит)
-Альтернативная форма боевой единицы - наш летающий герой (юнит)
-Флаги - Немедленное приземление, Немедленный взлёт, Непрерываемый. ( все кроме Требуется оплата и Постоянное )
-Длительность регулировки высоты и Время задержки приземления настраиваем по вкусу.
» Должно получится вот это:
Далее помещаем наш морф в заранее заготовленную дамми руну и вручаем герою который летает в небе (обязательно воздушному, с наземным ничего не произойдет)
И наш Ужас летящий на крыльях ночи приземлится, при этом проигрывая анимацию смерти - не пугайтесь, это всего лишь анимация от которой легко избавится, кол-во здоровья, баффы, приказы - все это останется на месте.
Карта пример про Ужас летящий на крыльях ночи ссылка
Данный метод перевоплощений работает только при морфе из наземного в воздушный и никак иначе, для того чтобы морфунтся в боевую единицу того же типа перемещения используются другие основы и настройки, о которых я расскажу немного позже...
Вот пока не до конца готовый тест мап, в таверне выбераем тест дуэли и любуемся:

Во имя Азары, или морфы наземных \ земноводных

До этого мы рассматривали как же нам превратить наземного юнита в воздушного и обратно, увы но тот способ подходит для превращений юнитов с разным типом перемещения, а как же нам быть если мы хотим превратить одного юнита в другого с тем же типом перемещения?
Все очень просто, нам потребуется способность на основе 'AEme' (metamorphosis) немного смекалки и терпения.
Итак компоненты:
  • Способность 'AEme' (metamorphosis) RUS Перевоплощение 2 штуки. Если вдруг вы собрались остаться в одной форме навсегда, хватит и одной.
  • Два героя (юнита), одного и того же типа перемещения для оригинала и альтернативы, прочее не имеет значения.
  • Две дамми руны, рецепт изготовления коих я описал выше. Для желающих оставить все как есть хватит и одной...
Далее начинаем настройку способностей:
-Все параметры в 0, такие как длительность воздействия, иконки и положение кнопок на карте команд.
-Нормальная форма боевой единицы - наш наземный герой (юнит) в которого мы хотим превратится.
-Альтернативная форма боевой единицы - либо оригинал, либо любой другой герой (юнит) с тем же типом перемещения
-Флаги - Непрерываемый ( Кароче оставляем как есть )
» Должно получится вот это:
Далее помещаем наш морф в заранее заготовленную дамми руну и вручаем наземному герою и наш герой сменится другим, при этом анимации будут в норме, герой сохранит все баффы, предметы, приказы.
Для тех кто хочет вернутся назад, превратив юнита обратно, в того кем он был до получения руны нужно сделать второй морф.
Настройки второго морфa:
-Все параметры в 0, такие как длительность воздействия, иконки и положение кнопок на карте команд.
-Нормальная форма боевой единицы - Тот кем мы были до морфа ( т.е начальная форма героя до морфа )
-Альтернативная форма боевой единицы - Тот кто мы сейчас есть (т.е альт форма нашего героя (юнита)
-Флаги - Непрерываемый ( Кароче оставляем как есть )
» Должно получится вот это:
Далее помещаем наш морф в заранее заготовленную дамми руну и вручаем нашему альтернативному герою и он тут же превратится в обычного, кем был до морфа при этом проигрывая анимацию смерти - не пугайтесь, это всего лишь анимация от которой легко избавится, кол-во здоровья, баффы, приказы - все это останется на месте.
» Хардкодные цели
Это цели способности указанные в движке Warcraft 3 и не подлежащие изменению с уровня редактора объектов или кода карты.
Яркий пример - 'AHhb' (holybolt) RUS Благодать - способность паладинов, лечащая союзников и наносящийся урон враждебной нежити, вот эту самую враждебную нежить нельзя убрать никак, при попытки применять благодать в союзника с классификацией Нежить - будет выдана ошибка -Неподходящая цель, укажите на враждебную нежить или дружественное живое существо
Впервые услышал этот термин от DracoL1ch.
Этот параметр не могут игнорировать ни руны ни орбы.
» Предложите название в комментариях
Удивительно но часть способностей не требующие указания цели оказываются применяются на самого применившего, эти способности как раз в своём большинстве не сбивают текущих приказов применившего их юнита.
» Сокрытие
native ShowUnit takes unit whichUnit, boolean show returns nothing
На GUI:
Это действие скрывает юнита с карты, но позволяет ему взаимодействовать с игровым миром в том числе подбирать предметы, яркий пример сокрытия это способности:
'AOmi' (mirrorimage ) RUS Иллюзия - Мастер клинка, 'ACcy' (cyclone) RUS Смерч способность друидов-ворон а так же предметов и прочей шушеры, 'ANef' (elementalfury) RUS Три стихиии красочная способность панды пивовара.
Обычно стандартные способности еще и оглушают или паузят юнита, поэтому проверите взаимодействие с каждой способностью
» Прирываемое
Это способности требующие от героя (юнита) приминающего это заклинание стоять неподвижно, чтобы эффект заклинания продолжался, при этом безмолвия или оглушения могут сбить эффект этой способности, потому они называются прирываемыми.
Примеров таких способностей много: 'AHbz' (blizzard) RUS Буран , как и огненный дождь и прочие.
» Морфы
Морфы это большая категория способностей, главным эффектом которых является заменя одного юнита другим, альтернативным - при этом сохраняя все параметры оригинала, включая баффы, приказы, бонусы, предметы.
Вспомните охотника на демонов, его ульт 'AEme' (metamorphosis) RUS Перевоплощение изменяет его на демона с дальней атакой и увеличенным здоровьем.
Морфы довольно разнообразные способности с разным поведением в зависимости от настроек и параметров юнитов оригинала и альтернативы.
P.S Пока это все, дальше будет интереснее, не переключайтесь!
Напишите чего не хватает, мб что то не очень подробно, позже будет тестмап.

Просмотров: 3 856

» Лучшие комментарии


Agren #1 - 1 год назад 0
Это полезно. Пригодится.
Melissa #2 - 1 год назад 0
Маленькая хитрость
Для меня это скорее непоправимый баг был
мне хотлеось сделать отдельный баф "lock", который отключал бы только предметы.
В итоге переводом уровня "предметов" на тот, где указано, что предметы можно носить но нельзя юзать это вроде достигалось, но сало, которое отключало предметы - это никуда не годилось.
Lock пришлось реализовывать по другому.
quq_CCCP #3 - 1 год назад 6
Шяс опишу прочие приколы, увы потеть мне долго, не говоря о тест мапе...
Ige #4 - 1 год назад 0
quq_CCCP, замени cs в последнем примере на нормальную функцию
прикреплены файлы
16GB #5 - 1 год назад 0
Ige,
нафига bj вместо native?
Ige #6 - 1 год назад 0
16GB:
Ige,
нафига bj вместо native?
а нафига gui если есть jass?)
16GB #7 - 1 год назад 0
Ige,
а где я предлагал гуи лалка?
JaBeN_Симфер #8 - 1 год назад 0
У меня не работает морф через руну. Руна дается, юзается, но морф не происходит. Можно пример рабочих настроек?
quq_CCCP #9 - 1 год назад 0
JaBeN_Симфер:
У меня не работает морф через руну. Руна дается, юзается, но морф не происходит. Можно пример рабочих настроек?
Щяс доделаю, там 100500 эффектов в зависимости от основы морфа и его настроек, до параметров юнита - можно получить и неуправляемую машину для убийств и таймер длительности, и бонусные атрибуты...
JaBeN_Симфер #10 - 1 год назад 0
У меня четко определенные условия морфа, которые работают, если дать герою нужный морф и приказать его кастануть. Но меня не совсем устраивает то, что это перебивает приказ, а также не срабатывает при смерти.
Extremator #11 - 1 год назад 0
вон там где "После вручаем руну вот таким кодом:" (про фейзы)
call UnitAddAbility( u, bj_lastCreatedItem )
может всё таки
call UnitAddItem( u, bj_lastCreatedItem )
quq_CCCP #12 - 1 год назад 0
Extremator:
вон там где "После вручаем руну вот таким кодом:" (про фейзы)
call UnitAddAbility( u, bj_lastCreatedItem )
может всё таки
call UnitAddItem( u, bj_lastCreatedItem )
А ок поправлю, мне нужна помощь что-бы все проверить с рунами, а так же оформит то там эффектов и хитростей много...
molot39 #13 - 1 год назад 0
Но как же вернуть все наместо? Юнит же останется такм даже после смерти!
не хватает буковки и пробела:
"Но как же вернуть все на_место? Юнит же останется такИм даже после смерти!"
ELB359 #14 - 1 год назад 0
Отличная статья. Добавишь про удаление предметов? Давно уже слышал, что есть баг с сохранением бонусов от него после удаления.
Clamp #15 - 1 год назад 0
Заюзай Word, например, а то грамотность на нуле. Пару неочевидных фишек действительно описал, тут молодец
quq_CCCP #16 - 1 год назад 1
Clamp:
Заюзай Word, например, а то грамотность на нуле. Пару неочевидных фишек действительно описал, тут молодец
Щяс щяс, все исправлю то тут много еще, на очереди морфы в наземных, таймеры длительности, не убиваемость, бонус статы.
Сейчас получил странный эффект с руной метаморфозы, модель юнита осталась прежней а вот параметры атаки изменились на те те что были у альтернативной формы, мб это связано с тегами анимации, попозже проверю с другими героями.
molot39 #17 - 1 год назад (отредактировано ) 0
quq_CCCP:
..Правда тут нужен свой НЕПовторимый рецепт, который Подойдет нам только если мы захотим превратить наземную боевую единицу в летающую ( все необходимые анимации + высота взлета прилагаются )
Итак компоненты:...
Ige #18 - 1 год назад 0
quq_CCCP, по-моему, лучше разделить статью на подразделы и для каждого сделать отдельную страницу.
quq_CCCP #19 - 1 год назад 0
Ige:
quq_CCCP, по-моему, лучше разделить статью на подразделы и для каждого сделать отдельную страницу.
Даже и на знаю как распределить эффекты морфов в статье...
Ige #20 - 1 год назад 0
quq_CCCP, можно все морфы перенести в один общий подраздел и его разделить еще на более мелкие. Только для под-подразделов не выделять отдельную страницу, а сделать все на одной, разделяя все заголовками первого уровня
Например, как здесь
Раздел "Осваиваем World Editor"
Подраздел "Регионы, камеры, спецэффекты"
Под-подразделы "Регионы", "камеры" и "спецэффекты"
quq_CCCP #21 - 1 год назад 0
Так вроде все поправил, скоро будет про морф наземных и изменении кулдауна предметов.
Diaboliko #22 - 1 год назад 2
Баг с морфом возможен только для рун или можно обойтись без них? Пробовал удалять скилл через 0.00(что округляется до минимального периода) секунд, но эффект все равно не тот.
molot39 #23 - 1 год назад 0
Diaboliko:
Баг с морфом возможен только для рун или можно обойтись без них? Пробовал удалять скилл через 0.00(что округляется до минимального периода) секунд, но эффект все равно не тот.
как то помню тоже скидывал время действия до 0, не помню где только... выходило так что время ставилось стандартным, поставил 0,01 и стало более мение нормально.
quq_CCCP #24 - 1 год назад 2
Diaboliko:
Баг с морфом возможен только для рун или можно обойтись без них? Пробовал удалять скилл через 0.00(что округляется до минимального периода) секунд, но эффект все равно не тот.
Только для рун, морфы это нечто среднее между чаннелингом и переключателем, (жар преисподней) - юниту требуется кастовать скилл хоть ты лопни, это раз, два тут идет и проверка ид и выдается флаг непрерываемый. Руны ативируют способность не спрашивая её о том надо ли её кастовать или нет, нужно ли стоять неподвижно + не дают способности выполнится дважды, а морфы по своей сути и выполняются дважды, туда и обратно.
Есть еще 1 способ добавить флаг не прирываемый, сработает для героев - у метаморфозы должен быть длительный каст тайм за время которого герой умрет, тогда он навсегда останется таким недоморфнутым (если его воскресить) но с руной проще.
Diaboliko #25 - 1 год назад (отредактировано ) 2
По теме дуэли:
Во-первых имхо стоит уточнить что (дительность 0.01 сек) = длительность (нормальная), а не длительность (герой).
Во-вторых - метод предотвращения эдакой дуэли без неуязвимости и хайда
» под катом
    call UnitAddAbility( u, 'Aave' )
    call IssueImmediateOrderById( u, OrderStop )//Обязательно. Иначе приказ на движение заставит юнита сперва побегать, а затем применить способность(если наспамить приказов во время движения - юнит забудет про приказ морфа)
    call UnitAddAbility( u, 'Abun')
    call IssueImmediateOrderById( u, 852531 )//Cast avenger morph ('Aave')
    call UnitRemoveAbility( u, 'Abun')
	//Удалять способность вроде не надо, т.к. она не постоянная и исчезнет при морфе.
Хотя имхо добавлять лучше заблоченный спеллбук, поскольку 0.01 сек иногда умудряется попасть в кадр как активный скилл(я юзаю 0.02, весьма заметно)
Правда на этом моменте я и остановился не разобравшись. Если добавлять спеллбук и сразу экзекутить - приказ на морф не проходит. Пока забил.
В третьих - у летающей цели в которую морфим изначально надо поставить базовый манапул 99к, иначе на время морфа мана юнита (текущая) будет равна нулю. Как минимум - выглядит упорото. Не изучил до конца влияние нулевого манапула на манопул после второго морфа, т.к. использовал 99к манапула на первом.
В четвертых - с героями разобрались, положим. А если я захочу применить такой костыль к обычному юниту, добавив ему на мгновение инвентарь героя? (долго возиться с этой темой самому, авось ты уже все перепробовал?) Нужно ли, например, менять морф в героя на морф в юнита?
quq_CCCP #26 - 1 год назад 0
Для героя, морф только в героя! Для юнита морф только в юнита, для здания морф только в здание - иначе не выйдет.
Перепробовал не все, часть фишек я делал давно и забыл как.
Все не получается сделать таймер длительности на юните который можно обновлять сколько влезет.
EnergyFrost #27 - 1 год назад 2
quq_CCCP, благодарю, полезная статейка. Картой занимаюсь около 3 лет, а о таких полезных фитчах руны не слыхал!
Tumart #28 - 1 год назад 2
Отличная статья! Браво!
KoGader #29 - 11 месяцев назад 0
Добрый день! У меня появилась такая проблема с некоторыми усиливающими предметами, когда носильщик на моей карте берёт с магазинов или с земли подобные вещи как сила +3 или ловкость +5, то крашится варкрафт вылетая.
molot39 #30 - 11 месяцев назад 0
KoGader:
Добрый день! У меня появилась такая проблема с некоторыми усиливающими предметами, когда носильщик на моей карте берёт с магазинов или с земли подобные вещи как сила +3 или ловкость +5, то крашится варкрафт вылетая.
это из за того что предмет используется сразу, какие условия прокачивать если их нет?
KoGader #31 - 11 месяцев назад 0
molot39:
KoGader:
Добрый день! У меня появилась такая проблема с некоторыми усиливающими предметами, когда носильщик на моей карте берёт с магазинов или с земли подобные вещи как сила +3 или ловкость +5, то крашится варкрафт вылетая.
это из за того что предмет используется сразу, какие условия прокачивать если их нет?
Ну как решить мою проблему, чтобы оставить "Используется сразу"?
quq_CCCP #32 - 11 месяцев назад (отредактировано ) 0
Увы не герои немогут юзать скиллы на статы, даже если они добавляют 0 к статам игра вылетит с фаталом, либо делайте курьера из героя либо сделайте способность для книги на основе канала, а при событии - юнит получил предмет проверяйте какой предмет он подобрал, если это герой то добавить ему n статов.
Maxim105 #33 - 11 месяцев назад 0
Обьясните мне герой при перевоплощении должен использовать в качестве альтернативной "летающую ", ? разве иллидан второй его форма летающая, или в его настройках указаны что он относится к наземному типу целей или я вообще не понял как это понять?
quq_CCCP #34 - 11 месяцев назад 4
Maxim105:
Обьясните мне герой при перевоплощении должен использовать в качестве альтернативной "летающую ", ? разве иллидан второй его форма летающая, или в его настройках указаны что он относится к наземному типу целей или я вообще не понял как это понять?
Чтобы из наземного сделать наземного нужно чтобы указать альтернативную форму (неважно какую) а нормальную форму героя в которого ты хочешь превратится.
Так и не найду в себе сил описать остальное .
Maxim105 #35 - 11 месяцев назад (отредактировано ) 0
quq_CCCP:
Maxim105:
Обьясните мне герой при перевоплощении должен использовать в качестве альтернативной "летающую ", ? разве иллидан второй его форма летающая, или в его настройках указаны что он относится к наземному типу целей или я вообще не понял как это понять?
Чтобы из наземного сделать наземного нужно чтобы указать альтернативную форму (неважно какую) а нормальную форму героя в которого ты хочешь превратится.
Так и не найду в себе сил описать остальное .
Немного не понял, да, я хочу превратиться из наземного в наземный,
есть герой 1 и герой 2, оба наземные юниты
как сделать чтобы герой превратился в героя 2 с помощью морфа сфинкса, о котором тут написано?
Я сегодня попробую все настроить, сделать я сделаю, мб... только вот пойму-ли, я впервые с этим столкнулся
или ты имеешь ввиду, что сделать 2 руны морфа,
в обоих способностях, альтернативную поставить ( не важно какую)
А в строке нормальная форма, для первой руны-морфа героя 1, а для второй руны герой 2?
molot39 #36 - 11 месяцев назад 0
Maxim105:
Немного не понял, да, я хочу превратиться из наземного в наземный,
есть герой 1 и герой 2, оба наземные юниты
как сделать чтобы герой превратился в героя 2 с помощью морфа сфинкса, о котором тут написано?
Я сегодня попробую все настроить, сделать я сделаю, мб... только вот пойму-ли, я впервые с этим столкнулся
или ты имеешь ввиду, что сделать 2 руны морфа,
в обоих способностях, альтернативную поставить ( не важно какую)
А в строке нормальная форма, для первой руны-морфа героя 1, а для второй руны герой 2?
так то есть раздел вопросы...
Maxim105 #37 - 11 месяцев назад 0
Побыстрее бы, это узнать чтобы морфунтся в боевую единицу того же типа перемещения используются другие основы и настройки
Я к тому, что герой относится к типу "земноводный", вот это больше всего интересует
quq_CCCP #38 - 11 месяцев назад 2
Все, долгожданное обновление! Теперь есть инфа про наземный морф.
Diaboliko #39 - 9 месяцев назад (отредактировано ) 0
С героями все проходит на ура(за исключением решаемых проблем с ресетом маны и дропом предметов при морфе), а вот у юнитов наблюдается непонятное поведение абилок(при выходе из морфа они теряются (но во время морфа они есть) и наоборот). При морфе героев все решается через UnitSetAbilityPermanent для не-дефолтных абилок(указанных в РО), а на юнитах оно не работает... У кого-нибудь отсутствовала такая проблема?
Maniac_91 #40 - 9 месяцев назад 0
Diaboliko, если одинаковая способность есть и у начальной и альтернативной форм, то всё должно работать.
Не сталкивался с такой проблемой.
Diaboliko #41 - 9 месяцев назад 0
Maniac_91:
Diaboliko, если одинаковая способность есть и у начальной и альтернативной форм, то всё должно работать.
:> делать по руне на каждый тип не-героя, которому хочется загнать флаг "непрерываемый" - жирно.
Не сталкивался с такой проблемой.
В смысле у тебя все работало? Или просто не возился с морфом не-героев?
Maniac_91 #42 - 9 месяцев назад (отредактировано ) 0
Diaboliko, я имею в виду, что и у основного типа юнита есть своя способность (например, замедление), и у альтернативного. Способность, которая пропадает, так как у альтернативного её просто нет.
Лучше проверить на всякий случай, я так тоже ошибся когда-то)
Diaboliko:
В смысле у тебя все работало? Или просто не возился с морфом не-героев?
Как раз не-геройскими юнитами занимаюсь сейчас)
Как вариант, можно всё же установить "не-дефолтную" способность юниту в РО, а потом заблокировать её для игрока. По ходу игры разблокировать. Но это, естественно, если способность даётся всем юнитам одного типа одновременно.
quq_CCCP #43 - 9 месяцев назад 0
Ну как вариант добавлять абилки снова.
А мобов 100500? Или нет, то благодаря ретурн багу мы можем блокировать абилки, правда это немедленно.