1 переменная perebor не обьявлена
2 e и h нет смысла объявлять так высоко, лучше спустить их объявление туда где они реально используются
3 GetOwningPlayer(e) стоит занести в переменную чтобы не дергать каждый раз
4 лучше при возможности всех подходящих под критерий юнитов заносить в группу заранее, чем искать их по всей карте
yellyex, Проставляеш галочки в Modify, потом меняеш текущий регион в этом меню и все тексты в карте переключаются под этот регион, не меняя язык редактора и можно их редактировать либо в редакторе текстов либо в редакторе данных. Я не помню будет ли редактор что-то докачивать, но даже если будет - редактор это сам делает.
Ну и потом при запуске в клиенте подтягивается та версия текстов, которая соответствует его региону.
Castiel, Рекомендую найти и по читать про основные принципы работы Lua. Например, в луа нет массивов как таковых - их роль выполняют таблицы, которые в зависимости от использования могут работать и как массивы и как ассоциативные массивы и как классы и как структуры. Соответственно, запись чего-то в "массив" по хендлу отлично работает, в отличии от джасса. Более того, в качестве ключей могут быть не только числа, но и строки и даже объекты, правда с объектами в качестве ключей надо осторожно обходиться и лучше не связываться без понимания происходящего. За это все приходится платить скоростью доступа к элементам - быстрее всего доступ когда все элементы строго нумерованы по порядку и только на числовых ключах, но даже в худшем случае это работает быстрее хештаблиц.
И давно их можно уничтожать? o_O Вот это внезапная новость для меня. Всегда был уверен что нет возможности их уничтожить и в итоге даже не искал нативки для этого...
Окей, уточнение ситуации - нативки для уничтожения фильтров и кондишнов существуют. Соответственно - действительно, если очень хочется, то можно и фильтры с кложурами делать, а потом уничтожать их, теоретически течь не должно. Сперва объявляются все локалки которые должен видеть кложур, потом в локалку пишется фильтр, потом локалка с фильтром передается в Enum и потом фильтр удаляется. Правда через глобалки всеравно эффективнее должно быть т.к. создание дополнительных объектов и удаление их дороже обходится чем доступ к глобалкам.
Castiel, выбор стоит или глобалки или утечки. Если грамотно все сделать - проблем с передачей данных через глобалки не будет, пример выше в комментариях... И, кстати, варовские хештаблицы не нужны в Lua.
NazarPunk, отказываться есть смысл тольо от использования анонимных функций в фильтрах - один раз записать фильтр в переменную и использовать никто не мешает.
DracoL1ch, при использовании в луа с анонимными функциями - очень даже текут потому как не удаляются, насколько я знаю, а анонимная функция при каждом вызове новая создается и передается в создание фильтра.
поидее должен прийти сборщик мусора и всё подчистить
Сборщик мусора Lua не подчищает нативные обьекты, к которым относятся и фильтры.
К сожалению, на данный момент на нативное кеширование фильтров и кондишнов при использовании луа полагаться нельзя, оно то ли не работает полностью то ли работает только в очень ограниченном наборе ситуаций, что и не удивительно, учитывая динамическую природу Lua. Нужно либо самостоятельно выполнять кеширование либо максимально обходиться без фильтров.
Решение которым пользуюсь я когда мне нужно передавать какие-то данные в фильтр из вызывающей функции выглядит примерно так:
local FilterData ={} -- локальная для кода карты глобалка для передачи данных в фильтры
local function FilterThemAll() --функция фильтра, использующая данные из глобалки
local data = FilterData
local p = data.player
local target = data.target
return false
end
local SomeFilter = Filter(FilterThemAll) -- создание фильтра для функции FilterThemAll - "ручное кеширование"
function GroupEnumUnitsInRangeCustom (g,r,x,y,f,data) -- функция инкапсулирующая передачу данных чрез глобалку и вызов GroupEnumUnitsInRange с фильтром
local dataBack = FilterData
FilterData = data
GroupEnumUnitsInRange(g,r,x,y,f)
FilterData = dataBack
end
Код примерный и писался сейчас из головы по памяти - для использования в реальных условиях могут быть нужны доработки и исправления ошибок.
разве не логично увеличивать количество продавцов?
Совсем не логично, если продажи пиковые только в определенное время, а остальное время дополнительные продавцы будут простаивать - продавцы это не облачный сервер, на несколько часов в день их не наймеш. Это окупается только если дополнительные продажи за счет добавления продавца окупят затраты на него и еще и прибыль останется.
Что хештаблицы, что вжасс структуры - уродливые костыли на фоне Луа. А так - я тоже не вижу большой проблемы с хештаблицами, ну кривые, ну бывает медленные, но работают и при правильном использовании это далеко не самая большая проблема.
Castiel, окей. И что мешает это сделать? Для этого нужна одна переменная (можно две - одну для ключа и одну для значения), один цикл, один if внутри цикла и пара присвоений переменной. Для нумерованного массива цикл по индексу, для ассоциативного - по ключам через pairs.
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
Castiel, смотря чего добиться в итоге надо - все можно, от конкретной задачи зависит, а я не экстрасенс чтобы угадать. Но поиск максимального значения в массиве обычно и так использует переменную объявленную до цикла чтобы хранить это значение, или индекс этого значения или ключ или несколько переменных.
А еще - не забывай удаление таймера. Луа не требует обнуления переменных, но удалять нативные объекты всеравно надо. Одноразовый таймер же вроде не удаляет себя сам, если я правильно помню.
Castiel, перебор ассоциативного массива через pairs выглядит так
for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
Bergi_Bear, я о времени между отдачей приказа даммику и срабатыванием нашей пустышки в предмете. Даже правильно настроенный даммик потратит какое-то время на каст.
Bergi_Bear, боюсь, еще может подвести не мгновенность дамми-каста - что-то может вклиниться между добавлением способности и срабатыванием реакции на дамми-каст. Возможно в реальных условиях надо будет выдавать эту способность отслеживая каст даммика, а не до каста.
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
» WarCraft 3 / Проверьте код луа, не хочу привыкать к неправильному
2 e и h нет смысла объявлять так высоко, лучше спустить их объявление туда где они реально используются
3 GetOwningPlayer(e) стоит занести в переменную чтобы не дергать каждый раз
4 лучше при возможности всех подходящих под критерий юнитов заносить в группу заранее, чем искать их по всей карте
» StarCraft 2 / Несколько языков в карте
Ред. prog
» StarCraft 2 / Несколько языков в карте
Ну и потом при запуске в клиенте подтягивается та версия текстов, которая соответствует его региону.
» StarCraft 2 / Несколько языков в карте
» StarCraft 2 / Несколько языков в карте
» StarCraft 2 / Несколько языков в карте
Ред. prog
» WarCraft 3 / wc3 1.31 и lua
» StarCraft 2 / Несколько языков в карте
» WarCraft 3 / wc3 1.31 и lua
Ред. prog
» WarCraft 3 / wc3 1.31 и lua
Ред. prog
» WarCraft 3 / wc3 1.31 и lua
» Шатер GenElCon'a / Рыночная экономика, которой нет
» WarCraft 3 / Фильтры
» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице
» WarCraft 3 / Проблема с переменной типа group
» WarCraft 3 / Сортировка на Lua
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
» WarCraft 3 / Сортировка на Lua
» WarCraft 3 / Перезарядка пассивных предметов
Ред. prog
» WarCraft 3 / Сортировка на Lua
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
» WarCraft 3 / Сортировка на Lua
» WarCraft 3 / Перезарядка пассивных предметов
» WarCraft 3 / Сортировка на Lua
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
» WarCraft 3 / Перезарядка пассивных предметов
» WarCraft 3 / Перезарядка пассивных предметов
» WarCraft 3 / Сортировка на Lua
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.