28

» WarCraft 3 / Приоритет по атаке

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

» WarCraft 3 / Приоритет по атаке

Скинь карту с примером такого приоритета, я наспавнил своих и вражеских юнитов, ударил каждого героем и никто не отреагировал, все бьют тех кого и били

единственное что, если умирает цель юнита, то они ищут сначала ближайщую цель не героя
28

» WarCraft 3 / Нативка SetUnitTimeScale

МрачныйВорон,
скорости анимации атаки от скорости атаки
проверил, от скорости атаки не зависит
28

» WarCraft 3 / Нативка SetUnitTimeScale

FireKnight, интересные замечания

Странно, а какими методами замерял это? У меня всё работает ровно по тику таймера
Взял первую анимацию атаки пехотинца, тоже 1 секунда

а, всё, заметил что длится дольше/меньше положенного, вероятно это связано с игровым временем?
раскрыть
library mylib initializer init
    function myfunc takes nothing returns nothing
        call DisplayTextToPlayer(Player(0),0,0,"20s")
    endfunction
    function init takes nothing returns nothing
        set bj_lastCreatedUnit = CreateUnit(Player(0),'hfoo',0,0,0)
        call SetUnitTimeScale(bj_lastCreatedUnit,0.05)
        call SetUnitAnimationByIndex(bj_lastCreatedUnit,4)
        call TimerStart(CreateTimer(),20.,false,function myfunc)
    endfunction
endlibrary
при 0.01 анимация вообще не проигрывается)

при изменении темпа игры ниже, медленная анимация так же полностью останавливается
28

» WarCraft 3 / Воскрешение в форме друида

Borodach, не будет пустой ссылка, у меня триггеры спокойно с морфами работали. Вот если юзать замену, то будет пустой
28

» WarCraft 3 / Лагает из-за большой группы

А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Нативные функции вызывают утечки, если их не обнулять. Та же работа с точками.
В бж for group нет утечек, туда лишь добавили условие по уничтожению группы если bj_wantDestroyGroup равна true. Но следующие функции вызывают утечку, например, выбрать всех юнитов на карте, там создаётся локальная группа которая никуда не девается
28

» WarCraft 3 / Лагает из-за большой группы

А с таким кол-вом условий поток не обрывается?

Да и чёт я не понимаю вариант первого "безутечного" перебора группы. По факту ты глобальной переменной присвоил значение локальной, которая создание группы, затем ты уничтожаешь группу 2 раза через разные переменные, зачем? К тому же создавать и уничтожать группу не нужно, достаточно написать перед пиком группы set bj_wantDestroyGroup = true, и всё
28

» WarCraft 3 / Отследить удар рукой

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

NatriY, в доту не играл и хз что и как там сворачивает, что ты подразумеваешь под полётом молота бурь тож не особо понимаю, он же просто летит за юнитом, нет?)

Единственные возможные проблемы, это пожалуй движение рутовой кости или же 360 анимаций для снарядов
28

» WarCraft 3 / Отследить удар рукой

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

» WarCraft 3 / Самый сложный вопрос на XGM :D

Можно в группу заносить всех питомцев и так же проверять их инту, выдавая предмет владельцу
28

» WarCraft 3 / Отследить удар рукой

просто делать триггерные аналоги нужных способностей не подойдёт?
28

» WarCraft 3 / Оптимальна ли реализация?

Если я не ошибаюсь, при удалении триггера событие же всё равно остаётся в памяти?

Звучит как создание одного громоздкого триггера...
Мой пример по такому принципу и работает, один триггер с регистрацией для всех юнитов на карте и те, кто входят в её область

Да, я знаю. Дамми-касты и всё такое
Ну вообще даммикаст только касательно дебаффов, всё остальное триггерно)
Да и на примере молний, разноцветную даммикастом фиг сделаешь)

Я же не про утечки. Например, как в гуи прицепить функцию к таймеру?
Что мешает другой триггер создать?)
Тебе в любом случае тут таймер не нужен был и я об этом и говорю, что твою затею спокойно на гуи можно было сделать
28

» WarCraft 3 / MUI ли этот триггер?

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

» WarCraft 3 / Оптимальна ли реализация?

Ну в таком случае вот
раскрыть
Я не говорю, что это идеально, но чутка получше чем у тебя
library mylib initializer init
private group TempG = CreateGroup()
private trigger trg1 = CreateTrigger()

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

private function enemy takes nothing returns boolean
    set bj_lastReplacedUnit = GetFilterUnit()
    return not IsUnitDead(bj_lastReplacedUnit) and IsUnitEnemy(bj_lastReplacedUnit,GetOwningPlayer(bj_lastCreatedUnit))
endfunction

private function damage takes nothing returns nothing
    call UnitDamageTarget(bj_lastCreatedUnit,GetEnumUnit(),udg_damage,false,false,ATTACK_TYPE_PIERCE,DAMAGE_TYPE_NORMAL,null)
endfunction

