дать общий контроль с компьютерным игроком, которому будут принадлежать все войска, которые игрок будет считать своими (возможно придется заморочиться с синхронизацией ресурсов)
написать полностью триггерный ИИ
Чисто теоретически запустить ИИ для живого игрока можно, но на практике движок так, скорее всего, не умеет.
Triggering Unit, Attacked Unit и подобные функции гарантированно выдают правильное значение только в момент срабатывания триггера, а если добавить вейты, то за время ожидания уже совсем другие юниты могут стать последним вызвавшим срабатывание триггера или последним атаковавшим юнитом.
leha3, одиночные кавычки в варе это не строка, а особая форма представления числа.
В подробности мне вдаваться некогда и объяснять про системы исчисления с основой отличной от 10, тем более все это было в статьях. Просто используй 0 вместо двух одинарных кавычек в той строке, на которую ругается компилятор, а одинарные кавычки только с четырехсимвольными равкодами.
darkowlom, можешь немного уточнить задачу? тебе мауспик нужен (точка на экране монитора) или точка в трехмерном пространстве? в зависимости от этого нужны различные алгоритмы.
перебираем все фигуры, в которые может попасть точка
отсекаем по баундинг боксам и другим простым критериям столько фигур, сколько получится
для оставшихся фигур прогоняем более дорогие детальные проверки, зависящие от того, что именно подразумевается под "попаданием точки в фигуру"
если задача определить, например, клик мышкой по объекту это одно, а если есть координаты точки в трехмерном пространстве и надо понять находится ли она внутри объекта это совсем другое
Dragonear, называется параллельные массивы, но для привязки они сами по себе не годятся т.к. таймер в момент срабатывания знает только себя и придется по массиву пройтись линейным поиском чтобы найти номер таймера в массиве, а потом по этому таймеру найти юнита. Вот для расширения кастом данных самое то - вешаем в Custom Data юнита номер его ячейки в массиве и любой, кто знает юнита, может моментально получить доступ ко всем дополнительным кастом данным этого юнита.
nvc123:
Если бы ты внимательно читал, то мог бы заметить, что во-первых простого уменьшения времени недостаточно - нужны еще дополнительные проверки на особые случаи, во-вторых использование одного таймера уже обсуждалось и в-третьих у автора пока нет знаний в области работы с jass, а гуишное периодическое событие у него вызывает лаги при большом кол-ве юнитов.
Dragonear, увы, не все в варе можно сделать бафами. Сама по себе идея дамми-каста вполне надежна при грамотной реализации и часто используется, но в данном конкретном случае недостаточно просто наложить эффект - нужно еще отследить условия для снятия этого эффекта. И вот тут начинаются проблемы, связанные с ограниченностью движка. Решить их почти всегда можно, но достигается это либо ценой упрощения игровой механики либо ценой написания сложной системы на jass.
P.S. лучше бы второй старкрафт осваивали сразу. А еще лучше - на полноценные языки программирования и существующие движки, благо многие крупные движки в последнее время перешли на бесплатное распространение с оплатой в случае коммерческого использования, не говоря уже о тех, которые изначально полностью бесплатные и с открытым кодом.
alexprey, в таком случае реквестирую возможность отключить эту напоминалку на этапе создания/редактирования задания индивидуально для каждого задания. Чтобы руководитель проекта мог сам решать что ему важнее - скорость выполнения заданий или психологическое здоровье участников.
Castwork, нужна возможность перегнать данные о юните внутрь таймера:
По хорошему нужна система расширенных кастом данных (через параллельные массивы или через хештаблицу или через любое другое извращение), позволяющая привязать к юниту таймер и дополнительную информацию вроде того, какие дополнительные способности этому юниту выданы.
Но на практике с большой вероятностью хватит простого перебора группы по одному таймеру т.к. таймер на jass работает куда шустрее периодических событий.
никак руки не доходят да и подходящего "учебника" не находил)
Castwork, кстати, если юнитов слишком много, их можно разделять в несколько групп на разных таймерах - помогает. Но у меня до этого дошло когда задействованных юнитов было несколько сотен и нужны были довольно тяжелые проверки с кучей математики.
Но учить jass это маст хев если нужно что-то, срабатывающее чаще чем раз в несколько секунд.
alexprey, что-то мне подсказывает, что это игра на смартфон или планшет, использующая картинку с камеры в качестве фона. Правда как сейчас обстоит дело с привязкой координат объектов по распознаваемому изображению сказать не возьмусь - сравнительно недавно был хороший прорыв, но вышли те технологии в свободный доступ или нет не знаю, да и точность в движении там еще страдала - не хватало стабилизации.
Castwork, просто много юнитов или много юнитов под воздействием особых способностей? Какие проверки делаются для каждого юнита в группе?
И главное, как реализован таймер? Через периодическое событие в ГУИ или через нормальный таймер в JASS?
Последний вопрос вызван тем, что у меня бывало так, что периодическое событие вызывало дикие лаги само по себе - без какой-либо начинки внутри, одним фактом своего присутствия. кажется, именно тогда я и начал всерьез учить jass ибо достало
По хорошему нужна система расширенных кастом данных (через параллельные массивы или через хештаблицу или через любое другое извращение), позволяющая привязать к юниту таймер и дополнительную информацию вроде того, какие дополнительные способности этому юниту выданы.
При обнаружении применения способности выдаем юниту дополнительную и запускаем таймер с небольшим периодом, который проверяет юнита и при необходимости удаляет дополнительную способность.
Я, кстати, делал такое и без привязки таймера к каждому юниту - через группу, которую перебирал пару раз в секунду. Естественно, в группу добавлялись только юниты, для которых была нужна проверка. работало шустро на очень старом железе. Правда дополнительные данные всеравно хранились в хештаблице - без них больше одной такой способности запаришься делать.
Хозяин Миров, переделать на таймеры лучший вариант, если честно, особенно если на jass делать - можно написать систему, инкапсулирующую в себе работу с таймерами и прерываниями. Постпроцессор, конечно, намного лучше, но по балансу сложности и полезности проигрывает.
nvc123, может потому что добавлять проверки для каждого вызова в карте это немного лишнее? define из cjass ведь не дает полноценные фильтры настроить. И да, cjass парсер это тоже "внешняя прога", просто он уже написан и подключен к JNGP.
Castwork, проще то проще, но есть проблема... Нет сброса таймера - если на юнита два раза подряд скастовать способность, дающую дополнительную способность, то дополнительная способность пропадет после истечения первого таймера, а не второго.
Dragonear, да хоть до смерти заминусуйся, а описанная проблема сама никуда не денется.
Dragonear, внешнему парсеру вовсе не обязательно идеально знать jass чтобы выполнять такое простое действие, как добавление кода по шаблону. Предложил бы по копаться в моем коде от проекта xgm.guru/p/fly-data но не уверен что найду его. Что касается понимания варом - сам вар о внешнем модуле ничего знать не должен - все делается на уровне редактора карт, а модуль является плагином к JNGP.
Dragonear, C/C++, C#, java и так далее. Интересно, как можно было прийти к предположению, что на jass можно написать внешний модуль, который работал бы в момент сохранения карты?
Dragonear, можно написать на нормальном языке программирования внешний постпроцессор, который будет обрабатывать jass-код при сохранении карты и добавлять условие с командой на завершение триггера, но я бы не сказал что это проще.
Если я ничего не путаю, кроме списка имен есть еще числовое поле, определяющее сколько имен из этого списка использовать. Нормально ли выдаются имена созданным не через триггер героям? Нормально ли выдаются имена, если героев создать больше одного?
Melissa, зачем такой изврат? Если не ошибаюсь, есть способ получить группу выбранных игроком юнитов без полного перебора (было давно, так что могу путать со своей наработкой). Кроме того так выдаст тонну сообщений, если выбрано больше одного юнита.
» StarCraft 2 / Надоедливый ИИ: эпизод II
» WarCraft 3 / Цикл повторяется до трех раз
» WarCraft 3 / Цикл повторяется до трех раз
Ред. prog
» WarCraft 3 / Что за фигня пытался сделать ИИ со своим героям импортировал в карту и вот что вылезло
» Программирование / Попадание точки в 3д фигуру
Ред. prog
» Программирование / Попадание точки в 3д фигуру
Ред. prog
» WarCraft 3 / Фиксированная позиция игрока
» WarCraft 3 / дать способность на некоторое время
» WarCraft 3 / дать способность на некоторое время
Если бы ты внимательно читал, то мог бы заметить, что во-первых простого уменьшения времени недостаточно - нужны еще дополнительные проверки на особые случаи, во-вторых использование одного таймера уже обсуждалось и в-третьих у автора пока нет знаний в области работы с jass, а гуишное периодическое событие у него вызывает лаги при большом кол-ве юнитов.
» WarCraft 3 / дать способность на некоторое время
» XGM Team / Обновление 8.4
Ред. prog
» WarCraft 3 / дать способность на некоторое время
Ред. prog
» WarCraft 3 / дать способность на некоторое время
» Scramble / Scramble
Ред. prog
» WarCraft 3 / дать способность на некоторое время
Ред. prog
» WarCraft 3 / дать способность на некоторое время
» WarCraft 3 / Мгновенное отключение триггера
» WarCraft 3 / Мгновенное отключение триггера
Ред. prog
» WarCraft 3 / дать способность на некоторое время
» WarCraft 3 / Мгновенное отключение триггера
» WarCraft 3 / Мгновенное отключение триггера
» WarCraft 3 / Мгновенное отключение триггера
Ред. prog
» WarCraft 3 / Собственное имя
Ред. prog
» WarCraft 3 / Игровое сообщение
» WarCraft 3 / Игровое сообщение