28

» WarCraft 3 / vjass структуры, проблема наследования

Я не понял, что ты хочешь, но в vJass есть каст структур Нужный_тип(переменная_структуры_другого_типа).

Также по правилам ООП в переменной типа Tracker может быть как объект типа Traker, так и объект его детей.
struct MyTracker extends Tracker
    method OnTrack takes nothing return nothing
        call DisplayTextToPlayer(Player(0), 0., 0., 5. "HAHAHAH")
    endmethod
endstruct
...
function f takes nothing returns nothing
    Tracker t = MyTracker.create();
    t.OnTarck(); // выведет текст "HAHAHAH" и ничего больше не сделает.
endfunction

Вроде понял.
Ты делаешь каст integerа в Tracker, потому вызывается метод, описанный в Tracker. Если делаешь каст в Button, то сработает метод Button. Тебе нужно сделать метод defaultTrack не статичным и перезаписываемым.

Вот как я решил твою проблему.
struct Tracker
    ...
    static method getTrack takes nothing returns thistype
        return LoadInteger(hash,H2I(GetTriggeringTrackable()),1)
    endmethod

    stub method OnTrack takes nothing returns nothing
        call echo("track1")
    endmethod
endstruct

struct Button extends Tracker
    method OnTrack takes nothing returns nothing
        call echo("track2")
    endmethod
endstruct
...
function f1 takes nothing returns nothing
    local Button t = Tracker.getTrack()
    call t.OnTrack() // будет вызвано echo("track2").
endfunction

// Делает тоже самое, что и f1.
function f2 takes nothing returns nothing
    call Button(Tracker.getTrack()).OnTrack() // будет вызвано echo("track2").
endfunction
28

» WarCraft 3 / Экран статистики

pro100master прав, перед концом игры удаляешь всех героев или передаёшь их нейтралам.
28

» WarCraft 3 / Урон в зависимости характеристик

Не надо ловить 0.
Верно, 0 урона ещё также наносится как начало и конец некоторых баффов, при касет Канала на цель (если стоит галка Physical Spell), и если цель неуязвима.
28

» WarCraft 3 / эффект

знамя альянса
Сколько раз уже говорилось, что предметы типа "знамя" не работают. Вот тут есть исчерпывающие ответы.
28

» WarCraft 3 / Воскрешение с шанцем

Вместо тысячи слов...
Вот карта, где есть воскрешение с шансом.

В карте есть Рыцарь с этой способностью.

  1. Напишите в чат ', чтобы убить Рыцаря.
  2. Будет сообщение о детекте смерти с отображением случайного из {1, 2, 3} числа.
  3. Если способность на кд, то сообщения о детекте смерти не будет, и, что логично, Рыцарь не будет воскрешён.
  1. Если 1, то Рыцарь будет воскрешён своей способностью. Способность уйдёт в кд.
  2. Если же не 1, то Рыцарь умрёт.
  3. Чтобы воскресить Рыцаря, не используя его способность, напишите в чат '.

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

» Fa_losophy / FaMPQ

Самого задолбал этот варимпортет, особенно, когда с одной карты на другое всё переносишь
Вот как я делаю импорт в своей карте.
В карте есть триггер. Он обычно выключен.
Вот его содержимое. Тут записана команда на импорт файлов из папки zMapImport.
Путь к папке zMapImport прописан в jasshelper.conf.
Сама папка zMapImport содержит в себе вот что.
В некоторых папках тоже есть папки.

А теперь сам процесс импорта:
  1. Включаем триггер Import. Можно делать не триггером, а через Extensions -> Import Directory.
  2. Сохранем карту.
  3. Закрывем карту.

Теперь всё содержимое папки zMapImport есть в карте с сохранением своего расположения относительно zMapImport и отображается в Import Manager.

Уже после пункта 2 всё содержимое папки zMapImport есть в карте, но оно не отображается в Import Manager и будет удалено, если вы выключите триггер Import и сохраните карту опять. Аналогично и со способом через Extensions -> Import Directory.

