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

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

Предметы


– это вещи, которые герой может положить в свой рюкзак. Предметы не несут на себе скриптов, зато им можно придавать множество свойств и менять внешний вид. Все вещи подлежат купле – продажи у торговцев, поэтому имеют определенную цену. Чем больше свойств несет на себе вещь, тем больше ее стоимость, и тем трудней ее опознать герою. В строке “Необходимое знания” и “Необходимый уровень” это как раз и отражено. Но если герой не может опознать вещь, то вы можете на панели “Свойства” включить галочку “Идентифицировано”, или же в любом магазине за 100 золотых эту вещь оценит, и определить торговец. Стоит помнить, что если на вещи включена галка “Схема предмета”, то это сюжетная вещь, и ее нельзя продать. Если же вы проставите галку “Украдено” , то такую вещь купит только скупщик краденного т.е. магазин у которого будет проставлена эта опция. К сожалению, цену на вещь нельзя уменьшить, но зато поднять можно… Добавить цену просто, в строке “Дополнительно” укажите требуемую сумму.

Каждая вещь несет на себе еще одно свойство, т.е. ее можно или нельзя положить в определенный слот героя, для ношения вещей. В скрипте такую вещь мы можем записать так:

object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST,GetFirstPC());

Вот наши слоты для ношения вещей:

  1. INVENTORY_SLOT_HEAD - слот для шлема (числовое значение = 0)
  2. INVENTORY_SLOT_CHEST – слот для доспехов (числовое значение = 1)
  3. INVENTORY_SLOT_BOOTS - слот под сапоги (числовое значение = 2)
  4. INVENTORY_SLOT_ARMS - слот для наручей и перчаток (числовое значение = 3)
  5. INVENTORY_SLOT_RIGHTHAND - слот для правой руки (числовое значение = 4)
  6. INVENTORY_SLOT_LEFTHAND - слот для левой руки (числовое значение = 5)
  7. INVENTORY_SLOT_CLOAK - слот для плаща (числовое значение = 6)
  8. INVENTORY_SLOT_LEFTRING - слот для кольца на левую руку (числовое значение = 7)
  9. INVENTORY_SLOT_RIGHTRING - слот для кольца на правую руку (числовое значение = 8)
  10. INVENTORY_SLOT_NECK – слот для ожерелья (числовое значение = 9)
  11. INVENTORY_SLOT_BELT - слот под пояс (числовое значение = 10)
  12. INVENTORY_SLOT_ARROWS - слот для стрел (числовое значение = 11)
  13. INVENTORY_SLOT_BULLETS – слот для камней (числовое значение = 12)
  14. INVENTORY_SLOT_BOLTS - слот для арбалетных стрел (числовое значение = 13)

Есть еще четыре слота для ношения специальных вещей «Природная экипировка». Эти вещи нельзя сделать выбрасываемыми, они нужны для тонкой настройки свойств монстров. Для героя эти слоты недоступны в игре, но скриптом в них можно размещать шкурки, чтобы сделать определенный бонус герою. Вот эти слоты:

  1. INVENTORY_SLOT_CWEAPON_L (числовое значение = 14)
  2. INVENTORY_SLOT_CWEAPON_R (числовое значение = 15)
  3. INVENTORY_SLOT_CWEAPON_B (числовое значение = 16)
  4. INVENTORY_SLOT_CARMOUR – шкурка (числовое значение = 17)

Вот небольшой скрипт с помощью которого мы можем менять шкурки герою или монстру. Причем герою можно повесить шкурку только в слот INVENTORY_SLOT_CARMOUR:

void main()
{
 object oPC = GetFirstPC();
 object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);

 DestroyObject(oItem);
 oItem = CreateItemOnObject("shkurka", oPC , 1);
 DelayCommand(1.0, AssignCommand(oPC, ClearAllActions(TRUE)));
 DelayCommand(1.01, AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CARMOUR)));
}

Как менять внешний вид и свойства предметов, надеюсь, понятно всем пользователям русскоязычной версии тулсета. Поговорим немного о другом. Многие путают ResRef и Tag (тэг или таг, или тег) предметов. Например, когда мы хотим дать предмет герою функцией:

object oItem = CreateItemOnObject("ResRef", GetPCSpeaker(), 1);

SetIdentified(oItem, TRUE); // опознать

В ней нужно указать именно ResRef. Как правильно вставить ResRef? Некоторые пытаются скопировать его кликнув “Редактировать и Копировать” в базовой палитре. Это не правильно, там вам предлагают уже измененный ResRef … Нужно просто поставить этот предмет в локацию, открыть его “Свойства”, и оттуда уж и копировать. А вот если вы создали свой предмет (кстати есть в редакторе и Мастер предметов, который поможет вам создавать свои разнообразные предметы), то тогда можно смело кликать в палитре “Редактировать”, и копировать в буфер ResRef. Напомню еще, что ResRef пишется в скрипте как заглавными, так и прописными буквами, т.е. редактор сам переводит все буквы в прописные. А вот Тэг нет, поэтому при написание скриптов учтите, что ошибки в записи тэга недопустимы. К чему я это? Многие предметы в базовой палитре имеют одинаковый Тег и ResRef см. верхний рисунок, поэтому не путайтесь! Это относится ко всем объектам, а не только предметам, помните об этом…

Предметы, причем не все, в отличие от других объектов имеют увеличенный стек, т.е. некоторые предметы могут складываться в определенное количество, и занимать при этом всего одну клетку в инвентаре. Например: стрелы, бутылочки с зельями, заклинания и т.д… Поэтому бывает необходимость дать или забрать, а может и проверить число предметов в стеке. Насчет дать все просто, в функции:

CreateItemOnObject(“ResRef ”, object oPC =OBJECT_SELF, int iStackSize=1)

последняя цифра, как раз и служит для этого. Причем, если вы проставите цифру, больше чем действительно отводится под стек для таких вещей, то вы получите только максимальное количество предметов для одного стека. Другими словами, если на верхнем рисунке у нас стек топора имеет единицу, то поставив в функции 3, вы не получите три топора, а только один… Понятно, что вам нужно три… Как такое сделать? Нужно написать функцию для получения требуемого количества предметов. У меня в функции нужно проставить количество предметов в стеке. Если ничего не ставить, то будет просто не красиво… Допустим, вы дадите 200 стрел, тогда у вас в отчет пойдет 200 строк, о том, что герой получил стрелу, что согласитесь некрасиво. В примере, скрипт дает 3 топора с рисунка, у них стек равен единице, поэтому его пропустим, и еще дадим для примера 12 бутылочек зелья Кожа-Кора. Стек у бутылок равен десяти… Сам скрипт:

// ДАТЬ И ОПОЗНАТЬ ПРЕДМЕТЫ
// string sItem - ResRef предмета
// object oTarget - Объект или существо кому дать
// int iKol - Количество предметов
// int iStack=1 - Количество предметов в стеке
void CreateItemPC(string sItem, object oPC, int iKol=1, int iStack=1);

void CreateItemPC(string sItem, object oPC, int iKol=1, int iStack=1)
{
 while(1 <= iKol)
 {
  if(iKol < iStack) iStack = iKol;
  object oItem = CreateItemOnObject(sItem, oPC, iStack);
  SetIdentified(oItem, TRUE); // опознать
  iKol-=iStack;
 }
}
///////////////////////////////////////////////
void main()
{
 object oPC = GetFirstPC();
 CreateItemPC("NW_WAXMGR011", oPC, 3);
 CreateItemPC("nw_it_mpotion005", oPC, 12, 10);
}

Теперь скрипт для проверки количества вещей с одинаковым тэгом. Тут все просто, определяем количество и сравниваем с необходимым числом:

//Количество предметов в инвентаре ПС с определенным тегом
// string sTag - Тег предмета
// object oNPC = OBJECT_SELF - Владелец предметов
int GetItemsInInventory(string sTag, object oNPC = OBJECT_SELF);

int GetItemsInInventory(string sTag, object oNPC = OBJECT_SELF)
{
 int iNum;
 object oItem = GetFirstItemInInventory(oNPC);
  while (GetIsObjectValid(oItem))
   {
    if (GetTag(oItem) == sTag)
      iNum += GetItemStackSize(oItem);
    oItem = GetNextItemInInventory(oNPC);
   }
  return iNum;
}
//////////////////////////////////////////////////////////// 
int StartingConditional()
 {return (GetItemsInInventory("TAG", GetPCSpeaker()) >= 3);}

