24

» WarCraft 3 / lua таблица в таблице

А почему все в качестве индекса массива юзают цифры
Лично я юзаю хендлы вместо юнитов чтобы не связываться лишний раз со сборщиком мусора и мнением вара о том, когда пора удалять юнита из памяти. Кроме того, это не точно, но вроде числовые ключи работают чуть быстрее объектных, даже если таблица не в режиме массива, а в режиме массива, когда записи идут подряд, без пропусков, числовые ключи гарантированно быстрее строковых и обьектных.
В мультиплеере разногласия со сборщиком мусора могут быть чреваты потенциальным десинком, поэтому перестраховуюсь. А вот в одиночных картах можно не просто юнита в качестве ключа использовать, а еще и перевести таблицу в режим слабых ссылок, чтобы запись полностью удалилась автоматически когда вар решит удалить юнита из памяти. Правда это не факт что произойдет при вашей жизни или при жизни текущей сессии карты, но это уже нюансы.
24

» WarCraft 3 / lua таблица в таблице

PT153, индексация идет с 1 только с точки зрения стандартных функций работы с таблицей-массивом, а при прямом обращении к элементам можно хоть с розового слоника нумерацию начинать. Тут проблема в другом - полностью перезаписывалась таблица когда не было одной из записей в ней.
24

» WarCraft 3 / JNGP Lua Edition

ChugunovRoman, на момент когда я последний раз трогал оригинал руками - в зависимости от выбраного режима. В отладочном режиме творится муть с заворачиванием кода в строки и всякое такое, но он подтягивает все файлы какие найдет. В релизном выполняется минификация кода и вроде нет заворачивания в строки, но нужно явно указывать что подтягивать.
24

» WarCraft 3 / JNGP Lua Edition

А есть какие-нибудь сборщики для JASS'а и его диалектов? По типу как WLPM?
Понятия не имею, если честно - когда я с жассом работал мне хватало того что умеет жассхелпер. Но, например, тот же warcraft-vscode собирает код скриптом внутри плагина к вскоду - запилить свой форк и научить его собирать жасс в теории не очень сложно. Хотя я уверен что есть готовые плагины к вскоду рассчитанные именно на сборку карты в жасс версии.

Ну я глянул... и чет да, там какое-то мракобесие
Самый треш там в отладочном режиме. В "релизном" чуть по лучше, но для релизного надо явно указывать все связи между файлами или заносить их в список, чтобы он включил их в сборку.

Ну код можно выкладывать на любой стадии разработки ПО. Все желающие смогут подтянуться к разработке.
Я до первого релиза код не выкладываю, если проект изначально не начинался с расчетом на совместную разработку.
24

» WarCraft 3 / JNGP Lua Edition

Паковать через MPQEditor можно?
Не пробовал, но скорее всего можно, если там есть поддержка запаковки из командной строки. Я честно спионерил внешний mpq-упаковщик у автора warcraft-vscode, одна из его особенностей в том, что ему можно передать файл со списком файлов которые надо запаковать, что очень удобно когда файлов много и не все файлы из папки надо паковать.
Свой сборщик Lua? Есть репа на гитхабе? Скинешь ссыль? может помогу
Репы на гитхабе пока нет, будет после первого релиза. Тогда и поговорим о помощи, если еще будет желание.
На данный момент проект состоит из трех частей:
  • внешний mpq-упаковщик, пока берется оригинальный из warcraft-vscode.
  • плагин изначально запиленый на основе warcraft-vscode, но без лишнего функционала, фактически это обертка внутри вскода над внешними сборщиками, также выполняет отправку карты на тестирование в игру. Требует значительной доработки и вполне может быть заменен чем-то другим.
  • псевдо-компилятор на c++, который выполняет две задачи - сборку исходников в один файл и препроцессинг кода для добавления небольших, но приятных фич вроде макроса RAW('A000'), в результате парсинга которого в итоговый код попадет числовое значение равкода (для сравнения, сейчас в луа версии карты используется функция FourCC, которая конвертирует строку равкода в число на этапе выполнения кода, автоматической конверсии равкода в число нет, в отличии от того как это работало в JASS).
