Steal nerves #1 - 11 часов назад (отредактировано ) 1

» WarCraft 3 / Перемещение юнитов с тем же положением

Эхх. Ты неправильно делаешь (конечно все будет по-другому, те команды дадут другой результат. Конвентируй в код и посмотри). думаю объяснить сложнее будет. Сделал на гуи спавн как в холли вар (Holy War). Как встанут, так и будут вспавниться (хоть спиной, хоть боком стань). Правда кривенько. Но надо потом обязательно подучить хорошенько и на джаз тебе переходить потом
ps а и группу удалять не забывай. мой косяк. Мог бы на гуи норм сделать, но у меня не скачан jngp. Как мне помнится, еще эта команда "Unit in (Rect) " утечна, локалки в ней не обнуляются вроде и создает заново группу. А можно на джаз с одной группой работать, не создавая новые, просто будет пик в группу.
прикреплены файлы
Steal nerves #2 - 18 часов назад (отредактировано ) 0

» WarCraft 3 / Перемещение юнитов с тем же положением

GetRectMinX(R)
GetRectMaxX(R)
GetRectMinY(R)
GetRectMaxY(R)
» вот пример
тфу перепроверил дважды
X = GetUnitX(u) //координаты юнита
Y = GetUnitY(u)
X1 = GetRectCenterX(R1) - X //разница на осях относительно ректа R1, точнее от его центра. 
Y1 = GetRectCenterY(R1) - Y
X2 = GetRectCenterX(R2) - X1 //относительность от центра R2, по этим координатам смещаешь
Y2 = GetRectCenterY(R2) - Y1
так делаешь с каждым юнитом
Steal nerves #4 - 2 дня назад (отредактировано ) 0

» WarCraft 3 / Хочу доработать систему сложения зарядов на GUI.

» ответы
1.(см. картинку) Это я так понял ячейки инвентаря, но integer означает целое число, я много раз пользовался целочисленными переменными. Как игра понимает что это относится к ячейкам инвентаря если в описании вовсе нет слов про предметы или заряды.
во-первых, есть у нас событие "юнит получает предмет". Есть переменные: Герой манипулирующим итемом, и манипулирующий итем. Не знаю откуда ты взял эту систему, но она очень сложная, я сразу не врубился. Можно в разы проще сделать. И увидел недостатки: типа складывает все итемы к юниту, а не подобранный прибавляется к имеющему. Это так задумывалось? во-вторых, циклы-то понимаешь? Там есть функция "Итем в слоте таком-то", которая вернет итем. То есть когда ты циклом (А) пробегаешь первый шаг, ты сравниваешь итем в первом слоте с итемами, находящих в других ячейках (А+В). Во втором шаге итем во-втором, в третьем в третьем слоте и так далее. Итак 5 шагов
  1. (см. картинку) То же самое непонятное условие с нулём, ведь система как раз складывает предметы с зарядами, а судя по условию не должна этого делать.
