Difference between revisions of "PRCSCR Script Templates/ru"
m (Небольшие правки) |
m (Перевод) |
||
Line 100: | Line 100: | ||
#Замените "lot100ar_lothering" тэгом локации, где НПС должен быть создан. | #Замените "lot100ar_lothering" тэгом локации, где НПС должен быть создан. | ||
#Замените "joblo.utc" на имя файла ресурса вашего {{ulink|Creature|НПС}}. | #Замените "joblo.utc" на имя файла ресурса вашего {{ulink|Creature|НПС}}. | ||
− | #Вычислите и установите координаты появления НПС в переменной "vJobloLocation" и процедуре "CreateObject". Как это сделать | + | #Вычислите и установите координаты появления НПС в переменной "vJobloLocation" и процедуре "CreateObject". Как это сделать рассказано в описании скрипта [[#Размещение объекта на локации|Размещение объекта на локации]]. |
Экспортируйте скрипт, НПС и запустите игру. Когда вы зайдёте на нужную локацию НПС будет уже там. | Экспортируйте скрипт, НПС и запустите игру. Когда вы зайдёте на нужную локацию НПС будет уже там. | ||
Line 106: | Line 106: | ||
== Активация локации на карте мира == | == Активация локации на карте мира == | ||
− | ''' | + | '''Требования:''' |
+ | # Ваш модуль должен быть расширением основаной кампании (Single Player). | ||
− | ''' | + | '''Требования к PRCSCR-файлу:''' |
− | #AreaListName | + | # "AreaListName" может быть "any". так как этот скрипт должен быть универсальным и управляется Plot-флагом. |
− | # | + | # Скопируйте PRCSCR-файл в папку "override" вашего модуля. |
'''Script:''' | '''Script:''' | ||
Line 120: | Line 121: | ||
void main() | void main() | ||
{ | { | ||
+ | // С ПОМОЩЬЮ PLOT-ФЛАГА ПРОВЕРЯЕМ УСЛОВИЕ | ||
if(WR_GetPlotFlag( PLT_MNP000PT_MAIN_EVENTS, ARCHDEMON_EVENT_ONE) == TRUE ) | if(WR_GetPlotFlag( PLT_MNP000PT_MAIN_EVENTS, ARCHDEMON_EVENT_ONE) == TRUE ) | ||
{ | { | ||
+ | // ДЕЛАЕМ ИКОНКУ ЛОКАЦИИ НА КАРТЕ МИРА АКТИВНОЙ | ||
WR_SetWorldMapLocationStatus(GetObjectByTag(WML_WOW_Custom), WM_LOCATION_ACTIVE); | WR_SetWorldMapLocationStatus(GetObjectByTag(WML_WOW_Custom), WM_LOCATION_ACTIVE); | ||
} | } | ||
Line 127: | Line 130: | ||
</dascript> | </dascript> | ||
− | # | + | #Замените в 1-ой строке "eshmeswp" на тэг вашей иконки локации на карте. Эта иконка должна быть серой, неактивной. Подробную информацию о создании иконок на карте мира вы найдёте по {{ulink|Map|этой ссылке}}. |
− | + | Экспортируйте скрипт, карту и запускайте игру. Иконка локации на карте мира станет активной, когда вы покинете Лотеринг, как и многие другие иконки локаций. Это сделано, чтобы соблюдать ход истории, хотя вы конечно можете выбрать и другой момент, для этого: | |
+ | #Выберите {{ulink|Plot|Plot-файл}} с флагом, в зависимость от которого вы хотите поставить активацию иконки. В данном примере это Plot-файл с основными событиями игры и флаг первого кошмара с с Архидемоном. | ||
+ | #Замените название Plot-файла ("mnp000pt_main_events") в скрипте. Не забудьте оставить префикс "plt_". | ||
+ | #Замените флаг ("ARCHDEMON_EVENT_ONE") на флаг, который вы выбрали в новом Plot-файле. | ||
− | + | Данный метод должен работать для любого Plot-файла. | |
− | + | ||
− | + | ||
− | + | Конечно, для активации иконки локации на карте Plot-файлы совсем не обязательны, ведь можно изначально сделать иконку активной, но этот пример и использование Plot-файлов позволяет привязать ваше расширение к основной кампании и сделать его более логичным. Например ГГ не должен попасть в вашу локацию до того, как закончит дела в Лотеринге, так как это повлияет на нить игры. | |
== Добавление вещей в инвентарь == | == Добавление вещей в инвентарь == |
Revision as of 08:43, 4 June 2012
Шаблоны скриптов PRCSCR |
Начало / Русская DA Builder Wiki / Поделиться ВКонтакте
|
На этой странице собираются скрипты, готовые к использованию в системе PRCSCR в сочетании с M2DA-файлом PRCSCR.
Ссылки:
Содержание:
- Размещение объекта на локации | - Этот скрипт позволяет разместить объект на загружаемой локации. |
- Размещение НПС на локации | - Этот скрипт позволяет разместить НПС на загружаемой локации. |
- Активация локации на карте мира | - Этот скрипт позволяет активировать иконку локации на карте мира. |
- Добавление вещей в инвентарь | - Этот скрипт позволяет добавить любую вещь в инвентарь игрока. |
- Добавление вещей торговцу или в контейнер | - Этот скрипт позволяет добавлять предметы существующим на локации торговцам или в контейнеры. |
- Adding a Working Door into an existing Area | - This Script serves to add a custom Door into a existing Area, that the Player can enter into a custom Area. |
- Adding a Quest to an existing Chanters Board | - This Script serves to add a new Quest to a existing Chanters Board, at any chosen time into the Game. |
Размещение объекта на локации
Требования к PRCSCR-файлу:
- "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".
Размещение НПС на локации
Требования к PRCSCR-файлу:
- "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).
Требования к PRCSCR-файлу:
- "AreaListName" может быть "any". так как этот скрипт должен быть универсальным и управляется Plot-флагом.
- Скопируйте PRCSCR-файл в папку "override" вашего модуля.
Script:
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-файлов позволяет привязать ваше расширение к основной кампании и сделать его более логичным. Например ГГ не должен попасть в вашу локацию до того, как закончит дела в Лотеринге, так как это повлияет на нить игры.
Добавление вещей в инвентарь
Requirements:
M2DA Setup:
- AreaListName is "any".
- Copy the GDA into your modules override folder.
Script:
//include utility_h for the UT_AddItemToInventory() function. #include "utility_h" //include the custom made plot file #include "plt_$plot_file_name$" void main() { // If plot flag is TRUE then item already given. // Otherwise add item to inventory. if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == FALSE ) { UT_AddItemToInventory(R"$item_file_name$.uti"); //Set the plot flag to TRUE to indicate that the item was given. WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE ); } }
- Replace everything between and including the $ signs with appropriate names (without the file extensions).
Adding an Item to an existing Vendor or Container
Requirements:
M2DA Setup:
Campaign | Container | ContainerTag | AreaListName |
---|---|---|---|
Origins | Bodahn | store_camp_bodahn | cam100ar_camp_plains |
Origins | daytime King's Camp quartermaster | pre100sr_quartermaster | pre01al_kings_camp |
Awakening | Yuriah | store_vgk100cr_merchant | vgk210ar_throne_room |
Awakening | Party Chest in Vigil's Keep | vgk210ip_party_chest | vgk210ar_throne_room |
Leliana's Song | first Lem encounter | store_lel00cr_lem | lel100ar_market |
- Create a PRCSCR M2DA override using the desired AreaListName from the above table
- Copy this new PRCSCR M2DA into your module's override folder (AddIns\{YourMod}\core\override)
Script:
#include "wrappers_h" #include "plt_$plot_file_name$" // include your custom plot void main() { 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); // repeat this for each item WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE ); } }
- Replace "$plot_file_name$" and "$check_flag_name$" with the custom plot and plot flags you create for your module.
- Replace "$resource_name$" with the resource name of your custom item.
- Replace "$ContainerTag$" with the desired container tag from the table in the M2DA setup section.
- The very first time you go to the party camp in Origins (after leaving Lothering) and view the Archdemon cutscene, this script will NOT run when using "cam100ar_camp_plains" as the AreaListName. This is because the cutscene version of the camp is actually a different area. In this case you must exit and return to the "normal" (non-cutscene) party camp for the script to run for the first time.
Adding a Working Door into an existing Area
Requirements:
M2DA Setup:
Script: [Undocumented]
Adding a Quest to an existing Chanters Board
Requirements:
M2DA Setup:
Script: [Undocumented]
Язык: | English • русский |
---|