Игроделу | Торговцы | Neverwinter Nights
По сайту
Главная
Рыцарская сага
Файлы
Neverwinter Nights
Гостевая книга
Форум сайта

По теме
Игроделу
Редактор фракций
Редактор журнала
Редактор диалога
Редактор скрипта
Модуль и области
Двери
Монстры
Встречи
Предметы
Торговцы
Объекты
Триггеры
Звуки
Тайлы
Хак файлы
Скриптинг
Neverwinter NightsторговцыИгроделу

Торговцы

Торговцы


- т.е. магазины, создаются очень просто… Достаточно выбрать из палитры нужный и поставить на место, предполагаемой торговли. Затем, кликнув правой кнопкой по точке магазина, выбрав опцию “Настройка Магазина”, откроется окно, где можно отредактировать начальный диалог торговца, проставить имя этого диалога, а также скрипт, который запустит торговлю. Если включить галку “использовать оценочные проверки”, то это будет магазин с проверкой героя на умение торговли… Кликнув кнопку “Вперед” можно выбрать персонаж торговца. Выбрав нужного, опять кликаем “Вперед” и задаем фракцию этого торговца. В завершение кликаем “Закончить”, и у вас уже готов новый магазин… Осталось только настроить цены (процент от реальной стоимости вещи) и если нужно, то дополнительный товар, которым он должен торговать, кнопка “Инвентарь…”. Включив галку “Купить краденные товары”, вы получите скупщика краденных вещей… В таком варианте существует возможность установить отдельную цену скупки краденного.

торговцы

Все это обычно не вызывает проблем, поэтому хочется поговорить немного о другом… Если у вас в модуле будет множество магазинов, то при такой схеме у вас будет куча ненужных диалогов и куча подобных скриптов. Ведь в общем таким способом мы меняем тэг магазина, да еще оценочную характеристику, значит вполне хватит всего двух скриптов для открытия магазинов, и тэг их тут ни при чем. Как такое реализовать? Вот два простеньких скрипта:

/////////////////////////////////////
//:: Магазин без оценочной проверки
//:: File name: Open_store_no
/////////////////////////////////////
void main()
{
 object oStore = GetNearestObject(OBJECT_TYPE_STORE);
 if (GetIsObjectValid(oStore))
   OpenStore(oStore, GetPCSpeaker());
 else
   ActionSpeakStringByStrRef(53090, TALKVOLUME_TALK);
}

/////////////////////////////////////
//:: Магазин c оценочной проверкой
//:: File name: Open_store_yes
/////////////////////////////////////
#include "nw_i0_plot"
void main()
{
 object oStore = GetNearestObject(OBJECT_TYPE_STORE);
 if (GetIsObjectValid(oStore))
   gplotAppraiseOpenStore(oStore, GetPCSpeaker());
 else
   ActionSpeakStringByStrRef(53090, TALKVOLUME_TALK);
}

Теперь достаточно иметь просто НПС с диалогом о торговле и одним из этих скриптов. Главное, чтобы торговец находился рядом с точкой магазина. Причем цены и прочие настройки магазина, останутся такими, какими вы их настроили. Все наверное помнят торговца джина в ХОТУ, это тот торговец, который вызывался и торговал во всех областях, такой карманный магазин. Как реализовать подобное. Все очень просто, пробив магазин по тэгу, мы можем спокойно торговать с ним, хотя точка магазина, может стоять в другой локации…

/////////////////////////////////////
//:: Магазин в закрытой локации
//:: File name: Open_store_zip
/////////////////////////////////////
void main()
{
 object oStore = GetObjectByTag("TAG");
 if (GetIsObjectValid(oStore))
   OpenStore(oStore, GetPCSpeaker());
 else
   ActionSpeakStringByStrRef(53090, TALKVOLUME_TALK);
}

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

/////////////////////////////////////
//:: Магазин с проверкой на событие
//:: File name: Open_store_loc
/////////////////////////////////////
#include "nw_i0_plot"
void main()
{
 object oStore = GetNearestObject(OBJECT_TYPE_STORE);
 if (GetIsObjectValid(oStore))
  {
   if(GetLocalInt(GetPCSpeaker(), "LOC") == 1)
    {
     // Первый int - продажа, второй - покупка
     gplotAppraiseOpenStore(oStore, GetPCSpeaker(),-30,30);
     SendMessageToPC(GetPCSpeaker(), "ДЛЯ ВАС СКИДКИ!");
    }
   else
     OpenStore(oStore, GetPCSpeaker());
  }
 else
   ActionSpeakStringByStrRef(53090, TALKVOLUME_TALK);
}

Торговцы воспринимаются тулсетом, как объекты, поэтому им можно как НПСам подкидывать или забирать вещи. Еще о том, как оптимизировать магазины см. в разделе «Модуль и области».

Обновление: Rambler's Top100