32

» WarCraft 3 / [JASS] Оптимизация

Триггерам можно добавлять 100500 событий и постоянно менять условия и действия, но это муторно, годится для навороченой системы отлова физ урона 1 на всю карту и тому подобное где триггерные баши и криты будут у 100500 юнитов.
Просто удаляем и усе.
32

» WarCraft 3 / По поводу триггера

LockCameraOnTarget в гуях вроде, закрепляет камеру за юнитом не давая ниче делать.
Так же можно периодически проверять расстояние до цели, область видимости камеры и так далее и если они вышли за некие пределы, выставлять камере нужные параметры ( x,y,z, )
32

» WarCraft 3 / Выделение неограниченного количества юнитов

Clamp:
Нет, ну движок SC2 всё-таки в чём-то основывался на варике, а там выделять можно сколько угодно.
Ну сравнил божий дар с яичницей, внешне игры похожи ибо обе одного жанра и разработчика. Темболее в 8 году явно не было таких ограничений как в 1-2 не говоря что движку под стар взяли уже готовую а не пилили с нуля упорно затачивая под пк.
32

» WarCraft 3 / [JASS] Оптимизация

эм Xin из доты, там если ты про его удары по аое то их лучше делать из дамми, морфы не сбивают кулдаун атаки, если ты нанес удар потом юзнул скилл, перой тычки не последует, баг который так и не поправил фрог, делаем 2 героя, один обычный второй для прыжков.
32

» WarCraft 3 / [JASS] Оптимизация

  1. скорость перемещения 1 ставь, делов то.
  2. я про оформление в отдельную функцию а не про не юзай буль...
  3. эмм а зачем? Ты же про оптимизацию спросил, лишние действия...
  4. ты не на содержание а на оформление смотри, тут фильтр даже близко на твой не похож - как определять жив ли дело 25, тут 2 типа проверок хп и IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD)) or GetUnitTypeId() < 1, особо не важно, тебя не смутило насколько фильтр короче + не создается никаких переменных.
32

» WarCraft 3 / Как сделать столкновение?

Ну вручи им способность мина (взрывается) 'Amin' - которую нужно отредактировать, задержка запуска 0.00, ну от инвиза можно избавится временем перехода в невидимость на бесконечное.
32

» WarCraft 3 / [JASS] Оптимизация

SetUnitPosition довольно тяжелая операци, юзайте SetUnitX\Y в конце полета юзай SetUnitPosition для того чтобы юнит не залетел в непроходимое место.
Фильтр просто ужас, ну кто так фильтры делает?
Проверка на 'Aloc', я в ужасе на кой черт проверять на дамми если GropEnumUnitsInRange\Rect не выделяет москитов, тока EnumOfPlayer может пикнуть москитов, остальное не пикает их, на то они и москиты...
Вот как выглядит нормальный фильтр без локалок и прочего
function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction
UnitDamageTargetEx - красиво но нафиг ненужно обводить в отдельную функцию с тучей аргументов + жутко неудобно, 100500 аргументов у функции и фиг знает за что какой от вечает, прямо так UnitDamageTarget, без отдельной функции.
Туча констант, тоже хорошо тока длят наработок, на деле ставь конкретные значения или юзай Difine vjass'a.
32

» WarCraft 3 / как создать один то же handle дамми?

Кет:
Так же можно создавать юнитов с тем же хендлом при помощи вейта
Это как?
Был такой баг, что после вейта с каким то периодом создается обьект с тем же хендлом ..

local timer t = CreateTimer()


call BJDebugMsg( I2S(GetHandleId(t)) )

call DestroyTimer()
call TriggerSleepAction( 0.00 ) // хз скока там надо
set t = CreateTimer()
call BJDebugMsg( I2S(GetHandleId(t)) )
этот код выдаст нам 2 одинаковых дебага, первое сообщение с хендлом первого таймера будет равно хендлу второго таймера, если вейта не будет то у таймеров будут разные хендлы...
32

» WarCraft 3 / как создать один то же handle дамми?

А нафига его удалять, если есть он уже создан, смотрите всякие кофетные войны от близзард, там в центре карты сидит один дамми юнит который угощает всех и стунами и фрост новами....
Так же можно создавать юнитов с тем же хендлом при помощи вейта, но это слишком говенная идея для применения в своей карте.
32

» WarCraft 3 / Артиллерийская установка

Мне нравится делать такое дамми аттакерами, создаем N дамми с атакой (настроенной по области) и приказываем им выстрелить 1 раз в случайную точку в пределах нужной области, вот вам и урон, правда он какой попало в центре области цель может как и не получить урона так и сдохнуть с 1 залпа.
32

» WarCraft 3 / TriggerRegisterEnterRectSimple, альтерантива есть?

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

» WarCraft 3 / Gui система двойных и тройных убийств

Эмм а че вам мешает написать её самому, так же гугл в помощь.
Делаем по 1 таймеру для игрока а так же массив целочисленных, и при убийстве игроком проверяем истек или нет таймер, если истек то запускаем на N сек, если нет - то в первый раз дабл килл, запускаем снова на N сек и записываем в переменную текущий стрик игрока, на каждый таймер делаем событие в отдельном триггере что таймер истек, действие обнулить переменную со стриком.
32

