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

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

Ответ
 
prog

offline
Опыт: 32,865
Активность:
запилил проход циклом шаблона по списку всех юнитов/способностей/предметов (позже допилю все остальные типы)
пример, выводящий равкоды всех измененных юнитов и их скорость, если она была изменена.
((код
<list units as x>
${x} ${x.umvs}
</list>
))
Вместо x можно выбрать любое имя - по сути это локальная переменная, видимая только внутри директивы перечисления. Через x можно обращаться ко всем полям, доступным и через конструкцию ${равкод объекта.равкод поля}.
На данный момент доступно всего три коллекции объектов - units, items, ability, позже будут доступны buffs, destructables, doodads, upgrades
Сейчас думаю над двумя схожими фичами - ограничением считывания данных в память и ограничением вывода данных в шаблоне.
Предположительно это будет выглядеть так:
  • объекты которые подлежат считыванию в память отмечаются добавлением save к полю "суффикс редактора" и становятся доступны для подстановки в шаблоны.
  • вводятся кастомные категории объектов, которые задаются по тому-же принципу - имя категории
  • в шаблон добавляется возможность проверить относится ли объект к той или иной категории
prog добавил:
Есть желающие потестить сырую версию? (в приват)
Старый 26.02.2012, 19:07
ScorpioT1000
Работаем
offline
Опыт: отключен
Кароче перемещаю в барахолку =) т.к. продукт уже пишется, и есть что потестить
Старый 26.02.2012, 20:49
prog

offline
Опыт: 32,865
Активность:
Тогда надо бы первый пост подправить, наверно. Этим и займусь.
Стоит ли выкладывать тут бету?
Старый 26.02.2012, 20:56
ScorpioT1000
Работаем
offline
Опыт: отключен
Слушай, оно работает даже, щщикарно!)
только я не смог сделать h001.Name
Старый 26.02.2012, 21:07
prog

offline
Опыт: 32,865
Активность:
Шаблон потеряется если переоткрыть карту - это пока в разработке. Поэтому тестировать я предпочитаю в коде.
нет поля Name - его равкод anam. кроме того есть небольшая проблема - ссылаться на текстовые поля из других текстовых полей пока не стоит - они сохраняются в TRIGSTR, а значит подставлена будет надпись TRIGSTR_xxx - это еще надо допилить.
Старый 26.02.2012, 21:14
ScorpioT1000
Работаем
offline
Опыт: отключен
Даешь пример вобщем
че за равкод anam? неинтуитивно, даешь нормальные названия)
Старый 26.02.2012, 21:16
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, эти равкоды можно посмотреть в JNGP для каждого поля. Для часто используемых полей я планировал ввести синонимы, но можно и для всех сделать, только это нужно доставать slk-таблицы и названия полей из архива игры.
Пример запилю как только доведу до ума первое сообщение в теме.
Старый 26.02.2012, 21:26
prog

offline
Опыт: 32,865
Активность:
Добавил файл alias.txt, в котором можно указать синонимы для равкодов полей. Пригодится тем, кто не любит работать непосредственно с равкодами полей.
Старый 27.02.2012, 20:14
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, ты бы сделал самые нужные алиасы, или лучше вобще всех полей, это же не проблема для препроцессинга на современных компах?
Старый 27.02.2012, 20:54
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, со временем сделаю, но не зашивать же их прямо в код)
На самом деле эти алиасы это жуткое надувательство - они ложатся в Map<String,String> и при обращению к полю на одном из этапов проводится поиск соответствия в этом мапе, если есть - оттуда достается равкод и используется дальше вместо алиаса. Побочный эффект - алиас не может быть использован если надо напрямую обратиться к полю определенного уровня способности, более того, все уровневые (те что могут иметь более одного уровня) поля вообще недоступны через алиасы на данный момент, даже если у способности только один уровень. Частично это решается добавлением возможности пройти циклом по всем уровням способности, частично - введением возможности обратиться напрямую к уровню с помощью конструкции ${A000.getLevel(1).равкод поля} вместо текущей ${A000.РавкодУровень}, в которой невозможно использовать алиасы. Ну и сделать видимыми поля первого уровня в области видимости нулевого уровня.
Старый 27.02.2012, 21:28
prog

