Добавлен
Столкнулся с очень интересной ситуацией.
Есть 2 дамми:
Стенка, которая защищает от урона юнитов, находящихся в секторе "защиты".
Снаряд, который наносит урон при поражении врага и рушит стенку.
А теперь сама ситуация.
Если снаряд поражает стенку, то у нее отыгрывается 1 секунда смерти и в это время снаряд продолжает сталкиваться с умирающей стенкой, пока она полностью не будет удалена из игры. Но если снаряд поражает не даммика (стенку), то все нормально.
P.S. условие используется UnitAlive, юниты заносятся в группу и отсеиваются тоже условиями (ибо в 1.26 версии булэкспры часто багуются даже с минимальным кол-вом условий).
Как это лечится? Время смерти у того же работника 3.34 сек., у стенки 1 сек., но работник нормально проходит условия.

PT153:
Да, летающий.
Тем более странно, летающие не могут ни с кем столкнуться.
Я, наверное, забыл сказать, что все сделано с помощью cJass.
8gabriel8:
Atesla, приложи карту со своими стенкой и снарядом.
Мой косяк: забыл поставить для стенки условие UnitAlive. Теперь все работает как надо. Спасибо за соучастие)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Создаешь две переменные - TempPoint (тип - точка), TempUnit (тип - боевая единица)
Событие - Приводит способность в действие
Условие - Применяемая способность = "Твоя способность"
Действия:
TempPoint = позиция применяющего юнита
TempUnit = Создать твоего дамми в TempPoint
Создать таймер смерти для TempUnit на 1.0 секунд
Заставить юнита выполнить приказ (тут уже сам разберешься)
Custom Script'ом вводишь код: call RemoveLocation(udg_TempPoint)
А вообще, если у тебя более-менее серьезный проект, то советую перейти на Джасс, ибо на ГУИ в картах ниже быстродействие из-за дополнительных вызовов через БЖ-функции, а также утечки, которые как ни крути не устранишь полностью. Да и сам Джасс гораздо удобнее и функциональнее
ответ
Я бы начал с проверки фильтров и условий выводом текстовых сообщений на экран, чтобы убедиться в том, что гребёт только одного.
Скорее всего не обновляется выбранный юнит во втором цикле, я по крайней мере не вижу ни массива, ни другого механизма передачи позиции следующего юнита.
ответ
~8gabriel8:
Когда просто запускаю твою карту, то всё нормально, но если внесу изменения и пересохраняю, даже просто пересохраняю, то она перестаёт загружаться в игре, может быть ты какую-то защиту ставил? Я планировал сделать видимой модель дамми, так как работник несёт ресурсы не в ратушу, а справа от неё, то есть предположительно дамми на свободном месте, но при этом работник ополченцем не становится. Да и вообще как-то глючно работает. Ратуша начальная не улучшается компьютером, только ратуши у новых рудников, работник может добывать дерево у нового рудника, но нести его к начальной базе, хотя только что перед этим носил на базу рядом с новым рудником. Короче, глючное какое-то поведение - надо бы видеть модель дамми.
P. S. Создал карту, куда скопировал дамми, дал ему видимую модель и начал проверять. Действительно не выполняется "К оружию", если юнит над Ратушей, но если ей дать меньшую карту путей, то способность срабатывает, немного другая карта путей, но того же размера у Обсерватории-она тоже не работает. Много всего перепробовал поменять в редакторе объектов, но никак не получалось сделать призыв работающим. Тогда я из блокираторов путей решил попробовать сделать рабочую карту путей, вот каким работающий вариант получился:
Для сравнения поместил рядом ратушу. Синий цвет у карты путей обозначает, что нельзя строить, розовый, что нельзя строить и ходить. Нам важен лишь розовый цвет. Опытным путём определил, что необходимо сделать не розовым второй квадратик в правом верхнем углу сверху, необязательно тот, что у меня отсутствует, можно и тот, который выделил. Можно и больше убрать, у меня показан необходимый минимум.
То есть надо сделать новую карту путей для Ратуши/Крепости/Замка. Новые карты путей я не делал, потому не подскажу более, но есть ссылка на статью:
ответ
call CreateUnit(GetOwningPlayer(caster),'e000',kursor_x,kursor_y,0.00)
set dummy = bj_lastCreatedUnit
нативная CreateUnit не записывает юнита в bj_lastCreatedUnit, это делают только БЖ функции (вон там префикс bj_)
поменяй на
set dummy = CreateUnit(GetOwningPlayer(caster),'e000',kursor_x,kursor_y,0.00)

28
С каких пор боолэкспры багуются? Использую их и всё работает хорошо.
Стенка же юнит? Во время смерти убери поставь в SetUnitPathing на false.
8
PT153:
С каких пор боолэкспры багуются? Использую их и всё работает хорошо.
Стенка же юнит? Во время смерти убери поставь в SetUnitPathing на false.
Это странно, ибо у меня из-за двух условий булэкспр "сдувался" (или их как-то по-другому использовать?), из-за чего на одной версии все шло нормально, на другой все через одно место.
SetUnitPathing не помог, но спасибо за попытку решить проблему.
28
А стенка - здание?
При попадании можно стенку сразу удалять RemoveUnit, а для проигрывания анимации нужно в позиции стенки создавать и сразу удалять эффект, который использует модель стенки.
Atesla:
у меня из-за двух условий булэкспр "сдувался"
Что это значит? Распиши поподробнее, можешь код кинуть.
8
PT153:
А стенка - здание?
При попадании можно стенку сразу удалять RemoveUnit, а для проигрывания анимации нужно в позиции стенки создавать и сразу удалять эффект, который использует модель стенки.
Стенка юнит, но не здание (хотя подумывал насчет того, чтобы сделать ее зданием).
Можно удалять дамми и созданный эффект, но все же хочется понять, почему проверка работает по-разному для дамми и обычных юнитов.
Что это значит? Распиши поподробнее, можешь код кинуть.
Та же проверка сектора. Использовал формулу из одной темы (скриншот прилагается). Добавил свое условие (юнит – враг, сравнивая игроков) и тогда формула переставала корректно работать (условия вообще перестали работать и отлавливались все юниты).
Загруженные файлы
28
юнит – враг, сравнивая игроков
Есть такая функция
constant native IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean
Используй её.
А куда условие добавил? В той формуле не передаются юниты или игроки.
В boolexpr точно работает GetFilterUnit(), насчёт остальных таких нативок сказать не могу, но они точно не работают в boolexpr у событий.
8
Собственно, этой функцией и пользуюсь.
Формулу я в то время подредактировал для булэкспра и выглядела она так: передаются юниты (кастер из хэша, проверяемый юнит (GetFilterUnit())), находится угол и расстояние между точками (x1,x2,y1,y2). Ретурн, кроме угла и расстояния, возвращал IsUnitEnemy, однако так функция, как я писал выше, работала коряво или вообще не работала, а иногда даже создавала утечки (почему, я так и не выяснил, но это уже не интересует).
28
А сейчас эта функция есть? Я не могу найти эту наработку.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.