private function damage1 takes nothing returns nothing
    local unit attacker = GetEventDamageSource()
    local unit damaged = GetTriggerUnit()
    local real rad = GetRandomReal(udg_minradius,udg_maxradius)
    local real a = GetRandomReal(0,360)*bj_DEGTORAD
    local real x = GetUnitX(damaged)+rad*Cos(a)
    local real y = GetUnitY(damaged)+rad*Sin(a)
    local boolexpr b = Condition(function enemy)
    
    call KillUnit(CreateUnit(Player(15),'u000',x,y,0))
    set bj_lastCreatedUnit = attacker
    call GroupEnumUnitsInRange(TempG,x,y,udg_damage_radius,b)
    call DisableTrigger(trg1)
    call ForGroup(TempG,function damage)
    call EnableTrigger(trg1)
    call GroupClear(TempG)
    set bj_lastCreatedUnit = null
    
    set attacker = null
    set damaged = null
    set b = null
endfunction

//===========================================================================
private function myfunc takes nothing returns nothing
    call TriggerRegisterUnitEvent(trg1,GetEnumUnit(),EVENT_UNIT_DAMAGED)
endfunction
private function Trig_d1_Actions takes nothing returns nothing
    call TriggerRegisterUnitEvent(trg1,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
endfunction
//===========================================================================
private function mycond1 takes nothing returns boolean
    return GetUnitTypeId(GetTriggerUnit()) != 'u000'
endfunction
private function mycond takes nothing returns boolean
    return GetEventDamage() > 0. and GetUnitTypeId(GetEventDamageSource()) == 'hrif'
endfunction
private function init takes nothing returns nothing
    set gg_trg_d1 = CreateTrigger(  )
    call GroupEnumUnitsInRect(TempG,bj_mapInitialPlayableArea,null)
    call ForGroup(TempG,function myfunc)
    call GroupClear(TempG)
    call TriggerRegisterEnterRectSimple( gg_trg_d1, bj_mapInitialPlayableArea )
    call TriggerAddCondition(gg_trg_d1,Condition(function mycond1))
    call TriggerAddAction( gg_trg_d1, function Trig_d1_Actions )
    call TriggerAddCondition(trg1,Condition(function mycond))
    call TriggerAddAction(trg1,function damage1)
endfunction
endlibrary

Кстати, ты можешь делать намного интереснее вещи с триггерной атакой, вплоть до кривой цепной молнии скакающей по юнитам накладывающая дебаффы с отталкиванием и всей ерундой что только можешь придумать

Так-то, я раньше особо не писал на jass, недавно вот решил что гуи сковывает.
Чистый гуи да, но у тебя есть кастом скрипт, где можно обнулить точки и это всё, что в принципе нужно, чтобы эта система работала без утечек
Загруженные файлы
28

» WarCraft 3 / Оптимальна ли реализация?

map_maiker, лол, как ты вообще работаешь с кодом в обычном редакторе?
Многое теряешь без джнгп, и скорее всего, мою версию не заценишь
28

» WarCraft 3 / Оптимальна ли реализация?

map_maiker, сохрани карту перед запуском

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

» WarCraft 3 / Оптимальна ли реализация?

Сейчас попробую реализовать твою задумку, если никто не преуспеет)
28

» WarCraft 3 / Оптимальна ли реализация?

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

Как ты вообще сохранил карту без ошибок, если у тебя пересоздание переменной идёт?

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

» WarCraft 3 / Оптимальна ли реализация?

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

local location tmp = PolarProjectionBJ(GetUnitLoc(damaged), radius, GetRandomReal(0, 360)) 
-->
local real x = GetUnitX(damaged)+radius*Cos(GetRandomReal(0,360)*bj_DEGTORAD))
local real y = GetUnitY(damaged)+radius*Sin(GetRandomReal(0,360)*bj_DEGTORAD))
local unit u = CreateUnit(GetOwningPlayer(damager), 'h000',x, y, 0 ) 
Координаты обнулять не нужно

call UnitDamagePointLoc( u, 0, udg_damage_radius, tmp, udg_damage, ATTACK_TYPE_PIERCE, DAMAGE_TYPE_NORMAL )
Функция дамажит всех без исключения если не ошибаюсь, лучше самим юнитом через цикл/группу дамажить юнитов

Ой посмотрел на это всё, вообще желательно всё переписать, зачем сохранять что-то в хэш-таблицу если ты уже создал триггер для этого
28

» WarCraft 3 / Благодать\Свет небес паладина

вот пример, если в триггерах не разбираешься
хиляет и наносит урон по формуле 25 х лвл абилки + 30% от недостающего здоровья цели, так же накладывает бафф/дебафф, все остальные ништячки думаю сам разберёшься как сделать
Загруженные файлы
28

» WarCraft 3 / MUI ли этот триггер?

А как мне без других игроков проверить?
Fly123, у тебя общее событие, а не для одного игрока. Всё что тебе в данном случае нужно проверить это выделить одновременно несколько юнитов и прожать абилку, всё)
28

» WarCraft 3 / MUI ли этот триггер?

Эм.. а почему самому бы не проверить? Триггер супер простой и без каких-либо вейтов или таймеров, конечно муи)
28

» WarCraft 3 / Редактирование рельефа средствами jass

О, к слову, а что там надо чтобы адекватный рельеф был? Проходимость, летаемость и всё такое.
map_maiker, скорее всего ты имеешь ввиду про кастомную текстуру пути через фотошоп)
Альтернативный способ наложения карты путей

Вряд ли он был запланирован близзами, верно?
Хех, ну memory hack не о чем не говорит?)
думаю близы бы не "хакнули" сами себя. Там есть куча полезных функций и даже работа с фреймами, но по поводу уровней рельефа я хз, ибо им никогда не пользовался
28

» WarCraft 3 / Редактирование рельефа средствами jass

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