В Custom Value - хранит целое число, можно записать через триггеры любое дополнительное целое значение. Это есть у юнитов, и у предметов. Также можно с помощью триггеров узнать значение, сравнить и др. С этим можно делать разные хитрости (например 0 - нет, 1 - да. Пример, как узнать, что предмет кому-то принадлежит.: 0 - никому, 1 - красному, 2 - синему и др. Это как пример. Что означает в твоем примере CV = 0 я не знаю. Это системное что-то. Но Maniac_91 прав изначально равно нулю
Но тут нет ответа на вопрос куда что вставить чтоб ограничить заряды, или типы стакающихся предметов.
сравнением. Вставь внутрь второго цикла. Например, Если (заряды итема 1 + заряды итема 2) < 5, то делать действия, иначе ничего не делать. Но если у тебя много итемов, и у них разные ограничения, то нужна база данных
И почему от 1-до 5 значения если ячеек 6 там на одной из развилок в условиях указывается меньше 6-же и герои имеют 6 слотов.
потому что нумерация идет от 0 до 5. 0 - первый слот, 1 - второй слот, и др Если не ошибаюсь. Если честно ты кажись прав, просто не помню как в гуи должно. надо раскрыть гуи-щные функции и посмотреть. Как я вижу это задумка автора, во втором цикле номера ячеек складываются (А+В)
Steal nerves #5 - 4 дня назад 0

» WarCraft 3 / Как спрятать иконки пасивки

Andrey33, можно использовать способность сферы, та что без иконки (не помню уже точно). На ее можно насадить эффекты
Сфера 'Asph' - можно использовать в качестве аттача моделей на юнита
Steal nerves #6 - 4 дня назад (отредактировано ) 0

» WarCraft 3 / Как спрятать иконки пасивки

А что в статусе отображается - баффы, можно дать какую-нибудь ауру (дай к примеру ауру торнадо. У нее в настройках можно спрятать иконку). Ищи на сайте как спрятать иконку, есть 3-5 способов как спрятать, включая всеми любимый заблоченный спелбук (было много тем, щас лень искать). Согласен с первым постом
Steal nerves #7 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Что не так?

И тогда триггер сработает и для других игроков?
Afterdeath, только на красного, это как у тебя на скрине. По-другому придется тогда фильтр ставить или через условие. Когда пикаешь всех в группу, фильтр отсеивает не нужных. Или прямо в for group (цикле) поставь условие через действие
"If/Then/Else".
фильтр - то же самое, что и условие возвращает логическую. Это типа условие, которое отсеивает при добавлении. В условии или фильтре предлагаю добавить условие, что юнит не враг красному
Steal nerves #8 - 2 недели назад 0

» WarCraft 3 / Что не так?

То есть это в корне неправильно? А можешь тогда посоветовать что-то?
не используй picked player, задай вместо него красного игрока.
Steal nerves #9 - 2 недели назад 0

» WarCraft 3 / Что не так?

Не та переменная просто. Есть разные циклы. Есть перебор группы юнитов (group , отряд) - picked unit. А есть перебор группы игроков (force player) - picked player. Ты ссылаешься не на того игрока, точнее переменную, его просто нет
Steal nerves #10 - 2 недели назад (отредактировано ) 0
Steal nerves #11 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Типы целей в Warcraft 3

Darknessay, Ну вот знаю, что работает такая связка "организмы/механизмы".
» вот
В РО в указанных целях можно установить либо "механизмы" (не живое существо) либо "организмы" (живое существо). Больше создано для указывания/установки целей способностей и атаки.
"Механизмы" (в РО, указанные цели). Вообщем-то влияет на цели способностей и атаки.
Конкретно влияет на ремонт. Привел этот пример с ремонтом не случайно. Здания и артиллерия чинятся с помощью спец-способности "ремонт" у рабов (при наличии ресурсов, если ресурсы на нуле, то раб будет стоять). Если у здания во время игры триггерно убрать классификацию "техника", то авторемонта не будет, раб будет стоять
У многих абилок нежити стоит галочка "организм", но почти ни у одной абилки белых людей она не стоит.
мне кажется это очевидно. Так нежить любит всякие заклятия на живых посылать: травить, высасывать жизни и души, а на технику не имеет смысла.
Если нет, то как можно указать нежить как цель, не прописывая всем нежитям "самоубийцу"?
Выше же написано. Что есть три классификации: древо, самоубийцы, механика. И с ними можно нестандартные классы замутить, по-другому никак. Только. если базу данных
Steal nerves #12 - 2 недели назад 0
Steal nerves #13 - 4 недели назад (отредактировано ) 0

» WarCraft 3 / Событие с иллюзией.

Когда применяются иллюзии - их можно отследить двумя событиями: "юнит входит в регион" или "юнит призывает юнита ". Используй дебаг, проверяй как работает (работает или не работает, я так и проверял)
Когда юнит сдох, как описали выше, отследить нельзя. Но можно попробовать, отследить уничтожение иллюзии через событие "юнит покинул регион" (проверь дебагом, работает ли это, по идее должно)
Или сразу засовываете в переменную, а потом каждую секунду проверяете (жива или мертва, пуста ли переменная). Или сразу в группу пихаете юнита, ведь чтобы отследить количество живых иллюзии приходится работать с группой.
Steal nerves #14 - 4 недели назад (отредактировано ) 2

» WarCraft 3 / PreloadAbility( integer )

avuremybe, предполагаю для того, чтобы не было лагов. Помню, давно были темы с многоуровневыми абилками (более 10 левел и до 100 левел). Можно было делать интересные фишки. Если юниту в первый раз дать эту абилку, то комп подвиснет на несколько секунд, а на более слабых компах и больше времени. А все потому, что абилка загружается в игру, при повторном добавлении лагов не замечается. Поэтому сделали такую фишку, что при инициализации подзагружают способности все многоуровневые способности. Замечали ли вы когда нибудь в некоторых картах подвисания при старте игры? например, в доте. и прочее.
Steal nerves #15 - 1 месяц назад (отредактировано ) 0

» WarCraft 3 / Триггер

quq_CCCP прав. Можно сделать ветление ифов.
Пример, если количество патронов больше нуля, то запускать снаряд. Иначе ничего не делать.
» код
if c > 0 then //если больше нуля
  //запустить снаряд
else
  //иначе, что-то делаем. Если тут строчка пустует, ничего делать не будет
endif
Но мы так не пишем, не добавляем else. Оптимизирую код
if c > 0 then //если больше нуля
  //запустить снаряд
endif
прервать еще можно ретурном return, если есть что возвратить. Это то, что скинул Hate в гуишном варианте
немного на джазе объяснил. Если раскрыть гуи, то можно увидеть код
Steal nerves #16 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Мультипак в одном здании...

quq_CCCP, лучше написать и вариантов побольше накидать. Туда новичков посылать будем
Steal nerves #17 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Почему мой триггер увеличивает заряд предметов?

Altf40160, лучше циклом прогонять.
» раскрыть
Во-первых, гуишная проверка UnitHasItemOfTypeBJ - цикл, и он утечен (не обнуляется локальная переменная).
во-вторых, эта проверка мб ничего не дать (например, у героя в инвентаре лежит GetManipulatedItem(), а проверка скажет, что такой итем (мб он вот проверил, что есть GetManipulatedItem() ). А как узнать, что есть другой такой же?) нужно сверять циклом, сделай свой цикл. Когда циклом будешь прогонять сравнивай не одинаковы ли типы, и что итем не равен GetManipulatedItem(). Можно переменную целочисленную в качестве счетчика юзать. В условии сравниваешь, что счетчик больше 0
Надо раскрыть и посмотреть что в GetItemOfTypeFromUnitBJ. Там тоже цикл кажись. Мб первый попавшийся выберет итем. А нам нужно, чтобы не выбрали GetManipulatedItem()
Ну и условие например ITEM_TYPE_CHARGED - имеющие заряды, а ты говоришь про усиливающие.
Дебагом выводи
Steal nerves #18 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Мне нужно Сохранить точку Кругом

xgm.guru/p/wc3/iscoordsincircle мб это поможет? проверяет принадлежность точки к кругу. теорема пифагора. все что-нужно это координаты центра + радиус. Смотри ниже там в комментах, так будет правильнее.
Steal nerves #19 - 2 месяца назад 2

» WarCraft 3 / Двухсторонний телепорт

А я почему то давно заметил один плюсик - юнит может прокладывать коротчайший путь через стандартные телепорты. Отправишь куда то идти, и тупоголовые юниты не будут все отбегать, они через телепорт попрут. А вот триггерный телепорт не видит, только живым игроком надо управлять
Steal nerves #20 - 2 месяца назад 0

» WarCraft 3 / Замена стандартной подсказки

Смотри в разделе интерфейса. Там можно убрать эту надпись, поставь пробел. Сколько раз мусолили это
Steal nerves #22 - 2 месяца назад 0

» WarCraft 3 / Определить, является ли применяемая способность предметной

Потому что там приказ от слота итема в инвентаре зависит
852008 to 852013 (useslot): Заставляют героя, отдавшего приказ, использовать предмет, находящийся в соответствующем слоте инвентаря. Идентификатор 852008 использует предмет в первом слоте, идентификатор 852009 – во втором и т.д.
Steal nerves #23 - 2 месяца назад 0

» WarCraft 3 / как сделать спавн юнитов как в холи вар

ЛПХОХЫОПЫ, если правильно помню, в там никак в Legion TD, там в ограниченной области можно перемещать юнитов (типа ренжей сзади, милишников впереди). Берешь область, в прямоугольник. У тебя будет два прямоугольника (в одном размещаешь, в другом спавнишь). Проще простого. Тогда нужно знать координаты каждого юнита в первом прямоугольнике. Относительно второго прямоугольника задаешь координаты (можно от центра, или от края. отсчитываешь координату x юнита относительно центра x, координату y относительно центра y. Запоминаешь разницу на оси x, на оси y. Потом во втором смещаешь.)
Steal nerves #24 - 2 месяца назад 0

» WarCraft 3 / Как убрать время баффа "лечение"

Taurenus, а задержку делал?
С - приводит в действие
У - Абила - лечение
Д: ждать 0.00 (еще попробуй 0.01)
Д: удалить бафф
Steal nerves #25 - 2 месяца назад (отредактировано ) 4

» WarCraft 3 / Как убрать время баффа "лечение"

8gabriel8, может не удалиться. Помню щит паладина на неуязвимость делал, пробовал бафф удалить сразу. Не помню зачем. Применил такой способ, как у тебя на примере. А как оказалось, триггер не работал, бафф успешно накидывается. Дело было вот в чем, надо было задержку в 0.00 сек давать. Баффа нету просто, не успевал накинуть. Мало ли инфа пригодится
Как понять убрать время баффа?
Steal nerves #26 - 2 месяца назад (отредактировано ) 1

» WarCraft 3 / Передача данных в другую функцию для группы

ScopteRectuS, не вижу в коде того, что может перезаписать. Раз работает в доте, значит норм. Потоки не могут быть параллельными, только последовательно идут (мне надоело это говорить) А в тех наработках что ты видел, это наверное для удобства. Вот на работе чертежи разбираю ищу ошибки и составляют тех. процесс, а я все время подправляю чертежи конструктора, просто для красоты, для читабельности и прочее
Steal nerves #27 - 2 месяца назад (отредактировано ) 1

» WarCraft 3 / Передача данных в другую функцию для группы

Ну это мгновенное действие. Так тоже можно. В гуи ты тоже устанавливаешь варкрафтовские переменные, там как раз действия и условия в отдельные функции записано, и работают. Не вижу ничего такого. Просто я на джазе 'свои' глобалки для надежности и удобства юзаю (не помню, был ли когда нибудь баг, не знаю есть ли такие узкие места где GetTriggerUnit не работает, никогда не встречал такое. МБ я был глуп, и мне стоит пересмотреть это, хотя мне это не мешает, я не юзаю тысячи переменные на каждый триггер. У меня несколько темповых глобалок на все). Понимаешь, была бы какая-нибудь задержка, и в отрывке времени сработало бы другое событие, твой GetTriggerUnit может быть другого юнита давал бы.
Steal nerves #28 - 2 месяца назад (отредактировано ) 1

» WarCraft 3 / GetTriggerPlayer( )

Вообще-то смотря по регистру. Там в джазе, есть нативки на кого регистрируют события (могут и на игрока, так и на юнита, может и на другие объекты типа декора). Большинство событий регистрируют на игрока + обращают на юнита (GetTriggerUnit. Например, юнит умер - умирающий юнит. Это событие возвращает две переменные KillingUnit и DyingUnit. Особое внимание событие обращает на умирающего, то есть он и будет GetTriggerUnit). Регистр можно и на юнита накинуть (например получил урон, там по-моему GetTriggerPlayer нельзя вытащить? С только с помощью нативки владелец GetTriggerUnit)
Например, событие игрок ввёл в чат. Тут не выведет тебе GetTriggerUnit
Steal nerves #29 - 2 месяца назад (отредактировано ) 6

» WarCraft 3 / Тип оружия - Нет

8gabriel8, ну здесь кто-то спрашивад про снаряды, и кто-то скидывал видео с ютуба про диабло. Там в карте была эта задумка. Там снаряды полностью триггерами управляются. Но вот как они ещё сделали пока неизвестно
Я вот этот тип оружия ''нет'' мог бы использовать в качестве видео-заставок в кампании, когда нужно чтобы дрались без конца (махали мечом)
Steal nerves #30 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Counter Helix Axe'a из DotA

» раскрыть
8gabriel8, не-нее. Я имею в виду полную имитацию атаки с уроном. Чтоб в ро у юнита убрать анимацию атаки (полёты снарядов), и желательно урон. Можно тип оружия поставить нет, не будет урона, не показывает атаку. Юнит как дурачок будет махать руками. Зато, агрит монстров. Желательно, чтобы не было видно, полётов снарядов, мы туда свои всунем (даймиков). При событий юнит атакован, запускаем снаряд с такой-то скоростью, по такой то дуге. Из минусов обычно фаервол пускают с руки, а у вас летит с головы. При приближений к цели наносим урон. При событий юнит получает урон - уничтожаем снаряд. Много чего нужно учесть, тем более, видел такую вещь, как например, снаряд летает за юнитом по всей карте. Пульнул в него, снаряд почти долетел, а он телепортнул в другую часть, и снаряд за ним полетел. За это отвечает автонаведение кажись? А что, цель удрала как бы, как можно было бы убежать от снаряда? Как там осуществить естественные промахи, там на клифах и др ? Об этом давно как-то думаю
Steal nerves #31 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Counter Helix Axe'a из DotA

pro100master, можно.
8gabriel8, можно, трудность в том, что движение снарядов тогда полностью надо делать триггерными. Полёт стрел, лучи и прочее. Лень такое делать, имею представлению, но не до конца. Видел такое в карте диабло
Steal nerves #32 - 2 месяца назад (отредактировано ) 3

» WarCraft 3 / Выбор боевой единицы

Не за что.
» раскрыть
Name Legion, ну там в последнем скриншоте, где ты цикл с группой прозиводишь, сравни игрока. По идее GetTriggerPlayer() это тот кто кликнул на клавишу диалога, если не сработает, пробуй через GetLocalPlayer(). Если вообще в варкрафте можно определить того, кто нажал на кнопку. В условии ставишь GetTriggerPlayer() == владелец пикнутого юнита. Можно даже не сравнивать, а сразу пикнуть всех юнитов игрока. Или в массив загнал всех 'выбирайте юнита', и номеру индекса достаешь своего юнита
Steal nerves #33 - 2 месяца назад 0

» WarCraft 3 / Counter Helix Axe'a из DotA

Вы мне подали идею. Защиту от ренжей, от стрел. В него выстреливают, он крутится, отбивает стрелы. Все. Жвль что нельзя отобразить, что снаряды разрезает и они эффектно отлетают, и затем падают. И жвль, что снаряды нельзя перенаправить обратно. только если пользоваться скилом укрыться за щитом. Можно было юы сделать так чтобы работало на определённом расстоянии
Steal nerves #34 - 2 месяца назад (отредактировано ) 5

» WarCraft 3 / Выбор боевой единицы

Name Legion, тоже не понимаю, что ты хочешь сделать. И не понятные триггеры
» раскрыть
первый и второй скрины - ты создаешь юнита "Выбирайте героя" для каждого игрока, потом накидываешь игроку-владельцу выборку. Так понял?
третий и четвертый скрины - это один триггер? при создании (входе в игровую карту) юнита ты показываешь диалог одному игроку. Это скорее всего красный, ему ведь раньше создадут юнита. Так как триггер ты отключаешь навсегда. Еще одно замечание: если этот входящий юнит не герой, то ты триггер тоже отключаешь навсегда.
пятый скрин - здесь при нажатий диалоговой кнопки ты что-то делаешь. Скорее всего проблема в пике. Когда ты выделяешь в группу (ты добавляешь в нее всех созданных: твой юнит, юнит другого игрока и др). И скорее из-за этого выбор и накидывает на твоего красного игрока. Хотя не понятно. Где фильтр? Ты хотя бы условием отсеивал, или проверял бы. Сделал бы так, что на каждого пикнутого юнита накидывать на него выбор владельца. где дебаг?
Steal nerves #35 - 2 месяца назад (отредактировано ) 1

» WarCraft 3 / Ограничение для предметов2

Name Legion, ты в цикле сразу же проводишь проверку (что итемов больше 2), и сразу уничтожаешь. Цикл - повторение действий. То, что внутри блока он будет повторять несколько раз.
Не лучше ли сначало проверить все слоты, и только после цикла провести проверку? И в блоке if then endif уничтожаешь не поднятый (манипулирующий итем), а то что попадется с таким же типом (зведолист). Он может быть какой-нибудь первый попавшийся уничтожить.
И где ты проверяешь ячейки (тут нет условия, что тип итема в слоте x == звездолисту, но есть условие (хоть и трудно читаемо из-за переменных), что тип манипулирующего итема == звездолисту - он всегда будет истинным, условие тебе 6 раз вернет истину)? Проверяй дебагом.
Еще ты не складываешь кол-во, ты прибавляешь к индексу переменной. Пример.
» Пример
Integer[0] = 0
integer[1] = 0 //вроде не существует
k=0
цикл
integer[k]=integer[k+1] //после первого действия 0=0
integer[k]=integer[k+1] //после второго действия 0=0
integer[k]=integer[k+1]
integer[k]=integer[k+1]
integer[k]=integer[k+1]
integer[k]=integer[k+1]

integer[k+1] = 0 //integer[k+1] - integer[1], но сама переменная k - нифига не изменилась, в ней записан ноль
Steal nerves #36 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Движение снарядов

я там выше с кодом немного ошибся
set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
нужно вместо dist вставить на сколько ты смещаешь, короче вместо dist на speed. Можно вообще не писать dist или speed, если движение по спирали
еще не помню, atan2 возвращает в градусах или в радианах.
Если что xgm.guru/p/100/193756?postid=355523#comment1
Steal nerves #37 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Движение снарядов

» раскрыть
local unit u= //кастер
local real x1=GetUnitX(u) //координаты кастера
local real y1=GetUnitY(u)

local unit t= //дайми
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)

