PRCSCR Script Templates/ru

From Dragon Age Toolset Wiki
Jump to: navigation, search
Шаблоны скриптов PRCSCR
Начало / Русская DA Builder Wiki / Поделиться ВКонтакте

На этой странице собираются скрипты, готовые к использованию в системе PRCSCR в сочетании с M2DA-файлом PRCSCR.

Ссылки:


Содержание:

- Размещение объекта на локации - этот скрипт позволяет разместить объект на загружаемой локации.
- Размещение НПС на локации - этот скрипт позволяет разместить НПС на загружаемой локации.
- Активация иконки локации на карте мира - этот скрипт позволяет активировать иконку локации на карте мира.
- Добавление вещей в инвентарь - этот скрипт позволяет добавить любую вещь в инвентарь игрока.
- Добавление вещей существующему торговцу или в контейнер - этот скрипт позволяет добавлять предметы существующим на локации торговцам или в контейнеры.
- Добавление активной двери на локацию - этот скрипт добавит дверь, которая может быть использована для перехода игрока на другую локацию.
- Добавление квеста на доску проповедника - этот скрипт позволяет добавить новое задание на существующую доску проповедника.


Размещение объекта на локации

Настройка M2DA:

  1. "AreaListName" не может быть "any". Укажите определённую локацию.
  2. Скопируйте PRCSCR-файл в папку "override" вашего модуля.

Скрипт: (пример взят из мода "Storage Chest", созданного одним из сотрудников Bioware)

const string TAL_IP_STORAGE_CHEST = "tal_ip_storage_chest";
const resource TAL_RESOURCE_IP_STORAGE_CHEST = R"tal_ip_storage_chest.utp";
 
void main()
{
    object oMainControlled = GetMainControlled();
    // ПРОВЕРЯЕМ, ЕСТЬ ЛИ В ЛОКАЦИИ  ОБЪЕКТ С ТАКИМ ТЕГОМ 
    object oChest = UT_GetNearestObjectByTag(oMainControlled, TAL_IP_STORAGE_CHEST);
 
    //DisplayFloatyMessage(oMainControlled, "Storage script working", FLOATY_MESSAGE, 16777215, 30.0);
 
    // ЕСЛИ ТАКОГО ОБЪЕКТА ЕЩЁ НЕТ, ТО СОЗДАЁМ ЕГО
    if (!IsObjectValid(oChest))
    {
        location lSpawn = Location(GetArea(oMainControlled), Vector(148.77, 117.68, -0.94), 0.0);
        CreateObject(OBJECT_TYPE_PLACEABLE, TAL_RESOURCE_IP_STORAGE_CHEST, lSpawn);          
 
        //DisplayFloatyMessage(oMainControlled, "Storage script working", FLOATY_MESSAGE, 16777215, 30.0);
    }
}
  1. Замените "tal_ip_storage_chest" в 1-й строке на тэг объекта, который вы хотите разместить (обязательно в нижнем регистре).
  2. Замените "tal_ip_storage_chest.utp" во 2-й строке на имя файла вашего объекта.
  3. В 13-ой строке укажите координаты, по которым будет размещён объект. Как определить координаты? В следующем пункте.
  4. Создайте временный дубликат локации (можете и в оригинале сделать, но не сохраняйте изменения) и поместите объект в нужное место (впоследствии не экспортируйте изменённую локацию).
  5. В инспекторе свойств объекта найдите свойство "Position". Это координаты позиции объекта, замените на них числа в скобках за словом "Vector".
  6. В инспекторе свойств объекта найдите свойство "Rotation" (вращение). Это свойство определяет то, куда объект направлен своим фэйсом. На значение этого свойства поменяйте третий аргумент процедуры "Location". Правда перед его указанием в скрипте это свойство надо пересчитать (kelamor - не понял как). For positive angles do (180-angle). For negative angles do (-180-(-angle)).

Далее экспортируете скрипт, объект и запускаете игру. Когда вы войдёте в локацию, с которой ассоциируете этот скрипт, ваш объект появится в нужном месте.

Примечание:

  • Данный метод позволяет избежать дублирования объектов на локации с помощью функции "IsObjectValid". Такого же результат можно добиться и с помощью Plot-файла.
  • Если база не русифицирована, то удалите из скрипта русские примечания.
  • Для проверки работы скрипта можно раскомментировать строки с функцией "DisplayFloatyMessage". Тогда скрипт сообщит вам при срабатывании - "Storage script working", и при создании объекта - "Storage script working".
  • При указании числовых значений в функции "Location" обязательно указывайте с точностью до сотых и обязательно с точкой. Если в инспекторе объекта целое число, то добавьте к нему ".00".

Размещение НПС на локации

