Difference between revisions of "PRCSCR Script Templates/ru"

From Dragon Age Toolset Wiki
Jump to: navigation, search
m (Edit)
m (Небольшие правки)
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{rupage|Шаблоны скриптов PRCSCR|Скрипты|Требуется перевод}}
+
{{rupage|Шаблоны скриптов PRCSCR|Система PRCSCR|Скрипты}}
This page serves as a repository for ready to use M2DA's and Scripts to use in conjunction with [[PRCSCR]] M2DA's when adding custom content to the game.  
+
На этой странице собираются скрипты, готовые к использованию в {{ulink|PRCSCR|системе PRCSCR}} в сочетании с {{ulink|PRCSCR.xls|M2DA-файлом PRCSCR}}.
  
References:
+
'''Ссылки:'''
*See Main Article: ''[[PRCSCR]]''
+
* {{ulink|PRCSCR|Система PRCSCR}}.
*See ''[[PRCSCR.xls]]'' for details about that M2DA, or ''[[2DA]]'' for an explanation of 2DA's as a whole
+
* {{ulink|PRCSCR.xls|PRCSCR-файл.}}
*To create a Script, right click in the Resourcepalette and select "New/Script" , or see ''[[Designer Resources]]'' for such Resources as a whole.
+
* {{ulink|2DA|Таблицы 2DA}}.
 +
* {{ulink|Script|Работа со скриптами}}.
  
 
{{ExTOC start}}
 
{{ExTOC start}}
{{ExTOC column|Adding an Item to an existing Vendor or Container|This Script serves to add any Item into a existing Vendors Inventory, as long the Vendor exists}}
+
{{ExTOC column|Размещение объекта на локации|этот скрипт позволяет разместить объект на загружаемой локации.}}
 +
{{ExTOC column|Размещение НПС на локации|этот скрипт позволяет разместить НПС на загружаемой локации.}}
 +
{{ExTOC column|Активация иконки локации на карте мира|этот скрипт позволяет активировать иконку локации на карте мира.}}
 +
{{ExTOC column|Добавление вещей в инвентарь|этот скрипт позволяет добавить любую вещь в инвентарь игрока.}}
 +
{{ExTOC column|Добавление вещей существующему торговцу или в контейнер|этот скрипт позволяет добавлять предметы существующим на локации торговцам или в контейнеры.}}
 +
{{ExTOC column|Добавление активной двери на локацию|этот скрипт добавит дверь, которая может быть использована для перехода игрока на другую локацию.}}
 +
{{ExTOC column|Добавление квеста на доску проповедника|этот скрипт позволяет добавить новое задание на существующую доску проповедника.}}
 
{{ExTOC end}}
 
{{ExTOC end}}
  
<!-- No Table of contents... but a neat custom one -->
 
 
__NOTOC__
 
