XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Danial

offline
Опыт: 1,342
Активность:
Автозаполнение массива
У меня такой вопрос:
На карте имеется 200 областей. Первые 100 нужно занести в массив (udg_reg[i], где i принимает значения от 1 до 100).
Как наиболее целесообразно это сделать?
Кстати, c помощью функции GetHandleId я выяснил, что ID этих регионов 1048587-1048687.
Если вы знаете каким образом можно по номеру региона найти этот регион, то можно сделать так:
local integer i 
local integer id = 1048587
  loop
        exitwhen i == 100
        set udg_reg[i] = //функция, которая берёт id региона и возвращает регион
        set id = id + 1
        set id = i + 1
   endloop
Старый 03.05.2012, 23:06
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Danial, ну была какая то бага типа РБ. Которая по ID возвращала хендл. Поищи в статьях, вроде было
Старый 03.05.2012, 23:48
Danial

offline
Опыт: 1,342
Активность:
Да, это вот в этой статье: xgm.ru/p/wc3/jass_return_bug
была предложена вот такая баг-функция:
function FindRegion takes integer i returns rect
    return i
    return null
endfunction
которая решила бы эту задачу. Но вся беда в том, что с 1.24 пата WC3 такие функции больше не работают (спасибо Blizzard’у за заботу).
Старый 04.05.2012, 00:06
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Danial, эт ты РБ привел, а я про багу уже в 24. Не помню где читал. А функция была связана с погодными эффектами и хеш таблицами. В общем посмотри новость или статью патч 24 для картостроителей. Вроде такое было
Старый 04.05.2012, 00:50
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Danial, щяс попрбуй через GethandleId(Твой рег) , а потом сохрани его в хеш таблице как FogState через ConvertFogState(целое число)... а затем загрузи как регион, вот он ретурн баг, только вот действий куча...
Старый 04.05.2012, 02:59
ScorpioT1000
Работаем
online
Опыт: отключен
Помни про лимит операций xgm.ru/forum/showthread.php?t=19638
Старый 04.05.2012, 03:30
Danial

offline
Опыт: 1,342
Активность:
Всё, спасибо, quq. Сделал вот так:
local hashtable h = InitHashtable()
local integer i 
local integer id = 1048587
  loop
        exitwhen i == 100
        call SaveFogStateHandle(h, 0, 0, ConvertFogState(id))
        set udg_reg[i] = LoadRectHandle(h, 0, 0)
        set id = id + 1
        set i = i + 1
   endloop
и всё получилось как я и хотел.
Старый 04.05.2012, 13:46
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Danial, ну всегда пожалуйста...
И лучше не использовать локальную хеш таблицу, она может вызывать утечки...
Старый 04.05.2012, 13:49
ScorpioT1000
Работаем
online
Опыт: отключен
А что такое 1048587 ? Ты знаешь, что такое хендл?
Старый 04.05.2012, 13:56
DioD

offline
Опыт: 45,134
Активность:
забивать в массив эти регионы целесообразно при их создании, всегонавсего надо перехватить функцию которая их создаёт, делается элементарно.
Старый 04.05.2012, 16:17
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DioD, можно и создавая регионы, у тут же их забивать в массив, но когда их уже нансоздано 200 то тут удобнее всего такая функция.
Старый 04.05.2012, 16:21
ScorpioT1000
Работаем
online
Опыт: отключен
Согласен,
integer Rect_count = 0
Rect array Rect_objects

#define Rect(AX,AY,BX,BY) = { Rect_objects[Rect_count++] = R##ect(AX,AY,BX,BY) }
Автоматом будет забивать все созданные в редакторе ректы в массив)

Отредактировано ScorpioT1000, 04.05.2012 в 17:29.
Старый 04.05.2012, 16:23
adic3x

offline
Опыт: 108,439
Активность:
#define Rect(AX,AY,BX,BY) = {
Rect_objects[Rect_count] = Rect(AX,AY,BX,BY)
Rect_count++
}
Уже тогда так, но лучше не надо, т. к. использование функции в выражении поломается.
#define Rect(AX,AY,BX,BY) = Rect_objects[Rect_count++] = R##ect(AX,AY,BX,BY)
Старый 04.05.2012, 17:26
ScorpioT1000
Работаем
online
Опыт: отключен
Пофиксил. Ну, надо как-то обеспечить undef
Старый 04.05.2012, 17:30
adic3x

offline
Опыт: 108,439
Активность:
Ну, надо как-то обеспечить undef
Это шаманство уже. И андеф - скажем так, не очень удачная идея была (ввиду того, что она работает просто при проходе по коду, тупо сверху вниз).
Вообще, у меня подозрение, что автор тупо раскидывает области в редакторе, т.е. графическим способом. И вся проблема решается извлечением из кода карты генерируемой функции и небольшой обработкой ее с помощью автозамены.
Старый 04.05.2012, 23:05
ScorpioT1000
Работаем
online
Опыт: отключен
А как же батхерт при любых изменениях?
Старый 04.05.2012, 23:14
DioD

offline
Опыт: 45,134
Активность:
проще перехватить, не важно как именно будет осуществлён перехват вызова, будь то подмена БЖ или кастомный КЖ или надстройки или патч редактора но суть в том чтобы перехватить раз и навсегда и не вспоминать об этом.
Старый 08.05.2012, 10:08
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:35.