Настройка M2DA:

  1. "AreaListName" может быть "any". Этот скрипт управляется Plot-флагом.
  2. # Скопируйте PRCSCR-файл в папку "override" вашего модуля.

Скрипт:

// ЭТО НАЗВАНИЕ Plot-ФАЙЛА "joblos_quest" С УКАЗАНИЕМ СПЕЦИАЛЬНОГО ПРЕФИКСА "plt_". 
// УКАЗАНИЕ ПРЕФИКСА ОБЯЗАТЕЛЬНО ДЛЯ ТОГО, ЧТОБЫ ИГРА СМОГЛА ОБРАЩАТЬСЯ К ФЛАГАМ Plot-ФАЙЛА КАК К КОНСТАНТАМ.
#include "plt_joblos_quest" 
#include "wrappers_h"
 
void main()
{
    // ПРОВЕРЯЕМ ФЛАГ И ВЫЯСНЯЕМ, НЕ ПОМЕЩЁН ЛИ Joblo НА ЛОКАЦИЮ ПРИ ПРЕДЫДУЩИХ ЗАХОДАХ
    if (WR_GetPlotFlag(PLT_JOBLOS_QUEST, JOBLO_ADDED_TO_TOWN) == FALSE)
    {
        object oTown = GetObjectByTag("lot100ar_lothering"); //ТЭГ ЛОКАЦИИ ИДЕНТИЧЕН НАИМЕНОВАНИЮ ЕЁ РЕСУРСА.
        vector vJobloLocation = Vector(126.745f, 120.724f, 0.460568f);
 
        CreateObject(OBJECT_TYPE_CREATURE, R"joblo.utc", Location(oTown, vJobloLocation, 180.0f));
 
        WR_SetPlotFlag("joblos_quest", JOBLO_ADDED_TO_TOWN, TRUE);
    }
}
  1. Замените "joblos_quest" на название вашего Plot-файла.
  2. Замените "JOBLO_ADDED_TO_TOWN" на название флага, определяющего, что НПС уже создан на локации.
  3. Замените "lot100ar_lothering" тэгом локации, где НПС должен быть создан.
  4. Замените "joblo.utc" на имя файла ресурса вашего НПС (en).
  5. Вычислите и установите координаты появления НПС в переменной "vJobloLocation" и процедуре "CreateObject". Как это сделать рассказано в описании скрипта Размещение объекта на локации.

Экспортируйте скрипт, НПС и запустите игру. Когда вы зайдёте на нужную локацию НПС будет уже там.

Активация иконки локации на карте мира

Требования:

  1. Ваш модуль должен быть расширением основаной кампании (Single Player).

Настройка M2DA:

  1. "AreaListName" может быть "any", так как этот скрипт должен быть универсальным и управляется Plot-флагом.
  2. Скопируйте PRCSCR-файл в папку "override" вашего модуля.

Скрипт:

const string WML_WOW_Custom = "eshmeswp";
#include "plt_mnp000pt_main_events"
#include "wrappers_h"
void main()
{
    // С ПОМОЩЬЮ PLOT-ФЛАГА ПРОВЕРЯЕМ УСЛОВИЕ
    if(WR_GetPlotFlag( PLT_MNP000PT_MAIN_EVENTS, ARCHDEMON_EVENT_ONE) == TRUE )
    {
        // ДЕЛАЕМ ИКОНКУ ЛОКАЦИИ НА КАРТЕ МИРА АКТИВНОЙ
        WR_SetWorldMapLocationStatus(GetObjectByTag(WML_WOW_Custom), WM_LOCATION_ACTIVE);
    }
}
  1. Замените в 1-ой строке "eshmeswp" на тэг вашей иконки локации на карте. Эта иконка должна быть серой, неактивной. Подробную информацию о создании иконок на карте мира вы найдёте по этой ссылке (en).

Экспортируйте скрипт, карту и запускайте игру. Иконка локации на карте мира станет активной, когда вы покинете Лотеринг, как и многие другие иконки локаций. Это сделано, чтобы соблюдать ход истории, хотя вы конечно можете выбрать и другой момент, для этого:

  1. Выберите Plot-файл с флагом, в зависимость от которого вы хотите поставить активацию иконки. В данном примере это Plot-файл с основными событиями игры и флаг первого кошмара с с Архидемоном.
  2. Замените название Plot-файла ("mnp000pt_main_events") в скрипте. Не забудьте оставить префикс "plt_".
  3. Замените флаг ("ARCHDEMON_EVENT_ONE") на флаг, который вы выбрали в новом Plot-файле.

Данный метод должен работать для любого Plot-файла.