__NOTOC__
'''Contents:'''
+
== Размещение объекта на локации ==
{| style="background-color:#eeeeee; border:2px #999999 solid; padding:4px; margin:4px" border="3"
+
| width=300 |[[PRCSCR Script Templates#Adding a placeable into an existing Area|1. Adding a placeable into an existing Area]]
+
| width=800 |This Script serves to add a placeable of your choice into an Area of choice. ''(non removable)''
+
|-
+
| [[PRCSCR Script Templates#Adding a NPC into an existing Area|2. Adding a NPC into an existing Area]]
+
| This Script serves to any custom NPC or Creature to a Area of choice. ''(removable)''
+
|-
+
| [[PRCSCR Script Templates#Activating a Waypoint on the Worldmap|3. Activating a Waypoint on the Worldmap]]
+
| This Script serves to activate a custom Waypoint (Map Pin) of choice ,when leaving Lothering or at any other time into the Game.
+
|-
+
| [[PRCSCR Script Templates#Adding an Item into the Players Inventory|4. Adding an Item into the Players Inventory]]
+
| This Script serves to instantly add an Item into the Players Inventory.
+
|-
+
| [[PRCSCR Script Templates#Adding an Item to an existing Vendor or Container|5. Adding an Item to an existing Vendor or Container]]
+
| This Script serves to add any Item into a existing Vendors Inventory, as long the Vendor exists.
+
|-
+
| 6. 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.
+
|-
+
| 7. 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.
+
|-
+
| 8. ...
+
| ...
+
|}
+
 
+
 
+
== Adding a placeable into an existing Area ==
+
 
+
'''M2DA Setup:'''
+
  
#AreaListName must not be "any". Chose a specific one.
+
'''Настройка M2DA:'''
#Copy the GDA into your modules override folder.
+
# "AreaListName" не может быть "any". Укажите определённую локацию.
 +
# Скопируйте PRCSCR-файл в папку "override" вашего модуля.
  
'''Script:''' (As taken from the Storage Chest mod a kind Bioware employee made :o)
+
'''Скрипт:''' (пример взят из мода "Storage Chest", созданного одним из сотрудников Bioware)
  
 
<dascript>
 
<dascript>
//const string TAL_STORAGE_CHEST_SPAWNED = "TAL_STORAGE_CHEST_SPAWNED";
 
 
const string TAL_IP_STORAGE_CHEST = "tal_ip_storage_chest";
 
const string TAL_IP_STORAGE_CHEST = "tal_ip_storage_chest";
 
const resource TAL_RESOURCE_IP_STORAGE_CHEST = R"tal_ip_storage_chest.utp";
 
const resource TAL_RESOURCE_IP_STORAGE_CHEST = R"tal_ip_storage_chest.utp";
Line 58: Line 34:
 
{
 
{
 
     object oMainControlled = GetMainControlled();
 
     object oMainControlled = GetMainControlled();
 +
    // ПРОВЕРЯЕМ, ЕСТЬ ЛИ В ЛОКАЦИИ  ОБЪЕКТ С ТАКИМ ТЕГОМ
 
     object oChest = UT_GetNearestObjectByTag(oMainControlled, TAL_IP_STORAGE_CHEST);
 
     object oChest = UT_GetNearestObjectByTag(oMainControlled, TAL_IP_STORAGE_CHEST);
         
 
 
      
 
      
     //DisplayFloatyMessage(oMainControlled, "storage script working", FLOATY_MESSAGE, 16777215, 30.0);
+
     //DisplayFloatyMessage(oMainControlled, "Storage script working", FLOATY_MESSAGE, 16777215, 30.0);
 
      
 
      
 +
    // ЕСЛИ ТАКОГО ОБЪЕКТА ЕЩЁ НЕТ, ТО СОЗДАЁМ ЕГО
 
     if (!IsObjectValid(oChest))
 
     if (!IsObjectValid(oChest))
 
     {
 
     {
Line 68: Line 45:
 
         CreateObject(OBJECT_TYPE_PLACEABLE, TAL_RESOURCE_IP_STORAGE_CHEST, lSpawn);           
 
         CreateObject(OBJECT_TYPE_PLACEABLE, TAL_RESOURCE_IP_STORAGE_CHEST, lSpawn);           
 
          
 
          
         //DisplayFloatyMessage(oMainControlled, "storage chest created", FLOATY_MESSAGE, 16777215, 30.0);
+
         //DisplayFloatyMessage(oMainControlled, "Storage script working", FLOATY_MESSAGE, 16777215, 30.0);
 
     }
 
     }
 
}
 
}
 
</dascript>
 
</dascript>
  
#Replace "tal_ip_storage_chest" in the 2nd line with the "Tag" of your own placeable. (only small letters allowed)
+
#Замените "tal_ip_storage_chest" в 1-й строке на тэг объекта, который вы хотите разместить (обязательно в нижнем регистре).
#Replace "tal_ip_storage_chest.utp" in 3rd line with the Resources Filename of your placable.
+
#Замените "tal_ip_storage_chest.utp" во 2-й строке на имя файла вашего объекта.
#Exchange the (4) numbers after it sais "Vector" ,which should be the location of your placable. How to determine?
+
#В 13-ой строке укажите координаты, по которым будет размещён объект. Как определить координаты? В следующем пункте.
#Create a temporary duplicate of the specific Area, and add the placeable until you see fit. (delete this Area afterwards, do not export)
+
#Создайте временный дубликат локации (можете и в оригинале сделать, но не сохраняйте изменения) и поместите объект в нужное место (впоследствии не экспортируйте изменённую локацию).
#Note down the numbers in the Object Inspector, and get the first 3 numbers of Position, and the 4rth Number from Rotation. (only 1 number, the first)
+
#В инспекторе свойств объекта найдите свойство "Position". Это координаты позиции объекта, замените на них числа в скобках за словом "Vector".
#Rotation needs to be recalculated before entering it into the script. For positive angles do (180-angle). For negative angles do (-180-(-angle)).
+
#В инспекторе свойств объекта найдите свойство "Rotation" (вращение). Это свойство определяет то, куда объект направлен своим фэйсом. На значение этого свойства поменяйте третий аргумент процедуры "Location". Правда перед его указанием в скрипте это свойство надо пересчитать ([[User:Kelamor|kelamor]] - не понял как). For positive angles do (180-angle). For negative angles do (-180-(-angle)).
  
Export the script, the placeable ,and start the game. When you arrive at the specific Area in game, the Placeable will be there.
+
Далее экспортируете скрипт, объект и запускаете игру. Когда вы войдёте в локацию, с которой ассоциируете этот скрипт, ваш объект появится в нужном месте.
  
'''Note:''' This method prevents removal of the placable. Check out a Plot driven method.
+
'''Примечание:'''  
 +
* Данный метод позволяет избежать дублирования объектов на локации с помощью функции "IsObjectValid". Такого же результат можно добиться и с помощью {{ulink|Plot|Plot-файла}}.
 +
* Если база не русифицирована, то удалите из скрипта русские примечания.
 +
* Для проверки работы скрипта можно раскомментировать строки с функцией "DisplayFloatyMessage". Тогда скрипт сообщит вам при срабатывании - "Storage script working", и при создании объекта - "Storage script working".
 +
* При указании числовых значений в функции "Location" обязательно указывайте с точностью до сотых и обязательно с точкой. Если в инспекторе объекта целое число, то добавьте к нему ".00".
  
== Adding a NPC into an existing Area ==
+
== Размещение НПС на локации ==
  
'''M2DA Setup:'''
+
'''Настройка M2DA:'''
 +
# "AreaListName" может быть "any". Этот скрипт управляется Plot-флагом.
 +
# # Скопируйте PRCSCR-файл в папку "override" вашего модуля.
  
#AreaListName must be "any". This Script is Plot driven.
+
'''Скрипт:'''
#Copy the GDA into your modules override folder.
+
 
+
'''Script:'''
+
  
 
<dascript>
 
<dascript>
// this is the name of a precreated plot file "joblos_quest" prefixed with the special "plt_"
+
// ЭТО НАЗВАНИЕ Plot-ФАЙЛА "joblos_quest" С УКАЗАНИЕМ СПЕЦИАЛЬНОГО ПРЕФИКСА "plt_".
// "plt_" + quest name allows you to reference the flag names as constants.
+
// УКАЗАНИЕ ПРЕФИКСА ОБЯЗАТЕЛЬНО ДЛЯ ТОГО, ЧТОБЫ ИГРА СМОГЛА ОБРАЩАТЬСЯ К ФЛАГАМ Plot-ФАЙЛА КАК К КОНСТАНТАМ.
 
#include "plt_joblos_quest"  
 
#include "plt_joblos_quest"  
 
#include "wrappers_h"
 
#include "wrappers_h"
Line 101: Line 81:
 
void main()
 
void main()
 
{
 
{
     //Check whether we've added Joblo already.
+
     // ПРОВЕРЯЕМ ФЛАГ И ВЫЯСНЯЕМ, НЕ ПОМЕЩЁН ЛИ Joblo НА ЛОКАЦИЮ ПРИ ПРЕДЫДУЩИХ ЗАХОДАХ
 
     if (WR_GetPlotFlag(PLT_JOBLOS_QUEST, JOBLO_ADDED_TO_TOWN) == FALSE)
 
     if (WR_GetPlotFlag(PLT_JOBLOS_QUEST, JOBLO_ADDED_TO_TOWN) == FALSE)
 
     {
 
     {
         object oTown = GetObjectByTag("lot100ar_lothering"); //An area's tag is the same as its resource name
+
         object oTown = GetObjectByTag("lot100ar_lothering"); //ТЭГ ЛОКАЦИИ ИДЕНТИЧЕН НАИМЕНОВАНИЮ ЕЁ РЕСУРСА.
         vector vJobloLocation = Vector(126.745f, 120.724f, 0.460568f); // See below for how to get these coordinates
+
         vector vJobloLocation = Vector(126.745f, 120.724f, 0.460568f);
  
         CreateObject(
+
         CreateObject(OBJECT_TYPE_CREATURE, R"joblo.utc", Location(oTown, vJobloLocation, 180.0f));
            OBJECT_TYPE_CREATURE,
+
            R"joblo.utc",
+
            Location(oTown, vJobloLocation, 180.0f) //See below for how to get the value for orientation
+
        ); //this semicolom was missing and caused errors
+
  
 
         WR_SetPlotFlag("joblos_quest", JOBLO_ADDED_TO_TOWN, TRUE);
 
         WR_SetPlotFlag("joblos_quest", JOBLO_ADDED_TO_TOWN, TRUE);
Line 118: Line 94:
 
</dascript>
 
</dascript>
  
#Replace "joblos_quest" (3x) with the name of your Plot.
+
#Замените "joblos_quest" на название вашего Plot-файла.
#Replace "JOBLO_ADDED_TO_TOWN" (2x) with a custom Flag you create in your Plot.
+
#Замените "JOBLO_ADDED_TO_TOWN" на название флага, определяющего, что НПС уже создан на локации.
#Replace "lot100ar_lothering" with the Tag of an Area ,the NPC should spawn in.
+
#Замените "lot100ar_lothering" тэгом локации, где НПС должен быть создан.
#Replace "joblo.utc" with the filename of your [[Creature]].
+
#Замените "joblo.utc" на имя файла ресурса вашего {{ulink|Creature|НПС}}.
#Exchange the (4) numbers ,which should be the location of your placable. How to determine?
+
#Вычислите и установите координаты появления НПС в переменной "vJobloLocation" и процедуре "CreateObject". Как это сделать рассказано в описании скрипта [[#Размещение объекта на локации|Размещение объекта на локации]].
#Create a temporary duplicate of the specific Area, and add the NPC until you see fit. (delete this Area afterwards, do not export)
+
#Note down the numbers in the Object Inspector, and get the first 3 numbers of Position, and the 4rth Number from Rotation. (only 1 number, the first)
+
#Rotation needs to be recalculated before entering it into the script. For positive angles do (180-angle). For negative angles do (-180-(-angle)).
+
  
Export the script, the creature ,and start the game. When you arrive at the specific Area in game, the [[Creature]] (Monsters or NPCs alike) will be there.
+
Экспортируйте скрипт, НПС и запустите игру. Когда вы зайдёте на нужную локацию НПС будет уже там.
  
== Activating a Waypoint on the Worldmap ==
+
== Активация иконки локации на карте мира ==
  
'''Requirements:''' Your module must extend Single Player.  
+
'''Требования:'''  
 +
# Ваш модуль должен быть расширением основаной кампании (Single Player).
  
'''M2DA Setup:'''
+
'''Настройка M2DA:'''
 +
# "AreaListName" может быть "any", так как этот скрипт должен быть универсальным и управляется Plot-флагом.
 +
# Скопируйте PRCSCR-файл в папку "override" вашего модуля.
  
#AreaListName must be "any". Because Waypoint activation should be universal and it is Plot driven.
+
'''Скрипт:'''
#Copy the GDA into your modules override folder.
+
  
'''Script:'''
 
 
<dascript>
 
<dascript>
 
const string WML_WOW_Custom = "eshmeswp";
 
const string WML_WOW_Custom = "eshmeswp";
Line 145: Line 119:
 
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 152: Line 128:
 
</dascript>
 
</dascript>
  
#Replace "eshmeswp" in the 1st line with the "Tag" of your Waypoint (Map Pin) which u created. That Map Pin can be greyed out or inactive or so. Map Pin information can be found at: [[Map]].
+
#Замените в 1-ой строке "eshmeswp" на тэг вашей иконки локации на карте. Эта иконка должна быть серой, неактивной. Подробную информацию о создании иконок на карте мира вы найдёте по {{ulink|Map|этой ссылке}}.
  
Export the script, the Map ,and start the game. The Waypoint will now be activated once you leave Lothering, just like the other main Waypoints. This is to get in line with the Story. However to change the time of it happening..
+
Экспортируйте скрипт, карту и запускайте игру. Иконка локации на карте мира станет активной, когда вы покинете Лотеринг, как и многие другие иконки локаций. Это сделано, чтобы соблюдать ход истории, хотя вы конечно можете выбрать и другой момент, для этого:
 +
#Выберите {{ulink|Plot|Plot-файл}} с флагом, в зависимость от которого вы хотите поставить активацию иконки. В данном примере это Plot-файл с основными событиями игры и флаг первого кошмара с с Архидемоном.
 +
#Замените название Plot-файла ("mnp000pt_main_events") в скрипте. Не забудьте оставить префикс "plt_".
 +
#Замените флаг ("ARCHDEMON_EVENT_ONE") на флаг, который вы выбрали в новом Plot-файле.
  
#Choose which [[Plot]] should activate the Waypoint. The above example uses the Archdemon quest, when your nightmare triggers for example.
+
Данный метод должен работать для любого Plot-файла.  
#Exchange "mnp000pt_main_events" in the 2nd and 6th line with the name of that other [[Plot]]. Leaving the "plt_" there.
+
#Exchange "ARCHDEMON_EVENT_ONE" with a "Flag" of your choice from that Plot.
+
  
This "should" work for any plot. Actually, waypoints dont need all this PRCSCR stuff and can be set "Active" in the first place. But the above example is to get in line with the Main Campaign, and potential gamebreaking Plot conflicts if able to leave Lothering too early.
+
Конечно, для активации иконки локации на карте Plot-файлы совсем не обязательны, ведь можно изначально сделать иконку активной, но этот пример и использование Plot-файлов позволяет привязать ваше расширение к основной кампании и сделать его более логичным. Например ГГ не должен попасть в вашу локацию до того, как закончит дела в Лотеринге, так как это повлияет на нить игры.  
  
== Adding an Item into the Players Inventory ==
+
== Добавление вещей в инвентарь ==
  
'''Requirements:'''
+
'''Настройка M2DA:'''
 +
# "AreaListName" может быть "any".
 +
# Скопируйте PRCSCR-файл в папку "override" вашего модуля.
  
'''M2DA Setup:'''
+
'''Скрипт:'''
#AreaListName is "any".
+
#Copy the GDA into your modules override folder.
+
 
+
'''Script:'''
+
 
<dascript>
 
<dascript>
//include utility_h for the UT_AddItemToInventory() function.
+
//ПОДКЛЮЧАЕМ utility_h ДЛЯ РАБОТЫ ФУНКЦИИ UT_AddItemToInventory()
 
#include "utility_h"
 
#include "utility_h"
//include the custom made plot file
+
//ПОДКЛЮЧАЕМ ПОЛЬЗОВАТЕЛЬСКИЙ PLOT-ФАЙЛ
 
#include "plt_$plot_file_name$"
 
#include "plt_$plot_file_name$"
  
 
void main()
 
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 )
 
     if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == FALSE )
 
     {
 
     {
 
         UT_AddItemToInventory(R"$item_file_name$.uti");
 
         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 );
 
         WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE );
 
     }
 
     }
 
}
 
}
 
</dascript>
 
</dascript>
# 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:'''
+
'''Настройка M2DA:'''
  
{| border="1"
+
{| style="border:thin solid grey" cellpadding="3" cellspacing="0"
! Campaign !! Container !! ContainerTag !! AreaListName
+
 
|-
 
|-
|Origins || Bodahn || store_camp_bodahn || cam100ar_camp_plains
+
|style="background-color:#EEF;border-bottom:thin solid grey;border-right:thin solid grey"|'''Кампания'''
 +
|style="background-color:#EEF;border-bottom:thin solid grey;border-right:thin solid grey"|'''Контейнер'''
 +
|style="background-color:#EEF;border-bottom:thin solid grey;border-right:thin solid grey"|'''Тэг контейнера'''
 +
|style="background-color:#EEF;border-bottom:thin solid grey"|'''AreaListName'''
 
|-
 
|-
|Origins || daytime King's Camp quartermaster || pre100sr_quartermaster || pre01al_kings_camp
+
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Начало
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Бодан
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|store_camp_bodahn
 +
|style="border-bottom:thin solid grey"|cam100ar_camp_plains
 
|-
 
|-
|Awakening || Yuriah || store_vgk100cr_merchant || vgk210ar_throne_room
+
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Начало
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Интендант в королевском лагере
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|pre100sr_quartermaster
 +
|style="border-bottom:thin solid grey"|pre01al_kings_camp
 
|-
 
|-
|Awakening || Party Chest in Vigil's Keep || vgk210ip_party_chest || vgk210ar_throne_room
+
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Пробуждение
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Yuriah
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|store_vgk100cr_merchant
 +
|style="border-bottom:thin solid grey"|vgk210ar_throne_room
 
|-
 
|-
|Leliana's Song || first Lem encounter || store_lel00cr_lem || lel100ar_market
+
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Пробуждение
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|Сундук отряда в Башне Бдения
 +
|style="border-bottom:thin solid grey;border-right:thin solid grey"|vgk210ip_party_chest
 +
|style="border-bottom:thin solid grey"|vgk210ar_throne_room
 +
|-
 +
|style="border-right:thin solid grey"|Песнь Лелианы
 +
|style="border-right:thin solid grey"|Бонни Лем (первая встреча)
 +
|style="border-right:thin solid grey"|store_lel00cr_lem
 +
|lel100ar_market
 
|}
 
|}
  
#Create a [[PRCSCR.xls|PRCSCR M2DA override]] using the desired AreaListName from the above table
+
# Создайте {{ulink|PRCSCR.xls|файл PRCSCR}} используя представленную выше таблицу.
#Copy this new PRCSCR M2DA into your module's override folder (AddIns\{YourMod}\core\override)
+
# Поместите созданный M2DA-файл в папку "override" вашего модуля.
 
+
'''Script:'''
+
  
 +
'''Скрипт:'''
 
<dascript>
 
<dascript>
 
#include "wrappers_h"
 
#include "wrappers_h"
#include "plt_$plot_file_name$"  // include your custom plot
+
#include "plt_$plot_file_name$"  // ВКЛЮЧАЕМ НУЖНЫЙ PLOT-ФАЙЛ
  
 
void main()
 
void main()
 
{
 
{
 +
  // ПРОВЕРЯЕМ КАКОЕ-НИБУДЬ УСЛОВИЕ И ЕСЛИ ОНО ИСТИННО, ТО ВЫХОДИМ ИЗ ПРОЦЕДУРЫ (return)
 
   if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == TRUE ) return;
 
   if ( WR_GetPlotFlag( PLT_$plot_file_name$, $check_flag_name$ ) == TRUE ) return;
  
 
   object oContainer = GetObjectByTag($ContainerTag$);
 
   object oContainer = GetObjectByTag($ContainerTag$);
 
+
  // ПРОВЕРИМ КОНТЕЙНЕР, ЕСЛИ ОБЪЕКТ НОРМАЛЬНЫЙ, ТО ДОБАВЛЯЕМ В НЕГО ПРЕДМЕТ
 
   if (IsObjectValid(oContainer))
 
   if (IsObjectValid(oContainer))
 
   {
 
   {
     CreateItemOnObject(R"$resource_name$.uti", oContainer, 1, "", TRUE); // repeat this for each item
+
     CreateItemOnObject(R"$resource_name$.uti", oContainer, 1, "", TRUE); // ПОВТОРИТЬ НУЖНОЕ КОЛИЧЕСТВО РАЗ
  
     WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE );
+
     WR_SetPlotFlag( PLT_$plot_file_name$, $check_flag_name$, TRUE ); // УСТАНОВИТЬ ФЛАГ ДЛЯ БУДУЩЕЙ ПРОВЕРКИ
 
   }
 
   }
 
}
 
}
 
</dascript>
 
</dascript>
  
#Replace "$plot_file_name$" and "$check_flag_name$" with the custom [[Plot#Scripting|plot and plot flags]] you create for your module.
+
# Замените "$plot_file_name$" и "$check_flag_name$" на используемые вами имена [[Plot/ru#Скрипты|plot-файла и его флага]].
#Replace "$resource_name$" with the resource name of your custom item.
+
# Замените "$resource_name$" на имя ресурса вашего предмета.
#Replace "$ContainerTag$" with the desired container tag from the table in the M2DA setup section.
+
# Замените "$ContainerTag$" на тэг контейнера (смотри в таблице выше).
#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.
+
 
 +
Далее экспортируете скрипт, предмет и запускаете игру. При загрузке нужной локации выбранный вами предмет добавится указанному торговцу (в иной контейнер).
 +
 
 +
'''Примечание:'''
 +
При заходе в лагерь отряда в первый раз (после ухода из Лотеринга) и просмотра первоого сна с Архидемоном,это скрипт не сработает (при использовании AreaListName "cam100ar_camp_plains"). Это связано с тем, что локация, используемая для катсцены с Архидемоном, имеет другой AreaListName. Поэтому надо выйти с локации и уже по-нормальному (без катсцены) зайти и скрипт сработает.
  
== Adding a Working Door into an existing Area ==
+
== Добавление на локацию двери ==
  
'''Requirements:'''
+
'''Требования:'''
  
'''M2DA Setup:'''
+
'''настройка M2DA:'''
  
'''Script:''' {{undocumented}}
+
'''Скрипт:''' {{undocumented}}
  
== Adding a Quest to an existing Chanters Board ==
+
== Добавление квеста на доску проповедника ==
  
'''Requirements:'''
+
'''Требования:'''
  
'''M2DA Setup:'''
+
'''настройка M2DA:'''
  
'''Script:''' {{undocumented}}
+
'''Скрипт:''' {{undocumented}}
  
 
{{languages|PRCSCR_Script_Templates}}
 
{{languages|PRCSCR_Script_Templates}}
[[category:tutorials]]
 
[[Category:Scripts]]
 
[[Category:Pages with example scripts]]
 

Latest revision as of 01:14, 14 June 2012

Шаблоны скриптов 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  • русский