IPB

Здравствуйте Гость ( Вход | Регистрация )

Reply to this topicStart new topicStart Poll

Каскадный · [ Стандартный ] · Линейный

> Распаковка базы Database(lmp).res, Форматы *.?db

Demoth
post Среда, 07 Марта 2012, 17:23
Отправлено #21


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



О, вот это уже тема! Кстати, ты потом добавишь acks и quests из сингла?
Я сейчас возьмусь за заполнение колонок.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Guest
post Среда, 07 Марта 2012, 17:50
Отправлено #22


Unregistered









QUOTE(Demoth @ Среда, 07 Марта 2012, 17:23)
О, вот это уже тема! Кстати, ты потом добавишь acks и quests из сингла?
Я сейчас возьмусь за заполнение колонок.
*
Да, как будет время, думаю добавить их для полноты картины. smile.gif
Go to the top of the page
+Quote Post
Demoth
post Четверг, 08 Марта 2012, 15:04
Отправлено #23


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



Обновленные файлы:[attachmentid=794]Заполнил типы для Units а также имена для Hit Locations и Race Models,
взятые из EIedit.
Еще добавил Acks и Quests, правда надо в фильтр открытия файлов добавить *.qdb.
В ближайшее время допишу оставшиеся имена в Units и Items.
Надеюсь ты в скором времени допилишь поддержку пользовательских структур.

P.S. Может стоит сделать импорт/экспорт txt?

Сообщение отредактировал Demoth - Четверг, 08 Марта 2012, 18:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Пятница, 09 Марта 2012, 03:39
Отправлено #24


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Пофиксил поддержку вложенных структур.
Немного более адекватно обозвал некоторые типы полей.
Поправил некоторые некорректные типы полей.
Убрал необходимость писать дополнительные блоки (XBlockID) в dbblocks.txt.
Сделал поддержку кодировок (в файле settings.ini).
Добавил в фильтры маску *.qdb.

Как будет время, попробую сделать импорт/экспорт в файлы экзеля. За традиционные текстовики возьмусь после этого, так как в текстовиках зарыта ещё куча нюансов по преобразованию данных в разные удобные виды. В случае работы с экзелем напрямую, все нюансы можно будет переложить собственно на экзель. По крайней мере мне пока что так кажется. smile.gif Как там будет в реальности - увидим. smile.gif

Сообщение отредактировал ELF - Пятница, 09 Марта 2012, 12:06
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Demoth
post Суббота, 10 Марта 2012, 10:08
Отправлено #25


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



Кстати, может стоит ширину колонки определять по длине ее названия, либо по максимальной ширине данных внутри нее (тут правда будет фэил с перечислением строк - уж очень длинные могут быть, этот вариант можно применять к числовым данным).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Суббота, 10 Марта 2012, 21:10
Отправлено #26


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



QUOTE(Demoth @ Суббота, 10 Марта 2012, 10:08)
Кстати, может стоит ширину колонки определять по длине ее названия, либо по максимальной ширине данных внутри нее (тут правда будет фэил с перечислением строк - уж очень длинные могут быть, этот вариант можно применять к числовым данным).
*
Подумаю над этим. smile.gif Чего-то в Qt вроде бы не всё так просто с автошириной колонок. smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Demoth
post Воскресенье, 11 Марта 2012, 15:58
Отправлено #27


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



А, ну да, еще одна приятная мелочушка - если тип первого столбца String, тогда выводить в строке состояния эту строку для текущей строки таблицы. (Просто как правило, если там стринг, то это Name, а его всегда под рукой желательно иметь - отматывать постоянно влево не очень удобно...) blush.gif
В принципе, эту идею можно прокачать до поиска строки при вводе первых символов имени, что-то вроде быстрого перехода. Т.е. когда сфокусировано на самой таблице (т.е. не в момент редактирования конкретного элемента) то обработчик нажатия клавиш можно былобы приспособить для перехода к нужной строке таблицы, т.е. скролл по вертикали.

Сообщение отредактировал Demoth - Воскресенье, 11 Марта 2012, 16:01
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Среда, 14 Марта 2012, 12:41
Отправлено #28


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Слегка обновил версию: зафиксировал первую колонку. smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Пятница, 16 Марта 2012, 01:02
Отправлено #29


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Обновил версию. smile.gif

Теперь утилитка поддерживает импорт из экзелевых файлов XLSX.
В папке с программой лежит пример экзелевого файла для импорта. Импортер ориентируется по названиям колонок, начинающихся с FLD.
Название каждого листа должно совпадать с кодовым названием блока (см. файл dbblocks.txt).

В ячейках допускается использовать формулы, импортер будет брать только рассчитанные значения. Это позволяет несколько (или же существенно, зависит от уровня владения экзелем) автоматизировать ввод значений, а также расчёт баланса.

В принципе все непонятные простому смертному модостроителю колонки можно задвинуть куда-нибудь вправо (главное, чтобы там в заголовке колонки как положено было FLD) и рассчитывать их значения автоматически. А все информационно полезные колонки (в т.ч. и свои созданные) держать на виду. В общем, кому как удобнее, так и делайте.

Что остаётся:
* Доопределить нормально поля
* Сделать более полный пример экзелевой датабазы
* Сделать автоширину колонок
* Сделать экспорт в экзель

Последние два пункта я как-нибудь когда-нибудь сделаю. smile.gif А вот с первыми двумя пунктами может помочь любой желающий. В качестве награды -- запись в окошке About данной проги. wink.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Guest
post Пятница, 16 Марта 2012, 18:02
Отправлено #30


Unregistered









А что понимается под "определением полей"?
Go to the top of the page
+Quote Post
ALtair
post Пятница, 16 Марта 2012, 18:03
Отправлено #31


Wizard
Group Icon

Группа: Members
Сообщений: 473
Регистрация: 10-Сен-02
Из: Москва, черт ее дери.
Пользователь №: 554



Це я был выше wink.gif


--------------------
Duty is everything, the greatest of joys, the deepest of sorrows.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Пятница, 16 Марта 2012, 18:46
Отправлено #32


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Привет, Altair smile.gif

Доопределить -- это расписать типы (integer/string/struct/etc...) и названия полей. rolleyes.gif

Там в текстовых файлах сделаны записи о том, какой должен быть тип у каждого поля, а также как каждое поле должно называться.

В принципе наверно можно просто переписать типы и названия из исходников EiEdit. Или из любого другого удобного исходника. smile.gif По-идее это не должно быть большой проблемой, главное сделать. smile.gif У меня руки не доходят. smile.gif

Сейчас типы полей записаны:
* для файла Items
* частично для Spells (только Spell Prototypes и Spell Modifiers)
* для Levers
* для Prints (но нужно проверить, не перепутаны ли названия блоков Blood и Foot Prints)
* для Units
Соответственно нужно доопределить типы:
* оставшиеся для Spells
* для Perks
* для Acks и Quests (для SP)
Описания типов полей хранятся в файле dbtypes.txt.

Названия же колонок пока что описаны хуже.
Они готовы:
* для Materials и Weapons из файла Items
* для Spell Prototypes и Spell Modifiers из файла Spells
* для Hit Locations и Race Models из файла Units
Для остальных блоков названия ещё не вписаны. Соответственно нужно бы вписать. Хоть из того же EiEdit. smile.gif
Описания названий полей хранятся в отдельном файле dbheaders.txt (в отдельном, так как если например полю задать тип FloatList, то вместо этого поля получается сразу список полей, для которых нужны разные названия -- соответственно файл dbheaders оперирует с уже разобранными типами полей).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Воскресенье, 18 Марта 2012, 23:01
Отправлено #33


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Немного обновил версию. smile.gif
Зделал автоширину колонок, если в dbheaders.txt на месте ширины указать 0. Но автоширина пока что считается только по тексту хедера. Не по содержимому.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Понедельник, 19 Марта 2012, 05:58
Отправлено #34


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



И ещё раз обновил версию. smile.gif

Файл Acks подбросил очередной сюрприз в виде списка структур. Так и не придумал, как оптимально и наглядно отобразить это нечто, скорее всего оптимальным для Acks является не табличный вид.
Но пока что нетабличные вкладки я делать не хочу (лень). Потому список структур превращается в специально отформатированную строку. Соответственно для этой цели был введён очередной новый тип.

В общем, 99,9% типов всех полей определены. Могут быть мелкие недочёты и огрехи (и если обнаружите их - пишите smile.gif ).

Также добавил маленькую полезную фичу: если выделить всю таблицу целиком, то при копировании скопируются не только данные, но и заголовок, причём в таком формате, в котором его можно вставить в экзель, сохранить (переименовав лист на имя скопированной таблицы) и спокойно импортировать. smile.gif То есть это такая недофункция экспорта. smile.gif

Соответственно сделал более полный пример экзелевского файла. Там теперь все блоки базы данных в одном файле. По-идее колонки можно менять местами и разбрасывать (не двигая по вертикали разумеется). Можно использовать формулы, в т.ч. и между листами (между блоками инфы).

Ну и остаётся собственно правильно назвать все эти колонки. Они ещё не названы как положено.
А так вроде бы всё. smile.gif

На всякий, продублирую ссылку, чтобы не искали:
EIDBEditor

Сообщение отредактировал ELF - Понедельник, 19 Марта 2012, 06:08
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALtair
post Понедельник, 19 Марта 2012, 12:09
Отправлено #35


Wizard
Group Icon

