Да всем понятно что стандартная расстроечка никому нафиг не нужна, варкрафт - это прежде всего кастомки (а для нас прежде всего это редактор), но они даже в бете с этим оттягивают до неприличия
полная чушь, выйдите уже со своего мирка где кастомки якобы популярнее мили
Буду откровеннее, мили - заигранная, неинтересная, никому ненужная параша без баланса, который отказываются менять не первый десяток лет, выйди пожалуйста из своего мирка где у тебя варкрафт вокруг мили вертится. От оф. батлнета до айсикапа, зайди туда, там от силы 10% в них играет в лобби, а через матчмейкинг одни и те же три с половиной ноулайфера которые лет 20 почти уже в них играют, с которыми играть вообще нет смысла, они выиграют в любом случае. Милишные карты успели надоесть всем еще в 2005 году, когда не было широкого выбора из кастомных карт и все что тогда умели - просто натыкивать юнитов в редакторе на землю.
По твоим милишным картам чемпионаты с призовыми максимум 10-50к долларов и то о них никто не слышит кроме узких кругов, в то время когда из кастомок варкрафта родилась дота и некоторые другие игры. Все только в них и играют, да и на этом сайте уверен ты не найдешь и десятка милишных проектов от комьюнити, потому что они никому не нужны. Это довольно сложный и неинтересный публике жанр, где надо контролировать десятки юнитов и зданий, учиться играть в это надо долго и любые попытки поиграть в это буду растоптаны дедами, которые в это бахали пока я в 4 класс ходил, я и большинство других игроков заходя в варкрафт просто хотим весело провести время, заходя в доту, варлоков, жизнь на арене и прочее, а не потеть над каждым юнитом, накликивая без конца здания, юнитов пытаясь изо всех сил не потерять ни секунды развития.
Видимо, спать они не планируют, судя по тому, сколько там еще работы.
Когда они уже кастомные карты хотя бы допилят.
Я что, заплатил свои бабки, чтобы юнитов нанимать и здания строить, что ли?! (рофл, просто никогда не любил игру на развитие)
Да всем понятно что стандартная расстроечка никому нафиг не нужна, варкрафт - это прежде всего кастомки (а для нас прежде всего это редактор), но они даже в бете с этим оттягивают до неприличия
Даже редактор без изменений вообще, надеюсь что хоть в апдейт с котомками параллельно запихнут редактор хоть с какими-то явно видимыми улучшениями
например как быть с ситуацией когда this или объект используется как число?
this часто используется как число, например для сохранения на хэндл таймера.
ИМХО, структуры вообще лучше переписать изначально на lua.
В таком случае я оставлю, их в любом случае лучше доработать напильником, пару раз this поменять руками думаю ничего не стоит
Хотя можно конечно uid добавить который бы везде заменял обращения к this напрямую
Как и обещал, выпустил версию 1.09, в которой реализована поддержка структур, старался делать их код максимально совместимым с оригиналом кода, чтобы работали с остальным кодом.
Не поддерживается и не будет поддерживаться наследование, поддерживаются статические методы и относительно статические члены.
Пишите вы this.member, .member или просто member - не важно, оно поймет что где к чему относится. Конструктор если есть то обязан называться или new или create.
Если используются структуры не объявленные в текущем файле - объявите их в начале написав type StructName.
Можете тестировать и докладывать о багах
И если хочешь получать/посылать число указывая номер игрока и число - тогда либо хеш-таблица (именно так они и работают)
Хэштаблицы в lua это глупо
Я просто уже по привычке написал систему луашных хештаблиц)
Работает на обычных таблицах, создается, читается подобно варкрафтовской, только умеет луашные объекты сохранять, может это и извращение, но этим можно на раз-два быстро заменить все хеш-табличные вызовы в игре
Ну то что в игре 5я кнопка это рандомная раса и так все знают, а вот что до твоего скрина то могу только предположить: у нас будет 5 раса на расстроечку, но вероятно она будет добавлена позже, даже после релиза. Или у нас будет новая кампания за демонов, в конце-концов кампания будет ремейком, а не ре-скином\ремастером, вряд ли будет интересно проходить копию старых компаний с новой графикой, игра должна чем-то удивлять, показывать новое, потому подобных новшеств от неё можно смело ожидать. Ну или на крайняк заглушка для новых возможностей юзерских карт.
PyCCKuu_4eJl, что за страный совет кода=)
Нет нужды цикл делать если можно при вызове [] через волшебную функцию в мета таблице и легче (Условно что если его ранее не вызван и не создан не будет занимать ячейки) Но когда его вызван и тут уже создает для игрока массив а там уже заполняет условно есть или нет
Это из разряда: я хочу перенести героя на противоположный край карты за 1/100500 секунды, но он почему-то не летит плавно.
Со скоростью 3000, на другой край он будет лететь несколько секунд, у меня стоят тикрейты 0.01, не испытывал с этим проблем никогда, я клоню к тому что это устаревшие мифы родом из уже почти позапрошлого десятилетия
Ага, рассказывайте про плавность.. Если что лок фпс у варкравта и ваш монитор вряд-ли тянет 100 герц, не рассказывайте сказки про плавность. Никогда не советуйте новичкам свои художественные взгляды, есть общепринятые вещи, благо варкравт существует достаточно долго, на такие вопросы - ответ всегда один, статьи, карта пример - Duos Knockback system.
Это не просто улучшение на 100 фпс какое-то, это и с 30-60 фпс видно как герой каряво двигается, ну вижу я это отчетливо, покажите мне видео с 60 фпс я это сразу различу. Особенно видно даже не вглядываясь когда герой летит на большие расстояния со скоростью 2500-3000 ед. в секунду, он будет телепортироваться на дистанции по 90 единиц, это прям очень заметно и глаза режет. И если нужно делать что-то с юнитами сквозь которых летишь, то тем более на таких полетах обязательно нужен таймер с минимальным тик рейтом, иначе есть вероятность что рандомно юниты просто не попадут под раздачу. А да, у меня бывало по 10-20 таймеров с тиками 0.01 работают одновременно и ничего не лагало, это все теоретические домыслы, их же не 1000 в конце-концов.
Drulia_san, что за идиотия, куда вам 100 раз в сек, 0.03 более чем достаточно, 0.02 край. Дурость не советуйте, потом ваши карты будут фаталить и лагать с таким подходом.
Ничего никогда не фаталило и не лагало, играл 10х10 так и ничего подобного не было замечено из-за этого, бред), десятки скилов с тиком в 0.01 сек. Плавность движения с 0.03 и 0.02 не такая как с 0.01 сек, конечно это уже излишняя красивость, не в 2005 году карты делаем, тик в 10мс вполне нормальное решение. Уже давно замечал что идеальная плавность начинается именно с 10мс
всё к тому, что, прочитав название, подумал, что вполне реально всю эту байду перевести в луа
Хотя в итоге офк проще написать с нуля
Если код слишком специфичен, то боюсь что да) Но вообще, можно переименовать внутренние функциии и переменные через массовую замену и попробовать сконвертировать, тогда по идее всё должно работать.
Если попытаться упаковывать автоматически на луа, потом придется тоже много руками править, дописывать имя библиотеки к вызовам и прочие неприятности, так что куда не поверни - аксиома Эскобара.
Ну если семантика сохраняется. У модулей/библиотек есть например инициализаторы, без них код поломается. Опять же совпадение имен в разных скоупах. Если эти проблемы решаются, то ок.
Код преобразуется по-файлово, сеанс трансляции для одного файла не помнит что было в другом, потому о таких вещах должен позаботиться автор кода. Однако в следующей версии уже реализована фича, когда при парсе глобалка\функция переобъявляется, то парс обрывается с предупреждением внести изменения.
не нужно пихать уродства из джасса в простой и компактный луа.
Эта тулза занимается именно этим. А то, что нужно - запаковать набор из N легаси-библиотек - как раз не делает.
Если нужно что-то запаковать это можно сделать и руками, дело 1-2 минут. Это - вкусовщина для разработчика, а не необходимость, лично мне достаточно по файлам рассортировать нужный функционал.
Да может это и удобно для тебя или кого-нибудь еще, никто не мешает это делать, но не преувеличивай значимость, будто это самое важное, это просто обёртка.
Отсутствие поддержки расширенных фич vJASS как module, library, scope
И зачем это тогда?) код без этих фич таких размеров, что его и руками можно перенести
Абсолютно ненужные при переносе фичи, на луа можно конечно сделать подобие неймспейсов, но в этом нет сущей необходимости. Зачем это?
Для конвертации синтаксиса, попробуй 100к строчек кода мешанины из JASS/cJass перенеси на луа руками, это занятие не на один месяц (если не сидеть часами каждый день за этим), чтобы еще всё правильно было, и просто регулярки тут не прокатят. А так во множестве случаев код даже редактирования не требует, работает сходу после конвертации. Перенести код руками? Ты много желающих видел которые горят желанием добровольно переписывать всё на луа? Причем не рефакторить, а именно сидеть переписывать, пытаться просто заставить код заработать.
Для 99% тех кто пишет на джассе, такие вещи как module, library, scope это просто красивое обрамление кода и костыль для его финальной композиции, потому что без этого функции могут быть ниже зоны видимости скриптов, которые дергают функции из библиотеки,когда в луа изначально всё видит всё и то что выше, и то что ниже. Имхо, всякие library, module, scope - ненужный мусор на луа, можно реализовать, но это уже вкусовщина, оборачивать кучу функций в огромную function UtilsLibrary() или типа того.. Ради чего? Ради того чтоб постоянно писать UtilsLibrary:Func()? Это маразм. Реализовать подобное дело получаса, я намеренно это не добавил, чтобы не уродовать код.
Как пользователю мне в первую очередь было бы важно, чтобы сохранялась читаемость кода, переводились сложные выражения и за меня бы сделалась вся рутина переноса, где в конце можно чуток дополировать. Желательно еще чтоб структурки конвертились. У меня куча кода в этих модулях, либрарях и скоупах, и мне вообще без разницы что и как с ними будет после, главное чтоб код был красивым и работал.
Скрипты и только скрипты. Создаешь периодический таймер с частотой 0.01 сек, как угол направления берешь GetUnitFacing(), задаешь необходимое расстояние прыжка, например 800, и каждый тик таймера двигаешь его на это расстояние умноженное на частоту таймера 800 * 0.01 (если хочешь чтоб он это расстояние преодолевал за секунду например) в точку находящуюся перед юнитом. Считаешь каждый тик таймера и пройденное расстояние и сохраняешь в счетчик расстояния, далее при условии что или юнит сдох или если пройденное расстояние больше или равно 800, то уничтожаешь таймер и прыжок завершен. Для нанесения урона и отбрасывания нужно по такому же принципу где-то писать скрипт.
Обновил софтину, кучу всего улучшил, файлы common.j, blizzard.j, common.ai теперь парсятся без ошибок, синтаксический анализатор в выхлопном луа коде тоже проблем не обнаружил, emmyDoc добавляется куда только можно. Можно проверять
Всё отлично работает, обновил файлы в своей статье.
Ееее, победа) Ну, осталось только поддержку структур добавить думаю, и можно считать проект завершенным
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Четко, только не +100 +200, а + радиус в котором юниты будут получать урон
Нет. посмотри на картинку. Слева смещение кругов по радиусу по которому юниты получают урон, а справа на малую величину, где полоса урона приобретает более толстую однообразную форму. Как видишь если с малым интервалом так наносить урон - оно будет бить не всех юнитов, те что между окружностями слева просто не попадают под раздачу. Делай так как говорил 8gabriel8, записывай всех в группу и в конце наноси урон. Способ самый простой, не требующий математический возни. Чем меньше интервал между кругами (не важно какой там радиус), тем точнее линия урона.
Чтобы одновременно это очень просто, выбери толщину линии, подели на два и с таким радиусом наноси аое урон со смещениями вперед от героя в нужном напоавлении на +100, потом +200 и тд, в цикле
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
луа не типизированный язык и будет глупо добавлять правила парсинга объявления типов..))
Тогда IDE не будет подсвечивать типы передаваемых данных в функцию, что не очень удобно.
к тому же придётся каждый return заменить на any.
Окей в принципе не сложно, я почти закончил
Обновил софтину, кучу всего улучшил, файлы common.j, blizzard.j, common.ai теперь парсятся без ошибок, синтаксический анализатор в выхлопном луа коде тоже проблем не обнаружил, emmyDoc добавляется куда только можно. Можно проверять
Хочу поделиться успешными результатами, это действительно работает, вот пример первой карты полностью конвертированной на Lua с cJass автоматически. Это моя старая карта, там всего около 20 триггеров на cJass + глобальные функции. Из того что я редактировал всего лишь раз поправил 1 оператор и убрал лишние дефайны, весь код сгенерирован этой утилитой и работает) Карту прикрепил, можете сами посмотреть в редакторе если кому интересно.
Мини-гайд как конвертировать карту:
Экспортируйте все триггеры в отдельные файлы, я это делал собственной утилитой которая разбивает скрипт карты по файлам
Конвертируйте их все в Lua (но сначала прочитайте ограничения и предупреждения из статьи выше в главном посте, убедитесь что ваш код не выходит за рамки возможностей программы)
Удалите все триггеры, гуи и джасс скрипты из карты
Откройте настройки карты и на второй вкладке поменяйте JASS на Lua
Сохраните
Создайте по скрипту в триггерах в соответствии с названиями файлов которые вы конвертнули
Копипастить текст триггеров в карту файл за файлом
Создать точку входа (лучше всего перехват InitGlobals), сначала вызвать оттуда все функции InitTrig_ и потом напрямую скрипт инициализации карты
Готово, в лучшем случае всё будет работать, если не работает дорабатываем ищем ошибки
В идеале карта-исходник должна быть в виде папки где на каждый скрипт реальный отдельный файл, который при сборке склеивается в один луа скрипт, но пока сойдет и так. Возможно с релизом рефоржа нам завезут IDE в редактор триггеров или возможность сборки по файлам. Есть еще ceres wc3 для сборки карт который с остервенением советуют все разработчики на хайве и us форумах на батлнете, но это такое г...o, написанное не пойми на чем, запускаемое непонятно как с отвратительной документацией где не описано нормально и кратко как этим пользоваться. Потому использовать его крайне не советую и лучше ждать релиза reforged, где 100% будет адекватное и простое средство для сборки кода или редактирования скриптов.
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
По твоим милишным картам чемпионаты с призовыми максимум 10-50к долларов и то о них никто не слышит кроме узких кругов, в то время когда из кастомок варкрафта родилась дота и некоторые другие игры. Все только в них и играют, да и на этом сайте уверен ты не найдешь и десятка милишных проектов от комьюнити, потому что они никому не нужны. Это довольно сложный и неинтересный публике жанр, где надо контролировать десятки юнитов и зданий, учиться играть в это надо долго и любые попытки поиграть в это буду растоптаны дедами, которые в это бахали пока я в 4 класс ходил, я и большинство других игроков заходя в варкрафт просто хотим весело провести время, заходя в доту, варлоков, жизнь на арене и прочее, а не потеть над каждым юнитом, накликивая без конца здания, юнитов пытаясь изо всех сил не потерять ни секунды развития.
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Даже редактор без изменений вообще, надеюсь что хоть в апдейт с котомками параллельно запихнут редактор хоть с какими-то явно видимыми улучшениями
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Дополню: Имеется слух от стримера, приближенного к людям из Bliizard - Grubby, что релиз игры запланирован на 30 декабря.
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Вопрос по адаптации структур в lua
Хотя можно конечно uid добавить который бы везде заменял обращения к this напрямую
Ред. Drulia_san
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Не поддерживается и не будет поддерживаться наследование, поддерживаются статические методы и относительно статические члены.
Пишите вы this.member, .member или просто member - не важно, оно поймет что где к чему относится. Конструктор если есть то обязан называться или new или create.
Если используются структуры не объявленные в текущем файле - объявите их в начале написав type StructName.
Можете тестировать и докладывать о багах
» WarCraft 3 / двумерный массив lua
Работает на обычных таблицах, создается, читается подобно варкрафтовской, только умеет луашные объекты сохранять, может это и извращение, но этим можно на раз-два быстро заменить все хеш-табличные вызовы в игре
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / двумерный массив lua
Ред. Drulia_san
» WarCraft 3 / Как сделать рывок в версии 1.26?
Ред. Drulia_san
» WarCraft 3 / Как сделать рывок в версии 1.26?
Ред. Drulia_san
» WarCraft 3 / Как сделать рывок в версии 1.26?
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Ред. Drulia_san
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Ред. Drulia_san
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Да может это и удобно для тебя или кого-нибудь еще, никто не мешает это делать, но не преувеличивай значимость, будто это самое важное, это просто обёртка.
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Ред. Drulia_san
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Ред. Drulia_san
» WarCraft 3 / Как сделать рывок в версии 1.26?
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua
Ред. Drulia_san
» WarCraft 3 / Урон по линии
Ред. Drulia_san
» WarCraft 3 / Урон по линии
Само собой всех дамагнутых добавляй в группу, чтоб сверяться с нейи не даиажить дважды, ткк и будет мгновенный урон по линии
Ред. Drulia_san
» WarCraft 3 / cJass2Lua(v1.12) - Преобразователь кода cJass и JASS в Lua