28

» WarCraft 3 / Продажа юнитов

скачал, пробую открыть, не открывает - вызывает ошибки и фатал редактора. ver 1.26
Может дело в отключённом vJass или включённом cJass.
28

» WarCraft 3 / Эволюция персонажа

Ельнур:
перевоплощение иллидан используй и убери поставь там длительность 0
Зачем, если можно просто морф?
28

» WarCraft 3 / Удален

Принятый ответ
//! inject config
    // code
//! endinject
Нужен vJass.
28

» WarCraft 3 / Как сделать триггер

Событие: юнит завершает исследование
Условие Изученное исследование равно Х
Действия:
    set bj_wantDestroy = true
    Выбрать всех юнитов из группы (Все юниты Игрок-владелец(Юнит триггера)) и сделать действия:
        Если\то\иначе
            Условие: Тип Выбранного юнита равен Y
            То:
                Создать 5 юнитов типа Z Игроку-владелецу(Юнит триггера) в точке Позиция(Выбранный юнит)
                Удалить Выбранного юнита
            Иначе: <пусто>
28

» WarCraft 3 / Как сделать триггер

Принятый ответ
Это можно сделать и без триггера, смотри способности и улучшения самоходной машины.
28

» WarCraft 3 / Как найти ближайший разрушаемый объект?

Во время инициализации создаём все необходимые точки через Object.create(), затем после создания всех деструктаблов вызываем Object.findClosestDestForAll(). При создании нового деструктабла нужно вызвать Object.updateDestForAll(), а при смерти - Object.findClosestDestForAll(). Как ловить смерть я уже говорил.
Детектим смерть деструктабла с помощью события на смерть виджета и условия, что деструктабл триггера не нулл.
Код
function GetDistanceDestPoint takes destructable d, real x, real y returns real
    local real dx = GetDestructableX(d) - x
    local real dy = GetDestructableY(d) - y
    return SquareRoot(dx * dx + dy * dy)
endfunction

struct Object
    readonly static real StartDistance
    readonly static rect World
    private static boolexpr filter
    
    static thistype array entities
    readonly static integer top = -1
    
    real x
    real y
    readonly destructable d
    private real distance = StartDistance
    private integer index
    
    static method create takes real x, real y returns thistype
        local thistype this = allocate()
        set this.x = x
        set this.y = y
        set top = top + 1
        set entities[top] = this
        set index = top
        return this
    endmethod
    
    method onDestroy takes nothing returns nothing
        local integer i = index
        if i < top then
            set entities[i] = entities[top]
            set entities[i].index = i
        endif
        set top = top - 1
        set d = null
    endmethod
    
    method updateDest takes destructable d returns nothing
        local real dist = GetDistanceDestPoint(d, x, y)
        if dist > distance then
            set this.d = d
            set distance = dist
        endif
    endmethod
    
    static method updateDestForAll takes destructable d returns nothing
        local integer a = 0
        loop
            exitwhen a > top
            call entities[a].updateDest(d)
            set a = a + 1
        endloop
    endmethod
    
    private static method FilterFunc takes nothing returns boolean
        //local destructable t = GetFilterDestructable()
        //if GetDestructableTypeId(t) == 'ATtr' then
        //    call TransmittedObject.updateDest(t)
        //endif
        //set t = null
        call TransmittedObject.updateDest(GetFilterDestructable())
        return false
    endmethod
    
    private static thistype TransmittedObject
    
    method findClosestDest takes nothing returns nothing
        set TransmittedObject = this
        call EnumDestructablesInRect(World, filter, null)
    endmethod
    
    static method findClosestDestForAll takes nothing returns nothing
        local integer a = 0
        loop
            exitwhen a > top
            call entities[a].findClosestDest()
            set a = a + 1
        endloop
    endmethod
    
    private static method OnInit takes nothing returns nothing
        local rect r = GetWorldBounds()
        local real dx = GetRectMaxX(r) - GetRectMinX(r)
        local real dy = GetRectMaxY(r) - GetRectMinY(r)
        set StartDistance = SquareRoot(dx * dx + dy * dy) * 2.
        set World = r
        set r = null
        set filter = Filter(function thistype.FilterFunc)
    endmethod
endstruct
Я же верно понимаю, что деструктаблы не двигаются?
28

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