Группа: Members
Сообщений: 473
Регистрация: 10-Сен-02
Из: Москва, черт ее дери.
Пользователь №: 554



А интегрировать сюда же работу с анимационными *.adb базами ты не планируешь?

А вообще, я много думал по поводу аналогичного редактора, много мыслекопий поломал, но в итоге пришел к одному простому решению, которое, правда, так и не реализовал пока из-за лени и нехватки времени smile.gif

Если задаться вопросом, что нужно-то вообще обычному модмейкеру от базы? Только лишь возможность прописать туда новые строчки в таблички или поменять какие-то оригинальные значения. Всего этого можно добиться, если реализовать базу в виде обычного экселевского файла, который по макросу будет экспортировать все данные в текстовый формат совместимый с нивальскими утилитами упаковки базы. Единственная назойливая сложность тут - первоначальное заполнение этого экселевского документа.

Ну а такая утилита будет полезна в том случае, когда захочется "вскрыть" базу любого стороннего разработчика (т.е. чужого мода), что бывает, в общем-то, сильно редко smile.gif

Если же даже и делать такую утилиту, то, имхо, надо делать либо полноценный двусторонний конвертор database.res <-> database.xls, либо крутую гуёвую программулину, которая по функционалу управления таблицами не будет уступать хотя бы базовой версии экселя, при этом будет работать с оригинальным файлом database.res, а не с текстовыми, распакованными или экселевскими вариантами той же базы.

Сообщение отредактировал ALtair - Понедельник, 19 Марта 2012, 12:16


--------------------
Duty is everything, the greatest of joys, the deepest of sorrows.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Понедельник, 19 Марта 2012, 20:12
Отправлено #36


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



*.adb действительно думаю также задействовать. Только вот думаю, в какой бы вид лучше это всё конвертить. Одни только блоки данных составляют около 20 страниц экзеля, по ним навигировать уже не очень удобно. А *.adb могут жеж ещё несколько десятков листов набросить. Думаю, может быть их как-нибудь в отдельный файл выконвертивать.

В принципе я и рассчитываю добавить поддержку прямой работы с database.res и в итоге сделать именно такой конвертер : database.res <-> database.xlsx (ну или типа того).
Гуи особо сильно наворачивать не хочу, он просто для оперативного доступа и чтобы поиграться. smile.gif

Вообще ещё посещала мысль сделать вариант экспорта/импорта не только в *.xlsx, но и в кучку файлов .xml.

Вообще, интересно узнать, вот с точки зрения современной разработки игрухи:
* в чём лучше хранить подобные игровые данные (характеристики айтемов, заклов, персов, etc)?
* и в чём лучше хранить анимационную инфу, как и где её по-хорошему обычно сейчас хранят?

Просто есть желание как бы наперёд этой тулзе дать возможность конвертить в удобный современный формат хранения подобной инфы. smile.gif

Сообщение отредактировал ELF - Понедельник, 19 Марта 2012, 20:14
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Среда, 21 Марта 2012, 03:40
Отправлено #37


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Обновил версию. smile.gif

Теперь прога умеет напрямую читать из *.res. Но ещё пока что не пишет. wacko.gif
Я так и не разобрался, как там считается контрольная сумма у файла. smile.gif
Если кто подскажет, то буду очень благодарен. smile.gif

Также demoth расписал названия полей для Units.

А также поправил нехорошую ошибку в окоше About (чё там было написано не скажу tongue.gif) и сменил лицензию с GPL на более мягкую LGPL (так, на всякий случай).

Сообщение отредактировал ELF - Среда, 21 Марта 2012, 03:48
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Demoth
post Среда, 21 Марта 2012, 06:29
Отправлено #38


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



ELF, а ты список учитывал? Там массив записей образует хэш таблицу.

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ELF
post Среда, 21 Марта 2012, 10:18
Отправлено #39


Wizard
Group Icon

Группа: Members
Сообщений: 859
Регистрация: 14-Авг-03
Из: Краснодар
Пользователь №: 878



Ух, не разбираюсь я в этих нюансах. smile.gif Ну, допустим, что хэш-таблица по факту есть, а вот как в ней адресуются элементы, и как вычисляется тогда хэш-функция -- непонятно. smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Demoth
post Среда, 21 Марта 2012, 10:55
Отправлено #40


Conjurer
Group Icon

Группа: Add-on Developers
Сообщений: 189
Регистрация: 14-Мар-11
Пользователь №: 5,879



Хеш функция = сумма символов % количество файлов. Если в хеши совпадают, то в первом элементе записывается номер следующего файла с таким же хешом. Т.е. при запаковке в первую очередь записываются файлы без повторения хешей а потом все оставшиеся в произвольном порядке.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

Упрощённая версия Сейчас: 22 Марта 2019 - 05:15