//определение расстояния
local real dx=x2-x1 //разница между концом на началом координаты
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy) //расстояние, где SquareRoot - математический корень, dx * dx - это dx в степени 2

local real angle = Atan2(dy,dx) //текущий угол между двумя точками (юнитами) в градусах

//если вы хотите текущий угол изменить, то можно изменить angle прибавив или убавив значение на несколько градусов
set angle = angle + 30. //например прибавляешь 30 градусов

set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
Steal nerves #38 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Как поставить в условие триггера защиту от магии?

А попробуй базу данных вести. Вводи всех, кто обладает этими абилками. Юнит получил способность, или предмет, вводим такую то такую. Хотя все это неудобно будет
8gabriel8, я карту скинул. Там все блоки и резисторы. Ну для подробного, а решай сам.
думаю, что способ бородача верный.
Steal nerves #39 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Как поставить в условие триггера защиту от магии?

Я бы посоветовал бы. Но ничего не помню. Попробуй скачать старую наработку и посмотреть
Можно было бы все триггерно сделать, такой вариант мне больше нравится
Steal nerves #40 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Не работает триггер на мультиплеер

Arr_Index может перезаписать значение. Юзнет красный и это значение станет 0 (1), юзнет синий 1 (2). Я так думаю. Для мультиплеерности не подходит
xgm.guru/p/wc3/196334 не давно похожий вопрос задавали
Steal nerves #41 - 2 месяца назад (отредактировано ) 4

