Город Мастеров
IPB

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

Профиль
Фотография
Рейтинг
 
Опции
Опции
Персональное Соглашение
DeKaVi не имеет договора в данный момент.
Персональная информация
DeKaVi
Level 2
40 лет
Мужчина
Проживание неизвестно
Родились Май-18-1983
Интересы
Нет данных
Другая информация
Класс: Некромант
Характер: Neutral Evil
Раса: Человек
Мастер: Нет данных
Мастер: Нет данных
Мастер: Нет данных
Проект N1: Нет данных
Проект N2: Нет данных
Статистика
Присоединился: 17.11.2009
Просмотры профиля: 4,105*
Последний раз замечен: 8th December 2009 - 12:10
Местное время: Mar 28 2024, 14:29
15 сообщения (0 сообщений в день)
Контактная информация
AIM Нет данных
Yahoo Нет данных
ICQ Нет данных
MSN Нет данных
Контакт Скрыт
* Просмотры профиля обновляются каждый час

DeKaVi

Candidate

*


Темы
Сообщения
Файлы
Комментарии
Друзья
Содержание
19 Nov 2009
Перевод и редакция DeKaVi
Источники: 2DA or not 2DA – Overriding 2DA files Автор: John Vanderbeck

От редактора: Я далеко не профессионал в деле перевода и оформления статей и тем более в DA toolset. Взялся я за это нелегкое дело т.к. нет альтернативных русскоязычных источников. Сам разбираюсь и не прочь другим помочь. Потому прошу воспринимать мои труды адекватно. Буду рад если подскажете или иными способами поможете исправить неточности. Спасибо за понимание. Поехали!

В уроке мы рассмотрим, как работать с файлами 2DA, как их правильно изменять, вводить пользовательские элементы и поведения в Dragon Age.

Что такое 2DA файл?
По своей сути, 2da файлы не более чем таблица. Набор строк и столбцов, описывающих данные игры. Перечень игровых предметов, например, и вся связанная с ними статистика, работает безукоризненно как таблица.

2da файлы используются для определения большинства, если не всех, данных в игре. В качестве бонуса для моддеров, у вас есть возможность изменять эти файлы.

В "сыром", не откомпилированном формате, 2da хранятся в виде простого XLS файла - таблице Excel. Их можно открывать и редактировать в Microsoft Excel (OpenOffice или др. программами пользоваться НЕ РЕКОМЕНДУЕТСЯ). Эти таблицы в итоге компилируются в двоичный файл с расширением GDA.

Преимущества 2DA файлов
В теории, вы могли бы просто заменить соответствующие данные в XLS файле, затем скомпилировать, но это неправильный способ. Если вы это сделаете, то игра в будущем, с новой версией этого файла, может сбросить ваши изменения или могут появиться проблемы в работе с другими модулями.

В этом случае, Bioware дало нам возможности не трогать главный файл, а создавать дополнение этого файла - M2DA(Mutliple two dimensional arrays). Это хороший способ расширить или переопределить данные. Давайте посмотрим, как это работает.

