28

» WarCraft 3 / Пособие по публикации ресурсов

point order дает утечку системы поиска пути, например
Мы такое не проходили, нам такое не задавали)
Всё же речь про те утечки памяти, которые мы можем исправить не пренебрегая функциональностью.
28

» WarCraft 3 / AdicHelper?

Правда?
В JASS так, даже последний pjass.exe это определяет.
А посему декларация переменных поток не сбрасывается?
Не понял.
А не обращение к несуществующему элементу массива возвращало null?
Все элементы массива по умолчанию заполнены нулями.
28

» WarCraft 3 / Правка урона

вы оба не учитываете это
А, ты про ситуацию, когда полный урон убивает, а сниженный нет? Да, не подумал.
28

» WarCraft 3 / Правка урона

Классический способ:
В чём проблема через 0 секунд просто восполнить здоровье в размере полученного урона, если юнит всё ещё жив?
28

» WarCraft 3 / Правка урона

исцелить юнита на этот процент урона
Урон в EVENT_UNIT_DAMAGED наносится после завершения триггера, потому следует либо восполнить хп с помощью таймера в 0 секунд, либо способом Hate.
EVENT_PLAYER_UNIT_DAMAGING
Стоит отметить, что в триггере с таким событием урон снизится до вычета брони.
28

» WarCraft 3 / Создание проклятого рудника через триггеры

WestTiger, триггеры вообще открывал?
Найти ближайший рудник можно с помощью такого кастомого скрипта.
set Mine = MeleeFindNearestMine(startLoc, bj_MELEE_MINE_SEARCH_RADIUS)
Где startLoc - стартовая позиция игрока.
Загруженные файлы
28

» WarCraft 3 / AdicHelper?

А в чём проблема переменной без значения?
При обращении к переменной без значения поток обрывается. Вот у массивов все ячейки имеют дефолтное значение, обычнве переменные нет.
Vlod, а какая ошибка?
28

» WarCraft 3 / AdicHelper?

Vlod, ты всегда пытаешься использовать переменную без значения. Это ошибка. Во втором случае ты пытаешь использовать не определённую переменную, о чём и говорит парсер. Скачай новый pjass.exe, он укажет и на ошибки в оставшися случаях.
28

» WarCraft 3 / Как сделать для каждого игрока отдельный MultiBoard?

Много раз слышал, что мультиборды десинкают и поэтому для каждого игрока свой создают.
Где? Почему у меня не десинкают?
28

» WarCraft 3 / Ошибка в описании спасобности

Принятый ответ
Kanteu, у тебя в описаниях стоит код AUdc, тебе нужно его заменить на равкод твоей способности. Чтобы его узнать, выдели способность и нажми Ctrl+D. Перед двоеточием будет равкод способности.
28

» WarCraft 3 / Способности прыгают со своего места

MKDimon, если в спелбуке должно быть X заклинаний, то ты должен поставить минимум и максимум на X.
28

» WarCraft 3 / Хеш-таблица и юнит

Принятый ответ
действительно, почему же не работает?
Это вообще никак не влияет. Ты ещё скажи, что set a = a + 1 не работает.

Дело может быть в том, что юнит за 10 секунд разлагается.
немного исправленный код
function Reborn takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer s = GetHandleId(t)
    local unit dead = LoadUnitHandle (udg_hash, s, 6)
    call FlushChildHashtable(udg_hash, s)
    call CreateUnit(GetOwningPlayer(dead), GetUnitTypeId(dead), GetUnitX(dead), GetUnitY(dead), GetUnitFacing(dead))
    call DestroyTimer(t)
    set dead = null
    set t = null
endfunction

function Trig_Kill_Unit_Actions takes nothing returns nothing
    local unit dead = GetTriggerUnit()                      //Присваиваем убитого юнита
    local timer t = CreateTimer()                              //Создаём таймер
    local integer s = GetHandleId(t)                         //Узнаём его ID
    call SaveUnitHandle(udg_hash, s, 6, dead)       //Сохраняем юнита 
    call TimerStart(t, 10, false, function Reborn)        //Активируем одноразовый таймер на 10 секунд
    set dead = null
    set t = null
endfunction
код с учётом разложения
function Reborn takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer s = GetHandleId(t)
    local player p = LoadPlayerHandle(udg_hash, s, 0)
    local integer id = LoadInteger(udg_hash, s, 0)
    local real x = LoadReal(udg_hash, s, 0)
    local real y = LoadReal(udg_hash, s, 1)
    local real f = LoadReal(udg_hash, s, 2)
    call CreateUnit(p, id, x, y, f)
    call FlushChildHashtable(udg_hash, s)
    call DestroyTimer(t)
    set t = null
    set p = null
