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

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

> Создание дополнения для компании, предача предмета игроку
DeKaVi
сообщение Nov 19 2009, 21:43
Сообщение #1


Level 2
*

Класс: Некромант
Характер: Neutral Evil
Раса: Человек



Перевод и редакция 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.
Теперь можем тестировать в игре. Просто загрузитесь или начните игру заново. Смотрите в инвентарь!

Сообщение отредактировал DeKaVi - Nov 20 2009, 15:58
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- DeKaVi   Создание дополнения для компании, предача предмета игроку   Nov 19 2009, 21:43
- - Aiwan   Молодец   Nov 20 2009, 19:48
- - Narren   Если предмет надоест, прийдется модуль удалять, ин...   Nov 21 2009, 12:09
- - Sworder   Есть вопрос. А как теперь можно удалить эти модули...   Dec 1 2009, 14:18
- - coolcat   DeKaVi,спасибо тебе большое я, благодаря тебе, с...   Dec 19 2009, 16:47
- - kolobod   DeKaVi, Narren - респект и уважуха! ;) Только...   Dec 22 2009, 20:47
- - azathoth   1) Использовать НСС тэг - так скрипты понятнее. 2)...   Dec 22 2009, 22:56
- - kolobod   Спасиб! )   Dec 23 2009, 16:47
- - Leon PRO   ЦитатаПримечание: Если все модули серого цвета, и ...   Dec 25 2009, 00:11
- - kolobod   ЦитатаИ что тогда делать ? - выделить свой модуль ...   Dec 27 2009, 22:26
- - StillFree   Спасибо большое,пригодится,сам в этом деле ломо,пр...   Jan 11 2010, 07:48
- - KrAiZ   Бли, у меня предмет не выводится в игре, дайте нор...   Jan 23 2010, 00:35
- - Kcapra   ЦитатаNo starting area specified for campaign. Не ...   Jan 23 2010, 08:12
- - KrAiZ   У меня там так же Extended Module : Single Player ...   Jan 23 2010, 15:01
- - radomir   а как добавить собственные , нарисованые текстуры?   Feb 19 2010, 13:45
- - volodil   Здравствуйте. У меня маленькая проблема. Все делал...   Mar 6 2010, 21:26
- - Lex   Цитата(volodil @ Mar 6 2010, 21:26) 1) Не...   Mar 9 2010, 12:03
- - Azgaros   Огромная просьба подсказать в чем проблема.. Все п...   Mar 21 2010, 05:45
- - Lex   нельзя редактировать - ты его лочишь сразу: Цитат...   Mar 22 2010, 10:27
- - Ghost   Для тех кто мучается удалением модулей. В My Docum...   Mar 28 2010, 19:20
- - Griffon   Цитата(Ghost @ Mar 28 2010, 20:20) А у ва...   Mar 29 2010, 12:25
- - Ghost   Натыкался на твою тему на офф форуме. Нашел вчера...   Mar 29 2010, 14:38
|- - Lex   Цитата(Ghost @ Mar 29 2010, 14:38) Если т...   Mar 29 2010, 14:41
- - Griffon   Цитата(Ghost @ Mar 29 2010, 15:38) Если т...   Mar 30 2010, 14:23
|- - Ghost   Цитата(Griffon @ Mar 30 2010, 15:23) Пере...   Mar 30 2010, 14:44
- - DenweR   люди подскажите пожалуйста!!!!...   Aug 27 2010, 22:29
- - tornal   Ребят подскажите в чем дело. Все делал по инструкц...   May 13 2012, 12:41


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28th March 2024 - 19:11