24

» WarCraft 3 / Hash в луа

Ельнур, ну вот, на примере твоего кода
DataStorage у тебя это глобальная переменная и если ты с тем-же именем объявишь переменную в другом триггере и запишешь туда {}, т.е. новую пустую таблицу, то это затрет значения записанные в первом триггере, старые значения записанные туда раньше потеряются. И наоборот, если такая переменная будет у каждого триггера своя, то и значения внутри будут независимые между триггерами. Ну и самый полезный вариант - использовать одну переменную на несколько триггеров, но записывать туда пустую таблицу только один раз в одном единственном месте - тогда данные из этой таблицы будут доступны в нескольких триггерах.
Далее
local data = { caster = u, target = u1}
Здесь создается новая таблица, в которую записано два значения по ключам "caster" и "target", взятые из переменных u и u1. В хештаблице у тебя это были бы, скорее всего, числовые ключи хештаблицы, а в луа ключи у таблицы могут быть практически чем угодно.
DataStorage[GetHandleId(t1)] = data
А здесь у тебя таблица из переменной data записывается в таблицу DataStorage по хендлу таймера, чтобы потом забрать эту таблицу по тому же хендлу и получать из неё лежащие внутри значения.

а как ее чистить я думаю глобалки не обнуляются сборщиком мусора
Записывать nil по ключу который хочешь обнулить.
Например, вот так
local t = GetExpiredTimer()
DataStorage[GetHandleId(t)] = nil
DestroyTimer(t) -- удалять ненужный таймер обязательно, сборщик мусора может не понять что это мусор
24

» WarCraft 3 / Hash в луа

Steal nerves, в луа тип есть только у значений, но не у переменных, в отличии от жасса. Т.е. в переменную в луа можно записать значение любого типа.
24

» WarCraft 3 / Hash в луа

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

» WarCraft 3 / Hash в луа


local data = { caster = u1, target = u2, num = i}
это то же самое что сделать вот так
local data = {}
data.caster = u1
data.target = u2
data.num = i
или вот так
local data = {}
data["caster"] = u1
data["target"] = u2
data["num"] = i
24

» WarCraft 3 / Hash в луа

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

» WarCraft 3 / Hash в луа

DataStorage = {} -- глобальная переменная с lua таблицей вместо хештаблицы

------

local t = CreateTimer()
local u1 = GetCaster() -- нет такой функции, тут должно быть получение кастера
local u2 = GetTarget() -- такой функции тоже нет, тут должно быть получение цели
local i = 42
local data = { caster = u1, target = u2, num = i}
DataStorage[GetHandleId(t)] = data

----

local t = GetExpiredTimer()  -- не помню есть ли такая функция, тут должно быть получение таймера созданого в предыдущем блоке
local data = DataStorage[GetHandleId(t)]
local u3 = data.caster -- здесь окажется юнит из u1
local u4 = data.target -- здесь окажется юнит из u2
local x = data.num -- здесь окажется число из i
Кому нужен хеш, когда можно сделать так?
24

» WarCraft 3 / Hash в луа

Ельнур, а зачем тебе кложур для тех целей, для которых используются хештаблицы?
24

» WarCraft 3 / конверт ордер defend в луа

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

» WarCraft 3 / конверт ордер defend в луа

quq_CCCP, что значит "не тот луа"? Ты всерьез веришь что близы сделали что-то большее, чем взяли стандартную поставку луа в виде исходного кода, отключили ряд модулей, подключили свое API и недавно вот немного со сборщиком мусора по шаманили?
24

» WarCraft 3 / конверт ордер defend в луа

quq_CCCP, для луа - это не бред, а факт. Для жасса - да, нет разницы. Вопрос по Lua, а не по жассу.
24

» WarCraft 3 / Запрет на использование способности при условии

Если герой с этой способностью у игрока один - завязать способность на требование определенного типа юнита, выдавать этого юнита игроку когда выполнено условие, а потом забирать если условие не выполнено. Ну и выдать этому дамми-юниту соответствующее название.
24

» WarCraft 3 / конверт ордер defend в луа

а ссылки на функции тем более.
Иногда есть смысл выносить функции в локальные переменные, но только когда они используются много раз в одном месте - доступ к локалкам быстрее доступа к глобалкам.

FourCC('ORDER_defend')
FourCC работает только с 4-символьными равкодами, пытаться подсунуть ему приказ смысла нет.
24

» WarCraft 3 / ифы и булекспры в луа

Lua в отличии от жасса не умеет самостоятельно конвертировать строковые равкоды в числа - 'Hpal' для луа это не айди паладина, а ничего не значащая строка в четыре символа.
Используй FourCC('Hpal') чтобы получить число из равкода.
24

» WarCraft 3 / war3map.j blizzard.j но с вариантом луа есть такое??)

Ельнур, common.lua и blizzard.lua не существует в файлах игры. Но если бы они существовали, то были бы мало отличимы от существующих .j версий - API то одинаковое, с поправкой на особенности языка.
Все существующие common.lua и blizzard.lua получены путем конвертирования из common.j и blizzard.j.
24

» WarCraft 3 / Сортировка значений переменной

Extremator, рекомендую небольшое улучшение алгоритма - не просто записывать последнюю ячейку в выпавшую, а менять их местами. Тогда можно будет массив использовать повторно, не заполняя его заново.
24

» WarCraft 3 / По поводу клифов и текстур

Fly123, Потому что, как сказано выше, текстура сама по себе не меняет форму клифа. Форма клифа задается моделью, а текстура это только то как модель покрашена - нужно либо брать карту с клифами изначально правильной формы либо менять модель клифа на нужную.
24

» WarCraft 3 / По поводу клифов и текстур

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

» WarCraft 3 / [lua] Garbage

В связи с недавними изменениями, которые близы предприняли в попытке борьбы с десинками, эта наработка не факт что еще работает.
24

» WarCraft 3 / Отлов и устранение утечек на LUA

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

» WarCraft 3 / Отлов и устранение утечек на LUA

Луа - другой язык и другая виртуальная машина, естественно там и управление памятью немного иначе реализовано.