По поводу поделиться системой сборки в текущем состоянии - там еще слишком много багов для этого, иначе я бы уже выложил первую версию в релиз.

В общем, поставил я warcraft-vscode и вроде пока все норм.
Все норм, если не смотреть на тот ужас, который он делает с кодом в итоговой карте.
24

» WarCraft 3 / JNGP Lua Edition

ChugunovRoman, например, свою собственную систему сборки под вскод я делал на основе warcraft-vscode от Dencer. По началу я пользовался этим плагином как есть, а потом автор начал творить дичь с кодом и пришлось писать свой плагин, а с нуля писать времени и желания не было.
По факту - карта просто пакуется внешним mpq-упаковщиком после сборки кода и потом отправляется в игру через параметр командной строки.
Где можно найти какие-нибудь наработки на Lua или различные примеры кода?
Небольшое количество есть в статьях прямо тут на сайте, но мало и в основном не очень качественно т.к. мало кто этим пока занимается.
P.S. свой сборщик я допилю и тоже когда-нибудь выложу, но пока не до этого.
24

» WarCraft 3 / JNGP Lua Edition

ChugunovRoman, обычно это обходят через сборку и запуск карты на проверку из среды разработки для кода.
Т.е. код генерируемый WE используется как часть бандла и обратно war3map.lua не импортируется, вместо этого вместе с бандлом собирается отдельная карта, которая не открывается в WE, а только запускается в игре.
Из минусов - проверка карты из редактора запускает карту без внешнего кода. Естественно, запуск карты на тестирование автоматизируется, чтобы можно было сделать это одним нажатием кнопки в среде разработки, а не вручную, но всеравно приходится сохранять карту в WE, потом переключаться во внешнюю среду разработки и запускать проверку карты оттуда.
Более того, есть готовые решения и для сборки кода и для сборки карты.
24

» WarCraft 3 / Заклинание: Вихрь Иллюзий

DopaMine, у вас карта в жасс режиме, а код луа, естественно ничего не работает.
24

» WarCraft 3 / DistanceBetweenPoints возвращает бред

Так выведи же в чат координаты между которыми вычисляеш расстояние. Скорее всего, какая-то из пар координат выведет нули.
24

» WarCraft 3 / Cjass

На пиратках остануться лишь их преданные фанаты и те, кто не любит современные системы и вообще всё новое.
А еще там останутся пираты-нищеброды, если близы не дадут какой-то бесплатный режим.
24

» WarCraft 3 / Cjass

В теории - его можно попробовать подсунуть редактору через один костыль... Но на практике я этого не делал ибо зачем если есть Lua.

Костыль подразумевает подсовывание жассхелперу вместо pjass стака из нескольких программ, включая cjass и отдельную копию жасс-хелпера и отдельный pjass, а результат этого кормится оригинальному жассхелперу в редакторе. Я этот метод, правда с другим стаком программ, исследовал когда на PTR первые пробы с Lua делал и пытался добавить свой препроцессор к редактору, потом жассхелпер убрали из Lua режима полностью, но это не важно ведь в жасс режиме он никуда не делся.
24

» WarCraft 3 / Генератор псевдослучайных чисел

quq_CCCP, т.е. последовательность SetRandomSeed(100500) GetRandomInt(0, 1000000) выдаст мне на выходе 100500, а не следующее число из потока после 100500?
Впрочем, это ничего не решает - всеравно придется жонглировать сидом туда-сюда постоянно, что не очень удобно.
24

» WarCraft 3 / Генератор псевдослучайных чисел

8gabriel8, на Lua - легко. На жассе даже пробовать не буду. А если ты конкретно про алгоритм корректировки шанса, то это или по экспериментировать с разными формулами надо будет или по искать статью в сети, близы этот способ в WoW использовали в какой-то момент и вроде кроме близов еще кто-то. Сам я планирую для своей карты такой рандом реализовать для критов и подобного, соответственно свою версию на Lua выложу, но это когда еще будет (не скоро).
24