» WarCraft 3 / Требования для изготовления предметов

смотри как устроена магическая лавка альянса, там требуется апнутая ратуша чтобы купить сферу огня, по тому же прицнипу требуйте игрока получить апгрейд или юнита.
просто вместо ратуши нужно указать dummy-юнитов в требовании. Когда ты выполняешь требование, создаешь на карте невидимого dummy-юнита. И ограничение в требовании снимается. Если удалить этого dummy-юнита с карты, то ограничение опять появится в требовании
Steal nerves #42 - 3 месяца назад (отредактировано ) 0

» WarCraft 3 / Как сделать проверку Дальний/Ближний бой?

quq_CCCP, а зависит ли от настроенной атаки? типа когда поменял на вторую атаку, ты включил дальнюю атаку. кажись классификация зависит от типа оружия (проверял задумку) не типа атаки
там еще есть классификация может атаковать наземную, воздушную цели?
Steal nerves #43 - 3 месяца назад (отредактировано ) 1

» WarCraft 3 / Перезапись глобальных переменных

ScopteRectuS, нет, не должно быть никакой перезаписи (смотря что ты там в функции ForGroup напишешь). ForGroup и фильтры запускаются сразу. Как я помню, использовал часто темповые глобалки для переноса инфы, например юнита или игрока в фильтр. Брал переменную типа юнит, и потом делал манипуляции типа юнит-кастер не враг GetFilterUnit(), то брать в группу (а остальных не подходящих условии фильтр отсеивал)
ForGroup - своего рода тоже цикл, он берет одного юнита GetEnumUnit, обрабатываем функцию. Берем второго, обрабатываем. И так далее.
Steal nerves #44 - 3 месяца назад (отредактировано ) 1