Давайте рассмотрим на примере. Скажем, xls таблица с предметами игры могут выглядеть примерно так:
(IMG:http://dekavi.ucoz.ru/_fr/1/2848228.png)
Здесь мы можем увидеть определение и параметры нескольких предметов. Скажем данный файл является "items.xls".Теперь мы хотим сделать новый элемент в игре. Мы хотим добавить новый длинный лук(longbow). Мы могли бы открыть копию этого файла(items.xls) и добавить новую строку с ID 5, но это было бы неправильным!
Вместо этого мы создаем новый файл, назовем его "items_bow.xls". И здесь мы будем определять наш лук, но мы не должны забывать, что ID(идентификатор) должен быть 5. Мы получим нечто вроде этого:
(IMG:http://dekavi.ucoz.ru/_fr/1/7437914.png)
Теперь мы создали новый файл с нашим новым предметом. Мы, в сущности, создали M2DA файл. Но каким образом наши данные теперь будут сочетаться с данными игры? Все дело в имени файла! Помните, файл предметов называется "items.xls" и мы создали новый файл с именем "items_bow.xls"? Обратите внимание, что оба файла начинаются с одного и того же слова "items". Это является ключевым моментом! Когда игра грузит предметы, она будет загружать их из 2da файлов. Затем, будет загружать данные с нашего items_bow файла(M2DA файла) и обнаружив там лук с ID 5, он будет дополнять игру новым объектом.

В итоге, мы имеем два ключевых момента. Это имя файла и идентификатор объекта. Если мы указали уникальный ID, т.е. его еще не было в главном файле - мы добавим новый предмет, если мы будем использовать ранее созданный ID, то мы заменим объект, переопределим его в новом файле. Например, мы могли бы сделать файл "items_new_swords.xls"
(IMG:http://dekavi.ucoz.ru/_fr/1/4417995.png)
Этот файл, в сочетании с нашими предыдущими двумя будет создавать еще один новый предмет, Shortsword, №6, но также переопределит данные предмета с ID №2. Давайте теперь посмотрим на реальном примере.

Реальный 2DA немного сложнее, но не намного. Давайте взглянем на настоящий 2da. Это из 2DA_base.xls (Прим. ред.: находится в папке игры Dragon Age - Origins\tools\Source\2DA)
(IMG:http://dekavi.ucoz.ru/_fr/1/8717641.png)
Первые две строки в 2da всегда одни и те же. Строка 1 содержит имена столбцов, в первом столбце всегда ID. Остальное зависит от данных 2da. Вторая строка показывает тип данных в каждой колонке. Int - целое число, string - строка(просто текст) и т.д. Фактически, данные начинаются на третей строке. Каждая строка должна иметь уникальный идентификатор, а идентификатор должен быть в последовательном порядке.

Ранее мы говорили, что игра объединяет 2da на основании имен файлов.Но как вы узнаете, какие имена файлов использовать? В файле 2DA_base.xls хранится ответ на этот вопрос. В нем мы видим, что файл, который определяет предметы в игре будут начинаться с "BITM_". Любой M2DA который мы хотим сделать для переопределения, должен иметь такой же префикс.

Компиляция 2DA файлов
Теперь, когда мы знаем как использовать 2da файлы для создания новых и переопределения старых данных, мы должны узнать, как собрать из xls файлов, файлы GDA - понятные для игры. Это очень легко. Для этого используются утилита ExcelProcessor.exe из директории toolsest(Dragon Age\tools\ResourceBuild\Processors). Есть несколько способов использования этого инструмента, но сейчас я собираюсь описать самый простой.
Для начала выберите каталог для хранения ваших xls файлов. Не имеет значение, где вы будете их хранить. Копируйте туда утилиту ExcelProcessor.exe. Создайте с этого файла ярлык в той же папке. теперь можете просто перетаскивать xls файл на ярлык. В той же папке появится много файлов. Для разных объектов может потребоваться различные файлы (названия задаются из имен вкладок в xls файле). Для предметов это скорее всего будут файлы BITM_base.GDA и ItemStats.GDA.

Куда поместить скомпилированные файлы 2DA
После компилирования этих файлов, вам необходимо их разместить для правильной работы. К сожалению у меня нет точных данных, поэтому хочу сразу сказать что моя информация может быть неправильной или неполной. Я буду обновлять информацию.
(Прим. ред.: далее в комментариях предлагают рецепт:
1) сделал копию ABI_Base.xml
2) Удалил все лишние строки. оставил только свои изменения
3) Использовал ExcelProcessor конвертировал таблицы в файлы GDA
4) удалил всё, кроме двух файлов GDA ABI_Base и ability_data
5) переименовал их в ABI_Base_NightmarePlus и ability_data_NightmarePlus
6) скопировал файлы в packages/core/override/zNightmarePlus подкаталог (примечание редактора: в папке "Мои документы" наверное...)
7) Игра работает безупречно и модификации работают вместе с другими модами ABI_Base)
19 Nov 2009
Перевод и редакция DeKaVi
Источники: A Start: Creating a Module to Give Your Player an Item Автор: John Vanderbeck

От редактора: Я далеко не профессионал в деле перевода и оформления статей и тем более в DA toolset. Взялся я за это нелегкое дело т.к. нет альтернативных русскоязычных источников. Сам разбираюсь и не прочь другим помочь. Потому прошу воспринимать мои труды адекватно. Буду рад если подскажете или иными способами поможете исправить неточности. Спасибо за понимание. Поехали!

