Торговцы
- т.е. магазины, создаются очень просто… Достаточно выбрать из палитры нужный и поставить на место, предполагаемой торговли. Затем, кликнув правой кнопкой по точке магазина, выбрав опцию “Настройка Магазина”, откроется окно, где можно отредактировать начальный диалог торговца, проставить имя этого диалога, а также скрипт, который запустит торговлю. Если включить галку “использовать оценочные проверки”, то это будет магазин с проверкой героя на умение торговли… Кликнув кнопку “Вперед” можно выбрать персонаж торговца. Выбрав нужного, опять кликаем “Вперед” и задаем фракцию этого торговца. В завершение кликаем “Закончить”, и у вас уже готов новый магазин… Осталось только настроить цены (процент от реальной стоимости вещи) и если нужно, то дополнительный товар, которым он должен торговать, кнопка “Инвентарь…”. Включив галку “Купить краденные товары”, вы получите скупщика краденных вещей… В таком варианте существует возможность установить отдельную цену скупки краденного.
Все это обычно не вызывает проблем, поэтому хочется поговорить немного о другом… Если у вас в модуле будет множество магазинов, то при такой схеме у вас будет куча ненужных диалогов и куча подобных скриптов. Ведь в общем таким способом мы меняем тэг магазина, да еще оценочную характеристику, значит вполне хватит всего двух скриптов для открытия магазинов, и тэг их тут ни при чем. Как такое реализовать? Вот два простеньких скрипта:
/////////////////////////////////////
//:: Магазин без оценочной проверки
//:: 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);
}
|
Торговцы воспринимаются тулсетом, как объекты, поэтому им можно как НПСам подкидывать или забирать вещи. Еще о том, как оптимизировать магазины см. в разделе «Модуль и области».
|