» WarCraft 3 / Перезапись глобальных переменных

» пример
Если действие мгновенное, то глобалки не перезапишут. И локалки не нужны.
set bj_lastCreatedUnit = GetTriggerUnit()
..... //что-то делаем с юнитом bj_lastCreatedUnit
Если есть работы с задержкой, короче со временем (с тем же вэйтом или таймером). То тут может переписаться инфа.
set bj_lastCreatedUnit = GetTriggerUnit()
..... //что-то делаем с юнитом bj_lastCreatedUnit
//вэйт
..... //что-то продолжаем делать с юнитом bj_lastCreatedUnit (но где гарантия, что его не перезаписали).
У тебя допустим есть триггерная способность, там накидывающая эффект отравления (дамаг триггером наносишь bj_lastCreatedUnit). Есть триггер, ловящий каст, он вещает в bj_lastCreatedUnit юнита-цель. Допустим эффект длится 50 сек. (там вэйт стоит). Когда ты каждый раз запускаешь триггер, он запускает поток. А вот вэйт, он паузит поток. Допустим ты кликнул на одного юнита, повесил эффект на 50 сек. Потом на другого юнита. А эффект на первом не снимется (точнее частично снимется, не будет дамага), так как ты перезаписал bj_lastCreatedUnit (там уже второй юнит.). Надеюсь понял? похожее описывалось в xgm.guru/p/wc3/jass_local_vars В статье предлагают использовать локи, лично ничего страшного не вижу в использований локи. Можно сделать так чтобы нельзя было перезаписать ненароком, например юзнуть хэш, только локалки не нужны были бы. Хотя вот в работе с GetLocalPlayer() нужна ли локалка? (например имя или число (равкод) изменить)
Если у тебя в двух триггерах используется одна и та же глобалка, например используется bj_lastCreatedUnit в качестве темповой глобалки (но только задержки чтобы не было, а то перезапишет), то ничего страшного, не перезапишут, так как действие мгновенно. В варкрафте два триггера одновременно не могут выполнить работу. Варкрафт мгновенно выполняет поочередно, в доле микросекунд. Возбмет один обработает, а потом переключается на второй триггер.
Steal nerves #45 - 3 месяца назад 0
Steal nerves #46 - 3 месяца назад (отредактировано ) 0

