Библиотека "All.j" вполне неплохо работает, результат потрясающий! Но есть проблема, когда происходит "Pick every units in range ... matching ..." то делается всё наоборот, либо вообще пропускает, словно условие истинно, но это не так! На некоторых заклинаниях приспособился, сначала заношу группу в переменную "set CurrentGroup = Units in Range 500.00 of matching <бла-бла-бла...>", а затем эту переменную указываю в "Pick every unit in CurrentGroup and do...", и многие ошибки так удалось обойти. Но встретил ошибку в группе, когда может правильно определить группу, а может и нет, и это происходит случайно, во время игры. Предыдущий метод, заносить сначала в переменную, уже не помогает. Я не программист на jass, поэтому прошу посмотреть файл тех кто разбирается. Он не такой уж и большой. Покрутил там таймер в функции удаления групп, изменил ".0" на "2.0". Перезагрузил со скриптом. Стал удалять с задержкой в две секунды. Причём за эти две секунды набирается 2000~ Хендлов, видимо уже не от моей карты, но сбрасывается снова. Думал что дело в таймере удаления утечек, но нет, это всего лишь задержка удаления... Как бы всё намекает на "boolexpr b", что условие приходится выносить отдельно за функцию, решать его там своими силами, а потом заносить в функцию обратно. Стал смотреть в интернете про эту функцию, но ничего толкового не нашёл. Вроде бы всё верно. Того автора уже лет 5 на сайте нет похоже.
Использую All.j тот который весом побольше, значит лучше, да и в игре он хоть как-то работает, в отличие от более старого, который поставляется вместе с NewGen WE. Выложу его здесь. Оригинал!

Принятый ответ

ALL_Remove = false
чтотооченьважное
ALL_Remove = true
как сложно то было
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
17
6 лет назад
0
а можно конкретне какая ошибка у вас из того что вы написали я непонел
0
7
6 лет назад
0
ledoed, можно. Хотя Я пишу так чтобы потом вопросов не вызывало.
Вчера пол ночи провозился, пытаясь пробить путь... Ошибка - в переменную групп закладываю значение, не доходит триггер ещё до конца как это значение, которое ещё нужно, очищается. Как Я ругался на того автора скрипта который очищает переменную в середине триггера, но которая может, даже чисто теоретически, ещё понадобится! Причём нет wait-функций, он её просто очищает, когда ему вздумается. В другом триггере видимо работает, но "на-разок". Нельзя ещё и много раз перезаписывать переменную групп в одном триггере, так же случается неконтролируемое очищение. Я понимаю что борьба с утечками должна вестись жёстко, но это перегиб против правил программирования на Warcraft-е! Сделал бы очищение в конце триггера, или при перезаписи переменной групп, оставляя пространство для её использования.
0
26
6 лет назад
0
ALL_Remove = false
чтотооченьважное
ALL_Remove = true
как сложно то было
Принятый ответ
0
7
6 лет назад
0
Hate, проверял, не работает. Сделал это обрамление в цикле, там где в переменную групп добавляется один юнит, всё равно очищает после цикла, когда мне нужны те набранные юниты в ней. Но эту переменную групп не объявлял в начале триггера, так как она у меня всегда создана как глобальная для всех триггеров, однако Я её очистил перед тем как использовать, и без этого скрипта работало.
Сейчас вообще удалил из файла все очищения групп и спецэффектов, ибо с этим и сам справлюсь. Но мне всё равно не нравится то что эта библиотека сама создаёт Хендлы - не могу добиться полной тишины (Хендлов), хотя отключил всё!
0
26
6 лет назад
0
вы никак сами не обойдете утечки с группами если работаете с гуи
показывайте как использовали мой пример выше
0
7
6 лет назад
0
Hate, Я проверял другой вариант сейчас, отключал все процессы, все триггеры, которые могли вызывать какие-либо события на карте. Даже события "отдал приказ 'отставить'" отключены. Триггеры со спеллами сами не активируются... Один Хендл прибавляется, и один отнимается сам по себе. Всё полностью заморозил, почти полная тишина. И тут читаю ваш комментарий... Ну вернул те теги назад как было, а перед тем как делать скрин решил проверить, и оказалось что теперь работает. Запустил без тегов, тоже работает. И получается теперь смысла нет делать скрин. Видимо когда процессов много то они накладываются друг на друга, и эта библиотека, очищает же по таймеру, и с очищением очищает не те группы которые следовало бы очищать, мне лично так кажется. Ну что теперь, обратно всё запустить и проверить с большим потоком событий?
0
17
6 лет назад
0
Ну как бы это нормально что переменные очищаються прямо в функциях этой библы,такчто не давайте вашим гл переменным обрабатываться в них
0
7
6 лет назад
0
Не стал дожидаться, поработаю вашим тестером. Ещё раз всё повключал, ровно ничего более не трогая. Запустилась вся моя карусель... Заклинание не работает! Хотя иногда работает, а иногда нет, но это точно не пойдёт для заклинаний на которых стоит вся игра! Сделал обрамление тегами, вообще не работает. Четыре заклинания подобного типа то работают то не работают когда им вздумается.
Теперь суть заклианния! Рядом с героями стоят его войны, в радиусе 500, и с условием что они не такие же герои, живые и ... бла-бла-бла ... добавляются в группу CurrentGroup2. Потом идёт цикл, который заканчивается до того, до которого уровень этого заклинания у героя. И по одному начинает добавлять этих юнитов, рядом стоящих, в группу CurrentGroup, а из группы CurrentGroup2 вычитается он же, чтобы потом, при новом обращении цикла, его снова не добавить, а добавить нового. Потом Я проверяю их количество, делаю эффект (который кстати тоже то работает то нет), и в зависимости от того, сколько рядом юнитов с героем было, такой силы эффект к нему и применяю. И когда нужно уже делать спецэффект, поставил дебаггер, чтобы посмотреть сколько набралось юнитов - показывал 0 в группе, хотя рядом стояли юниты плотно. Прошу заметить что если бы был wait то разрыв был бы справедлив! Так как в это время могло бы вклиниться очищение, а тут идёт сплошной код, без разрывов, и очищается в однопоточности, как так? Иногда впрочем работает, что ещё больше путает.
ledoed, что ты предлагаешь? Объявить эти переменные при инициализации и поставить эти теги? Такой вариант меня устроил бы, так как эти переменные работают и в других триггерах, они у меня постоянны. Но всё равно, придётся их очищать вручную, так как при присвоении значения переменной старая группа оставляет утечки. Да и не стоит забывать про другие переменные, другого типа, и спецэффекты так же работают коряво - слишком рано удаляются. Придётся всё обрамлять, но тогда теряется смысл (сам и очищай).
Ну как бы это нормально
Не согласен. Сам же автор написал:
"
  1. Скачать, собственно, саму библиотеку и закинуть ее в папку ...\jassnewgenpack5d\AdicHelper\lib\
  2. В своей карте написать в нестандартном коде: include "ALL.j"
  3. Забыть об утечках.
