28

» WarCraft 3 / Как поменять "комментатора"?

я специально уточнил, сколько, где фраз, непросто так...
У нежите 1 доп. фраза - "Можно построить только на порченной земле". У эльфов - "Нельзя закопаться здесь". А что у наг, не знаю.
28

» WarCraft 3 / Jass тригеры

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

» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)

да нет там ск2 движка, выяснили уже, слегка подправленый вк3 движок с новым рендером.
Я имел в виду, что движок варика не меняли, просто обновили, а потому если у не ремейка есть проблемы с рекконектом, но у ремейка они вполне могут остаться, что вероятнее всего.
Doc:
говновый как в хоце
Лично я опешил от реконнекта в СК2, так что в героях ещё норм)
28

» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)

По факту реконнект это главная проблема
Ну такая же проблема у Хотса и СК2, так что тут вряд ли что поменяется. Тем более, что движок тот же.
28

» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)

prog:
Ну и ведро холодной воды вам за шиворот - 200% что будет каск а не mpq файловая система, плюс дополнительные слои защиты от мемхака и прочих кастомных костылей. Иными словами - 1.30+ вар с красивой графикой, а не 1.26.
Ну да, это же очевидно. Но вот если они предоставят достойную замену мемхаку и пофиксят все баги между механиками вара, то будет хорошо.
28

» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)

либо не дадут делать кастомки, либо как-то за это бабки срубать попытаются с игроков и эдиторов.
Скорее сделают как в СК2.
28

» WarCraft 3 / Jass тригеры

Такое ощущение. что тут один рукожопы собрались.
Ну тогда зачем рукожопам пишешь? Если нужна помощь - обращайся и полностью описывай проблему. Будешь указывать своё отношение к тем, кто тебе может помочь, тебе никто помогать не станет.
Тут есть хоть один человек, который может взять импортнуть триггер во взломанную мапу что бы она работала? И за какую цену.
Ты сказал, что ты сам хочешь это сделать.
28

» WarCraft 3 / Какую версию jasshelper лучше использовать?

Пушистый:
Наверное, проблема в путях (проверить нужно кириллицу). Не думаю, что компилировался файл, который находится в корне диска. Это все от кириллицы в имени папок.
Подтверждаю, карта не запустится, если у файла не та кодировка. Я просил Hanuman сказать, какая кодировка у получаемого файла, но он не ответил.
28

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

Охренеть тут холивар.
)
то нагрузки будет меньше
Да никто не знает. Будет лагать - напишешь вопрос, разберёмся.
нужно сделать так
Триггер 1.
Событие - юнит входит в область Вся карта
Условие - тип юнита не есть Y
Действие - Добавить событие в триггер 2 Вошедший юнит Получает урон

Триггер 2.
Событие - нет
Условия - тип источника урона есть Y
Действия - Trig_Aura_Strenght_Actions
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
    set caster = 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 / Способность: повышение атаки при каждом ударе

чем тогда разница между тем, чтобы просто условие поставить?
boolexpr быстрее.
почему у атакующего
Потому что так сделали разработчики. Это легко проверить. Просто выводишь имя GetFilterUnit().
ДАЖЕ СОБЫТИЕ НЕ СРАБАТЫВАЛО!!
Такого нет, да.
28

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

АТАКОВАННОГО
У атакующего, сам проверял.
событие даже проверяться не будет
Событие сработает, но если способности нет, то условия и действия триггера не будут вызваны.
28

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

function filter takes nothing returns boolean
    return GetUnitAbilityLevel(GetFilterUnit(), 'A000') > 0
endfunction

function Actions takes nothing returns nothing
    // сработает только если filter вернёт true
endfunction

function InitTrig takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(t, Player(0), EVENT_PLAYER_UNIT_ATTACKED), function filter)
    call TriggerAddAction(t, function Actions)
endfunction
28

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