Настало время забрать несколько предметов с одним тэгом, или же просто все подобные предметы. Сам скрипт:

//Забрать предметы в инвентаре ПС с определенным тегом
// string sTag - Тег предмета
// object oNPC = OBJECT_SELF - Владелец предметов
// int iNum=-1 - Количество забираемых предметов
// Если по умоччанию, или отрицательное - удалить все предметы
void DestroyItemsPC(string sTag, object oNPC = OBJECT_SELF, int iNum=-1);

void DestroyItemsPC(string sTag, object oNPC = OBJECT_SELF, int iNum=-1)
{
 object oItem = GetFirstItemInInventory(oNPC);
  while(GetIsObjectValid(oItem))
   {
    if (GetTag(oItem) == sTag)
    {
     int iStack = GetItemStackSize(oItem);
     if (iNum < 0) DestroyObject(oItem);
     else if(iNum >= iStack) {iNum-=iStack; DestroyObject(oItem);}
          else {SetItemStackSize(oItem, iStack-iNum); break;}
    }
    oItem = GetNextItemInInventory(oNPC);
   }
}
/////////////////////////////////////////////////
void main()
 {
  object oPC = GetFirstPC();
   DestroyItemsPC("NW_IT_MPOTION005", oPC, 11);
   DestroyItemsPC("NW_WAXMGR011", oPC, 2);
 }

Включите эти три функции в одну инклюду, и вам она очень поможет в построение диалогов и скриптов.

Как сделать уникальный предмет со свойствами отсутствующими в панели “Свойства”? Нужно выбрать для такой вещи свойство Активировать предмет, или Уникальная сила - только для себя, и прописать необходимые свойства в скрипте слота OnActivateItem для модуля. Как это сделать смотрите пример в разделе “Модуль и области”.

Все предметы имеют свое уникальное описание, причем в двух разделах, т.е. для опознанных вещей и неопознанных. В принципе неопознанное описание будет хоть какое-то, если просто почистить все описание, а вот опознанное может вызвать некоторые неудобства… Многие вещи в базовой палитре имеют свое Фаеруновское описание. Если вы делаете свой уникальный мод вне событий Фаэтуна, то случайная генерация вещей в сундуках и в скрипте загрузки монстров в слоте “OnSpawn” может испортить вам всю атмосферу… Чтобы такого не случилось, нужно или раскладывать вещи в сундуки вручную, удалив скрипты генерации вещей, или написать свою систему генерации вещей. Как это сделать мы разберем в разделе “Объекты”, а вот в этом разделе будет инклюда случайной генерации некоторых вещей из базовой палитры, которые не имеют Фаэруновского описания. При необходимости вы можете добавить в инклюду свои уникальные вещи, или сделать новые наборы вещей… В наборе зелий нет зелья Невидимости и зелья Исцеления, если вам это нужно – добавьте… Еще в этом наборе пробиты несколько раз менее ценные зелья, чтобы увеличить их частоту выпадения, тем самым снизить вероятность выпадения дорогих… Сама инклюда:

///////////////////////////////////////////////
//  ***  БИБЛИОТЕКА  ***    #include "shmotki"
///////////////////////////////////////////////
// Дать золото
// object oTarget - Кому даем
// int nMnGold - множитель *(случайность от 1 до 10)
void CreateGold(object oTarget, int nMnGold);
// Дать недорогoе заклинание
// object oTarget - Кому даем
void CreateSpell(object oTarget);
// Дать простые вещи
// object oTarget - Кому даем
void CreateProsto(object oTarget);
// Дать зелье
// object oTarget - Кому даем
void CreateZel(object oTarget);
// Дать вещи +1
// object oTarget - Кому даем
void CreateFirstShmotka(object oTarget);
// Дать вещи +2
// object oTarget - Кому даем
void CreateSecondShmotka(object oTarget);
// Дать кольца, камни, наручи и т.п.
// object oTarget - Кому даем
void CreateRing(object oTarget);
////////////////////////////////////////////////////////////////