Делаем на диске папку, в которой будут файлы для импорта с необходимым расположением относительно друг друга. Если нужно добавить файл, кидаем его в эту папку по нужному пути, выполняем действия 1-3. Если нужно обновить файл, обновляем его в этой папке, выполняем действия 1-3. Если нужно всё перенести в другую карту, делаем в ней триггер (или через Extensions -> Import Directory), выполняем действия 1-3.
28

» WarCraft 3 / Замедлить скорость анимации атаки

Графика - Анимация: обратный ход броска
Графика - Анимация: точка броска
Combat - Attack x - Animation Backswing Point (Real)
The amount of time it takes a unit/building/hero to go through half the physical movement necessary to attack something. If the unit/building/hero has no animations for attacking, the time set in this field still applies, but there will be no viewed physical movement. This field combines additively with "Combat - Attack x - Animation Damage Point" to form the total time taken to physically attack a target.
Combat - Attack x - Animation Damage Point (Real)
The amount of time it takes a unit/building/hero to go through half the physical movement necessary to attack something. If the unit/building/hero has no animations for attacking, the time set in this field still applies, but there will be no viewed physical movement. This field combines additively with "Combat - Attack x - Animation Backswing Point" to form the total time taken to physically attack a target.
Как я понял, это работает так: приказ атаковать -> проходит время из "Графика - Анимация: точка броска" -> снаряд бросается -> проходит время из "Графика - Анимация: обратный ход броска" -> юнит готов к следующему приказу.
28

» WarCraft 3 / Кампания-противостояние 2

А что за карта с Дальвенгиром (2 скриншот)? Я вообще не узнаю её...
Вторая миссия кампании Альянса TFT.
Иллидан также сильно изменился. Теперь в его состав войск входят не только наги, но и дренеи, демоны, демоническая орда, сатиры и высшие эльфы.
О, а вот это хорошо.
28

» WarCraft 3 / Скелеты из атаки

шанс на фатал еррор
Если не делать глупостей, но фатала не будет.
28

» WarCraft 3 / SharpCraft XGM Addon

