В бараках нанимаются оба юнита, но изначально паровой танк заблокирован. Во время загрузочного экрана запускается специальная функция main (есть в каждой карте), что в свою очередь запускает ряд функций из blizzard.j. Одна из них блокирует (ставит лимит на 0) берсеркера, паровой танк и ставит лимит в 25 на скелетов для всех игроков. Вызов данной функции можно убрать через редактирование функции main.
Если делаешь свою похожую систему, тебе нужно во время инициализации для всех игроков заблокировать паровой танк, то есть поставить лимит на 0.
Поэтому, например, не имеет смысла что-то чудить с пробелами перед синтакс чеком т.к. синтакс чек из WE просто не будет вызываться в 99% случаев.
Я про syntax check в самом VSCode. Я сказал "ПЕРЕД" для того, чтобы в алгоритме по удалению пробелов можно было засечь ошибку, да и всяко лучше запускать чекер после всех препроцессорных махинаций.
Что касается синтаксиса макросов - я не случайно пошел путем аннотаций к переменным вместо кода в комментах - в моем варианте с этим более-менее прилично работает обычный синтакс-чекер для Lua и мне не нужно писать кастомный.
Ещё бы я хотел, чтобы выражения в константах считались препроцессором.
На самом деле было бы хорошо делать вычисления для всех выражений без переменных, как это делает python.
Аналогично с макросом RAW - он принимает только значения в одинарных кавычках и имена констант чтобы проходить стандартный синтакс-чек. Более того, используется еще и объявление глобальной переменной RAW=FourCC, чтобы если что-то пошло не так с макросом, был шанс на срабатывание стандартного конвертера, ну и строгий синтакс-чек без этого не пройти.
--#INLINE для маркировки функций подлежащих инлайну в пределах текущего файла
--#INLINE GLOBAL для маркировки функций и переменных подлежащих инлайну во всех файлах
--#IF для начала блока условной компиляции, предварительно без серьезных вычислений, только на основе сравнения констант
--#ELSE для начала блока else при условной компиляции
--#END для завершения блоков у любых блочных макросов
Что-то похожее я и хотел иметь, но с другим синтаксисом.
<name> - идентификатор.
<expression> - значение или выражение.
регулярное выражение
описание
примеры
*-- *const +<name> *= *<expression>
Заменяет все вхождения <name> на <expression> во всех файлах. <expression> может являться <name> другой const. Другая константа может быть определена ниже, главное, чтобы не было рекурсий.
-- const INVUL = raw(Ainv)
-- const UserPlayers = 10
-- const AIPlayers = 2
-- const AllPlayers = UserPlayers + AIPlayers
*-- *localconst +<name> *= *<expression>
Заменяет все вхождения <name> на <expression> в файле, где определена localconst. <expression> может являться <name> другой const или localconst. Другая константа может быть определена ниже, главное, чтобы не было рекурсий.
-- localconst invul_here = INVUL
*-- *bool +<name> *= *<expression>
*-- *localbool +<name> *= *<expression>
Тоже самое, что и const, но значения могут быть только true, false, другая bool или даже выражение из операнд bool и localbool и операторов or, and и not. <expression> для bool не может содержать операнды типа localbool.
-- bool debug = true
-- localbool debug_here = debug
-- localbool no_debug_here = not debug_here
*-- *#if +<expression>( +then)?
*-- *#elseif +<expression>( +then)?
*-- *#else
*-- *#endif
Условная компиляция. <expression> состоит из операнд bool и localbool и операторов or, and и not. #endif можно заменить на #fi или #end.
Для укорочения можно изменить вид операнд и операторов.
false -> 0
true -> 1
and -> *
or -> +
not -> -
*<bool or localbool var> +<some lua expression>
Условная компиляция в линию. Для этого я и ввёл отдельно тип bool.
debug print(GetUnitName(u))
(RAW|raw)\( *('<rawcode>'|"<rawcode>"|<rawcode>) *\)
конвертирует равкод в число. Может принимать как в кавычках, так и без. С кавычками следует быть аккуратнее, так как сами кавычки могут быть частью равкода.
Так же я бы хотел опцию по удалению лишних пробелов для уменьшения веса кода ПЕРЕД вызовом syntax check.
Ещё бы я хотел, чтобы выражения в константах считались препроцессором.
Не совсем, у совы Colision Size равен 16. Лично я даммикам вообще pathing отключаю.
Ещё стоит Art - Projectile Launch - Z (launchZ) поставить на 0 и Art - Propulsion Window (propWin) на 180. Я ещё Max Pitch и Max Roll зануляю, реген отключаю, дабы таймер регена юнита потенциально не тикал.
Ману у дамми можно занулить, а требования способности менять в коде. Опыт не нужно трогать, юнит же неуязвим.
Вместо .mdl можно поставить просто _.
Укажи поля CastPoint, Fly Height, Movement Type, Collision Size. Они тоже важны.
» WarCraft 3 / Самоходная мортира и паровой танк
Ред. PT153
» WarCraft 3 / Самоходная мортира и паровой танк
Если делаешь свою похожую систему, тебе нужно во время инициализации для всех игроков заблокировать паровой танк, то есть поставить лимит на 0.
» Администрация XGM / История XGM
Ред. PT153
» WarCraft 3 / Продолжение разработки карты
8gabriel8:
» WarCraft 3 / Как правильно спавнить мобом, чтобы они не застревали?
» WarCraft 3 / Продолжение разработки карты
Ред. PT153
» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua
PT153:
Ред. PT153
» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua
» Администрация XGM / Перенос слов
» Администрация XGM / Перенос слов
Ред. PT153
» WarCraft 3 / [lua] Дамми каст
Ещё стоит Art - Projectile Launch - Z (launchZ) поставить на 0 и Art - Propulsion Window (propWin) на 180.
Я ещё Max Pitch и Max Roll зануляю, реген отключаю, дабы таймер регена юнита потенциально не тикал.
Ред. PT153
» WarCraft 3 / [lua] Дамми каст
Ред. PT153
» WarCraft 3 / Условие при котором определённый предмет активирует действие
» WarCraft 3 / [lua] Дамми каст
» WarCraft 3 / [lua] Дамми каст
Ред. PT153
» WarCraft 3 / Иконки атаки и движения
Вот карта, нет тех иконок, что я скрыл. Смотреть импорт.
» WarCraft 3 / [lua] Дамми каст
Вместо .mdl можно поставить просто _.
Укажи поля CastPoint, Fly Height, Movement Type, Collision Size. Они тоже важны.
» WarCraft 3 / Продолжение разработки карты
В War2 бонус к добыче есть только при лесопилке. Редактор Ландшафта -> Дополнительно -> Игровой интерфейс.
Ред. PT153
» WarCraft 3 / Иконки атаки и движения
» Мир безумного / TcX на Dota 2
Ред. PT153
» WarCraft 3 / Сложная система найма рабочих
Ред. PT153
» WarCraft 3 / Награда за убийство нейтрально-враждебного
Это действие можно найти в кастомках от близзард, как правило, во время инициализации.