endfunction

function Trig_Kill_Unit_Actions takes nothing returns nothing
    local unit dead = GetTriggerUnit()
    local timer t = CreateTimer()
    local integer s = GetHandleId(t)
    call SavePlayerHandle(udg_hash, s, 0, GetOwningPlayer(dead))
    call SaveInteger(udg_hash, s, 0, GetUnitTypeId(dead))
    call SaveReal(udg_hash, s, 0, GetUnitX(dead))
    call SaveReal(udg_hash, s, 1, GetUnitY(dead))
    call SaveReal(udg_hash, s, 2, GetUnitFacing(dead))
    call TimerStart(t, 10, false, function Reborn)
    set dead = null
    set t = null
endfunction
28

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

8gabriel8, простая оптимизация. Очень легко делается, а при срабатывании триггера проверяются не все условия.
Можно сделать по другому, для каждого спела в соответствие поставить триггер и вызывать его, передавая аргументы через глобалки.
28

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

То есть в "То - Действия" нужно после всех моих действий там вписывать Skip remaining actions, чтобы оно пропускало "Иначе - действия", т.к там у меня ничего нет. Да ?
Условия на то и условия, что либо выполнится ветка then, либо ветка else. Black Soul верно ответил, это для того, чтобы другие условия пропускались. На твоём скриншоте код выглядит так.
код
If something1 then
    // actions
endif

if something2 then
    // actions
endif
В этом случае, даже если something1 = true, второе условие будет всё равно проверятся. Тебе же нужно, чтобы при обнаружении нужного условия остальные не выполнялись. Потому нужно сделать так.
код
If something1 then
    // actions
    return
endif

if something2 then
    // actions
    return  // Если это условие в самом конце, то return необязателен.
endif
От этого смысла примерно столько же, как от удаления действия Do nothing. То есть вообще незаметно.
?
28

» WarCraft 3 / Десинк с Preloader'ом

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

» WarCraft 3 / Десинк с Preloader'ом

Скорее всего не у всех есть такой файл. Потому для одного игрока юнит создаётся, а для других нет.
28

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

Skip remaining actions
Это просто return в JASS, вот и всё, после этого слова триггер завершается, так как триггер в GUI состоит из одной функции.
А диалоги багнуты чутка, их лучше всего скрывать через EnableUserInterface.
28

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

8gabriel8, он же ссылку кинул.
Black Soul:
полностью все заклинание.
Я пока вижу только проблему, когда в одну цель несколько похищений.
28

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

В каком смысле криво ?
В Jass.
If something then

elseif something then

elseif something then

else

endif
В GUI можно сделать только так.
If something then

else
    if something then

    else

    endif
endif
Прикрепил скрин триггера, правильно ли я делаю ?
Почти. Убери Do nothing, а в каждый Then добавь в самый конец Skip remaining actions. Или делай ветвление if\then\else, но это некрасиво.
28

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

просто займет оно очень много времени и сил, т.к. оно слишком громоздкое и учитывает много всего.
Не думаю, на сайте есть наработка сохранения молний через хеш, её чуть под себя обновить и 50% готово.
NazarPunk:
Хватит всем набирать код руками, ноги выбор мастеров.
Выходит, что Lua - это ноги? Я думал, что наоборот.
28

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

Принятый ответ
Или заменяются только те, у которых не написано "Реакция на событие"
Заменяются все глобальные переменные. Например, последний созданный юнит - глобальная переменная. Реакции на событие всегда нативки, но вот что из них перезаписывается, а что нет - не могу сказать, надо тестировать вручную.
GetLocalPlayer:
но на практике это не имеет смысла.
Имеет большой смысл, потому что 1 триггер проще дебажить, что 100500. Более того, события могут конфликтовать, так как триггер с удалением юнита может сработать раньше, и для всех других триггеров с таким же событием юнита уже не будет. Что уж говорить про события каста.
GetLocalPlayer:
Между тем есть такая вещь как лимит операций, в который ты можешь когда-нибудь упереться если делать все через один триггер.
Скорее лимит операций будет достигнут во время инициализации при 100500 триггеров, чем при 1 триггере с if\then\else. А тут ещё есть Lua, где можно нормально сохранять функции, так что даже if\then\else не нужен. Аналогично, но немного хуже можно сделать и на Jass.

crusader556, делать надо так, как будет удобней. На GUI if\then\else сделан криво, потому удобнее будет делать несколько триггеров. Но тогда надо будет следить за ними, чтобы они не конфликтовали.