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) -- удалять ненужный таймер обязательно, сборщик мусора может не понять что это мусор
Ну, я же не вижу твой код - это нужно использовать в соответствующем триггере, естественно - пример приведен без всего "лишнего" кода, вроде триггеров и обработки событий - только минимум необходимый чтобы показать работу с таблицами.
Ельнур, ну, это три куска кода, первый показывает объявление луа таблицы, которая используется вместо хештаблицы. Второй блок показывает запись произвольных данных в эту таблицу по хендлу нового таймера, а третий блок показывает чтение этих данных и запись их в переменную. Какие именно данные, сколько их где они берутся не важно, поэтому я использовал несуществующие функции для упрощения.
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
свой интерпретатор по апи языка, на одну и ту же вирутальную машину
Это бред и в этом нет никакого смысла, работы в разы больше, чем взять готовую луа машину и допилить. Более того, есть вещи, которые жассовая виртуальная машина не умеет просто по своей тупой природе и почему-то они отлично работают. То что сделан минимум - факт. То что интеграция луа кривоватая - факт. Работа луа поверх жассовой виртуалки - полный бред.
quq_CCCP, что значит "не тот луа"? Ты всерьез веришь что близы сделали что-то большее, чем взяли стандартную поставку луа в виде исходного кода, отключили ряд модулей, подключили свое API и недавно вот немного со сборщиком мусора по шаманили?
Если герой с этой способностью у игрока один - завязать способность на требование определенного типа юнита, выдавать этого юнита игроку когда выполнено условие, а потом забирать если условие не выполнено. Ну и выдать этому дамми-юниту соответствующее название.
Иногда есть смысл выносить функции в локальные переменные, но только когда они используются много раз в одном месте - доступ к локалкам быстрее доступа к глобалкам.
FourCC('ORDER_defend')
FourCC работает только с 4-символьными равкодами, пытаться подсунуть ему приказ смысла нет.
Lua в отличии от жасса не умеет самостоятельно конвертировать строковые равкоды в числа - 'Hpal' для луа это не айди паладина, а ничего не значащая строка в четыре символа.
Используй FourCC('Hpal') чтобы получить число из равкода.
Ельнур, common.lua и blizzard.lua не существует в файлах игры. Но если бы они существовали, то были бы мало отличимы от существующих .j версий - API то одинаковое, с поправкой на особенности языка.
Все существующие common.lua и blizzard.lua получены путем конвертирования из common.j и blizzard.j.
Extremator, рекомендую небольшое улучшение алгоритма - не просто записывать последнюю ячейку в выпавшую, а менять их местами. Тогда можно будет массив использовать повторно, не заполняя его заново.
Fly123, Потому что, как сказано выше, текстура сама по себе не меняет форму клифа. Форма клифа задается моделью, а текстура это только то как модель покрашена - нужно либо брать карту с клифами изначально правильной формы либо менять модель клифа на нужную.
» WarCraft 3 / Hash в луа
local data = { caster = u, target = u1}
Здесь создается новая таблица, в которую записано два значения по ключам "caster" и "target", взятые из переменных u и u1. В хештаблице у тебя это были бы, скорее всего, числовые ключи хештаблицы, а в луа ключи у таблицы могут быть практически чем угодно.
А здесь у тебя таблица из переменной data записывается в таблицу DataStorage по хендлу таймера, чтобы потом забрать эту таблицу по тому же хендлу и получать из неё лежащие внутри значения.
Например, вот так
» WarCraft 3 / Hash в луа
» WarCraft 3 / Hash в луа
Ред. prog
» WarCraft 3 / Hash в луа
» WarCraft 3 / Hash в луа
Ред. prog
» WarCraft 3 / Hash в луа
» WarCraft 3 / Hash в луа
» WarCraft 3 / Hash в луа
» WarCraft 3 / конверт ордер defend в луа
Ред. prog
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / Запрет на использование способности при условии
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / ифы и булекспры в луа
Используй FourCC('Hpal') чтобы получить число из равкода.
» WarCraft 3 / boolexpr не работает в луа
Ред. prog
» WarCraft 3 / war3map.j blizzard.j но с вариантом луа есть такое??)
» WarCraft 3 / Сортировка значений переменной
» WarCraft 3 / По поводу клифов и текстур
» WarCraft 3 / По поводу клифов и текстур
» WarCraft 3 / Локальные расчеты сделать глобальными без десинхрона
» WarCraft 3 / [lua] Garbage
» WarCraft 3 / Отлов и устранение утечек на LUA
» WarCraft 3 / Отлов и устранение утечек на LUA
» WarCraft 3 / Сравнение точек в условии
» WarCraft 3 / Сравнение точек в условии