» WarCraft 3 / Есть ли утечка?

» когда уже можно удалить (код)
//в функции Example1 запускаем таймер. прошла 1 секунда, и запускается Example2

function Example2 takes nothing returns nothing
local timer t=GetExpiredTimer() // Истекший ( запущенный ) таймер 
.....//делаем что-то, может быть по номеру хэндла таймера достаем из хэша что-то
call DestroyTimer(t) //тогда можно уже удалить
set t = null
endfunction

function Example1 takes nothing returns nothing
local timer t
If udg_example == 1 then
set t = CreateTimer()
call TimerStart(t,1.0,false, function Example2)
set t = null
endif
endfunction
У тебя должна быть библиотека в JNGP. Мне пришлось вспоминать нативку GetExpiredTimer() jass.wikia.com/wiki/Functions
avuremybe, ну ошибся, не существенно
Steal nerves #47 - 3 месяца назад (отредактировано ) 1

» WarCraft 3 / Есть ли утечка?

Можно его и не создавать
local timer t //объявляем локалку
If udg_example == 1 then //если условие прокатывает
set t = CreateTimer() //создаём таймер
call TimerStart(t,1.0,false, function Example2) //запускаем его
endif
set t = null //обнуляем
Steal nerves #48 - 3 месяца назад (отредактировано ) 0