Конечно, для активации иконки локации на карте Plot-файлы совсем не обязательны, ведь можно изначально сделать иконку активной, но этот пример и использование Plot-файлов позволяет привязать ваше расширение к основной кампании и сделать его более логичным. Например ГГ не должен попасть в вашу локацию до того, как закончит дела в Лотеринге, так как это повлияет на нить игры.

Добавление вещей в инвентарь

Настройка M2DA:

  1. "AreaListName" может быть "any".
  2. Скопируйте PRCSCR-файл в папку "override" вашего модуля.

Скрипт:

//ПОДКЛЮЧАЕМ utility_h ДЛЯ РАБОТЫ ФУНКЦИИ UT_AddItemToInventory()
#include "utility_h"
//ПОДКЛЮЧАЕМ ПОЛЬЗОВАТЕЛЬСКИЙ PLOT-ФАЙЛ
#include "plt_$plot_file_name$"
 
void main()
{
    // ЕСЛИ ФЛАГ ИМЕЕТ ИСТИННОЕ ЗНАЧЕНИЕ ТОГДА ПРЕДМЕТ УЖЕ ВЫДАН РАНЕЕ
    // В ОБРАТНОМ СЛУЧАЕ НАДО ЕГО ВЫДАТЬ
    if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == FALSE )
    {
        UT_AddItemToInventory(R"$item_file_name$.uti");
        // И УСТАНОВИТЬ ЗНАЧЕНИЕ ФЛАГА КАК ИСТИННОЕ ДЛЯ УКАЗАНИЯ О СОСТОЯВШЕЙСЯ ВЫДАЧЕ ПРЕДМЕТА
        WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE );
    }
}
  1. Замените все имена, заключённые между знаками $ на используемые вами имена.

Далее экспортируете скрипт, предмет и запускаете игру. При загрузке первой же локации нужный предмет добавится в инвентарь.

Добавление вещей существующему торговцу или в контейнер

Настройка M2DA:

Кампания Контейнер Тэг контейнера AreaListName
Начало Бодан store_camp_bodahn cam100ar_camp_plains
Начало Интендант в королевском лагере pre100sr_quartermaster pre01al_kings_camp
Пробуждение Yuriah store_vgk100cr_merchant vgk210ar_throne_room
Пробуждение Сундук отряда в Башне Бдения vgk210ip_party_chest vgk210ar_throne_room
Песнь Лелианы Бонни Лем (первая встреча) store_lel00cr_lem lel100ar_market
  1. Создайте файл PRCSCR используя представленную выше таблицу.
  2. Поместите созданный M2DA-файл в папку "override" вашего модуля.

Скрипт:

#include "wrappers_h"
#include "plt_$plot_file_name$"  // ВКЛЮЧАЕМ НУЖНЫЙ PLOT-ФАЙЛ
 
void main()
{
  // ПРОВЕРЯЕМ КАКОЕ-НИБУДЬ УСЛОВИЕ И ЕСЛИ ОНО ИСТИННО, ТО ВЫХОДИМ ИЗ ПРОЦЕДУРЫ (return)
  if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == TRUE ) return;
 
  object oContainer = GetObjectByTag($ContainerTag$);
  // ПРОВЕРИМ КОНТЕЙНЕР, ЕСЛИ ОБЪЕКТ НОРМАЛЬНЫЙ, ТО ДОБАВЛЯЕМ В НЕГО ПРЕДМЕТ
  if (IsObjectValid(oContainer))
  {
    CreateItemOnObject(R"$resource_name$.uti", oContainer, 1, "", TRUE); // ПОВТОРИТЬ НУЖНОЕ КОЛИЧЕСТВО РАЗ
 
    WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE ); // УСТАНОВИТЬ ФЛАГ ДЛЯ БУДУЩЕЙ ПРОВЕРКИ
  }
}
  1. Замените "$plot_file_name$" и "$check_flag_name$" на используемые вами имена plot-файла и его флага.
  2. Замените "$resource_name$" на имя ресурса вашего предмета.
  3. Замените "$ContainerTag$" на тэг контейнера (смотри в таблице выше).

Далее экспортируете скрипт, предмет и запускаете игру. При загрузке нужной локации выбранный вами предмет добавится указанному торговцу (в иной контейнер).

Примечание: При заходе в лагерь отряда в первый раз (после ухода из Лотеринга) и просмотра первоого сна с Архидемоном,это скрипт не сработает (при использовании AreaListName "cam100ar_camp_plains"). Это связано с тем, что локация, используемая для катсцены с Архидемоном, имеет другой AreaListName. Поэтому надо выйти с локации и уже по-нормальному (без катсцены) зайти и скрипт сработает.

Добавление на локацию двери

Требования:

настройка M2DA:

Скрипт: [Undocumented]

Добавление квеста на доску проповедника

Требования:

настройка M2DA:

Скрипт: [Undocumented]


Язык: English  • русский