» WarCraft 3 / Генератор псевдослучайных чисел

8gabriel8, есть еще другой способ - сдвигать диапазон "попадания" по мере накопления вызовов, таким образом чтобы среднее кол-во попаданий на нужное кол-во вызовов было правильным. Грубо говоря - повышать реальный шанс срабатывания если среднее кол-во фактических попаданий ниже желаемого и снижать если выше. Но для этого нужен не особый генератор, а надстройка сверху генератора, которая позволяет хранить кол-во вызовов и попаданий для каждого контекста в котором используется.
24

» WarCraft 3 / call DestroyTrigger( GetTriggeringTrigger() )

PT153, была, близы признавали её наличие. А вот есть ли до сих пор или таки пофикшена это проверить можно.
24

» WarCraft 3 / call DestroyTrigger( GetTriggeringTrigger() )

В последних патчах вроде фиксили утечку из-за которой любые объектные переменные обнулять надо было обязательно.
24

» WarCraft 3 / Генератор псевдослучайных чисел

8gabriel8, в этом и фишка, что результат такой генерации зависит от одного единственного числа (сид), меняем это число и получаем другой результат, не меняем это число, получаем одинаковый результат. В результате получаем возможность зная сид получить результат который уже получали раньше и, соответственно, возможность тестировать что-то в одинаковых условиях, не смотря на рандомную природу генератора, а также возможность надежно воспроизвести какую-то ситуацию, если это нужно. Естественно, игрок получает случайный сид и, соответственно, случайный результат генерации, в отличии от разработчика в отладочном режиме.
24

» WarCraft 3 / Генератор псевдослучайных чисел

8gabriel8, позволь напомнить тебе постановку задачи - выдача одинакового ланда при одинаковом сиде и разного ланда при разном сиде. И это не костыль, это достаточно распространенная практика при случайной генерации, здорово помогающая при отладке.
достаточно менять RandomSeed на лету и все будет норм
Если бы была возможность получить текущий сид, еще можно было бы как-то плясать с бубном вокруг этого, но такой возможности нет, сид можно только задать. Да и заворачивать каждый вызов рандома в проверку на то какой из сидов должен использоваться, подставлять его, запоминать новый - не кажется ли вам что проще отдельный генератор потока случайных чисел написать, чем возиться с этим?
24

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

На всякий случай напомню еще, что в событии EVENT_PLAYER_UNIT_DAMAGING работают функции позволяющие изменить урон и его тип до того как он будет нанесен
BlzSetEventDamage
BlzSetEventDamageType
BlzSetEventWeaponType
BlzSetEventAttackType
24

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

Но их нет в GUI.
Как же так, гуй же может все что может жасс и даже больше... (сарказм)
Практически не пользуюсь гуем, поэтому не замечал что там нет новых событий 1.31.
24

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

видимо событие Specific unit - получает урон - не работает с переменной
Работает. Со значением переменной на момент добавления события в триггер.
Но в 1.31 есть же общее событие получения урона. Даже два - до обсчета брони и после. С возможностью изменить урон и тип урона в первом событии.
24

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

BlzGetEventAttackType( ) == ConvertAttackType( 0 )
Зачем, если есть константы?
ATTACK_TYPE_NORMAL=ConvertAttackType(0)
ATTACK_TYPE_MELEE=ConvertAttackType(1)
ATTACK_TYPE_PIERCE=ConvertAttackType(2)
ATTACK_TYPE_SIEGE=ConvertAttackType(3)
ATTACK_TYPE_MAGIC=ConvertAttackType(4)
ATTACK_TYPE_CHAOS=ConvertAttackType(5)
ATTACK_TYPE_HERO=ConvertAttackType(6)
И аналогичные для двух других нативок.
24

» WarCraft 3 / Событие - получает урон - как отловить наносящего?

GetEventDamageSource
BlzGetEventDamageType
BlzGetEventWeaponType
BlzGetEventAttackType
Последние три функции вроде только на 1.31 и выше, первая по идее была и раньше.