» WarCraft 3 / Есть ли утечка?

В данный момент нет утечек. В памяти остаётся таймер. Но удалять его сейчас не нужно, удаляют после завершения работы таймера, например в функции Example2 (короче как у тебя написано через 1 минуту). Если мы удалили бы сейчас, то запуск таймера не пройзошел бы (ибо таймера больше нет).
Steal nerves #49 - 3 месяца назад (отредактировано ) 4

» WarCraft 3 / Нажатие на предмете и действие

Манипулирующий предмет - переменная предмета, срабатывает при событий "юнит получает", "юнит использует предмет", "юнит теряет предмет". Ссылается на этот итем
Событие - Юнит использует предмет
Условие - Тип манипулирующего предмета = .....
Ваше действие
Предмет напрямую связан со способностью. Короче с активной способностью предмета. Смотришь, какая способность стоит в предмете
Событие - юнит применяет смпособность
Условие - применяемая абилка = .....
Ваши действия
Если в предмете никакой активной способности нет, а в предмете, отмечен как итем на которого можно прожать, то сами события выше не запускаются. Проверял дебагом когда-то давно
xgm.guru/p/wc3/180041 где-то здесь пример можно посмотреть
Steal nerves #50 - 3 месяца назад (отредактировано ) 5

» WarCraft 3 / Как создать пожар и тушение?

Можно будет использовать огненный столб, который кастует дамми, и когда нужно прервать, то дамми удаляешь. Огненный столб - абилка, которая прерывается, если юнит прекращает каставать. Идея бредовая. Хотя, мне кажется триггерно полностью нужно все делать (поджигающую абилу) нужно будет, только тогда можно будет потушить или прервать.
» не по теме
Помню, у орков у катапульты есть пассивка (жидкое пламя или горючая смесь). Там она еще и запрещает ремонтировать подожённое здание, если не ошибаюсь (посмотрите описание. У меня нет возможности посмотреть сейчас. Давно нашел ту интересную фишку). Только она бьет по области, наверное можно будет перенастроить. Там все что нужно - это удалить бафф с здания
xgm.guru/forum/showthread.php?t=52170 или триггерно временно классификацию убрать, тогда рабочий не сможет ремонтировать этого юнита. Потом не забудьте вернуть эту классификацию ему, иначе его не смогут починить