В этой статье мы создадим новый модуль, который будет дополнять основную компанию игры. В модуле добавим новый предмет и дадим его игроку. Модуль не будет изменять объекты компании и его легко включить/отключить. (прим. ред.: не используйте кириллицу в названиях, в скриптах вообще нигде. на предметах текст будет квадратами в игре отображаться, скрипты не будут компилиться даже если текст на русском будет в комментариях.)

Если вы уже экспериментировали с модулем Single Player, Вы могли что-нибудь сломать в основной компании. Никогда не работаете в модуле Single Player! Да и нет в этом никакой необходимости. Если это случилось, нужно отменить все изменения для модуля. Для этого выберите в меню Tools->Export->Empty Export Dirictories (Очистить дирекотрию для экспорта).

Создание модуля
Для начала нам нужно создать наш собственный модуль. File->Manage Modules->New...
1. Задайте имя модуля. Латиницей, пробелы допустимы.
2. UID т.е. идентификатор модуля и он должен быть уникальным. Тем более латиница и пробелы не допустимы. Используйте знак подчеркивания если нужно.
3. В поле Extended Module указываем, что мы расширяем модуль Single Player, т.е. основную компанию.
(IMG:http://dekavi.ucoz.ru/_fr/0/3417407.jpg)
Нажмите ОК. Теперь снова вернитесь в менеджер модулей и выделив ваш модуль нажмите кнопку Hierarchy... поставьте галку на Single Player. Примечание: Если все модули серого цвета, и вы не можете выбрать ни одного из них, значит не открыт ни один модуль.

Создание предмета
Если вы хотите дать игроку предмет, который уже существует в игре, вы можете пропустить этот раздел.

В этом уроке мы собираемся создать лук. В меню выбираем File->New->Item
1. Задаем имя объекта
2. папку (прим. ред.: только для внутренней организации, как я понял)
3. Далее следует модуль. Это важный момент! Т.к. мы хотим дополнить основную игру, мы должны установить модуль Core Game Resources. Наш объект будет физически помещен в ресурсы игры. В таком случае главный модуль игры и другие модули смогут получить доступ к этому объекту.
Жмите Ок.
http://dekavi.ucoz.ru/_fr/0/8646509.jpg
Перед нами палитра свойств нового объекта и его представление в 3D виде. По умолчанию это будет меч. Давайте зададим некоторые настройки.
1. Base Item Type: weapon - Longbow. Тип объекта "оружие - лук".
2. Description(описание предмета):
3. Icon (картинка для инвентаря): ico_longbow (как вариант)
4. Inventory Subgroup(инвентарная подгруппа): 13666. (Прим. ред.: Как я понял это признак для группировки объектов в инвентаре. Хорошо когда одинаковые объекты складываются в одну кучку.)
5. Item Variation(вариант вида предмета): какой хотите.
6. MaterialProgression и MaterialType... Выберите "Bow,horn" Заметьте! В Dragon Age есть такое понятие как объект, например, bow. По нему прописаны характеристики, такие как повреждения, шанс крита и прочее. Различные материалы для предметов изменяют базовые характеристики на определенный материалу множитель. Например, лук Elm имеет множитель 1.0, а лук Dragonthorn имеет множитель 1.6. Эти базовые и другие данные находятся в 2da (об этом в другом руководстве).
7. Name. Не забываем задать имя.
8. тег создается автоматом. Он может быть использован в скриптах.
9. В Item Properties [...] можно задать до пяти дополнительных свойств объекта.
Сохраните новый предмет.
http://dekavi.ucoz.ru/_fr/0/0234980.jpg
теперь нужно проверить наш объект. Для этого мы можем в правом окне, дереве элементов выбрать наш лук правой кнопкой и выбрать в меню Chek In. Комментарии к операции можно не оставлять. После этого объект становится недоступным для редактирования. Чтобы редактировать выберите Check OUT. Это очень важно! (Прим. ред.: это механизм контроля версий. Лучше его отдельно описать.)

Создадим скрипт чтобы дать наш предмет игроку
Мы почти все сделали! теперь нам нужен способ дать наш предмет игроку. Мы собираемся сделать это с помощью событий модуля основного сценария. Некоторые события, происходящие в игре, отлавливаются в модуле. Мы будем использовать событие загрузки модуля.
Скрипты в Dragon Age пишутся на Си подобном языке. Я просто предоставляю вам для изучения готовый скрипт с комментариями.
Для начала нам нужно создать новый скрипт File->New->Script. Назовем его module_core_bowathena. На этот раз модуль Модуль-владелец являются нашим модулем, а не Core Game Resource т.к. скрипт не должен быть доступным только в нашем модулей. (Прим. ред.: лично я не понял почему мы предмет помещаем в главные ресурсы, а скрипт объекта держим во внешнем модуле. Сделаем как сказали, потом разберемся.)

(Прим. ред.: редактор скриптов не любит кириллицу и отказывается компилировать сценарии с русскими комментариями. т.е. далее идущий скрипт нужно вставлять в редактор без комментариев. Я сначала перевел, потом на тесте ошибку понял.)
Neverwinter Script
// All module events
#include "utility_h"
#include "wrappers_h"
#include "events_h"
void main()
{
    event ev  = GetCurrentEvent();
    int nEvent = GetEventType(ev);
    Log_Events("", ev);
    switch (nEvent)
    {
        ////////////////////////////////////////////////////////////////////////
        // Sent by: The engine
        // When: срабатывает при загрузке с сохранения или когда запущено в первый раз
        //      Может вызываться несколько раз
        ////////////////////////////////////////////////////////////////////////
        case EVENT_TYPE_MODULE_LOAD:
        {                   
            // Делаем проверку, чтобы запускался только один раз. Если ниже лежащий код уже выполнялся,
            //повторять нам его не надо и пропускаем это событие.
            int iModuleLoaded = GetLocalInt(OBJECT_SELF, "aga_bowathena");
            if (iModuleLoaded == 1)
                break;

            // Получим объект игрока
            object oPlayer = GetHero();

            // проверяем, нет ли уже этого объекта в рюкзаке игрока.             
            // Мы же не хотим создавать новый лук при очередной загрузке? Хотя можно это назвать системой крафтинга =) (прим. ред.)
            int iItemCount = CountItemsByTag(oPlayer, "aga_bowofathena");                     
            // Если это 0, тогда давайте дадим его.
            // Обратите внимание на формат  R"resource_file_name"
            // "R" является важной частью и определяет его в качестве ресурса.  Просто имя ресурса. Его можно увидеть в дереве объектов (справа)
            // Дадим только одну штуку
            if (iItemCount  == 0)
                UT_AddItemToInventory(R"aga_bowofathena.uti",1); // добавляет предмет в инвентарь активного игрока

            // сохраняем ранее определенную переменную как локальную в объекте
            SetLocalInt(OBJECT_SELF, "aga_bowathena", 1);
            break;
        }
        default:
        {
            break;
        }
    }
}

Сохраняем скрипт. Теперь его мы должны назначить модулю.Для этого мы должны зайти в менеджер модулей, затем выбрать свойства модуля и вместо значения поля script выбрать наш новый сценарии.

Экспорт модуля
Нам остался заключительный шаг. Мы должны экспортировать новые ресурсы и модуль, чтобы они стали действовать в игре. Перейдите к дереву объектов, выберите новый предмет правой кнопкой мыши. выберите Export->Export without... (экпорт без зависимых ресурсов). Тоже самое сделайте для сценария.
Наконец, чтобы экспортировать модуль перейдите в меню Tools->Export->Generate module XML. Затем там же Generate Mainfest XML.
Теперь можем тестировать в игре. Просто загрузитесь или начните игру заново. Смотрите в инвентарь!
Последние посетители


9 Oct 2016 - 22:44


23 Oct 2010 - 17:32


18 Oct 2010 - 9:38


27 Aug 2010 - 22:28


27 Mar 2010 - 19:38

Комментарии
Вам не оставили ни одного комментария DeKaVi.

Друзья
Нет друзей для показа.
Текстовая версия Сейчас: 28th March 2024 - 13:29