это не зацикливание, а рекурсия
Раз уж на то пошло, то это бесконечная рекурсия, так как нет условия для остановки.
Вообще, в ЯП рекурсия и циклы взаимозаменяемы, но в JASS циклы предпочтительнее.
28

» WarCraft 3 / Как найти ближайший разрушаемый объект?

для гуи нубов варианта получается нет?
В JNGP должно быть такое, но лучше на JASS.

Я вот такое имею в виду.
function FilterFunct takes nothing returns boolean
    local destructable d = GetFilterDestructable()
    local integer T = GetDestructableTypeId(d)
    if T == ... then
        // ...
    elseif T == ... then
        // ...
    endif
    set d = null
    return false
endfunction

function SomeFunct takes rect r returns nothing
    call EnumDestructablesInRect(r, Filter(function FilterFunct), null)
endfunction

А вообще, предлагаю сделать так. Тем более, выполняется такое условие.
Точка X неподвижна.
Для каждого нужного объекта вычисляем ближайший деструктабл во время инициализации.
Детектим смерть деструктабла с помощью события на смерть виджета и условия, что деструктабл триггера не нулл. Пересчитываем для каждого объекта ближайший деструктабл.
При создании нового деструктабла для каждого объекта сравниваем его текущий ближайший деструктабл с новым. Если новый ближе, заменяем. Если нет, то ничего не меняем.
28

» WarCraft 3 / Как найти ближайший разрушаемый объект?

как отсеивать в пике дудады, если условных пиков нет?
В фильтре пишешь условие, внутри которого и делаешь все необходимые действия, а codeAction скипаешь.
28

» WarCraft 3 / Не работает нестандартное заклинание

(код абилки в оригинальной карте со спеллом)
Потому я всегда делаю переменные, в которые заношу равкоды, если делаю какую-то наработку на гуи.
28

» WarCraft 3 / За что отвечают данные функции?

а ниче, что эта строчка регулирует переходы между анимациями, делая их более плавными?
Откуда такая информация? Я свою взял вот отсюда.

Проверил, Hate прав.
Загруженные файлы
28

» WarCraft 3 / Удаление лишнего

вроде шарит в этом софте по slk)
Нет, я с .slk никогда не работал, потому что у меня нет кучи важных вещей в РО, большая часть попросту способности-иконки.
28

» WarCraft 3 / За что отвечают данные функции?

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

» WarCraft 3 / Новый тип переменной

Не пойму,она клик мышкой что ли отлавливает?!)))
Да, такое добавили.
28

» WarCraft 3 / Если unit == null

а есть вариант побыстрее, слышал, что строки грузят сильно.
Конечно.
function UnitExists takes unit u returns boolean
    return GetUnitTypeId(u) != 0
endfunction

function UnitDoesNotExist takes unit u returns boolean
    return GetUnitTypeId(u) == 0
endfunction
28

» WarCraft 3 / Ошибка, при объявлении библиотеки.

Так ты всю либо кинь.
Скорее всего, у тебя эта функция что-то возвращает.
28

» WarCraft 3 / повернуть здание через мемхак

"чтобы перерисоваться"
здание поворачивается пол секунды)
а ShowUnit тупо перерисовка
А если убрать скрытие юнита перед раскрытием, то второе будет иметь эффект?
28

» WarCraft 3 / Передача локальной переменной

Локальная в другой триггер не перейдет или будет утечка.
Какая утечка? Ты знаешь, что такое memory leaks (утечки)?
28

» WarCraft 3 / Надбавка золота за уровень исследования

Сделал без триггеров, как и хотел. Спасибо 8gabriel8 за подсказку.
Но есть 1 ограничение: Unit Availability Change работает, только если стоит галка Applies To All Units (global, если смотреть в Ctrl+D). Но в этом случае увеличение хп работает только на новых юнитов, старые бегают без грейда.

Были добавлены грейды, изменены кузница, пехотинец, настройки улучшений для красного игрока.
Грейды стоят столько, сколько хотел автор: 25\50\100.

Чтобы видеть равкод для Unit Availability Change, нужно нажать Ctrl+D.
Загруженные файлы
28

» WarCraft 3 / Проблема с редактором карт на 24 игрока

Принятый ответ
Тебе нужно поставить "Фиксированные настройки игроков" во вкладке Кланы.