"
Вот последнее написанное это действительно нормально! Пользователь не должен думать как там устроено! Сам так стараюсь делать программы, это хороший стиль.

Вот скриншот триггера -
Загруженные файлы
0
26
6 лет назад
0
бездарность, неправильно используете то что я дал
0
7
6 лет назад
0
Hate, мне больше нечего там обрамлять. Переменная создана изначально в окне переменных.
1
26
6 лет назад
1
вы орете там? какая разница где создана переменная, если вы ее забиваете по ходу игры
0
7
6 лет назад
0
Я ору? Это Вы орёте, а Я лишь разъясняю суть проблемы. Скажите наконец что Я должен делать!
Моя логика такова, что в триггере Я в неё сразу добавляю юнита, и там же обрамляю её тегами, как только она высунула свой нос, чтобы это действие не учитывалось оптимизатором. То есть добавляю в тегах юнита, учитываться не должен, как понимаю.
Не могу же Я всё охватить тегами, верно? Там могут быть и те переменные которые нужно очищать.
Да кстати, разница такая что негде её обрамлять!
Если вы хотите чтобы Я успел под Новый Год её сделать, если вы хотите Ёлочку и с виртуальными подарками под ней, и если вы хотите увидеть кто из крипов станет дедом морозом, тогда вам нужно очень хорошо постараться и успеть помочь мне до того, как простучит ровно двенадцать! А после Нового Года Ёлочка пропадёт, и будет унылая карта. Думаете Я шучу с вами? Я реально уберу Ёлочку! Всё! Не будет Ёлочки если не успею в срок!
0
26
6 лет назад
0
очень жирный намек
0
17
6 лет назад
0
вариант послать вашу работу куда подальше сбегать на завод,заработать копейку придти сюда попросить кого нить за деньги ваш проект закончить или просто когото попросить может за так сделают
0
7
6 лет назад
0
ledoed, хе-хе, да нет. Я не такой крутой работяга чтобы так быстро сейчас заработать и успеть ещё прибежать сюда на ужин. К тому же, вы же понимаете, что это делается ради удовольствия. Знаю что понимаете. Ради самого процесса делается, пройти путь воина-картостроителя. А так, готовых игр с крутой графикой полно, "играй-не-хочу", но не то что хочется, и всё халявное и просто даётся, ибо за большие Корпорации не так сильно переживаешь как за одного человека который может не сделать.
Hate, а ну как бы другая группа ... но в эту группу ... ну Я понял.
Попробовал. Получилось! Но есть ещё одна проблема, не работает эффект. Я его закрыл тегами, но он всё равно не работает. Что Я делаю не так? Скрин прилагается.
Загруженные файлы
0
15
6 лет назад
0
Я понял
Нет. Все еще не понял. И даже не пытался искать, так как решение на первой странице гугла, если правильно спросить.
0
7
6 лет назад
0
AlexSan, что значит Гугла, ха-ха, это программирование, где требуется точный ответ, или волшебные загадки? Нельзя было сразу ответить?
Ну хорошо, залез в Гугл ... ничего путного. Писал "All.j ALL_REMOVE Warcraft 3", и по другому, и про спецэффект... Нашёл только форум где автор рассказывает про своё чудесное творение, но и там ни слова об обрамлении тегами, нет точных инструкций о такой важной мелочи!
Попробовал занести в переменную, и оградил тегами только её - не помогло. Тут должно быть основное правило! Но что-то Я не понимаю его. Довольно загадок! Как сделать?

