28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

создаёшь группу
Но зачем, когда можно просто регистрировать во время входа. 1 добавленное событие проще 1000 срабатываний триггера с проверкой.
Само событие UNIT_ATTACKED сильно нагружает игру
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

указал в скобках +фильтр, тебе не кажется, что это что-то должно значить?
В фильтре можно только прочекать GetFilterUnit(), а для события получения урона GetFilterUnit() возвращает наносителя.

Да и как ты проверишь, что для этого юнита уже зарегистрировано событие без создания доп. костылей?
Само событие UNIT_ATTACKED сильно нагружает игру, потому что срабатывает каждый раз при замахе. У меня из-за частого срабатывания этого события сильно глючила игра. А событие на вход во всю карту срабатывает 1 раз за игру.
Решение Extremator требует сохранения boolean, которое будет отвечать за регистрацию такого события и будет уникально для каждого юнита. И оно также может вызывать лаги. Потому с точки зрения оптимизации и с точки зрения простоты способ ниже самый лучший, если получить урон может любой юнит. Если не любой, то просто в условии или в фильтре отсеиваем ненужных.
Событие. Юнит - Юнит входит в область Вся карта.
Действие. Триггер - Добавить событие такому-то триггеру Вошедший юнит Получает урон.
28

» WarCraft 3 / Дамми

Какая?
Принадлежность точки сектору. Я не смог найти эту наработку в поиске, почему-то.
28

» WarCraft 3 / Дамми

А сейчас эта функция есть? Я не могу найти эту наработку.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

Ведь можно вешать только на тех, кто будет атакован с такой абилкой... Нее?
Но ведь атакованы могут быть все.
Extremator:
Нее?
И каждый раз, когда юнит будет атакован юнитом со способностью X, будет добавляться событие, из-за чего триггер будет срабатывать кучу раз для атакованного юнита.
PT153:
UNIT АТАКУЕТ
Его просто сделать, если добавить фильтр в событие UNIT_ATTACKED. Фильт отлавливает только того, кто атакует, как ни странно.
28

» WarCraft 3 / Дамми

юнит – враг, сравнивая игроков
Есть такая функция
constant native IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean
Используй её.
А куда условие добавил? В той формуле не передаются юниты или игроки.
В boolexpr точно работает GetFilterUnit(), насчёт остальных таких нативок сказать не могу, но они точно не работают в boolexpr у событий.
28

» WarCraft 3 / Дамми

А стенка - здание?
При попадании можно стенку сразу удалять RemoveUnit, а для проигрывания анимации нужно в позиции стенки создавать и сразу удалять эффект, который использует модель стенки.
Atesla:
у меня из-за двух условий булэкспр "сдувался"
Что это значит? Распиши поподробнее, можешь код кинуть.
28

» WarCraft 3 / Как скрыть характеристики врагов ?

на гуи просто так дать и убрать?
Ну да, функция на Jass и в гуи одинаковая.
28

» WarCraft 3 / Дамми

С каких пор боолэкспры багуются? Использую их и всё работает хорошо.
Стенка же юнит? Во время смерти убери поставь в SetUnitPathing на false.
28

» WarCraft 3 / Как копировать данные ландшфат?

Вообще, вроде бы рельеф можно перенести, скопировав из .mpq карты какой-то файл, но я не знаю какой.
28

» WarCraft 3 / Система стана

насколько помню с этим была какая то проблема, в доте почему не юзнули
Я вот поэтому многие механики игры и не использую, потому что иногда такие сюрпризы получаются.
28

» WarCraft 3 / Система стана

Как бы флаг стана используют 100500 стандартных дисейблов в варе, смерчь, огненная сетка, и многое другое.
Я имел в виду только те способности, что используют бафф стана BPSE. Но даже из этого есть выход, нашему стану мы даём кастомный бафф.
PT153:
Но в таком случае придётся отказаться от других станящих способностей.
Так что не придётся.
Всё. Кастомная система баффов готова.
Только не баффов, а станов.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

А как создать событие Получает урон,
Есть для определённого юнита. Если есть юниты на карте, регистрируем для них. Для юнитов, что создаются во время игры, надо сделать такой триггер.
Событие. Юнит - Юнит входит в область Вся карта.
Действие. Триггер - Добавить событие такому-то триггеру Вошедший юнит Получает урон.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

То есть если нет таймера, то он создаст его, а если таймер есть, то он увеличит уровень способности? (я немного запутался просто)
Да, ведь так должен спел работать? Я из описания вопроса так понял.
И такой способ для события Получает урон?
Событие "Юнит атакован" срабатывает во время замаха. Это можно абузить. Для каждого юнита на карте нужно зарегистрировать событие по получению урона. Для каждого, потому что общей такой функции нет.
28

» WarCraft 3 / Система стана

Потеря очереди приказов (у юнита) из-за такого стана не играет для вас вообще никакой роли?!
Это к кому обращение? У меня не играет, потому что.
PT153:
у меня это делается на юнитов, которых никто не контролирует
Да и у способа UrsaBoss не должно быть прерываний текущей очереди приказов.