ну и как это в виде полного кода-то выглядит?
Срабатывает событие.
Проверяется фильтр события, если есть.
Проверяются условия триггера, если есть.
Запускаются действия.
Extremator:
Вот здесь реально смешно))) т.е. ты думаешь что объект group - это плохо, а большое количество лишних объектов event - это нормально (если не сказать "хорошо")
Я думаю, что много объектов event лучше, чем постоянное срабатывание триггера и вызов функции на проверку наличия в группе, особенно если одного юнита атакуют 10 других, и одновременно так происходит в 11 точках карты каждую секунду, если не каждую долю.
А так - ... у меня своя карта типа доты, ивент на "юнит атакован", и за 2 часа противоборстава ничего лагать не начинает... (хотя там и вампиризм на той же основе, выжигание маны, всякие огненные/ледяные атаки, абилки с шансом срабатывания типа критов, башей, пульверайз, в том числе ауры - аура вампиризма, аура выжигания маны (атакой офк), аура молниевых ударов (шанс бахнуть доп.маг.урон по цели для каждого под аурой) и т.д. и т.п.
А чего лагать будет, в картах наподобие доты не так много атак случается, потому что героев всего 10, а крипов тоже конечное кол-во.
Всегда можно узнать, сколько раз сработало событие (в нём не должно быть фильтра), с помощью одной нативки.
28

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

ClotPh, есть такое.
native TriggerRegisterFilterUnitEvent takes trigger whichTrigger, unit whichUnit, unitevent whichEvent, boolexpr filter returns event
native TriggerRegisterPlayerUnitEvent takes trigger whichTrigger, player whichPlayer, playerunitevent whichPlayerUnitEvent, boolexpr filter returns event
28

» WarCraft 3 / Дамми

Да, летающий.
Тем более странно, летающие не могут ни с кем столкнуться.

У стенки и снаряда это поле должно быть False.
Также стоит проверить этот пункт.
Загруженные файлы
28

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

А этот парень что-то знает... ))
Это пункт я объяснил. В фильтрах событий, GetFilterUnit() как правило возвращает юнита, что вызвал триггер.
))
Это, в общем-то и есть boolean, но через функцию.
ты думаешь что объект group - это плохо, а большое количество лишних объектов event - это нормально (если не сказать "хорошо")
Нет, не думаю, вопрос только в том, насколько лишними эти объекты будут.
Вообще - пруф в студию.
Выше.

В каждой карте, когда создаётся объект, ей даётся свой ID, который на 1 больше предыдущего ID. Так вот, если коротко, то там создаётся объект и его ID вычитается от наименьшей возможной ID ( 0x100000 ), то есть если ID нового объекта - 0x100512, то разница будет равна 0x512. Значит на карте примерно 0x512 объектов. Вот таким нехитрым образом и работает данный счётчик.
Понятно, но почему он тогда в -100 ушёл?
Вот скрин, тут не -100, но меньше нуля.
А ещё мне кажется, что цикл создания локаций может никогда не закончится, потому что мы зануляем next, если index != previndex + 1.
Ещё по поводу объектов: image и player имеют ID куда меньше 0x100000, но тоже объекты.
Extremator:
Ооо... далеко пойдёшь...
Спасибо)
ClotPh:
событие: юнит атакован обладателем пассивки Страшный Топор"
Такое есть, делаем проверку в фильтре этого условия.
28

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

А ещё иногда при нажатии на ESC счётчик на некоторое время увеличивается на несколько сотен, а потом вновь возвращается назад. Странно всё это, лучше лича об этом спросить.
28

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

Пока триггер существует, существуют и все зарегистрированные события на уже несуществующих юнитов.
У меня при нажатии ESC ничего не происходит.
А почему этот счётчик верен?

Хм, а сейчас заработало.
Крутой счётчик, в -100 ушёл.
28

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

Ни разу не сталкивался, пример есть? С условием, что атакующий какой-то один герой
Так это событие будет срабатывать на замах любого юнита, отсеять ненужных можно в фильтре или событии. Факт в том, что срабатывать будет.
У меня лагало, но атакующих юнитов было много. Также в этом триггере была сложная функция. Решил проблему отключения выполнения сложной функции на некоторое время для каждого определённого юнита.
В частности, quq_CCCP меня ругал за то, что я в своей карте использую это событие.

В любом случае, оба способа не гарантируют, что юнит-таки получит урон, но первый способ проще.
8gabriel8:
человек жаловался в своё время, что через минут 10-30 интенсивного спавна с этим добавлением события начинало сильнейше лагать.
Помню-помню такое, но в это слабо верится, потому что кто-то более разбирающийся говорил, что как только юнит удаляется, а все ссылки на его хендл обнулены, то и все зарегистрированные события для него удаляются. Лаги может вызывать много чего, если неразумно использовать.

А вообще тут опять ушли от вопроса и начали холивар об оптимизации)
28

» WarCraft 3 / Дамми

Снаряд летающий? Ещё может быть у стенки есть какие-то настройки, которые не позволяют ей пропускать через себя снаряд.
28

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


Способ с событием Вся карта и условием отсеивающее ненужных юнитов.
Плюсы.
  • Простой
  • Не нагружает игру
Минусы.
  • Зарегистрированный юнит возможно так и не будет атакован

Способ Extremator.
Плюсы.
  • Регистрирует не всех юнитов.
Минусы.
  • Для верной работы требуется создание доп. объектов.
  • Постоянно срабатывает во время игры.
  • Зарегистрированный юнит возможно так и не будет атакован, так как UNIT_ATTACKED срабатывает при замахе.

сильнейше лагать
Сильнейше лагать будет и от UNIT_ATTACKED, так что такой способ определённо не выход.
8gabriel8:
И есть ведь вроде действие, которое возвращает изначальное состояние триггера до добавления в него событий, условий и действий?
Есть такое, но я не знаю, так ли оно работает, как ты описал.
native ResetTrigger takes trigger whichTrigger returns nothing