Увидел в одной статье переменные где задавались
-Тип юнита
-Юнит
Это обе боевая единица?

Нет.
Есть юнит (unit) = боевая единица, это любые воины, маги, герои и здания (в том числе магазины, рудники, источники).
А есть тип юнита (unittype) = тип объекта, это по сути число в ASCII системе исчисления ('ugho','A000','chob'). Ты вместо них обычно выбираешь конкретного юнита из списка всех юнитов. Например когда ты триггерно создаёшь 1 пехотинца, то ты выбираешь как раз из этого списка. Посмотреть ASCII-коды объектов можно в РО нажав Ctrl+D (так же и отключается).

Одно это конкретный объект в на игровой карте, в данный момент. Стоит 5 футманов, и кот конкретный из них.
А второе это что конкретно из имеющихся вариантов... пехотинец, стрелок, рыцарь, целитель... и т.п.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
ответ
~8gabriel8:
У меня просто пример работы функции, будет по слову лотерея в подстроке определять длину этой строки, отделять функцией число и переводить его в целочисленное.
В большом паке наработок есть Substring - titul to player.w3x, но может и что-то ещё, потому что это тоже не совсем то, что автору нужно.
ответ
Ответ выше - для стандартного редактора WE. Однако, рекомендуется использовать с Lua внешний редактор кода и внешний же сборщик карты. Это чревато маленьким неудобством в виде необходимости запускать карту на проверку только из внешней программы т.к. запуск из WE будет без значительной части кода в карте, но дает огромное преимущество в виде несравнимо более удобной работы с кодом.
К сожалению, пока слишком мало информации об этом на сайте.
Вариант NazarPunk, пока без сборки карты, код придется копировать в карту вручную.

Мой вариант, пока не рабочий т.к. перед релизом нужно исправить несколько багов, но включает в себя и работу с кодом и сборку карты, не нужно вручную копировать код в карту.
Даже здесь на сайте есть еще пара вариантов, но мне лень их искать
И немного саморекламы, как выглядели бы ответы на вопрос выше при использовании моего тулсета
  1. Использовать макрос RAW('A0E5'), который превратит равкод в число при сборке карты.
  2. Инжект в функцию main, с заменой оригинальной функции main на свою и вызовом оригинальной функции изнутри нашей.
  3. Аналогично ответу на этот вопрос для чистого WE, но без объявления переменных в WE т.к. то уже не так удобно становится когда код во внешнем редакторе.

Теперь о точках входа и инжекте.
Луа позволяет делать такой финт ушами
do
  local f = FunctionName -- записываем функцию в переменную
  function FunctionName() -- заменяем оригинальную функцию своей
   f() -- вызываем оригинальную функцию из переменной
   -- здесь могла быть ваша реклама или ваш код
  end
end
Это позволит нам сохранить оригинальную функцию в переменную, заменить оригинал своей функцией и вызвать оригинал из переменной. Применимо к любой функции, которая была объявлена раньше, не работает если функция объявлена после выполнения этого кода. Для создания точки входа отлично подходит InitGlobals, она всегда объявляется раньше кастомного кода в WE и вызывается из main.

У себя в коде я пользуюсь немного более сложным способом, этот код не будет работать в WE т.к. цепляет main, а не InitGlobals и не дает серьеных преимуществ перед описаным выше, привожу просто для расширения кругозора
local function InjectMain()
    local alpha_main = main
    return function()
        local alpha_init = RunInitializationTriggers
        RunInitializationTriggers = function() end
        alpha_main()
        InitLibraries() --моя функция, которая должна быть выполнена после всего, но до триггеров инициализации карты
        alpha_init()
    end
end
main = InjectMain()
ответ
Можно, зачем они тебе на карте вообще

26
Нет.
Есть юнит (unit) = боевая единица, это любые воины, маги, герои и здания (в том числе магазины, рудники, источники).
А есть тип юнита (unittype) = тип объекта, это по сути число в ASCII системе исчисления ('ugho','A000','chob'). Ты вместо них обычно выбираешь конкретного юнита из списка всех юнитов. Например когда ты триггерно создаёшь 1 пехотинца, то ты выбираешь как раз из этого списка. Посмотреть ASCII-коды объектов можно в РО нажав Ctrl+D (так же и отключается).