Делается очень просто.
На каждого юнита приходится 1 число. Как только он получается стан, это число увеличивается на 1. Как только какой-то стан истекает, число уменьшается на 1. По истечению стана проверяем, чему равно число. Если 0, то снимаем бафф. Если больше 0, то ничего не делаем.
Чтобы было всё нативно, используем такое наложение стана.
UrsaBoss:
Один дамми молот бурь с 0 времени стана (или -1)
Далее хештаблица и таймер, сохраняешь юнита по хендлу таймера и запускаешь его на нужное время
Всё. Кастомная система баффов готова.

Но в таком случае придётся отказаться от других станящих способностей.
28

» WarCraft 3 / Почему нельзя вызвать через code переменная?

даже через интерфейс то пашет а если без него нет..
Не, не надо создавать переменные типа code. Просто пишешь имя функции, а после неё сразу .evaluate() или .execute(), если нужно создать новый поток.
28

» WarCraft 3 / Копирование триггеров в war3map.j

какой jasshelper в блокноте?
Прочитай мануал к jasshelper, его можно вызывать без JNPG.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

крутил-крутил-вертел код, сделал так, вроде, работает, но мне кажется, что можно лучше
У тебя всё равно плодятся таймеры при каждом замахе. Через несколько минут игры будут лаги. Лучше глянь сообщение над своим.
Они бы не плодились, если бы была проверка на наличие способности, которую добавляешь (если уровень способности больше нуля, ничего не делаем). Но такой проверки нет.

Нашёл ошибку в своей реализации, исправил.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

Во-первых, измени событие на получение урона, а не на срабатывание атаки.
А во-вторых, у тебя при каждой атаке плодятся таймеры.

Вот нормальная реализация.
index -- любое удобное для тебя число.
// Эта функции вообще не нужна
function Trig_Aura_Strenght_Conditions takes nothing returns boolean
    return true
endfunction

function Aura_Strenght_Lost takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer tid = GetHandleId(t)
    local unit caster = LoadUnitHandle(udg_Hash,tid,47)
    local integer cid = GetHandleId(caster)
    call FlushChildHashtable(udg_Hash, tid)
    call RemoveSavedHandle(udg_Hash, cid)
    call UnitRemoveAbility(caster,'S001')
    call DestroyTimer(t)
    set t = null
endfunction

function Trig_Aura_Strenght_Actions takes nothing returns nothing
    local unit caster = GetAttacker()
    local integer cid = GetHandleId(caster)
    local timer t = LoadTimerHandle(udg_Hash, cid, index)
    local integer level
    local integer tid
    if t == null then
        set t = CreateTimer()
        call SaveTimerHandle(udg_Hash, cid, index, t)
        set tid = GetHandleId(t)
        call SaveUnitHandle(udg_Hash, tid, 47, caster)
        call SaveInteger(udg_Hash, tid, 47, 1)  // НЕ перезапишет юнита
        call UnitAddAbility(caster, 'S001')
    else
        set tid = GetHandleId(t)
        set level = LoadTimerHandle(udg_Hash, cid, index) + 1
        call SetUnitAbilityLevel(caster, 'S001', level)
        call SaveInteger(udg_Hash, tid, 47, level)
    endif
    call TimerStart(t, 5., false, function Aura_Strenght_Lost)
    set t = null
    set caster = null
endfunction
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

каким образом при повторной атаке сбросить таймер на 0.00
Каждый раз стартуй его заново.
28

» WarCraft 3 / Система стана

учитывают наличия других источников оглашения и их взаимодействия.
Если в карте используется только такой стан, то все взаимодействия учитываются, иначе это плохая система.
И почему "ваши"?) Способ UrsaBoss вполне нативный же.
ты не отдашь любой другой приказ
Я так понимаю, что это касается только управления от игроков.
28

» WarCraft 3 / Отслеживание срабатывания способности

при этом триггер "Юнит завершает применение способности" не срабатывает
Только проверил, на эту способность срабатывает. После применений ты сразу же отдаёшь новый приказ, и текущий прерывается, а событие срабатывает только по успешном завершении применения способности. Используй событие "Прекращает применение способности".
Да что уж говорить, это событие срабатывает на все способности, которые могут быть отловлены событиями для способностей.
28

» WarCraft 3 / Проблема с JNGP

Absolute, так поставь FNWE, надстройка над JNPG, там перевод нормальный.
28

» WarCraft 3 / Система стана

Полностью кастом стан
Почему?

В моей карте сделан кастомный стан наряду с другими баффами. Я просто отдаю приказ стана юнитам на то время, что нужно. После истечения отдаётся приказ идти. Но стоит отметить, что у меня это делается на юнитов, которых никто не контролирует, так что стоит проверить, может ли игрок контролировать юнитов, пока они в таком стане. Полагаю, что не может, ибо даже нативный стан можно обойти триггерным приказом во время получения стана.

Способ UrsaBoss самый лучший, если не нужно делать систему кастомных баффов.