» WarCraft 3 / Все ли красные тексты и bj jass триггере утечны?

зажимаешь ctrl и лкм на функцию
откроется её содержимое
и там смотри
утекает она или нет
Storm_dll:
bj_LastCreatedUnit, bj_ForLoopAIndex
если используются одновременно в нескольких триггерах то можно словить кучу багов
Можно, если руки растут не из того места...
Это темповые глобалки, в них можно записывать данные с которыми вы будите работать сразу же, без вейтов и таймеров а в том же потоке где им присвоено значение, тогда никаких багов не будет.
bj_lastCreatedUnit - годится для создания дамми юнита и добавления ему абилок, свойств, времени жизни и приказа.
    set bj_lastCreatedUnit = CreateUnit( bj_groupEnumOwningPlayer, 'hdum', GetUnitX(enemy), GetUnitY(enemy), GetUnitFacing(enemy) )
    call SetUnitPathing( bj_lastCreatedUnit, false )
    call UnitAddAbility( bj_lastCreatedUnit, 'A07D' )
    call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A07D', bj_forLoopAIndex )
    call UnitApplyTimedLife( bj_lastCreatedUnit, 0, 5.01 )
    
    call UnitShareVision( enemy, bj_groupEnumOwningPlayer, true )
    if not IssueTargetOrderById( bj_lastCreatedUnit, 852601, enemy ) then
    call BJDebugMsg,"Ошибка - невозможно применить способность!")
    endif
    call UnitShareVision( enemy, bj_groupEnumOwningPlayer, false )
В этом примере никаких утечек и багов не будет.
32

» WarCraft 3 / Вопрос: приказ боевой единице от игрока?

Я ставил опыты на разных морфах с разными настройками и зависимостями:
  1. Превратится в ворона 'Amrf'' с такими параметрами и морфом в летающего дамми юнита, гарантированно дают такой эффект.
  2. Чтобы сбить этот эффект, юнит должен пройти полный морф (подходит метаморфоза или превратися в сфинкса) с удаленными параметрами, начальная и конечная форма наземный дамми герой (какой неважно, его параметры не важны, главное чтобы земной и все, так же для юнитов для летунов летуны, для наземных земные )
  3. С рунами добится этого эффекта не получилось, потому мы останавливаем юнита и вручаем ему морф сфинкса и отдаем приказ кастануть его, морф сфинкса не сбивает приказы и не блочится сайленсом, главное чтобы в момент добавления у юнита не было никаких приказов.
Это грубый пример для рассмотрения бага мофров, для юза в своей карте надо писать свой код с 0, думая о всех если и как бы это по оптимальнее..
32

» WarCraft 3 / Вопрос: приказ боевой единице от игрока?

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

» WarCraft 3 / Как отследить попадание заклинания?

Если нету баффа, а тупо урон то кастуем скилл даммиком и проверяем на урон от этого дамми юнита.
32

» WarCraft 3 / Новый Bloodrage из DotA

quq_CCCP, можешь вытащить код Boots of Travel и Town portal?
Могу, но зачем? Там и так все очевидно...
32

» WarCraft 3 / не работает call IssueTargetOrder(d, "thunderbolt, u)?

Руками молоток пробовали применять?
так же правильнее будет делать так
       set bj_lastCreatedUnit = CreateUnit( bj_groupEnumOwningPlayer, 'hdum', GetUnitX( enemy ), GetUnitY( enemy ), GetUnitFacing( enemy ) )
        call UnitAddAbility( bj_lastCreatedUnit, 'Ast1' )
        call UnitShareVision( enemy, bj_groupEnumOwningPlayer, true )
        if not IssueTargetOrder( bj_lastCreatedUnit, "creepthunderbolt", enemy ) then
            call BJDebugMsg("Ошибка - невозможно выполнить приказ!")
        endif
        call UnitShareVision( enemy, bj_groupEnumOwningPlayer, true )
        call UnitApplyTimedLife( bj_lastCreatedUnit, 0, 1.00 )
32

» WarCraft 3 / Как программно добавить/удалить морф алхимику?

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

» WarCraft 3 / Как сделать кастомное описание предемтов во время игры?

Первое отличается от второго названием, первое предпочтительнее ибо нативка.
Ну несколько версий предметов, вот не помню работают ли формулы типа < DataA1 > в описании предметов, но вот уровни предметных абилок менять можно.
32

» WarCraft 3 / Анимация "Горгулья" Работает не правильно.

Потому что у модели для этих состояний предусмотрена именно такая анимация, это свойство модели и кроме как заставить триггерно юнита проигрывать нужную анимацию или переделывать модель путей нету.
32

» WarCraft 3 / Москиты и бафы (и красивые здания!)

Эмм а сделать через сферу чародея крови никак? У зданий куча точек, к примеру точки для крепления огня, пропиши их в сфере и установи модель того что тебе нужно, добавляя сферу зданию ты прилепиш к нему эти самые модели в точки крепления огня, здание развалится и.ничего удалять ненужно, само удалится.