Вот сайт куда Я попал - w-games.2x2forum.ru/t455-topic

Можно в принципе вообще сюда не заходить, искать только в Гугле, а как увидел этот сайт, обходить стороной, но уж больно много сюда натаскали инфы.

"Если же Вам нужно, к примеру, занести точку в переменную для дальнейшей работы с ней, перед этим действием нужно прописать Личным сценарием (Custom script): ALL_Remove = false, а после занесения в переменную ALL_Remove = true."
Я так сделал. НЕ РАБОТАЕТ СПЕЦЭФФЕКТ! ! ! Возможно он и работает, но Я его не вижу!

  1. Опять 0 в группе. Дебаггер показал. Значит дело опять в обнулении групп, а не в спецэффектах. Пойду думать дальше, может занести в теги и "add unit..."?
0
26
6 лет назад
0
если бы вы только сразу начали переходить на jass... не пришлось бы ломать голову с утечками и такими проблемами
0
7
6 лет назад
Отредактирован Dagger667
0
Hate, Я просто не знал. Всегда работал на GUI и не подозревал о такой проблеме. В детстве ещё программировал, делал кучу таймеров, лаги были жуткие, но Я готов был всё терпеть потому что было очень интересно. Думал это из-за таймеров, потому что замечал что когда их много то начинает лагать. Бывало лаги тормозили на 15-18 секунд экран, но карты делал интересные, потому терпел и играл хотя бы по чуть-чуть. И в этот раз сделал один основной таймер на всё, где wait-ами распределил нагрузку по всей секунде. А долго не играл, думал всё будет работать. Но вот залез в интернет и узнал, а 4 месяца жалко терять. Но Я готов переработать.

Hate, может функцию со спецэффектами закомментировать в All.j? Я же могу их сам удалить, верно? У меня по всей карте за спецэффектами стоят функции "Destroy SpecialEffect"!

Hate, В любом случае группы обнуляются не по правилам, скорее всего этот вариант с библиотекой провальный. Нужно искать другой путь.
А вот интересно, если каждую BJ-функцию раскрыть, и переделать, а затем загрузить как свою библиотеку, то они заменятся? Я бы этим занялся, насобирал бы через интернет альтернативные написания функций-BJ, или сам бы дописал, и подгрузил бы как библиотеку. Можно было бы через GUI работать даже, только внешне оставить их как были (takes и returns чтобы совпадали).
Hate, предоставь мне инструкцию что нужно сделать чтобы заменить все BJ-функции! Если никто не хочет то Я возьму это на себя, для всех сделаю. А заодно, поучусь на практике программировать. Вот он, Герой Паладин =) !
Хотя Я лучше создам отдельный маленький вопрос по этой теме, а этот закрою. А про All.j можно забыть, слишком непродуманная библиотека.
0
15
6 лет назад
0
про All.j можно забыть, слишком непродуманная библиотека.
Не знаю, у тебя просто руки не из того места походу. В моей карте довольно много триггеров, и ALL.j ничего не ломает от слова совсем.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.