Ах да, периодический же ещё есть... Значит можно разбить где-то на два-три триггера. Использовать TurnOn и TurnOff, чтобы они зря не мотали, и передавать управление следующему триггеру. У меня там два по 120 в одном триггере, значит два таких триггера хватит. Один отработал, передал другому... Но код мне придётся писать вместе с таймером, верно? То есть это не универсальный таймер, а для какого-то одного триггера? Для другого нужно делать другой таймер?
У меня есть Wait-ы в цикле Integer, и там очень важное заклинание, которое Я долго делал, которое работает стабильно, всё отлажено... Отказаться жалко. И после каждого прохода цикла идёт проверка условия, изменилось ли значение в булёвой переменной в режиме реального времени. А за тем циклом, идёт другой цикл, и немного вводного и конечного кода, и кругом Wait-ы. И получается, что нельзя триггер прерывать, и переносить в другой триггер тот же самый участок кода. У меня там 120 проходов, и что, на каждое истечение Таймера делать новый триггер с тем же кодом? Это 120 триггеров, и каждый передаёт управление следующему по таймеру? Жаль нет функции "Go To", как это в других языках программирования. Возможно действительно, стоит сделать отдельный триггер как jass-функцию, к которой и нужно обращаться через Custom Script? Но будет ли он обратно переходить на ту точку откуда его вызвали? В Гуях такого нет.
вейты с 0.01 = 0.2 примерно,да и темболее 0.2-1 сек погрешности это пустяк
Тогда нет, у меня есть такие важные периоды... Объясни тогда, как правильно написать таймер? Просто создал, не помогло. Тут вечно не договаривают. Скупы на слова. Приходится вытягивать по слову.
Не пойму, зачем так извращаться? Есть "Wait", а под ним, тут же, "Wait (game-time)", проверил тщательно, ждал 5 минут в Паузе Игры 30-ти секундную задержку, всё работает. А под ним, ещё, Wait For Condition, Wait For Sound, на любую потребу.
Можно ещё сделать триггер, что если подбирается предмет, то он сразу же выбрасывается на то место на котором ему и положено быть. Это произойдёт так моментально, что будет казаться что его нельзя взять. Однако герой будет бежать к нему чтобы подобрать его, и если этот момент неприятен, то можно отключить саму команду, дать команду "Отставить" когда он указывает на этот предмет.
Попробуй заклинание Дух Воды, то что у Верховного Мага. Оно вызывает на время Духа Воды куда ты укажешь. Ещё есть Тинкер Механик, который кидает завод, это тоже вызываемая единица.
Ну так а причём здесь предмет Сфера Молний если ты хотел прицепить к юниту? Или ты хочешь чтобы при каждой атаке Сферой Молний вылетала ещё и молния заклинания Цепь Молний со 100% вероятностью? Непонимаю. Ах, быть может ты использовал Цепь Молний (враг), та что у Ящерицы? Но непонятно тогда, хочешь ли ты чтобы Цепь Молний поражала сразу несколько целей, или только одну? Если только одну, то это можно сделать и в других заклинаниях. Ну а у Ящерицы эта способность действительно притемнённая, потому что она пассивная, применяется сама при каждой атаке. Обрати внимание что у каждого заклинания есть параметр Эффект Молнии, только не везде он действительно работает, и тебе придётся поискать такое заклинание у которого эффект стрельбы молнии виден, но иконки нет. Незнаю даже, есть ли такая способность, потому что нужно все их перебрать, а это очень много работы. Но тебе нужно лишь скопировать на другое заклинание с этого, параметры, отвечающие за графику молнии. Легче сделать триггерно, вот честно. Просто отобразить молнию от атакующего до атакуемого, и удалить через секунду.
Doc, Поподробней напиши альтернативу. Посмотрим, может и впрямь откажусь.
И вдогонку вопрос, как написать в MoveLocation... координаты центра карты, чтобы объявить в начале инициализации карты как стартовую точку?
Бордер, Ладно, есть покороче вариант, и с кровью, если к жестокости тяга. Пехотинцы пробегают под давящими ловушками. Нужно успеть пробежать, или пехотинец будет explosion. Цель - добежать до конца.
Я не поверил и решил сам так же сделать! Взял обычный предмет Сфера Молний, засунул в него способность Цепь Молний, от героя орды, и сделал её для категории предметов. Сделал активацию кнопки предмета. Не заработало. Потому что там ещё была способность Очищение. Убрал Очищение - Заработало! Никакой иконки нет! Видимо только одну активную способность можно заложить в предмет! И нужно чтобы она была первой в списке способностей предмета!
Сделал так. Использую только MoveLocation..., можно даже вообще не удалять переменную точки а лишь двигать её, как курсор мыши, и указывать молниеносно и невидимо для всех триггеров одной точкой что и куда им делать. Все стрелы полетели как надо, в россыпь. Хотя когда Я делаю удаление точки в конце, это не отражается на следующем вызове триггера, так что можно и удалять, главное не удалять когда она ещё нужна до завершения триггера. Проверил на Хендлах, один Хендл создаётся один раз, чтобы объявить эту точку, а то что двигаю в цикле никак не прибавляет Хендлы. Получилась точка-указатель, как курсор мыши, и одной хватает, ведь Warcraft однопоточный. Оставлю ещё вопрос открытым на несколько часов, может Я не прав и кто-то меня поправит.
Hate, Ну так Я её удаляю в конце прохода! А потом новый проход цикла и снова объявляю переменную, уже для другого юнита. Однако если старую не удалить сразу, а просто перезаписать переменную новой точкой, то старая точка останется, и расплодится их целая уйма, тысячи будут. В том то и смысл чтобы удалять точки! Hate, Вот как Я удаляю точку после каждого прохода! Чтобы надёжно было... Потом объявляю заново переменную. А как иначе?
Всё. Убрал полностью удаление точки. Включил снова MoveLocation... - не работает. Сижу ломаю голову дальше...
quq_CCCP, Делаю полный скрин как есть, того участка кода на котором остановился, со всеми отключениями, как есть. Суть заклинания в том, что по краям карты появляются невидимые лучники, которые по этому триггеру выпускают стрелы, и они сыпятся как Дождь Стрел, и всё выглядит круто, их выбрать нельзя и не видно. Здесь три группы по 12 лучников, и 19 залпов, выпускают 684 стрелы, и им нужно указывать каждый раз случайную точку, куда летит каждая стрела вроссыпь, тут-то мне и нужны полярные координаты которые указывают случайные точки от места указанного заклинанием. И когда нужно использовать RemoveLocation ... происходит тихая остановка триггера, когда же Я использую просто set ... = null, всё идёт, но Я не знаю решает ли это проблему утечки. Я сделал появление Еретика, просто выбрал случайно юнита, чтобы понять сколько раз исполняется команда, один появился. Отключая эту функцию, появляется множество, что как бы намекает что проблема в ней.
На всякий случай делаю ещё два скрина того что до- этого блока кода, и того что после-,но не думаю что проблема там...
Daniil18, считаю что стандарт - это игра 1 час. 2 часа - это если игрокам интересно доигрывать. И карту свою затачиваю для игры как минимум в 1 час - партия. Самое короткое - 40 минут. Как сделаю, выложу для вас для всех, делаю для людей безвозмездно. Карта типа Footman Frenzy, и хочу заменить свою картой стандартный Footman Frenzy, чтобы в мою карту играли, когда произносят это название, поэтому надо сделать более качественно, и никаких утечек!
Сейчас утечки попали в таймер и растут как на дрожжах. 4000~ утечек при старте, и далее растёт по ~1000 за 30 секунд, но волнами, то больше то меньше, потому что игра так устроена. Делал уже почти 4 месяца и теперь назад дороги нет, иначе вся работа зря делалась, и зря потратил время! quq_CCCP, написал снова, снова произошёл вылет, причём когда Я ещё в редакторе писал. Понял что строка слишком длинная, слишком длинные названия переменных, но это мой стиль. Написал в две строки. Написал - "set udg_GlobalCurrentAngle = (udg_GlobalCurrentAngle * bj_DEGTORAD)". Не работает!
Стал экспериментировать, отключать и включать строки. Оказалось что проблема в другом, а эта формула работает нормально! Оказалось что "Pick every ... "останавливается когда идёт последняя строчка, в которой Я и не думал что может скрываться ошибка, и даже не рассматривал из-за простоты. Это - "call RemoveLocation(udg_GlobalCurrentPoint1)", которая и срабатывает в конце цикла чтобы удалить остаточную позицию, и по тихому ломает весь триггер, и никаких ошибок компиляции, ничего вообще! Я даже Wait добавлял чтобы дать побольше времени для срабатывания, не помогло. Вы не могли этого знать, это нужно было чисто мне определить, картостроителю. Добавил ещё в конец "set udg_GlobalCurrentPoint1 = null", так же ничего. Добавил объявление как локальной "local location udg_GlobalCurrentPoint1 = udg_IssueOrderRainArrows[udg_CurrentNumber1]" прямо в начале цикла, на каждого юнита, так же ничего. Но отключаю её и всё прёт и множится, но без неё смысл теряется. Значит удаляю Я неправильно! В другом заклинании просто срабатывает один раз, поэтому и не заметил. Какие будут ещё предложения?
Тут так не мыслят! Когда придумывается игра, нужно чтобы она развивала какое-то качество у игрока, и это качество ставится за основу всей игры. Работает правило - То, чего в игре больше, будет главным развивающим элементом для игрока! То есть, можно придумать что цель игры найти Лампу Алладина, но всю игру он бегает и бьёт Мобов, значит игра не про поиски а про лутание.
Что в Warcraft-е можно делать? Просто драться, заниматься стратегией, собирать предметы, бегать по карте, покупать и продавать, прокачивать героя, строить башенки, исследоваться, защищать, нападать, патрулировать, стоять на месте ... - вот это и становится принципом игры, который развивает какое-то одно качество у игрока.
Если совсем простенькую, то могу посоветовать игру по типу Мартовского Зайца, когда нужно собирать красивые предметы быстрее других игроков, развивает стремление взять предмет быстрее оппонента, когда тот выпадает. Ну а сам предмет должен быть аппетитным, что его хочется взять, или неприятной бякой, или аппетитной ловушкой, и сделать, скажем, что-то вроде грибы растут в лесу и их нужно собирать, а на опушке леса стоит торговая избёнка, дальше можно додумать самостоятельно...
Hate, так приятель, давай докапываться до истины! Загрузил чистую карту, удалил сценарии инициализации, оставил только счётчик Хендлов. Показывает 91 хендл - это абсолютно чистая карта, на сколько возможно. Далее, загрузил все необходимые переменные и функцию, запустил проверку, счётчик показал 93 уже. Отключил стандартную функцию Преобразование координат, но оставил всё остальное, что обслуживало её, это объявление трёх переменных и три строчки в конце их обнуления. Счётчик показал 93. То есть так же. Вывод практический - 0 хендлов, что включена она, что выключена, разницы никакой.
Теперь чисто теоретически. Как эта функция может создавать точку если она берёт чистые координаты по X и Y (цифры), и получившаяся точка записывается в переменную, которую потом можно благополучно удалить. Вывод теоретический, процесс контролируем, лишних точек она не создаёт. Докажи обратное если Я не прав! бубубуб не засчитывается! Hate, Сорри, допустил маленькую ошибочку, 1 хендл прибавляется!
Финальный разбор показал. Функция Преобразование координат = 1 хендл, функция Полярный координат = 1 хендл, функция MoveLocation = 0 хендлов. Ну что ж, придётся признать что хендлы всё таки делаются, что ж тут поделать. Сегодня Я устал, завтра продолжу...
quq_CCCP, вот это ты гад! ))))) У меня случается крах и всё закрывается! Причём два раза так пробовал!
Короче. Вот как у меня это было в том заклинании где работало:
set udg_GlobalCurrentAngle = AngleBetweenPoints(udg_GlobalCurrentPoint1, udg_GlobalCurrentPoint2)
Это угол между двумя точками. Потом эта переменная шла как здесь Random Angle.
Я сделал через GUI сейчас, всё заработало. Использовал стандартную функцию Преобразование - Convert Coordinates To Point, а остальное так же. Будут так утечки или нет? Только честно! quq_CCCP, Проверил сейчас и то и то заклинание, всё работает. В одном Random Angle, в другом функция AngleBetweenPoints, но разницы никакой, работает чёрт возьми! Значит логически ты уже не прав. Причём когда работало с утечками, были заметные торможения, а теперь всё гладко, без лагов. Крутил камеру прямо на ходу, всё норм. Но по счётчику Хендлов сейчас сказать трудно, там и другие утечки идут... Думаю решено.
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / Как заменить Wait на Таймер?
» WarCraft 3 / предметный, который невозможно подобрать
» WarCraft 3 / Посоветуйте карт
» WarCraft 3 / Как вызвать юнита на время в конкретную точку карты?
» WarCraft 3 / Как вызвать юнита на время в конкретную точку карты?
» WarCraft 3 / Засунул цепную молнию в сферу молний, а иконку никак не скрыть
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
» WarCraft 3 / Засунул цепную молнию в сферу молний, а иконку никак не скрыть
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
И вдогонку вопрос, как написать в MoveLocation... координаты центра карты, чтобы объявить в начале инициализации карты как стартовую точку?
» WarCraft 3 / Засунул цепную молнию в сферу молний, а иконку никак не скрыть
» WarCraft 3 / Посоветуйте карт
» WarCraft 3 / Засунул цепную молнию в сферу молний, а иконку никак не скрыть
» WarCraft 3 / Засунул цепную молнию в сферу молний, а иконку никак не скрыть
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
Hate, Вот как Я удаляю точку после каждого прохода! Чтобы надёжно было... Потом объявляю заново переменную. А как иначе?
Всё. Убрал полностью удаление точки. Включил снова MoveLocation... - не работает. Сижу ломаю голову дальше...
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
quq_CCCP, написал снова, снова произошёл вылет, причём когда Я ещё в редакторе писал. Понял что строка слишком длинная, слишком длинные названия переменных, но это мой стиль. Написал в две строки. Написал - "set udg_GlobalCurrentAngle = (udg_GlobalCurrentAngle * bj_DEGTORAD)". Не работает!
» WarCraft 3 / Посоветуйте карт
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
Hate, Сорри, допустил маленькую ошибочку, 1 хендл прибавляется!
Финальный разбор показал. Функция Преобразование координат = 1 хендл, функция Полярный координат = 1 хендл, функция MoveLocation = 0 хендлов. Ну что ж, придётся признать что хендлы всё таки делаются, что ж тут поделать. Сегодня Я устал, завтра продолжу...
» WarCraft 3 / Не работает строчка Custom Script о полярных координатах?
quq_CCCP, Проверил сейчас и то и то заклинание, всё работает. В одном Random Angle, в другом функция AngleBetweenPoints, но разницы никакой, работает чёрт возьми! Значит логически ты уже не прав. Причём когда работало с утечками, были заметные торможения, а теперь всё гладко, без лагов. Крутил камеру прямо на ходу, всё норм. Но по счётчику Хендлов сейчас сказать трудно, там и другие утечки идут... Думаю решено.