//________________ Дать золото ________________
void CreateGold(object oTarget, int nMnGold)
{
int nGold = Random(10)+1; nGold = nMnGold*nGold;
CreateItemOnObject("nw_it_gold001", oTarget, nGold);
}
//___________Дать недорогoе заклинание _________
void CreateSpell(object oTarget)
{
 int nRandom = Random(33) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_it_sparscr412"; break;
 case 2: sItem = "nw_it_sparscr105"; break;
 case 3: sItem = "nw_it_sparscr404"; break;
 case 4: sItem = "nw_it_sparscr605"; break;
 case 5: sItem = "nw_it_sparscr103"; break;
 case 6: sItem = "nw_it_sparscr602"; break;
 case 7: sItem = "nw_it_sparscr203"; break;
 case 8: sItem = "nw_it_sparscr904"; break;
 case 9: sItem = "nw_it_sparscr703"; break;
 case 10: sItem = "nw_it_sparscr213"; break;
 case 11: sItem = "nw_it_sparscr104"; break;
 case 12: sItem = "nw_it_sparscr306"; break;
 case 13: sItem = "nw_it_sparscr510"; break;
 case 14: sItem = "nw_it_sparscr805"; break;
 case 15: sItem = "nw_it_spdvscr204"; break;
 case 16: sItem = "x1_it_spdvscr501"; break;
 case 17: sItem = "nw_it_sparscr202"; break;
 case 18: sItem = "nw_it_sparscr220"; break;
 case 19: sItem = "nw_it_sparscr507"; break;
 case 20: sItem = "nw_it_sparscr305"; break;
 case 21: sItem = "x1_it_sparscr002"; break;
 case 22: sItem = "nw_it_sparscr221"; break;
 case 23: sItem = "nw_it_sparscr804"; break;
 case 24: sItem = "nw_it_sparscr112"; break;
 case 25: sItem = "nw_it_sparscr304"; break;
 case 26: sItem = "nw_it_sparscr204"; break;
 case 27: sItem = "nw_it_sparscr208"; break;
 case 28: sItem = "x1_it_spdvscr101"; break;
 case 29: sItem = "nw_it_sparscr212"; break;
 case 30: sItem = "nw_it_sparscr108"; break;
 case 31: sItem = "nw_it_sparscr216"; break;
 case 32: sItem = "nw_it_sparscr110"; break;
 case 33: sItem = "x1_it_spdvscr502"; break;
}
CreateItemOnObject(sItem, oTarget, 1);
}
//___________Дать простые вещи ___________
void CreateProsto(object oTarget)
{
 int nRandom = Random(46) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_wplhb001"; break;
 case 2: sItem = "nw_ashto001"; break;
 case 3: sItem = "nw_wblhw001"; break;
 case 4: sItem = "nw_waxbt001"; break;
 case 5: sItem = "nw_ashlw001"; break;
 case 6: sItem = "nw_aarcl008"; break;
 case 7: sItem = "nw_wblml001"; break;
 case 8: sItem = "nw_wswgs001"; break;
 case 9: sItem = "nw_waxgr001"; break;
 case 10: sItem = "nw_wdbax001"; break;
 case 11: sItem = "nw_wbwln001"; break;
 case 12: sItem = "nw_wswls001"; break;
 case 13: sItem = "nw_wblcl001"; break;
 case 14: sItem = "nw_wspka001"; break;
 case 15: sItem = "nw_wswka001"; break;
 case 16: sItem = "nw_wswdg001"; break;
 case 17: sItem = "nw_wswdg001"; break;
 case 18: sItem = "nw_wswmdg002"; break;
 case 19: sItem = "nw_aarcl001"; break;
 case 20: sItem = "nw_aarcl004"; break;
 case 21: sItem = "nw_wplss001"; break;
 case 22: sItem = "nw_wbwsh001"; break;
 case 23: sItem = "nw_wswss001"; break;
 case 24: sItem = "nw_arhe003"; break;
 case 25: sItem = "nw_wbwxl001"; break;
 case 26: sItem = "nw_wblfl001"; break;
 case 27: sItem = "nw_ashsw001"; break;
 case 28: sItem = "nw_mcloth006"; break;
 case 29: sItem = "x0_cloth001"; break;
 case 30: sItem = "nw_arhe005"; break;
 case 31: sItem = "nw_aarcl010"; break;
 case 32: sItem = "nw_aarcl009"; break;
 case 33: sItem = "nw_aarcl002"; break;
 case 34: sItem = "nw_wblms001"; break;
 case 35: sItem = "nw_wmgwn004"; break;
 case 36: sItem = "nw_aarcl005"; break;
 case 37: sItem = "nw_wswbs001"; break;
 case 38: sItem = "nw_wdbqs001"; break;
 case 39: sItem = "nw_wbwsl001"; break;
 case 40: sItem = "nw_wswrp001"; break;
 case 41: sItem = "nw_waxhn001"; break;
 case 42: sItem = "nw_wspsc001"; break;
 case 43: sItem = "nw_wbwxh001"; break;
 case 44: sItem = "nw_wblfh001"; break;
 case 45: sItem = "nw_arhe001"; break;
 case 46: sItem = "nw_arhe002"; break;
}
CreateItemOnObject(sItem, oTarget, 1);
}
//_________ Дать зелье __________
void CreateZel(object oTarget)
{
 int nRandom = Random(32) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_it_mpotion022"; break;
 case 2: sItem = "nw_it_mpotion023"; break;
 case 3: sItem = "nw_it_mpotion021"; break;
 case 4: sItem = "nw_it_mpotion001"; break;
 case 5: sItem = "nw_it_mpotion020"; break;
 case 6: sItem = "nw_it_medkit001"; break;
 case 7: sItem = "nw_it_medkit002"; break;
 case 8: sItem = "nw_it_mpotion009"; break;
 case 9: sItem = "nw_it_mpotion010"; break;
 case 10: sItem = "nw_it_mpotion013"; break;
 case 11: sItem = "nw_it_mpotion014"; break;
 case 12: sItem = "nw_it_mpotion019"; break;
 case 13: sItem = "nw_it_mpotion005"; break;
 case 14: sItem = "nw_it_mpotion020"; break;
 case 15: sItem = "nw_it_mpotion022"; break;
 case 16: sItem = "nw_it_mpotion023"; break;
 case 17: sItem = "nw_it_mpotion021"; break;
 case 18: sItem = "nw_it_mpotion001"; break;
 case 19: sItem = "nw_it_mpotion020"; break;
 case 20: sItem = "nw_it_medkit001"; break;
 case 21: sItem = "nw_it_medkit002"; break;
 case 22: sItem = "nw_it_mpotion009"; break;
 case 23: sItem = "nw_it_mpotion003"; break;
 case 24: sItem = "nw_it_mpotion002"; break;
 case 25: sItem = "nw_it_mpotion011"; break;
 case 26: sItem = "nw_it_mpotion018"; break;
 case 27: sItem = "nw_it_mpotion016"; break;
 case 28: sItem = "nw_it_mpotion006"; break;
 case 29: sItem = "nw_it_mpotion015"; break;
 case 30: sItem = "nw_it_mpotion004"; break;
 case 31: sItem = "nw_it_mpotion017"; break;
 case 32: sItem = "nw_it_mpotion007"; break;
}
CreateItemOnObject(sItem, oTarget, 1);
}
//___________ Дать вещи +1 ___________
void CreateFirstShmotka(object oTarget)
{
 int nRandom = Random(59) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_wplmhb002"; break;
 case 2: sItem = "nw_maarcl035"; break;
 case 3: sItem = "nw_ashmto002"; break;
 case 4: sItem = "nw_wblmhw002"; break;
 case 5: sItem = "nw_ashmlw002"; break;
 case 6: sItem = "nw_wblmml002"; break;
 case 7: sItem = "nw_wswmgs002"; break;
 case 8: sItem = "nw_waxmgr002"; break;
 case 9: sItem = "x0_armhe005"; break;
 case 10: sItem = "nw_wdbmax002"; break;
 case 11: sItem = "nw_wdbmsw002"; break;
 case 12: sItem = "nw_wbwmln002"; break;
 case 13: sItem = "nw_wswmls002"; break;
 case 14: sItem = "nw_maarcl047"; break;
 case 15: sItem = "nw_wblmcl002"; break;
 case 16: sItem = "nw_wspmka002"; break;
 case 17: sItem = "nw_wswmka002"; break;
 case 18: sItem = "nw_wswmdg002"; break;
 case 19: sItem = "nw_maarcl044"; break;
 case 20: sItem = "nw_maarcl035"; break;
 case 21: sItem = "nw_wplmss002"; break;
 case 23: sItem = "nw_wbwmsh008"; break;
 case 24: sItem = "nw_wplmsc002"; break;
 case 25: sItem = "nw_maarcl050"; break;
 case 26: sItem = "nw_wswmsc002"; break;
 case 27: sItem = "nw_wspmku002"; break;
 case 28: sItem = "nw_wbwmxl002"; break;
 case 29: sItem = "nw_wblmfl002"; break;
 case 30: sItem = "nw_ashmsw002"; break;
 case 31: sItem = "nw_mcloth007"; break;
 case 32: sItem = "nw_mcloth009"; break;
 case 33: sItem = "nw_mcloth008"; break;
 case 34: sItem = "nw_mcloth010"; break;
 case 35: sItem = "nw_maarcl049"; break;
 case 36: sItem = "nw_it_mbracer002"; break;
 case 37: sItem = "x0_armhe008"; break;
 case 38: sItem = "nw_maarcl051"; break;
 case 39: sItem = "nw_wblmms002"; break;
 case 40: sItem = "nw_maarcl055"; break;
 case 41: sItem = "x0_maarcl025"; break;
 case 42: sItem = "nw_maarcl043"; break;
 case 43: sItem = "nw_maarcl053"; break;
 case 44: sItem = "nw_maarcl052"; break;
 case 45: sItem = "nw_wswmbs002"; break;
 case 46: sItem = "nw_wdbmqs002"; break;
 case 47: sItem = "x0_armhe007"; break;
 case 48: sItem = "nw_wswmrp002"; break;
 case 49: sItem = "nw_wbwmsl001"; break;
 case 50: sItem = "nw_waxmhn002"; break;
 case 51: sItem = "nw_wspmsc002"; break;
 case 52: sItem = "nw_wbwmln010"; break;
 case 53: sItem = "nw_wbwmsh010"; break;
 case 54: sItem = "nw_wbwmxh002"; break;
 case 55: sItem = "nw_wblmfh002"; break;
 case 56: sItem = "nw_wdbmma002"; break;
 case 57: sItem = "nw_maarcl046"; break;
 case 58: sItem = "nw_maarcl048"; break;
 case 59: sItem = "nw_wswmss002"; break;
}
CreateItemOnObject(sItem, oTarget, 1);
}
//________ Дать вещи +2 _________
void CreateSecondShmotka(object oTarget)
{
 int nRandom = Random(63) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_wplmhb010"; break;
 case 2: sItem = "nw_ashmto008"; break;
 case 3: sItem = "nw_ashmto009"; break;
 case 4: sItem = "nw_wblmhw011"; break;
 case 5: sItem = "nw_waxmbt010"; break;
 case 6: sItem = "nw_armhe012"; break;
 case 7: sItem = "nw_ashmlw008"; break;
 case 8: sItem = "nw_ashmlw009"; break;
 case 9: sItem = "nw_wblmml011"; break;
 case 10: sItem = "nw_wswmgs011"; break;
 case 11: sItem = "nw_waxmgr009"; break;
 case 12: sItem = "x0_armhe004"; break;
 case 13: sItem = "nw_wdbmax010"; break;
 case 14: sItem = "nw_wdbmsw010"; break;
 case 15: sItem = "nw_wbwmln008"; break;
 case 16: sItem = "nw_wswmls010"; break;
 case 17: sItem = "nw_maarcl070"; break;
 case 18: sItem = "nw_maarcl082"; break;
 case 19: sItem = "nw_wblmcl010"; break;
 case 20: sItem = "nw_wspmka008"; break;
 case 21: sItem = "nw_wswmka010"; break;
 case 22: sItem = "nw_wswmdg008"; break;
 case 23: sItem = "nw_maarcl071"; break;
 case 24: sItem = "nw_maarcl083"; break;
 case 25: sItem = "nw_maarcl066"; break;
 case 26: sItem = "nw_maarcl078"; break;
 case 27: sItem = "nw_wplmss010"; break;
 case 28: sItem = "nw_wbwmsh008"; break;
 case 29: sItem = "nw_wbwmsh009"; break;
 case 30: sItem = "nw_wswmss009"; break;
 case 31: sItem = "nw_wplmsc010"; break;
 case 32: sItem = "nw_maarcl074"; break;
 case 33: sItem = "nw_maarcl086"; break;
 case 34: sItem = "nw_wswmsc010"; break;
 case 35: sItem = "nw_wspmku008"; break;
 case 36: sItem = "nw_wblmhl010"; break;
 case 37: sItem = "nw_ashmsw008"; break;
 case 38: sItem = "nw_ashmsw009"; break;
 case 39: sItem = "x0_armhe001"; break;
 case 40: sItem = "nw_wblmhw006"; break;
 case 41: sItem = "nw_maarcl065"; break;
 case 42: sItem = "nw_maarcl077"; break;
 case 43: sItem = "nw_maarcl064"; break;
 case 44: sItem = "nw_maarcl076"; break;
 case 45: sItem = "nw_wblmms010"; break;
 case 46: sItem = "nw_maarcl072"; break;
 case 47: sItem = "nw_maarcl068"; break;
 case 48: sItem = "nw_maarcl069"; break;
 case 49: sItem = "nw_wswmbs009"; break;
 case 50: sItem = "nw_wdbmqs008"; break;
 case 51: sItem = "nw_maarcl084"; break;
 case 52: sItem = "nw_wswmrp010"; break;
 case 53: sItem = "nw_wbwmsl009"; break;
 case 54: sItem = "nw_waxmhn010"; break;
 case 55: sItem = "nw_wspmsc010"; break;
 case 56: sItem = "nw_wspmsc004"; break;
 case 57: sItem = "nw_wbwmln011"; break;
 case 58: sItem = "nw_waxmhn004"; break;
 case 59: sItem = "nw_wdbmma010"; break;
 case 60: sItem = "nw_maarcl067"; break;
 case 61: sItem = "nw_maarcl073"; break;
 case 62: sItem = "nw_maarcl085"; break;
 case 63: sItem = "nw_armhe006"; break;
}
CreateItemOnObject(sItem, oTarget, 1);
}
// _______Дать кольца, камни, наручи и т.п. _______
void CreateRing(object oTarget)
{
 int nRandom = Random(17) + 1;
 string sItem;
switch (nRandom)
{
 case 1: sItem = "nw_it_mring023"; break;//Золотое кол
 case 2: sItem = "nw_it_mring011"; break;//Нефритовое кол
 case 3: sItem = "nw_it_mring022"; break;//Серебр кол
 case 4: sItem = "nw_it_mring009"; break;//Цианитовое кол
 case 5: sItem = "nw_it_mneck020"; break;//Медное ожер
 case 6: sItem = "nw_it_gem011"; break;//Гранат
 case 7: sItem = "nw_it_gem010"; break;//Топаз
 case 8: sItem = "nw_it_gem015"; break;//Флуорит
 case 9: sItem = "nw_it_mneck023"; break;//Сверкающ. ожер
 case 10: sItem = "nw_it_mbracer002"; break;//Нарукавники Брони +1
 case 11: sItem = "nw_maarcl055"; break;//Плащ Защиты +1
 case 12: sItem = "nw_it_mneck007"; break;//Амулет Мудрости +1
 case 13: sItem = "nw_it_mneck006"; break;//Скарабей Защиты +1
 case 14: sItem = "nw_it_mneck021"; break;//Серебрeное Ожерелье
 case 15: sItem = "nw_it_mring010"; break;//Кольцо РумЯн
 case 16: sItem = "nw_it_picks002"; break;//Воровской Инструмент +3
 case 17: sItem = "nw_it_picks003"; break;//Воровской Инструмент +6
}
CreateItemOnObject(sItem, oTarget, 1);
}
Обновление: Rambler's Top100