Авторы: DA TOOLSET WIKI
Перевод: Kelamor Простой способ создания спутника
Простой способ создания спутника обеспечит нам:
- автолевел по дефолтным установкам;
- возможность его выбора в локации выбора персов, далее именуемом ЛВП (party picker);
- получение спутником очков опыта.
Этот урок покажет вам, как создать спутника особенно не напрягаясь, с лёгким уровнем знаний тулсета и основ написания скриптов.
Применяйте этот способ только в том случае, если вы уверены, что во время приёма персонажа, ваша активная партия не будет полностью укомплектована (ГГ и 3 спутника).
Возможность приёма в партию более трёх спутников имеется, однако вначале всё же надо выучить основы, так как в случае приёма более трёх спутников в активную партию могут возникнуть проблемы.
Создание существа
Создайте существо, который вскоре станет вашим спутником. Укажите имя, расу, пол, морф головы, диалог, инвентарь и т.д. на своё усмотрение.
Задайте Тэг существа, что-то наподобие "party_charname".
Убедитесь, что вы указали Класс. Основные классы – Rogue, Warrior и Wizard.
General Package Type укажите как Party Members
Package зависит от класса, в нашем случае "Generic - Wizard"
Package AI (тут только один вариант)
Rank укажите как Player
Всё, сохраняем и экспортируем.
Расширение локации выбора персов
В официальной компании локация выбора персов имеет специальную локацию, именуемую «char_stage». Так как вы расширяете основную компанию, либо пишете новую, нужно создать подобную же сцену с местом для вашего спутника и обеспечить возможность использования в игре обоих сцен.
In your resource palette, right-click char_stage under the Global folder and select Duplicate to make a copy of the stage with a new resource name, e.g. my_char_stage. In the resource properties, ensure that both Module and Owner Module are set to your module, and the folder of your choice.
На панели ресурсов в отделе Area найдите локацию «char_stage», это и есть локация выбора персов. Сделайте её дубликат, указав новое имя, например «my_char_stage». В свойствах ресурса в полях Module and Owner Module укажите ваш модуль и папку, в которой хотите поместить дубликат.
Откройте новый ресурс и разместите точку появления (waypoint) вашего спутника. Тэг этой точки должен начинаться с префикса "char_", после которого вы указываете Тэг вашего спутника. Смотрим скрин и повторяем.
В данном случае тэг моего спутника «bc_party_miera», а точка появления «char_bc_party_miera». Для отдельной компании можете устанавливать точки появления как вам угодно. Если же вы делаете расширение основной компании обязательно учитывайте расположение основных спутников ГГ, а также спутников, появляющихся в сторонних модах.
_____________________________________________________________________________
* Если честно, то не в курсе, как эта схема работает со сторонними модами - kelamor
_____________________________________________________________________________
Расположение спутников из сторонних модов, а также их тэги можно посмотреть по адресу Спутники из сторонних модов (en).
Всё, сохраняем и экспортируем.
Нижеследующее добавляем в скрипт вашего модуля:
Code
case EVENT_TYPE_MODULE_GETCHARSTAGE:
{
// Overlay the existing stage with my stage
// "my_char_stage" is the resource name of the overlay area
// "partypicker" is the name of the default GDA
SetPartyPickerStage("my_char_stage", "partypicker");
break;
}
Комментарии скрипта на русском:
Code
// Применение расширенной локации выбора персов
// "my_char_stage" имя расширенной локации выбора персов
// "partypicker" название дефолтного GDA-файла
Создание m2DA-файлов для PartyPicker'a
Нам необходимо создать таблицу с двумя листами, можно создать две отдельные таблицы.
__________________________________________________________________________________________________________
* Я использовал Microsoft Office, так как в нём нет проблем с компиляцией в GDA-файл. Использование Open Office грозит какими-то проблемами, при желании можете поюзать поиск. Автор ссылается на то, что можно использовать GDApp, но вроде как тяжко это - kelamor
___________________________________________________________________________________________________________
** Для редактирования ГДА файлов все время использую GDApp. Программа проста и очень удобна. С Microsoft Office слишком много возни (ИМХО) © Donor
___________________________________________________________________________________________________________
Название первого листа должно начинаться с «partypicker_», суффикс укажите соответственно вашему модулю, в моём случае это «fofbc».
Ниже приведён пример таблицы:
ID должен быть уникальным и не совпадать с основными спутниками и спутниками сторонних модов, как минимум это 12 и выше. В столбце Label укажите имя спутника, которого вы хотите видеть в локации выбора. Столбец Tag должна содержать тэг спутника.
Другие значения определяют поведение спутника при найме/отмене найма спутника. Оставьте всё как есть, если вы не в курсе, какие значения указать.
ПРИМЕЧАНИЕ - АНИМАЦИЯ ВЫБОРА
Изменение анимации производится путём указания ID анимации, который вы можете найти в файле anim_base.gda.
Не все анимации из указанного файла будут работать, так как некоторые требуют специальных условий. Вот несколько анимаций, которые вы можете использовать:
819 - talk cursing
629 - reading a book (doesn't work, since it probably requires a book object)
844 - hands behind back (848 and 849 are Enter and Exit versions respectfully)
850 - chest pounding salute
811 - fist pounding
277 - dance
247 - cast area spell
500 - vfx cast
600 - surprised
603 - praying
607 - head bow
609 - standing at attention
651,652 - crouch pray (Enter and exit)
808 - point forward
825 - nodding
840 - hand chop or frustration
905,906 - crouch (Enter, Exit)
919,920 - sit on ground (enter, exit)
965 - kneel down loop
972 - wipe nose
976,977 - squat (Enter, Exit)
986 - wipe eyes
998,999 - hands clasped (Enter, exit)
3029 - inspect nails
3031,3032 - playful (enter, exit)
3054,3056 - slouch (enter, exit) 255 - in-place fly
ПРИМЕЧАНИЕ - ВИЗУАЛЬНЫЕ ЭФФЕКТЫ ВЫБОРА
Столбец VFX содержит ID визуальных эффектов, содержащиеся в файле «vFx_base.gda». Здесь всё посложнее, так как ID в «vFx_base.gda» ссылается на значение «BlendTree» в нём же. Найдите ID эффекта и посмотрите столбец «BlendTreeName» (12 столбец) и введите оба значение в соответствующие столбцы вашего спутника в нашей таблице.
Вот некоторые:
ID --- BLENDTREENAME --- EFFECT
6039 --- fxm_energy_up_p --- Lady of the Forest pillar of light
6040 --- fxm_power_in_p --- Branka - power in
3054 --- fxc_lotf_c --- Lady of the Forest - swirling leaves
3009 --- fxc_succubus_c --- Succubus crust
1549 --- fxa_hly_imp_c --- Holy Impact crust
1076 --- fxa_spi_aur_mht_c --- Spirit - Aura Might crust
Второй лист именуется «party_picker_» с тем же суффиксом. Отредактируйте столбцы как указано ниже.
ID и Тэг должны совпадать с указанными в первом листе. Третий столбец оставьте как есть.
Теперь скомпилируйте вашу таблицу. Для этого:
- скопируйте файл ExcelProcessor.exe из папки Папка установки Dragon Age\tools\ResourceBuild\Processors (или где вы установили игру);
- перетащите файл таблицы (надеюсь нигде не использовали кириллицу?) на ExcelProcessor. Если всё нормально то в той же папке должны появиться два GDA-файла;
- поместите оба файла в папку вашего модуля, обычно это \Documents\Bioware\Dragon Age\AddIns\yourModule\module\override\toolsetexport вашего модуля.
________________________________________________________________________________________________
* В принципе у меня работает и в основной папке packages\override и в папке core\override модуля - kelamor
________________________________________________________________________________________________
** Так и должно быть. Но папка packages\override имеет приоритет над core\override модуля и используется для переназначения файлов. То есть если у вас в core\override модуля размещен один ГДА файл, а затем вы поместите в
packages\override ГДА с таким же названием, но с другими данными, то работать будет файл, который помещен в packages\override, а файл из папки модуля задействован не будет. © Donor
_________________________________________________________________________________________________
Создание и назначение основного скрипта модуля
Для того, чтобы при выборе спутника в локации выбора он добавился в партию, необходимо обработать событие EVENT_TYPE_PARTYMEMBER_ADDED в скрипте вашего модуля. Создайте скрипт и назначьте его основным скриптом для вашего модуля (смотри после текста скрипта).
Полный текст скрипта, с учётом описанного ранее события EVENT_TYPE_MODULE_GETCHARSTAGE:
Code
#include "utility_h"
void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);
switch(nEventType)
{
case EVENT_TYPE_MODULE_GETCHARSTAGE:
{
// Overlay the existing stage with my stage
// "my_char_stage" is the resource name of the overlay area
// "partypicker" is the name of the default GDA
SetPartyPickerStage("my_char_stage", "partypicker");
break;
}
case EVENT_TYPE_PARTYMEMBER_ADDED:
{
object oFollower = GetEventObject(ev, 0);
SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0); //Allows the follower to gain XP
AddCommand(oFollower, CommandJumpToLocation(GetLocation(GetHero()))); //Ensures follower appears at PC's location.
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE); //Adds follower to the active party
break;
}
}
}
С русскими комментами:
Code
#include "utility_h"
void main()
{
event ev = GetCurrentEvent();
int nEventType = GetEventType(ev);
switch(nEventType)
{
case EVENT_TYPE_MODULE_GETCHARSTAGE:
{
// Применение расширенной локации выбора персов
// "my_char_stage" имя созданной вами локации выбора персов
// "partypicker" название дефолтного GDA-файла
SetPartyPickerStage("my_char_stage", "partypicker");
break;
}
case EVENT_TYPE_PARTYMEMBER_ADDED:
{
object oFollower = GetEventObject(ev, 0);
SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0); //Позволяет спутнику получать экспу
AddCommand(oFollower, CommandJumpToLocation(GetLocation(GetHero()))); //Обеспечивает появление спутника в локации, в которой находится ГГ
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE); //Добавляет спутника в активную партию
break;
}
}
}
_____________________________________________________________________________________________________
*В тулсете должны использоваться скрипты только с английскими комментариями. Скрипты с русскими комментариями работать не будут. © Donor
_____________________________________________________________________________________________________
SetLocalInt(oFollower, CREATURE_REWARD_FLAGS, 0) фикс бага, который не позволял спутнику получать экспу. Если вашему спутнику экспа не нужна - можно закомментить.
Обратите внимание, что вам не нужно перехватывать соответствующее событие для члена партии, PartyPicker успешно сделает всё сам.
Сохраните скрипт и экспортируйте его.
Теперь необходимо назначить скрипт для вашего модуля. Если вы не знаете, как это сделать, то в меню File выберите Manage Modules, далее выберите ваш модуль и нажмите Properties. Далее смотрите по скрину:
Назначить основным для вашего модуля можно любой скрипт, который вы создаёте. Смотрите Учебник по скриптингу и Character generation для получения большей информации. Данная возможность используется, если вы хотите, чтобы ваш модуль реагировал и обрабатывал события, происходящие в игре.
Создание скрипта найма и завершение первой части работы
Итак, у нас почти всё готово, чтобы нанять нашего нового спутника
Создайте скрипт, обрабатывающий процедуру найма спутника (наиболее удобный и логичный способ запустить его - диалог). Скрипт достаточно прост:
Code
#include "utility_h"
void main() {
object oFollower = GetObjectByTag("bc_party_miera"); //Use CreateObject() if the creature isn't present in the module yet
UT_HireFollower(oFollower); //Hires the follower
SetPartyPickerGUIStatus(2);
ShowPartyPickerGUI(); //Shows the Party Picker; necessary for the follower to gain XP
}
С русскими комментами:
Code
#include "utility_h"
void main() {
object oFollower = GetObjectByTag("bc_party_miera"); //Используйте CreateObject() если спутника нет рядом с ГГ
UT_HireFollower(oFollower); //Нанимаем спутника
SetPartyPickerGUIStatus(2);
ShowPartyPickerGUI(); //Вызываем PartyPicker (необходимо для того, чтобы спутник получал экспу)
}
Убедитесь, что вы указали тэг вашего спутника
Этот скрипт вызывает PartyPicker после найма спутника. Это необходимо, если вы хотите, чтобы нанятый спутник получал экспу. Вы не можете поместить описанный ранее код, фиксящий баг с экспой, в этот скрипт, так как он должен исполняться после вызова PartyPicker'a (этот баг плавает где-то в скрипте player_core, который выполняется после этого скрипта).
Итак, как и говорилось ранее, наиболее удобный и логичный способ вызвать скрипт найма - диалог, для чего выбранной линии в диалоге необходимо назначить действие, а именно - вызов нашего скрипта. Если вы не знаете, как сделать это, то смотрите скрин и следуйте дальнейшим инструкциям:
Создайте диалог, выберите линию, для который вы хотите назначить действие, выберите закладку Plots and Scripting. В секции Action нажмите кнопку выбора и укажите созданный вами скрипт.
Если вы сделали всё правильно, то в игре, после соответствующего диалога, вы увидите следующее: