PRCSCR Script Templates/ru
Шаблоны скриптов PRCSCR |
Начало / Русская DA Builder Wiki / Поделиться ВКонтакте
|
На этой странице собираются скрипты, готовые к использованию в системе PRCSCR в сочетании с M2DA-файлом PRCSCR.
Ссылки:
Содержание:
- Размещение объекта на локации | - этот скрипт позволяет разместить объект на загружаемой локации. |
- Размещение НПС на локации | - этот скрипт позволяет разместить НПС на загружаемой локации. |
- Активация иконки локации на карте мира | - этот скрипт позволяет активировать иконку локации на карте мира. |
- Добавление вещей в инвентарь | - этот скрипт позволяет добавить любую вещь в инвентарь игрока. |
- Добавление вещей существующему торговцу или в контейнер | - этот скрипт позволяет добавлять предметы существующим на локации торговцам или в контейнеры. |
- Добавление активной двери на локацию | - этот скрипт добавит дверь, которая может быть использована для перехода игрока на другую локацию. |
- Добавление квеста на доску проповедника | - этот скрипт позволяет добавить новое задание на существующую доску проповедника. |
Размещение объекта на локации
Настройка M2DA:
- "AreaListName" не может быть "any". Укажите определённую локацию.
- Скопируйте 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); } }
- Замените "tal_ip_storage_chest" в 1-й строке на тэг объекта, который вы хотите разместить (обязательно в нижнем регистре).
- Замените "tal_ip_storage_chest.utp" во 2-й строке на имя файла вашего объекта.
- В 13-ой строке укажите координаты, по которым будет размещён объект. Как определить координаты? В следующем пункте.
- Создайте временный дубликат локации (можете и в оригинале сделать, но не сохраняйте изменения) и поместите объект в нужное место (впоследствии не экспортируйте изменённую локацию).
- В инспекторе свойств объекта найдите свойство "Position". Это координаты позиции объекта, замените на них числа в скобках за словом "Vector".
- В инспекторе свойств объекта найдите свойство "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:
- "AreaListName" может быть "any". Этот скрипт управляется Plot-флагом.
- # Скопируйте 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); } }
- Замените "joblos_quest" на название вашего Plot-файла.
- Замените "JOBLO_ADDED_TO_TOWN" на название флага, определяющего, что НПС уже создан на локации.
- Замените "lot100ar_lothering" тэгом локации, где НПС должен быть создан.
- Замените "joblo.utc" на имя файла ресурса вашего НПС (en).
- Вычислите и установите координаты появления НПС в переменной "vJobloLocation" и процедуре "CreateObject". Как это сделать рассказано в описании скрипта Размещение объекта на локации.
Экспортируйте скрипт, НПС и запустите игру. Когда вы зайдёте на нужную локацию НПС будет уже там.
Активация иконки локации на карте мира
Требования:
- Ваш модуль должен быть расширением основаной кампании (Single Player).
Настройка M2DA:
- "AreaListName" может быть "any", так как этот скрипт должен быть универсальным и управляется Plot-флагом.
- Скопируйте 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-ой строке "eshmeswp" на тэг вашей иконки локации на карте. Эта иконка должна быть серой, неактивной. Подробную информацию о создании иконок на карте мира вы найдёте по этой ссылке (en).
Экспортируйте скрипт, карту и запускайте игру. Иконка локации на карте мира станет активной, когда вы покинете Лотеринг, как и многие другие иконки локаций. Это сделано, чтобы соблюдать ход истории, хотя вы конечно можете выбрать и другой момент, для этого:
- Выберите Plot-файл с флагом, в зависимость от которого вы хотите поставить активацию иконки. В данном примере это Plot-файл с основными событиями игры и флаг первого кошмара с с Архидемоном.
- Замените название Plot-файла ("mnp000pt_main_events") в скрипте. Не забудьте оставить префикс "plt_".
- Замените флаг ("ARCHDEMON_EVENT_ONE") на флаг, который вы выбрали в новом Plot-файле.
Данный метод должен работать для любого Plot-файла.
Конечно, для активации иконки локации на карте Plot-файлы совсем не обязательны, ведь можно изначально сделать иконку активной, но этот пример и использование Plot-файлов позволяет привязать ваше расширение к основной кампании и сделать его более логичным. Например ГГ не должен попасть в вашу локацию до того, как закончит дела в Лотеринге, так как это повлияет на нить игры.
Добавление вещей в инвентарь
Настройка M2DA:
- "AreaListName" может быть "any".
- Скопируйте 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 ); } }
- Замените все имена, заключённые между знаками $ на используемые вами имена.
Далее экспортируете скрипт, предмет и запускаете игру. При загрузке первой же локации нужный предмет добавится в инвентарь.
Добавление вещей существующему торговцу или в контейнер
Настройка 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 |
- Создайте файл PRCSCR используя представленную выше таблицу.
- Поместите созданный 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 ); // УСТАНОВИТЬ ФЛАГ ДЛЯ БУДУЩЕЙ ПРОВЕРКИ } }
- Замените "$plot_file_name$" и "$check_flag_name$" на используемые вами имена plot-файла и его флага.
- Замените "$resource_name$" на имя ресурса вашего предмета.
- Замените "$ContainerTag$" на тэг контейнера (смотри в таблице выше).
Далее экспортируете скрипт, предмет и запускаете игру. При загрузке нужной локации выбранный вами предмет добавится указанному торговцу (в иной контейнер).
Примечание: При заходе в лагерь отряда в первый раз (после ухода из Лотеринга) и просмотра первоого сна с Архидемоном,это скрипт не сработает (при использовании AreaListName "cam100ar_camp_plains"). Это связано с тем, что локация, используемая для катсцены с Архидемоном, имеет другой AreaListName. Поэтому надо выйти с локации и уже по-нормальному (без катсцены) зайти и скрипт сработает.
Добавление на локацию двери
Требования:
настройка M2DA:
Скрипт: [Undocumented]
Добавление квеста на доску проповедника
Требования:
настройка M2DA:
Скрипт: [Undocumented]
Язык: | English • русский |
---|