offline
Опыт: 32,865
Активность:
Уровневые поля первого уровня теперь доступны и как поля нулевого уровня (при обращении к полю без указания уровня, например) - теперь они доступны и через алиасы (синонимы). Также теперь возможен проход циклом по всем уровням кроме нулевого:
<list A000.levels as level>
${level} выдаст номер уровня ${level.поле} выдаст значение поля на этом уровне
</list>
В ближайшее время добавлю конструкцию ${A000.getLevel(1).равкод поля}. Также возможно введение конструкции ${A000.x.равкод поля} где x - целое число.
Старый 28.02.2012, 17:34
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, отлично
но я бы не писал getLevel... както длинно, мб A000.L1.Name ? (ну если сделаешь алиасы, а я всеми руками голосую за это, т.к. интуитивнее)
ScorpioT1000 добавил:
${A000.x.равкод поля} где x - целое число.
это левел? тогда еще лучше =)
Старый 28.02.2012, 17:42
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, алиасы я буду заполнять по мере наличия свободного времени
да, x это левел, но и конструкция с getLevel, на мой взгляд, должна иметь право на жизнь. Ну или мне придется извратиться чтобы переменные верхнего уровня были доступны и тут.
например для конструкции вида
((код
<list ability as a>
<list 4..6 as i>
${a.i.поле}
</list>
</list>
))
с getLevel проблем нет - это функция и компилятор шаблонов понимает что в качестве параметра могут быть переданы переменные, а вот с такой конструкцией могут возникнуть проблемы.
Старый 28.02.2012, 18:27
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, так конечно оставь её тоже, какраз для таких вещей.
Старый 28.02.2012, 18:34
prog

offline
Опыт: 32,865
Активность:
нашел еще одно решение, на котором скорее всего и остановлюсь - это конструкция вида
${A000[level].Name}
т.е. обращение к способности, как к массиву
Старый 28.02.2012, 19:44
ScorpioT1000
Работаем
offline
Опыт: отключен
prog, а что делать с общими полями в таком случае? если обратиться без кв скобок, это будет работать?
Старый 28.02.2012, 20:00
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, да поля нулевого уровня никуда не делись и доступ к ним осуществляется как прежде. Более того поля первого уровня теперь также считаются общими, для удобства работы с одноуровневыми способностями.
Старый 28.02.2012, 20:21
prog

offline
Опыт: 32,865
Активность:
Появилась у меня безумная идея - ввести категории объектов.
Принцип простой - пишем в поле с описанием для редактора после #save категории в виде [категория1][категория2] и так далее. Потом эти категории можно использовать в условиях
((код
<if A000.категория>
содержимое этого блока будет выведено только если способность A000 относится к категории "категория"
</if>
))
А может и в качестве коллекций для перечисления.
((код
<list категория as data>
${data} выведет равкоды всех объектов в категории
</list>
))
Также алиасы были переделаны и теперь могут быть использованы как для добавления удобочитаемых имен к равкодам, так и для объединения нескольких равкодов под одним именем.

Отредактировано prog, 29.02.2012 в 01:01.
Старый 29.02.2012, 00:35
ScorpioT1000
Работаем
offline
Опыт: отключен
я бы предложил сделать так, чтобы категорией был не какойто код, а дамми-объект, как я описывал выше итем-сет и итемы для него
Старый 29.02.2012, 01:10
prog

offline
Опыт: 32,865
Активность:
ScorpioT1000, зачем плодить даммики, если можно вписать строку в описание?
UPD:
Добавил в структуру данных понятие категорий. Теперь тип объекта является категорией. Также теперь для всех типов объектов доступно перечисление в цикле - каждой категории соответствует коллекция объектов. Более того, категории задаются динамически - осталось реализовать только механизм присвоения объекту категорий на основании данных из РО - на данный момент категории присваиваются только на основании того, из какого файла был получен объект.
Автоматически присваиваемые категории:
-units
-items
-abilities
-buffs
-upgrades
-destructables
-decorations
Каждую из этих категорий можно использовать в качестве коллекции для директивы <list> (старые коллекции объектов, не основанные на категориях, были удалены)
Сейчас думаю над способом проверки из шаблона принадлежности объекта к категории.
Временное решение:
((код
<if объект.категория>
</if>
))
Побочный эффект такого решения - категории не должны совпадать с равкодами и синонимами полей.

Отредактировано prog, 29.02.2012 в 04:08.
Старый 29.02.2012, 01:34
Ответ

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

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

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

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



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