Одно это конкретный объект в на игровой карте, в данный момент. Стоит 5 футманов, и кот конкретный из них.
А второе это что конкретно из имеющихся вариантов... пехотинец, стрелок, рыцарь, целитель... и т.п.
Принятый ответ
27
тип юнита - число (равкод). или точнее номер в бд. В редакторе триггеров в гуи-меню у вас сразу высвечиваются иконки типов.
  • Если нужно создать пехотинца, указываем тип пехотинца (номер пример 'hfoo')
  • Если нужно заставить раба строить, указываем тип здания (пример ферма 'hhou')
  • Если нужно обучить в казармах стрелка, указываем тип стрелка ('hrif')
и др
юнит - это просто ссылка на боевую единицу. В триггерах в сравнении юнитов можно сравнивать юнитов, это помогает отсеивать одинаковых или одни и тех юнитов. есть ряд функции для работы с юнит. юнит в варкрафте это все.
28
тип юнита (unittype) = тип объекта, это по сути число в ASCII системе исчисления
Смею сделать поправку. Есть юнит, тип юнита, ID типа юнита и классификация юнита. Юнит - это объект типа unit, свойства которого описывает тип юнита. Тип юнита - это описание в редакторе объектов во вкладке Units. Каждый тип имеет свой ID - число (integer) в ASCII системе счисления. Получить ID типа у конкретного юнита, можно функцией GetUnitTypeId. В редакторе объектов его можно узнать нажав Ctrl+D. Классификация юнита - это константа типа unittype. Узнать, имеет ли юнит какую-то классификацию, можно с помощью IsUnitType, передав юнита и классификацию. Также классификации можно удалять и добавлять, но это работает лишь на некоторые из них.
2
Нет.
Есть юнит (unit) = боевая единица, это любые воины, маги, герои и здания (в том числе магазины, рудники, источники).
А есть тип юнита (unittype) = тип объекта, это по сути число в ASCII системе исчисления ('ugho','A000','chob'). Ты вместо них обычно выбираешь конкретного юнита из списка всех юнитов. Например когда ты триггерно создаёшь 1 пехотинца, то ты выбираешь как раз из этого списка. Посмотреть ASCII-коды объектов можно в РО нажав Ctrl+D (так же и отключается).

Одно это конкретный объект в на игровой карте, в данный момент. Стоит 5 футманов, и кот конкретный из них.
А второе это что конкретно из имеющихся вариантов... пехотинец, стрелок, рыцарь, целитель... и т.п.
Спасибо, можно ещё вопрос а как поставить индекс к переменной, в наработках видел что к переменным ставится в [], как это сделать?
27
KKrey, в гуи массив включить. это в начальных статьях объясняется. смотри где урок про переменные. там со скринами
в гуи 1.26 ограничения индекса массива от -8192 до 8192. тип туда не вставить, тк 4-значный равкод имеет большие цифры. там приходиться бд по другому строить: мы забиваем бд равкодов. потом нужно сравнить какой тип, пробегаем по бд равкодов циклом, вытаскиваем. неудобно как-то
8
в гуи 1.26 ограничения индекса массива от -8192 до 8192. тип туда не вставить, тк 4-значный равкод имеет большие цифры. там приходиться бд по другому строить: мы забиваем бд равкодов. потом нужно сравнить какой тип, пробегаем по бд равкодов циклом, вытаскиваем. неудобно как-то
Для этого есть хэш-таблицы. Собственно, в памяти ишры данные о юнитах хранятся в них же. Таюлицы луа, кстати, также являются, во многом, именно ими.
А ограничения размера массива - логичны и понятны. Массивы нужны для другого. А чтобы сохранить с массиве значения, по индексам, соответствующим всем потенциальным равкодам понадобится около 16 гб памяти, только в виде указателей. В джасовских массивах это еще больше.
И ограничения нужны именно для того, чтобы никто не пытался таким образом индексировать большими числами и не валил игру.
38

мы забиваем бд равкодов. потом нужно сравнить какой тип, пробегаем по бд равкодов циклом, вытаскиваем. неудобно как-то
всегда можно вычитать из равкода 'A000' ну или с чего начинается отсчет, это же integer xgm.guru/p/wc3/w3datatypes
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.