XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
nic666

offline
Опыт: 5,612
Активность:
IssuePointOrder помогите с триггером
В карте см. тут
Искал ошибку 3 дня, вылетает варкрафт с сообщение Access Violation...
Ошибка оказалась в строке "call IssuePointOrder( u, "move", nx ,y )" если ее удалить, то нет ошибки...
Но это не интересно.

Помогите пожалуйста с картой.

Идея этого кода в том, что когда вычисляется что эффективность юнита равна нулю, - то юнит убегает на максимальной скорости.
Проверяется потенциальный юнит через FIFO буффер-массив с интервалом 0.1 секунды, переполнение массива исключено...

Код:
function BypassUnit takes unit u returns nothing
  local real x=GetUnitX(u)
  local real y=GetUnitY(u)
  local real nx

 if GetUnitStateSwap(UNIT_STATE_MANA, u) >= 1.00  then
    return 
 endif

 if GetOwningPlayer(u) == Player(8) then
     set nx = x + 1280
  else
     set nx = x - 1280
 endif

  if (nx>6911) then
    set nx = 6911
   elseif (nx<-6911) then
    set nx = -6911
  endif
  if RAbsBJ(x - nx)>256 then
    call SetUnitMoveSpeed( u, 500 )
    call IssuePointOrder( u, "move", nx ,y )
  endif

endfunction


В коде 6911 это границы карты с большим запасом где-то еще на 256 точек...

nic666 добавил:
В карте Триггер откуда это вызывается называется Bypass

nic666 добавил:
а первопричина определяется в триггерах DMG to Left и DMG to Right
- это атака одного из юнитов
Старый 18.02.2009, 14:55
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Лучше создавай динамический триггер, с событием, где мана меньше 1, нечего грузить карту ненужным таймером. Не понял последнего условия, что оно делает? И сделай его через нативки, а не бж. Походу косяк в последнем условии.

Igores добавил:
Для сведения Максимальная скорость 522, у тебя юнит че, всегда по горизонтали убегает?:-)
Старый 18.02.2009, 15:31
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Насколько я понимаю тут все глюки оттого что между отдачей приказа не стоит вейт.
Старый 18.02.2009, 16:14
nic666

offline
Опыт: 5,612
Активность:
Igores
1. Не смотрели вы карту господин лентяй! Да посмотрите карту - юнит всегда по горизонтали бегает карта 32x128 дорожка там одна...

2. Для функции RAbsBJ нет нативы :) она тут единственная с BJ и это условие не важно... оно означает "когда бежать некуда, то не надо бежать", а надо атаковать пусть даже и не эффективно...

3. Удаление строки "call SetUnitMoveSpeed( u, 500 )" не исправляет проблемы - дело явно не в ней.

4. Зачем создавать динамические триггеры, когда это требуется практически всегда ?.......
лучше сделать нормальный статический....

nic666 добавил:
PlayerDark
Цитата:
Насколько я понимаю тут все глюки оттого что между отдачей приказа не стоит вейт.

Если вас не затрудняет, обясните где именно надо поставить Wait
Старый 18.02.2009, 16:31
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
nic666 прямо перед IssuePointOrder.
Старый 18.02.2009, 16:32
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
PlayerDark, у меня в карте не стоит никаких вэйтов и всё работает нормально. Автор темы, ну тогда делай статичный триггер. Ту бж функцию можно самому написать, просто делаешь два условия и всё. Фиг знает в чем тут ошибка, вроде всё правильно. Хз, попробуй ставить в качестве координаты точки не нх, а нх-20:-)
Старый 18.02.2009, 16:55
nic666

offline
Опыт: 5,612
Активность:
не помогло... но кажется и не должно было... так как и так это не сразу запускается, а через минимум 0.1 секунды после события...
Старый 18.02.2009, 18:13
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Незнаю, тогда проблема не в коде а где то еще. IssuePointOrder часто вызывает вылет игры когда используется.
Старый 18.02.2009, 19:31
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Ну, незнаю, просто у меня в спелле создается больше сотни пустышек, которым я даю приказ бежать в нужную точку, и все работает нормально. Автор, отправь спелл, посмотрю на досуге.
Старый 18.02.2009, 22:05
adic3x

offline
Опыт: 108,439
Активность:
возможен вариант смерти в потоке другом - тригеры зарегестрированные на приказа получение событие есть ли у вас?
Старый 19.02.2009, 12:35
nic666

offline
Опыт: 5,612
Активность:
ADOLF
В первом посте ссылка на карту.

Там есть триггеры на событие "юнит атакован".
И именно в таком событии и вычисляется дамаж и наносится триггером, а если дамаж=0 то значит юнит должен бросать атаку и бежать... если непосредственно в этом триггере поставить вызов функции - то юнит не реагирует... Приходится разделять и в другом триге это делать, а в другом - ошибка вылетает. Не сразу а минут через 5-7...
Старый 24.02.2009, 08:32
adic3x

offline
Опыт: 108,439
Активность:
ну анивей возможности тестить карту у меня нету, так что хз, я лишь сделал предположение
Старый 24.02.2009, 10:09
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 09:34.