нем это и так можно. Закидываешь там в папку tesh\includes файл .j со своими функциями и радуешься.
А глобалки пока нельзя. :(
28

» WarCraft 3 / Скелеты из атаки

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

» WarCraft 3 / Скелеты из атаки

кстати можно по идее так мины какие-нибудь спавнить и делать рендж сплеши при атаках или стазис ловушки и еще до фига... кул идея короче!
Полностью поддерживаю, но у юнита, что заспавнится уже из умершего даммика, будет таймер жизни, и он будет считаться суммоном.
Потому если нужен вечный выделяемый юнит, нужно сделать даммика без модели с равкодом Х, способность на основе 'Apts' с длительностью 0.01 и триггер с событием Enters map и условием на сравнение равкода и действием "Создать нужного юнита".

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

» WarCraft 3 / Jass утечка, спецэффект

Принятый ответ
function check takes nothing returns boolean
    local unit u = GetFilterUnit()
    local player p = GetOwningPlayer(caster)
    local real coneAngle = TransferDegrees(bj_RADTODEG * Atan2(GetUnitY(u) - GetUnitY(caster), GetUnitX(u) - GetUnitX(caster)))
    local real sector = 30
    local boolean answer =  u != caster and IsUnitEnemy(u, p) and IsUnitVisible(u, p) and IsUnitAliveBJ(u) and GetUnitFacing(caster) - coneAngle <= sector and GetUnitFacing(caster) - coneAngle >= sector - sector*2
    set u = null
    set p = null // игрока можно не обнулять, их всё же очень конечное количество.
    return answer
endfunction
На кол-во handles это никак не повлияло.
Потому что никто из твоих FilterUnit() не был убран из игры. Без обнуления после удаления юнита хэндл бы остался, а с обнулением, был бы освобождён для нового использования.
У них стандартное время смерти 5 секунд, смотри игровые константы.
Поставь в игровых константах Decay Time - Effects время меньше, но не очень маленькое, а то анимация смерти эффекта проигрываться не будет.

Чтобы не плодить переменные эффекта, сделай такие функции:
function CreateEffectPoint takes string s, real x, real y returns nothing
    call DestroyEffect(AddSpecialEffect(s, x, y))
endfunction

function CreateEffectTarget takes string s, widget w, string att returns nothing
    call DestroyEffect(AddSpecialEffectTarget(s, w, att))
endfunction
Во время сохранения при включённой оптимизации кода и выключенном режиме дебага эти 2 функции будут "раскрыты", и в конечном коде будут только DestroyEffect(AddSpecialEffectTarget(...)).
У Inline оптимизации есть некоторые требования для передаваемых параметров, потому функции не в некоторых случаях не будут "раскрыты".
28

» WarCraft 3 / Jass утечка, спецэффект

Да нет там никакой утечки -_-
Есть, ты не обнуляешь u. Как я уже сказал, создай логическую переменную, запиши ответ, обнули u и верни ответ.
28

» WarCraft 3 / Jass утечка, спецэффект

юзай тут глобалку
Тут можно создать локальную логическую, а хендлы обнулить.
KingMaximax:
ни удаляются с игры не сразу, а постепенно
У них стандартное время смерти 5 секунд, смотри игровые константы.
28

» WarCraft 3 / Jass утечка, спецэффект

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

» WarCraft 3 / Дальность атаки через предмет, триггер или способность

Можно использовать способность "Ловчий" для увеличения дальности, но тогда герой не может передвигаться. Ещё можно сделать герою даммики с разной дальностью, которые и будут атаковать. То есть если предмет есть - даммик один, предмет выкинул, даммик другой. Ещё можно использовать морфы.
28

» WarCraft 3 / Скелеты из атаки

потому что у него есть способность "aloc", москиты.
Так-то у скелета нет этой москитов изначально, Проверка также показала, что москитов тоже нет. Просто 'Apts' делает юнитов такими.
Загруженные файлы
28

» WarCraft 3 / Скелеты из атаки

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

Прикрепил карту с катапульной, которая спавнит скелетов при атаке.

Поэкспериментировал немного.
Юнит, призванный этой способностью, не вызывает события спавна, но вызывает событие "Входит в область". Ему также можно давать приказы триггерно.
Хм, так можно даммики делать.
Загруженные файлы
28

» WarCraft 3 / Отобрать контроль над юнитами

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

» WarCraft 3 / Проблемы с постройкой зданий

а если поставил очередь строительства, потом блокировал постройки, то они всё равно строятся?
Нет, только что проверил.
28

» Fa_losophy / FaMPQ

А для обработки иконок есть BLP Laboratory.
Про обработку иконок (точнее создание рамок) это я сказал кстати, так я использую Button Manager для рамок, а BLP Lab только для оптимизации и конвертации.
28

» Fa_losophy / FaMPQ

Вот у меня вопрос в чём истинная цель создание ещё одного MPQ правщика, если есть другие. Вы хотите добиться умного импорта, которого нет у других правщиков. Али просто вы делаете его как хобби?
Как я уже говорил, весь функционал, которого не хватало Fakovу, есть в Grimex, Fakov просто о нём не знал. Я всё импортирую в 2 клика - включаю триггер, где 1 строка с импортом и сохраняю карту. Но карту нужно закрыть и открыть снова, а это большой минус для карт, загрузка которых требует продолжительного времени.

Я не хочу сказать, что Fakov занимается ерундой. Его утилита как раз подойдёт для громоздких карт. Ну а также, я надеюсь, эта утилита станет альтернативой Grimex, что хорошо.
Grimex помимо импорта, может сразу сделать нужное обрамление иконки и много чего ещё. Я тут в комментариях кидал мануал Grimex на английском.
28

» WarCraft 3 / Усиление нейтрально враждебных

А можно изначально дать способность всем нужным юнитам в Редакторе Объектов, но заблокировать её нейтрально-враждебному игроку. Как только нужные условия будут выполнены, разблокировать способность.