Многие программисты говорят, что в загруженных картах эта функция (и именно цифра 0.405) лучше и надежнее.
Лучше и надёжнее использовать эти функции.
function UnitIsAlive takes unit u returns boolean
return not IsUnitType(u, UNIT_TYPE_DEAD)
endfunction
function UnitIsDead takes unit u returns boolean
return IsUnitType(u, UNIT_TYPE_DEAD) // returns false, if unit does not exist.
endfunction
Годнота , как раз то что я хотел. Можно как то будет запилить способность-спеллбук для здания , чтобы поместить туда все способности-приказы к строительству ? Достаточно будет переделать дефолт способность предмета ?
Вот карта, где показано, что абилки флага визуального эффекта не дают.
Тестировали бы сначала, перед тем как советы давать.
UPD: способности флага чисто предметные способности, в предметах работают как надо. Если же дать способности юниту, то они не работают.
Ты делаешь каст integerа в Tracker, потому вызывается метод, описанный в Tracker.
А вот это неправда, и в этом случае вызывается так, как я описал в комментарии 7.
То есть даже код из вопроса работает, как нужно. Небольшой совет: определение метода нужно писать над кодом, в котором этот метод передаётся как code, иначе на самом деле будет передана функция, что вызывает триггер, в котором уже вызывается указанный метод.
да вот только thistype возвращает структуру из которой он вызван, а не структуру инстанса идентификатора, т.е. getTrack будет всегда возвращать тип Tracker. Вопрос в том, как по идентификатору определить конкретный тип структуры и к нему привести.
Этот код тестировал? Он должен работать.
Структуры в vJass - массивы. Объект структуры - integer.
У каждой структуры есть массив, куда записывается тип каждого объекта структуры. Пусть у Trackle айди 1, а у Button 2. При создании объекта структуры будет сделано следующее: set массив_куда_записывается_тип[объект_структуры] = айди_структуры. При создании объекта Button и в массив типа структуры Button, и в массив структуры Trackle будет записано 2.
Перезаписываемые методы - массив триггеров, у которых в качестве условия записано тело метода.
Вызов такого метода - call TriggerEvaluate(массив_триггеров[массив_куда_записывается_тип[объект_структуры]]).
В нашем случае это будет выглядеть call TriggerEvaluate(массив_триггеров_OnTrack[массив_куда_записывается_тип[getTrack(h)]]).
вот только беда в том, что при регистрации TriggerAddAction(trk.t_track,function Tracker.defaultTrack) я должен указать именно статичную функцию, а вот с нее уже вызвать наследованную.
Я не понял, что ты хочешь, но в vJass есть каст структур Нужный_тип(переменная_структуры_другого_типа).
Также по правилам ООП в переменной типа Tracker может быть как объект типа Traker, так и объект его детей.
struct MyTracker extends Tracker
method OnTrack takes nothing return nothing
call DisplayTextToPlayer(Player(0), 0., 0., 5. "HAHAHAH")
endmethod
endstruct
...
function f takes nothing returns nothing
Tracker t = MyTracker.create();
t.OnTarck(); // выведет текст "HAHAHAH" и ничего больше не сделает.
endfunction
Вроде понял.
Ты делаешь каст integerа в Tracker, потому вызывается метод, описанный в Tracker. Если делаешь каст в Button, то сработает метод Button. Тебе нужно сделать метод defaultTrack не статичным и перезаписываемым.
Вот как я решил твою проблему.
struct Tracker
...
static method getTrack takes nothing returns thistype
return LoadInteger(hash,H2I(GetTriggeringTrackable()),1)
endmethod
stub method OnTrack takes nothing returns nothing
call echo("track1")
endmethod
endstruct
struct Button extends Tracker
method OnTrack takes nothing returns nothing
call echo("track2")
endmethod
endstruct
...
function f1 takes nothing returns nothing
local Button t = Tracker.getTrack()
call t.OnTrack() // будет вызвано echo("track2").
endfunction
// Делает тоже самое, что и f1.
function f2 takes nothing returns nothing
call Button(Tracker.getTrack()).OnTrack() // будет вызвано echo("track2").
endfunction
Верно, 0 урона ещё также наносится как начало и конец некоторых баффов, при касет Канала на цель (если стоит галка Physical Spell), и если цель неуязвима.
Будет сообщение о детекте смерти с отображением случайного из {1, 2, 3} числа.
Если способность на кд, то сообщения о детекте смерти не будет, и, что логично, Рыцарь не будет воскрешён.
Если 1, то Рыцарь будет воскрешён своей способностью. Способность уйдёт в кд.
Если же не 1, то Рыцарь умрёт.
Чтобы воскресить Рыцаря, не используя его способность, напишите в чат '.
Если будут вопросы по этой наработке, пишите.
Сделал для одного юнита на гуи, со структурами или хештаблицей можно такое же сделать для нескольких юнитов на карте.
Ред. PT153
» WarCraft 3 / Скилл под лупу (Утечки)
Кроме бага с ResumeTimer().
Ред. PT153
» WarCraft 3 / Что я сделал не так?
Поставь своему даммику Abilities - Cast Point и Abilities - Backswing Point на 0.
Ред. PT153
» WarCraft 3 / Что я сделал не так?
» WarCraft 3 / Что я сделал не так?
Ред. PT153
» WarCraft 3 / Кель из Heroes of the Storm
DracoL1ch:
» WarCraft 3 / Кель из Heroes of the Storm
» WarCraft 3 / Некорректные числа в таблицах после слк оптимизации
Ред. PT153
» WarCraft 3 / Некорректные числа в таблицах после слк оптимизации
Открываем .slk Excel, жмём Ctrl+H, пишем что ищем и на что заменяем. Там также будет кнопка "Найти всё", "Заменить всё".
» WarCraft 3 / IsUnitInRegion
» WarCraft 3 / Как правильно реализовать?
» WarCraft 3 / Приказ строить через способность здания
Ред. PT153
» WarCraft 3 / Приказ строить через способность здания
Ред. PT153
» WarCraft 3 / Награда за юнитов противника
» WarCraft 3 / Награда за юнитов противника
» WarCraft 3 / Как прикрепить оружие и броню на юнита
pro100master:
Тестировали бы сначала, перед тем как советы давать.
UPD: способности флага чисто предметные способности, в предметах работают как надо. Если же дать способности юниту, то они не работают.
Ред. PT153
» WarCraft 3 / vjass структуры, проблема наследования
То есть даже код из вопроса работает, как нужно.
Небольшой совет: определение метода нужно писать над кодом, в котором этот метод передаётся как code, иначе на самом деле будет передана функция, что вызывает триггер, в котором уже вызывается указанный метод.
Ред. PT153
» WarCraft 3 / vjass структуры, проблема наследования
правьте рукикинь свой код Tracker и его детей в мне в ЛС. Я уж гляну, что к чему.Ред. PT153
» WarCraft 3 / vjass структуры, проблема наследования
У каждой структуры есть массив, куда записывается тип каждого объекта структуры. Пусть у Trackle айди 1, а у Button 2. При создании объекта структуры будет сделано следующее: set массив_куда_записывается_тип[объект_структуры] = айди_структуры. При создании объекта Button и в массив типа структуры Button, и в массив структуры Trackle будет записано 2.
Перезаписываемые методы - массив триггеров, у которых в качестве условия записано тело метода.
Вызов такого метода - call TriggerEvaluate(массив_триггеров[массив_куда_записывается_тип[объект_структуры]]).
В нашем случае это будет выглядеть call TriggerEvaluate(массив_триггеров_OnTrack[массив_куда_записывается_тип[getTrack(h)]]).
Ред. PT153
» WarCraft 3 / vjass структуры, проблема наследования
Ред. PT153
» WarCraft 3 / vjass структуры, проблема наследования
Также по правилам ООП в переменной типа Tracker может быть как объект типа Traker, так и объект его детей.
Ты делаешь каст integerа в Tracker, потому вызывается метод, описанный в Tracker. Если делаешь каст в Button, то сработает метод Button. Тебе нужно сделать метод defaultTrack не статичным и перезаписываемым.
Ред. PT153
» WarCraft 3 / Экран статистики
» WarCraft 3 / Урон в зависимости характеристик
Ред. PT153
» WarCraft 3 / ScSortedSelector - перебор юнитов по удаленности
Ред. PT153
» WarCraft 3 / эффект
Ред. PT153
» WarCraft 3 / Воскрешение с шанцем
Вот карта, где есть воскрешение с шансом.
Сделал для одного юнита на гуи, со структурами или хештаблицей можно такое же сделать для нескольких юнитов на карте.