[AGFC: Valley of Gothic] М: Уроки скриптологии

Страница 6 из 8 123456 78
Поиск в этой теме:

Расширенный поиск
Старый 17.06.2005, 08:20   #201
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2basilio58:
НИ ОДНОГО такого названия(инстанции) в скриптах НЕТ!
Я думаю, не меня одного это интересует, без музыки игра....сами понимаете...
История об этом умалчивает, а почему ты думаешь, что это должны быть имена инстанций? Ничего конкретного сказать не могу, с устройством музыки в Готике не разбирался.
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++

* *14. Документы аддона.

Файл IT_Addon_Written.d

//*************************
// Документы аддона
//*************************

//--------------------------------------
// Записка Снафа
//--------------------------------------
INSTANCE ITWr_Addon_Hinweis_02(C_Item)
{
* *name * * * * * *= * "Важное сообщение";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Hinweis_02; * * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Важное сообщение"
* *TEXT[0] * * * * = *"Из трактира в лагере бандитов";
};

// Прочитать
func void Use_Hinweis_02()
{
* *var int nDocID;
* *// создать документ
* *nDocID = Doc_Create();
* *// кол-во страниц - 1
* *Doc_SetPages * *(nDocID,1);
* *// изображение страницы
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *// шрифт заголовка
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *// границы текста
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *// заголовок
* *Doc_PrintLine * (nDocID,0,"");
* *// шрифт текста
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *// вывод строки
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Эй, люди,");
* *// вывод текста в несколько строк
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Лу пропал в болоте, наверное, его сожрали болотожеры");
* *Doc_PrintLines *(nDocID,0,"Еще хуже - с ним пропал и его ключ");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Так что кто его найдет, может хлам Лу оставить себе");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Снаф");
* *Doc_PrintLine * (nDocID,0,"");
* *// показать документ
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт лечебного напитка
//--------------------------------------
INSTANCE ITWr_Addon_Health_04(C_Item)
{
* *name * * * * * *= * "Рецепт лечебного напитка";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 1000; * * * * * * * * * * * // 1000
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Heilrezept_04; * * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * "Чистая жизненная энергия";
* *TEXT[2] * * * * = * "Изготовление одного могущественного напитка.";
* *TEXT[3] * * * * = * "Для применения необходимо знание о эликсирах лечения.";
* *TEXT[5] * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= * value; * * * * * * * * * * *// 1000
};

// Прочитать
func void Use_Heilrezept_04()
{
* *var int nDocID;
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// если ГГ умеет делать Лечебный элексир
* * * *if(PLAYER_TALENT_ALCHEMY[POTION_Health_03] == TRUE)
* * * *{
* * * * * *// ГГ обучился делать Чистую жизненную энергию
* * * * * *PLAYER_TALENT_ALCHEMY[POTION_Health_04] = TRUE;
* * * * * *// звуковое сопровождение
* * * * * *Snd_Play("LevelUP");
* * * * * *// запись в дневник, тема "Напитки"
* * * * * *B_LogEntry(TOPIC_TalentAlchemy,"Чтобы произвести напиток, необходимо 1 полевое растение и 3 эссенции лечения.");
* * * *};
* *};
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,""); *
* *Doc_PrintLines *(nDocID,0,"Изготовление лечебного напитка:");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Нужно полевое растение и 3 эссенции лечения"); *
* *Doc_PrintLines *(nDocID,0,"Вылить вместе и выгнать по рецепту напитков лечения."); *
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Этот напиток может изготовить только алхимик, который знает рецепт эликсиров лечения.");
* *Doc_PrintLine * (nDocID,0,""); *
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,""); *
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт напитка маны
//--------------------------------------
INSTANCE ITWr_Addon_Mana_04(C_Item)
{
* *name * * * * * *= * "Рецепт напитка маны";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 1500; * * * * * * * * * * * // 1500
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Manarezept_04; * * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * "Чистая мана";
* *TEXT[2] * * * * = * "Изготовление одного могущественного напитка.";
* *TEXT[3] * * * * = * "Для применения необходимо знание о эликсирах маны.";
* *TEXT[5] * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= * value; * * * * * * * * * * *// 1500
};

// Прочитать
func void Use_Manarezept_04()
{
* *var int nDocID;
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// если ГГ умеет делать Элексир маны
* * * *if(PLAYER_TALENT_ALCHEMY[POTION_Mana_03] == TRUE)
* * * *{
* * * * * *// ГГ обучился делать Чистую ману
* * * * * *PLAYER_TALENT_ALCHEMY[POTION_Mana_04] = TRUE;
* * * * * *Snd_Play("LevelUP");
* * * * * *// запись в дневник, тема "Напитки"
* * * * * *B_LogEntry(TOPIC_TalentAlchemy,"Чтобы произвести напиток, необходимо 1 полевое растение и 3 эссенции маны.");
* * * *};
* *};
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Изготовление напитка маны:");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Нужно полевое растение и 3 эссенции магической силы");
* *Doc_PrintLines *(nDocID,0,"Вылить вместе и выгнать по рецепту напитков маны.");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Этот напиток может изготовить только алхимик, который знает рецепт эликсиров маны.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};


//--------------------------------------
// Записка Флетчера
//--------------------------------------
INSTANCE ITWr_Addon_Hinweis_01(C_Item)
{
* *name * * * * * *= * "Важное сообщение";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Hinweis_01; * * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Важное сообщение"
* *TEXT[0] * * * * = *"Висело на одной хибаре в болоте";
};

// Прочитать
func void Use_Hinweis_01()
{
* *var int nDocID;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Эй, люди,");
* *Doc_PrintLines *(nDocID,0,"Вещи в сундуке только на крайний случай.");
* *Doc_PrintLines *(nDocID,0,"О они лежат для ВСЕХ. Так что берите только тогда, если что нужно.");
* *Doc_PrintLines *(nDocID,0,"И столько, сколько нужно.");
* *Doc_PrintLines *(nDocID,0,"Если все будут делать так, то получится.");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Флэтчер");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Записка неизвестного Виллиаму
//--------------------------------------
INSTANCE ITWr_Addon_William_01(C_Item)
{
* *name * * * * * *= * "Записка";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_William_01; * * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Записка"
* *Text[0] * * * * = * "Эта записка была у рыбака Виллиама с собой.";
};

// Прочитать
func void Use_William_01 ()
{
* *var int nDocID;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Виллиам,");
* *Doc_PrintLines *(nDocID,0,"Когда Луна будет в полном свете, стражник отвлечется.");
* *Doc_PrintLines *(nDocID,0,"Прокрадись наружу - но будь осторожен!");
* *Doc_PrintLines *(nDocID,0,"если ты пойдешь по настилу, то сможешь покинуть болото.");
* *Doc_PrintLines *(nDocID,0,"Лагерь пиратов лежит на другой стороне долины далеко на западе.");
* *Doc_PrintLines *(nDocID,0,"Оттуда ты сможешь выбраться на лодке.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Кто-то, кто к тебе хорошо относится.");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт Мигеля
//--------------------------------------
INSTANCE ITWr_Addon_MCELIXIER_01(C_Item)
{
* *name * * * * * *= * "Рецепт";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_MCELIXIER_01; * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Рецепт"
* *Text[0] * * * * = * "Рецепт эликсира изменения духа.";
* *Text[1] * * * * = * "Этот напиток помогает вернуть потерянные воспоминания";
};

// Прочитать
func void Use_MCELIXIER_01()
{
* *var int nDocID;
* *// ГГ научился делать Эликсир изменения духа
* *Knows_MCELIXIER = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"Эликсир изменения духа");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Для изготовления напитка нужен секрет двух жал кровавых шершней.");
* *Doc_PrintLines *(nDocID,0,"К нему добавляют экстракт маня и эссенцию лечения.");
* *Doc_PrintLines *(nDocID,0,"В завершение в кипящую смесь добавить южного слезного перца.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Только знающий алхимик, который умеет выделять секрет из жала кровавых шершней, должен пытаться изготовить этот напиток.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};


//--------------------------------------
// Письмо Эстебана пиратам
//--------------------------------------
INSTANCE ITWr_Addon_Pirates_01(C_Item)
{
* *name * * * * * *= * "Грязная бумажка";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Pirates_01; * * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Грязная бумажка"
* *TEXT[0] * * * * = * "Эта бумажка лежала в кармане у Ангуса.";
};

// Прочитать
func void Use_Pirates_01()
{
* *var int nDocID;
* *// переменная не используется, можно удалить
* *Read_JuansText = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"Вы, пираты,");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Достаньте нашу последнюю поставку.");
* *Doc_PrintLine * (nDocID,0,"Принесите ее к вашей пещере. Там мы встретимся.");
* *Doc_PrintLines *(nDocID,0,"Я заплачу двойную стоимость золотом.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Так это будет обделано.");
* *Doc_PrintLine * (nDocID,0,"Том");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт Зеленого послушника
//--------------------------------------
INSTANCE ITWr_Addon_Joint_01(C_Item)
{
* *name * * * * * *= * "Зеленый послушник";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * Use_Joint_Rezept_01; * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Зеленый послушник"
* *TEXT[0] * * * * = * "Лежал в сундуке Фортуно";
};

// Прочитать
func void Use_Joint_Rezept_01()
{
* *var int nDocID;
* *// ГГ научился делать Зеленый послушник
* *Green_Extrem = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"Зеленый послушник");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"(...) хотя косячки хорошо скручиваются, то, что было у нас в болотном лагере, было совсем другого калибра");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"если я возьму эссенцию двух болотных травок и добавлю полевое растение, то получу эффект "Зеленого послушника"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,""Зеленый послушник" помогает против любых болей и проясняет голову.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт Молотка Лу
//--------------------------------------
INSTANCE ITWr_Addon_Lou_Rezept(C_Item)
{
* *name * * * * * *= * "Рецепт Молотка Лу";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 70;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * UseLouRezept; * * * * * * * // использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Рецепт Молотка Лу"
* *Text[0] * * * * = * "Рецепт для изготовления молотка Лу";
};

// Прочитать
func void UseLouRezept()
{
* *var int nDocID;
* *// ГГ изучил Рецепт Молотка Лу
* *Knows_LousHammer = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"Рецепт Молотка Лу");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Ингредиенты для молоткового зелья");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Берем бутылку воды, 2 репы и конкретную порцию болотной травы");
* *Doc_PrintLines *(nDocID,0,"К этому перемолотые зубы болотожера.");
* *Doc_PrintLines *(nDocID,0,"Вместе засыпать в бутылку и перегнать с ромом.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Прост.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Как-то раз старый слепой человек сказал, что здоровее пар не вдыхать.");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт Двойного молотка Лу
//--------------------------------------
INSTANCE ITWr_Addon_Lou_Rezept2(C_Item)
{
* *name * * * * * *= * "Рецепт двойного молотка Лу";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 140;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * UseLouRezept2; * * * * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Рецепт двойного молотка Лу"
* *Text[0] * * * * = * "Рецепт для изготовления двойного молотка Лу";
};

// Прочитать
func void UseLouRezept2()
{
* *var int nDocID;
* *// ГГ изучил рецепт Двойного Молотка Лу
* *Knows_Schlafhammer = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"Двойной молоток Лу");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Взять добрый старый молоток Лу и продистиллировать его еще раз.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Эту смесь лучше изготавливать только опытным самогонщикам.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Если такое попытается сделать новичок, он не только ослепнет, но и помрет.");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Рецепт Быстрой селедки
//--------------------------------------
INSTANCE ITWr_Addon_Piratentod(C_Item)
{
* *name * * * * * *= * "Быстрая селедка";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * UseRezeptPiratentod; * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Быстрая селедка"
* *Text[0] * * * * = * "Рецепт изготовления быстрой селедки";
};

// Прочитать
func void UseRezeptPiratentod()
{
* *var int nDocID;
* *// ГГ изучил рецепт Быстрой Селёдки
* *Knows_SchnellerHering = TRUE;
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"Быстрая селедка(мой вариант)");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Маленький глоток бодрости для настоящих парней");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Как обычно, берем бутылку из-под воды. Ее наполняем порцией рома, добавляем свежую рыбу.");
* *Doc_PrintLines *(nDocID,0,"Когда смесь начинает желтеть, вынимаем рыбу. Все это доводим до кондиции ");
* *Doc_PrintLines *(nDocID,0,"Пучком свежесорванной травы глорха.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Осторожно. Зелье выходит очень сильно.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};

//--------------------------------------
// Лист бумаги
//--------------------------------------
INSTANCE Fakescroll_Addon(C_Item)
{ *
* *name * * * * * *= * "Лист бумаги.";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *hp * * * * * * *= * 5;
* *hp_max * * * * *= * 5;
* *weight * * * * *= * 1;
* *value * * * * * = * 0; * * * * * * * * * * * * *// 0
* *visual * * * * *= * "Fakescroll.3ds";
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * = * "MAPSEALED"; * *
* *description * * = * name; * * * * * * * * * * * // "Лист бумаги."
* *TEXT[5] * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= * value; * * * * * * * * * * *// 0
};

//--------------------------------------
// Инструкция по изготовлению Бандитского топора
//--------------------------------------
INSTANCE ItWr_Addon_AxtAnleitung(C_ITEM)
{ *
* *name * * * * * *= * "Руководство бандитский топор.";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * UseAxtAnleitung; * * * * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // "Руководство бандитский топор."
* *Text[0] * * * * = * "Руководство по сборке легкого, острого топора.";
};

// Прочитать
func void UseAxtAnleitung()
{
* *var int nDocID;
* *// если ГГ знает кузнечное дело
* *if(Npc_GetTalentSkill(hero,NPC_TALENT_SMITH) >= 1)
* *{
* * * *// ГГ может изготовить Бандитский топор
* * * *Knows_Banditenaxt = TRUE;
* *};
* *nDocID = Doc_Create();
* *Doc_SetPages * *(nDocID,1);
* *Doc_SetPage * * (nDocID,0,"letters.TGA",0);
* *Doc_SetFont * * (nDocID,0,FONT_BookHeadline);
* *Doc_SetMargins *(nDocID,-1,50,50,50,50,1);
* *Doc_PrintLine * (nDocID,0,"Бандитский топор.");
* *Doc_SetFont * * (nDocID,0,FONT_Book);
* *Doc_PrintLine * (nDocID,0,"Одноручный топор.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLines *(nDocID,0,"Человек, который знает основы ковки, может изготовить особенный топор.");
* *Doc_PrintLines *(nDocID,0,"Для этого нужно две горячих болванки.");
* *Doc_PrintLines *(nDocID,0,"Еще один слиток руды и три зубу волка, глорх или похожих тварей.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Руду и зубы вместе с болванкой обработать на наковальне.");
* *Doc_PrintLine * (nDocID,0,"");
* *Doc_PrintLine * (nDocID,0,"Такой топор очень легок и наносит серьезный урон.");
* *Doc_PrintLines *(nDocID,0,"");
* *Doc_Show * * * *(nDocID);
};


...продолжение следует
Ответить с цитированием
Старый 17.06.2005, 08:23   #202
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Свиток вызова Кваходрона
//--------------------------------------
INSTANCE ItWr_Addon_SUMMONANCIENTGHOST(C_ITEM)
{ *
* *name * * * * * *= * "Вызвать 'Кваходрона'";
* *mainflag * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * = * ITEM_MISSION; * * * * * * * // квестовый
* *value * * * * * = * 250;
* *visual * * * * *= * "ItWr_Scroll_01.3DS"; *
* *material * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *on_state[0] * * = * UseSummonAncientGhost; * * *// использовать
* *scemeName * * * = * "MAP";
* *description * * = * name; * * * * * * * * * * * // Вызвать 'Кваходрона'
* *Text[0] * * * * = * "С этим свитком можно вызвать Кваходрона.";
};

// Прочитать
func void UseSummonAncientGhost()
{
* *// если Кваходрон не вызван
* *if(SC_SummonedAncientGhost == FALSE)
* *{
* * * *// ГГ говорит себе (SVM фраза) "Игхориал торул. Явись мне, Кваходрон, старый вождь касты воителей!"
* * * *B_Say(self,self,"$ADDON_SUMMONANCIENTGHOST");
* * * *// если ГГ находится не далее 10м от нужного места
* * * *if(Npc_GetDistToWP(self,"ADW_ANCIENTGHOST") < 1000)
* * * *{
* * * * * *// появляется Кваходрон
* * * * * *Wld_InsertNpc(NONE_ADDON_111_Quarhodron,"ADW_ANCI ENTGHOST");
* * * * * *// визуальные и звуковые эффекты
* * * * * *Wld_PlayEffect("spellFX_Maya_Ghost",NONE_ADDON_11 1_Quarhodron,NONE_ADDON_111_Quarhodron,0,0,0,FALSE );
* * * * * *Wld_PlayEffect("SPELLFX_LIGHTSTAR_WHITE",NONE_ADD ON_111_Quarhodron,NONE_ADDON_111_Quarhodron,0,0,0, FALSE);
* * * * * *Snd_Play("MFX_GhostVoice");
* * * * * *Snd_Play("MFX_Firestorm_Cast");
* * * * * *Snd_Play("MFX_Lightning_Origin");
* * * * * *// Кваходрон вызван
* * * * * *SC_SummonedAncientGhost = TRUE;
* * * *}
* * * *else
* * * *{
* * * * * *// ГГ говорит себе (SVM фраза) "Ммм... Здесь не функционирует."
* * * * * *B_Say(self,self,"$ADDON_ANCIENTGHOST_NOTNEAR");
* * * *};
* *};
};

//--------------------------------------
// Карта Забытой долины Строителей
//--------------------------------------
INSTANCE ItWr_Map_AddonWorld(C_Item)
{
* *name * * * * * *= "Забытая долина Строителей"; *
* *mainflag * * * *= ITEM_KAT_DOCS; * * * * * * * *// документ
* *flags * * * * * = ITEM_MISSION ¦ ITEM_MULTI; * *// квестовый + складируемый
* *value * * * * * = 250; * * * * * * * * * * * * *// 250
* *visual * * * * *= "ItWr_Map_01.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *scemeName * * * = "MAP";
* *on_state[0] * * = Use_Map_AddonWorld; * * * * * // использовать
* *description * * = name; * * * * * * * * * * * * // "Забытая долина Строителей"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 250
};

// Смотреть
func void Use_Map_AddonWorld ()
{
* *var int Document;
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сохранить ссылку на документ для просмотра "горячей" клавишей
* * * *B_SetPlayerMap(ItWr_Map_AddonWorld);
* *};
* *Document = Doc_CreateMap();
* *Doc_SetPages * * * *(Document,1);
* *Doc_SetPage * * * * (Document,0,"Map_AddonWorld.tga",TRUE);
* *// задать уровень мира для просмотра
* *Doc_SetLevel * * * *(Document,"Addon\AddonWorld.zen");
* *// установить координаты уровня
* *Doc_SetLevelCoords *(Document,-47783,36300,43949,-32300);
* *Doc_Show * * * * * *(Document);
};

Ответить с цитированием
Старый 20.06.2005, 11:52   #203
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *15. Книги описания рун аддона.

Файл IT_Addon_WrittenRunemaker.d

//*************************
// Книги описания рун аддона
//*************************

//--------------------------------------
// Книга рун Магов воды (1 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC1 (C_ITEM)
{
* *name * * * * * * * *= * "Круг Воды";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (1 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC1_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов воды (2 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC2 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Воды II";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (2 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC2_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов воды (3 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC3 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Воды III";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (3 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC3_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов воды (4 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC4 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Воды VI";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (4 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC4_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов воды (5 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC5 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Воды V";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (5 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC5_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов воды (6 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDW_CIRC6 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Воды VI";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_04.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун водных магов (6 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Runemaking_KDW_CIRC6_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (1 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC1 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня I";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (1 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_01_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (2 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC2 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня II";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (2 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_02_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (3 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC3 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня III";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (3 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_03_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (4 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC4 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня IV";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (4 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_04_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (5 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC5 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня V";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (5 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_05_S1; // прочитать
};

//--------------------------------------
// Книга рун Магов огня (6 круг)
//--------------------------------------
INSTANCE ITWR_Addon_Runemaking_KDF_CIRC6 (C_ITEM)
{
* *name * * * * * * * *= * "Книга рун Огня VI";
* *mainflag * * * * * *= * ITEM_KAT_DOCS; * * * * * * *// документ
* *flags * * * * * * * = * ITEM_MISSION;
* *value * * * * * * * = * 100; * * * * * * * * * * * *// 100
* *visual * * * * * * *= * "ItWr_Book_02_03.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * * * *// кожа
* *scemeName * * * * * = * "MAP";
* *description * * * * = * "Книга рун огненных магов (6 круг)";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * * * * * *// 100
* *on_state[0] * * * * = * Use_Bookstand_Kreise_06_S1; // прочитать
};


* *15a. Функции использования Книг рун Магов Воды.

Файл ..\Story\Dialog_Mobsis\BookstandKDW_Addon.d

//--------------------------------------
// Прочитать книгу рун Магов воды (1 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC1_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *// получить ссылку на ГГ
* *her = Hlp_GetNpc(PC_Hero);
* *// если self есть ГГ
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Круг Воды");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны Воды и для их изготовления необходимые ингридиенты ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Смерч");
* * * *Doc_PrintLine * (nDocID,0,"Крыло кровавого шершня");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Ледяное копье");
* * * *Doc_PrintLine * (nDocID,0,"Ледяной кварц");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Гейзер");
* * * *Doc_PrintLine * (nDocID,0,"Аквамарин");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Шторм");
* * * *Doc_PrintLine * (nDocID,0,"Ледяной кварц");
* * * *Doc_PrintLine * (nDocID,0,"Крыло кровавого шершня");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Кулак воды");
* * * *Doc_PrintLine * (nDocID,0,"Аквамарин");
* * * *Doc_PrintLine * (nDocID,0,"Горный хрусталь");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов воды (2 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC2_S1()
{
* *Use_Runemaking_KDW_CIRC1_S1();
};

//--------------------------------------
// Прочитать книгу рун Магов воды (3 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC3_S1()
{
* *Use_Runemaking_KDW_CIRC1_S1();
};

//--------------------------------------
// Прочитать книгу рун Магов воды (4 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC4_S1()
{
* *Use_Runemaking_KDW_CIRC1_S1();
};

//--------------------------------------
// Прочитать книгу рун Магов воды (5 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC5_S1()
{
* *Use_Runemaking_KDW_CIRC1_S1();
};

//--------------------------------------
// Прочитать книгу рун Магов воды (6 круг)
//--------------------------------------
func void Use_Runemaking_KDW_CIRC6_S1()
{
* *Use_Runemaking_KDW_CIRC1_S1();
};


* *15б. Функции использования Книг рун Магов Огня.

Файл ..\Story\Dialog_Mobsis\BookstandKloster.d

//--------------------------------------
// (не используется)
//--------------------------------------
func void Use_Bookstand_Rune_01_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Страница 1");
* * * *Doc_PrintLine * (nDocID,0,"Рунический камень");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"Страница 2");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// (не используется)
//--------------------------------------
func void Use_Bookstand_Rune_02_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Страница 1");
* * * *Doc_PrintLine * (nDocID,0,"Руны и их ингредиенты ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"Страница 2");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// (не используется)
//--------------------------------------
func void Use_Bookstand_Innos_01_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Страница 1");
* * * *Doc_PrintLine * (nDocID,0,"Учитель Иннос");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"Страница 2");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// (не используется)
//--------------------------------------
func void Use_Bookstand_Innos_02_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Страница 1");
* * * *Doc_PrintLine * (nDocID,0,"Приказы Инноса ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"Страница 2");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов огня (1 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_01_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER ERSTE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны первого Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Свет");
* * * *Doc_PrintLine * (nDocID,0,"Золотая монета");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Огненная стрела ");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Малая молния");
* * * *Doc_PrintLine * (nDocID,0,"Горный хрусталь");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Скелет гоблина");
* * * *Doc_PrintLine * (nDocID,0,"Кость гоблина");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Лечить легкое ранение");
* * * *Doc_PrintLine * (nDocID,0,"Лечебное растение ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов огня (2 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_02_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER ZWEITE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны второго Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Огненный шар");
* * * *Doc_PrintLine * (nDocID,0,"Смола");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Ледяная стрела");
* * * *Doc_PrintLine * (nDocID,0,"Кварц");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Вызвать волка");
* * * *Doc_PrintLine * (nDocID,0,"Шкура волка");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Порыв ветра");
* * * *Doc_PrintLine * (nDocID,0,"Уголь");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Сон");
* * * *Doc_PrintLine * (nDocID,0,"Болотник");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};


...продолжение следует
Ответить с цитированием
Старый 20.06.2005, 11:53   #204
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Прочитать книгу рун Магов огня (3 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_03_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER DRITTE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны третьего Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Лечить среднее ранение ");
* * * *Doc_PrintLine * (nDocID,0,"Лечебная трава ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Малая огненная буря ");
* * * *Doc_PrintLine * (nDocID,0,"Смола");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Вызвать скелет");
* * * *Doc_PrintLine * (nDocID,0,"Кость скелета");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Страх");
* * * *Doc_PrintLine * (nDocID,0,"Черный жемчуг");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Ледяная глыба ");
* * * *Doc_PrintLine * (nDocID,0,"Кварц");
* * * *Doc_PrintLine * (nDocID,0,"Аквамарин");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Шаровая молния ");
* * * *Doc_PrintLine * (nDocID,0,"Горный хрусталь");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Огненный шар");
* * * *Doc_PrintLine * (nDocID,0,"Смола");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов огня (4 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_04_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER VIERTE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны четвертого Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Большой огненный шар");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"Смола");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Удар молнии ");
* * * *Doc_PrintLine * (nDocID,0,"Горный хрусталь");
* * * *Doc_PrintLine * (nDocID,0,"Кварц");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Вызвать голема");
* * * *Doc_PrintLine * (nDocID,0,"Сердце каменного голема");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Уничтожить нежить");
* * * *Doc_PrintLine * (nDocID,0,"Святая вода");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов огня (5 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_05_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER FЬNFTE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны пятого Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Ледяная волна ");
* * * *Doc_PrintLine * (nDocID,0,"Кварц");
* * * *Doc_PrintLine * (nDocID,0,"Аквамарин");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Большая огненная буря ");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"Огненный язык");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Вызвать демона");
* * * *Doc_PrintLine * (nDocID,0,"Сердце демона");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Лечить сильное ранение ");
* * * *Doc_PrintLine * (nDocID,0,"Лечебный корень");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// Прочитать книгу рун Магов огня (6 круг)
//--------------------------------------
func void Use_Bookstand_Kreise_06_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"DER SECHSTE KREIS");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"Руны шестого Круга и необходимые для их изготовления ингредиенты: ");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Огненный дождь");
* * * *Doc_PrintLine * (nDocID,0,"Смола");
* * * *Doc_PrintLine * (nDocID,0,"Сера");
* * * *Doc_PrintLine * (nDocID,0,"Огненный язык");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Дым смерти");
* * * *Doc_PrintLine * (nDocID,0,"Уголь");
* * * *Doc_PrintLine * (nDocID,0,"Черный жемчуг");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Волна смерти ");
* * * *Doc_PrintLine * (nDocID,0,"Кость скелета");
* * * *Doc_PrintLine * (nDocID,0,"Черный жемчуг");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLine * (nDocID,0,"Армия мрака");
* * * *Doc_PrintLine * (nDocID,0,"Кость скелета");
* * * *Doc_PrintLine * (nDocID,0,"Черный жемчуг");
* * * *Doc_PrintLine * (nDocID,0,"Сердце каменного голема");
* * * *Doc_PrintLine * (nDocID,0,"Сердце демона");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"Уменьшить монстра");
* * * *Doc_PrintLine * (nDocID,1,"Кость гоблина");
* * * *Doc_PrintLine * (nDocID,1,"Клык тролля");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Для изготовления руны необходим соответственно ОДИН из указанных ингредиентов. ");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Изготовителю должна быть известна формула магии, он должен иметь рунический камень, а также свиток заклинания.");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"Только если эти условия выполнены он может приступить к изготовлению руны.");
* * * *Doc_Show * * * *(nDocID);
* *};
};

//--------------------------------------
// (не используется)
//--------------------------------------
func void Use_Bookstand_Rules_01_S1()
{
* *var C_Npc her;
* *var int nDocID;
* *her = Hlp_GetNpc(PC_Hero);
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
* *{
* * * *nDocID = Doc_Create();
* * * *Doc_SetPages * *(nDocID,2);
* * * *Doc_SetPage * * (nDocID,0,"Book_Mage_L.tga",0);
* * * *Doc_SetPage * * (nDocID,1,"Book_Mage_R.tga",0);
* * * *Doc_SetFont * * (nDocID,-1,FONT_Book);
* * * *Doc_SetMargins *(nDocID,0,275,20,30,20,1);
* * * *Doc_PrintLine * (nDocID,0,"Страница 1");
* * * *Doc_PrintLine * (nDocID,0,"Правила");
* * * *Doc_PrintLine * (nDocID,0,"");
* * * *Doc_PrintLines *(nDocID,0,"");
* * * *Doc_SetMargins *(nDocID,-1,30,20,275,20,1);
* * * *Doc_PrintLine * (nDocID,1,"Страница 2");
* * * *Doc_PrintLine * (nDocID,1,"");
* * * *Doc_PrintLines *(nDocID,1,"");
* * * *Doc_Show * * * *(nDocID);
* *};
};

Ответить с цитированием
Старый 04.07.2005, 10:53   #205
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *16. Амулеты основной игры.

Файл IT_Amulette.d

//*************************
// Амулеты основной игры
//*************************

// амулет Огня
const int Value_Am_ProtFire * * = 600; * * * * *// стоимость
const int Am_ProtFire * * * * * = 10; * * * * * // бонус защиты от огня
// амулет Брони
const int Value_Am_ProtEdge * * = 800; * * * * *// стоимость
const int Am_ProtEdge * * * * * = 10; * * * * * // бонус защиты от оружия
// амулет Силы духа
const int Value_Am_ProtMage * * = 700; * * * * *// стоимость
const int Am_ProtMage * * * * * = 10; * * * * * // бонус защиты от магии
// амулет Дубовой кожи
const int Value_Am_ProtPoint * *= 500; * * * * *// стоимость
const int Am_ProtPoint * * * * *= 10; * * * * * // бонус защиты от стрел
// амулет Рудной кожи
const int Value_Am_ProtTotal * *= 1000; * * * * // стоимость
const int Am_TProtFire * * * * *= 8; * * * * * *// бонус защиты от огня
const int AM_TProtEdge * * * * *= 8; * * * * * *// бонус защиты от оружия
const int Am_TProtMage * * * * *= 8; * * * * * *// бонус защиты от магии
const int Am_TProtPoint * * * * = 8; * * * * * *// бонус защиты от стрел
// амулет Ловкости
const int Value_Am_Dex * * * * *= 1000; * * * * // стоимость
const int Am_Dex * * * * * * * *= 10; * * * * * // бонус к ловкости
// амулет Магии
const int Value_Am_Mana * * * * = 1000; * * * * // стоимость
const int Am_Mana * * * * * * * = 10; * * * * * // бонус к мане
// амулет Силы
const int Value_Am_Strg * * * * = 1000; * * * * // стоимость
const int Am_Strg * * * * * * * = 10; * * * * * // бонус к силе
// амулет Жизни
const int Value_Am_Hp * * * * * = 400; * * * * *// стоимость
const int Am_Hp * * * * * * * * = 40; * * * * * // бонус к здоровью
// амулет Озарения
const int Value_Am_HpMana * * * = 1300; * * * * // стоимость
const int Am_HpMana_Hp * * * * *= 30; * * * * * // бонус к здоровью
const int Am_HpMana_Mana * * * *= 10; * * * * * // бонус к мане
// амулет Власти
const int Value_Am_DexStrg * * *= 1600; * * * * // стоимость
const int Am_DexStrg_Dex * * * *= 8; * * * * * *// бонус к ловкости
const int Am_DexStrg_Strg * * * = 8; * * * * * *// бонус к силе

//--------------------------------------
// Амулет Огня
//--------------------------------------
INSTANCE ItAm_Prot_Fire_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_ProtFire; * * * * * *// 600
* *visual * * * * *= "ItAm_Prot_Fire_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Prot_Fire_01; * * *// одеть
* *on_unequip * * *= UnEquip_ItAm_Prot_Fire_01; * *// снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет огня";
* *TEXT[2] * * * * = NAME_Prot_Fire; * * * * * * * // "Защита от огня:"
* *COUNT[2] * * * *= Am_ProtFire; * * * * * * * * *// 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 600
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
* *
};

// Одеть
func void Equip_ItAm_Prot_Fire_01()
{
* *// защита от огня += 10
* *self.protection[PROT_FIRE] += Am_ProtFire;
};

// Снять
func void UnEquip_ItAm_Prot_Fire_01()
{
* *// защита от огня -= 10
* *self.protection[PROT_FIRE] -= Am_ProtFire;
};

//--------------------------------------
// Амулет Брони
//--------------------------------------
INSTANCE *ItAm_Prot_Edge_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_ProtEdge; * * * * * *// 800
* *visual * * * * *= "ItAm_Prot_Edge_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Prot_Edge_01; * * *// одеть
* *on_unequip * * *= UnEquip_ItAm_Prot_Edge_01; * *// снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет брони";
* *TEXT[2] * * * * = NAME_Prot_Edge; * * * * * * * // "Защита от оружия:"
* *COUNT[2] * * * *= Am_ProtEdge; * * * * * * * * *// 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 800
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Prot_Edge_01()
{
* *// защита от острого оружия += 10
* *self.protection[PROT_EDGE] += Am_ProtEdge;
* *// защита от тупого оружия += 10
* *self.protection[PROT_BLUNT] += Am_ProtEdge;
};

// Снять
func void UnEquip_ItAm_Prot_Edge_01()
{
* *// защита от острого оружия -= 10
* *self.protection[PROT_EDGE] -= Am_ProtEdge;
* *// защита от тупого оружия -= 10
* *self.protection[PROT_BLUNT] -= Am_ProtEdge;
};

//--------------------------------------
// Амулет Дубовой кожи
//--------------------------------------
INSTANCE *ItAm_Prot_Point_01(C_ITEM)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_ProtPoint; * * * * * // 500
* *visual * * * * *= "ItAm_Prot_Point_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Prot_Point_01; * * // одеть
* *on_unequip * * *= UnEquip_ItAm_Prot_Point_01; * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет дубовой кожи";
* *TEXT[2] * * * * = NAME_Prot_Point; * * * * * * *// "Защита от стрел:"
* *COUNT[2] * * * *= Am_ProtPoint; * * * * * * * * // 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 500
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Prot_Point_01()
{
* *// защита от стрел += 10
* *self.protection[PROT_POINT] += Am_ProtPoint;
};

// Снять
func void UnEquip_ItAm_Prot_Point_01()
{
* *// защита от стрел -= 10
* *self.protection[PROT_POINT] -= Am_ProtPoint;
};

//--------------------------------------
// Амулет Силы духа
//--------------------------------------
INSTANCE *ItAm_Prot_Mage_01(C_ITEM)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_ProtMage; * * * * * *// 700
* *visual * * * * *= "ItAm_Prot_Mage_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Prot_Mage_01; * * *// одеть
* *on_unequip * * *= UnEquip_ItAm_Prot_Mage_01; * *// снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет силы духа";
* *TEXT[2] * * * * = NAME_Prot_Magic; * * * * * * *// "Защита от магии:"
* *COUNT[2] * * * *= Am_ProtMage; * * * * * * * * *// 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 700
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Prot_Mage_01()
{
* *// защита от магии += 10
* *self.protection[PROT_MAGIC] += Am_ProtMage;
};

// Снять
func void UnEquip_ItAm_Prot_Mage_01()
{
* *// защита от магии -= 10
* *self.protection[PROT_MAGIC] -= Am_ProtMage;
};

//--------------------------------------
// Амулет Рудной кожи
//--------------------------------------
INSTANCE *ItAm_Prot_Total_01(C_ITEM)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_ProtTotal; * * * * * // 1000
* *visual * * * * *= "ItAm_Prot_Total_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_Value_Am_ProtTotal; * * // одеть
* *on_unequip * * *= UnEquip_Value_Am_ProtTotal; * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет рудной кожи";
* *TEXT[1] * * * * = NAME_Prot_Fire; * * * * * * * // "Защита от огня:"
* *COUNT[1] * * * *= AM_TProtFire; * * * * * * * * // 8
* *TEXT[2] * * * * = NAME_Prot_Magic; * * * * * * *// "Защита от магии:"
* *COUNT[2] * * * *= AM_TProtMage; * * * * * * * * // 8
* *TEXT[3] * * * * = NAME_Prot_Point; * * * * * * *// "Защита от стрел:"
* *COUNT[3] * * * *= AM_TProtPoint; * * * * * * * *// 8
* *TEXT[4] * * * * = NAME_Prot_Edge; * * * * * * * // "Защита от оружия:"
* *COUNT[4] * * * *= AM_TProtEdge; * * * * * * * * // 8
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1000
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_Value_Am_ProtTotal()
{
* *// увеличить всю защиту ( += 8 )
* *self.protection[PROT_EDGE] * += AM_TProtEdge;
* *self.protection[PROT_BLUNT] *+= AM_TProtEdge;
* *self.protection[PROT_POINT] *+= AM_TProtPoint;
* *self.protection[PROT_FIRE] * += AM_TProtFire;
* *self.protection[PROT_MAGIC] *+= AM_TProtMage;
};

// Снять
func void UnEquip_Value_Am_ProtTotal()
{
* *// уменьшить всю защиту ( -= 8 )
* *self.protection[PROT_EDGE] * -= *AM_TProtEdge;
* *self.protection[PROT_BLUNT] *-= *AM_TProtEdge;
* *self.protection[PROT_POINT] *-= *AM_TProtPoint;
* *self.protection[PROT_FIRE] * -= *AM_TProtFire;
* *self.protection[PROT_MAGIC] *-= *AM_TProtMage;
};

//--------------------------------------
// Амулет Ловкости
//--------------------------------------
INSTANCE *ItAm_Dex_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_Dex; * * * * * * * * // 1000
* *visual * * * * *= "ItAm_Dex_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Dex_01; * * * * * *// одеть
* *on_unequip * * *= UnEquip_ItAm_Dex_01; * * * * *// снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет ловкости";
* *TEXT[2] * * * * = NAME_Bonus_Dex; * * * * * * * // "Прибавка к ловкости:"
* *COUNT[2] * * * *= Am_Dex; * * * * * * * * * * * // 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1000
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Dex_01()
{
* *// ловкость += 10
* *Npc_ChangeAttribute(self,ATR_DEXTERITY,+Am_Dex);
};

// Снять
func void UnEquip_ItAm_Dex_01()
{
* *// ловкость -= 10
* *Npc_ChangeAttribute(self,ATR_DEXTERITY,-Am_Dex);
};

//--------------------------------------
// Амулет Силы
//--------------------------------------
INSTANCE *ItAm_Strg_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_Strg; * * * * * * * *// 1000
* *visual * * * * *= "ItAm_Strg_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Strg_01; * * * * * // одеть
* *on_unequip * * *= UnEquip_ItAm_Strg_01; * * * * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет силы";
* *TEXT[2] * * * * = NAME_Bonus_Str; * * * * * * * // "Прибавка к силе:"
* *COUNT[2] * * * *= Am_Strg; * * * * * * * * * * *// 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1000
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Strg_01()
{
* *// сила += 10
* *Npc_ChangeAttribute(self,ATR_STRENGTH,+Am_Strg);
};

// Снять
func void UnEquip_ItAm_Strg_01()
{
* *// сила -= 10
* *Npc_ChangeAttribute(self,ATR_STRENGTH,-Am_Strg);
};

//--------------------------------------
// Амулет Жизни
//--------------------------------------
INSTANCE *ItAm_Hp_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_Hp; * * * * * * * * *// 400
* *visual * * * * *= "ItAm_Hp_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Hp_01; * * * * * * // одеть
* *on_unequip * * *= UnEquip_ItAm_Hp_01; * * * * * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет жизни";
* *TEXT[2] * * * * = NAME_Bonus_HP; * * * * * * * *// "Прибавка к жизни:"
* *COUNT[2] * * * *= Am_Hp; * * * * * * * * * * * *// 40
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Hp_01()
{
* *// макс. жизнь += 40
* *self.attribute[ATR_HITPOINTS_MAX] = self.attribute[ATR_HITPOINTS_MAX] + Am_Hp;
* *// жизнь += 40
* *self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS] + Am_Hp;
};

// Снять
func void UnEquip_ItAm_Hp_01()
{
* *// макс. жизнь -= 40
* *self.attribute[ATR_HITPOINTS_MAX] = self.attribute[ATR_HITPOINTS_MAX] - Am_Hp;
* *// если жизнь > 42
* *if(self.attribute[ATR_HITPOINTS] > (Am_Hp + 2))
* *{
* * * *// жизнь -= 40
* * * *self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS] - Am_Hp;
* *}
* *else
* *{
* * * *// жизнь = 2
* * * *self.attribute[ATR_HITPOINTS] = 2;
* *};
};

//--------------------------------------
// Амулет Магии
//--------------------------------------
INSTANCE *ItAm_Mana_01(C_Item)
{
* *name * * * * * *= NAME_Amulett; * * * * * * * * // "Амулет"
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_Mana; * * * * * * * *// 1000
* *visual * * * * *= "ItAm_Mana_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Mana_01; * * * * * // одеть
* *on_unequip * * *= UnEquip_ItAm_Mana_01; * * * * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет магии";
* *TEXT[2] * * * * = NAME_Bonus_Mana; * * * * * * *// "Прибавка к мане:"
* *COUNT[2] * * * *= Am_Mana; * * * * * * * * * * *// 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1000
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Mana_01()
{
* *// макс. мана += 10
* *self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] + Am_Mana;
* *// мана += 10
* *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] + Am_Mana;
};

// Снять
func void UnEquip_ItAm_Mana_01()
{
* *// макс. мана += 10
* *self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] - Am_Mana;
* *// если мана > 10
* *if(self.attribute[ATR_MANA] > (Am_Mana))
* *{
* * * *// мана -= 10
* * * *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - Am_Mana;
* *}
* *else
* *{
* * * *// мана = 0
* * * *self.attribute[ATR_MANA] = 0;
* *}; *
};

//--------------------------------------
// Амулет Власти
//--------------------------------------
INSTANCE *ItAm_Dex_Strg_01(C_Item)
{
* *name * * * * * *= "Амулет власти";
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_DexStrg; * * * * * * // 1600
* *visual * * * * *= "ItAm_Dex_Strg_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Dex_Strg_01; * * * // одеть
* *on_unequip * * *= UnEquip_ItAm_Dex_Strg_01; * * // снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет власти";
* *TEXT[2] * * * * = NAME_Bonus_Dex; * * * * * * * // "Прибавка к ловкости:"
* *COUNT[2] * * * *= Am_DexStrg_Dex; * * * * * * * // 8
* *TEXT[3] * * * * = NAME_Bonus_Str; * * * * * * * // "Прибавка к силе:"
* *COUNT[3] * * * *= Am_DexStrg_Strg; * * * * * * *// 8
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1600
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Dex_Strg_01()
{
* *// ловкость += 8
* *Npc_ChangeAttribute(self,ATR_DEXTERITY,+Am_DexStr g_Dex);
* *// сила += 8
* *Npc_ChangeAttribute(self,ATR_STRENGTH,+Am_DexStrg _Strg);
};

// Снять
func void UnEquip_ItAm_Dex_Strg_01()
{
* *// ловкость -= 8
* *Npc_ChangeAttribute(self,ATR_DEXTERITY,-Am_DexStrg_Dex);
* *// сила -= 8
* *Npc_ChangeAttribute(self,ATR_STRENGTH,-Am_DexStrg_Strg);
};

//--------------------------------------
// Амулет Озарения
//--------------------------------------
INSTANCE *ItAm_Hp_Mana_01(C_Item)
{
* *name * * * * * *= "Амулет озарения";
* *mainflag * * * *= ITEM_KAT_MAGIC; * * * * * * * // амулеты
* *flags * * * * * = ITEM_AMULET;
* *value * * * * * = Value_Am_HpMana; * * * * * * *// 1300
* *visual * * * * *= "ItAm_Hp_Mana_01.3ds";
* *visual_skin * * = 0;
* *material * * * *= MAT_METAL; * * * * * * * * * *// металл
* *on_equip * * * *= Equip_ItAm_Hp_Mana_01; * * * *// одеть
* *on_unequip * * *= UnEquip_ItAm_Hp_Mana_01; * * *// снять
* *wear * * * * * *= WEAR_EFFECT;
* *effect * * * * *= "SPELLFX_ITEMGLIMMER";
* *description * * = "Амулет озарения";
* *TEXT[2] * * * * = NAME_Bonus_HP; * * * * * * * *// "Прибавка к жизни:"
* *COUNT[2] * * * *= Am_HpMana_Hp; * * * * * * * * // 30
* *TEXT[3] * * * * = NAME_Bonus_Mana; * * * * * * *// "Прибавка к мане:"
* *COUNT[3] * * * *= Am_HpMana_Mana; * * * * * * * // 10
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 1300
* *INV_ZBIAS * * * = INVCAM_ENTF_AMULETTE_STANDARD;
};

// Одеть
func void Equip_ItAm_Hp_Mana_01()
{
* *// жизнь += 30
* *self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS] + Am_HpMana_Hp;
* *// макс. жизнь += 30
* *self.attribute[ATR_HITPOINTS_MAX] = self.attribute[ATR_HITPOINTS_MAX] + Am_HpMana_Hp;
* *// мана += 10
* *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] + Am_HpMana_Mana;
* *// макс.мана += 10
* *self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] + Am_HpMana_Mana;
};

// Снять
func void UnEquip_ItAm_Hp_Mana_01()
{
* *// макс. мана -= 10
* *self.attribute[ATR_MANA_MAX] = self.attribute[ATR_MANA_MAX] - Am_HpMana_Mana;
* *// макс. жизнь -= 30
* *self.attribute[ATR_HITPOINTS_MAX] = self.attribute[ATR_HITPOINTS_MAX] - Am_HpMana_Hp;
* *// если жизнь > 31
* *if(self.attribute[ATR_HITPOINTS] > Am_HpMana_Hp + 1)
* *{
* * * *// жизнь -= 30
* * * *self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS] - Am_HpMana_Hp;
* *}
* *else
* *{
* * * *// жизнь = 2
* * * *self.attribute[ATR_HITPOINTS] = 2;
* *};
* *// если мана >= 10
* *if(self.attribute[ATR_MANA] >= Am_HpMana_Mana)
* *{
* * * *// мана -= 10
* * * *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - Am_HpMana_Mana;
* *}
* *else
* *{
* * * *// мана = 0
* * * *self.attribute[ATR_MANA] = 0;
* *};
};

Ответить с цитированием
Старый 05.07.2005, 10:52   #206
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *17. Охотничьи трофеи.

Файл IT_AnimalTrophy.d

//*************************
// Охотничьи трофеи
//*************************

// стоимость
const int * Value_BCKopf * * * * * * * *= * 50; * * // голова богомола
const int * Value_Meatbugflesh * * * * *= * 10; * * // мясо мясного жука
const int * Value_SheepFur * * * * * * *= * 10; * * // шкура овцы
const int * Value_WolfFur * * * * * * * = * 10; * * // шкура волка
const int * Value_BugMandibles * * * * *= * 15; * * // жвало полевого жука
const int * Value_Claw * * * * * * * * *= * 15; * * // когти
const int * Value_LurkerClaw * * * * * *= * 15; * * // когти шныга
const int * Value_Teeth * * * * * * * * = * 15; * * // зубы
const int * Value_CrawlerMandibles * * *= * 15; * * // жвало ползуна
const int * Value_Wing * * * * * * * * *= * 20; * * // крыло
const int * Value_Sting * * * * * * * * = * 25; * * // жало
const int * Value_ReptileSkin * * * * * = * 25; * * // кожа рептилии
const int * Value_WargFur * * * * * * * = * 25; * * // шкура варга
const int * Value_DrgSnapperHorn * * * *= * 100; * *// рог остера
const int * Value_CrawlerPlate * * * * *= * 50; * * // панцирь ползуна
const int * Value_ShadowFur * * * * * * = * 250; * *// шкура мракориса
const int * Value_SharkSkin * * * * * * = * 200; * *// кожа болотожора
const int * Value_TrollFur * * * * * * *= * 300; * *// шкура тролля
const int * Value_WaranFiretongue * * * = * 300; * *// огненный язык
const int * Value_ShadowHorn * * * * * *= * 300; * *// рог мракориса
const int * Value_SharkTeeth * * * * * *= * 300; * *// зубы болотожора
const int * Value_TrollTooth * * * * * *= * 300; * *// клык тролля
const int * Value_TrollBlackFur * * * * = * 350; * *// шкура черного тролля
const int * Value_GoblinBone * * * * * *= * 10; * * // кость гоблина
const int * Value_SkeletonBone * * * * *= * 10; * * // кость скелета
const int * Value_DemonHeart * * * * * *= * 300; * *// сердце демона
const int * Value_StoneGolemHeart * * * = * 300; * *// сердце каменного голема
const int * Value_FireGolemHeart * * * *= * 300; * *// сердце огненного голема
const int * Value_IceGolemHeart * * * * = * 300; * *// сердце ледяного голема
const int * Value_UndeadDragonSoulStone = * 400; * *// каменная душа дракона нежити
const int * Value_IcedragonHeart * * * *= * 400; * *// сердце ледяного дракона
const int * Value_FiredragonHeart * * * = * 400; * *// сердце огненного дракона
const int * Value_SwampdragonHeart * * *= * 400; * *// сердце болотного дракона
const int * Value_RockdragonHeart * * * = * 400; * *// сердце каменного дракона
const int * Value_DragonBlood * * * * * = * 200; * *// кровь дракона
const int * Value_DragonScale * * * * * = * 200; * *// чешуя дракона
const int * Value_Keilerfur * * * * * * = * *15; * *// шкура кабана

//--------------------------------------
// Голова богомола
//--------------------------------------
INSTANCE ItAt_Addon_BCKopf(C_Item)
{
* *name * * * * * *= "Kopf"; * * * * * * * * * * * // (не переведено)
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_BCKopf; * * * * * * * * // 50
* *visual * * * * *= "ItAt_Blattcrawler_01.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = "Голова богомола";
* *TEXT[0] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 50
};

//--------------------------------------
// Мясо мясного жука
//--------------------------------------
INSTANCE ItAt_Meatbugflesh(C_Item)
{
* *name * * * * * *= "Мясо мясного жука";
* *mainflag * * * *= ITEM_KAT_FOOD; * * * * * * * *// еда
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_Meatbugflesh; * * * * * // 10
* *visual * * * * *= "ItAt_Meatbugflesh.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *scemeName * * * = "FOODHUGE";
* *on_state[0] * * = Use_Meatbugflesh; * * * * * * // использовать
* *description * * = name; * * * * * * * * * * * * // "Мясо мясного жука"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = NAME_Bonus_HP; * * * * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * *= 10; * * * * * * * * * * * * * // 10
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 10
};

// Использовать
func void Use_Meatbugflesh()
{
* *// жизнь += 10
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,10);
};

//--------------------------------------
// Шкура овцы
//--------------------------------------
INSTANCE ItAt_SheepFur(C_Item)
{
* *name * * * * * *= "Шкура овцы";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_SheepFur; * * * * * * * // 10
* *visual * * * * *= "ItAt_SheepFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура овцы"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 10
};

//--------------------------------------
// Шкура волка
//--------------------------------------
INSTANCE ItAt_WolfFur(C_Item)
{
* *name * * * * * *= "Шкура волка";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_WolfFur; * * * * * * * *// 10
* *visual * * * * *= "ItAt_WolfFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура волка"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 10
};

//--------------------------------------
// Жвало полевого жука
//--------------------------------------
INSTANCE ItAt_BugMandibles(C_Item)
{
* *name * * * * * *= "Жвало полевого жука";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_BugMandibles; * * * * * // 15
* *visual * * * * *= "ItAt_BugMandibles.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Жвало полевого жука"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

//--------------------------------------
// Когти
//--------------------------------------
INSTANCE ItAt_Claw(C_Item)
{
* *name * * * * * *= "Когти";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_Claw; * * * * * * * * * // 15
* *visual * * * * *= "ItAt_Claw.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Когти"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

//--------------------------------------
// Когти шныга
//--------------------------------------
INSTANCE ItAt_LurkerClaw(C_Item)
{
* *name * * * * * *= "Когти шныга";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_LurkerClaw; * * * * * * // 15
* *visual * * * * *= "ItAt_LurkerClaw.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Когти шныга"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

//--------------------------------------
// Зубы
//--------------------------------------
INSTANCE ItAt_Teeth(C_Item)
{
* *name * * * * * *= "Зубы";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_Teeth; * * * * * * * * *// 15
* *visual * * * * *= "ItAt_Teeth.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Зубы"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

//--------------------------------------
// Жвало ползуна
//--------------------------------------
INSTANCE ItAt_CrawlerMandibles(C_Item)
{
* *name * * * * * *= "Жвало ползуна";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_CrawlerMandibles; * * * // 15
* *visual * * * * *= "ItAt_CrawlerMandibles.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *scemeName * * * = "FOOD";
* *on_state[0] * * = Use_Mandibles; * * * * * * * *// использовать
* *description * * = name; * * * * * * * * * * * * // "Жвало ползуна"
* *TEXT[0] * * * * = "В этом жвале содержится особенный ";
* *TEXT[1] * * * * = "сок, который обладает действием";
* *TEXT[2] * * * * = "восстанавливать магическую энергию.";
* *TEXT[3] * * * * = "Со временем прекращает действовать.";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

// Использовать
func void Use_Mandibles()
{
* *// если съедено менее 10 жвал
* *if(Mandibles_Bonus <= 9)
* *{
* * * *// восстановить ману до максимальной
* * * *Npc_ChangeAttribute(self,ATR_MANA,self.attribute[ATR_MANA_MAX]);
* * * *// кол-во съеденных жвал ++
* * * *Mandibles_Bonus = (Mandibles_Bonus + 1);
* *}
* *else
* *{
* * * *// вывод на экран - "Этот сок больше не действует."
* * * *PrintScreen(PRINT_Mandibles,-1,YPOS_LEVELUP,FONT_ScreenSmall,2);
* *};
};

//--------------------------------------
// Крыло
//--------------------------------------
INSTANCE ItAt_Wing(C_Item)
{
* *name * * * * * *= "Flьgel";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_Wing; * * * * * * * * * // 20
* *visual * * * * *= "ItAt_Wing.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Крыло"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 20
};

//--------------------------------------
// Жало
//--------------------------------------
INSTANCE ItAt_Sting(C_Item)
{
* *name * * * * * *= "Жало";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_Sting; * * * * * * * * *// 25
* *scemeName * * * = "FOOD";
* *on_state[0] * * = Use_Sting; * * * * * * * * * *// использовать
* *visual * * * * *= "ItAt_Sting.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Жало"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "Жало";
* *TEXT[2] * * * * = "содержит ядовитый сок";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 25
};

// Использовать
func void Use_Sting()
{
* *// если ГГ умеет получать лечебный сок
* *if(Knows_Bloodfly == TRUE)
* *{
* * * *// если съедено менее 11 жал
* * * *if(Bloodfly_Bonus <= 10)
* * * *{
* * * * * *// восстановить жизнь до максимальной
* * * * * *Npc_ChangeAttribute(self,ATR_HITPOINTS,self.attri bute[ATR_HITPOINTS_MAX]);
* * * * * *// вывод на экран - "Полностью вылечен"
* * * * * *Print(PRINT_FullyHealed);
* * * * * *// кол-во съеденных жал ++
* * * * * *Bloodfly_Bonus = (Bloodfly_Bonus+1);
* * * *}
* * * *else
* * * *{
* * * * * *// вывод на экран "Этот сок больше не действует."
* * * * * *Print(PRINT_Mandibles);
* * * *};
* *}
* *else
* *{
* * * *// вывод на экран "На вкус горький и ядовитый"
* * * *Print(PRINT_Bloodfly);
* * * *// если жизнь > 1
* * * *if(self.attribute[ATR_HITPOINTS] > 1)
* * * *{
* * * * * *// жизнь -= 1
* * * * * *self.attribute[ATR_HITPOINTS] = (self.attribute[ATR_HITPOINTS] - 1);
* * * *};
* *};
};

//--------------------------------------
// Кожа рептилии
//--------------------------------------
INSTANCE itat_LurkerSkin(C_Item)
{
* *name * * * * * *= "Кожа рептилии";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_ReptileSkin; * * * * * *// 25
* *visual * * * * *= "ItAt_LurkerSkin.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = "Кожа рептилии";
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 25
};

//--------------------------------------
// Шкура варга
//--------------------------------------
INSTANCE ItAt_WargFur(C_Item)
{
* *name * * * * * *= "Шкура варга";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_WargFur; * * * * * * * *// 25
* *visual * * * * *= "ItAt_WargFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура варга"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 25
};

//--------------------------------------
// Шкура кабана
//--------------------------------------
INSTANCE ItAt_Addon_KeilerFur(C_Item)
{
* *name * * * * * *= "Шкура кабана";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_KeilerFur; * * * * * * *// 15
* *visual * * * * *= "ItAt_WargFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура кабана"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 15
};

//--------------------------------------
// Рог остера
//--------------------------------------
INSTANCE ItAt_DrgSnapperHorn(C_Item)
{
* *name * * * * * *= "Рог остера";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_DrgSnapperHorn; * * * * // 100
* *visual * * * * *= "ItAt_DrgSnapperHorn.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Рог остера"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 100
};

//--------------------------------------
// Панцирь ползуна
//--------------------------------------
INSTANCE ItAt_CrawlerPlate(C_Item)
{
* *name * * * * * *= "Панцирь ползуна";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_CrawlerPlate; * * * * * // 50
* *visual * * * * *= "ItAt_CrawlerPlate.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Панцирь ползуна"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 50
};

//--------------------------------------
// Шкура мракориса
//--------------------------------------
INSTANCE ItAt_ShadowFur(C_Item)
{
* *name * * * * * *= "Шкура мракориса";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_ShadowFur; * * * * * * *// 250
* *visual * * * * *= "ItAt_ShadowFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура мракориса"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 250
};

//--------------------------------------
// Кожа болотожора
//--------------------------------------
INSTANCE ItAt_SharkSkin(C_Item)
{
* *name * * * * * *= "Кожа болотожора";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_SharkSkin; * * * * * * *// 200
* *visual * * * * *= "ItAt_SharkSkin.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Кожа болотожора"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 200
};

//--------------------------------------
// Шкура тролля
//--------------------------------------
INSTANCE ItAt_TrollFur(C_Item)
{
* *name * * * * * *= "Шкура тролля";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_TrollFur; * * * * * * * // 300
* *visual * * * * *= "ItAt_TrollFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура тролля"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Шкура черного тролля
//--------------------------------------
INSTANCE ItAt_TrollBlackFur(C_Item)
{
* *name * * * * * *= "Шкура черного тролля";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_TrollBlackFur; * * * * *// 350
* *visual * * * * *= "ItAt_TrollFur.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Шкура черного тролля"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 350
};

//--------------------------------------
// Огненный язык
//--------------------------------------
INSTANCE ItAt_WaranFiretongue(C_Item)
{
* *name * * * * * *= "Огненный язык";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_WaranFiretongue; * * * *// 300
* *visual * * * * *= "ItAt_WaranFiretongue.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Огненный язык"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Рог мракориса
//--------------------------------------
INSTANCE ItAt_ShadowHorn(C_Item)
{
* *name * * * * * *= "Рог мракориса";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_ShadowHorn; * * * * * * // 300
* *visual * * * * *= "ItAt_ShadowHorn.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Рог мракориса"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Зубы болотожора
//--------------------------------------
INSTANCE ItAt_SharkTeeth(C_Item)
{
* *name * * * * * *= "Зубы болотожора";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_SharkTeeth; * * * * * * // 300
* *visual * * * * *= "ItAt_SharkTeeth.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Зубы болотожора"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Клык тролля
//--------------------------------------
INSTANCE ItAt_TrollTooth(C_Item)
{
* *name * * * * * *= "Клык тролля";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_TrollTooth; * * * * * * // 300
* *visual * * * * *= "ItAt_TrollTooth.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Клык тролля"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
* *INV_ZBIAS * * * = INVCAM_ENTF_RING_STANDARD;
};

...продолжение следует
Ответить с цитированием
Старый 05.07.2005, 10:56   #207
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Сердце каменного голема
//--------------------------------------
INSTANCE ItAt_StoneGolemHeart(C_Item)
{
* *name * * * * * *= "Сердце каменного голема";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_StoneGolemHeart; * * * *// 300
* *visual * * * * *= "ItAt_StoneGolemHeart.3DS";
* *material * * * *= MAT_STONE; * * * * * * * * * *// камень
* *description * * = name; * * * * * * * * * * * * // "Сердце каменного голема"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Сердце огненного голема
//--------------------------------------
INSTANCE ItAt_FireGolemHeart(C_Item)
{
* *name * * * * * *= "Сердце огненного голема";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_FireGolemHeart; * * * * // 300
* *visual * * * * *= "ItAt_FireGolemHeart.3DS";
* *material * * * *= MAT_STONE; * * * * * * * * * *// камень
* *description * * = name; * * * * * * * * * * * * // "Сердце огненного голема"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Сердце ледяного голема
//--------------------------------------
INSTANCE ItAt_IceGolemHeart(C_Item)
{
* *name * * * * * *= "Сердце ледяного голема";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_IceGolemHeart; * * * * *// 300
* *visual * * * * *= "ItAt_IceGolemHeart.3DS";
* *material * * * *= MAT_STONE; * * * * * * * * * *// камень
* *description * * = name; * * * * * * * * * * * * // "Сердце ледяного голема"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Кость гоблина
//--------------------------------------
INSTANCE ItAt_GoblinBone(C_Item)
{
* *name * * * * * *= "Кость гоблина";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_GoblinBone; * * * * * * // 10
* *visual * * * * *= "ItAt_GoblinBone.3DS";
* *material * * * *= MAT_WOOD; * * * * * * * * * * // дерево
* *description * * = name; * * * * * * * * * * * * // "Кость гоблина"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 10
};

//--------------------------------------
// Кость скелета
//--------------------------------------
INSTANCE ItAt_SkeletonBone(C_Item)
{
* *name * * * * * *= "Кость скелета";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_SkeletonBone; * * * * * // 10
* *visual * * * * *= "ItAt_SkeletonBone.3DS";
* *material * * * *= MAT_WOOD; * * * * * * * * * * // дерево
* *description * * = name; * * * * * * * * * * * * // "Кость скелета"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 10
};

//--------------------------------------
// Сердце демона
//--------------------------------------
INSTANCE ItAt_DemonHeart(C_Item)
{
* *name * * * * * *= "Сердце демона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_DemonHeart; * * * * * * // 300
* *visual * * * * *= "ItAt_DemonHeart.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Сердце демона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 300
};

//--------------------------------------
// Каменная душа дракона нежити
//--------------------------------------
INSTANCE ItAt_UndeadDragonSoulStone(C_Item)
{
* *name * * * * * *= "Каменная душа дракона нежити";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_UndeadDragonSoulStone; *// 400
* *visual * * * * *= "ItAt_UndeadDragonSoulStone.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Каменная душа дракона нежити"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
* *INV_ZBIAS * * * = INVCAM_ENTF_MISC_STANDARD;
};

//--------------------------------------
// Сердце ледяного дракона
//--------------------------------------
INSTANCE ItAt_IcedragonHeart(C_Item)
{
* *name * * * * * *= "Сердце ледяного дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_IcedragonHeart; * * * * // 400
* *visual * * * * *= "ItAt_IcedragonHeart.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Сердце ледяного дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
};

//--------------------------------------
// Сердце каменного дракона
//--------------------------------------
INSTANCE ItAt_RockdragonHeart(C_Item)
{
* *name * * * * * *= "Сердце каменного дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_RockdragonHeart; * * * *// 400
* *visual * * * * *= "ItAt_RockdragonHeart.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Сердце каменного дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
};

//--------------------------------------
// Сердце болотного дракона
//--------------------------------------
INSTANCE ItAt_SwampdragonHeart(C_Item)
{
* *name * * * * * *= "Сердце болотного дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_SwampdragonHeart; * * * // 400
* *visual * * * * *= "ItAt_SwampdragonHeart.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Сердце болотного дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
};

//--------------------------------------
// Сердце огненного дракона
//--------------------------------------
INSTANCE ItAt_FiredragonHeart(C_Item)
{
* *name * * * * * *= "Сердце огненного дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_FiredragonHeart; * * * *// 400
* *visual * * * * *= "ItAt_FiredragonHeart.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Сердце огненного дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 400
};

//--------------------------------------
// Кровь дракона
//--------------------------------------
INSTANCE ItAt_DragonBlood(C_Item)
{
* *name * * * * * *= "Кровь дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI ¦ ITEM_MISSION; * *// складируемый + квестовый
* *value * * * * * = Value_DragonBlood; * * * * * *// 200
* *visual * * * * *= "ItAt_DragonBlood.3DS";
* *material * * * *= MAT_LEATHER; * * * * * * * * *// кожа
* *description * * = name; * * * * * * * * * * * * // "Кровь дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 200
* *INV_ZBIAS * * * = INVCAM_ENTF_MISC_STANDARD;
};

//--------------------------------------
// Чешуя дракона
//--------------------------------------
INSTANCE ItAt_DragonScale(C_Item)
{
* *name * * * * * *= "Чешуя дракона";
* *mainflag * * * *= ITEM_KAT_NONE; * * * * * * * *// прочее
* *flags * * * * * = ITEM_MULTI; * * * * * * * * * // складируемый
* *value * * * * * = Value_DragonScale; * * * * * *// 200
* *visual * * * * *= "ItAt_DragonScale.3DS";
* *material * * * *= MAT_STONE ; * * * * * * * * * // камень
* *description * * = name; * * * * * * * * * * * * // "Чешуя дракона"
* *TEXT[0] * * * * = "";
* *TEXT[1] * * * * = "";
* *TEXT[2] * * * * = "";
* *TEXT[3] * * * * = "";
* *TEXT[5] * * * * = NAME_Value; * * * * * * * * * // "Ценность:"
* *COUNT[5] * * * *= value; * * * * * * * * * * * *// 200
};

Ответить с цитированием
Старый 06.07.2005, 16:38   #208
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Pa:
Прослойки уже не обязательны, файлы идут длинные.

* *18. Броня основной игры.

Файл IT_Armor.d

//*************************
// Броня основной игры
//*************************

// стоимость
const int VALUE_ITAR_Governor * = 1100; * * * * // Накидка городского советника
const int VALUE_ITAR_Judge * * *= 0; * * * * * *// Одежда судьи
const int VALUE_ITAR_Smith * * *= 0; * * * * * *// Одежда кузнеца
const int VALUE_ITAR_Barkeeper *= 0; * * * * * *// Одежда трактирщика
const int VALUE_ITAR_Vlk_L * * *= 120; * * * * *// Одежда горожанина (бедная)
const int VALUE_ITAR_Vlk_M * * *= 120; * * * * *// Одежда горожанина (скромная)
const int VALUE_ITAR_Vlk_H * * *= 120; * * * * *// Одежда горожанина (богатая)
const int VALUE_ITAR_VlkBabe_L *= 0; * * * * * *// Одежда горожанки (бедная)
const int VALUE_ITAR_VlkBabe_M *= 0; * * * * * *// Одежда горожанки (скромная)
const int VALUE_ITAR_VlkBabe_H *= 0; * * * * * *// Одежда горожанки (богатая)
const int VALUE_ITAR_MIL_L * * *= 600; * * * * *// Легкие доспехи ополчения
const int VALUE_ITAR_MIL_M * * *= 2500; * * * * // Тяжелые доспехи ополчения
const int VALUE_ITAR_PAL_M * * *= 5000; * * * * // Доспехи паладина
const int VALUE_ITAR_PAL_H * * *= 20000; * * * *// Доспехи паладина (тяжелые)
const int VALUE_ITAR_Bau_L * * *= 80; * * * * * // Одежда крестьянина (бедная)
const int VALUE_ITAR_Bau_M * * *= 100; * * * * *// Одежда крестьянина (скромная)
const int VALUE_ITAR_BauBabe_L *= 0; * * * * * *// Гордость крестьянки (бедная)
const int VALUE_ITAR_BauBabe_M *= 0; * * * * * *// Гордость крестьянки (скромная)
const int VALUE_ITAR_SLD_L * * *= 500; * * * * *// Легкие доспехи наемника
const int VALUE_ITAR_SLD_M * * *= 1000; * * * * // Средние доспехи наемника
const int VALUE_ITAR_SLD_H * * *= 2500; * * * * // Тяжелые доспехи наемника
const int VALUE_ITAR_DJG_Crawler= 1500; * * * * // Доспехи из панцирей ползунов
const int VALUE_ITAR_NOV_L * * *= 280; * * * * *// Роба послушника
const int VALUE_ITAR_KDF_L * * *= 500; * * * * *// Роба мага огня
const int VALUE_ITAR_KDF_H * * *= 3000; * * * * // Тяжелая роба огня
const int VALUE_ITAR_Leather_L *= 250; * * * * *// Кожаные доспехи
const int VALUE_ITAR_BDT_M * * *= 550; * * * * *// Средняя бандитская кольчуга
const int VALUE_ITAR_BDT_H * * *= 2100; * * * * // Тяжелая бандитская кольчуга
const int VALUE_ITAR_DJG_L * * *= 3000; * * * * // Легкие доспехи охотника на драконов
const int VALUE_ITAR_DJG_M * * *= 12000; * * * *// Средние доспехи охотника на драконов
const int VALUE_ITAR_DJG_H * * *= 20000; * * * *// Тяжелые доспехи охотника на драконов
const int VALUE_ITAR_DJG_Babe * = 0; * * * * * *// Кольчуга охотницы за драконами
const int VALUE_ITAR_XARDAS * * = 15000; * * * *// Роба темных сил
const int VALUE_ITAR_LESTER * * = 300; * * * * *// Роба Лестера
const int VALUE_ITAR_DIEGO * * *= 450; * * * * *// Кольчуга Диего
const int VALUE_ITAR_CorAngar * = 600; * * * * *// Кольчуга Кор Ангара
const int VALUE_ITAR_Dementor * = 500; * * * * *// Темная накидка
const int VALUE_ITAR_KDW_H * * *= 450; * * * * *// Роба мага воды
const int VALUE_ITAR_Prisoner * = 10; * * * * * // Одежда заключенного

//--------------------------------------
// Накидка городского советника
//--------------------------------------
INSTANCE ITAR_Governor (C_Item)
{
* *name * * * * * * * * * *= * "Накидка городского советника";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 40;
* *protection[PROT_BLUNT] *= * 40;
* *protection[PROT_POINT] *= * 40;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_Governor; * *// 1100
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Governor.3ds";
* *visual_change * * * * * = * "Armor_Governor.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Накидка городского советника"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 40
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 40
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 1100
};

//--------------------------------------
// Одежда судьи
//--------------------------------------
INSTANCE ITAR_JUDGE (C_Item)
{
* *name * * * * * * * * * *= * "Одежда судьи";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_JUDGE; * * * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Governor.3DS";
* *visual_change * * * * * = * "Armor_Judge.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда судьи"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Одежда кузнеца
//--------------------------------------
INSTANCE ITAR_SMITH (C_Item)
{
* *name * * * * * * * * * *= * "Одежда кузнеца";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 15;
* *protection[PROT_BLUNT] *= * 15;
* *protection[PROT_POINT] *= * 15;
* *protection[PROT_FIRE] * = * 5;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_SMITH; * * * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Smith.3DS";
* *visual_change * * * * * = * "Armor_Smith.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда кузнеца"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 15
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 15
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 5
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Одежда трактирщика
//--------------------------------------
INSTANCE ITAR_BARKEEPER (C_Item)
{
* *name * * * * * * * * * *= * "Одежда трактирщика";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BARKEEPER; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Wirt.3DS";
* *visual_change * * * * * = * "Armor_Barkeeper.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда трактирщика"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Одежда горожанина (бедная)
//--------------------------------------
INSTANCE ITAR_VLK_L (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VLK_L; * * * // 120
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLK_L.3DS";
* *visual_change * * * * * = * "Armor_Vlk_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 120
};

//--------------------------------------
// Одежда горожанина (скромная)
//--------------------------------------
INSTANCE ITAR_VLK_M (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VLK_M; * * * // 120
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLK_M.3DS";
* *visual_change * * * * * = * "Armor_Vlk_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 120
};

//--------------------------------------
// Одежда горожанина (богатая)
//--------------------------------------
INSTANCE ITAR_VLK_H (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VLK_H; * * * // 120
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLK_H.3DS";
* *visual_change * * * * * = * "Armor_Vlk_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 120
};

//--------------------------------------
// Одежда горожанки (бедная)
//--------------------------------------
instance ITAR_VlkBabe_L (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанки";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VlkBabe_L; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLKBabe.3DS";
* *visual_change * * * * * = * "Armor_VlkBabe_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанки"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Одежда горожанки (скромная)
//--------------------------------------
INSTANCE ITAR_VlkBabe_M (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанки";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VlkBabe_M; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLKBabe.3DS";
* *visual_change * * * * * = * "Armor_VlkBabe_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанки"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Одежда горожанки (богатая)
//--------------------------------------
INSTANCE ITAR_VlkBabe_H (C_Item)
{
* *name * * * * * * * * * *= * "Одежда горожанки";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_VlkBabe_H; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLKBabe.3DS";
* *visual_change * * * * * = * "Armor_VlkBabe_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда горожанки"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Легкие доспехи ополчения
//--------------------------------------
INSTANCE ITAR_MIL_L (C_Item)
{
* *name * * * * * * * * * *= * "Легкие доспехи ополчения";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 40;
* *protection[PROT_BLUNT] *= * 40;
* *protection[PROT_POINT] *= * 40;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_MIL_L; * * * // 600
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_MIL_L.3DS";
* *visual_change * * * * * = * "Armor_Mil_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_MIL_L; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_MIL_L; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Легкие доспехи ополчения"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 40
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 40
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 600
};

// Одеть
func void Equip_ITAR_MIL_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи ополчения
* * * *MILArmor_Equipped = TRUE;
* * * *// если одет Пояс милиции
* * * *if(MIL01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_MIL_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи ополчения
* * * *MILArmor_Equipped = FALSE;
* * * *// если одет Пояс милиции
* * * *if(MIL01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

...продолжение следует
Ответить с цитированием
Старый 06.07.2005, 16:39   #209
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Тяжелые доспехи ополчения
//--------------------------------------
INSTANCE ITAR_MIL_M (C_Item)
{
* *name * * * * * * * * * *= * "Тяжелые доспехи ополчения";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 70;
* *protection[PROT_BLUNT] *= * 70;
* *protection[PROT_POINT] *= * 70;
* *protection[PROT_FIRE] * = * 10;
* *protection[PROT_MAGIC] *= * 10;
* *value * * * * * * * * * = * VALUE_ITAR_MIL_M; * * * // 2500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_MIL_M.3DS";
* *visual_change * * * * * = * "Armor_MIL_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_MIL_M; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_MIL_M; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Тяжелые доспехи ополчения"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 70
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 70
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 10
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 10
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 2500
};

// Одеть
func void Equip_ITAR_MIL_M()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи ополчения
* * * *MILArmor_Equipped = TRUE;
* * * *// если одет Пояс милиции
* * * *if(MIL01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_MIL_M()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи ополчения
* * * *MILArmor_Equipped = FALSE;
* * * *// если одет Пояс милиции
* * * *if(MIL01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

//--------------------------------------
// Доспехи паладина
//--------------------------------------
INSTANCE ITAR_PAL_M (C_Item)
{
* *name * * * * * * * * * *= * "Доспехи паладина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 25;
* *value * * * * * * * * * = * VALUE_ITAR_PAL_M; * * * // 5000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Pal_M.3ds";
* *visual_change * * * * * = * "Armor_Pal_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_METAL; * * * * * * *// металл
* *description * * * * * * = * name; * * * * * * * * * // "Доспехи паладина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 25
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 5000
};

//--------------------------------------
// Доспехи паладина (тяжелые)
//--------------------------------------
INSTANCE ITAR_PAL_H (C_Item)
{
* *name * * * * * * * * * *= * "Доспехи паладина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 150;
* *protection[PROT_BLUNT] *= * 150;
* *protection[PROT_POINT] *= * 150;
* *protection[PROT_FIRE] * = * 100;
* *protection[PROT_MAGIC] *= * 50;
* *value * * * * * * * * * = * VALUE_ITAR_PAL_H; * * * // 20000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Pal_H.3ds";
* *visual_change * * * * * = * "Armor_Pal_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_METAL; * * * * * * *// металл
* *description * * * * * * = * name; * * * * * * * * * // "Доспехи паладина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 150
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 150
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 100
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 50
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 20000
};

//--------------------------------------
// Одежда крестьянина (бедная)
//--------------------------------------
INSTANCE ITAR_BAU_L (C_Item)
{
* *name * * * * * * * * * *= * "Одежда крестьянина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 15;
* *protection[PROT_BLUNT] *= * 15;
* *protection[PROT_POINT] *= * 15;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BAU_L; * * * // 80
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Bau_L.3DS";
* *visual_change * * * * * = * "Armor_Bau_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда крестьянина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 15
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 15
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 80
};

//--------------------------------------
// Одежда крестьянина (скромная)
//--------------------------------------
INSTANCE ITAR_BAU_M (C_Item)
{
* *name * * * * * * * * * *= * "Одежда крестьянина";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 15;
* *protection[PROT_BLUNT] *= * 15;
* *protection[PROT_POINT] *= * 15;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BAU_M; * * * // 100
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Bau_M.3ds";
* *visual_change * * * * * = * "Armor_Bau_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда крестьянина"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 15
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 15
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 100
};

//--------------------------------------
// Гордость крестьянки (бедная)
//--------------------------------------
INSTANCE ITAR_BauBabe_L (C_Item)
{
* *name * * * * * * * * * *= * "Гордость крестьянки";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BauBabe_L; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLKBabe.3DS";
* *visual_change * * * * * = * "Armor_BauBabe_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Гордость крестьянки"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Гордость крестьянки (скромная)
//--------------------------------------
INSTANCE ITAR_BauBabe_M (C_Item)
{
* *name * * * * * * * * * *= * "Гордость крестьянки" ;
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 10;
* *protection[PROT_BLUNT] *= * 10;
* *protection[PROT_POINT] *= * 10;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BauBabe_M; * // 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_VLKBabe.3DS";
* *visual_change * * * * * = * "Armor_BauBabe_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Гордость крестьянки"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 10
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 10
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Легкие доспехи наемника
//--------------------------------------
INSTANCE ITAR_SLD_L (C_Item)
{
* *name * * * * * * * * * *= * "Легкие доспехи наемника";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 30;
* *protection[PROT_BLUNT] *= * 30;
* *protection[PROT_POINT] *= * 30;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_SLD_L; * * * // 500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Sld_L.3ds";
* *visual_change * * * * * = * "Armor_Sld_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_SLD_L; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_SLD_L; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Легкие доспехи наемника"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 30
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 30
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 500
};

// Одеть
func void Equip_ITAR_SLD_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи наемника
* * * *SLDArmor_Equipped = TRUE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *}; * * * * *
};

// Снять
func void UnEquip_ITAR_SLD_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи наемника
* * * *SLDArmor_Equipped = FALSE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

//--------------------------------------
// Средние доспехи наемника
//--------------------------------------
INSTANCE ITAR_SLD_M (C_Item)
{
* *name * * * * * * * * * *= * "Средние доспехи наемника";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 50;
* *protection[PROT_BLUNT] *= * 50;
* *protection[PROT_POINT] *= * 50;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 5;
* *value * * * * * * * * * = * VALUE_ITAR_SLD_M; * * * // 1000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Sld_M.3ds";
* *visual_change * * * * * = * "Armor_Sld_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_SLD_M; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_SLD_M; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Средние доспехи наемника"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 50
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 50
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 5
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 1000
};

// Одеть
func void Equip_ITAR_SLD_M()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи наемника
* * * *SLDArmor_Equipped = TRUE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *}; * * * * *
};

// Снять
func void UnEquip_ITAR_SLD_M()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи наемника
* * * *SLDArmor_Equipped = FALSE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *}; * * * * *
};

//--------------------------------------
// Тяжелые доспехи наемника
//--------------------------------------
INSTANCE ITAR_SLD_H (C_Item)
{
* *name * * * * * * * * * *= * "Тяжелые доспехи наемника";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 80;
* *protection[PROT_BLUNT] *= * 80;
* *protection[PROT_POINT] *= * 80;
* *protection[PROT_FIRE] * = * 5;
* *protection[PROT_MAGIC] *= * 10;
* *value * * * * * * * * * = * VALUE_ITAR_SLD_H; * * * // 2500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Sld_H.3ds";
* *visual_change * * * * * = * "Armor_Sld_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_SLD_H; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_SLD_H; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Тяжелые доспехи наемника"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 80
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 80
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 5
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 10
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 2500
};

// Одеть
func void Equip_ITAR_SLD_H()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи наемника
* * * *SLDArmor_Equipped = TRUE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *}; * * * * *
};

// Снять
func void UnEquip_ITAR_SLD_H()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи наемника
* * * *SLDArmor_Equipped = FALSE;
* * * *// если одет Пояс наемника
* * * *if(SLD01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *}; * * * * *
};

...продолжение следует
Ответить с цитированием
Старый 06.07.2005, 16:45   #210
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Доспехи из панцирей ползунов
//--------------------------------------
INSTANCE ITAR_DJG_Crawler (C_Item)
{
* *name * * * * * * * * * *= * "Доспехи из панцирей ползунов";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 70;
* *protection[PROT_BLUNT] *= * 70;
* *protection[PROT_POINT] *= * 70;
* *protection[PROT_FIRE] * = * 15;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_DJG_Crawler; // 1500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Djg_Crawler.3ds";
* *visual_change * * * * * = * "Armor_Djg_Crawler.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_DJG_Crawler; // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_DJG_Crawler; * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Доспехи из панцирей ползунов"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 70
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 70
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 15
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 1500
};

// Одеть
func void Equip_ITAR_DJG_Crawler()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Доспехи из панцирей ползунов
* * * *MCArmor_Equipped = TRUE;
* * * *// если одет Ремень из панцирей ползунов
* * * *if(MC_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *}; * * * * *
};

// Снять
func void UnEquip_ITAR_DJG_Crawler()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Доспехи из панцирей ползунов
* * * *MCArmor_Equipped = FALSE;
* * * *// если одет Ремень из панцирей ползунов
* * * *if(MC_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *}; * * * * *
};

//--------------------------------------
// Легкие доспехи охотника на драконов
//--------------------------------------
INSTANCE ITAR_DJG_L (C_Item)
{
* *name * * * * * * * * * *= * "Легкие доспехи охотника на драконов";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 25;
* *value * * * * * * * * * = * VALUE_ITAR_DJG_L; * * * // 3000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Djg_L.3ds";
* *visual_change * * * * * = * "Armor_Djg_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Легкие доспехи охотника на драконов"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 25
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 3000
};

//--------------------------------------
// Средние доспехи охотника на драконов
//--------------------------------------
INSTANCE ITAR_DJG_M (C_Item)
{
* *name * * * * * * * * * *= * "Средние доспехи охотника на драконов";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 120;
* *protection[PROT_BLUNT] *= * 120;
* *protection[PROT_POINT] *= * 120;
* *protection[PROT_FIRE] * = * 75;
* *protection[PROT_MAGIC] *= * 35;
* *value * * * * * * * * * = * VALUE_ITAR_DJG_M; * * * // 12000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Djg_M.3ds";
* *visual_change * * * * * = * "Armor_Djg_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Средние доспехи охотника на драконов"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 120
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 120
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 75
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 35
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 12000
};

//--------------------------------------
// Тяжелые доспехи охотника на драконов
//--------------------------------------
INSTANCE ITAR_DJG_H (C_Item)
{
* *name * * * * * * * * * *= * "Тяжелые доспехи охотника на драконов";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 150;
* *protection[PROT_BLUNT] *= * 150;
* *protection[PROT_POINT] *= * 150;
* *protection[PROT_FIRE] * = * 100;
* *protection[PROT_MAGIC] *= * 50;
* *value * * * * * * * * * = * VALUE_ITAR_DJG_H; * * * // 20000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Djg_H.3ds";
* *visual_change * * * * * = * "Armor_Djg_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Тяжелые доспехи охотника на драконов"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 150
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 150
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 100
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 50
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 20000
};

//--------------------------------------
// Кольчуга охотницы за драконами
//--------------------------------------
INSTANCE ITAR_DJG_BABE (C_Item)
{
* *name * * * * * * * * * *= * "Кольчуга охотницы за драконами";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 60;
* *protection[PROT_BLUNT] *= * 60;
* *protection[PROT_POINT] *= * 60;
* *protection[PROT_FIRE] * = * 30;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_DJG_BABE; * *// 0
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Djg_L.3DS";
* *visual_change * * * * * = * "Armor_Djg_Babe.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Кольчуга охотницы за драконами"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 60
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 60
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 30
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 0
};

//--------------------------------------
// Роба послушника
//--------------------------------------
INSTANCE ITAR_NOV_L (C_Item)
{
* *name * * * * * * * * * *= * "Роба послушника";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 25;
* *protection[PROT_BLUNT] *= * 25;
* *protection[PROT_POINT] *= * 25;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 10;
* *value * * * * * * * * * = * VALUE_ITAR_NOV_L; * * * // 280
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Nov_L.3ds";
* *visual_change * * * * * = * "Armor_Nov_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_NOV_L; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_NOV_L; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Роба послушника"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 25
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 25
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 10
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 280
};

// Одеть
func void Equip_ITAR_NOV_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одета Роба послушника
* * * *NOVArmor_Equipped = TRUE;
* * * *// если одет Ремень готовности
* * * *if(NOV01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_NOV_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// снята Роба послушника
* * * *NOVArmor_Equipped = FALSE;
* * * *// если одет Ремень готовности
* * * *if(NOV01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
* *
};

//--------------------------------------
// Роба мага огня
//--------------------------------------
INSTANCE ITAR_KDF_L (C_Item)
{
* *name * * * * * * * * * *= * "Роба мага огня";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 40;
* *protection[PROT_BLUNT] *= * 40;
* *protection[PROT_POINT] *= * 40;
* *protection[PROT_FIRE] * = * 20;
* *protection[PROT_MAGIC] *= * 20;
* *value * * * * * * * * * = * VALUE_ITAR_KDF_L; * * * // 500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_KdF_L.3ds";
* *visual_change * * * * * = * "Armor_Kdf_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_KDF_L; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_KDF_L; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Роба мага огня"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 40
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 40
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 20
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 20
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 500
};

// Одеть
func void Equip_ITAR_KDF_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одета Роба мага огня
* * * *KDFArmor_Equipped = TRUE;
* * * *// если одет Ремень огня
* * * *if(KDF01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_KDF_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// снята Роба мага огня
* * * *KDFArmor_Equipped = FALSE;
* * * *// если одет Ремень огня
* * * *if(KDF01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

//--------------------------------------
// Тяжелая роба огня
//--------------------------------------
INSTANCE ITAR_KDF_H (C_Item)
{
* *name * * * * * * * * * *= * "Тяжелая роба огня";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 50;
* *value * * * * * * * * * = * VALUE_ITAR_KDF_H; * * * // 3000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_KdF_H.3ds";
* *visual_change * * * * * = * "Armor_Kdf_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_KDF_H; * * * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_KDF_H; * * // снять
* *description * * * * * * = * name; * * * * * * * * * // "Тяжелая роба огня"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 50
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 3000
};

// Одеть
func void Equip_ITAR_KDF_H()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одета Роба мага огня
* * * *KDFArmor_Equipped = TRUE;
* * * *// если одет Ремень огня
* * * *if(KDF01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_KDF_H()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// снята Роба мага огня
* * * *KDFArmor_Equipped = FALSE;
* * * *// если одет Ремень огня
* * * *if(KDF01_Equipped == TRUE)
* * * *{ *
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

//--------------------------------------
// Кожаные доспехи
//--------------------------------------
INSTANCE ITAR_Leather_L (C_Item)
{
* *name * * * * * * * * * *= * "Кожаные доспехи";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 25;
* *protection[PROT_BLUNT] *= * 25;
* *protection[PROT_POINT] *= * 20;
* *protection[PROT_FIRE] * = * *5;
* *protection[PROT_MAGIC] *= * *0;
* *value * * * * * * * * * = * VALUE_ITAR_Leather_L; * // 250
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Leather_L.3ds";
* *visual_change * * * * * = * "Armor_Leather_L.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *on_equip * * * * * * * *= * Equip_ITAR_Leather_L; * // одеть
* *on_unequip * * * * * * *= * UnEquip_ITAR_Leather_L; // снять
* *description * * * * * * = * name; * * * * * * * * * // "Кожаные доспехи"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 25
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 25
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 5
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 250
};

// Одеть
func void Equip_ITAR_Leather_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// одеты Кожаные доспехи
* * * *LeatherArmor_Equipped = TRUE; *
* * * *// если одет Кожаный ремень
* * * *if(Leather01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *+= BA_Bonus01; *// защита от острого оружия += 5
* * * * * *self.protection[PROT_BLUNT] += BA_Bonus01; *// защита от тупого оружия += 5
* * * * * *self.protection[PROT_POINT] += BA_Bonus01; *// защита от стрел += 5
* * * * * *self.protection[PROT_MAGIC] += BA_Bonus01; *// защита от магии += 5
* * * * * *self.protection[PROT_FIRE] *+= BA_Bonus01; *// защита от огня += 5
* * * *};
* *};
};

// Снять
func void UnEquip_ITAR_Leather_L()
{
* *// если НПС ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// сняты Кожаные доспехи
* * * *LeatherArmor_Equipped = FALSE; *
* * * *// если одет Кожаный ремень
* * * *if(Leather01_Equipped == TRUE)
* * * *{
* * * * * *self.protection[PROT_EDGE] *-= BA_Bonus01; *// защита от острого оружия -= 5
* * * * * *self.protection[PROT_BLUNT] -= BA_Bonus01; *// защита от тупого оружия -= 5
* * * * * *self.protection[PROT_POINT] -= BA_Bonus01; *// защита от стрел -= 5
* * * * * *self.protection[PROT_MAGIC] -= BA_Bonus01; *// защита от магии -= 5
* * * * * *self.protection[PROT_FIRE] *-= BA_Bonus01; *// защита от огня -= 5
* * * *};
* *};
};

//--------------------------------------
// Средняя бандитская кольчуга
//--------------------------------------
INSTANCE ITAR_BDT_M (C_Item)
{
* *name * * * * * * * * * *= * "Средняя бандитская кольчуга";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 35;
* *protection[PROT_BLUNT] *= * 35;
* *protection[PROT_POINT] *= * 35;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BDT_M; * * * // 550
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Bdt_M.3ds";
* *visual_change * * * * * = * "Armor_Bdt_M.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Средняя бандитская кольчуга"
* *TEXT[0] * * * * * * * * = * PRINT_Addon_BDTArmor; * // "Кто носит эту кольчугу, принадлежит к бандитам"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 35
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 35
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 550
};

...продолжение следует
Ответить с цитированием
Старый 07.07.2005, 12:14   #211
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

//--------------------------------------
// Тяжелая бандитская кольчуга
//--------------------------------------
INSTANCE ITAR_BDT_H (C_Item)
{
* *name * * * * * * * * * *= * "Тяжелая бандитская кольчуга";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 50;
* *protection[PROT_BLUNT] *= * 50;
* *protection[PROT_POINT] *= * 50;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_BDT_H; * * * // 2100
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Bdt_H.3ds";
* *visual_change * * * * * = * "Armor_Bdt_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Тяжелая бандитская кольчуга"
* *TEXT[0] * * * * * * * * = * PRINT_Addon_BDTArmor; * // "Кто носит эту кольчугу, принадлежит к бандитам"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 50
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 50
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 2100
};

//--------------------------------------
// Роба темных сил
//--------------------------------------
INSTANCE ITAR_XARDAS (C_Item)
{
* *name * * * * * * * * * *= * "Роба темных сил";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 50;
* *value * * * * * * * * * = * VALUE_ITAR_XARDAS; * * *// 15000
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Xardas.3ds";
* *visual_change * * * * * = * "Armor_Xardas.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Роба темных сил"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 50
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 15000
};

//--------------------------------------
// Роба Лестера
//--------------------------------------
INSTANCE ITAR_LESTER (C_Item)
{
* *name * * * * * * * * * *= * "Lesters Robe";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 25;
* *protection[PROT_BLUNT] *= * 25;
* *protection[PROT_POINT] *= * 25;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_LESTER; * * *// 300
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Lester.3ds";
* *visual_change * * * * * = * "Armor_Lester.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Роба Лестера"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 25
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 25
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 300
};

//--------------------------------------
// Кольчуга Диего
//--------------------------------------
INSTANCE ITAR_Diego (C_Item)
{
* *name * * * * * * * * * *= * "Кольчуга Диего";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 30;
* *protection[PROT_BLUNT] *= * 30;
* *protection[PROT_POINT] *= * 30;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_Diego; * * * // 450
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Diego.3ds";
* *visual_change * * * * * = * "Armor_Diego.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Кольчуга Диего"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 30
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 30
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 450
};

//--------------------------------------
// Кольчуга Кор Ангара
//--------------------------------------
INSTANCE ITAR_CorAngar (C_Item)
{
* *name * * * * * * * * * *= * "Кольчуга Кор Ангара";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 25;
* *value * * * * * * * * * = * VALUE_ITAR_CorAngar; * *// 600
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_CorAngar.3ds";
* *visual_change * * * * * = * "Armor_CorAngar.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Кольчуга Кор Ангара"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 25
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 600
};

//--------------------------------------
// Темная накидка
//--------------------------------------
INSTANCE ITAR_Dementor (C_Item)
{
* *name * * * * * * * * * *= * "Темная накидка";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 130;
* *protection[PROT_BLUNT] *= * 130;
* *protection[PROT_POINT] *= * 130;
* *protection[PROT_FIRE] * = * 65;
* *protection[PROT_MAGIC] *= * 65;
* *value * * * * * * * * * = * VALUE_ITAR_Dementor; * *// 500
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Xardas.3ds";
* *visual_change * * * * * = * "Armor_Dementor.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Темная накидка"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 130
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 130
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 65
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 65
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 500
};

//--------------------------------------
// Роба мага воды
//--------------------------------------
INSTANCE ITAR_KDW_H (C_Item)
{
* *name * * * * * * * * * *= * "Роба мага воды";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 100;
* *protection[PROT_BLUNT] *= * 100;
* *protection[PROT_POINT] *= * 100;
* *protection[PROT_FIRE] * = * 50;
* *protection[PROT_MAGIC] *= * 50;
* *value * * * * * * * * * = * VALUE_ITAR_KDW_H; * * * // 450
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_KdW_H.3ds";
* *visual_change * * * * * = * "Armor_KdW_H.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Роба мага воды"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 100
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 100
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 50
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 50
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 450
};

//--------------------------------------
// Одежда заключенного
//--------------------------------------
instance ITAR_Prisoner (C_Item)
{
* *name * * * * * * * * * *= * "Одежда заключенного";
* *mainflag * * * * * * * *= * ITEM_KAT_ARMOR; * * * * // броня
* *flags * * * * * * * * * = * 0;
* *protection[PROT_EDGE] * = * 20;
* *protection[PROT_BLUNT] *= * 20;
* *protection[PROT_POINT] *= * 20;
* *protection[PROT_FIRE] * = * 0;
* *protection[PROT_MAGIC] *= * 0;
* *value * * * * * * * * * = * VALUE_ITAR_Prisoner; * *// 10
* *wear * * * * * * * * * *= * WEAR_TORSO;
* *visual * * * * * * * * *= * "ItAr_Prisoner.3ds";
* *visual_change * * * * * = * "Armor_Prisoner.asc";
* *visual_skin * * * * * * = * 0;
* *material * * * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *description * * * * * * = * name; * * * * * * * * * // "Одежда заключенного"
* *TEXT[1] * * * * * * * * = * NAME_Prot_Edge; * * * * // "Защита от оружия:"
* *COUNT[1] * * * * * * * *= * protection[PROT_EDGE]; *// 20
* *TEXT[2] * * * * * * * * = * NAME_Prot_Point; * * * *// "Защита от стрел:"
* *COUNT[2] * * * * * * * *= * protection[PROT_POINT]; // 20
* *TEXT[3] * * * * * * * * = * NAME_Prot_Fire; * * * * // "Защита от огня:"
* *COUNT[3] * * * * * * * *= * protection[PROT_FIRE]; *// 0
* *TEXT[4] * * * * * * * * = * NAME_Prot_Magic; * * * *// "Защита от магии:"
* *COUNT[4] * * * * * * * *= * protection[PROT_MAGIC]; // 0
* *TEXT[5] * * * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * * * *= * value; * * * * * * * * *// 10
};


* *19. Поддельное письмо.

Файл IT_FakeScroll.d

//--------------------------------------
// Поддельное письмо
//--------------------------------------
INSTANCE Fakescroll(C_Item)
{ *
* *name * * * * * * * *= "Письмо";
* *mainflag * * * * * *= ITEM_KAT_DOCS; * * * *// документ
* *flags * * * * * * * = ITEM_MISSION; * * * * // квестовый
* *hp * * * * * * * * *= 5;
* *hp_max * * * * * * *= 5;
* *weight * * * * * * *= 1;
* *value * * * * * * * = 0;
* *visual * * * * * * *= "Fakescroll.3ds";
* *material * * * * * *= MAT_LEATHER; * * * * *// кожа
* *scemeName * * * * * = "MAPSEALED"; *
* *description * * * * = name; * * * * * * * * // "Письмо"
* *TEXT[5] * * * * * * = NAME_Value; * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= value; * * * * * * * *// 0
};

Ответить с цитированием
Старый 08.07.2005, 09:33   #212
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *20. Продукты питания основной игры.

Файл IT_Food.d

//*************************
// Продукты питания основной игры
//*************************

// Яблоко
const int * Value_Apple * * = * 8; * * *// стоимость
const int * HP_Apple * * * *= * 3; * * *// бонус к жизни
// Сыр
const int * Value_Cheese * *= * 30; * * // стоимость
const int * HP_Cheese * * * = * 15; * * // бонус к жизни
// Ветчина
const int * Value_Bacon * * = * 50; * * // стоимость
const int * HP_Bacon * * * *= * 20; * * // бонус к жизни
// Хлеб
const int * Value_Bread * * = * 20; * * // стоимость
const int * HP_Bread * * * *= * 10; * * // бонус к жизни
// Рыба
const int * Value_Fish * * *= * 15; * * // стоимость
const int * HP_Fish * * * * = * 5; * * *// бонус к жизни
// Сырое мясо
const int * Value_Rawmeat * = * 3; * * *// стоимость
const int * HP_RawMeat * * *= * 6; * * *// бонус к жизни
// Жареное мясо
const int * Value_Meat * * *= * 6; * * *// стоимость
const int * HP_Meat * * * * = * 12; * * // бонус к жизни
// Обед
const int * Value_Stew * * *= * 8; * * *// стоимость
const int * HP_Stew * * * * = * 20; * * // бонус к жизни
// Рыбный суп
const int * Value_FishSoup *= * 20; * * // стоимость
const int * HP_FishSoup * * = * 10; * * // бонус к жизни
// Колбаса
const int * Value_Sausage * = * 30; * * // стоимость
const int * HP_Sausage * * *= * 12; * * // бонус к жизни
// Мед
const int * Value_Honey * * = * 30; * * // стоимость
const int * HP_Honey * * * *= * 12; * * // бонус к жизни
// Вода
const int * Value_Water * * = * 10; * * // стоимость
const int * HP_Water * * * *= * 8; * * *// бонус к жизни
// Пиво
const int * Value_Beer * * *= * 20; * * // стоимость
const int * HP_Beer * * * * = * 3; * * *// бонус к жизни
const int * Mana_Beer * * * = * 1; * * *// бонус к мане
// Самогон
const int * Value_Booze * * = * 15; * * // стоимость
const int * HP_Booze * * * *= * 4; * * *// бонус к жизни
const int * Mana_Booze * * *= * 1; * * *// бонус к мане
// Вино
const int * Value_Wine * * *= * 20; * * // стоимость
const int * HP_Wine * * * * = * 2; * * *// бонус к жизни
const int * Mana_Wine * * * = * 1; * * *// бонус к мане
// Молоко
const int * Value_Milk * * *= * 15; * * // стоимость
const int * HP_Milk * * * * = * 5; * * *// бонус к жизни
const int * Mana_Milk * * * = * 1; * * *// бонус к мане

//--------------------------------------
// Яблоко
//--------------------------------------
INSTANCE ItFo_Apple (C_Item)
{ *
* *name * * * * * * * *= * "Яблоко";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Apple; * * * * * *// 8
* *visual * * * * * * *= * "ItFo_Apple.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOOD";
* *on_state[0] * * * * = * Use_Apple; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Яблоко"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Apple; * * * * * * * // 3
* *TEXT[3] * * * * * * = * "Свежее яблоко";
* *TEXT[4] * * * * * * = * "мягкое и сочное";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Apple; * * * * * *// 8

};

// Использовать
func void Use_Apple()
{
* *// жизнь += 3
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Apple);
* *// если НПС ГГ
* *if(Npc_IsPlayer (self))
* *{
* * * *// кол-во съеденных яблок
* * * *Apple_Bonus = Apple_Bonus + 1;
* * * *// если съедено 7 яблок
* * * *if(Apple_Bonus == 7) *
* * * *{
* * * * * *// вывод текста "Ты чувствуешь себя посвежевшим"
* * * * * *Print(PRINT_Eat1);
* * * *};
* * * *// если съедено 15 яблок
* * * *if(Apple_Bonus == 15) *
* * * *{
* * * * * *// вывод текста "На вкус сочное и свежее"
* * * * * *Print(PRINT_Eat2);
* * * *};
* * * *// если съедено 25 яблок
* * * *if(Apple_Bonus == 25) *
* * * *{
* * * * * *// вывод текста "Ты чувствуешь себя здоровым и сильным!"
* * * * * *Print(PRINT_Eat3);
* * * * * *// сила += 1
* * * * * *B_RaiseAttribute(self,ATR_STRENGTH,1);
* * * * * *Snd_Play("LevelUp");
* * * * * *// сброс счетчика яблок
* * * * * *Apple_Bonus = 0;
* * * *};
* *};
};

//--------------------------------------
// Сыр
//--------------------------------------
INSTANCE ItFo_Cheese (C_Item)
{ *
* *name * * * * * * * *= * "Сыр";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Cheese; * * * * * // 30
* *visual * * * * * * *= * "ItFo_Cheese.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Cheese; * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Сыр"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Cheese; * * * * * * *// 15
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Cheese; * * * * * // 30
};

// Использовать
func void Use_Cheese()
{
* *// жизнь += 15
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Cheese) ;
};

//--------------------------------------
// Ветчина
//--------------------------------------
INSTANCE ItFo_Bacon (C_Item)
{ *
* *name * * * * * * * *= * "Ветчина";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Bacon; * * * * * *// 50
* *visual * * * * * * *= * "ItFo_Bacon.3ds";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Bacon; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Ветчина"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Bacon; * * * * * * * // 20
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Bacon; * * * * * *// 50
};

// Использовать
func void Use_Bacon()
{
* *// жизнь += 20
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Bacon);
};

//--------------------------------------
// Хлеб
//--------------------------------------
INSTANCE ItFo_Bread (C_Item)
{ *
* *name * * * * * * * *= * "Хлеб";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Bread; * * * * * *// 20
* *visual * * * * * * *= * "ItFo_Bread.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Bread; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Хлеб"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Bread; * * * * * * * // 10
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Bread; * * * * * *// 20

};

// Использовать
func void Use_Bread()
{
* *// жизнь += 10
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Bread);
};

//--------------------------------------
// Рыба
//--------------------------------------
INSTANCE ItFo_Fish (C_Item)
{ *
* *name * * * * * * * *= * "Рыба";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Fish; * * * * * * // 15
* *visual * * * * * * *= * "ItFo_Fish.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Fish; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Рыба"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Fish; * * * * * * * *// 5
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Fish; * * * * * * // 15
};

// Использовать
func void Use_Fish()
{
* *// жизнь += 5
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Fish);
};

//--------------------------------------
// Сырое мясо
//--------------------------------------
INSTANCE ItFoMuttonRaw (C_Item)
{ *
* *name * * * * * * * *= * "Сырое мясо";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_RawMeat; * * * * *// 3
* *visual * * * * * * *= * "ItFoMuttonRaw.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "MEAT";
* *on_state[0] * * * * = * Use_RawMeat; * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Сырое мясо"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_RawMeat; * * * * * * // 6
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_RawMeat; * * * * *// 3
};

// Использовать
func void Use_RawMeat()
{
* *// жизнь += 6
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_RawMeat );
};

//--------------------------------------
// Жареное мясо
//--------------------------------------
INSTANCE ItFoMutton (C_Item)
{ *
* *name * * * * * * * *= * "Жареное мясо";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Meat; * * * * * * // 6
* *visual * * * * * * *= * "ItFoMutton.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "MEAT";
* *on_state[0] * * * * = * Use_Meat; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Жареное мясо"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Meat; * * * * * * * *// 12
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Meat; * * * * * * // 6
};

// Использовать
func void Use_Meat()
{
* *// жизнь += 12
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Meat);
};

//--------------------------------------
// Обед
//--------------------------------------
INSTANCE ItFo_Stew (C_Item)
{ *
* *name * * * * * * * *= * "Обед";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Stew; * * * * * * // 8
* *visual * * * * * * *= * "ItFo_Stew.3ds";
* *material * * * * * *= * MAT_WOOD; * * * * * * * // дерево
* *scemeName * * * * * = * "RICE";
* *on_state[0] * * * * = * Use_Stew; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Обед"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Stew; * * * * * * * *// 20
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Stew; * * * * * * // 8
};

// Использовать
func void Use_Stew()
{
* *// жизнь += 20
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Stew);
};

//--------------------------------------
// Обед Теклы
//--------------------------------------
INSTANCE ItFo_XPStew (C_Item)
{ *
* *name * * * * * * * *= * "Обед Теклы";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Stew; * * * * * * // 8
* *visual * * * * * * *= * "ItFo_Stew.3ds";
* *material * * * * * *= * MAT_WOOD; * * * * * * * // дерево
* *scemeName * * * * * = * "RICE";
* *on_state[0] * * * * = * Use_XPStew; * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Обед Теклы"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Stew; * * * * * * * *// 20
* *TEXT[2] * * * * * * = * NAME_Bonus_Str; * * * * // "Прибавка к силе:"
* *COUNT[2] * * * * * *= * 1; * * * * * * * * * * *// 1
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Stew; * * * * * * // 8
};

// Использовать
func void Use_XPStew()
{
* *// жизнь += 20
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Stew);
* *Snd_Play("LevelUp");
* *// сила += 1
* *B_RaiseAttribute(self,ATR_STRENGTH,1);
};

//--------------------------------------
// Пиво Корагона
//--------------------------------------
INSTANCE ItFo_CoragonsBeer (C_Item)
{ *
* *name * * * * * * * *= * "Пиво";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Beer; * * * * * * // 20
* *visual * * * * * * *= * "ItFo_Beer.3DS";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTIONFAST";
* *on_state[0] * * * * = * Use_CoragonsBeerBeer; * // использовать
* *description * * * * = * name; * * * * * * * * * // "Пиво"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Beer; * * * * * * * *// 3
* *TEXT[2] * * * * * * = * NAME_Bonus_Mana; * * * *// "Прибавка к мане:"
* *COUNT[2] * * * * * *= * Mana_Beer; * * * * * * *// 1
* *TEXT[4] * * * * * * = * "Специальное пиво Корагона"; * * * *
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Beer; * * * * * * // 20

};

// Использовать
func void Use_CoragonsBeerBeer()
{
* *// макс. мана += 1
* *B_RaiseAttribute(self,ATR_MANA_MAX,Mana_Beer);
* *// мана += 1
* *Npc_ChangeAttribute(self,ATR_MANA,Mana_Beer);
* *// макс. жизнь += 3
* *Npc_ChangeAttribute(self,ATR_HITPOINTS_MAX,HP_Bee r);
* *// жизнь += 3
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Beer);
* *var string concatText;
* *// сформировать строку "Жизнь + 3"
* *concatText = ConcatStrings(PRINT_Learnhitpoints_MAX,IntToString (HP_Beer));
* *// вывод на экран
* *PrintScreen(concatText,55,-1,FONT_Screen,2);
};

//--------------------------------------
// Рыбный суп
//--------------------------------------
INSTANCE ItFo_FishSoup (C_Item)
{ *
* *name * * * * * * * *= * "Рыбный суп";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_FishSoup; * * * * // 20
* *visual * * * * * * *= * "ItFo_FishSoup.3ds";
* *material * * * * * *= * MAT_WOOD; * * * * * * * // дерево
* *scemeName * * * * * = * "RICE";
* *on_state[0] * * * * = * Use_FishSoup; * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Рыбный суп"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_FishSoup; * * * * * *// 10
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_FishSoup; * * * * // 20

};

// Использовать
func void Use_FishSoup()
{
* *// жизнь += 10
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_FishSou p);
};

//--------------------------------------
// Колбаса
//--------------------------------------
INSTANCE ItFo_Sausage (C_Item)
{ *
* *name * * * * * * * *= * "Колбаса";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Sausage; * * * * *// 30
* *visual * * * * * * *= * "ItFo_Sausage.3DS";
* *material * * * * * *= * MAT_LEATHER; * * * * * *// кожа
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Sausage; * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Колбаса"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Sausage; * * * * * * // 12
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Sausage; * * * * *// 30
};

// Использовать
func void Use_Sausage()
{
* *// жизнь += 12
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Sausage );
};

//--------------------------------------
// Мед
//--------------------------------------
INSTANCE ItFo_Honey (C_Item)
{ *
* *name * * * * * * * *= * "Мед";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Honey; * * * * * *// 30
* *visual * * * * * * *= * "ItFo_Honey.3DS";
* *material * * * * * *= * MAT_STONE; * * * * * * *// камень
* *scemeName * * * * * = * "FOODHUGE";
* *on_state[0] * * * * = * Use_Honey; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Мед"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Honey; * * * * * * * // 12
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Honey; * * * * * *// 30
};

// Использовать
func void Use_Honey()
{
* *// жизнь += 12
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Honey);
};

//--------------------------------------
// Вода
//--------------------------------------
INSTANCE ItFo_Water (C_Item)
{ *
* *name * * * * * * * *= * "Вода";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Water; * * * * * *// 10
* *visual * * * * * * *= * "ItFo_Water.3ds";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTION";
* *on_state[0] * * * * = * Use_Water; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Вода"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Water; * * * * * * * // 8
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Water; * * * * * *// 10

};

// Использовать
func void Use_Water()
{
* *// жизнь += 8
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Water);
};

//--------------------------------------
// Пиво
//--------------------------------------
INSTANCE ItFo_Beer (C_Item)
{ *
* *name * * * * * * * *= * "Пиво";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Beer; * * * * * * // 20
* *visual * * * * * * *= * "ItFo_Beer.3DS";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTIONFAST";
* *on_state[0] * * * * = * Use_Beer; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Пиво"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Beer; * * * * * * * *// 3
* *TEXT[2] * * * * * * = * NAME_Bonus_Mana; * * * *// "Прибавка к мане:"
* *COUNT[2] * * * * * *= * Mana_Beer; * * * * * * *// 1
* *TEXT[4] * * * * * * = * "Темный паладин";
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Beer; * * * * * * // 20

};

// Использовать
func void Use_Beer()
{
* *// жизнь += 3
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Beer);
* *// мана += 1
* *Npc_ChangeAttribute(self,ATR_MANA,Mana_Beer); * *
};

//--------------------------------------
// Самогон
//--------------------------------------
INSTANCE ItFo_Booze (C_Item)
{ *
* *name * * * * * * * *= * "Самогон";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Booze; * * * * * *// 15
* *visual * * * * * * *= * "ItFo_Booze.3DS";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTION";
* *on_state[0] * * * * = * Use_Booze; * * * * * * *// использовать
* *description * * * * = * name; * * * * * * * * * // "Самогон"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Booze; * * * * * * * // 4
* *TEXT[2] * * * * * * = * NAME_Bonus_Mana; * * * *// "Прибавка к мане:"
* *COUNT[2] * * * * * *= * Mana_Booze; * * * * * * // 1
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Booze; * * * * * *// 15
};

// Использовать
func void Use_Booze()
{
* *// жизнь += 4
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Booze);
* *// мана += 1
* *Npc_ChangeAttribute(self,ATR_MANA,Mana_Booze); *
};

//--------------------------------------
// Вино
//--------------------------------------
INSTANCE ItFo_Wine (C_Item)
{ *
* *name * * * * * * * *= * "Вино";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Wine; * * * * * * // 20
* *visual * * * * * * *= * "ItFo_Wine.3DS";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTION";
* *on_state[0] * * * * = * Use_Wine; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Вино"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Wine; * * * * * * * *// 2
* *TEXT[2] * * * * * * = * NAME_Bonus_Mana; * * * *// "Прибавка к мане:"
* *COUNT[2] * * * * * *= * Mana_Wine; * * * * * * *// 1
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Wine; * * * * * * // 20
};

// Использовать
func void Use_Wine()
{
* *// жизнь += 2
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Wine);
* *// мана += 1
* *Npc_ChangeAttribute(self,ATR_MANA,Mana_Wine); * *
};

//--------------------------------------
// Молоко
//--------------------------------------
INSTANCE ItFo_Milk (C_Item)
{ *
* *name * * * * * * * *= * "Молоко";
* *mainflag * * * * * *= * ITEM_KAT_FOOD; * * * * *// провиант
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Milk; * * * * * * // 15
* *visual * * * * * * *= * "ItFo_Milk.3DS";
* *material * * * * * *= * MAT_GLAS; * * * * * * * // стекло
* *scemeName * * * * * = * "POTION";
* *on_state[0] * * * * = * Use_Milk; * * * * * * * // использовать
* *description * * * * = * name; * * * * * * * * * // "Молоко"
* *TEXT[1] * * * * * * = * NAME_Bonus_HP; * * * * *// "Прибавка к жизни:"
* *COUNT[1] * * * * * *= * HP_Milk; * * * * * * * *// 5
* *TEXT[2] * * * * * * = * NAME_Bonus_Mana; * * * *// "Прибавка к мане:"
* *COUNT[2] * * * * * *= * Mana_Milk; * * * * * * *// 1
* *TEXT[5] * * * * * * = * NAME_Value; * * * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * Value_Milk; * * * * * * // 15
};

// Использовать
func void Use_Milk()
{
* *// жизнь += 5
* *Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_Milk);
* *// мана += 1
* *Npc_ChangeAttribute(self,ATR_MANA,Mana_Milk); * *
};

Ответить с цитированием
Старый 11.07.2005, 09:53   #213
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Спасибо всем, кому не безразличен этот труд, постараюсь учесть ваши пожелания. Конечно, каждому хочется получить общую картину по скриптам как можно скорее, но увы, я не разработчик серии игр Готика, для меня, как и для вас, очень много непонятных вещей, особенно это касается связи скриптов с миром Готики (программируется Спейсером), так что будем разбираться постепенно. Многие повторяющиеся блоки скриптов буду проходить конспектно, у кого есть желание, может их подробно закомментировать и предложить на общее внимание. Вот многоуважаемый Pa написал:
Нужен вариант Правленых расписанных скриптов!!!
- не AG (тогда просто не было времени довести все до ума да и основа - пиратка - плохое наследие),
- не перевод Мартина (все равно ему большой респект),
- не очередная попытка Dagot_Ur (и ему не меньший респект - только бы не пропадал так надолго...),
- и уж конечно не Акеллы с Руссобитом...
;
но не предложил, какие скрипты взять за основу, имхо, это должен быть озвученный вариант, но какой?
Выкладываю последний полный файл по предметам (уже был готов), далее по ним пойдет конспект.

--------------------------------------------------------------------------------
---------------

* *21. Ключи основной игры.

Файл IT_Keys.d

//*************************
// Ключи основной игры
//*************************

// стоимость
const int * Value_Lockpick *= * 10; * * // отмычка
const int * Value_Key_01 * *= * 3; * * *// ключ
const int * Value_Key_02 * *= * 3; * * *// ключ
const int * Value_Key_03 * *= * 3; * * *// ключ

//--------------------------------------
// Отмычка
//--------------------------------------
INSTANCE ItKe_Lockpick(C_Item)
{
* *name * * * * * * * *= * "Отмычка";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MULTI;
* *value * * * * * * * = * Value_Lockpick; * * // 10
* *visual * * * * * * *= * "ItKe_Lockpick.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Отмычка"
* *TEXT[5] * * * * * * = * NAME_Value; * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * *// 10
};

//--------------------------------------
// Ключ 1 (не используется)
//--------------------------------------
INSTANCE ItKe_Key_01(C_Item)
{
* *name * * * * * * * *= * "Ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * 0;
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Ключ"
* *TEXT[5] * * * * * * = * NAME_Value; * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * *// 3
};

//--------------------------------------
// Ключ 2 (не используется)
//--------------------------------------
INSTANCE ItKe_Key_02(C_Item)
{
* *name * * * * * * * *= * "Ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * 0;
* *value * * * * * * * = * Value_Key_02; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_02.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Ключ"
* *TEXT[5] * * * * * * = * NAME_Value; * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * *// 3
};

//--------------------------------------
// Ключ 3 (не используется)
//--------------------------------------
INSTANCE ItKe_Key_03(C_Item)
{
* *name * * * * * * * *= * "Ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * 0;
* *value * * * * * * * = * Value_Key_03; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_03.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Ключ"
* *TEXT[5] * * * * * * = * NAME_Value; * * * * // "Ценность:"
* *COUNT[5] * * * * * *= * value; * * * * * * *// 3
};

//--------------------------------------
// Башенный ключ 1
//--------------------------------------
INSTANCE ItKe_City_Tower_01(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

//--------------------------------------
// Башенный ключ 2
//--------------------------------------
INSTANCE ItKe_City_Tower_02(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

//--------------------------------------
// Башенный ключ 3
//--------------------------------------
INSTANCE ItKe_City_Tower_03(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

//--------------------------------------
// Башенный ключ 4
//--------------------------------------
INSTANCE ItKe_City_Tower_04(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

//--------------------------------------
// Башенный ключ 5
//--------------------------------------
INSTANCE ItKe_City_Tower_05(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

//--------------------------------------
// Башенный ключ 6
//--------------------------------------
INSTANCE ItKe_City_Tower_06(C_Item)
{
* *name * * * * * * * *= * "Башенный ключ";
* *mainflag * * * * * *= * ITEM_KAT_NONE; * * *// прочее
* *flags * * * * * * * = * ITEM_MISSION; * * * // квестовый
* *value * * * * * * * = * Value_Key_01; * * * // 3
* *visual * * * * * * *= * "ItKe_Key_01.3ds";
* *material * * * * * *= * MAT_METAL; * * * * *// металл
* *description * * * * = * name; * * * * * * * // "Башенный ключ"
* *TEXT[2] * * * * * * = * "";
* *TEXT[3] * * * * * * = * "";
};

Ответить с цитированием
Старый 12.07.2005, 09:09   #214
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *22. Оружие ближнего радиуса поражения.

Файл IT_MeleeWeapons.d

Для самостоятельного изучения.
Значения параметров стоимости оружия, наносимого повреждения, радиуса поражения, условий применения находятся в файле Tuning_Melee_Weapons.d
Функции одеть, снять оружия, которое изменяет навыки владения им, расположены в файлах Einhand_EquipBonus.d и Zweihand_EquipBonus.d соответственно для одноручного и двуручного оружия.
Все эти файлы также подробно рассматривать не будем.

* *23. Различные предметы основной игры.

Файл IT_Misk.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *24. Растения основной игры.

Файл IT_Plants.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *25. Напитки основной игры.

Файл IT_Potions.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.
Можно обратить внимание на функцию void UseItPo_MegaDrink() использования напитка "Эмбарла Фиргасто", которая повышает силу или ловкость, смотря что лучше развито, в обмен на всю ману.

* *26. Оружие дальнего радиуса поражения.

Файл IT_RangedWeapons.d

Для самостоятельного изучения.
Значения параметров стоимости оружия, наносимого повреждения, условий применения находятся в файле Tuning_Ranged_Weapons.d
Этот файл также подробно рассматривать не будем.

* *27. Кольца основной игры.

Файл IT_Ringe.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *28. Руны основной игры.

Файл IT_Runen.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *29. Свитки заклинаний основной игры.

Файл IT_Scrolls.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *30. Предметы с секретами.

Файл IT_Secrets.d

Для самостоятельного изучения.
При использовании любого предмета этой категории в нем можно найти кое-что полезное.

* *31. Факела.

Файл IT_Torch.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *32. Книги и карты основной игры.

Файл IT_Written.d

Для самостоятельного изучения.
Ничего особенного, на чем надо заострить внимание в нем нет.

* *33. Квестовые предметы 1 Главы.

Файл IT_MissionItems_1.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *34. Квестовые предметы 2 Главы.

Файл IT_MissionItems_2.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *35. Квестовые предметы 3 Главы.

Файл IT_MissionItems_3.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.
Стоит обратить внимание, что заряженный "Глаз Инноса" дает очень хорошие бонусы к любой защите.
Замечание: не переведены имена одержимых.

* *36. Квестовые предметы 4 Главы.

Файл IT_MissionItems_4.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *37. Квестовые предметы 5 Главы.

Файл IT_MissionItems_5.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *38. Квестовые предметы 6 Главы.

Файл IT_MissionItems_6.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *39. Квестовые предметы аддона.

Файл IT_MissionItems_Addon.d

Для самостоятельного изучения.
Интересного много, но не с точки скриптологии.

* *40. Параметры "Когтя Белиара".

Файл IT_Tuning_Addon_BeliarsWeapons.d

Здесь приведены значения параметров стоимости оружия, наносимого повреждения и вероятности дополнительного урона.
Для самостоятельного изучения.

P.S. Если у кого есть желание, можете подробно закомментировать эти файлы и выложить в теме.
Ответить с цитированием
Старый 13.07.2005, 10:01   #215
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

10. Вспомогательные В_ функции.

Директория размещения файлов функций - B_Content

* *1. Функции, связанные с пиратами из лагеря.

Файл B_Addon_PiratesGoHome.d

// Пираты, члены партии ГГ, его покидают и идут в лагерь
func void B_Addon_PiratesGoHome()
{
* *// Скип не является компаньоном ГГ
* *Skip.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Мэтт не является компаньоном ГГ
* *Matt.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Брэндон не является компаньоном ГГ
* *Brandon.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Пират, жарящий мясо (id = 1364), не является компаньоном ГГ
* *RoastPirate.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Сидящий на скамье пират (id = 1363) не является компаньоном ГГ
* *BenchPirate.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Аллигатор Джек не является компаньоном ГГ
* *AlligatorJack.aivar[AIV_PARTYMEMBER] = FALSE;
* *// Пираты продолжают выполнять свой распорядок дня
* *B_StartOtherRoutine(Skip,"START");
* *B_StartOtherRoutine(Matt,"START");
* *B_StartOtherRoutine(Brandon,"START");
* *B_StartOtherRoutine(RoastPirate,"START");
* *B_StartOtherRoutine(BenchPirate,"START");
* *B_StartOtherRoutine(AlligatorJack,"START");
};

// Насколько далеко от лагеря пираты могут сопровождать ГГ
// ------------------------------------------------
// Возвращаемое значение:
// TRUE - пират должен покинуть ГГ, FALSE - пират сопровождает ГГ.
func int C_GregsPiratesTooFar()
{
* *// если расстояние (в см) от ГГ до указанных точек менее заданного
* *if (Npc_GetDistToWP(hero,"ADW_CANYON_MINE1_09") < 3000)
* *¦¦ (Npc_GetDistToWP(hero,"ADW_CANYON_MINE2_04") < 2000)
* *¦¦ (Npc_GetDistToWP(hero,"ADW_CANYON_LIBRARY_04") < 2000)
* *¦¦ (Npc_GetDistToWP(hero,"ADW_CANYON_PATH_TO_BANDITS_ 25") < 6000)
* *¦¦ (Npc_GetDistToWP(hero,"ADW_PIRATECAMP_WAY_16") < 8000)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

// Сколько пиратов сопровождают ГГ
// ------------------------------------------------
// Возвращаемое значение: кол-во пиратов
func int C_HowManyPiratesInParty()
{
* *return
* *(
* * * *Skip.aivar[AIV_PARTYMEMBER]
* * * *+ Matt.aivar[AIV_PARTYMEMBER]
* * * *+ Brandon.aivar[AIV_PARTYMEMBER]
* * * *+ RoastPirate.aivar[AIV_PARTYMEMBER]
* * * *+ BenchPirate.aivar[AIV_PARTYMEMBER]
* * * *+ AlligatorJack.aivar[AIV_PARTYMEMBER]
* *);
};

// Пираты согласны идти с ГГ на зачистку каньона
func void B_Addon_PiratesFollowAgain()
{
* *// если ГГ ближе 40м от берега залива
* *if(Npc_GetDistToWP(hero,"STRAND") < 4000)
* *{
* * * *return;
* *};
* *// если с ГГ уже есть пираты
* *if(C_HowManyPiratesInParty() != 0)
* *{
* * * *return;
* *};
* *// если расстояние между ГГ и Скипом < 20м и Скип живой и self не Скип
* *if(Npc_GetDistToNpc(hero,Skip) <= 2000) && (!Npc_IsDead(Skip)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(Skip))
* *{
* * * *// Скип становится членом партии ГГ
* * * *Skip.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *// очистка очереди AI состояний Скипа
* * * *Npc_ClearAIQueue(Skip);
* * * *// Скип следует за ГГ
* * * *B_StartOtherRoutine(Skip,"FOLLOW");
* *};
* *// аналогично и с другими пиратами
* *if(Npc_GetDistToNpc(hero,Matt) <= 2000) && (!Npc_IsDead(Matt)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(Matt))
* *{
* * * *Matt.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *Npc_ClearAIQueue(Matt);
* * * *B_StartOtherRoutine(Matt,"FOLLOW");
* *};
* *if(Npc_GetDistToNpc(hero,Brandon) <= 2000) && (!Npc_IsDead(Brandon)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(Brandon))
* *{
* * * *Brandon.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *Npc_ClearAIQueue(Brandon);
* * * *B_StartOtherRoutine(Brandon,"FOLLOW");
* *};
* *if(Npc_GetDistToNpc(hero,RoastPirate) <= 2000) && (!Npc_IsDead(RoastPirate)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(RoastPirate))
* *{
* * * *RoastPirate.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *Npc_ClearAIQueue(RoastPirate);
* * * *B_StartOtherRoutine(RoastPirate,"FOLLOW");
* *};
* *if(Npc_GetDistToNpc(hero,BenchPirate) <= 2000) && (!Npc_IsDead(BenchPirate)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(BenchPirate))
* *{
* * * *BenchPirate.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *Npc_ClearAIQueue(BenchPirate);
* * * *B_StartOtherRoutine(BenchPirate,"FOLLOW");
* *};
* *if(Npc_GetDistToNpc(hero,AlligatorJack) <= 2000) && (!Npc_IsDead(AlligatorJack)) && (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(AlligatorJack))
* *{
* * * *AlligatorJack.aivar[AIV_PARTYMEMBER] = TRUE;
* * * *Npc_ClearAIQueue(AlligatorJack);
* * * *B_StartOtherRoutine(AlligatorJack,"FOLLOW");
* *};
};

// Освобождена ли башня около Лагеря пиратов от бандитов
// ------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_TowerBanditsDead()
{
* *// получить ссылки на бандитов в башне
* *var C_NPC TowerBandit1;
* *Towerbandit1 = Hlp_GetNpc(BDT_10100_Addon_Towerbandit);
* *var C_NPC TowerBandit2;
* *Towerbandit2 = Hlp_GetNpc(BDT_10101_Addon_Towerbandit);
* *var C_NPC TowerBandit3;
* *Towerbandit3 = Hlp_GetNpc(BDT_10102_Addon_Towerbandit);
* *// если все три бандита мертвы
* *if(Npc_IsDead(TowerBandit1) && Npc_IsDead(TowerBandit2) && Npc_IsDead(TowerBandit3))
* *{
* * * *return TRUE;
* * * *// башня освобождена от бандитов (Внимание ОШИБКА: данную строку необходимо перенести на одну вверх, иначе топик по освобождению башни не будет закрыт)
* * * *TowerBanditsDead = TRUE;
* *}
* *else
* *{
* * * *return FALSE;
* *};
};


* *2. Функции, связанные с карманной кражей.

Файл B_Beclauen.d

// other - ГГ, self - НПС

// Проверяется возможность карманной кражи у НПС
// ------------------------------------------------
// Аргумент: TheftDex - требуемая ловкость для открытия диалога воровства, TheftGold - сколько денег можно украсть
// Возвращаемое значение: TRUE - кража возможна, FALSE - нет
func int C_Beklauen(var int TheftDex,var int TheftGold)
{ *
* *// если ГГ обучен карманной краже
* *if (Npc_GetTalentSkill(other,NPC_TALENT_PICKPOCKET) == TRUE)
* *// и НПС не обворован ГГ
* *&& (self.aivar[AIV_PlayerHasPickedMyPocket] == FALSE)
* *// и ГГ имеет требуемую ловкость (ловкость ГГ должна быть более (TheftDex-10))
* *&& (other.attribute[ATR_DEXTERITY] >= (TheftDex - Theftdiff))
* *// и НПС не одержим
* *&& (NpcObsessedByDMT == FALSE)
* *{
* * * *// если НПС в состоянии диалога
* * * *if(Npc_IsInState(self,ZS_Talk))
* * * *{
* * * * * *// задать уровень ловкости, требуемый для успешного воровства
* * * * * *if(TheftDex <= 20)
* * * * * *{
* * * * * * * *TheftDexGlob = 10;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *TheftDexGlob = TheftDex;
* * * * * *};
* * * * * *// задать кол-во украденных денег
* * * * * *TheftGoldGlob = TheftGold;
* * * *};
* * * *return TRUE;
* *};
* *return FALSE; * // Добавлено мной для исключения возможной ошибки.
}; *
* *
// Функция карманной кражи
func void B_Beklauen()
{ *
* *// если ГГ имеет требуемую ловкость
* *if(other.attribute[ATR_DEXTERITY] >= TheftDexGlob)
* *{
* * * *// ГГ получет заданное кол-во денег
* * * *B_GiveInvItems(self,other,ItMi_Gold,TheftGoldGlob );
* * * *// установка флага, что НПС обворован ГГ
* * * *self.aivar[AIV_PlayerHasPickedMyPocket] = TRUE;
* * * *// получение экспы за воровство
* * * *B_GiveThiefXP();
* * * *// звуковое сопровождение
* * * *Snd_Play("Geldbeutel");
* *}
* *else
* *{
* * * *// фиксация неудачной кражи
* * * *B_ResetThiefLevel();
* * * *// прекратить диалог (т.е. кражу)
* * * *AI_StopProcessInfos(self);
* * * *// НПС атакует вора
* * * *B_Attack(self,other,AR_Theft,1);
* *};
}; *


* *3. Функция реакции на повреждение "Когтем Белиара".

Файл B_BeliarsWeaponSpecialDamage.d

// ************************************************** **************
// Функция реакции на повреждение "Когтем Белиара"
// ************************************************** **************
// Аргументы: oth - нападающий, slf - жертва

var int RavenBlitz; // кол-во молний, созданных Равеном

func void B_BeliarsWeaponSpecialDamage(var C_NPC oth,var C_NPC slf)
{
* *// если Равен жертва
* *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Raven))
* *{
* * * *// эффект "Гнев Белиара" исходит от Равена
* * * *Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",slf, slf,0,0,0,FALSE);
* * * *// если молний не было
* * * *if(RavenBlitz <= 0)
* * * *{
* * * * * *// эффект "Гнев Белиара" падает на ГГ
* * * * * *Wld_PlayEffect("spellFX_BELIARSRAGE",oth,oth,0,0, 0,FALSE);
* * * * * *// магическое повреждение ГГ на 50 пунктов
* * * * * *B_MagicHurtNpc(slf,oth,50);
* * * * * *// кол-во молний ++
* * * * * *RavenBlitz += 1;
* * * *}
* * * *// если ударов молнией >= 3
* * * *else if(RavenBlitz >= 3)
* * * *{
* * * * * *var int RavenRandy;
* * * * * *RavenRandy = Hlp_Random(3);
* * * * * *// Примечание: непонятное условие, будет выполняться всегда
* * * * * *if(RavenRandy <= 50)
* * * * * *{
* * * * * * * *// сброс на 0
* * * * * * * *RavenBlitz = 0;
* * * * * *};
* * * *}
* * * *else
* * * *{
* * * * * *RavenBlitz += 1;
* * * *};
* * * *// результат такой, каждая третья молния, созданная Равеном, поражает ГГ
* *}
* *// если нападающий ГГ
* *else if(Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
* *{
* * * *var int DamageRandy;
* * * *// вероятность дополнительного повреждения
* * * *DamageRandy = Hlp_Random(100);
* * * *// если ГГ вооружен "Когтем Белиара" и вероятность <= шанса доп. повреждения
* * * *if(C_ScHasReadiedBeliarsWeapon()) && (DamageRandy <= BeliarDamageChance)
* * * *{
* * * * * *// если жертва Дракон нежить
* * * * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)
* * * * * *{
* * * * * * * *// эффект "Гнев Белиара" падает на ГГ
* * * * * * * *Wld_PlayEffect("spellFX_BELIARSRAGE",oth,oth,0,0, 0,FALSE);
* * * * * * * *// ГГ получает 100 пунктов урона
* * * * * * * *B_MagicHurtNpc(slf,oth,100);
* * * * * *}
* * * * * *// если жертва уязвима
* * * * * *else if(slf.flags != NPC_FLAG_IMMORTAL)
* * * * * *{
* * * * * * * *// эффект "Гнев Белиара" падает на жертву
* * * * * * * *Wld_PlayEffect("spellFX_BELIARSRAGE",slf,slf,0,0, 0,FALSE);
* * * * * * * *// жертва получает 100 пунктов урона
* * * * * * * *B_MagicHurtNpc(oth,slf,100); * * * * * *
* * * * * *};
* * * * * *// эффект "Гнев Белиара" исходит от ГГ
* * * * * *Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",hero ,hero,0,0,0,FALSE);
* * * *};
* * * *// если ГГ вооружен "Когтем Белиара" и вероятность <= 50 (удар без повреждения)
* * * *if(C_ScHasReadiedBeliarsWeapon()) && (DamageRandy <= 50)
* * * *{
* * * * * *// эффект "Гнев Белиара" исходит от ГГ
* * * * * *Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",hero ,hero,0,0,0,FALSE);
* * * *};
* *};
};

Ответить с цитированием
Старый 14.07.2005, 12:04   #216
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *4. Капитан приглашает команду на корабль перед отплытием на Ирдорат.

Файл B_CaptainCallsAllOnBoard.d

// ************************************************** **************
// Капитан приглашает команду на корабль перед отплытием на Ирдорат
// ************************************************** **************
// Аргумент: Captain - капитан

func void B_CaptainCallsAllOnBoard(var C_NPC Captain)
{ *
* *// ГГ отдает капитану "Морскую карту к острову Ирдорат"
* *B_GiveInvItems(hero,Captain,ItWr_Seamap_Irdorath, 1);
* *// в инвентаре капитана появляется "Ключ от каюты капитана"
* *CreateInvItems(Captain,ItKe_Ship_Levelchange_MIS, 1);
* *// капитан передает ключ ГГ (other в диалоге)
* *B_GiveInvItems(Captain,other,ItKe_Ship_Levelchang e_MIS,1);
* *// капитан идет на корабль
* *B_StartOtherRoutine(Captain,"AllOnBoard");
* *// если Ли завербован, он идет на корабль
* *if(Lee_IsOnBoard == LOG_SUCCESS) * * * *{B_StartOtherRoutine(Lee,"Ship");};
* *// если Мильтон завербован, он идет на корабль
* *if(MiltenNW_IsOnBoard == LOG_SUCCESS) * {B_StartOtherRoutine(MiltenNW,"Ship");};
* *// если Лестер завербован, он идет на корабль
* *if(Lester_IsOnBoard == LOG_SUCCESS) * * {B_StartOtherRoutine(Lester,"Ship");};
* *// если Горн завербован, он идет на корабль
* *if(Gorn_IsOnBoard == LOG_SUCCESS) * * * {B_StartOtherRoutine(GornNW_nach_DJG,"Ship");};
* *// если Марио завербован, он идет на корабль
* *if(Mario_IsOnBoard == LOG_SUCCESS) * * *{B_StartOtherRoutine(Mario,"Ship");};
* *// если Вольф завербован, он идет на корабль
* *if(Wolf_IsOnBoard == LOG_SUCCESS) * * * {B_StartOtherRoutine(SLD_Wolf,"Ship");};
* *// если Ларес завербован, он идет на корабль
* *if(Lares_IsOnBoard == LOG_SUCCESS) * * *{B_StartOtherRoutine(Lares,"Ship");};
* *// если Беннет завербован, он идет на корабль
* *if(Bennet_IsOnBoard == LOG_SUCCESS) * * {B_StartOtherRoutine(Bennet,"Ship");};
* *// если Диего завербован, он идет на корабль
* *if(Diego_IsOnBoard == LOG_SUCCESS) * * *{B_StartOtherRoutine(DiegoNW,"Ship");};
* *// если Бифф завербован, он идет на корабль
* *if(Biff_IsOnBoard == LOG_SUCCESS) * * * {B_StartOtherRoutine(Biff_NW,"Ship");};
* *// если Ватрас завербован, он идет на корабль
* *if(Vatras_IsOnBoard == LOG_SUCCESS) * * {B_StartOtherRoutine(Vatras,"Ship");};
* *// если Кор Ангар завербован, он идет на корабль
* *if(Angar_IsOnBoard == LOG_SUCCESS) * * *{B_StartOtherRoutine(Angar_NW,"Ship");};
* *// если Гирион завербован, он идет на корабль
* *if(Girion_IsOnBoard == LOG_SUCCESS) * * {B_StartOtherRoutine(Girion,"Ship");};
* *// флаг начала 6 главы
* *MIS_ReadyforChapter6 = TRUE;
};


* *5. Всё ли готово для отплытия на Ирдорат?

Файл B_CaptainConditions.d

// ************************************************** **************
// Всё ли готово для отплытия на Ирдорат?
// ************************************************** **************
// Аргумент: Captain - капитан
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет

func int B_CaptainConditions(var C_NPC Captain)
{
* *// если Глава 5
* *if (Kapitel == 5)
* *// и капитан найден
* *&& (SCGotCaptain == TRUE)
* *// и ГГ имеет "Морскую карту к острову Ирдорат"
* *&& (Npc_HasItems(hero,ItWr_Seamap_Irdorath))
* *// и кол-во завербованных для похода >= 5
* *&& (crewmember_Count >= Min_Crew)
* *// и капитан находится не далее 20м от корабля
* *&& (Npc_GetDistToWP(Captain,"NW_WAITFOR_SHIP_CAPTAIN" ) < 2000)
* *// и команда может подниматься на корабль или охрана корабля убита (2 охранника)
* *&& ((MIS_ShipIsFree == TRUE) ¦¦ ((Npc_IsDead(Schiffswache_212)) && (Npc_IsDead(Schiffswache_213)))) * * * *
* *{
* * * *// установка флага команда может подниматься на корабль
* * * *MIS_ShipIsFree = TRUE;
* * * *return TRUE;
* *};
* *return FALSE;
};


* *6. Функции квеста по зачистке каньона от Расчленителей.

Файл B_CountCanyonRazor.d

// Все ли Расчленители в каньоне убиты?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет

func int C_AllCanyonRazorDead()
{
* *// если Грег вернулся в Яркендар
* *if (GregIsBack == TRUE)
* *// и 10 Расчленителей убито
* *&& Npc_IsDead(CanyonRazor01)
* *&& Npc_IsDead(CanyonRazor02)
* *&& Npc_IsDead(CanyonRazor03)
* *&& Npc_IsDead(CanyonRazor04)
* *&& Npc_IsDead(CanyonRazor05)
* *&& Npc_IsDead(CanyonRazor06)
* *&& Npc_IsDead(CanyonRazor07)
* *&& Npc_IsDead(CanyonRazor08 )
* *&& Npc_IsDead(CanyonRazor09)
* *&& Npc_IsDead(CanyonRazor10)
* *{
* * * *return TRUE;
* *}
* *return FALSE;
};

// Действительно ли убит Расчленитель из каньона?
// ----------------------------------------------------------------
// Аргумент: slf - убитый НПС
// Возвращаемое значение: TRUE - да, FALSE - нет

func int C_IAmCanyonRazor(var C_NPC slf)
{
* *// получить ссылки на Расчленителей из каньона
* *var C_NPC RAZ01; * *RAZ01 = Hlp_GetNpc(CANYONRAZOR01);
* *var C_NPC RAZ02; * *RAZ02 = Hlp_GetNpc(CANYONRAZOR02);
* *var C_NPC RAZ03; * *RAZ03 = Hlp_GetNpc(CANYONRAZOR03);
* *var C_NPC RAZ04; * *RAZ04 = Hlp_GetNpc(CANYONRAZOR04);
* *var C_NPC RAZ05; * *RAZ05 = Hlp_GetNpc(CANYONRAZOR05);
* *var C_NPC RAZ06; * *RAZ06 = Hlp_GetNpc(CANYONRAZOR06);
* *var C_NPC RAZ07; * *RAZ07 = Hlp_GetNpc(CANYONRAZOR07);
* *var C_NPC RAZ08; * *RAZ08 = Hlp_GetNpc(CANYONRAZOR08 );
* *var C_NPC RAZ09; * *RAZ09 = Hlp_GetNpc(CANYONRAZOR09);
* *var C_NPC RAZ10; * *RAZ10 = Hlp_GetNpc(CANYONRAZOR10);
* *// если убитый НПС является одним из Расчленителей каньона
* *if ((Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ01))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ02))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ03))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ04))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ05))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ06))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ07))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ08 ))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ09))
* *¦¦ *(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(RAZ10)))
* *{
* * * *return TRUE;
* *}
* *return FALSE;
};

// Вывод информации об убитых Расчленителях
func void B_CountCanyonRazor()
{
* *var string CanyonRazorText;
* *var string CanyonRazorLeft;
* *// "10 - кол-во убитых Расчленителей"
* *CanyonRazorLeft = IntToString(10 - CanyonRazorBodyCount);
* *// CanyonRazorLeft + "глорх(-а, -ов) осталось"
* *CanyonRazorText = ConcatStrings(CanyonRazorLeft,PRINT_Addon_CanyonRa zorsLeft);
* *// вывод строки на экран
* *AI_PrintScreen(CanyonRazorText,-1,YPOS_GOLDGIVEN,FONT_ScreenSmall,2);
};


* *7. Функция подсчета убитых драконов.

Файл B_DragonKillCounter.d

// ************************************************** **************
// Функция подсчета убитых драконов (вообще-то действия выполняемые после убийства НПС)
// ************************************************** **************
// Аргумент: current_dragon - убитый НПС
// ----------------------------------------------------------------
// Возвращаемое значение: нет, тип функции должен быть исправлен на void

var int SwapDragnIsDead;
var int RckDragnIsDead;
var int FreDragnIsDead; * *
var int IcDragnIsDead; *

func int B_DragonKillCounter(var C_NPC current_dragon)
{
* *var C_NPC Ravn;
* *// получить ссылку на Равена
* *Ravn = Hlp_GetNpc(BDT_1090_Addon_Raven);
* *// если Равен убит
* *if((Hlp_GetInstanceID(current_dragon)) == (Hlp_GetInstanceID(Ravn)))
* *{
* * * *// если флаг убийства Равена не установлен
* * * *if(RavenIsDead == FALSE)
* * * *{
* * * * * *// видео "Смерть Равена"
* * * * * *PlayVideoEx("EXTRO_RAVEN.BIK",TRUE,FALSE);
* * * * * *// установить флаг
* * * * * *RavenIsDead = TRUE;
* * * * * *// убрать Миксира из Яркендара
* * * * * *B_RemoveNpc(Myxir_ADW);
* * * *};
* *};
* *// если убит дракон
* *if(current_dragon.guild == GIL_DRAGON) *
* *{
* * * *// получить ссылки на 4 драконов Миненталя
* * * *var C_NPC SwapDragn; * *SwapDragn * = Hlp_GetNpc(Dragon_Swamp);
* * * *var C_NPC RckDragn; * * RckDragn * *= Hlp_GetNpc(Dragon_Rock);
* * * *var C_NPC FreDragn; * * FreDragn * *= Hlp_GetNpc(Dragon_Fire);
* * * *var C_NPC IcDragn; * * *IcDragn * * = Hlp_GetNpc(Dragon_Ice); *
* * * *// если убит Болотный дракон и флаг его убийства не установлен
* * * *if((Hlp_GetInstanceID(current_dragon) == Hlp_GetInstanceID(SwapDragn)) && (SwapDragnIsDead == FALSE))
* * * *{
* * * * * *// счетчик убитых драконов ++
* * * * * *MIS_KilledDragons = (MIS_KilledDragons + 1);
* * * * * *// установит флаг убийства дракона
* * * * * *SwapDragnIsDead = TRUE;
* * * *};
* * * *// Каменный дракон
* * * *if((Hlp_GetInstanceID(current_dragon) == Hlp_GetInstanceID (RckDragn)) && (RckDragnIsDead == FALSE))
* * * *{
* * * * * *MIS_KilledDragons = (MIS_KilledDragons + 1);
* * * * * *RckDragnIsDead = TRUE;
* * * *};
* * * *// Огненный дракон
* * * *if((Hlp_GetInstanceID(current_dragon) == Hlp_GetInstanceID (FreDragn)) && (FreDragnIsDead == FALSE))
* * * *{
* * * * * *MIS_KilledDragons = (MIS_KilledDragons + 1);
* * * * * *FreDragnIsDead = TRUE;
* * * *};
* * * *// Ледяной дракон
* * * *if((Hlp_GetInstanceID (current_dragon) == Hlp_GetInstanceID (IcDragn)) && (IcDragnIsDead == FALSE))
* * * *{
* * * * * *MIS_KilledDragons = (MIS_KilledDragons + 1);
* * * * * *IcDragnIsDead = TRUE;
* * * *};
* *};
* *// если убито 4 дракона
* *if(MIS_KilledDragons == 4)
* *{
* * * *// установит флаг - ГГ убил всех драконов
* * * *MIS_AllDragonsDead = TRUE;
* * * *// если Бифф член партии ГГ и Бифф жив
* * * *if((DJG_BiffParty == TRUE) && (Npc_IsDead(Biff) == FALSE))
* * * *{
* * * * * *// установить флаг - Бифф поощряет ГГ за убийство драконов
* * * * * *DJG_BiffSurvivedLastDragon = TRUE;
* * * *};
* *};
* *// если убит Дракон нежить
* *if(current_dragon.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)
* *{
* * * *// установить флаг убийства последнего дракона
* * * *UndeadDragonIsDead = TRUE;
* * * *// создать в дневнике тему "Назад к кораблю"
* * * *Log_CreateTopic(TOPIC_BackToShip,LOG_MISSION);
* * * *// установить статус темы - выполнение
* * * *Log_SetTopicStatus(TOPIC_BackToShip,LOG_RUNNING);
* * * *// запись в теме "Враг побежден и теперь я больше не буду гнить под скалами. Я ухожу отсюда обратно на корабль."
* * * *B_LogEntry(TOPIC_BackToShip,PRINT_DragKillCount);
* * * *// телепортация ГГ на корабль
* * * *AI_Teleport(hero,"UNDEAD_ENDTELEPORT"); *
* * * *// если ГГ Милиционер или Паладин
* * * *if((hero.guild == GIL_MIL) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *// ролик убийства дракона Паладином
* * * * * *PlayVideoEx ("EXTRO_PAL.BIK",TRUE,FALSE);
* * * *}
* * * *// если ГГ Наемник или Охотник на драконов
* * * *else if((hero.guild == GIL_SLD) ¦¦ (hero.guild == GIL_DJG))
* * * *{
* * * * * *// ролик убийства дракона Охотником на драконов
* * * * * *PlayVideoEx("EXTRO_DJG.BIK",TRUE,FALSE);
* * * *}
* * * *else // ГГ Маг Огня
* * * *{
* * * * * *// ролик убийства дракона Магом Огня
* * * * * *PlayVideoEx ("EXTRO_KDF.BIK",TRUE,FALSE);
* * * *};
* *};
};


* *8. Финальное видео (конец игры).

Файл B_ExtroAVI.d

// ************************************************** **************
// Финальное видео (конец игры)
// ************************************************** **************

func void B_Extro_Avi()
{
* *// если Диего жив и Горн жив
* *if((Npc_IsDead(PC_Thief_DI) == FALSE) && (Npc_IsDead(PC_Fighter_DI) == FALSE))
* *{
* * * *// установить флаг - друзья живы
* * * *DiegAndGornAreOnboard = TRUE;
* *};
* *// серия финальных роликов
* *PlayVideo("Extro_Xardas.BIK"); *
* *PlayVideo("Credits_Extro.BIK");
* *PlayVideo("Credits2.BIK"); *
* *// если друзья живы
* *if(DiegAndGornAreOnboard == TRUE)
* *{
* * * *// ещё один ролик
* * * *PlayVideo("Extro_AllesWirdGut.BIK"); * *
* *};
* *// GAME OVER
* *ExitSession();
};

Ответить с цитированием
Старый 15.07.2005, 08:34   #217
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *9. Функция реакции на повреждение для призраков.

Файл B_GhostSpecialDamage.d

// ************************************************** **************
// Функция реакции на повреждение для призраков
// ************************************************** **************
// Аргументы: oth - нападающий, slf - жертва
// ----------------------------------------------------------------
// Возвращаемое значение: нет, тип функции должен быть исправлен на void

func int B_GhostSpecialDamage(var C_NPC oth,var C_NPC slf)
{
* *var C_NPC Quarho;
* *// получить ссылку на Куарходрона
* *Quarho = Hlp_GetNpc(NONE_ADDON_111_Quarhodron);
* *var C_NPC Rhadem;
* *// получить ссылку на Радемеса
* *Rhadem = Hlp_GetNpc(NONE_ADDON_112_Rhademes);
* *var C_NPC her;
* *// получить ссылку на ГГ
* *her = Hlp_GetNpc(PC_HERO);
* *// если жертва Куарходрона или Радемес (Примечание: self необходимо заменить на slf, иначе возможна ошибка)
* *if ((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Quarho))
* *¦¦ (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rhadem)))
* *{
* * * *// эффект "Гнев Белиара" падает на нападающего
* * * *Wld_PlayEffect("spellFX_BELIARSRAGE",oth,oth,0,0, 0,FALSE);
* * * *// если нападающий не бессмертен
* * * *if(oth.flags != NPC_FLAG_IMMORTAL)
* * * *{
* * * * * *// если нападающий не ГГ
* * * * * *if(Hlp_GetInstanceID(oth) != Hlp_GetInstanceID(her))
* * * * * *{
* * * * * * * *// убить нападающего
* * * * * * * *Npc_ChangeAttribute(oth,ATR_HITPOINTS,-oth.attribute[ATR_HITPOINTS_MAX]);
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *// счетчик предупреждений ++
* * * * * * * *GhostAttackWarn = (GhostAttackWarn + 1);
* * * * * * * *// если менее 3 предупреждений
* * * * * * * *if(GhostAttackWarn < 3)
* * * * * * * *{
* * * * * * * * * *// жизнь нападающего уменьшается наполовину
* * * * * * * * * *oth.attribute[ATR_HITPOINTS] = (oth.attribute[ATR_HITPOINTS]/2);
* * * * * * * *}
* * * * * * * *else // 3 предупреждения
* * * * * * * *{
* * * * * * * * * *// если нападающий ГГ (Примечание: лишнее, уже проверялось
* * * * * * * * * *if(Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(her))
* * * * * * * * * *{
* * * * * * * * * * * *// жизнь ГГ = 0
* * * * * * * * * * * *oth.attribute[ATR_HITPOINTS] = 0;
* * * * * * * * * * * *// анимация смерти ГГ
* * * * * * * * * * * *AI_PlayAni(oth,"T_DEAD");
* * * * * * * * * *};
* * * * * * * *};
* * * * * *};
* * * *};
* * * *return FALSE; * // убрать, функция ничего не возвращает
* *};
};


* *10. Функции подсчета экспы за карманную кражу.

Файл B_GiveThiefXP.d

var int VictimCount; * * * *// кол-во успешно обворованных
var int VictimLevel; * * * *// уровень обворованных
var int ThiefLevel; * * * * // уровень воровства
const int ThiefXP = 50; * * // базовая экспа за воровство

// Начислить экспу за карманную кражу (удачная попытка)
func void B_GiveThiefXP()
{
* *// кол-во обворованных ++
* *VictimCount = (VictimCount + 1);
* *// если уровень 0 *
* *if(VictimLevel == 0)
* *{
* * * *// уровень обворованных = 2
* * * *VictimLevel = 2;
* *};
* *// если кол-во обворованных >= уровня обворованных
* *if(VictimCount >= VictimLevel)
* *{
* * * *// расчет добавочной экспы за воровство
* * * *ThiefLevel = (ThiefLevel + 1);
* * * *VictimLevel =(VictimCount + ThiefLevel);
* *};
* *// начислить экспу
* *B_GivePlayerXP(ThiefXP + (ThiefLevel * 10)); *
};
// Примечание: На форуме писалось, что начисляемая экспа за воровство зависит от главы, формула же говорит, что не зависит.
// У кого есть желание могут составить расчет экспы в зависимости от кол-ва удачно и неудачно обворованных.

// Неудачная попытка воровства
func void B_ResetThiefLevel()
{
* *// если кол-во обворованных >= уровня воровства
* *if(VictimCount > ThiefLevel)
* *{
* * * *// счетчик успешно обворованных --
* * * *VictimCount = (VictimCount - 1);
* *};
};


* *11. Грег идет убивать Декстера.

Файл B_GiveThiefXP.d

// ************************************************** **************
// Грег идет убивать Декстера
// ************************************************** **************

// self - Грег или Декстер или иной НПС, т.к. функция вызывается из разных мест

var int B_Greg_ComesToDexter_OneTime; * // флаг одноразового выполнения действия

func void B_Greg_ComesToDexter()
{
* *// если self Декстер
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Dexter))
* *{
* * * *// если флаг сброшен
* * * *if(B_Greg_ComesToDexter_OneTime == FALSE)
* * * *{
* * * * * *// у Декстера появился враг
* * * * * *dexter.aivar[AIV_EnemyOverride] = FALSE;
* * * * * *// Грег находится у Декстера
* * * * * *GregLocation = Greg_Dexter;
* * * * * *// Грег идет к Декстеру
* * * * * *B_StartOtherRoutine(Greg_NW,"Dexter"); // Внимание: В одной из версий датника слово "Dexter" переведено на русский язык - грубейшая ошибка, Грег к Декстеру не пойдет!
* * * * * *// установить флаг
* * * * * *B_Greg_ComesToDexter_OneTime = TRUE;
* * * *};
* *};
};


* *12. Жужжание Ищущего огонька.

Файл B_IrrlichtBeep.d

// ************************************************** **************
// Жужжание Ищущего огонька
// ************************************************** **************

func void B_IrrlichtBeep()
{
* *// вывод текста и озвучки
* *AI_Output(self,other,"DIA_Wisp_15_00"); //(зумм)
};


* *13. Блеяние овцы Лизели.

Файл B_LieselMaeh.d

// ************************************************** **************
// Блеяние овцы Лизели
// ************************************************** **************

func void B_LieselMaeh()
{
* *// вывод текста и озвучки
* *AI_Output(self,other,"DIA_Liesel_15_00"); * //Mееееее!
};


* *14. Несчастный случай с Малкомом в Яркендаре.

Файл B_MalcomExident.d

// ************************************************** **************
// Несчастный случай с Малкомом в Яркендаре
// ************************************************** **************

func void B_MalcomExident()
{
* *// ГГ не знает, что Малком мертв
* *if(Malcom_Accident == FALSE)
* *{
* * * *// если Малком жив
* * * *if(!Npc_IsDead(Malcom))
* * * *{
* * * * * *// телепортация Малкома в пещеру
* * * * * *AI_Teleport(Malcom,"ADW_PIRATECAMP_SECRETCAVE_02" );
* * * * * *// Малком спит в пещере
* * * * * *B_StartOtherRoutine(Malcom,"Start");
* * * * * *// убить Малкома
* * * * * *Npc_ChangeAttribute(Malcom,ATR_HITPOINTS,-Malcom.attribute[ATR_HITPOINTS_MAX]);
* * * * * *// тепортировать в пещеру ???
* * * * * *AI_Teleport(Malcom,"ADW_PIRATECAMP_SECRETCAVE_02" );
* * * * * *// несчастный случай произошел
* * * * * *Malcom_Accident = TRUE;
* * * * * *// если Оуэн жив
* * * * * *if(!Npc_IsDead(Owen))
* * * * * *{
* * * * * * * *// Оуэн сидит у костра в лагере пиратов
* * * * * * * *B_StartOtherRoutine(Owen,"Start");
* * * * * *};
* * * *};
* *};
};


* *15. ГГ находит кое-что спрятанное в предмете.

Файл B_PlayerFindItem.d

// ************************************************** **************
// ГГ находит кое-что спрятанное в предмете
// ************************************************** **************
// Аргументы: itm - содержимое предмета, amount - кол-во найденного

// self - НПС вскрывающий предмет
// item - предмет контейнер

func void B_PlayerFindItem(var int itm,var int amount)
{
* *// если предмет вскрывает ГГ
* *if(Npc_IsPlayer(self))
* *{
* * * *// создать в инвентаре ГГ найденные предметы
* * * *CreateInvItems(self,itm,amount);
* * * *var string ConcatText;
* * * *var string itemname;
* * * *// имя контейнера
* * * *itemname = item.name;
* * * *// если контейнер содержит деньги
* * * *if(itm == ItMi_Gold)
* * * *{
* * * * * *// amount + " золотых принято"
* * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_GoldErhalt en);
* * * * * *// вывод на экран
* * * * * *Print(concatText);
* * * * * *// звон денег
* * * * * *Snd_Play("Geldbeutel");
* * * *}
* * * *else
* * * *{
* * * * * *// если найден 1 предмет
* * * * * *if(amount == 1)
* * * * * *{
* * * * * * * *// itemname + " получают"
* * * * * * * *concatText = ConcatStrings(itemname,PRINT_Addon_erhalten);
* * * * * * * *// вывод
* * * * * * * *Print(concatText);
* * * * * * * *
* * * * * *} *
* * * * * *else
* * * * * *{
* * * * * * * *// amount + "предметов принято"
* * * * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_ItemsErhal ten);
* * * * * * * *// += " ("
* * * * * * * *concatText = ConcatStrings(concatText," (");
* * * * * * * *// += itemname
* * * * * * * *concatText = ConcatStrings(concatText,itemname);
* * * * * * * *// += ")"
* * * * * * * *concatText = ConcatStrings(concatText,")");
* * * * * * * *// вывод
* * * * * * * *Print(concatText);
* * * * * *};
* * * *};
* *};
};


* *16. Функции собрания Кольца Воды в таверне Орлана.

Файл B_RangerMeeting.d

// Сделать члена Кольца Воды готовым к собранию
// ----------------------------------------------------------------
// Аргумент: Ranger - НПС
func void B_MakeRangerReadyForMeeting(VAR C_NPC Ranger)
{
* *// создать в инвентаре Разорванную кольчугу
* *CreateInvItems(Ranger,ITAR_Fake_RANGER,1);
* *// снять старые доспехи
* *AI_UnequipArmor(Ranger);
* *// одеть кольчугу
* *AI_EquipArmor(Ranger,ITAR_Fake_RANGER);
* *// стать другом ГГ
* *Ranger.npctype = NPCTYPE_FRIEND;
};

// Член Кольца Воды покидает собрание
// ----------------------------------------------------------------
// Аргумент: Ranger - НПС
func void B_MakeRangerReadyToLeaveMeeting(VAR C_NPC Ranger)
{
* *// снять кольчугу
* *AI_UnequipArmor(Ranger);
* *// если НПС имеет Кольчуга "Кольца Воды", то удалить её
* *Npc_RemoveInvItems(Ranger,ITAR_RANGER_Addon,Npc_H asItems(Ranger,ITAR_RANGE
R_Addon));
* *// если НПС имеет Разорванную кольчугу, то удалить её
* *Npc_RemoveInvItems(Ranger,ITAR_Fake_RANGER,Npc_Ha sItems(Ranger,ITAR_Fake_R
ANGER));
* *// одеть лучшую броню
* *AI_EquipBestArmor(Ranger);
};

// Все участники готовятся к собранию
func void B_MakeRangerReadyForMeetingALL()
{
* *B_MakeRangerReadyForMeeting(Martin); * *// Мартин
* *B_MakeRangerReadyForMeeting(Lares); * * // Ларес
* *B_MakeRangerReadyForMeeting(Cord); * * *// Корд
* *B_MakeRangerReadyForMeeting(Gaan); * * *// Гаан
* *B_MakeRangerReadyForMeeting(Orlan); * * // Орлан
* *B_MakeRangerReadyForMeeting(Cavalorn); *// Ковалорн
};

// Все участники покидают собрание
func void B_MakeRangerReadyToLeaveMeetingALL()
{
* *B_MakeRangerReadyToLeaveMeeting(Martin);
* *B_MakeRangerReadyToLeaveMeeting(Lares);
* *B_MakeRangerReadyToLeaveMeeting(Cord);
* *B_MakeRangerReadyToLeaveMeeting(Gaan);
* *B_MakeRangerReadyToLeaveMeeting(Orlan);
* *B_MakeRangerReadyToLeaveMeeting(Cavalorn);
};

// Орлан дает команду идти всем в таверну
func void B_Addon_Orlan_RangersReadyForComing()
{
* *// если недостающий орнамент у паладинов получен
* *if(MIS_Addon_Cavalorn_GetOrnamentFromPAL != 0)
* *{
* * * *// Ковалорн идет в таверну
* * * *B_StartOtherRoutine(Cavalorn,"PreRangerMeeting");
* *};
* *// Мартин идет в таверну
* *B_StartOtherRoutine(Martin,"PreRangerMeeting");
* *// Ларес идет в таверну
* *B_StartOtherRoutine(Lares,"PreRangerMeeting"); * * * * *
* *// Корд идет в таверну
* *B_StartOtherRoutine(Cord,"PreRangerMeeting"); * * *
* *// Гаан идет в таверну
* *B_StartOtherRoutine(Gaan,"PreRangerMeeting"); * * * * *
};

// Сбор всех в таверне у стола
func void B_Addon_Orlan_ComingRanger()
{
* *if(MIS_Addon_Cavalorn_GetOrnamentFromPAL != 0)
* *{
* * * *B_StartOtherRoutine(Cavalorn,"RangerMeeting"); * * *
* *};
* *B_StartOtherRoutine(Martin, "RangerMeeting"); * * * * *
* *B_StartOtherRoutine(Lares,"RangerMeeting"); * * * *
* *B_StartOtherRoutine(Cord,"RangerMeeting"); * * * * *
* *B_StartOtherRoutine(Gaan,"RangerMeeting"); * * * * *
* *B_StartOtherRoutine(Orlan,"RangerMeeting");
* *// собрание началось
* *RangerMeetingRunning = LOG_RUNNING;
};

// Ларес заканчивает диалог
func void B_RangerMeetingParking()
{
* *// если недостающий орнамент у паладинов получен
* *if(MIS_Addon_Cavalorn_GetOrnamentFromPAL != 0)
* *{
* * * *// Ковалорн идет в город сидеть на скамье
* * * *B_StartOtherRoutine(Cavalorn,"Stadt");
* *};
* *// Орлан идет за прилавок
* *B_StartOtherRoutine(Orlan,"START");
* *// Ларес должен обратиться к ГГ
* *Lares_HaltsMaul = TRUE;
* *// просто стоит у стола
* *B_StartOtherRoutine(Lares,"Parking"); * * * * * * *
* *// Корд стоит у стола
* *B_StartOtherRoutine(Cord,"Parking");
* *// тут написана какая-то фигня, надо просто оставить те строки, против которых стоит //++, остальные удалить
* *if((Gaan.aivar[AIV_TalkedToPlayer] == FALSE))
* *{
* * * *// Гаан остается у стола
* * * *B_StartOtherRoutine(Gaan,"Parking"); * *//++
* *}
* *else
* *{
* * * *B_StartOtherRoutine(Gaan,"Parking"); * * * * * * * * * *
* *};
* *if(MIS_Addon_Martin_GetRangar == 0)
* *{
* * * *// Мартин остается у стола
* * * *B_StartOtherRoutine(Martin,"Parking"); *//++
* *}
* *else
* *{
* * * *B_StartOtherRoutine(Martin,"Parking");
* *};
};

// Ватрас заканчивает диалог
func void B_SchlussMitRangerMeeting()
{
* *// *** НПС возвращаются на свои места до собрания ***
* *// если недостающий орнамент у паладинов получен
* *if(MIS_Addon_Cavalorn_GetOrnamentFromPAL != 0)
* *{
* * * *// Ковалорн идет в город сидеть на скамье
* * * *B_StartOtherRoutine(Cavalorn,"Stadt"); * * * * *
* *};
* *// Ларес идет в гавань
* *B_StartOtherRoutine(Lares,"Start");
* *// Корд идет продолжать свои тренировки с мечом
* *B_StartOtherRoutine(Cord,"Start");
* *// если ГГ не говорил с Гааном
* *if(Gaan.aivar[AIV_TalkedToPlayer] == FALSE)
* *{
* * * *// Гаан идет туда, где родился
* * * *B_StartOtherRoutine(Gaan,"PreStart");
* *}
* *else
* *{
* * * *// Гаан идет к снепперу
* * * *B_StartOtherRoutine(Gaan,"Start"); * * * * * * * * *
* *};
* *// если вор для Мартина не пойман
* *if(MIS_Addon_Martin_GetRangar == 0)
* *{
* * * *// идет в порт
* * * *B_StartOtherRoutine(Martin,"PreStart");
* *}
* *else
* *{
* * * *// идет в порт или таверну в порту, в зависимости от времени
* * * *B_StartOtherRoutine(Martin,"Start");
* *};
* *// Орлан идет за прилавок
* *B_StartOtherRoutine (Orlan,"Start"); * *
* *// Ларес к ГГ не обратится
* *Lares_HaltsMaul = LOG_OBSOLETE;
};


* *17. Удалить призрака из игры.

Файл B_RemoveQuarhodron.d

// ************************************************** **************
// Удалить призрака из игры
// ************************************************** **************
// Возвращаемое значение: нет, тип функции должен быть исправлен на void

var int B_RemoveQuarhodron_OneTime; * * // флаг удаления Кваходрона
var int B_RemoveRhademes_OneTime; * * * // флаг удаления Радемеса

func int B_RemoveGhost()
{
* *// если ГГ узнаёт от Кваходрона о Камерах Аданоса
* *if(Ghost_SCKnowsHow2GetInAdanosTempel == TRUE)
* *{ *
* * * *// если ГГ вызвал Кваходрона и Кваходрон не удален
* * * *if(SC_SummonedAncientGhost == TRUE) && (B_RemoveQuarhodron_OneTime == FALSE)
* * * *{
* * * * * *// телепортировать на кладбище
* * * * * *AI_Teleport(NONE_ADDON_111_Quarhodron,"TOT");
* * * * * *// удалить Кваходрона
* * * * * *B_RemoveNpc(NONE_ADDON_111_Quarhodron);
* * * * * *// музычка
* * * * * *Snd_Play("MFX_GhostVoice");
* * * * * *Snd_Play("MFX_Firestorm_Cast");
* * * * * *// установить флаг удаления
* * * * * *B_RemoveQuarhodron_OneTime = TRUE;
* * * * * *// сброс счетчика предупреждений
* * * * * *GhostAttackWarn = 0;
* * * *};
* *};
* *// если Радемес был вставлен в игру (сработал триггер)
* *if(ADW_ADANOSTEMPEL_STONEGRD_TRIGG_FUNC_01_OneTim e == TRUE)
* *{
* * * *// если ГГ одолел Радемеса и Радемес не удален
* * * *if(SC_TookRhademesTrap == TRUE) && (B_RemoveRhademes_OneTime == FALSE)
* * * *{
* * * * * *// телепортировать на кладбище
* * * * * *AI_Teleport(NONE_ADDON_112_Rhademes,"TOT");
* * * * * *// удалить Радемеса
* * * * * *B_RemoveNpc(NONE_ADDON_112_Rhademes);
* * * * * *// если ГГ слышал последние слова Радемеса
* * * * * *if(SC_TalkedToRhademAfter == TRUE)
* * * * * *{
* * * * * * * *// музычка
* * * * * * * *Snd_Play("MFX_GhostVoice");
* * * * * * * *Snd_Play("MFX_Firestorm_Cast");
* * * * * *};
* * * * * *// установить флаг удаления
* * * * * *B_RemoveRhademes_OneTime = TRUE;
* * * * * *// сброс счетчика предупреждений
* * * * * *GhostAttackWarn = 0;
* * * *};
* *};
}; * * * * * * * * * * * * *

Ответить с цитированием
Старый 15.07.2005, 12:50   #218
PA
Строители Миртаны
*
 
Регистрация: 29.08.2004
Сообщений: 1
PA вне форума

По умолчанию Re: Уроки скриптологии

2Vam:
// amount + "предметов принято"
Судя по всему используется не оригинальный немецкий скрипт - Должно быть
// amount + " предметов принято"

Пробел обязателен - иначе не проставляется количество предметов.
Во многих местах надо обратиь на это внимание - типа получено/получен, принято/передано и т.д.
Ответить с цитированием
Старый 15.07.2005, 14:55   #219
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *18. Функции, связанные с оружием Белиара.

Файл B_ScHasBeliarsWeapon.d

// Имеет ли ГГ руны Белиара?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_SCHasBeliarsRune()
{
* *// если ГГ имеет
* *if (Npc_HasItems(hero,ItRu_BeliarsRage) * * == TRUE) * *// Ярость Белиара
* *¦¦ (Npc_HasItems(hero,ItRu_SuckEnergy) * * *== TRUE) * *// или Украсть энергию
* *¦¦ (Npc_HasItems(hero,ItRu_GreenTentacle) * == TRUE) * *// или Зеленые щупальца
* *¦¦ (Npc_HasItems(hero,ItRu_Swarm) * * * * * == TRUE) * *// или Рой
* *¦¦ (Npc_HasItems(hero,ItRu_Skull) * * * * * == TRUE) * *// или Крик мертвых
* *¦¦ (Npc_HasItems(hero,ItRu_SummonZombie) * *== TRUE) * *// или Создать зомби
* *¦¦ (Npc_HasItems(hero,ItRu_SummonGuardian) *== TRUE) * *// или Создать стража
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

// Имеет ли ГГ оружие Белиара?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_ScHasBeliarsWeapon()
{ *
* *// если ГГ имеет один из одноручников
* *if (Npc_HasItems(hero,ItMw_BeliarWeapon_Raven)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_01)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_02)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_03)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_04)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_05)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_06)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_07)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_08)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_09)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_10)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_11)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_12)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_13)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_14)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_15)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_16)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_17)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_18)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_19)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_1H_20)
* *// или один из двуручников
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_01)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_02)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_03)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_04)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_05)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_06)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_07)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_08)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_09)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_10)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_11)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_12)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_13)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_14)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_15)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_16)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_17)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_18)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_19)
* *¦¦ Npc_HasItems(hero,ItMw_BeliarWeapon_2H_20)
* *// или руны Белиара
* *¦¦ C_ScHasBeliarsRune())
* *{
* * * *return TRUE;
* *};
* *return FALSE;
}; *

// Является ли оружие ГГ оружием Белиара?
// ----------------------------------------------------------------
// Аргумент: Weap - проверяемый предмет
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_IsItemBeliarsWeapon(var C_ITEM Weap)
{ *
* *// если предмет является одним из одноручников
* *if (Hlp_IsItem(Weap,ItMw_BeliarWeapon_Raven) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_01) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_02) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_03) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_04) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_05) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_06) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_07) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_08) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_09) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_10) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_11) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_12) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_13) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_14) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_15) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_16) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_17) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_18) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_19) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_1H_20) == TRUE)
* *// или одним из двуручников
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_01) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_02) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_03) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_04) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_05) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_06) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_07) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_08) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_09) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_10) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_11) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_12) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_13) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_14) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_15) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_16) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_17) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_18) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_19) == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItMw_BeliarWeapon_2H_20) == TRUE)
* *// или одной из рун Белиара
* *¦¦ (Hlp_IsItem(Weap,ItRu_BeliarsRage) * * * *== TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_SuckEnergy) * * * * == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_GreenTentacle) * * *== TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_Swarm) * * * * * * *== TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_Skull) * * * * * * *== TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_SummonZombie) * * * == TRUE)
* *¦¦ (Hlp_IsItem(Weap,ItRu_SummonGuardian) * * == TRUE)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
}; *

// Является ли оружие ГГ дальнего радиуса повреждения оружием Белиара?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_ScHasReadiedBeliarsWeapon()
{ *
* *var C_ITEM ReadyWeap;
* *// получить ссылку на оружие дальнего радиуса поражения, которым экипирован ГГ
* *ReadyWeap = Npc_GetReadiedWeapon(hero);
* *// если это оружие Белиара
* *if(C_IsItemBeliarsWeapon(ReadyWeap))
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

// Является ли оружие ГГ ближнего радиуса повреждения оружием Белиара?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_ScHasEquippedBeliarsWeapon()
{ *
* *var C_ITEM EquipWeap;
* *// получить ссылку на оружие ближнего радиуса поражения, которым экипирован ГГ
* *EquipWeap = Npc_GetEquippedMeleeWeapon(hero);
* *// если это оружие Белиара
* *if(C_IsItemBeliarsWeapon(EquipWeap))
* *{
* * * *return TRUE;
* *};
* *
* *return FALSE; //DEFAULT
};

// Удалить оружие Белиара из инвентаря ГГ
func void B_ClearBeliarsWeapon ()
{ *
* *// если ГГ имеет один из одноручников, то удалить его
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_Raven,N pc_HasItems(hero,ItMw_BeliarWe
apon_Raven));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_01,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_01));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_02,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_02));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_03,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_03));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_04,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_04));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_05,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_05));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_06,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_06));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_07,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_07));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_08,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_08));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_09,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_09));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_10,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_10));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_11,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_11));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_12,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_12));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_13,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_13));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_14,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_14));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_15,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_15));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_16,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_16));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_17,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_17));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_18,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_18));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_19,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_19));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_1H_20,N pc_HasItems(hero,ItMw_BeliarWe
apon_1H_20));
* *// если ГГ имеет один из двуручников, то удалить его
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_01,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_01));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_02,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_02));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_03,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_03));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_04,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_04));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_05,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_05));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_06,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_06));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_07,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_07));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_08,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_08));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_09,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_09));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_10,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_10));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_11,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_11));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_12,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_12));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_13,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_13));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_14,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_14));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_15,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_15));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_16,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_16));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_17,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_17));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_18,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_18));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_19,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_19));
* *Npc_RemoveInvItems(hero,ItMw_BeliarWeapon_2H_20,N pc_HasItems(hero,ItMw_BeliarWe
apon_2H_20));
* *// если ГГ имеет одну из рун Белиара, то удалить её
* *Npc_RemoveInvItems(hero,ItRu_BeliarsRage * * * ,Npc_HasItems(hero,ItRu_BeliarsRage));
* *Npc_RemoveInvItems(hero,ItRu_SuckEnergy * * * *,Npc_HasItems(hero,ItRu_SuckEnergy));
* *Npc_RemoveInvItems(hero,ItRu_GreenTentacle * * ,Npc_HasItems(hero,ItRu_GreenTentacle));
* *Npc_RemoveInvItems(hero,ItRu_Swarm * * * * * * ,Npc_HasItems(hero,ItRu_Swarm));
* *Npc_RemoveInvItems(hero,ItRu_Skull * * * * * * ,Npc_HasItems(hero,ItRu_Skull));
* *Npc_RemoveInvItems(hero,ItRu_SummonZombie * * *,Npc_HasItems(hero,ItRu_SummonZombie));
* *Npc_RemoveInvItems(hero,ItRu_SummonGuardian * *,Npc_HasItems(hero,ItRu_SummonGuardian));
}; *

var int BeliarWeapCurrentLvL; * * * // текущий уровень оружия Белиара
var int BeliarWeapNextLvL; * * * * *// следующий уровень оружия Белиара
var int BeliarNextDamageChance; * * // следующая вероятность повреждения
* * * * * * *
// Можно ли улучшить оружие Белиара?
// ----------------------------------------------------------------
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_ScCanUpgrateBeliarsWeapon()
{
* *var int herolvl;
* *// получить уровень ГГ
* *herolvl = hero.level;
* *// если ГГ маг Огня
* *if(hero.guild == GIL_KDF)
* *{
* * * *// в зависимости от круга магии ГГ устанавливается следующий уровень оружия Белиара
* * * *if * * *(Npc_GetTalentSkill(hero,NPC_TALENT_MAGE) >= 5) { BeliarWeapNextLvL = 5; }
* * * *else if (Npc_GetTalentSkill(hero,NPC_TALENT_MAGE) == 4) { BeliarWeapNextLvL = 4; }
* * * *else if (Npc_GetTalentSkill(hero,NPC_TALENT_MAGE) == 3) { BeliarWeapNextLvL = 3; }
* * * *else if (Npc_GetTalentSkill(hero,NPC_TALENT_MAGE) == 2) { BeliarWeapNextLvL = 2; }
* * * *else if (Npc_GetTalentSkill(hero,NPC_TALENT_MAGE) <= 1) { BeliarWeapNextLvL = 1; };
* * * *return TRUE;
* *}
* *else
* *{ *
* * * *// в зависимости от уровня ГГ устанвливается следующий уровень оружия Белиара и соответствующая вероятность повреждения
* * * *if * * *(herolvl > 46) *{ BeliarWeapNextLvL = 20; BeliarNextDamageChance = BeliarDamageChance_20; }
* * * *else if (herolvl > 44) *{ BeliarWeapNextLvL = 19; BeliarNextDamageChance = BeliarDamageChance_19; }
* * * *else if (herolvl > 42) *{ BeliarWeapNextLvL = 18; BeliarNextDamageChance = BeliarDamageChance_18; }
* * * *else if (herolvl > 40) *{ BeliarWeapNextLvL = 17; BeliarNextDamageChance = BeliarDamageChance_17; }
* * * *else if (herolvl > 38) *{ BeliarWeapNextLvL = 16; BeliarNextDamageChance = BeliarDamageChance_16; }
* * * *else if (herolvl > 36) *{ BeliarWeapNextLvL = 15; BeliarNextDamageChance = BeliarDamageChance_15; }
* * * *else if (herolvl > 34) *{ BeliarWeapNextLvL = 14; BeliarNextDamageChance = BeliarDamageChance_14; }
* * * *else if (herolvl > 32) *{ BeliarWeapNextLvL = 13; BeliarNextDamageChance = BeliarDamageChance_13; }
* * * *else if (herolvl > 30) *{ BeliarWeapNextLvL = 12; BeliarNextDamageChance = BeliarDamageChance_12; }
* * * *else if (herolvl > 28) *{ BeliarWeapNextLvL = 11; BeliarNextDamageChance = BeliarDamageChance_11; }
* * * *else if (herolvl > 26) *{ BeliarWeapNextLvL = 10; BeliarNextDamageChance = BeliarDamageChance_10; }
* * * *else if (herolvl > 24) *{ BeliarWeapNextLvL = 9; *BeliarNextDamageChance = BeliarDamageChance_09; }
* * * *else if (herolvl > 22) *{ BeliarWeapNextLvL = 8; *BeliarNextDamageChance = BeliarDamageChance_08; }
* * * *else if (herolvl > 20) *{ BeliarWeapNextLvL = 7; *BeliarNextDamageChance = BeliarDamageChance_07; }
* * * *else if (herolvl > 18) *{ BeliarWeapNextLvL = 6; *BeliarNextDamageChance = BeliarDamageChance_06; }
* * * *else if (herolvl > 16) *{ BeliarWeapNextLvL = 5; *BeliarNextDamageChance = BeliarDamageChance_05; }
* * * *else if (herolvl > 14) *{ BeliarWeapNextLvL = 4; *BeliarNextDamageChance = BeliarDamageChance_04; }
* * * *else if (herolvl > 12) *{ BeliarWeapNextLvL = 3; *BeliarNextDamageChance = BeliarDamageChance_03; }
* * * *else if (herolvl > 10) *{ BeliarWeapNextLvL = 2; *BeliarNextDamageChance = BeliarDamageChance_02; }
* * * *else if (herolvl <= 10) { BeliarWeapNextLvL = 1; *BeliarNextDamageChance = BeliarDamageChance_01; };
* *};
* *// если текущий уровень оружия < найденного
* *if(BeliarWeapCurrentLvL < BeliarWeapNextLvL)
* *{
* * * *return TRUE;
* *};
* *return FALSE; * * * // Примечание: добавлено мной
};

// Функция улучшения оружия Белиара
func void B_UpgrateBeliarsWeapon()
{
* *var int BeliarsTribute;
* *var string concatText;
* *// расчет кол-ва отбираемой жизни
* *BeliarsTribute = ((BeliarWeapNextLvL - BeliarWeapCurrentLvL) * 5);
* *// уменьших макс. жизнь ГГ
* *hero.attribute[ATR_HITPOINTS_MAX] = (hero.attribute[ATR_HITPOINTS_MAX] - BeliarsTribute);
* *// если жизнь уменьшена
* *if(BeliarsTribute > 0)
* *{
* * * *// создать строку "Жизненная энергия -" кол-во едениц жизни
* * * *concatText = ConcatStrings(PRINT_Beliarshitpoints_MAX,IntToStri ng(BeliarsTribute));
* * * *// вывод на экран
* * * *PrintScreen(concatText,-1,-1,FONT_Screen,4);
* *};
* *// установить текущие шанс доп. повреждения и уровень оружия
* *BeliarDamageChance = BeliarNextDamageChance;
* *BeliarWeapCurrentLvL = BeliarWeapNextLvL;
* *// если ГГ маг Огня
* *if(hero.guild == GIL_KDF)
* *{
* * * *// очистить диалог улучшения рун
* * * *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
* * * *// создать диалог улучшения рун (записать пункты выбора в зависимости от текущего уровня оружия)
* * * *if(BeliarWeapCurrentLvL >= 1) *
* * * *{
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_GreenTentacle,PС_Pra
yShrine_UPGRATEBELIARSWEAPON_GreenTentacle);
* * * *};
* * * *if(BeliarWeapCurrentLvL >= 2)
* * * *{
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_SuckEnergy,PC_P
rayShrine_UPGRATEBELIARSWEAPON_SuckEnergy);
* * * * * *
* * * *};
* * * *if(BeliarWeapCurrentLvL >= 3)
* * * *{
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_SummonGuardian,
PC_PrayShrine_UPGRATEBELIARSWEAPON_NAME_SPL_Summon Guardian);
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_BeliarsRage,PC_
PrayShrine_UPGRATEBELIARSWEAPON_BeliarsRage);
* * * *};
* * * *if(BeliarWeapCurrentLvL >= 4)
* * * *{
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_Swarm,PC_PraySh
rine_UPGRATEBELIARSWEAPON_Swarm);
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_summonZombie,PC
_PrayShrine_UPGRATEBELIARSWEAPON_summonZombie);
* * * *};
* * * *if(BeliarWeapCurrentLvL >= 5)
* * * *{
* * * * * *Info_AddChoice(PC_PrayShrine_UPGRATEBELIARSWEAPON ,NAME_SPL_Skull,PC_PraySh
rine_UPGRATEBELIARSWEAPON_SPL_Skull);
* * * *};
* *}
* *else
* *{
* * * *// если у ГГ более развит одноручник
* * * *if((hero.HitChance[NPC_TALENT_1H]) > (hero.HitChance[NPC_TALENT_2H]))
* * * *{
* * * * * *// создать в инвентаре ГГ одноручник в зависимости от текущего уровня оружия
* * * * * *if * * (BeliarWeapCurrentLvL <= 1) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_01); }
* * * * * *else if(BeliarWeapCurrentLvL == 2) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_02); }
* * * * * *else if(BeliarWeapCurrentLvL == 3) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_03); }
* * * * * *else if(BeliarWeapCurrentLvL == 4) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_04); }
* * * * * *else if(BeliarWeapCurrentLvL == 5) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_05); }
* * * * * *else if(BeliarWeapCurrentLvL == 6) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_06); }
* * * * * *else if(BeliarWeapCurrentLvL == 7) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_07); }
* * * * * *else if(BeliarWeapCurrentLvL == 8) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_08); }
* * * * * *else if(BeliarWeapCurrentLvL == 9) *{ CreateInvItem(hero,ItMw_BeliarWeapon_1H_09); }
* * * * * *else if(BeliarWeapCurrentLvL == 10) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_10); }
* * * * * *else if(BeliarWeapCurrentLvL == 11) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_11); }
* * * * * *else if(BeliarWeapCurrentLvL == 12) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_12); }
* * * * * *else if(BeliarWeapCurrentLvL == 13) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_13); }
* * * * * *else if(BeliarWeapCurrentLvL == 14) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_14); }
* * * * * *else if(BeliarWeapCurrentLvL == 15) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_15); }
* * * * * *else if(BeliarWeapCurrentLvL == 16) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_16); }
* * * * * *else if(BeliarWeapCurrentLvL == 17) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_17); }
* * * * * *else if(BeliarWeapCurrentLvL == 18) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_18); }
* * * * * *else if(BeliarWeapCurrentLvL == 19) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_19); }
* * * * * *else if(BeliarWeapCurrentLvL == 20) { CreateInvItem(hero,ItMw_BeliarWeapon_1H_20); };
* * * * * *// визуальный эффект улучшения меча (Примечание: правильнее здесь и далее все self заменить на hero)
* * * * * *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* * * * * *// музычка
* * * * * *Snd_Play("CS_Prayer_WaveOfInsanity");
* * * * * *// оружие улучшено
* * * * * *BeliarsWeaponUpgrated = TRUE;
* * * *}
* * * *else // иначе двуручник
* * * *{
* * * * * *// создать в инвентаре ГГ двуручник в зависимости от текущего уровня оружия
* * * * * *if * * (BeliarWeapCurrentLvL <= 1) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_01); }
* * * * * *else if(BeliarWeapCurrentLvL == 2) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_02); }
* * * * * *else if(BeliarWeapCurrentLvL == 3) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_03); }
* * * * * *else if(BeliarWeapCurrentLvL == 4) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_04); }
* * * * * *else if(BeliarWeapCurrentLvL == 5) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_05); }
* * * * * *else if(BeliarWeapCurrentLvL == 6) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_06); }
* * * * * *else if(BeliarWeapCurrentLvL == 7) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_07); }
* * * * * *else if(BeliarWeapCurrentLvL == 8) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_08); }
* * * * * *else if(BeliarWeapCurrentLvL == 9) *{ CreateInvItem(hero,ItMw_BeliarWeapon_2H_09); }
* * * * * *else if(BeliarWeapCurrentLvL == 10) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_10); }
* * * * * *else if(BeliarWeapCurrentLvL == 11) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_11); }
* * * * * *else if(BeliarWeapCurrentLvL == 12) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_12); }
* * * * * *else if(BeliarWeapCurrentLvL == 13) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_13); }
* * * * * *else if(BeliarWeapCurrentLvL == 14) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_14); }
* * * * * *else if(BeliarWeapCurrentLvL == 15) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_15); }
* * * * * *else if(BeliarWeapCurrentLvL == 16) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_16); }
* * * * * *else if(BeliarWeapCurrentLvL == 17) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_17); }
* * * * * *else if(BeliarWeapCurrentLvL == 18) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_18); }
* * * * * *else if(BeliarWeapCurrentLvL == 19) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_19); }
* * * * * *else if(BeliarWeapCurrentLvL == 20) { CreateInvItem(hero,ItMw_BeliarWeapon_2H_20); };
* * * * * *// визуальный эффект улучшения меча
* * * * * *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE); * * *
* * * * * *// музычка
* * * * * *Snd_Play("CS_Prayer_WaveOfInsanity");
* * * * * *// оружие улучшено
* * * * * *BeliarsWeaponUpgrated = TRUE;
* * * *};
* *};
};

...продолжение следует
Ответить с цитированием
Старый 15.07.2005, 15:05   #220
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

// Создать руну Зеленые щупальца (для остальных рун аналогично)
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_GreenTentacle()
{
* *// создать в инвентаре ГГ
* *CreateInvItem(hero,ItRu_GreenTentacle);
* *// визуальный эффект
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *// вывод текста "Белиар дарит тебе другое заклинание"
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2);
* *// музычка
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *// оружие улучшено
* *BeliarsWeaponUpgrated = TRUE;
* *// удвалить этот пункт выбора меню
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Украсть энергию
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_SuckEnergy ()
{
* *CreateInvItem(hero,ItRu_SuckEnergy);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2); * * *
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Создать стража
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_NAME_SPL_Summon Guardian()
{
* *CreateInvItem(hero,ItRu_SummonGuardian);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2); * * *
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Ярость Белиара
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_BeliarsRage()
{
* *CreateInvItem(hero,ItRu_BeliarsRage);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE); *
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2);
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Рой
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_Swarm()
{
* *CreateInvItem(hero,ItRu_Swarm);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2);
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Создать зомби
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_summonZombie()
{
* *CreateInvItem(hero,ItRu_SummonZombie);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2);
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};

// Создать руну Крик мертвых
func void PC_PrayShrine_UPGRATEBELIARSWEAPON_SPL_Skull()
{
* *CreateInvItem(hero,ItRu_Skull);
* *Wld_PlayEffect("spellFX_BeliarsWeapon_Upgrate",se lf,self,0,0,0,F
ALSE);
* *PrintScreen(PRINT_Addon_RuneGiven,-1,45,FONT_ScreenSmall,2);
* *Snd_Play("CS_Prayer_WaveOfInsanity");
* *BeliarsWeaponUpgrated = TRUE;
* *Info_ClearChoices(PC_PrayShrine_UPGRATEBELIARSWEA PON);
};


* *19. Функции, связанные с одержимостью ГГ.

Файл B_ScObsession.d

var int SC_IsObsessed; * * * * *// ГГ страдает одержимостью (TRUE)
var int SC_ObsessionCounter; * *// счетчик кол-ва проклятий ГГ

// Устранить состояние одержимости НПС
// ----------------------------------------------------------------
// Аргумент: heiler - НПС
func void B_ClearSCObsession(var C_NPC heiler) *
{
* *// если НПС не ГГ
* *if(Hlp_GetInstanceID(heiler) != Hlp_GetInstanceID(hero))
* *{
* * * *// закончить диалог
* * * *AI_StopProcessInfos(heiler);
* *};
* *// одержимость снята
* *SC_IsObsessed = FALSE;
* *// сброс счетчика проклятий
* *SC_ObsessionCounter = 0;
* *// вывод текста "Ты чувствуешь себя освобожденным!"
* *PrintScreen(PRINT_ClearSCObsession,-1,-1,FONT_Screen,3);
};

// Установить состояние одержимости НПС
// ----------------------------------------------------------------
// Аргумент: dementor - НПС
func void B_SCIsObsessed(var C_NPC dementor) * *
{
* *// если НПС не ГГ
* *if(Hlp_GetInstanceID(dementor) != Hlp_GetInstanceID(hero))
* *{
* * * *// закончить диалог
* * * *AI_StopProcessInfos(dementor);
* *};
* *// если ГГ не имеет амулета Зов Души
* *if(Npc_HasItems(hero,ItAm_Prot_BlackEye_Mis) == FALSE)
* *{
* * * *// если счетчик проклятий >= 2
* * * *if(SC_ObsessionCounter >= 2)
* * * *{
* * * * * *// установить одержимость
* * * * * *SC_IsObsessed = TRUE;
* * * * * *// вывод текста "Чувство одержимости преследует тебя!"
* * * * * *PrintScreen(PRINT_SCIsObsessed,-1,-1,FONT_Screen,2);
* * * *};
* * * *// счетчик проклятий ++
* * * *SC_ObsessionCounter = SC_ObsessionCounter + 1;
* *};
};


* *20. Функции кладоискателя.

Файл B_ScUsesRake.d

var int RAKEPLACE[50]; * * * * * * * * *// массив флагов клад выкопан (TRUE)
const int Greg_FirstSecret *= 1; * * * *// индекс первого клада
const int RAKE_BUDDEL_DIST_MAX = 300; * // (не используется)
const int RAKE_BUDDEL_DIST_MIN = 200; * // макс. расстояние до клада, на каком можно копать

// ГГ нашел закопанное сокровище
// ----------------------------------------------------------------
// Аргумент: itm - найденный предмет
func void RakeTreasureSuccess(var C_ITEM itm)
{
* *// визуальный эффект на предмете
* *Wld_PlayEffect("spellFX_ItemAusbuddeln",itm,itm,0 ,0,0,FALSE);
* *// ГГ говорит сам себе (SVM фраза) "нашел сокровища"
* *B_Say_Overlay(self,self,"$FOUNDTREASURE");
* *// получить экспу (50 * номер Главы)
* *B_GivePlayerXP(XP_Ambient);
};

// Не используется, можно удалить
func void B_SCUsesRake(var C_NPC slf)
{
};

// Добыть сокровище
// ----------------------------------------------------------------
// Данная функция повешена в Спейсере на объект oCMobInter и вызывается после ударов ГГ киркой по красному кресту
func void B_SCGetTreasure_S1()
{
* *// клад выкопал ГГ
* *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(hero))
* *{
* * * *// если ГГ находится не далее 2м от нужной точки и клад в данной точке не выкопан
* * * *if((Npc_GetDistToWP(hero,"NW_BIGFARM_LAKE_CAVE_07 ") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[Greg_FirstSecret] == FALSE))
* * * *{
* * * * * *// выкопать предмет
* * * * * *Wld_InsertItem(ItSe_GoldPocket25,"NW_BIGFARM_LAKE _CAVE_07");
* * * * * *// установить флаг клад выкопан
* * * * * *RAKEPLACE[Greg_FirstSecret] = TRUE;
* * * * * *// получить экспу
* * * * * *RakeTreasureSuccess(ItSe_GoldPocket25);
* * * * * *var C_ITEM GregsArmor;
* * * * * *// получить ссылку на одежду Грега
* * * * * *GregsArmor = Npc_GetEquippedArmor(Greg_NW);
* * * * * *// если это не "Одежда капитана"
* * * * * *if(Hlp_IsItem(GregsArmor,ITAR_PIR_H_Addon) == FALSE)
* * * * * *{
* * * * * * * *// экипировать Грега Одеждой капитана
* * * * * * * *AI_EquipArmor(Greg_NW,ITAR_PIR_H_Addon); * *
* * * * * *};
* * * *}
* * * *// если ГГ находится не далее 2м от нужной точки и клад в данной точке не выкопан
* * * *else if((Npc_GetDistToWP(hero,"NW_LAKE_GREG_TREASURE_01 ") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[2] == FALSE))
* * * *{
* * * * * *// выкопать предмет
* * * * * *Wld_InsertItem(ItSe_GoldPocket100,"NW_LAKE_GREG_T REASURE_01");
* * * * * *// установить флаг клад выкопан
* * * * * *RAKEPLACE[2] = TRUE;
* * * * * *// получить экспу
* * * * * *RakeTreasureSuccess(ItSe_GoldPocket100);
* * * *}
* * * *// для всех остальных кладов аналогично
* * * *else if((Npc_GetDistToWP(hero,"NW_FARM3_GREGTREASURE_01 ") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[3] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_GoldCup,"NW_FARM3_GREGTREASUR E_01");
* * * * * *RAKEPLACE[3] = TRUE;
* * * * * *RakeTreasureSuccess(ItMi_GoldCup);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"NW_FARM3_MOUNTAINLAKE_MO NSTER_01") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[4] == FALSE))
* * * *{ *
* * * * * *Wld_InsertItem(ItMi_SilverChalice,"NW_FARM3_MOUNT AINLAKE_MONSTER_01");
* * * * * *RAKEPLACE[4] = TRUE;
* * * * * *RakeTreasureSuccess(ItMi_SilverChalice);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"NW_BIGMILL_FARM3_01") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[5] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItAm_Prot_Point_01,"NW_BIGMILL_FAR M3_01");
* * * * * *RAKEPLACE[5] = TRUE;
* * * * * *RakeTreasureSuccess(ItAm_Prot_Point_01);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_ENTRANCE_RAKEPLACE_0 1") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[12] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItWr_StonePlateCommon_Addon,"ADW_E NTRANCE_RAKEPLACE_01");
* * * * * *RAKEPLACE[12] = TRUE;
* * * * * *Wld_InsertItem(ItMi_SilverChalice,"ADW_ENTRANCE_R AKEPLACE_01");
* * * * * *RakeTreasureSuccess(ItMi_SilverChalice);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_ENTRANCE_RAKEPLACE_0 2") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[13] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItWr_DexStonePlate1_Addon,"ADW_ENT RANCE_RAKEPLACE_02");
* * * * * *RAKEPLACE[13] = TRUE;
* * * * * *Wld_InsertItem(ItMi_GoldCup,"ADW_ENTRANCE_RAKEPLA CE_02"); * * * * * * * * * * * * * * * * * * * *
* * * * * *RakeTreasureSuccess(ItMi_GoldCup);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_ENTRANCE_RAKEPLACE_0 3") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[14] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItPo_Perm_Health,"ADW_ENTRANCE_RAK EPLACE_03");
* * * * * *RAKEPLACE[14] = TRUE;
* * * * * *Wld_InsertItem(ItSe_GoldPocket100,"ADW_ENTRANCE_R AKEPLACE_03"); * * * * * * * * * * * * * * * * * * * *
* * * * * *RakeTreasureSuccess(ItSe_GoldPocket100);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_ENTRANCE_RAKEPLACE_0 4") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[15] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_SilverRing,"ADW_ENTRANCE_RAKE PLACE_04");
* * * * * *RAKEPLACE[15] = TRUE;
* * * * * *Wld_InsertItem(ItMw_Schwert4,"ADW_ENTRANCE_RAKEPL ACE_04");
* * * * * *RakeTreasureSuccess(ItMw_Schwert4);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_VALLEY_GREGTREASURE_ 01") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[16] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSe_GoldPocket100,"ADW_VALLEY_GRE GTREASURE_01");
* * * * * *RAKEPLACE[16] = TRUE;
* * * * * *Wld_InsertItem(ItPo_Health_02,"ADW_VALLEY_GREGTRE ASURE_01");
* * * * * *Wld_InsertItem(ItPo_Mana_03,"ADW_VALLEY_GREGTREAS URE_01");
* * * * * *RakeTreasureSuccess(ItPo_Mana_03);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_VALLEY_RAKEPLACE_01" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[17] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItPo_Mana_Addon_04,"ADW_VALLEY_RAK EPLACE_01");
* * * * * *RAKEPLACE[17] = TRUE;
* * * * * *Wld_InsertItem(ItPo_Speed,"ADW_VALLEY_RAKEPLACE_0 1");
* * * * * *Wld_InsertItem(ItPo_Mana_02,"ADW_VALLEY_RAKEPLACE _01");
* * * * * *RakeTreasureSuccess(ItPo_Mana_02);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_VALLEY_RAKEPLACE_02" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[18] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItPo_Health_Addon_04,"ADW_VALLEY_R AKEPLACE_02");
* * * * * *RAKEPLACE[18] = TRUE;
* * * * * *Wld_InsertItem(ItWr_StonePlateCommon_Addon,"ADW_V ALLEY_RAKEPLACE_02");
* * * * * *Wld_InsertItem(ItSe_LockpickFisch,"ADW_VALLEY_RAK EPLACE_02");
* * * * * *RakeTreasureSuccess(ItSe_LockpickFisch);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_VALLEY_RAKEPLACE_03" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[19] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSc_Firerain,"ADW_VALLEY_RAKEPLAC E_03");
* * * * * *RAKEPLACE[19] = TRUE;
* * * * * *Wld_InsertItem(ItSe_GoldPocket50,"ADW_VALLEY_RAKE PLACE_03");
* * * * * *Wld_InsertItem(ItWr_StonePlateCommon_Addon,"ADW_V ALLEY_RAKEPLACE_03");
* * * * * *RakeTreasureSuccess(ItSe_GoldPocket50);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_BANDITSCAMP_RAKEPLAC E_01") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[20] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_Honigtabak,"ADW_BANDITSCAMP_R AKEPLACE_01");
* * * * * *RAKEPLACE[20] = TRUE;
* * * * * *Wld_InsertItem(ItWr_StonePlateCommon_Addon,"ADW_B ANDITSCAMP_RAKEPLACE_01");
* * * * * *Wld_InsertItem(ItAm_Addon_MANA,"ADW_BANDITSCAMP_R AKEPLACE_01");
* * * * * *RakeTreasureSuccess(ItAm_Addon_MANA);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_BANDITSCAMP_RAKEPLAC E_02") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[21] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSc_SumGobSkel,"ADW_BANDITSCAMP_R AKEPLACE_02");
* * * * * *RAKEPLACE[21] = TRUE;
* * * * * *Wld_InsertItem(ItPo_Mana_03,"ADW_BANDITSCAMP_RAKE PLACE_02");
* * * * * *RakeTreasureSuccess(ItPo_Mana_03);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_BANDITSCAMP_RAKEPLAC E_03") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[22] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSc_TrfShadowbeast,"ADW_BANDITSCA MP_RAKEPLACE_03");
* * * * * *RAKEPLACE[22] = TRUE;
* * * * * *Wld_InsertItem(ItSc_LightHeal,"ADW_BANDITSCAMP_RA KEPLACE_03");
* * * * * *RakeTreasureSuccess(ItSc_LightHeal);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_BANDITSCAMP_RAKEPLAC E_04") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[23] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItWr_StonePlateCommon_Addon,"ADW_B ANDITSCAMP_RAKEPLACE_04");
* * * * * *RAKEPLACE[23] = TRUE;
* * * * * *Wld_InsertItem(ItRi_HP_01,"ADW_BANDITSCAMP_RAKEPL ACE_04");
* * * * * *RakeTreasureSuccess(ItRi_HP_01);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_MINE1_11") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[24] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSE_Addon_FrancisChest,"ADW_CANYO N_MINE1_11");
* * * * * *RAKEPLACE[24] = TRUE;
* * * * * *RakeTreasureSuccess(ItSE_Addon_FrancisChest);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_RAKEPLACE_01" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[25] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_RuneBlank,"ADW_CANYON_RAKEPLA CE_01");
* * * * * *RAKEPLACE[25] = TRUE;
* * * * * *Wld_InsertItem(ItSe_GoldPocket25,"ADW_CANYON_RAKE PLACE_01");
* * * * * *RakeTreasureSuccess(ItSe_GoldPocket25);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_RAKEPLACE_02" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[26] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_Nugget,"ADW_CANYON_RAKEPLACE_ 02");
* * * * * *RAKEPLACE[26] = TRUE;
* * * * * *Wld_InsertItem(ItSc_LightningFlash,"ADW_CANYON_RA KEPLACE_02");
* * * * * *Wld_InsertItem(ItSc_ChargeFireBall,"ADW_CANYON_RA KEPLACE_02");
* * * * * *RakeTreasureSuccess(ItSc_ChargeFireBall);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_RAKEPLACE_03" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[27] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItSe_GoldPocket25,"ADW_CANYON_RAKE PLACE_03");
* * * * * *RAKEPLACE[27] = TRUE;
* * * * * *Wld_InsertItem(ItWr_ManaStonePlate1_Addon,"ADW_CA NYON_RAKEPLACE_03");
* * * * * *Wld_InsertItem(ItMi_Pitch,"ADW_CANYON_RAKEPLACE_0 3");
* * * * * *RakeTreasureSuccess(ItMi_Pitch);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_RAKEPLACE_04" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[28] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_SilverRing,"ADW_CANYON_RAKEPL ACE_04");
* * * * * *RAKEPLACE[28] = TRUE;
* * * * * *Wld_InsertItem(ItMi_Sulfur,"ADW_CANYON_RAKEPLACE_ 04");
* * * * * *Wld_InsertItem(ItWr_TwoHStonePlate1_Addon,"ADW_CA NYON_RAKEPLACE_04");
* * * * * *RakeTreasureSuccess(ItWr_TwoHStonePlate1_Addon);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_CANYON_RAKEPLACE_05" ) < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[29] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMi_GoldRing,"ADW_CANYON_RAKEPLAC E_05");
* * * * * *RAKEPLACE[29] = TRUE;
* * * * * *Wld_InsertItem(ItAt_DragonBlood,"ADW_CANYON_RAKEP LACE_05");
* * * * * *RakeTreasureSuccess(ItAt_DragonBlood);
* * * *}
* * * *else if((Npc_GetDistToWP(hero,"ADW_PIRATECAMP_GREGTREAS URE_KOMPASS") < RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[30] == FALSE))
* * * *{
* * * * * *Wld_InsertItem(ItMI_Addon_Kompass_Mis,"ADW_PIRATE CAMP_GREGTREASURE_KOMPASS");
* * * * * *RAKEPLACE[30] = TRUE;
* * * * * *RakeTreasureSuccess(ItMI_Addon_Kompass_Mis);
* * * *};
* *}; *
};


* *21. Увеличить нывык по добыче золота.

Файл B_Upgrade_Hero_Hack.d

// ************************************************** **************
// Увеличить нывык по добыче золота
// ************************************************** **************
// Аргумент: Wert - пункты увеличения навыка
func void B_Upgrade_Hero_HackChance(var int Wert)
{
* *var string concatText;
* *// "Повысил знание о добыче золота (+ " *+ Wert
* *concatText = ConcatStrings(PRINT_ADDON_HACKCHANCE,IntToString(W ert));
* *// текст += ")"
* *concatText = ConcatStrings(concatText,")");
* *PrintScreen(concatText,-1,34,FONT_ScreenSmall,2);
* *// увеличить навык по добыче золота
* *Hero_HackChance = (Hero_HackChance + Wert);
* *// музычка
* *Snd_Play("Geldbeutel");
};


* *22. Известен ли один из шнапсов?

Файл B_Addon_Knows_Schnaps.d

// ************************************************** **************
// Известен ли один из шнапсов?
// ************************************************** **************
// Возвращаемое значение: TRUE - да, FALSE - нет
// Примечание: данная функция не используется, можно удалить
func int C_Addon_Knows_Schnaps()
{
* *
* *if (Knows_LousHammer == TRUE)
* *¦¦ (Knows_RuebenSchnaps == TRUE)
* *¦¦ (Knows_VinoSchnaps == TRUE) * * *
* *¦¦ (Knows_PiratenSchnaps == TRUE)
* *¦¦ (Knows_Magierschnaps == TRUE)
* *¦¦ (Knows_Sumpfkrautschnaps == TRUE)
* *{
* * * *return TRUE;
* *}
* *return FALSE;
};


* *23. Функции получения бонусов артефактных предметов.

Файл C_ArtefactValues.d

// Данные функции возвращают бонус одетых предметов в зависимости от одетого набора:
// Амулет, Амулет + Кольцо, два Кольца, Амулет + два Кольца

// Получить бонус к жизни
// ----------------------------------------------------------------
// Возвращаемое значение: бонус
func int C_HP_ArtefaktValue()
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *var int HP_Artefakt_Value;
* *// бонус = 0
* *HP_Artefakt_Value = 0;
* *// если одет амулет
* *if(HP_Amulett_Equipped == TRUE) * * * *
* *{
* * * *// если одето одно кольцо
* * * *if(HP_Ring_1_Equipped == TRUE) * * * * *
* * * *{
* * * * * *// если одето второе кольцо
* * * * * *if(HP_Ring_2_Equipped == TRUE)
* * * * * *{
* * * * * * * *// если визуальных эффектов не было
* * * * * * * *if(HP_Artefakt_Effekt == FALSE)
* * * * * * * *{
* * * * * * * * * *// выдать эффект
* * * * * * * * * *Wld_PlayEffect("SPELLFX_LIGHTSTAR_WHITE",self,sel f,0,0,0,FALSE);
* * * * * * * * * *// музычка
* * * * * * * * * *Snd_Play("MFX_LIGHT_CAST");
* * * * * * * * * *// установить флаг одноразовости эффекта
* * * * * * * * * *HP_Artefakt_Effekt = TRUE;
* * * * * * * *};
* * * * * * * *// задать бонус = 250
* * * * * * * *HP_Artefakt_Value = HP_Amulett_Artefakt_Bonus;
* * * * * *}
* * * * * *else // амулет + кольцо
* * * * * *{
* * * * * * * *// задать бонус = 150
* * * * * * * *HP_Artefakt_Value = HP_Amulett_EinRing_Bonus;
* * * * * *};
* * * *}
* * * *// если одето второе кольцо
* * * *else if(HP_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *// задать бонус = 150
* * * * * *HP_Artefakt_Value = HP_Amulett_EinRing_Bonus;
* * * *}
* * * *else // амулет
* * * *{
* * * * * *// задать бонус = 50
* * * * * *HP_Artefakt_Value = HP_Amulett_Solo_Bonus;
* * * *};
* *}
* *// если одето одно кольцо
* *else if(HP_Ring_1_Equipped == TRUE)
* *{
* * * *// если одето второе кольцо
* * * *if (HP_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *// задать бонус = 100
* * * * * *HP_Artefakt_Value = HP_Ring_Double_Bonus;
* * * *}
* * * *else // кольцо
* * * *{
* * * * * *// задать бонус = 30
* * * * * *HP_Artefakt_Value = HP_Ring_Solo_Bonus;
* * * *};
* *}
* *// если одето второе кольцо
* *else if(HP_Ring_2_Equipped == TRUE)
* *{
* * * *// задать бонус = 30
* * * *HP_Artefakt_Value = HP_Ring_Solo_Bonus;
* *};
* *return HP_Artefakt_Value;
};

// Получить бонус к магии (аналогично предыдущей)
// ----------------------------------------------------------------
// Возвращаемое значение: бонус
func int C_MA_ArtefaktValue()
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *var int MA_Artefakt_Value; * * * * * * * * * * * * * * *
* *MA_Artefakt_Value = 0; * * * * * * * * * * * * * * * * *
* *if(MA_Amulett_Equipped == TRUE) * * * *
* *{ * * * * * * * * * * * * * * * * * * *
* * * *if(MA_Ring_1_Equipped == TRUE) * * * * *
* * * *{
* * * * * *if(MA_Ring_2_Equipped == TRUE)
* * * * * *{
* * * * * * * *if(MA_Artefakt_Effekt == FALSE)
* * * * * * * *{
* * * * * * * * * *Wld_PlayEffect("SPELLFX_LIGHTSTAR_WHITE",self,sel f,0,0,0,FALSE);
* * * * * * * * * *Snd_Play("MFX_LIGHT_CAST");
* * * * * * * * * *MA_Artefakt_Effekt = TRUE;
* * * * * * * *};
* * * * * * * *MA_Artefakt_Value = MA_Amulett_Artefakt_Bonus;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *MA_Artefakt_Value = MA_Amulett_EinRing_Bonus;
* * * * * *};
* * * *}
* * * *else if(MA_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *MA_Artefakt_Value = MA_Amulett_EinRing_Bonus;
* * * *}
* * * *else
* * * *{
* * * * * *MA_Artefakt_Value = MA_Amulett_Solo_Bonus;
* * * *};
* *}
* *else if(MA_Ring_1_Equipped == TRUE)
* *{
* * * *if(MA_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *MA_Artefakt_Value = MA_Ring_Double_Bonus;
* * * *}
* * * *else
* * * *{
* * * * * *MA_Artefakt_Value = MA_Ring_Solo_Bonus;
* * * *};
* *}
* *else if(MA_Ring_2_Equipped == TRUE)
* *{
* * * *MA_Artefakt_Value = MA_Ring_Solo_Bonus;
* *};
* *return MA_Artefakt_Value;
};

// Получить бонус к сиде (аналогично предыдущей)
// ----------------------------------------------------------------
// Возвращаемое значение: бонус
func int C_STR_ArtefaktValue()
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *var int STR_Artefakt_Value; * * * * * * * * * * * * * * * *
* *STR_Artefakt_Value = 0; * * * * * * * * * * * * * * * * * *
* *if(STR_Amulett_Equipped == TRUE) * * * *
* *{ * * * * * * * * * * * * * * * * * * *
* * * *if(STR_Ring_1_Equipped == TRUE) * * * *
* * * *{
* * * * * *if(STR_Ring_2_Equipped == TRUE)
* * * * * *{
* * * * * * * *if(STR_Artefakt_Effekt == FALSE)
* * * * * * * *{
* * * * * * * * * *Wld_PlayEffect("SPELLFX_LIGHTSTAR_WHITE",self,sel f,0,0,0,FALSE);
* * * * * * * * * *Snd_Play("MFX_LIGHT_CAST");
* * * * * * * * * *STR_Artefakt_Effekt = TRUE;
* * * * * * * *};
* * * * * * * *STR_Artefakt_Value = STR_Amulett_Artefakt_Bonus;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *STR_Artefakt_Value = STR_Amulett_EinRing_Bonus;
* * * * * *};
* * * *}
* * * *else if(STR_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *STR_Artefakt_Value = STR_Amulett_EinRing_Bonus;
* * * *}
* * * *else
* * * *{
* * * * * *STR_Artefakt_Value = STR_Amulett_Solo_Bonus;
* * * *};
* *}
* *else if(STR_Ring_1_Equipped == TRUE)
* *{
* * * *if(STR_Ring_2_Equipped == TRUE)
* * * *{
* * * * * *STR_Artefakt_Value = STR_Ring_Double_Bonus;
* * * *}
* * * *else
* * * *{
* * * * * *STR_Artefakt_Value = STR_Ring_Solo_Bonus;
* * * *};
* *}
* *else if(STR_Ring_2_Equipped == TRUE)
* *{
* * * *STR_Artefakt_Value = STR_Ring_Solo_Bonus;
* *};
* *return STR_Artefakt_Value;
};

Ответить с цитированием
Старый 04.08.2005, 09:29   #221
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Killer-XXX:
Ты ничем тут помочь не сможешь?
PFX систему подробно не изучал, могу предложить только ссылку, но нужен товарищ со знанием немецкого языка, чтобы перевести это. Других описаний не встречал, если у кого есть более полная информация, можете сообщить. Пока всё.
Ответить с цитированием
Старый 05.08.2005, 17:15   #222
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

PFX система (Эффекты излучаемых частиц).

1. Вступление.

Эффекты излучаемых частиц (ParticleFX), далее PFX, которые может производить система Готики, задаются набором параметров. Определение эффектов и их параметров выполняется в Daedalus скриптах. Рассмотрим эти файлы:
_WORK\DATA\SCRIPTS\SYSTEM\ParticleFX.src – исходный файл для компиляции всех файлов PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\ParticleFX.d – декларация класса C_PARTICLEFX.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInst.d – содержит определения общих инстанций PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstMagic.d - содержит определения инстанций магических заклинаний *PFX системы.
_WORK\DATA\SCRIPTS\SYSTEM\_INTERN\PfxInstEngine.d - содержит определения инстанций ядра PFX системы. Они не должны изменяться!
PFX эффекты могут вызываться также из .MDS файлов и синхронизироваться с анимациями. Смотри для этого соответствующую документацию.
Что можно сказать про быстродействие, то оно прямо зависит от произведённого кол-ва частиц и удаления их от камеры. Чем больше эти параметры, тем ниже быстродействие, причем оно в большей степени зависит от удаленности частиц от камеры.
Активизация следующих особенностей PFX эффектов значительно уменьшает быстродействие:
- Столкновения частиц
- Пометки поверхности
- Остаточный след

2. Параметры PFX эффектов.

* * *Параметры как правило редактируются Спейсером, но могут также изменяться в файлах скриптов. В этой статье рассматриваются более 40 параметров PFX эффектов. Имена параметров, их типы, задаваемые значения и примеры значений для каждой группы параметров сведены в таблицу. Параметры, имена которых оканчиваются на _S, являются строковыми переменными и инициализируются одним или несколькими значениями, заключенными в кавычки и разделёнными пробелом. Если кол-во значений ошибочно, то берутся значения, стоящие в списке первыми, также допустимо не инициализировать строковую переменную.
* * *Значение BOOL указывает, что параметр может принимать значение истина (1 или TRUE) или ложь (0 или FALSE). Значение VEC указывает, что параметр является вектором размерности n из реальных чисел. Значение ANGLE указывает, что параметр является углом и его значение задается в градусах. Значение FOR указывает ссылку на систему отсчета, действительными системами отсчета являются World (мир) и Object (объект), причем PFX эффекты для объекта значительно снижают быстродействие и должны использоваться только в том случае, если это действительно необходимо.

2.1. Излучение - Временные параметры *


Тип * * * * *Параметр * * * * *Значение * *Пример
VAR FLOAT * *ppsValue; * * * * * * * * * * 64
VAR STRING * ppsScaleKeys_S; * * * * * * * "1 0.2 0 16 0.1"
VAR INT * * *ppsIsLooping; * * BOOL * * * *1
VAR INT * * *ppsIsSmooth; * * *BOOL * * * *0
VAR FLOAT * *ppsFPS; * * * * * * * * * * * 0.5
VAR STRING * ppsCreateEm_S; * * * * * * * *???
VAR FLOAT * *ppsCreateEmDelay; * * * * * * ???

   Pps в имени переменной означает кол-во частиц в секунду (particles per second). Эти параметры управляют временным поведением излучаемых частиц. Параметр ppsValue *определяет кол-во излучаемых частиц в секунду. Периоды времени излучения задаются параметром ppsScaleKeys_S. Если ScaleKeys задан, то будет воспроизведен список этих ключей с определенной скоростью (ppsFPS), причем будет выполнена интерполяция (сглаживание) между отдельными ключами, если ppsIsSmooth установлен. Если установлен параметр ppsIsLooping, список будет излучаться циклически, иначе список будет излучен один раз и эффект закончится как только исчезнут последние частицы. Фактически в секунду излучается кол-во частиц определенное формулой ppsValue * отдельное значение ppsScaleKeys. В примере в первую секунду будет выпущено 64 частицы, во вторую – 13 частиц, в третью – 0 и т.д. Если ScaleKeys не задан и параметр ppsIsLooping сброшен, то ppsValue определяет кол-во частиц, которые будут выпущены сразу в начале эффекта.
Описание параметров ppsCreateEm_S и ppsCreateEmDelay мне не известно.

Примеры:
Однократное излучение

PpsValue = 40;
PpsScaleKeys_S = " ";
PpsIsLooping = 0; *
PpsIsSmooth = 0; *
PpsFPS = 0; *

Постоянное излучение
PpsValue = 40; *
PpsScaleKeys_S = " "; *
PpsIsLooping = 1; *
PpsIsSmooth = 0; *
PpsFPS = 0; *

Излучение во временном периоде
PpsValue = 40; *
PpsScaleKeys_S = "1.0"; *
PpsIsLooping = 0; *
PpsIsSmooth = 0; *
PpsFPS = 5; *

Излучение порывами
PpsValue = 40; *
PpsScaleKeys_S = "1.0 0 0 0 1.0 1 6.0 0.2 0.5"; *
PpsIsLooping = 1; *
PpsIsSmooth = 1; *
PpsFPS ** * * = 0.8;

2.2. Излучение – Пространственное распределение

Тип * * * * *Параметр * * * * * * Значение * * * * * * * * * * * * * *Пример
VAR STRING * shpType_S; * * * * * "point,line,box,circle,sphere,mesh" mesh
VAR STRING * shpFOR_S; * * * * * *"world,object" * * * * * * * * * * *world
VAR STRING * shpOffsetVec_S; * * *VEC3 * * * * * * * * * * * * * * * *"0 1 0"
VAR STRING * shpDistribType_S; * *"RAND,UNIFORM,WALK" * * * * * * * * WALK
VAR FLOAT * *shpDistribWalkSpeed; * * * * * * * * * * * * * * * * * * 0.0001
VAR INT * * *shpIsVolume; * * * * BOOL * * *
VAR STRING * shpDim_S; * * * * * *VEC1/3 * * * * * * * * * * * * * * *"10", "23 32 20"
VAR STRING * snpMesh_S; * * * * * * * * * * * * * * * * * * * * * * * "cross.3ds"
VAR INT * * *shpMeshRender_B; * * BOOL * * *
VAR STRING * shpScaleKeys_S; * * * * * * * * * * * * * * * * * * * * *"[1.0] [0.8 0.9 0.2] [1.0]"
VAR INT * * *shpScaleIsLooping; * BOOL * * *
VAR INT * * *shpScaleIsSmooth; * *BOOL * * *
VAR FLOAT * *shpScaleFPS; * * * * * * * * * * * * * * * * * * * * * * 2

* * *Эти параметры определяют места, в которых создаются новые частицы. Для этой цели задаются параметры форм/поверхностей на которых создаются частицы. Устанавливаются также величины, локальные смещения и временное масштабирование излучающих форм.
* * *Параметр shpType_S задает тип излучающей поверхности, выбирается из списка. Если задан тип mesh, то параметром snpMesh_S определяется имя файла поверхности. Если установлен shpMeshRender_B, то производится рендеринг поверхности вместе с излучаемыми частицами. Тип point (излучение из точки) является самым быстрым типом.
* * *Параметр shpFOR_S определяет должно ли следовать излучение за поворотами поверхности (object – да, world – нет).
* * *Параметр shpOffsetVec_S задает вектор смещения локальной системы координат источника излучения.
* * *Параметр shpDistribType_S задает распределение излучаемых частиц по поверхности. RAND – случайное место излучения, UNIFORM – место выбирается упорядоченно и равномерно (работает только с типом line и circle), WALK - место выбирается упорядоченно и равномерно, но перемещается по поверхности(работает только с типом line и circle). Параметр shpDistribWalkSpeed задает скорость перемещения по поверхности источника излучения.
* * *Параметр shpIsVolume определяет где должны рождаться частицы, на краю поверхности – 0, на всей площади поверхности – 1.
* * *Параметр *shpDim_S задает размер излучаемой поверхности (кроме типа mesh) и является в зависимости от типа поверхности одномерным или трехмерным вектором (для line,circle,sphere – 1D, для box – 3D).
* * *Параметры shpScaleKeys_S, shpScaleIsLooping, shpScaleIsSmooth и shpScaleFPS определяют масштабирование поверхности во времени и по описанию идентичны соответствующим pps параметрам.

2.3. Частицы – Направление полета и скорость движения

Тип * * * *Параметр * * * * * *Значение * * * * * * * * * *Пример
VAR STRING dirMode_S; * * * * *"NONE,RAND,DIR,TARGET,MESH" mesh
VAR STRING dirFOR_S; * * * * * "world,object" * * * * * * *world
VAR STRING dirModeTargetFOR_S; "world,object" * * * * * * *world
VAR STRING dirModeTargetPos_S; VEC3 * * * * * * * * * * * *"30 23 67"
VAR FLOAT *dirAngleHead; * * * ANGLE [0..359] * * *
VAR FLOAT *dirAngleHeadVar; * *ANGLE [0..179] * * *
VAR FLOAT *dirAngleElev; * * * ANGLE [-90..+90] * * *
VAR FLOAT *dirAngleElevVar; * *ANGLE [-90..+90] * * *
VAR FLOAT *velAvg; * * * * * * CM/MSEC * * * * * * * * * * 0.3
VAR FLOAT *velVar; * * * * * * CM/MSEC * * * * * * * * * * 0.1

* * *Эти параметры определяют направление полета и скорость излучаемых частиц.
* * *Параметр dirMode_S задает направление полета частицы.
    NONE или RAND – случайное направление полета частиц, излучаются шарообразно относительно источника.
    DIR – направление полета частиц задается параметрами dirAngleHead и dirAngleElev, это углы соответственно направления движения и высоты подъема. Если заданы параметры dirAngleHeadVar и dirAngleElevVar, то выполняется дисперсия (изменение) заданных углов в пределах установленных величин. Замечание: по причине оптимизации углы движком точно не устанавливаются и можно получить непредсказуемое направление полета частиц, однако, юстировкой углов можно добиться приемлемого эффекта.
    TARGET – излучение частиц направлено на определенную цель. Координаты цели задаются параметром dirModeTargetPos_S, в зависимости от типа цели dirModeTargetFOR_S, координаты являются локальными (для object) или глобальными (для world).
    MESH – излучение с mesh поверхности, углы и дисперсии углов аналогичны значению DIR.
    Параметры velAvg и velVar задают соответственно среднюю скорость и дисперсию скорости полета частиц.
    Параметр dirFOR_S определяет к чему относится поверхность к объекту или миру.

2.4. Частицы – Время жизни

Тип * * * *Параметр * * *Значение * *Пример
VAR FLOAT *lspPartAvg; * MSEC * * * *700
VAR FLOAT *lspPartVar; * MSEC * * * *300

* * *Параметры lspPartAvg и lspPartVar задают соответственно среднее время и дисперсию времени жизни частиц.

2.5. Частицы – Летательные способности

Тип * * * * Параметр * * * Значение * * *Пример
VAR STRING *flyGravity_S; *VEC3 * * * * *0 -0.0001 0
VAR INT * * flyCollDet_B; *[0,1,2,3,4] * * *

* * *Параметр flyGravity_S задает вектор гравитации в относительной системе координат мира.
* * *Параметр flyCollDet_B определяет реакцию частиц при столкновении. Имеются следующие варианты: 0 – проверка на столкновение не проводится, 1 – тормозящее отражение, 2 – ускоряющее отражение, 3 – обнуление скорости частицы, 4 – удаление частицы. При включенном параметре уменьшается быстродействие.

2.6. Частицы – Визуализация

Тип * * * *Параметр * * * * * *Значение * * * * * * * * * Пример
VAR STRING visName_S; * * * * * * * * * * * * * * * * * * "NAME.TGA/.3DS"
VAR STRING visOrientation_S; * "NONE,VELO,VELO3D" * * * * VELO
VAR INT * *visTexIsQuadPoly; * BOOL * * *
VAR FLOAT *visTexAniFPS; * * * * * * * * * * * * * * * * *0.5
VAR INT * *visTexAniIsLooping; BOOL * * *
VAR STRING visTexColorStart_S; RGB [0..255,0..255,0..255] "155 91 25"
VAR STRING visTexColorEnd_S; * RGB [0..255,0..255,0..255] "155 91 25"
VAR STRING visSizeStart_S; * * VEC3 * * * * * * * * * * * "50 50"
VAR FLOAT *visSizeEndScale; * *[0..1..x] * * * * * * * * *2
VAR STRING visAlphaFunc_S; * * "NONE,BLEND,ADD,MUL" * * * BLEND
VAR FLOAT *visAlphaStart; * * *[0..255] * * * * * * * * * 255
VAR FLOAT *visAlphaEnd; * * * *[0..255] * * * * * * * * * 255

* * Параметр visName_S задает имя файла визуализации частиц. Могут использоваться как TGA так и 3DS файлы соответственно для изменения или анимации частиц.
* * Параметр visOrientation_S определяет с какой ориентацией будет производиться рендеринг частиц.
* * Параметр visTexIsQuadPoly определяет типы анимации визуализации текстуры (triMesh или quadMesh). Tri частицы являются более быстрыми в сравнении с Quad частицами.
* * Параметр visTexAniFPS задает скорость анимации частиц.
* * Параметр visTexAniIsLooping определяет, должна ли останавливаться анимация частиц на последнем фрейме.
* * Параметры «color, size, alpha» задают соответственно цвет, размер и альфа функцию частиц в начале жизни (start) и в конце жизни (end). В процессе жизни производится линейная интерполяция от начального до конечного значений.

2.7. Другие эффекты

Тип * * * * Параметр * * * * Значение * * * * * *Пример
VAR FLOAT * trlFadeSpeed; * *ALPHA/MSEC [0..x] * 0.4
VAR STRING *trlTexture_S; * * * * * * * * * * * *Trail.tga
VAR FLOAT * trlWidth; * * * *CM * * * * * * * * *5
VAR FLOAT * mrkFadeSpeed; * *ALPHA/MSEC [0..x] * 0.1
VAR STRING *mrkTexture_S; * * * * * * * * * * * *Mark.tga
VAR FLOAT * mrkSize; * * * * CM * * * * * * * * *50
VAR INT * * useEmittersFOR; *BOOL * * *
VAR STRING *timeStartEnd_S; * * * * * * * * * * *"11 16"
VAR INT * * m_bIsAmbientPFX; BOOL * * *

* * Параметры визуализации траектории частиц trlTexture_S, trlFadeSpeed и trlWidth задают соответственно файл текстуры следа траектории, скорость угасания следа и ширину следа от частиц.
* * Параметры следов столкновения с поверхностью mrkTexture_S, mrkFadeSpeed и mrkSize задают соответственно файл текстуры оставленного следа на поверхности, скорость угасания следа и размер следа от частиц. Следы имеют форму четырехсторонних полигонов.
* * Параметр useEmittersFOR включает вычисление положения каждой частицы в месте излучения внутри локального фрейма. В комбинации с flyCollDet_B значительно уменьшает быстродействие.
* * Параметр timeStartEnd_S задает временной промежуток, в котором PFX выполняется (в примере с 11 до 16 часов).
* * Параметр m_bIsAmbientPFX указывает, что этот PFX может быть окружающим, т.е. с его помощью строятся погодные эффекты и он может быть отключен через Gothic.ini (параметр [ENGINE]/noAmbientPFX).

® *vam

Ответить с цитированием
Старый 06.08.2005, 15:36   #223
WSA

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Скриптовая болванка 0,74 Мб.

Построена на немецких исходниках и некоторых акелловских d-файлах.
Удален почти весь Story и Items.
Рабочая под Готику 2, глюки пока не обнаружены.

На мой взгляд, болванка очень удобна для новичков, т.к. файлов меньше и скорость компиляции высокая. Вполне подойдет для тех, кто делает моды, а не аддоны.

---
Vam: Большое спасибо за PFX.
Ответить с цитированием
Старый 08.08.2005, 09:28   #224
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

11. Вспомогательные В_ функции квестов.

Директория размещения файлов функций - B_Story

* *1. Функция, устанавливающая уровень владения оружием.

Файл B_AddFightSkill.d

// ************************************************** **************
// Функция, устанавливающая уровень владения оружием
// ************************************************** **************
// Аргументы: slf - НПС, talent - тип оружия, percent - процент навыка владения
// ----------------------------------------------------------------
// ПРИМЕЧАНИЕ: Существует только три уровня владения оружием (0,1,2), определены движком.

func void B_AddFightSkill(var C_NPC slf,var int talent,var int percent)
{
* *// если оружие - одноручник
* *if(talent == NPC_TALENT_1H)
* *{
* * * *// повысить способность влажения оружием
* * * *slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
* * * *// в зависимости от способности влажения оружием задать уровень навыка
* * * *if(slf.HitChance[NPC_TALENT_1H] >=0) * *{ Npc_SetTalentSkill(slf,NPC_TALENT_1H,0); };
* * * *if(slf.HitChance[NPC_TALENT_1H] >=30) * { Npc_SetTalentSkill(slf,NPC_TALENT_1H,1); };
* * * *if(slf.HitChance[NPC_TALENT_1H] >=60) * { Npc_SetTalentSkill(slf,NPC_TALENT_1H,2); };
* *};
* *// если оружие - двуручник
* *if(talent == NPC_TALENT_2H)
* *{
* * * *slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
* * * *if(slf.HitChance[NPC_TALENT_1H] >=0) * *{ Npc_SetTalentSkill(slf,NPC_TALENT_2H,0); };
* * * *if(slf.HitChance[NPC_TALENT_2H] >=30) * { Npc_SetTalentSkill(slf,NPC_TALENT_2H,1); };
* * * *if(slf.HitChance[NPC_TALENT_2H] >=60) * { Npc_SetTalentSkill(slf,NPC_TALENT_2H,2); };
* *};
* *// если оружие - лук
* *if(talent == NPC_TALENT_BOW)
* *{
* * * *slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
* * * *if(slf.HitChance[NPC_TALENT_BOW] >=0) * { Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0); };
* * * *if(slf.HitChance[NPC_TALENT_BOW] >=30) *{ Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1); };
* * * *if(slf.HitChance[NPC_TALENT_BOW] >=60) *{ Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2); };
* *};
* *// если оружие - арбалет
* *if(talent == NPC_TALENT_CROSSBOW)
* *{
* * * *slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
* * * *if(slf.HitChance[NPC_TALENT_CROSSBOW] >=0) *{ Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0); };
* * * *if(slf.HitChance[NPC_TALENT_CROSSBOW] >=30) { Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1); };
* * * *if(slf.HitChance[NPC_TALENT_CROSSBOW] >=60) { Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2); };
* *};
};


* *2. Функция повышения аттрибутов НПС.

Файл B_BlessAttribute.d

// ************************************************** **************
// Функция повышения аттрибутов НПС
// ************************************************** **************
// Аргументы: slf - НПС, attrib - аттрибут, percent - кол-во едениц улучшения

func void B_BlessAttribute(var C_NPC oth,var int attrib,var int points)
{
* *var string concatText;
* *// если атрибут сила
* *if(attrib == ATR_STRENGTH)
* *{ *
* * * *// увеличить силу
* * * *oth.attribute[ATR_STRENGTH] = oth.attribute[ATR_STRENGTH] + points;
* * * *// увеличить реальную силу
* * * *oth.aivar[REAL_STRENGTH] = oth.aivar[REAL_STRENGTH] + points;
* * * *// вывод на экран строки "Иннос дарит тебе: Сила + "
* * * *concatText = ConcatStrings(PRINT_BlessSTR,IntToString(points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// если атрибут ловкость
* *if(attrib == ATR_DEXTERITY) * * * *
* *{ *
* * * *// увеличить ловкость
* * * *oth.attribute[ATR_DEXTERITY] = oth.attribute[ATR_DEXTERITY] + points;
* * * *// увеличить реальную ловкость
* * * *oth.aivar[REAL_DEXTERITY] = oth.aivar[REAL_DEXTERITY] + points;
* * * *// вывод на экран строки "Иннос дарит тебе: Ловкость + "
* * * *concatText = ConcatStrings(PRINT_BlessDEX,IntToString(points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// если атрибут макс. мана
* *if(attrib == ATR_MANA_MAX) * * * * *
* *{ *
* * * *// увеличить макс. ману
* * * *oth.attribute[ATR_MANA_MAX] = oth.attribute[ATR_MANA_MAX] + points;
* * * *// увеличить реальную макс. ману
* * * *oth.aivar[REAL_MANA_MAX] = oth.aivar[REAL_MANA_MAX] + points;
* * * *// полностью восстановить ману
* * * *oth.attribute[ATR_MANA] = oth.attribute[ATR_MANA_MAX];
* * * *// вывод на экран строки "Иннос дарит тебе: Мана + "
* * * *concatText = ConcatStrings(PRINT_BlessMANA_MAX,IntToString(poin ts));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// если атрибут макс. жизнь
* *if(attrib == ATR_HITPOINTS_MAX) * * * *
* *{ *
* * * *// увеличить макс. жизнь
* * * *oth.attribute[ATR_HITPOINTS_MAX] = oth.attribute[ATR_HITPOINTS_MAX] + points;
* * * *// полностью восстановить жизнь
* * * *oth.attribute[ATR_HITPOINTS] = oth.attribute[ATR_HITPOINTS_MAX];
* * * *// вывод на экран строки "Иннос дарит тебе: Жизнь + "
* * * *concatText = ConcatStrings(PRINT_BlessHitpoints_MAX,IntToString (points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// если атрибут жизнь
* *if(attrib == ATR_HITPOINTS) * * * *
* *{ *
* * * *// полностью восстановить жизнь
* * * *oth.attribute[ATR_HITPOINTS] = oth.attribute[ATR_HITPOINTS_MAX];
* * * *// вывод на экран строки "Иннос услышал тебя и ты вылечен."
* * * *PrintScreen(Print_Blesshitpoints,-1,-1,FONT_SCREEN,2);
* *};
* *// если атрибут сила
* *if (attrib == ATR_MANA) * * * *
* *{ *
* * * *// полностью восстановить ману
* * * *oth.attribute[ATR_MANA] = oth.attribute[ATR_MANA_MAX];
* * * *// вывод на экран строки "Ты исполнен ясностью разума."
* * * *PrintScreen(Print_BlessMana,-1,-1,FONT_SCREEN,2);
* *};
};


* *3. Функция создания строки стоимости обучения.

Файл B_BuildLearnString.d

// ************************************************** **************
// Функция создания строки стоимости обучения
// ************************************************** **************
// Аргументы: text - текст, kosten - стоимость обучения в LP
// ----------------------------------------------------------------
// Возвращаемое значение: созданный текст

func string B_BuildLearnString(var string text,var int kosten)
{
* *var string concatText;
* *// создать текст: text + ". Стоимость: " + kosten + "LP"
* *concatText = ConcatStrings(text,PRINT_Kosten);
* *concatText = ConcatStrings(concatText,IntToString(kosten));
* *concatText = ConcatStrings(concatText,PRINT_LP);
* *return concatText;
};


* *4. Функция "очистки" инвентаря торговцев при их смерти.

Файл B_BuildLearnString.d

// ************************************************** **************
// Функция "очистки" инвентаря торговцев при их смерти
// ************************************************** **************
// Аргумент: Trader - торговец

func void B_ClearDeadTrader(var C_NPC Trader)
{
* *// очистить инвентарь
* *Npc_clearInventory(Trader);
* *// если експа за победу не начислена
* *if(Trader.aivar[AIV_VictoryXPGiven] == FALSE)
* *{
* * * *// инициализировать инвентарь по умолчанию
* * * *B_CreateAmbientInv(Trader);
* *};
* *// сброс переменной - товар торговца с началом главы не обновлялся
* *Trader.aivar[AIV_ChapterInv] = (Kapitel - 1);
};


* *5. Функция стандартного завершения диалога с МОВом (выполнения действий).

Файл B_EndProductionDialog.d

// ************************************************** **************
// Функция стандартного завершения диалога с МОВом
// ************************************************** **************
// self - НПС, использующий МОВ

func void B_EndProductionDialog()
{
* *// завершить диалог
* *AI_StopProcessInfos(self);
* *// завершить эффект (если был включен)
* *Wld_StopEffect("DEMENTOR_FX");
* *// сброс флага диалога
* *self.aivar[AIV_INVINCIBLE] = FALSE;
* *// сброс MOBsi действия
* *PLAYER_MOBSI_PRODUCTION = MOBSI_NONE;
};

Ответить с цитированием
Старый 08.08.2005, 09:32   #225
SATANIZMat

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

 };
  // если атрибут сила
  if (attrib == ATR_MANA)        
  {  
      // полностью восстановить ману
      oth.attribute[ATR_MANA] = oth.attribute[ATR_MANA_MAX];
      // вывод на экран строки "Ты исполнен ясностью разума."
      PrintScreen(Print_BlessMana,-1,-1,FONT_SCREEN,2);
  };
};
Атрибут манна. Ошибочка.
Ответить с цитированием
Старый 09.08.2005, 09:16   #226
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *6. Функции входа в Яркендар.

Файл B_Enter_AddonWorld.d

// Вход в Яркендар в Главе 1
func void B_ENTER_ADDONWORLD_Kapitel_1()
{
* *// если Равен убит
* *if(RavenIsDead == TRUE)
* *{
* * * *// удалить Миксира из Яркендара
* * * *B_RemoveNpc(KDW_14030_Addon_Myxir_ADW);
* *};
* *// если Пропавшие люди найдены и не удалены из Яркендара
* *if(Sklaven_weg == TRUE) && (RemoveSklaven == FALSE)
* *{ *
* * * *// удалить найденных людей
* * * *B_RemoveNpc(STRF_1118_Addon_Patrick);
* * * *B_RemoveNpc(STRF_1119_Addon_Monty);
* * * *B_RemoveNpc(STRF_1120_Addon_Tonak);
* * * *B_RemoveNpc(STRF_1121_Addon_Telbor);
* * * *B_RemoveNpc(STRF_1122_Addon_Pardos);
* * * *// установить флаг удаления
* * * *RemoveSklaven = TRUE;
* *};
};

// Вход в Яркендар в Главе 2
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterADW_Kapitel2; *// флаг одноразовости

func void B_ENTER_ADDONWORLD_Kapitel_2()
{
* *if(EnterADW_Kapitel2 == FALSE)
* *{
* * * *EnterADW_Kapitel2 = TRUE;
* *};
};

// Вход в Яркендар в Главе 3
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterADW_Kapitel3; *// флаг одноразовости

func void B_ENTER_ADDONWORLD_Kapitel_3()
{
* *if (EnterADW_Kapitel3 == FALSE)
* *{
* * * *EnterADW_Kapitel3 = TRUE;
* *};
};

// Вход в Яркендар в Главе 4

var int EnterADW_Kapitel4; *// флаг одноразовости

func void B_ENTER_ADDONWORLD_Kapitel_4()
{
* *if(EnterADW_Kapitel4 == FALSE)
* *{
* * * *// респавн живности
* * * *Wld_InsertNpc(Giant_DesertRat,"ADW_CANYON_TELEPOR T_PATH_03");
* * * *Wld_InsertNpc(Giant_DesertRat,"ADW_CANYON_TELEPOR T_PATH_03");
* * * *Wld_InsertNpc(Giant_DesertRat,"ADW_CANYON_TELEPOR T_PATH_04");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_L IBRARY_36");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_L IBRARY_36");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_B ANDITS_31");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_M INE2_04");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_M INE2_04");
* * * *Wld_InsertNpc(Troll,"ADW_CANYON_ORCS_02");
* * * *Wld_InsertNpc(Troll,"ADW_CANYON_PATH_TO_MINE2_09" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_M INE2_06");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_26");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_24");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_66");
* * * *Wld_InsertNpc(SkeletonMage,"ADW_CANYON_LIBRARY_ST ONIE_01");
* * * *Wld_InsertNpc(Skeleton,"ADW_CANYON_LIBRARY_STONIE _02");
* * * *Wld_InsertNpc(Skeleton,"ADW_CANYON_LIBRARY_STONIE _03");
* * * *Wld_InsertNpc(Skeleton,"ADW_CANYON_LIBRARY_STONIE _04");
* * * *Wld_InsertNpc(Skeleton,"ADW_CANYON_LIBRARY_STONIE _05");
* * * *Wld_InsertNpc(FireWaran,"ADW_ENTRANCE_2_VALLEY_05 ");
* * * *Wld_InsertNpc(Waran,"ADW_ENTRANCE_2_VALLEY_11");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_PATH2BA NDITS_10");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_BEHINDA KROPOLIS_04");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_BEHINDA KROPOLIS_04");
* * * *Wld_InsertNpc(Swamprat,"ADW_ENTRANCE_PATH2BANDITS _03");
* * * *Wld_InsertNpc(SkeletonMage,"ADW_PORTALTEMPEL_08B" );
* * * *Wld_InsertNpc(Skeleton,"ADW_PORTALTEMPEL_08A");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_2_PIRAT ECAMP_22");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_SHARKSTREET_0 2");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_SHARKSTREET_0 7");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_SHARKSTREET_0 9");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_SHARKSTREET_1 0");
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_LITTLE_SEA_01 ");
* * * *Wld_InsertNpc(Bloodfly,"ADW_SWAMP_LITTLE_SEA_01") ;
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_LITTLE_SEA_02 ");
* * * *Wld_InsertNpc(Bloodfly,"ADW_SWAMP_LITTLE_SEA_02") ;
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_LITTLE_SEA_03 ");
* * * *Wld_InsertNpc(Bloodfly,"ADW_SWAMP_LITTLE_SEA_03") ;
* * * *Wld_InsertNpc(MayaZombie01,"ADW_PFUETZE_01");
* * * *Wld_InsertNpc(MayaZombie02,"ADW_PFUETZE_02");
* * * *Wld_InsertNpc(MayaZombie03,"ADW_PFUETZE_03");
* * * *Wld_InsertNpc(MayaZombie04,"ADW_PFUETZE_04");
* * * *Wld_InsertNpc(MayaZombie04,"ADW_BANDIT_VP1_07_D") ;
* * * *Wld_InsertNpc(MayaZombie01,"ADW_BANDIT_VP1_07_E") ;
* * * *Wld_InsertNpc(MayaZombie02,"ADW_BANDIT_VP1_07_F") ;
* * * *Wld_InsertNpc(MayaZombie03,"ADW_SWAMP_LITTLE_SEA_ 03_B");
* * * *Wld_InsertNpc(MayaZombie04,"ADW_SWAMP_09_C");
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_10");
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_13");
* * * *Wld_InsertNpc(SwampGolem,"ADW_SWAMP_14");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_HOHLWEG_03");
* * * *Wld_InsertNpc(Swampshark,"ADW_SWAMP_HOHLWEG_04");
* * * *Wld_InsertNpc(Skeleton,"ADW_SENAT_SIDE_01");
* * * *Wld_InsertNpc(Skeleton,"ADW_SENAT_SIDE_02");
* * * *Wld_InsertNpc(MayaZombie04,"ADW_SENAT_SIDE_03");
* * * *Wld_InsertNpc(Skeleton,"ADW_SENAT_GUARDIAN_01");
* * * *Wld_InsertNpc(MayaZombie01,"ADW_SENAT_GUARDIAN_02 ");
* * * *Wld_InsertNpc(SwampDrone,"ADW_SWAMP_HILLS_DOWN_03 ");
* * * *Wld_InsertNpc(SwampDrone,"ADW_SWAMP_15");
* * * *Wld_InsertNpc(Swamprat,"ADW_HOHLWEG_CENTER");
* * * *Wld_InsertNpc(SwampGolem,"FP_ROAM_BF_NEST_26");
* * * *Wld_InsertNpc(Swamprat,"ADW_BANDITSCAMP_RAKEPLACE _03");
* * * *Wld_InsertNpc(SwampDrone,"ADW_CANYON_PATH_TO_BAND ITS_02");
* * * *Wld_InsertNpc(SwampDrone,"ADW_PFUETZE_02");
* * * *Wld_InsertNpc(SwampDrone,"ADW_SWAMP_LOCH_05");
* * * *Wld_InsertNpc(SwampDrone,"ADW_SWAMP_LOCH_06");
* * * *Wld_InsertNpc(Demon,"ADW_PIRATECAMP_LONEBEACH_CAV E_03");
* * * *Wld_InsertNpc(FireWaran,"ADW_PIRATECAMP_LONEBEACH _05");
* * * *Wld_InsertNpc(Lurker,"ADW_PIRATECAMP_WATERHOLE_04 ");
* * * *Wld_InsertNpc(Gobbo_Warrior_Visir,"ADW_VALLEY_BIG CAVE_06");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_VALLEY_BIGCAVE_0 6");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_BIGCAVE_1 5");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_110" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_110" );
* * * *Wld_InsertNpc(Warg,"ADW_ENTRANCE_2_PIRATECAMP_13" );
* * * *Wld_InsertNpc(Warg,"ADW_ENTRANCE_2_PIRATECAMP_13" );
* * * *Wld_InsertNpc(Gobbo_Warrior_Visir,"ADW_ENTRANCE_2 _PIRATECAMP_13");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_PIRAT ECAMP_13");
* * * *Wld_InsertNpc(Gobbo_Warrior_Visir,"ADW_ENTRANCE_2 _PIRATECAMP_13");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_PIRAT ECAMP_13");
* * * *Wld_InsertNpc(Gobbo_Warrior_Visir,"ADW_ENTRANCE_2 _VALLEY_10");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_VALLE Y_10");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_VALLE Y_10");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_VALLE Y_10");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_VALLE Y_02A");
* * * *Wld_InsertNpc(Gobbo_Warrior,"ADW_ENTRANCE_2_VALLE Y_02A");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_020" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_BIGCAVE_0 1");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_048_ A");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_047_ D");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_VALLEY_PATH_047_ D");
* * * *Wld_InsertNpc(Scavenger_Demon,"ADW_VALLEY_PATH_04 7_G");
* * * *Wld_InsertNpc(Scavenger_Demon,"ADW_VALLEY_PATH_04 7_G");
* * * *Wld_InsertNpc(Scavenger_Demon,"ADW_VALLEY_PATH_03 8_E");
* * * *Wld_InsertNpc(Scavenger_Demon,"ADW_VALLEY_PATH_03 8_E");
* * * *Wld_InsertNpc(Scavenger_Demon,"ADW_VALLEY_PATH_03 8_J");
* * * *Wld_InsertNpc(SkeletonMage,"ADW_VALLEY_PATH_131") ;
* * * *Wld_InsertNpc(SkeletonMage,"ADW_VALLEY_PATH_132_A ");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_132_A");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_134");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_134");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_135");
* * * *Wld_InsertNpc(Shadowbeast_Addon_Fire,"ADW_VALLEY_ PATH_072");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_072");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_073");
* * * *Wld_InsertNpc(Shadowbeast_Addon_Fire,"ADW_VALLEY_ PATH_072");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_073");
* * * *Wld_InsertNpc(Skeleton,"ADW_VALLEY_PATH_073");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_M INE1_05");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_M INE1_05");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_MINE1_01" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_MINE1_01" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_MINE1_01" );
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_L IBRARY_31A");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_CANYON_PATH_TO_L IBRARY_31A");
* * * *Wld_InsertNpc(FireWaran,"ADW_CANYON_PATH_TO_BANDI TS_55");
* * * *Wld_InsertNpc(FireWaran,"ADW_CANYON_PATH_TO_BANDI TS_55");
* * * *Wld_InsertNpc(OrcBiter,"ADW_CANYON_PATH_TO_BANDIT S_52");
* * * *Wld_InsertNpc(OrcBiter,"ADW_CANYON_PATH_TO_BANDIT S_52");
* * * *Wld_InsertNpc(Troll,"ADW_CANYON_PATH_TO_LIBRARY_1 7");
* * * *Wld_InsertNpc(Troll,"ADW_CANYON_PATH_TO_LIBRARY_1 6A");
* * * *Wld_InsertNpc(OrcBiter,"ADW_CANYON_ORCS_09");
* * * *Wld_InsertNpc(OrcBiter,"ADW_CANYON_ORCS_09");
* * * *Wld_InsertNpc(FireWaran,"ADW_CANYON_PATH_TO_LIBRA RY_07A");
* * * *Wld_InsertNpc(FireWaran,"ADW_CANYON_PATH_TO_LIBRA RY_07A");
* * * *Wld_InsertNpc(Blattcrawler,"ADW_CANYON_TELEPORT_P ATH_09");
* * * *Wld_InsertNpc(Blattcrawler,"ADW_CANYON_TELEPORT_P ATH_09");
* * * *Wld_InsertNpc(Blattcrawler,"ADW_CANYON_TELEPORT_P ATH_09");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_PATH2BA NDITS_05P");
* * * *Wld_InsertNpc(DragonSnapper,"ADW_ENTRANCE_PATH2BA NDITS_05P");
* * * *Wld_InsertNpc(SwampGolem,"ADW_ENTRANCE_PATH2BANDI TS_05");
* * * *Wld_InsertNpc(Troll,"ADW_CANYON_PATH_TO_BANDITS_2 0");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_21");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_17");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_14");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_62");
* * * *Wld_InsertNpc(MinecrawlerWarrior,"ADW_CANYON_PATH _TO_BANDITS_19");
* * * *EnterADW_Kapitel4 = TRUE;
* *};
};

// Вход в Яркендар в Главе 5
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterADW_Kapitel5; *// флаг одноразовости

func void B_ENTER_ADDONWORLD_Kapitel_5()
{
* *if (EnterADW_Kapitel5 == FALSE)
* *{
* * * *EnterADW_Kapitel5 = TRUE;
* *};
};

// Вход в Яркендар в Главе 6
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterADW_Kapitel6; *// флаг одноразовости

func void B_ENTER_ADDONWORLD_Kapitel_6()
{
* *if (EnterADW_Kapitel6 == FALSE)
* *{
* * * *EnterADW_Kapitel6 = TRUE;
* *};
};

// Общая функция входа в Яркендар
func void B_ENTER_ADDONWORLD() *
{
* *// инициализация глобальных НПС
* *B_InitNpcGlobals();
* *// в зависимости от главы вызвать соответствующую функцию
* *if(Kapitel >= 1) * *{ B_ENTER_ADDONWORLD_Kapitel_1(); };
* *if(Kapitel >= 2) * *{ B_ENTER_ADDONWORLD_Kapitel_2(); };
* *if(Kapitel >= 3) * *{ B_ENTER_ADDONWORLD_Kapitel_3(); };
* *if(Kapitel >= 4) * *{ B_ENTER_ADDONWORLD_Kapitel_4(); };
* *if(Kapitel >= 5) * *{ B_ENTER_ADDONWORLD_Kapitel_5(); };
* *if(Kapitel >= 6) * *{ B_ENTER_ADDONWORLD_Kapitel_6(); };
* *CurrentLevel = ADDONWORLD_ZEN;
* *// инициализация глобальных НПС (уже было, можно удалить)
* *B_InitNpcGlobals();
};


* *7. Функции инициализации Острова Драконов.

Файл B_Enter_DragonIsland.d

// Расстановка живности на карте острова
func void STARTUP_NEWWORLD_PART_DRAGON_ISLAND_01()
{
* *Wld_InsertNpc(FireWaran,"FP_ROAM_DI_WARAN_01");
* *Wld_InsertNpc(FireWaran,"FP_ROAM_DI_WARAN_02");
* *Wld_InsertNpc(FireWaran,"FP_ROAM_DI_WARAN_03");
* *Wld_InsertNpc(Troll_DI,"DI_ORKAREA_TROLL");
* *Wld_InsertItem(ItMi_DarkPearl,"FP_ITEM_DI_ENTER_0 3");
* *Wld_InsertItem(ItMi_Sulfur,"FP_ITEM_DI_ENTER_07") ;
* *Wld_InsertItem(ItWr_ZugBruecke_MIS,"FP_ITEM_DI_EN TER_09");
* *Wld_InsertNpc(OrcWarrior_Rest,"FP_ROAM_DI_ORK_01" );
* *Wld_InsertNpc(OrcWarrior_Rest,"FP_ROAM_DI_ORK_02" );
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_03");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_04");
* *Wld_InsertNpc(OrcShaman_Sit,"FP_ROAM_DI_ORK_05");
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_06");
* *Wld_InsertNpc(OrcWarrior_Rest,"FP_ROAM_DI_ORK_07" );
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_08");
* *Wld_InsertNpc(OrcWarrior_Rest,"FP_ROAM_DI_ORK_09" );
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_11");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_14");
* *Wld_InsertNpc(OrcShaman_Sit,"FP_ROAM_DI_ORK_15");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_16");
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_17");
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_18");
* *Wld_InsertNpc(OrcWarrior_Rest,"FP_ROAM_DI_ORK_19" );
* *Wld_InsertNpc(OrcShaman_Sit,"FP_ROAM_DI_ORK_20");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_21");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_22");
* *Wld_InsertNpc(OrcElite_Rest,"FP_ROAM_DI_ORK_23");
* *Wld_InsertNpc(OrcWarrior_Roam,"FP_ROAM_DI_ORK_28" );
* *Wld_InsertNpc(OrcElite_Roam,"FP_ROAM_DI_ORK_29");
* *Wld_InsertNpc(OrcWarrior_Roam,"FP_ROAM_DI_ORK_30" );
* *Wld_InsertNpc(OrcElite_Roam,"FP_ROAM_DI_ORK_33");
* *Wld_InsertNpc(OrcElite_Roam,"FP_ROAM_DI_ORK_34");
* *Wld_InsertNpc(OrcWarrior_Roam,"FP_ROAM_DI_ORK_35" );
* *Wld_InsertNpc(Warg,"FP_ROAM_DI_ORK_12");
* *Wld_InsertNpc(OrcShaman_Sit,"FP_ROAM_DI_ORK_13");
* *Wld_InsertNpc(OrkElite_AntiPaladinOrkOberst_DI,"D I_ORKOBERST");
* *Wld_InsertNpc(OrcElite_DIOberst1_Rest,"FP_ROAM_DI _ORK_24");
* *Wld_InsertNpc(OrcElite_DIOberst2_Rest,"FP_ROAM_DI _ORK_26");
* *Wld_InsertNpc(OrcElite_DIOberst3_Rest,"FP_ROAM_DI _ORK_27");
* *Wld_InsertNpc(DMT_DementorAmbientSpeaker,"DI_ORKA REA_24");
* *Wld_InsertNpc(DMT_DementorAmbientSpeaker,"DI_DRAC ONIANAREA_22");
* *Wld_InsertNpc(DMT_DementorAmbientSpeaker,"DI_DRAC ONIANAREA_08");
* *Wld_InsertNpc(Dragon_Fire_Island,"DI_DRACONIANARE A_FIREDRAGON");
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_01" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_02" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_03" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_04" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_05" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_06" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_07" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_08" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_09" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_10" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_11" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_12" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_13" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_14" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_15" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_16" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_17" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_18" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_19" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_20" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_21" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_22" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_23" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_24" );
* *Wld_InsertNpc(Draconian,"FP_ROAM_DI_DRACONIAN_25" );
};

// INIT_ секция - инициализация Острова (не будет ниоткуда вызвана, можно удалить)
func void INIT_NEWWORLD_PART_DRAGON_ISLAND_01()
{
* *B_InitMonsterAttitudes();
* *B_InitGuildAttitudes();
* *B_InitNpcGlobals();
};

// Расстановка живности в Пещерах
func void STARTUP_NEWWORLD_PART_DRAGON_UNDEAD_01()
{
* *Wld_InsertItem(ItWr_Rezept_MegaDrink_MIS,"FP_ITEM _DI_BLACKNOV_01");
* *Wld_InsertItem(ItWr_Diary_BlackNovice_MIS,"FP_ITE M_DI_BLACKNOV_02");
* *Wld_InsertNpc(Skeleton_Lord_Archol,"DI_ARCHOL");
* *Wld_InsertNpc(Skeleton_Archol1,"DI_ARCHOL_SKELETO N_01");
* *Wld_InsertNpc(Skeleton_Archol2,"DI_ARCHOL_SKELETO N_02");
* *Wld_InsertNpc(Skeleton_Archol3,"DI_ARCHOL_SKELETO N_03");
* *Wld_InsertNpc(Skeleton_Archol4,"DI_ARCHOL_SKELETO N_04");
* *Wld_InsertNpc(Skeleton_Archol5,"DI_ARCHOL_SKELETO N_05");
* *Wld_InsertNpc(Skeleton_Archol6,"DI_ARCHOL_SKELETO N_06");
* *Wld_InsertNpc(DMT_DementorAmbient,"DI_DRACONIANAR EA_53");
* *Wld_InsertNpc(DMT_DementorAmbient,"DI_DRACONIANAR EA_52");
* *Wld_InsertNpc(Lesser_Skeleton,"DI_DRACONIANAREA_5 5");
* *Wld_InsertNpc(Lesser_Skeleton,"DI_DRACONIANAREA_5 5");
* *Wld_InsertNpc(Skeleton,"DI_DRACONIANAREA_56");
* *Wld_InsertNpc(Lesser_Skeleton,"DI_DRACONIANAREA_5 6");
* *Wld_InsertNpc(Skeleton,"DI_DRACONIANAREA_51");
* *Wld_InsertNpc(Lesser_Skeleton,"DI_DRACONIANAREA_5 1");
* *Wld_InsertNpc(Skeleton,"DI_DRACONIANAREA_51");
* *Wld_InsertNpc(Shadowbeast_Skeleton,"WP_UNDEAD_SPA WN_POINT_01");
* *Wld_InsertNpc(Skeleton_Lord,"WP_UNDEAD_LEFT_DOWN_ 06");
* *Wld_InsertNpc(OrcElite_Rest,"WP_UNDEAD_SPAWN_POIN T_02");
* *Wld_InsertNpc(OrcElite_Rest,"WP_UNDEAD_SPAWN_POIN T_03");
* *Wld_InsertNpc(OrcShaman_Sit,"WP_UNDEAD_SPAWN_POIN T_04");
* *Wld_InsertNpc(Zombie01,"WP_UNDEAD_SPAWN_POINT_05" );
* *Wld_InsertNpc(Zombie02,"WP_UNDEAD_SPAWN_POINT_06" );
* *Wld_InsertNpc(Zombie03,"WP_UNDEAD_SPAWN_POINT_07" );
* *Wld_InsertNpc(Zombie04,"WP_UNDEAD_SPAWN_POINT_08" );
* *Wld_InsertNpc(Skeleton,"DRAGONISLAND_UNDEAD_04_01 ");
* *Wld_InsertNpc(Skeleton,"DRAGONISLAND_UNDEAD_04_02 ");
* *Wld_InsertNpc(Skeleton,"DRAGONISLAND_UNDEAD_08_01 ");
* *Wld_InsertNpc(Skeleton_Lord,"DRAGONISLAND_UNDEAD_ 08_02");
* *Wld_InsertNpc(Skeleton_Lord,"DRAGONISLAND_UNDEAD_ 08_03");
* *Wld_InsertNpc(Skeleton,"DRAGONISLAND_UNDEAD_08_04 ");
};

// INIT_ секция - инициализация Пещер (не будет ниоткуда вызвана, можно удалить)
func void INIT_NEWWORLD_PART_DRAGON_UNDEAD_01()
{
* *B_InitMonsterAttitudes();
* *B_InitGuildAttitudes();
* *B_InitNpcGlobals();
};

// Расстановка живности в Залах Ирдората
func void STARTUP_NEWWORLD_PART_DRAGON_FINAL_01()
{
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_01,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_02,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_03,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_04,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_05,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbientWalker_DI_06,"DI _UNDEADDRAGONTEMPEL_01");
* *Wld_InsertNpc(DMT_DementorAmbient,"DI_UNDEADDRAGO NTEMPEL_20");
* *Wld_InsertNpc(DMT_DementorAmbient,"DI_UNDEADDRAGO NTEMPEL_23");
* *Wld_InsertNpc(DMT_1299_OberDementor_DI,"DI_SCHWAR ZMAGIER");
* *Wld_InsertNpc(Dragon_Undead,"DI_UNDEADDRAGON");
* *Wld_InsertNpc(UndeadOrcWarrior,"DI_UNDEADDRAGON_T RAP_01");
* *Wld_InsertNpc(UndeadOrcWarrior,"DI_UNDEADDRAGON_T RAP_02");
* *Wld_InsertNpc(UndeadOrcWarrior,"DI_UNDEADDRAGON_T RAP_03");
};

// INIT_ секция - инициализация Залов Ирдората (не будет ниоткуда вызвана, можно удалить)
func void INIT_NEWWORLD_PART_DRAGON_FINAL_01()
{
* *B_InitMonsterAttitudes();
* *B_InitGuildAttitudes();
* *B_InitNpcGlobals();
};

// STARTUP_ секция Острова Драконов
func void STARTUP_DRAGONISLAND()
{
* *// вставка капитана корабля
* *if(JorgenIsCaptain == TRUE) // Йорген
* *{
* * * *Wld_InsertNpc(VLK_4250_Jorgen_DI,"SHIP_DECK_01");
* *};
* *if(TorlofIsCaptain == TRUE) // Торлоф
* *{
* * * *Wld_InsertNpc(SLD_801_Torlof_DI,"SHIP_DECK_01");
* *};
* *if(JackIsCaptain == TRUE) * // Джек
* *{
* * * *Wld_InsertNpc(VLK_444_Jack_DI,"SHIP_DECK_01");
* *};
* *// размещение команды на корабле
* *if(Lee_IsOnBoard == LOG_SUCCESS) * * * *// Ли
* *{
* * * *Wld_InsertNpc(SLD_800_Lee_DI,"SHIP_DECK_01");
* *};
* *if(MiltenNW_IsOnBoard == LOG_SUCCESS) * // Мильтон
* *{
* * * *Wld_InsertNpc(PC_Mage_DI,"SHIP_DECK_01");
* * * *// если Лестера на корабле нет
* * * *if(Lester_IsOnBoard != LOG_SUCCESS)
* * * *{
* * * * * *// Мильтон сидит на лавке
* * * * * *B_StartOtherRoutine(PC_Mage_DI,"SittingShipDI");
* * * *};
* *};
* *if(Lester_IsOnBoard == LOG_SUCCESS) * * // Лестер
* *{
* * * *Wld_InsertNpc(PC_Psionic_DI,"SHIP_DECK_01");
* * * *// если Мильтона на корабле нет
* * * *if(MiltenNW_IsOnBoard != LOG_SUCCESS)
* * * *{
* * * * * *// Лестер сидит на лавке
* * * * * *B_StartOtherRoutine(PC_Psionic_DI,"SittingShipDI" );
* * * *};
* *};
* *if(Mario_IsOnBoard == LOG_SUCCESS) * * *// Марио
* *{
* * * *Wld_InsertNpc(None_101_Mario_DI,"SHIP_DECK_01");
* *};
* *if(Wolf_IsOnBoard == LOG_SUCCESS) * * * // Волк
* *{
* * * *Wld_InsertNpc(SLD_811_Wolf_DI,"SHIP_DECK_01");
* *};
* *if(Vatras_IsOnBoard == LOG_SUCCESS) * * // Ватрас
* *{
* * * *Wld_InsertNpc(VLK_439_Vatras_DI,"SHIP_DECK_01");
* *}; *
* *if(Bennet_IsOnBoard == LOG_SUCCESS) * * // Беннет
* *{
* * * *Wld_InsertNpc(SLD_809_Bennet_DI,"SHIP_DECK_01");
* *}; *
* *if(Diego_IsOnBoard == LOG_SUCCESS) * * *// Диего
* *{
* * * *Wld_InsertNpc(PC_Thief_DI,"SHIP_DECK_01");
* * * *// если Лареса на корабле нет
* * * *if(Lares_IsOnBoard != LOG_SUCCESS)
* * * *{
* * * * * *// Диего сидит на лавке
* * * * * *B_StartOtherRoutine(PC_Thief_DI,"SittingShipDI");
* * * *};
* *};
* *if(Gorn_IsOnBoard == LOG_SUCCESS) * * * // Горн
* *{
* * * *Wld_InsertNpc(PC_Fighter_DI,"SHIP_DECK_01");
* *}; *
* *if(Lares_IsOnBoard == LOG_SUCCESS) * * *// Ларес
* *{
* * * *Wld_InsertNpc(VLK_449_Lares_DI,"SHIP_DECK_01");
* * * *// если Диего на корабле нет
* * * *if(Diego_IsOnBoard != LOG_SUCCESS)
* * * *{
* * * * * *// Ларес сидит на лавке
* * * * * *B_StartOtherRoutine(VLK_449_Lares_DI,"SittingShip DI");
* * * *};
* *}; *
* *if(Biff_IsOnBoard == LOG_SUCCESS) * * * // Бифф
* *{
* * * *Wld_InsertNpc(DJG_713_Biff_DI,"SHIP_DECK_01");
* *}; *
* *if(Angar_IsOnBoard == LOG_SUCCESS) * * *// Ангар
* *{
* * * *Wld_InsertNpc(DJG_705_Angar_DI,"SHIP_DECK_01");
* *}; *
* *if(Girion_IsOnBoard == LOG_SUCCESS) * * // Гирион
* *{
* * * *Wld_InsertNpc(Pal_207_Girion_DI,"SHIP_DECK_01");
* *};
* *// вставить Педро
* *Wld_InsertNpc(NOV_600_Pedro_DI,"SHIP_DECK_01");
* *// вставка предметов
* *Wld_InsertItem(ItMi_Flask,"FP_ITEM_SHIP_03");
* *Wld_InsertItem(ItMi_Flask,"FP_ITEM_SHIP_07");
* *// вставка прочей живности
* *STARTUP_NEWWORLD_PART_DRAGON_ISLAND_01();
* *STARTUP_NEWWORLD_PART_DRAGON_UNDEAD_01();
* *STARTUP_NEWWORLD_PART_DRAGON_FINAL_01();
* *// видео - прибытие корабля на остров
* *PlayVideo("SHIP.BIK"); *
* *// создать тему - "Залы Ирдората"
* *Log_CreateTopic(TOPIC_HallenVonIrdorath,LOG_MISSI ON);
* *// задать статус - в процессе
* *Log_SetTopicStatus(TOPIC_HallenVonIrdorath,LOG_RU NNING);
* *// добавить в дневник запись
* *Log_AddEntry(TOPIC_HallenVonIrdorath,"Наконец мы достигли логова врага. Только Иннос знает, какие создания будут ждать меня внутри этой огромной горы.");
* *// инициализация 6 главы
* *B_Kapitelwechsel(6,DRAGONISLAND_ZEN);
};

// INIT_ секция Острова Драконов
func void INIT_DRAGONISLAND()
{
* *// инициализация отношений монстров к другим НПС
* *B_InitMonsterAttitudes();
* *// инициализация отношений между гильдиями людей
* *B_InitGuildAttitudes();
* *// инициализация глобальных НПС
* *B_InitNpcGlobals();
* *// задать текущий уровень
* *CurrentLevel = DRAGONISLAND_ZEN;
* *// если ГГ имеет Ключ от каюты капитана
* *if(Npc_HasItems(hero,ITKE_SHIP_LEVELCHANGE_MIS))
* *{
* * * *// отобрать у него ключ
* * * *Npc_RemoveInvItems(hero,ITKE_SHIP_LEVELCHANGE_MIS ,1);
* *};
* *// инициализация глобальных НПС (можно удалить, уже было)
* *B_InitNpcGlobals();
};

Ответить с цитированием
Старый 10.08.2005, 09:31   #227
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *8. Функции входа в Новый мир (Хоринис с окрестностями).

Файл B_Enter_NewWorld.d

// Вход в Новый мир в Главе 1
func void B_ENTER_NEWWORLD_Kapitel_1()
{
* *// если Равен убит и Миксира в Хоринисе нет
* *if((RavenIsDead == TRUE) && Npc_IsDead(KDW_140300_Addon_Myxir_CITY))
* *{
* * * *// вставить Миксира
* * * *Wld_InsertNpc(KDW_140300_Addon_Myxir_CITY,"CITY1" );
* *};
* *// если ГГ был в Яркендаре
* *if(ENTERED_ADDONWORLD == TRUE)
* *{
* * * *// убрать Магов воды с раскопок
* * * *B_RemoveNpc(KDW_1400_Addon_Saturas_NW);
* * * *B_RemoveNpc(KDW_1401_Addon_Cronos_NW);
* * * *B_RemoveNpc(KDW_1402_Addon_Nefarius_NW);
* * * *B_RemoveNpc(KDW_1403_Addon_Myxir_NW);
* * * *B_RemoveNpc(KDW_1404_Addon_Riordian_NW);
* * * *B_RemoveNpc(KDW_1405_Addon_Merdarion_NW);
* * * *B_RemoveNpc(PIR_1301_Addon_Skip_NW);
* * * *// если ГГ не имеет ключа от портала (флаг одноразовости)
* * * *if(SC_GotPORTALTEMPELWALKTHROUGHKey == FALSE)
* * * *{
* * * * * *// вставить Каменного стража
* * * * * *Wld_InsertNpc(Stoneguardian_MerdarionsSchluessel, "NW_TROLLAREA_PORTALTEMPE
L_22");
* * * * * *// установить флаг
* * * * * *SC_GotPORTALTEMPELWALKTHROUGHKey = TRUE;
* * * *};
* *};
* *// если Пропавшие люди освобождены и не возвращены в Новый мир
* *if(Sklaven_Flucht == TRUE) && (Sklaven_weg == FALSE)
* *{
* * * *// вставить Пропавших людей
* * * *Wld_InsertNpc(STRF_1123_Addon_Patrick_NW,"NW_BIGF ARM_PATRICK");
* * * *Wld_InsertNpc(STRF_1124_Addon_Monty_NW,"NW_CITY_H ABOUR_WERFT_IN_01");
* * * *Wld_InsertNpc(STRF_1125_Addon_Tonak_NW,"NW_FARM2_ FIELD_TANOK");
* * * *Wld_InsertNpc(STRF_1126_Addon_Telbor_NW,"NW_FARM2 _FIELD_TELBOR");
* * * *Wld_InsertNpc(STRF_1127_Addon_Pardos_NW,"NW_FARM3 _BENGAR");
* * * *// установить флаг возврата
* * * *Sklaven_weg = TRUE;
* * * *// миссия по возвращению людей завершена
* * * *MissingPeopleReturnedHome = TRUE;
* *};
};

// Вход в Новый мир в Главе 2

var int EnterNW_Kapitel2; * // флаг одноразовости

func void B_ENTER_NEWWORLD_Kapitel_2()
{
* *// если Грег вернулся в Яркендар
* *if(GregIsBack == TRUE)
* *{
* * * *// удалить Грега
* * * *B_RemoveNpc(PIR_1300_Addon_Greg_NW);
* *};
* *// если флаг сброшен
* *if(EnterNW_Kapitel2 == FALSE)
* *{
* * * *// респавн живности
* * * *// Примечание: Здесь и далее значок //!!!!!! означает, что часть текста скрипта пропущена для краткости
* * * *//!!!!!!
* * * *// если ГГ милиционер или паладин
* * * *if((hero.guild == GIL_MIL) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *// разместить Амулет ловкости
* * * * * *Wld_InsertItem(ItAm_Dex_01,"FP_ROAM_XARDAS_SECRET _26");
* * * *}
* * * *// если ГГ наёмник или охотник на драконов
* * * *else if((hero.guild == GIL_SLD) ¦¦ (hero.guild == GIL_DJG))
* * * *{
* * * * * *// разместить Амулет жизни
* * * * * *Wld_InsertItem(ItAm_Hp_01,"FP_ROAM_XARDAS_SECRET_ 26");
* * * *}
* * * *else // иначе - маг Огня
* * * *{
* * * * * *// разместить Амулет озарения
* * * * * *Wld_InsertItem(ItAm_Hp_Mana_01,"FP_ROAM_XARDAS_SE CRET_26");
* * * *};
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// Агон стоит на охране в таверне
* * * * * *B_StartOtherRoutine(Agon,"StillAlive");
* * * *};
* * * *// установить флаг
* * * *EnterNW_Kapitel2 = TRUE;
* *};
};

// Вход в Новый мир в Главе 3

var int EnterNW_Kapitel3; * // флаг одноразовости

func void B_ENTER_NEWWORLD_Kapitel_3()
{
* *// если флаг сброшен
* *if(EnterNW_Kapitel3 == FALSE)
* *{
* * * *// если Саландрил жив
* * * *if(Npc_IsDead(Salandril) == FALSE)
* * * *{
* * * * * *// сделать Саландрила "крутым парнем"
* * * * * *Salandril.aivar[AIV_ToughGuy] = TRUE;
* * * *};
* * * *// сброс флагов Корнелиуса
* * * *Cornelius.Flags = 0;
* * * *// если Ходжес жив
* * * *if(!Npc_IsDead(Hodges))
* * * *{
* * * * * *// задать функцию распорядка дня
* * * * * *B_StartOtherRoutine(Hodges,"BENNETWEG");
* * * *};
* * * *// если Диего мертв
* * * *if(Npc_IsDead(DiegoNW))
* * * *{
* * * * * *// вставить Диего
* * * * * *Wld_InsertNpc(PC_THIEF_NW,"NW_CITY_ENTRANCE_01");
* * * * * *// задать функцию распорядка дня
* * * * * *B_StartOtherRoutine(DiegoNW,"START");
* * * *};
* * * *// если Горн мертв
* * * *if(Npc_IsDead(GornNW_vor_DJG))
* * * *{
* * * * * *// вставить Горна
* * * * * *Wld_InsertNpc(PC_Fighter_NW_vor_DJG,"BIGFARM");
* * * * * *// задать функцию распорядка дня
* * * * * *B_StartOtherRoutine(GornNW_vor_DJG,"START");
* * * *};
* * * *// если Ларес жив
* * * *if(Npc_IsDead(Lares) == FALSE)
* * * *{
* * * * * *// задать функцию распорядка дня
* * * * * *B_StartOtherRoutine(Lares,"START");
* * * *};
* * * *// вставить Ищущего у входа в Рудниковую долину
* * * *Wld_InsertNpc(DMT_DementorAmbientSpeaker,"NW_PASS _GATE_02");
* * * *// убить паладинов, охраняющих вход в Рудниковую долину
* * * *B_KillNpc(PAL_297_Ritter);
* * * *B_KillNpc(PAL_298_Ritter);
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// убить Ульфа
* * * * * *B_KillNpc(Ulf);
* * * *};
* * * *// вставка Полевых жуков в лесу
* * * *Wld_InsertNpc(Giant_Bug,"FP_ROAM_MEDIUMFOREST_KAP 2_01");
* * * *Wld_InsertNpc(Giant_Bug,"FP_ROAM_MEDIUMFOREST_KAP 2_02");
* * * *Wld_InsertNpc(Giant_Bug,"FP_ROAM_MEDIUMFOREST_KAP 2_05");
* * * *// если Секоб жив
* * * *if(Npc_IsDead(Sekob) == FALSE) *
* * * *{
* * * * * *// задать функцию распорядка дня окружения Секоба
* * * * * *B_StartOtherRoutine(Sekob,"FleeDMT");
* * * * * *B_StartOtherRoutine(Rosi,"FleeDMT");
* * * * * *B_StartOtherRoutine(Till,"FleeDMT");
* * * * * *B_StartOtherRoutine(Balthasar,"FleeDMT");
* * * * * *B_StartOtherRoutine(BAU_933_Rega,"FleeDMT");
* * * * * *B_StartOtherRoutine(BAU_934_Babera,"FleeDMT");
* * * * * *B_StartOtherRoutine(BAU_937_BAUER,"FleeDMT");
* * * * * *B_StartOtherRoutine(BAU_938_BAUER,"FleeDMT");
* * * * * *// вставить Ищущих в доме Секоба
* * * * * *Wld_InsertNpc(DMT_DementorAmbientSekob1,"NW_FARM4 _IN_06"); *
* * * * * *Wld_InsertNpc(DMT_DementorAmbientSekob2,"NW_FARM4 _IN_02");
* * * * * *Wld_InsertNpc(DMT_DementorAmbientSekob3,"NW_FARM4 _IN_03");
* * * * * *Wld_InsertNpc(DMT_DementorAmbientSekob4,"NW_FARM4 _IN_04");
* * * * * *// сделать Секоба бессмертным
* * * * * *Sekob.flags = NPC_FLAG_IMMORTAL;
* * * *};
* * * *// задать функции распорядка дня
* * * *B_StartOtherRoutine(Lester,"WAITFORPLAYER"); * *// Лестер
* * * *B_StartOtherRoutine(Bennet,"PRISON"); * * * * * // Беннет
* * * *B_StartOtherRoutine(Sergio,"WAIT"); * * * * * * // Сергио
* * * *B_StartOtherRoutine(Peck,"STORAGE"); * * * * * *// Пек
* * * *// удалить Лотара
* * * *B_RemoveNpc(PAL_203_Lothar);
* * * *// респавн живности
* * * *//!!!!!!
* * * *// если Малак жив
* * * *if(Npc_IsDead(Malak) == FALSE) *
* * * *{
* * * * * *// Малак с рабочими покидает ферму
* * * * * *B_StartOtherRoutine(Malak,"FleeFromPass");
* * * * * *// установить флаг, что Малак покинул ферму
* * * * * *Malak_isAlive_Kap3 = TRUE;
* * * * * *B_StartOtherRoutine(BAU_962_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_964_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_965_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_966_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_967_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_968_Bauer,"FleeFromPass") ;
* * * * * *B_StartOtherRoutine(BAU_969_Bauer,"FleeFromPass") ;
* * * * * *// если ГГ маг Огня
* * * * * *if(hero.guild == GIL_KDF)
* * * * * *{
* * * * * * * *// создать в инвентаре Малака "Альманах одержимости"
* * * * * * * *CreateInvItems(Malak,ITWR_DementorObsessionBook_M IS,1);
* * * * * *};
* * * *};
* * * *// если ГГ милиционер или паладин
* * * *if((hero.guild == GIL_MIL) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *// Хильда круглосуточно спит
* * * * * *B_StartOtherRoutine(Hilda,"Krank");
* * * *};
* * * *// если ГГ наемник или охотник на драконов
* * * *if((hero.guild == GIL_SLD) ¦¦ (hero.guild == GIL_DJG))
* * * *{
* * * * * *// вставить Трость и нескольких НПС (где ???)
* * * * * *Wld_InsertItem(ItMw_MalethsGehstock_MIS,"FP_ITEM_ FARM1_01");
* * * * * *Wld_InsertNpc(Shadowbeast,"NW_LITTLESTONEHENDGE") ; *
* * * * * *Wld_InsertNpc(BDT_1024_MalethsBandit,"NW_FARM1_BA NDITS_CAVE_08")
;
* * * * * *Wld_InsertNpc(BDT_1006_Bandit_H,"FP_STAND_DEMENTO R_KDF_29");
* * * * * *Wld_InsertNpc(BDT_1007_Bandit_H,"FP_STAND_DEMENTO R_KDF_30");
* * * * * *Wld_InsertNpc(BDT_1008_Bandit_H,"NW_FARM1_BANDITS _CAVE_03");
* * * * * *Wld_InsertNpc(BDT_1004_Bandit_M,"NW_FARM1_BANDITS _CAVE_02");
* * * * * *Wld_InsertNpc(BDT_1005_Bandit_M,"NW_FARM1_BANDITS _CAVE_04");
* * * *};
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// вставить "Горная порода священной земли"
* * * * * *Wld_InsertItem(ItMi_KarrasBlessedStone_Mis,"FP_IT EM_FARM1_03");
* * * * * *Wld_InsertItem(ItMi_KarrasBlessedStone_Mis,"FP_NW _ITEM_TROLL_10");
* * * * * *// Хильда круглосуточно спит
* * * * * *B_StartOtherRoutine(Hilda,"KRANK");
* * * * * *// если Вино жив
* * * * * *if(Npc_IsDead(Vino) == FALSE) *
* * * * * *{
* * * * * * * *// Вино курит болотник
* * * * * * * *B_StartOtherRoutine(Vino,"OBESESSIONRITUAL");
* * * * * * * *// дать Вино "Альманах одержимости"
* * * * * * * *CreateInvItems(Vino,ITWR_DementorObsessionBook_MI S,1); *
* * * * * * * *// установить флаг, что Вино покинул ферму
* * * * * * * *Vino_isAlive_Kap3 = TRUE;
* * * * * * * *// Лобарт курит болотник
* * * * * * * *B_StartOtherRoutine(Lobart,"OBESESSIONRITUAL");
* * * * * * * *// вставка Ищущих
* * * * * * * *Wld_InsertNpc(DMT_DementorSpeakerVino1,"FP_STAND_ DEMENTOR_KDF_31");
* * * * * * * *Wld_InsertNpc(DMT_DementorSpeakerVino2,"FP_STAND_ DEMENTOR_KDF_32");
* * * * * * * *Wld_InsertNpc(DMT_DementorSpeakerVino3,"FP_STAND_ DEMENTOR_KDF_33");
* * * * * * * *Wld_InsertNpc(DMT_DementorSpeakerVino4,"NW_LITTLE STONEHENDGE_02");
* * * * * * * *// убийство Молодых полевых жуков
* * * * * * * *B_KillNpc(YGiant_Bug_VinoRitual1);
* * * * * * * *B_KillNpc(YGiant_Bug_VinoRitual2);
* * * * * *};
* * * * * *// если Бромор жив
* * * * * *if(Npc_IsDead(Bromor) == FALSE)
* * * * * *{
* * * * * * * *// дать Бромору "Альманах одержимости"
* * * * * * * *CreateInvItems(Bromor,ITWR_DementorObsessionBook_ MIS,1);
* * * * * *};
* * * *};
* * * *// если компромат на Сару не собран и задание Кантара получено
* * * *if(MIS_Canthars_KomproBrief != LOG_SUCCESS) && (MIS_Canthars_KomproBrief != FALSE)
* * * *// и Кантору не заплачено и Кантор жив
* * * *&& (Canthar_Pay == FALSE) && (Npc_IsDead(Canthar) == FALSE)
* * * *{
* * * * * *// убить Сару
* * * * * *B_RemoveNpc(Sarah);
* * * * * *// Кантор торгует
* * * * * *B_StartOtherRoutine(Canthar,"MARKTSTAND");
* * * * * *AI_Teleport(Canthar,"NW_CITY_SARAH");
* * * * * *// Кантор будет мстить
* * * * * *Canthar_Sperre = TRUE;
* * * * * *// ГГ обвиняет Кантора
* * * * * *Canthar_WiederRaus = TRUE;
* * * *};
* * * *// дать Лестеру серп
* * * *CreateInvItems(Lester,ItMw_1h_Bau_Axe,1);
* * * *// дать Эниму Жир кротокрыса
* * * *CreateInvItems(Ehnim,ItMi_Moleratlubric_MIS,1);
* * * *// проклясть статуи Инноса
* * * *ShrineIsObsessed_NW_TROLLAREA_PATH_37 * * * * * = TRUE;
* * * *ShrineIsObsessed_NW_FARM1_CONNECT_XARDAS * * * *= TRUE;
* * * *ShrineIsObsessed_NW_TROLLAREA_PATH_66 * * * * * = TRUE;
* * * *ShrineIsObsessed_NW_TROLLAREA_PATH_04 * * * * * = TRUE;
* * * *ShrineIsObsessed_SAGITTA * * * * * * * * * * * *= TRUE;
* * * *ShrineIsObsessed_NW_BIGMILL_MALAKSVERSTECK_02 * = TRUE;
* * * *ShrineIsObsessed_NW_FARM3_BIGWOOD_02 * * * * * *= TRUE;
* * * *// вывод разных заставок Третьей главы в зависимости от гильдии ГГ
* * * *if((hero.guild == GIL_MIL) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *IntroduceChapter(KapWechsel_3,KapWechsel_3_Text," chapter3_MIL.tga,"ch
apter_01.wav",6000);
* * * *}
* * * *else if (hero.guild == GIL_KDF)
* * * *{
* * * * * *IntroduceChapter(KapWechsel_3,KapWechsel_3_Text," chapter3_KDF.tga,"ch
apter_01.wav",6000);
* * * *}
* * * *else
* * * *{
* * * * * *IntroduceChapter(KapWechsel_3,KapWechsel_3_Text," chapter3_SLD.tga,"ch
apter_01.wav",6000);
* * * *};
* * * *// установить флаг
* * * *EnterNW_Kapitel3 = TRUE;
* *};
};

// Вход в Новый мир в Главе 4

var int EnterNW_Kapitel4; * // флаг одноразовости

func void B_ENTER_NEWWORLD_Kapitel_4()
{
* *// если флаг сьрошен
* *if(EnterNW_Kapitel4 == FALSE)
* *{
* * * *// если Саландрил находится ближе 100м от алтаря
* * * *if(Npc_GetDistToWP(Salandril,"ALTAR") < 10000)
* * * *{
* * * * * *// задать распорядок дня
* * * * * *B_StartOtherRoutine(Salandril,"Start");
* * * *};
* * * *// Йорген появляется у монастыря
* * * *B_StartOtherRoutine(Jorgen,"Kloster");
* * * *// убить Бродягу
* * * *B_KillNpc(BDT_1050_Landstreicher);
* * * *// респавн живности
* * * *//!!!!!!
* * * *// если ГГ паладин
* * * *if(hero.Guild == GIL_PAL)
* * * *{
* * * * * *// расстановка орков по Новому миру
* * * * * *//!!!!!!
* * * *};
* * * *// если ГГ охотник на драконов или паладин
* * * *if((hero.guild == GIL_DJG) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *// расстановка орков у фермы Лобарта
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart1,"NW_FARM1_PATH_C ITY_SHEEP_04");
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart2,"NW_FARM1_PATH_C ITY_SHEEP_04");
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart3,"NW_FARM1_PATH_C ITY_SHEEP_04");
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart4,"NW_FARM1_PATH_C ITY_SHEEP_01");
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart5,"NW_FARM1_PATH_C ITY_SHEEP_01");
* * * * * *Wld_InsertNpc(OrcWarrior_Lobart6,"NW_FARM1_PATH_C ITY_SHEEP_01");
* * * * * *// распорядок дня рабочих Лобарта
* * * * * *B_StartOtherRoutine(Vino,"BugsThere");
* * * * * *B_StartOtherRoutine(LobartsBauer1,"BugsThere");
* * * * * *B_StartOtherRoutine(LobartsBauer2,"BugsThere");
* * * *};
* * * *// если ГГ маг Огня или охотник на драконов
* * * *if((hero.guild == GIL_KDF) ¦¦ (hero.guild == GIL_DJG))
* * * *{
* * * * * *// проклясть статуи Инноса
* * * * * *ShrineIsObsessed_NW_TROLLAREA_PATH_37 * * * * * = FALSE;
* * * * * *ShrineIsObsessed_NW_FARM1_CONNECT_XARDAS * * * *= FALSE;
* * * * * *ShrineIsObsessed_NW_TROLLAREA_PATH_66 * * * * * = FALSE;
* * * * * *ShrineIsObsessed_NW_TROLLAREA_PATH_04 * * * * * = FALSE;
* * * * * *ShrineIsObsessed_SAGITTA * * * * * * * * * * * *= FALSE;
* * * * * *ShrineIsObsessed_NW_BIGMILL_MALAKSVERSTECK_02 * = FALSE;
* * * * * *ShrineIsObsessed_NW_FARM3_BIGWOOD_02 * * * * * *= FALSE;
* * * *};
* * * *// если ГГ охотник на драконов
* * * *if (hero.guild == GIL_DJG)
* * * *{
* * * * * *// расстановка Ящеров и их яиц по пещерам
* * * * * *//!!!!!!
* * * *};
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// расстановка Ищущих по Новому миру
* * * * * *//!!!!!!
* * * * * *// дать Рандольфу "Альманах одержимости"
* * * * * *CreateInvItems(Randolph,ITWR_DementorObsessionBoo k_MIS,1);
* * * * * *// Рандольф курит болотник
* * * * * *B_StartOtherRoutine(Randolph,"Obsessed");
* * * *};
* * * *// установить флаг
* * * *EnterNW_Kapitel4 = TRUE;
* *};
* *// если Тальбин не перешел за перевал
* *if(Talbin_FollowsThroughPass == LOG_RUNNING)
* *{
* * * *// вставить Тальбина
* * * *Wld_InsertNpc(VLK_4132_Talbin_NW,"LEVELCHANGE");
* * * *// установить флаг перехода
* * * *Talbin_FollowsThroughPass = LOG_SUCCESS;
* *};
};

// Вход в Новый мир в Главе 5

var int EnterNW_Kapitel5; * * * * * * * * * // флаг одноразовости
var int Pal_Schiffswache_Exchange_onetime; *// охрана покинула корабль (TRUE)
var int Rosi_FleeFromSekob_Kap5; * * * * * *// Роси покинула дом Секоба (TRUE)

func void B_ENTER_NEWWORLD_Kapitel_5()
{
* *// если флаг сброшен
* *if(EnterNW_Kapitel5 == FALSE)
* *{
* * * *// удалить Ксардаса
* * * *B_RemoveNpc(Xardas);
* * * *// Лестер стоит у башни Ксардаса
* * * *B_StartOtherRoutine(Lester,"XardasWeg");
* * * *// если Саландрил находится ближе 100м от алтаря
* * * *if(Npc_GetDistToWP(Salandril,"ALTAR") < 10000)
* * * *{
* * * * * *// задать распорядок дня
* * * * * *B_StartOtherRoutine(Salandril,"Start");
* * * *};
* * * *// если Секоб жив
* * * *if(Npc_IsDead(Sekob) == FALSE) *
* * * *{
* * * * * *// Роси ушла от Секоба
* * * * * *B_StartOtherRoutine(Rosi,"FleeFromSekob");
* * * * * *// Тилл ушел от Секоба
* * * * * *B_StartOtherRoutine(Till,"FleeFromSekob");
* * * * * *// установить флаг
* * * * * *Rosi_FleeFromSekob_Kap5 = TRUE;
* * * *};
* * * *// если Горн вернулся
* * * *if(GornDJG_is_alive == TRUE)
* * * *{
* * * * * *// вставить Горна
* * * * * *Wld_InsertNpc(PC_Fighter_NW_nach_DJG,"Bigfarm");
* * * *};
* * * *// если Ангар вернулся
* * * *if(DJG_Angar_is_alive == TRUE)
* * * *{
* * * * * *// вставить Ангара
* * * * * *Wld_InsertNpc(DJG_705_Angar_NW,"Bigfarm");
* * * *};
* * * *// респавн живности, вставка Марио и предметов
* * * *//!!!!!!
* * * *// если ГГ паладин
* * * *if(hero.guild == GIL_PAL)
* * * *{
* * * * * *// вставить Доспехи паладина
* * * * * *Wld_InsertItem(ItAr_PAl_H,"FP_ITEM_PALFINALARMOR" );
* * * * * *// вставить Рунический камень
* * * * * *Wld_InsertItem(ItMi_RuneBlank,"FP_NW_ITEM_LIBRARY _SEAMAP"); * *
* * * *};
* * * *// если ГГ охотник на драконов (Примечание: можно убрать, пуской блок)
* * * *if(hero.guild == GIL_DJG)
* * * *{
* * * *};
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// расстановка Ищущих по Новому миру
* * * * * *//!!!!!!
* * * * * *// если Секоб жив
* * * * * *if(Npc_IsDead(Sekob) == FALSE)
* * * * * *{
* * * * * * * *// дать Секобу "Альманах одержимости"
* * * * * * * *CreateInvItems(Sekob,ITWR_DementorObsessionBook_M IS,1);
* * * * * * * *// Секоб курит болотник
* * * * * * * *B_StartOtherRoutine(Sekob,"Obsessed");
* * * * * *};
* * * *};
* * * *// сборище паладинов в верхней части Хориниса
* * * *//!!!!!!
* * * *// вывод разных заставок Пятой главы в зависимости от гильдии ГГ
* * * *if((hero.guild == GIL_MIL) ¦¦ (hero.guild == GIL_PAL))
* * * *{
* * * * * *IntroduceChapter(KapWechsel_5,KapWechsel_5_Text," chapter5_PAL.tga,"ch
apter_01.wav",6000);
* * * *}
* * * *else if (hero.guild == GIL_KDF)
* * * *{
* * * * * *IntroduceChapter(KapWechsel_5,KapWechsel_5_Text," chapter5_KDF.tga,"ch
apter_01.wav",6000);
* * * *}
* * * *else
* * * *{
* * * * * *IntroduceChapter(KapWechsel_5,KapWechsel_5_Text," chapter5_DJG.tga,"ch
apter_01.wav",6000);
* * * *};
* * * *// установить флаг
* * * *EnterNW_Kapitel5 = TRUE;
* *};
* *// выполняется при каждом входе в Новый мир в Главе 5
* *// если ГГ впустил орков в крепость и охрана не покинула корабль
* *if(MIS_OCGateOpen == TRUE) && (Pal_Schiffswache_Exchange_onetime == FALSE)
* *{
* * * *// охрана покидает корабль
* * * *B_StartOtherRoutine(Pal_212_Schiffswache,"ShipFre e");
* * * *B_StartOtherRoutine(Pal_213_Schiffswache,"ShipFre e");
* * * *// установить флаг
* * * *Pal_Schiffswache_Exchange_onetime = TRUE;
* * * *// команда может подниматься на корабль
* * * *MIS_ShipIsFree = TRUE;
* *};
* *// если Бифф шел за перевал
* *if(Biff_FollowsThroughPass == LOG_RUNNING)
* *{
* * * *// вставить Биффа
* * * *Wld_InsertNpc(DJG_713_Biff_NW,"LEVELCHANGE");
* * * *// Бифф успешно дошел
* * * *Biff_FollowsThroughPass = LOG_SUCCESS; *
* *};
};

// Вход в Новый мир в Главе 6
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterNW_Kapitel6; * // флаг одноразовости

func void B_ENTER_NEWWORLD_Kapitel_6()
{
* *if (EnterNW_Kapitel6 == FALSE)
* *{
* * * *EnterNW_Kapitel6 = TRUE;
* *};
};

// Общая функция входа в Новый мир
func void B_ENTER_NEWWORLD() * *
{
* *// инициализация глобальных НПС
* *B_InitNpcGlobals();
* *// в зависимости от главы вызвать соответствующую функцию
* *if (Kapitel >= 1) * { B_ENTER_NEWWORLD_Kapitel_1(); };
* *if (Kapitel >= 2) * { B_ENTER_NEWWORLD_Kapitel_2(); };
* *if (Kapitel >= 3) * { B_ENTER_NEWWORLD_Kapitel_3(); };
* *if (Kapitel >= 4) * { B_ENTER_NEWWORLD_Kapitel_4(); };
* *if (Kapitel >= 5) * { B_ENTER_NEWWORLD_Kapitel_5(); };
* *if (Kapitel >= 6) * { B_ENTER_NEWWORLD_Kapitel_6(); };
* *// задать текущий уровень
* *CurrentLevel = NEWWORLD_ZEN;
* *// инициализация глобальных НПС (уже было, можно удалить)
* *B_InitNpcGlobals();
};

Ответить с цитированием
Старый 10.08.2005, 13:00   #228
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2WSA:
На мой взгляд, болванка очень удобна для новичков, т.к. файлов меньше и скорость компиляции высокая. Вполне подойдет для тех, кто делает моды, а не аддоны.
"Скриптовая болванка" хороша, но не в таком же виде, в ней необходимо было поместить все подробные комментарии из Уроков скриптологии (или использовать файлы из них). Первое её предназначение - создать базу скриптов, которая затем расширяется и модернизируется под свои нужды, а без подробных комментариев с ней работать очень трудно, если сам не знаешь всех скриптовых особенностей. Но пока всё равно "плюс".  ;)
Ответить с цитированием
Старый 11.08.2005, 14:35   #229
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *9. Функции входа в Старый мир (Миненталь).

Файл B_Enter_OldWorld.d

// Вход в Миненталь в Главе 1
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterOW_Kapitel1; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_1()
{
* *if (EnterOW_Kapitel1 == FALSE)
* *{
* * * *EnterOW_Kapitel1 = TRUE;
* *};
};

// Вход в Миненталь в Главе 2
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterOW_Kapitel2; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_2()
{
* *if (EnterOW_Kapitel2 == FALSE)
* *{
* * * *EnterOW_Kapitel2 = TRUE;
* *};
};

// Вход в Миненталь в Главе 3

var int EnterOW_Kapitel3; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_3()
{
* *// если флаг сброшен
* *if(EnterOW_Kapitel3 == FALSE)
* *{
* * * *// удалить Мильтона
* * * *B_RemoveNpc(PC_Mage_OW);
* * * *// удалить Горна
* * * *B_RemoveNpc(PC_Fighter_OW);
* * * *// удалить Диего
* * * *B_RemoveNpc(PC_ThiefOW);
* * * *// респавн живности
* * * *// Примечание: Здесь и далее значок //!!!!!! означает, что часть текста скрипта пропущена для краткости
* * * *//!!!!!!
* * * *// вставить руну Страх в Старой башне Ксардаса
* * * *Wld_InsertItem(ItRu_Fear,"FP_ITEM_XARDASALTERTURM _01");
* * * *// если ГГ маг Огня
* * * *if(hero.guild == GIL_KDF)
* * * *{
* * * * * *// вставить Рунический камень
* * * * * *Wld_InsertItem(ItMi_RuneBlank,"FP_ITEM_XARDASALTE RTURM_02");
* * * *}
* * * *else // иначе
* * * *{
* * * * * *// вставить кусок Руды
* * * * * *Wld_InsertItem(ItMi_Nugget,"FP_ITEM_XARDASALTERTU RM_02");
* * * *};
* * * *// установить флаг
* * * *EnterOW_Kapitel3 = TRUE;
* *};
};

// Вход в Миненталь в Главе 4

var int EnterOW_Kapitel4; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_4()
{
* *// если флаг сброшен
* *if(EnterOW_Kapitel4 == FALSE)
* *{
* * * *// если Энгром жив
* * * *if((Npc_IsDead(Engrom)) == FALSE)
* * * *{
* * * * * *// задать распорядок дня
* * * * * *B_StartOtherRoutine(Engrom,"Obsessed");
* * * * * *// дать Энгрому Кожу шныга
* * * * * *CreateInvItems(Engrom,ItAt_TalbinsLurkerSkin,1);
* * * * * *// если ГГ маг Огня
* * * * * *if(hero.guild == GIL_KDF)
* * * * * *{
* * * * * * * *// дать Энгрому "Альманах одержимости"
* * * * * * * *CreateInvItems(Engrom,ITWR_DementorObsessionBook_ MIS,1);
* * * * * *}
* * * * * *else // иначе
* * * * * *{
* * * * * * * *// убить Энгрома
* * * * * * * *B_KillNpc(Engrom);
* * * * * *};
* * * * * *// Энгром ушел от Тальбина
* * * * * *EngromIsGone = TRUE;
* * * *};
* * * *// убить НПС
* * * *B_RemoveNpc(STRF_1115_Geppert); * * // Гепперт
* * * *B_RemoveNpc(STRF_1116_Kervo); * * * // Керво
* * * *B_RemoveNpc(VLK_4106_Dobar); * * * *// Добар
* * * *B_RemoveNpc(VLK_4107_Parlaf); * * * // Парлаф
* * * *// если Сенграт жив
* * * *if((Npc_IsDead(Sengrath)) == FALSE)
* * * *{
* * * * * *// Сенграт идет к забору орков
* * * * * *B_StartOtherRoutine(Sengrath,"ORCBARRIER");
* * * * * *// если у него есть арбалет
* * * * * *if(Npc_HasItems(Sengrath,ItRw_Mil_Crossbow))
* * * * * *{
* * * * * * * *// удалить арбалет
* * * * * * * *Npc_RemoveInvItem(Sengrath,ItRw_Mil_Crossbow);
* * * * * *};
* * * * * *// дать Сенграту его арбалет
* * * * * *CreateInvItems(Sengrath,ItRw_SengrathsArmbrust_MI S,1);
* * * * * *// Сенграт ушел к оркам
* * * * * *Sengrath_Missing = TRUE;
* * * * * *// убить Сенграта
* * * * * *B_KillNpc(Sengrath);
* * * *};
* * * *// вставка мертвых Охотников на драконов
* * * *//!!!!!!
* * * *// Брутус боится мясных жуков
* * * *Npc_ExchangeRoutine(Brutus,"Meatbugs");
* * * *Wld_InsertNpc(Meatbug_Brutus1,"OC_FOLTER_SHARP"); *
* * * *Wld_InsertNpc(Meatbug_Brutus2,"OC_FOLTER_SHARP"); *
* * * *Wld_InsertNpc(Meatbug_Brutus3,"OC_FOLTER_SHARP"); *
* * * *Wld_InsertNpc(Meatbug_Brutus4,"OC_FOLTER_SHARP"); *
* * * *// вставка Сильвио
* * * *Wld_InsertNpc(DJG_700_Sylvio,"OC1");
* * * *// если Булко ушел в Миненталь
* * * *if(SLD_Bullco_is_alive == TRUE)
* * * *{
* * * * * *// вставить Булко
* * * * * *Wld_InsertNpc(DJG_701_Bullco,"OC1");
* * * *};
* * * *// если Род ушел в Миненталь
* * * *if(SLD_Rod_is_alive == TRUE)
* * * *{
* * * * * *// вставить Рода
* * * * * *Wld_InsertNpc(DJG_702_Rod,"OC1");
* * * *};
* * * *// если Сайфер ушел в Миненталь
* * * *if(SLD_Cipher_is_alive == TRUE)
* * * *{
* * * * * *// вставить Сайфера
* * * * * *Wld_InsertNpc(DJG_703_Cipher,"OC1");
* * * *};
* * * *// если Горн ушел в Миненталь
* * * *if(SLD_Gorn_is_alive == TRUE)
* * * *{
* * * * * *// вставить Горна
* * * * * *Wld_InsertNpc(PC_Fighter_DJG,"OC1");
* * * *};
* * * *// вставить других охотников на драконов
* * * *Wld_InsertNpc(DJG_705_Angar,"OC1");
* * * *Wld_InsertNpc(DJG_708_Kurgan,"OC1");
* * * *Wld_InsertNpc(DJG_709_Rethon,"OC1");
* * * *Wld_InsertNpc(DJG_710_Kjorn,"OC1");
* * * *Wld_InsertNpc(DJG_711_Godar,"OC1");
* * * *Wld_InsertNpc(DJG_712_Hokurn,"OC1");
* * * *Wld_InsertNpc(DJG_713_Biff,"OC1");
* * * *Wld_InsertNpc(DJG_714_Jan,"OC1");
* * * *Wld_InsertNpc(DJG_715_Ferros,"OC1");
* * * *// вставить Ур-Шака
* * * *Wld_InsertNpc(NONE_110_Urshak,"WP_INTRO_FALL");
* * * *// респавн живности и вставка предметов
* * * *//!!!!!!
* * * *// создать тему "Охотники на драконов"
* * * *Log_CreateTopic(TOPIC_Dragonhunter,LOG_MISSION);
* * * *// задать статус темы
* * * *Log_SetTopicStatus(TOPIC_Dragonhunter,LOG_RUNNING );
* * * *// запись в дневник
* * * *B_LogEntry(TOPIC_Dragonhunter,"Началась охота на драконов и она должна заманить в рудниковую долину больших авантюристов. Я могу только надеяться, что они не встанут у меня на пути.");
* * * *// заставка Главы 4 * *
* * * *IntroduceChapter(KapWechsel_4,KapWechsel_4_Text," chapter4.tga","
chapter_01.wav",6000);
* * * *// установить флаг
* * * *EnterOW_Kapitel4 = TRUE;
* *};
* *// если ГГ отказался провести Тальбина за перевал
* *if(Talbin_FollowsThroughPass == LOG_OBSOLETE)
* *{
* * * *// убить Тальбина
* * * *B_KillNpc(VLK_4130_Talbin);
* * * *// вставка остера, убившего Тальбина
* * * *Wld_InsertNpc(Dragonsnapper,"START");
* * * *// задание провалено
* * * *Talbin_FollowsThroughPass = LOG_FAILED;
* *}
* *// иначе, если Тальбин ушел за перевал
* *else if(Talbin_FollowsThroughPass == LOG_SUCCESS)
* *{
* * * *// удалить Тальбина
* * * *B_RemoveNpc(VLK_4130_Talbin);
* * * *// Примечание: данную строку необходимо удалить!
* * * *Talbin_FollowsThroughPass = LOG_FAILED;
* *};
};

// Вход в Миненталь в Главе 5

var int EnterOW_Kapitel5; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_5()
{
* *// если флаг сброшен
* *if(EnterOW_Kapitel5 == FALSE)
* *{
* * * *// сброс флагов охраны главных ворот
* * * *VLK_4143_HaupttorWache.flags = 0;
* * * *// дать стражнику Башенный ключ стражника главных ворот * * * * * * * * * *
* * * *CreateInvItems(VLK_4143_HaupttorWache,ITKE_OC_MAI NGATE_MIS,1);
* * * *// если Брутус жив
* * * *if(Npc_IsDead(Brutus) == FALSE)
* * * *{
* * * * * *// дать Брутусу "Альманах одержимости"
* * * * * *CreateInvItems(VLK_4100_Brutus,ITWR_DementorObses sionBook_MIS,1);
* * * *};
* * * *// если Бильгот покинул Миненталь
* * * *if(TschuessBilgot == TRUE)
* * * *{
* * * * * *// удалить Бильгота
* * * * * *B_RemoveNpc(VLK_4120_Bilgot);
* * * *};
* * * *// установить флаг
* * * *EnterOW_Kapitel5 = TRUE;
* *};
* *// если Бифф покинул Миненталь
* *if(Biff_FollowsThroughPass == LOG_SUCCESS)
* *{
* * * *// удалить Биффа
* * * *B_RemoveNpc(DJG_713_Biff);
* *};
};

// Вход в Миненталь в Главе 5
// Примечание: функция не используется, можно удалить вместе с флагом

var int EnterOW_Kapitel6; * // флаг одноразовости

func void B_ENTER_OLDWORLD_Kapitel_6()
{
* *if(EnterOW_Kapitel6 == FALSE)
* *{
* * * *EnterOW_Kapitel6 = TRUE;
* *};
};

// Общая функция входа в Миненталь
func void B_ENTER_OLDWORLD()
{
* *// инициализация глобальных НПС
* *B_InitNpcGlobals();
* *// в зависимости от главы вызвать соответствующую функцию
* *if (Kapitel >= 1) * { B_ENTER_OLDWORLD_Kapitel_1(); };
* *if (Kapitel >= 2) * { B_ENTER_OLDWORLD_Kapitel_2(); };
* *if (Kapitel >= 3) * { B_ENTER_OLDWORLD_Kapitel_3(); };
* *if (Kapitel >= 4) * { B_ENTER_OLDWORLD_Kapitel_4(); };
* *if (Kapitel >= 5) * { B_ENTER_OLDWORLD_Kapitel_5(); };
* *if (Kapitel >= 6) * { B_ENTER_OLDWORLD_Kapitel_6(); };
* *// задать текущий уровень
* *CurrentLevel = OLDWORLD_ZEN;
* *// инициализация глобальных НПС (уже было, можно удалить)
* *B_InitNpcGlobals();
* *// если Бифф член партии ГГ и Бифф жив
* *if(DJG_BiffParty == TRUE) && (Npc_IsDead(Biff) == FALSE)
* *{
* * * *// если ГГ отдает Биффу половину добычи
* * * *if(DJG_Biff_HalbeHalbe == TRUE)
* * * *{
* * * * * *// отказ от диалога на 500мс
* * * * * *Npc_SetRefuseTalk(Biff,500);
* * * *}
* * * *else
* * * *{
* * * * * *// отказ от диалога на 300мс
* * * * * *Npc_SetRefuseTalk(Biff,300);
* * * *};
* *};
* *// если Бильгот мертв и ГГ вел его за перевал
* *if(Npc_IsDead(Bilgot) == TRUE) && (MIS_RescueBilgot == LOG_RUNNING)
* *{
* * * *// задание провалено
* * * *MIS_RescueBilgot = LOG_FAILED;
* *}; *
};


* *10. Функция получения текущего дня.

Файл B_GetDayPlus.d

// ************************************************** **************
// Функция получения текущего дня
// ************************************************** **************
// Возвращаемое значение: текущий день

func int B_GetDayPlus()
{
* *// если время между 22-00 и 23-59
* *if(Wld_IsTime(22,00,23,59))
* *{
* * * *// возвратить следующий день
* * * *// (так сделано для того, чтобы при получении задания, когда ГГ говорят приходи завтра или утром, у него было время что-то успеть сделать)
* * * *return (Wld_GetDay() + 1);
* *};
* *return Wld_GetDay();
};


* *11. Функция получения стоимости обучения ГГ.

Файл B_GetLearnCostAttribute.d

// ************************************************** **************
// Функция получения стоимости обучения ГГ
// ************************************************** **************
// Аргументы: oth - обучаемый НПС (ГГ), attribut - аттрибут
// Возвращаемое значение: стоимость обучения

func int B_GetLearnCostAttribute(var C_NPC oth,var int attribut)
{
* *// в зависимости от улучшаемого аттрибута определяется стоимость его увеличения на единицу
* *var int kosten;
* *kosten = 0;
* *// если сила
* *if(attribut == ATR_STRENGTH)
* *{
* * * *if(oth.aivar[REAL_STRENGTH] >= 120) * * * * { kosten = 5; }
* * * *else if(oth.aivar[REAL_STRENGTH] >= 90) * * { kosten = 4; }
* * * *else if(oth.aivar[REAL_STRENGTH] >= 60) * * { kosten = 3; }
* * * *else if(oth.aivar[REAL_STRENGTH] >= 30) * * { kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* *};
* *// если ловкость
* *if(attribut == ATR_DEXTERITY)
* *{
* * * *if(oth.aivar[REAL_DEXTERITY] >= 120) * * * *{ kosten = 5; }
* * * *else if(oth.aivar[REAL_DEXTERITY] >= 90) * *{ kosten = 4; }
* * * *else if(oth.aivar[REAL_DEXTERITY] >= 60) * *{ kosten = 3; }
* * * *else if(oth.aivar[REAL_DEXTERITY] >= 30) * *{ kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* *};
* *// если мана
* *if (attribut == ATR_MANA_MAX)
* *{ * * *
* * * *if(oth.aivar[REAL_MANA_MAX] >= 120) * * * * { kosten = 5; }
* * * *else if(oth.aivar[REAL_MANA_MAX] >= 90) * * { kosten = 4; }
* * * *else if(oth.aivar[REAL_MANA_MAX] >= 60) * * { kosten = 3; }
* * * *else if(oth.aivar[REAL_MANA_MAX] >= 30) * * { kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* *};
* *// стоимость обучения
* *return kosten;
};


* *12. Функция получения стоимости обучения навыкам.

Файл B_GetLearnCostTalent.d

// ************************************************** **************
// Функция получения стоимости обучения навыкам
// ************************************************** **************
// Аргументы: oth - обучаемый НПС (ГГ), talent - навык, skill - уровень мастерства
// Возвращаемое значение: стоимость обучения

func int B_GetLearnCostTalent(var C_NPC oth,var int talent,var int skill)
{
* *var int kosten;
* *kosten = 0;
* *// повышение владения кругом магии
* *if(talent == NPC_TALENT_MAGE)
* *{
* * * *if(skill >= 1) && (skill <= 6)
* * * *{
* * * * * *kosten = 5;
* * * *};
* *};
* *// владение одноручником
* *if(talent == NPC_TALENT_1H)
* *{ *
* * * *if(oth.aivar[REAL_TALENT_1H] >= 120) * * * *{ kosten = 5; }
* * * *else if(oth.aivar[REAL_TALENT_1H] >= 90) * *{ kosten = 4; }
* * * *else if(oth.aivar[REAL_TALENT_1H] >= 60) * *{ kosten = 3; }
* * * *else if(oth.aivar[REAL_TALENT_1H] >= 30) * *{ kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* * * *kosten = (kosten * skill);
* *};
* *// владение двуручником
* *if(talent == NPC_TALENT_2H)
* *{ *
* * * *if(oth.aivar[REAL_TALENT_2H] >= 120) * * * *{ kosten = 5; }
* * * *else if(oth.aivar[REAL_TALENT_2H] >= 90) * *{ kosten = 4; }
* * * *else if(oth.aivar[REAL_TALENT_2H] >= 60) * *{ kosten = 3; }
* * * *else if(oth.aivar[REAL_TALENT_2H] >= 30) * *{ kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* * * *kosten = (kosten * skill);
* *};
* *// владение луком
* *if(talent == NPC_TALENT_BOW)
* *{ *
* * * *if(oth.aivar[REAL_TALENT_BOW] >= 120) * * * { kosten = 5; }
* * * *else if(oth.aivar[REAL_TALENT_BOW] >= 90) * { kosten = 4; }
* * * *else if(oth.aivar[REAL_TALENT_BOW] >= 60) * { kosten = 3; }
* * * *else if(oth.aivar[REAL_TALENT_BOW] >= 30) * { kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* * * *kosten = (kosten * skill);
* *};
* *// владение арбалетом
* *if(talent == NPC_TALENT_CROSSBOW)
* *{ *
* * * *if(oth.aivar[REAL_TALENT_CROSSBOW] >= 120) * * *{ kosten = 5; }
* * * *else if(oth.aivar[REAL_TALENT_CROSSBOW] >= 90) *{ kosten = 4; }
* * * *else if(oth.aivar[REAL_TALENT_CROSSBOW] >= 60) *{ kosten = 3; }
* * * *else if(oth.aivar[REAL_TALENT_CROSSBOW] >= 30) *{ kosten = 2; }
* * * *else * * * * * * * * * * * * * * * * * * * * * *{ kosten = 1; };
* * * *kosten = (kosten * skill);
* *};
* *// подкрадывание или акробатика
* *if(talent == NPC_TALENT_SNEAK) ¦¦ (talent == NPC_TALENT_ACROBAT)
* *{
* * * *kosten = 5;
* *};
* *// вскрытие замков или карманная кража
* *if(talent == NPC_TALENT_PICKLOCK) ¦¦ (talent == NPC_TALENT_PICKPOCKET)
* *{
* * * *kosten = 10;
* *};
* *// кузнечное дело
* *if(talent == NPC_TALENT_SMITH)
* *{
* * * *if(skill == WEAPON_Common) * * * * * * *{ kosten = 2; }
* * * *else if(skill == WEAPON_1H_Special_01) *{ kosten = 4; }
* * * *else if(skill == WEAPON_2H_Special_01) *{ kosten = 4; }
* * * *else if(skill == WEAPON_1H_Special_02) *{ kosten = 6; }
* * * *else if(skill == WEAPON_2H_Special_02) *{ kosten = 6; }
* * * *else if(skill == WEAPON_1H_Special_03) *{ kosten = 8; }
* * * *else if(skill == WEAPON_2H_Special_03) *{ kosten = 8; }
* * * *else if(skill == WEAPON_1H_Special_04) *{ kosten = 10;}
* * * *else if(skill == WEAPON_2H_Special_04) *{ kosten = 10;}
* * * *else if(skill == WEAPON_1H_Harad_01) * *{ kosten = 4; }
* * * *else if(skill == WEAPON_1H_Harad_02) * *{ kosten = 6; }
* * * *else if(skill == WEAPON_1H_Harad_03) * *{ kosten = 8; }
* * * *else if(skill == WEAPON_1H_Harad_04) * *{ kosten = 10;};
* *};
* *// алхимия
* *if(talent == NPC_TALENT_ALCHEMY)
* *{
* * * *if * * (skill == POTION_Health_01) * * *{ kosten = 1; }
* * * *else if(skill == POTION_Health_02) * * *{ kosten = 3; }
* * * *else if(skill == POTION_Health_03) * * *{ kosten = 5; }
* * * *else if(skill == POTION_Health_04) * * *{ kosten = 8; }
* * * *else if(skill == POTION_Mana_01 *) * * *{ kosten = 1; }
* * * *else if(skill == POTION_Mana_02 *) * * *{ kosten = 3; }
* * * *else if(skill == POTION_Mana_03 *) * * *{ kosten = 5; }
* * * *else if(skill == POTION_Mana_04 *) * * *{ kosten = 8; }
* * * *else if(skill == POTION_Speed * *) * * *{ kosten = 5; }
* * * *else if(skill == POTION_Perm_STR ) * * *{ kosten = 20;}
* * * *else if(skill == POTION_Perm_DEX ) * * *{ kosten = 20;}
* * * *else if(skill == POTION_Perm_Mana) * * *{ kosten = 10;}
* * * *else if(skill == POTION_Perm_Health) * *{ kosten = 10;}
* * * *else if(skill == POTION_MegaDrink) * * *{ kosten = 20;};
* *};
* *// разделка животных
* *if(talent == NPC_TALENT_TAKEANIMALTROPHY)
* *{
* * * *if * * (skill == TROPHY_Teeth * * * ) * { kosten = 3; }
* * * *else if(skill == TROPHY_Claws * * * ) * { kosten = 3; }
* * * *else if(skill == TROPHY_Fur * * * * ) * { kosten = 5; }
* * * *else if(skill == TROPHY_Heart * * * ) * { kosten = 3; }
* * * *else if(skill == TROPHY_ShadowHorn *) * { kosten = 3; }
* * * *else if(skill == TROPHY_FireTongue *) * { kosten = 1; }
* * * *else if(skill == TROPHY_BFWing * * *) * { kosten = 1; }
* * * *else if(skill == TROPHY_BFSting * * ) * { kosten = 1; }
* * * *else if(skill == TROPHY_Mandibles * ) * { kosten = 1; }
* * * *else if(skill == TROPHY_CrawlerPlate) * { kosten = 3; }
* * * *else if(skill == TROPHY_DrgSnapperHorn) { kosten = 1; }
* * * *else if(skill == TROPHY_DragonScale ) * { kosten = 3; }
* * * *else if(skill == TROPHY_DragonBlood ) * { kosten = 3; }
* * * *else if(skill == TROPHY_ReptileSkin ) * { kosten = 3; };
* *}; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *// иностранные языки
* *if(talent == NPC_TALENT_FOREIGNLANGUAGE)
* *{
* * * *if * * (skill == LANGUAGE_1) * * * *{ kosten = 5; }
* * * *else if(skill == LANGUAGE_2) * * * *{ kosten = 10;}
* * * *else if(skill == LANGUAGE_3) * * * *{ kosten = 15;};
* *};
* *// обучение Огонька
* *if(talent == NPC_TALENT_WISPDETECTOR)
* *{
* * * *if * * (skill == WISPSKILL_NF * *) *{ kosten = 0; }
* * * *else if(skill == WISPSKILL_FF * *) *{ kosten = 1; }
* * * *else if(skill == WISPSKILL_NONE *) *{ kosten = 2; }
* * * *else if(skill == WISPSKILL_RUNE *) *{ kosten = 3; }
* * * *else if(skill == WISPSKILL_MAGIC ) *{ kosten = 4; }
* * * *else if(skill == WISPSKILL_FOOD *) *{ kosten = 5; }
* * * *else if(skill == WISPSKILL_POTIONS) { kosten = 5; };
* *};
* *// изготовление рун
* *if(talent == NPC_TALENT_RUNES)
* *{
* * * *if * * (skill == SPL_PalLight * * * ) * { kosten = 1; }
* * * *else if(skill == SPL_PalLightHeal * ) * { kosten = 3; }
* * * *else if(skill == SPL_PalHolyBolt * *) * { kosten = 3; }
* * * *else if(skill == SPL_PalMediumHeal *) * { kosten = 5; }
* * * *else if(skill == SPL_PalRepelEvil * ) * { kosten = 5; }
* * * *else if(skill == SPL_PalFullHeal * *) * { kosten = 10;}
* * * *else if(skill == SPL_PalDestroyEvil ) * { kosten = 10;}
* * * *else if(skill == SPL_PalTeleportSecret) { kosten = 5; }
* * * *else if(skill == SPL_Light * * * * *) * { kosten = 1; }
* * * *else if(skill == SPL_Firebolt * * * ) * { kosten = 5; }
* * * *else if(skill == SPL_LightHeal * * *) * { kosten = 3; }
* * * *else if(skill == SPL_SummonGoblinSkeleton) { kosten = 3;}
* * * *else if(skill == SPL_Zap * * * * * *) * { kosten = 3; }
* * * *else if(skill == SPL_Icebolt * * * *) * { kosten = 5; }
* * * *else if(skill == SPL_InstantFireball) * { kosten = 10;}
* * * *else if(skill == SPL_SummonWolf * * ) * { kosten = 5; }
* * * *else if(skill == SPL_WindFist * * * ) * { kosten = 5; }
* * * *else if(skill == SPL_Sleep * * * * *) * { kosten = 5; }
* * * *else if(skill == SPL_Charm * * * * *) * { kosten = 5; }
* * * *else if(skill == SPL_IceLance * * * ) * { kosten = 5; } *
* * * *else if(skill == SPL_Whirlwind * * *) * { kosten = 5; }
* * * *else if(skill == SPL_MediumHeal * * ) * { kosten = 5; }
* * * *else if(skill == SPL_LightningFlash ) * { kosten = 5; }
* * * *else if(skill == SPL_ChargeFireball ) * { kosten = 10;}
* * * *else if(skill == SPL_SummonSkeleton ) * { kosten = 10;}
* * * *else if(skill == SPL_Fear * * * * * ) * { kosten = 5; }
* * * *else if(skill == SPL_IceCube * * * *) * { kosten = 10;}
* * * *else if(skill == SPL_Thunderstorm * ) * { kosten = 5; }
* * * *else if(skill == SPL_Geyser * * * * ) * { kosten = 10;}
* * * *else if(skill == SPL_ChargeZap * * *) * { kosten = 10;}
* * * *else if(skill == SPL_SummonGolem * *) * { kosten = 15;}
* * * *else if(skill == SPL_DestroyUndead *) * { kosten = 10;}
* * * *else if(skill == SPL_Pyrokinesis * *) * { kosten = 10;}
* * * *else if(skill == SPL_WaterFist * * *) * { kosten = 10;} *
* * * *else if(skill == SPL_Firestorm * * *) * { kosten = 15;}
* * * *else if(skill == SPL_IceWave * * * *) * { kosten = 20;}
* * * *else if(skill == SPL_SummonDemon * *) * { kosten = 20;}
* * * *else if(skill == SPL_FullHeal * * * ) * { kosten = 10;}
* * * *else if(skill == SPL_MasterOfDisaster) *{ kosten = 15;}
* * * *else if(skill == SPL_Firerain * * * ) * { kosten = 20;}
* * * *else if(skill == SPL_BreathOfDeath *) * { kosten = 20;}
* * * *else if(skill == SPL_MassDeath * * *) * { kosten = 20;}
* * * *else if(skill == SPL_ArmyOfDarkness ) * { kosten = 20;}
* * * *else if(skill == SPL_Shrink * * * * ) * { kosten = 20;}
* * * *else * * * * * * * * * * * * * * * * * *{ kosten = 5; };
* *};
* *// стоимость
* *return kosten;
};

Ответить с цитированием
Старый 12.08.2005, 09:24   #230
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *13. Функция создания трофеев у убитых монстров.

Файл B_GiveDeathInv.d

// ************************************************** **************
// Функция создания трофеев у убитых монстров.
// ************************************************** **************
// Аргументы: slf - убитый монстр

func void B_GiveDeathInv(var C_NPC slf)
{
* *// если труп обыскан
* *if(slf.aivar[AIV_DeathInvGiven] == TRUE)
* *{
* * * *return;
* *};
* *// если ГГ умеет добывать зубы
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Teeth] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WOLF) * * * * * *{ * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_ICEWOLF) * * * * { * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WARG) * * * * * *{ * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SNAPPER) * * * * { * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGONSNAPPER) * { * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_RAZOR) * * * * * { * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SHADOWBEAST) * * { * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_BLOODHOUND) * * *{ * CreateInvItems(slf,ItAt_Teeth * * ,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SWAMPSHARK) * * *{ * CreateInvItems(slf,ItAt_SharkTeeth,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_TROLL) * * * * * { * CreateInvItems(slf,ItAt_TrollTooth,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_TROLL_BLACK) * * { * CreateInvItems(slf,ItAt_TrollTooth,4); *};
* *};
* *// если ГГ умеет добывать когти
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Claws] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WARAN) * * * * * { * CreateInvItems(slf,ItAt_Claw * * *,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_FIREWARAN) * * * { * CreateInvItems(slf,ItAt_Claw * * *,4); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SNAPPER) * * * * { * CreateInvItems(slf,ItAt_Claw * * *,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_RAZOR) * * * * * { * CreateInvItems(slf,ItAt_Claw * * *,2); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGONSNAPPER) * { * CreateInvItems(slf,ItAt_Claw * * *,4); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SHADOWBEAST) * * { * CreateInvItems(slf,ItAt_Claw * * *,4); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_BLOODHOUND) * * *{ * CreateInvItems(slf,ItAt_Claw * * *,4); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_LURKER) * * * * *{ * CreateInvItems(slf,ItAt_LurkerClaw,1); *}; * * *
* *};
* *// если ГГ умеет добывать шкуру
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Fur] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SHEEP) * * * * * { * CreateInvItems(slf,ItAt_SheepFur * * * ,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WOLF) * * * * * *{ * CreateInvItems(slf,ItAt_WolfFur * * * *,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_ICEWOLF) * * * * { * CreateInvItems(slf,ItAt_WolfFur * * * *,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WARG) * * * * * *{ * CreateInvItems(slf,ItAt_WargFur * * * *,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SHADOWBEAST) * * { * CreateInvItems(slf,ItAt_ShadowFur * * *,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_TROLL) * * * * * { * CreateInvItems(slf,ItAt_TrollFur * * * ,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_TROLL_BLACK) * * { * CreateInvItems(slf,ItAt_TrollBlackFur *,1); }; *
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_Keiler) * * * * *{ * CreateInvItems(slf,ItAt_Addon_KeilerFur,1); };
* *};
* *// если ГГ умеет добывать кожу рептилий
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_ReptileSkin] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_LURKER) * * * * *{ * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SNAPPER) * * * * { * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_RAZOR) * * * * * { * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGONSNAPPER) * { * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_WARAN) * * * * * { * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_FIREWARAN) * * * { * CreateInvItems(slf,itat_LurkerSkin,1); *};
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SWAMPSHARK) * * *{ * CreateInvItems(slf,ItAt_SharkSkin ,1); *}; *
* *};
* *// если ГГ умеет добывать сердца
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Heart] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_STONEGOLEM) * * *{ * CreateInvItems(slf,ItAt_StoneGolemHeart,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_FIREGOLEM) * * * { * CreateInvItems(slf,ItAt_FireGolemHeart ,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_ICEGOLEM) * * * *{ * CreateInvItems(slf,ItAt_IceGolemHeart *,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON) * * * * * { * CreateInvItems(slf,ItAt_DemonHeart * * ,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON_LORD) * * *{ * CreateInvItems(slf,ItAt_DemonHeart * * ,1); };
* *};
* *// если ГГ умеет добывать рог мракориса
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_ShadowHorn] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_SHADOWBEAST) * * { * CreateInvItems(slf,ItAt_ShadowHorn,1); *};
* *};
* *// если ГГ умеет добывать огненный язык
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_FireTongue] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_FIREWARAN) * * * { * CreateInvItems(slf,ItAt_WaranFiretongue,1); };
* *};
* *// если ГГ умеет добывать крылья кровяного шершня
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_BFWing] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_BLOODFLY) * * * *{ * CreateInvItems(slf,ItAt_Wing,2); };
* *};
* *// если ГГ умеет добывать жало кровяного шершня
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_BFSting] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_BLOODFLY) * * * *{ * CreateInvItems(slf,ItAt_Sting,1); };
* *};
* *// если ГГ умеет добывать жвало
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Mandibles] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_GIANT_BUG) * * * * * { * CreateInvItems(slf,ItAt_BugMandibles, * *1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_MINECRAWLER) * * * * { * CreateInvItems(slf,ItAt_CrawlerMandibles,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_MINECRAWLERWARRIOR) *{ * CreateInvItems(slf,ItAt_CrawlerMandibles,1); };
* *};
* *// если ГГ умеет добывать панцирь ползунов
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_CrawlerPlate] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_MINECRAWLER) * * * * { * CreateInvItems(slf,ItAt_CrawlerPlate,1); };
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_MINECRAWLERWARRIOR) *{ * CreateInvItems(slf,ItAt_CrawlerPlate,2); };
* *};
* *// если ГГ умеет добывать рог остера
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DrgSnapperHorn] == TRUE)
* *{
* * * *if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGONSNAPPER) * { * CreateInvItems(slf,ItAt_DrgSnapperHorn,2); *};
* *};
* *// если ГГ умеет добывать чешую дракона
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DragonScale] == TRUE)
* *{
* * * *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(FireDragonIsland)) * { * CreateInvItems(slf,ItAt_DragonScale,12); };
* * * *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Undeaddragon)) * * * { * CreateInvItems(slf,ItAt_DragonScale,12); };
* *};
* *// если ГГ умеет добывать кровь дракона
* *if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DragonBlood] == TRUE)
* *{
* * * *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(FireDragonIsland)) * { * CreateInvItems(slf,ItAt_DragonBlood,2); };
* * * *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Undeaddragon)) * * * { * CreateInvItems(slf,ItAt_DragonBlood,2); };
* *};
* *// что и у кого может добыть ГГ без умений
* *if * * (slf.aivar[AIV_MM_REAL_ID] *== ID_MEATBUG) * * * { * CreateInvItems(slf,ItAt_MeatbugFlesh * * * * ,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_DRAGON_UNDEAD) { * CreateInvItems(slf,ItAt_UndeadDragonSoulStone,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_DRAGON_FIRE) * { * CreateInvItems(slf,ItAt_FireDragonHeart * * *,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_DRAGON_ICE) * *{ * CreateInvItems(slf,ItAt_IceDragonHeart * * * ,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_DRAGON_ROCK) * { * CreateInvItems(slf,ItAt_RockDragonHeart * * *,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_DRAGON_SWAMP) *{ * CreateInvItems(slf,ItAt_SwampDragonHeart * * ,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_GOBBO_SKELETON){ * CreateInvItems(slf,ItAt_GoblinBone * * * * * ,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] *== ID_SKELETON) * * *{ * CreateInvItems(slf,ItAt_SkeletonBone * * * * ,1); }
* *else if(self.aivar[AIV_MM_REAL_ID] == ID_BLATTCRAWLER) *{ * CreateInvItems(slf,ItAt_Addon_BCKopf * * * * ,1); };
* *// что может ГГ случайным образом добыть из гоблина
* *GoblinGreen_Randomizer = Hlp_Random(100);
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_GREEN) && (GoblinGreen_Randomizer == 0)
* *{ * CreateInvItems(slf,ItMi_SilverRing,1); *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_GREEN) && (GoblinGreen_Randomizer <= 5)
* *{ * CreateInvItems(slf,ItPl_Mushroom_01,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_GREEN) && (GoblinGreen_Randomizer <= 15)
* *{ * CreateInvItems(slf,Itmi_Gold,5); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_GREEN) && (GoblinGreen_Randomizer <= 30)
* *{ * CreateInvItems(slf,ItFo_Fish,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_GREEN) && (GoblinGreen_Randomizer <= 50)
* *{ * CreateInvItems(slf,ItMi_Gold,2); };
* *// что может ГГ случайным образом добыть из черного гоблина
* *GoblinBlack_Randomizer = Hlp_Random(100);
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_BLACK) && (GoblinBlack_Randomizer == 0)
* *{ * CreateInvItems(slf,ItMi_GoldRing,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_BLACK) && (GoblinBlack_Randomizer <= 5)
* *{ * CreateInvItems(slf,ItFo_Fish,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_BLACK) && (GoblinBlack_Randomizer <= 15)
* *{ * CreateInvItems(slf,Itmi_Gold,10); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_BLACK) && (GoblinBlack_Randomizer <= 30)
* *{ * CreateInvItems(slf,ItPl_Mushroom_02,1); }
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_GOBBO_BLACK) && (GoblinBlack_Randomizer <= 50)
* *{ * CreateInvItems(slf,ItMi_Gold,5); };
* *// что может ГГ случайным образом добыть из орков
* *Orc_Randomizer *= Hlp_Random (10);
* *// воин орков
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer == 0) * * * *
* *{ *
* * * *CreateInvItems(slf,ItPo_Health_02,1);
* * * *CreateInvItems(slf,ItMI_Gold * * ,2); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer == 1)
* *{ *
* * * *CreateInvItems(slf,ItPo_Health_01,1);
* * * *CreateInvItems(slf,ItFoMuttonRaw ,1); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer == 2)
* *{ *
* * * *CreateInvItems(slf,ItPo_Health_01,2 *);
* * * *CreateInvItems(slf,ItMI_Gold * * ,18 ); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer == 3)
* *{ *
* * * *CreateInvItems(slf,ItFo_Booze * * ,1);
* * * *CreateInvItems(slf,ItMi_SilverRing,1); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer == 4)
* *{ *
* * * *CreateInvItems(slf,ItPl_Health_Herb_01,1);
* * * *CreateInvItems(slf,ItMI_Gold * * * * *,4); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR) && (Orc_Randomizer <= 7)
* *{ *
* * * *CreateInvItems(slf,ItMI_Gold,9);
* *};
* *// шаман орков
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer == 0)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03,1);
* * * *CreateInvItems(slf,ItMI_Gold * ,5);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer == 1)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_02,2);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer == 2)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_02,1);
* * * *CreateInvItems(slf,ItMi_Coal * ,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer == 3)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_01,2);
* * * *CreateInvItems(slf,ItMI_Gold * ,12); * *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer == 4)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_01,1);
* * * *CreateInvItems(slf,ItMi_Sulfur ,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) && (Orc_Randomizer <= 8 )
* *{
* * * *CreateInvItems(slf,ItPl_Mana_Herb_02,2 );
* * * *CreateInvItems(slf,ItMI_Gold * * * *,8 ); * *
* *};
* *// элитный воин орков
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer == 0)
* *{
* * * *CreateInvItems(slf,ItAt_WolfFur *,1);
* * * *CreateInvItems(slf,ItPo_Health_03,1);
* * * *CreateInvItems(slf,ItFoMutton * *,2);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer == 1)
* *{
* * * *CreateInvItems(slf,ItMi_GoldRing ,1);
* * * *CreateInvItems(slf,ItPo_Health_01,1);
* * * *CreateInvItems(slf,ItMi_Gold * * ,26);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer == 2)
* *{
* * * *CreateInvItems(slf,ItSc_LightHeal,1);
* * * *CreateInvItems(slf,ItLSTorch * * ,2);
* * * *CreateInvItems(slf,ItAt_Teeth * *,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer <= 5)
* *{
* * * *CreateInvItems(slf,ItMi_Gold * * ,19);
* * * *CreateInvItems(slf,ItPo_Health_02,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer == 6)
* *{
* * * *CreateInvItems(slf,ItAt_WargFur,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_ORCELITE) && (Orc_Randomizer <= 9)
* *{
* * * *CreateInvItems(slf,ItMi_Gold * * ,22);
* * * *CreateInvItems(slf,ItPo_Health_01,1);
* *};
* *// что может ГГ случайным образом добыть из демонов
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_DEMON) && (Orc_Randomizer == 0)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03 ,2);
* * * *CreateInvItems(slf,ItMi_GoldRing,1); * *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON) && (Orc_Randomizer <= 2)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03 *,1);
* * * *CreateInvItems(slf,ItPo_Health_02,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON) && (Orc_Randomizer <= 6)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_02,2);
* * * *CreateInvItems(slf,ItMi_Pitch *,1);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_02 *,1);
* * * *CreateInvItems(slf,ItPo_Health_02,1); *
* *};
* *// что может ГГ случайным образом добыть из лордов демонов
* *if * * (slf.aivar[AIV_MM_REAL_ID] == ID_DEMON_LORD) && (Orc_Randomizer <= 1)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03 *,2);
* * * *CreateInvItems(slf,ItPo_Health_03,2);
* * * *CreateInvItems(slf,ItSc_SumDemon ,1); *
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON_LORD) && (Orc_Randomizer <= 5)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03 *,2);
* * * *CreateInvItems(slf,ItPo_Health_03,2);
* *}
* *else if(slf.aivar[AIV_MM_REAL_ID] == ID_DEMON_LORD)
* *{
* * * *CreateInvItems(slf,ItPo_Mana_03 *,1);
* * * *CreateInvItems(slf,ItPo_Health_03,1); *
* *}; *
* *// установить флаг труп обыскан
* *slf.aivar[AIV_DeathInvGiven] = TRUE;
};


* *14. Функция передачи предметов от одного НПС другому.

Файл B_GiveInvItems.d

// ************************************************** **************
// Функция передачи предметов от одного НПС другому
// ************************************************** **************
// Аргументы: giver - дающий НПС, taker - берущий НПС, itemInstance - предмет, amount - кол-во предметов
// Возвращаемое значение: TRUE - предмет(ы) переданы, FALSE - передача невозможна

// Внимание: аргумент itemInstance является переопределенным типом (C_Item -> int)

func int B_GiveInvItems(var C_NPC giver,var C_NPC taker,var int itemInstance,var int amount)
{
* *// если дающий ГГ
* *if(Npc_IsPlayer(giver))
* *{
* * * *// если кол-во передаваемых предметов больше имеющихся
* * * *if(amount > Npc_HasItems(giver,itemInstance))
* * * *{
* * * * * *return FALSE;
* * * *};
* *};
* *// если передавать ничего не надо
* *if(amount == 0)
* *{
* * * *return TRUE;
* *};
* *// удалить предметы у дающего
* *Npc_RemoveInvItems(giver,itemInstance,amount);
* *// дать предметы берущему
* *CreateInvItems(taker,itemInstance,amount);
* *var string concatText;
* *var string itemname;
* *// имя предмета
* *itemname = item.name;
* *// если дающий ГГ
* *if(Npc_IsPlayer(giver))
* *{
* * * *// если деньги
* * * *if(itemInstance == ItMi_Gold)
* * * *{
* * * * * *// вывод строки: amount + " золотых передано"
* * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_GoldGegebe n);
* * * * * *AI_PrintScreen(concatText,-1,YPOS_GoldGiven,FONT_ScreenSmall,2);
* * * *}
* * * *else
* * * *{
* * * * * *// если предмет один
* * * * * *if(amount == 1)
* * * * * *{
* * * * * * * *// вывод строки: itemname + " дают"
* * * * * * * *concatText = ConcatStrings(itemname,PRINT_Addon_gegeben);
* * * * * * * *AI_PrintScreen(concatText,-1,YPOS_ItemGiven,FONT_ScreenSmall,2);
* * * * * *} *
* * * * * *else
* * * * * *{
* * * * * * * *// вывод строки: amount + " предметов передано" + " (" + itemname + ")"
* * * * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_ItemsGegeb en);
* * * * * * * *concatText = ConcatStrings(concatText," (");
* * * * * * * *concatText = ConcatStrings(concatText,itemname);
* * * * * * * *concatText = ConcatStrings(concatText,")");
* * * * * * * *AI_PrintScreen(concatText,-1,YPOS_ItemGiven,FONT_ScreenSmall,2);
* * * * * *}; *
* * * *};
* *}
* *// иначе, если берущий ГГ
* *else if(Npc_IsPlayer(taker))
* *{
* * * *// если деньги
* * * *if(itemInstance == ItMi_Gold)
* * * *{
* * * * * *// вывод строки: amount + " золотых принято"
* * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_GoldErhalt en);
* * * * * *AI_PrintScreen(concatText,-1,YPOS_GoldTaken,FONT_ScreenSmall,2);
* * * *}
* * * *else
* * * *{
* * * * * *// если предмет один
* * * * * *if(amount == 1)
* * * * * *{
* * * * * * * *// вывод строки: itemname + " получают"
* * * * * * * *concatText = ConcatStrings(itemname,PRINT_Addon_erhalten);
* * * * * * * *AI_PrintScreen(concatText,-1,YPOS_ItemTaken,FONT_ScreenSmall,2);
* * * * * *} *
* * * * * *else
* * * * * *{
* * * * * * * *// вывод строки: amount + " предметов принято" + " (" + itemname + ")"
* * * * * * * *concatText = ConcatStrings(IntToString(amount),PRINT_ItemsErhal ten);
* * * * * * * *concatText = ConcatStrings(concatText," (");
* * * * * * * *concatText = ConcatStrings(concatText,itemname);
* * * * * * * *concatText = ConcatStrings(concatText,")");
* * * * * * * *AI_PrintScreen(concatText,-1,YPOS_ItemTaken,FONT_ScreenSmall,2);
* * * * * *};
* * * *};
* *}; *
* *return TRUE;
};


* *15. Функция начисления ГГ экспы.

Файл B_GivePlayerXP.d

// ************************************************** **************
// Функция начисления ГГ экспы
// ************************************************** **************
// Аргументы: add_xp - начисляемая экспа

func void B_GivePlayerXP(var int add_xp)
{
* *// если уровень ГГ равен 0
* *if(hero.level == 0)
* *{
* * * *// до следующего уровня необходимо 500 экспы
* * * *hero.exp_next = 500;
* *};
* *// добавить ГГ экспу
* *hero.exp = hero.exp + add_xp;
* *var string concatText;
* *// вывод текста: "Опыт + " + add_xp
* *concatText = PRINT_XPGained;
* *concatText = ConcatStrings(concatText,IntToString(add_xp));
* *PrintScreen(concatText,-1,YPOS_XPGained,FONT_ScreenSmall,2);
* *// если экспы достаточно для повышения уровня
* *if(hero.exp >= hero.exp_next)
* *{
* * * *// уровень++
* * * *hero.level = hero.level + 1;
* * * *// значение экспы для перехода на новый уровень
* * * *// общая формула - 500* ((hero.level + 2) / 2) * (hero.level + 1))
* * * *hero.exp_next = hero.exp_next + ((hero.level + 1) * 500);
* * * *// увеличить макс. жизнь на 12
* * * *hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL;
* * * *// увеличить текущую жизнь на 12
* * * *hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL;
* * * *// увеличить очки обучения на 10
* * * *hero.LP = hero.LP + LP_PER_LEVEL;
* * * *// вывод строки: "Следующий уровень!"
* * * *PrintScreen(PRINT_LevelUp,-1,YPOS_LevelUp,FONT_Screen,2);
* * * *// музычка
* * * *Snd_Play("LevelUp");
* *};
* *// закрыть в дневнике завершенные квесты
* *B_Checklog();
};


* *16. Функция возвращения Грега в Яркендар.

Файл B_GregIsBack.d

// ************************************************** **************
// Функция возвращения Грега в Яркендар
// (вызывается при открытии ГГ сундука Грега в Яркендаре)
// ************************************************** **************

func void GregIsBack_S1()
{
* *// если флаг возврата не установлен
* *if(GregIsBack == FALSE)
* *{
* * * *// вставить Грега в Яркендар
* * * *Wld_InsertNpc(PIR_1320_Addon_Greg,"ADW_PIRATECAMP _GREG"); *
* * * *// сменить распорядки дня
* * * *B_StartOtherRoutine(Bill,"GREGISBACK"); * * * * * * // Билл
* * * *B_StartOtherRoutine(Morgan,"GREGISBACK"); * * * * * // Морган
* * * *B_StartOtherRoutine(AlligatorJack,"GREGISBACK"); * *// Аллигатор Джек
* * * *// вставить расчленителей в каньон
* * * *Wld_InsertNpc(CanyonRazor07,"ADW_CANYON_MINE1_01" );
* * * *Wld_InsertNpc(CanyonRazor08,"ADW_CANYON_PATH_TO_L IBRARY_07A");
* * * *Wld_InsertNpc(CanyonRazor09,"ADW_CANYON_PATH_TO_L IBRARY_36");
* * * *Wld_InsertNpc(CanyonRazor10,"ADW_CANYON_PATH_TO_M INE2_04");
* *};
* *// установить флаг возврата
* *GregIsBack = TRUE;
};


* *17. Функция инициализации отношений между гильдиями людей.

Файл B_InitGuildsAttitudes.d

// ************************************************** **************
// Функция *инициализации отношений между гильдиями людей
// ************************************************** **************

func void B_InitGuildAttitudes()
{
* *// Примечание: неважно что функция пустая, ничего с ней делать нельзя, существует взаимосвязь с экзешником.
* *// Без этой функции отношения между людьми не будут установлены!!!
};


Ответить с цитированием
Старый 14.08.2005, 09:10   #231
WSA

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Новая версия скриптовой болванки 0,4 Мб

Почти все d-файлы заменены на закомментированные Vam'ом, остальные руcсифицированы / прокомментированы.
Убраны все не использующиеся файлы и вся болванка дополнительно перебрана.
Глюков и ошибок не обнаружено, при использовании компилятора 2.12 убраны все варнинги.

---
2Killer-XXX:
Хотелось бы увидеть описание ф-ий отвечающих за отношение людей в новой броне.
Сори, не совсем понял, о каких именно функциях идет речь. Отношения людей в зависимости от одежды проверяются в файлах
AI\HUMAN\C_Human\C_PlayerIsFakeBandit.d
AI\HUMAN\C_Human\C_PlayerIsFakePirate.d
AI\HUMAN\C_Human\C_PlayerHasFakeGuild.d
и они уже расписаны в этой теме.
Ответить с цитированием
Старый 15.08.2005, 08:56   #232
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *18. Функция инициализации новой главы.

Файл B_Kapitelwechsel.d

// ************************************************** **************
// Функция инициализации новой главы
// ************************************************** **************
// Аргументы: neues_Kapitel - новая глава, aktuelles_Level_Zen - индекс области игрового мира

func void B_Kapitelwechsel(var int neues_Kapitel,var int aktuelles_Level_Zen)
{
* *// текущая глава = новой главе
* *Kapitel = neues_Kapitel;
* *// если глава 1
* *if(neues_Kapitel == 1)
* *{
* * * *// вывод заставки
* * * *IntroduceChapter(KapWechsel_1,KapWechsel_1_Text," chapter1.tga","
chapter_01.wav",6000);
* *}
* *// если глава 2
* *else if(neues_Kapitel == 2)
* *{
* * * *// сброс флагов Секоба и Бенгара
* * * *Sekob.flags = 0;
* * * *Bengar.flags = 0;
* * * *// вывод заставки
* * * *IntroduceChapter(KapWechsel_2,KapWechsel_2_Text," chapter2.tga","
chapter_01.wav",6000);
* *}
* *// если глава 3 (пусто, можно удалить)
* *else if(neues_Kapitel == 3)
* *{ *
* *}
* *// если глава 4
* *else if(neues_Kapitel == 4)
* *{
* * * *// ГГ умеет заряжать Глаз Инноса (можно удалить, должен обучить Пирокар)
* * * *PLAYER_TALENT_ALCHEMY[CHARGE_Innoseye] = TRUE;
* *}
* *// если глава 5
* *else if(neues_Kapitel == 5)
* *{
* * * *// ГГ умеет заряжать Глаз Инноса (можно удалить, должен обучить Пирокар)
* * * *PLAYER_TALENT_ALCHEMY[CHARGE_Innoseye] = TRUE;
* *}
* *// если глава 6
* *else if(neues_Kapitel == 6)
* *{
* * * *// ГГ умеет заряжать Глаз Инноса (можно удалить, должен обучить Пирокар)
* * * *PLAYER_TALENT_ALCHEMY[CHARGE_Innoseye] *= TRUE;
* *};
* *// закрыть в дневнике завершенные квесты
* *B_CheckLog();
* *// если Миненталь
* *if(aktuelles_Level_Zen == OLDWORLD_ZEN)
* *{
* * * *// вход в Миненталь
* * * *B_ENTER_OLDWORLD();
* *};
* *// если Новый мир
* *if(aktuelles_Level_Zen == NEWWORLD_ZEN)
* *{
* * * *// вход в Новый мир
* * * *B_ENTER_NEWWORLD();
* *};
* *// в зависимости от главы задать экспу по умолчанию
* *if(Kapitel == 1) { XP_Ambient = XP_AmbientKap1; }; *// 50
* *if(Kapitel == 2) { XP_Ambient = XP_AmbientKap2; }; *// 100
* *if(Kapitel == 3) { XP_Ambient = XP_AmbientKap3; }; *// 150
* *if(Kapitel == 4) { XP_Ambient = XP_AmbientKap4; }; *// 200
* *if(Kapitel == 5) { XP_Ambient = XP_AmbientKap5; }; *// 250
* *if(Kapitel == 6) { XP_Ambient = XP_AmbientKap6; }; *// 300
};


* *19. Убить НПС.

Файл B_KillNPC.d

// ************************************************** **************
// Убить НПС
// ************************************************** **************
// Аргументы: npcInstance - ссылка на НПС

// Внимание: аргумент npcInstance является переопределенным типом (C_NPC -> int)

func void B_KillNpc(var int npcInstance)
{
* *var C_NPC npc;
* *// получить НПС
* *npc = Hlp_GetNpc(npcInstance);
* *// если НПС существует и жив
* *if(Hlp_IsValidNpc(npc) && !Npc_IsDead(npc))
* *{
* * * *// сброс флагов
* * * *npc.flags = 0;
* * * *// создать в инвентаре Старинную монету
* * * *CreateInvItem(npc,ItMi_OldCoin);
* * * *// фактическая смерть
* * * *Npc_ChangeAttribute(npc,ATR_HITPOINTS,-npc.attribute[ATR_HITPOINTS_MAX]);
* *};
};


* *20. Создать в дневнике новую тему.

Файл B_LogEntry.d

// ************************************************** **************
// Создать в дневнике новую тему
// ************************************************** **************
// Аргументы: topic - тема, entry - первая запись темы

func void B_LogEntry(var string topic,var string entry)
{
* *// добавить тему в дневник
* *Log_AddEntry(topic,entry);
* *// вывод текста: "Ваш дневник дополнен"
* *PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
* *// музычка
* *Snd_Play("LogEntry");
};


* *21. ГГ находит тайник Агона.

Файл B_MageCaveTrigger.d

// ************************************************** **************
// ГГ находит тайник Агона
// Примечание: Триггерная функция - задана Спейсером
// ************************************************** **************

func void B_MAGECAVETRIGGER() *
{
* *// если Магический голем жив и выполняется квест "Испытание огня"
* *if((Npc_IsDead(MagicGolem) == FALSE) && (MIS_SCHNITZELJAGD == LOG_RUNNING))
* *{
* * * *// если Агон существует и жив
* * * *if(Hlp_IsValidNpc(AGON) && !Npc_IsDead(AGON))
* * * *{
* * * * * *// телепортация Агона к тайнику
* * * * * *AI_Teleport(AGON,"NW_TROLLAREA_PATH_02");
* * * * * *// задать новый распорядок дня Агона
* * * * * *Npc_ExchangeRoutine(Agon,"GOLEMLIVES");
* * * * * *// начать его выполнять
* * * * * *AI_ContinueRoutine(AGON);
* * * *};
* *};
};


* *22. Подготовка НПС для перехода из одной области мира в другую.

Файл B_NPC_IsAliveCheck.d

// если НПС готов к переходу, то в соответствующую переменную записывается TRUE
var int SLD_Bullco_is_alive; * *// Буллко
var int SLD_Rod_is_alive; * * * // Род
var int SLD_Cipher_is_alive; * *// Сайфер
var int SLD_Gorn_is_alive; * * *// Горн
var int SLD_Sylvio_is_alive; * *// Сильвио
var int GornDJG_is_alive; * * * // Горн
var int DJG_Angar_is_alive; * * // Ангар
var int DiegoOW_is_alive; * * * // Диего (не используется)
var int GornOw_is_alive; * * * *// Горн *(не используется)
var int Vino_isAlive_Kap3; * * *// Вино
var int Malak_isAlive_Kap3; * * // Малак

// ************************************************** **************
// Подготовка НПС для перехода из одной области мира в другую
// ************************************************** **************
// Аргументы: Zen - область мира

func void B_NPC_IsAliveCheck(var int Zen)
{
* *// новый мир
* *if(Zen == NEWWORLD_ZEN)
* *{
* * * *// если все квесты ГГ для перехода в главу 4 выполнены
* * * *if(MIS_ReadyforChapter4 == TRUE)
* * * *{
* * * * * *// подготовка к переходу Охотников на драконов в Миненталь
* * * * * *var C_NPC SLD_Bullco_OWCheck;
* * * * * *// получить ссылку на Буллко
* * * * * *SLD_Bullco_OWCheck *= Hlp_GetNpc(SLD_807_Bullco);
* * * * * *// если Буллко мертв
* * * * * *if(Npc_IsDead(SLD_Bullco_OWCheck))
* * * * * *{
* * * * * * * *// сбросить флаг
* * * * * * * *SLD_Bullco_is_alive = FALSE;
* * * * * *}
* * * * * *else // жив
* * * * * *{
* * * * * * * *// установить флаг
* * * * * * * *SLD_Bullco_is_alive = TRUE;
* * * * * * * *// удалить Буллко
* * * * * * * *B_RemoveNpc(SLD_Bullco_OWCheck);
* * * * * *}; *
* * * * * *// Род
* * * * * *var C_NPC SLD_Rod_OWCheck;
* * * * * *SLD_Rod_OWCheck = Hlp_GetNpc(SLD_804_Rod);
* * * * * *if(Npc_IsDead(SLD_Rod_OWCheck))
* * * * * *{
* * * * * * * *SLD_Rod_is_alive = FALSE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *SLD_Rod_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(SLD_Rod_OWCheck);
* * * * * *}; *
* * * * * *var C_NPC Sld_821;
* * * * * *// товарищ, с которым болтает Род на ферме Секоба
* * * * * *Sld_821 = Hlp_GetNpc(Sld_821_Soeldner);
* * * * * *// сменить распорядок дня из отсутствия Рода
* * * * * *Npc_ExchangeRoutine(Sld_821,"RODWEG");
* * * * * *// Сайфер *
* * * * * *var C_NPC SLD_Cipher_OWCheck;
* * * * * *SLD_Cipher_OWCheck = Hlp_GetNpc(SLD_803_Cipher);
* * * * * *if(Npc_IsDead(SLD_Cipher_OWCheck))
* * * * * *{
* * * * * * * *SLD_Cipher_is_alive = FALSE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *SLD_Cipher_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(SLD_Cipher_OWCheck);
* * * * * *};
* * * * * *// Горн
* * * * * *var C_NPC SLD_Gorn_OWCheck;
* * * * * *SLD_Gorn_OWCheck = Hlp_GetNpc(PC_Fighter_NW_vor_DJG);
* * * * * *if(Npc_IsDead(SLD_Gorn_OWCheck))
* * * * * *{
* * * * * * * *SLD_Gorn_is_alive = FALSE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *SLD_Gorn_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(SLD_Gorn_OWCheck);
* * * * * *}; *
* * * * * *// Сильвио
* * * * * *var C_NPC SLD_Sylvio_OWCheck;
* * * * * *SLD_Sylvio_OWCheck = Hlp_GetNpc(SLD_806_Sylvio);
* * * * * *if(Npc_IsDead(SLD_Sylvio_OWCheck))
* * * * * *{
* * * * * * * *SLD_Sylvio_is_alive = FALSE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *SLD_Sylvio_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(SLD_Sylvio_OWCheck);
* * * * * *}; *
* * * *};
* *};
* *// Миненталь
* *if(Zen == OLDWORLD_ZEN )
* *{
* * * *// если глава 4 и выше
* * * *if(Kapitel >= 4)
* * * *{
* * * * * *// подготовка к возвращению Охотников на драконов в Новый мир
* * * * * *// Горн
* * * * * *var C_NPC GornDJG_NWCheck;
* * * * * *GornDJG_NWCheck = Hlp_GetNpc(GornDJG);
* * * * * *if(Npc_IsDead(GornDJG))
* * * * * *{
* * * * * * * *GornDJG_is_alive = FALSE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *GornDJG_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(GornDJG_NWCheck);
* * * * * *};
* * * * * *// Ангар
* * * * * *var C_NPC DJG_Angar_NWCheck;
* * * * * *DJG_Angar_NWCheck = Hlp_GetNpc(DJG_Angar);
* * * * * *if(Npc_IsDead(DJG_Angar))
* * * * * *{
* * * * * * * *DJG_Angar_is_alive = FALSE;}
* * * * * *else
* * * * * *{
* * * * * * * *DJG_Angar_is_alive = TRUE;
* * * * * * * *B_RemoveNpc(DJG_Angar_NWCheck);
* * * * * *};
* * * *};
* *};
};


* *23. Функции изменения аттрибутов НПС.

Файл B_RaiseAttribute.d

// ************************************************** **************
// Функции изменения атрибутов НПС
// ************************************************** **************

// Повышение реальных атрибутов НПС
// Аргументы: oth - НПС, attribut - атрибут, points - пункты изменения
func void B_RaiseRealAttributeLearnCounter(var C_NPC oth,var int attrib,var int points)
{
* *// сила
* *if(attrib == ATR_STRENGTH)
* *{
* * * *oth.aivar[REAL_STRENGTH] = oth.aivar[REAL_STRENGTH] + points;
* *}
* *// ловкость
* *else if(attrib == ATR_DEXTERITY)
* *{
* * * *oth.aivar[REAL_DEXTERITY] = oth.aivar[REAL_DEXTERITY] + points;
* *}
* *// макс. мана
* *else if(attrib == ATR_MANA_MAX)
* *{
* * * *oth.aivar[REAL_MANA_MAX] = oth.aivar[REAL_MANA_MAX] + points;
* *};
};

// Повышение атрибутов НПС
// Аргументы: oth - НПС, attribut - атрибут, points - пункты изменения
func void B_RaiseAttribute(var C_NPC oth,var int attrib,var int points)
{
* *var string concatText;
* *// сила
* *if(attrib == ATR_STRENGTH) * * * * *
* *{
* * * *// повысить силу
* * * *oth.attribute[ATR_STRENGTH] = oth.attribute[ATR_STRENGTH] + points;
* * * *// вывод текста: "Сила + " + points
* * * *concatText = ConcatStrings(PRINT_LearnSTR,IntToString(points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// ловкость
* *if(attrib == ATR_DEXTERITY) * * * *
* *{ *
* * * *// повысить ловкость
* * * *oth.attribute[ATR_DEXTERITY] = oth.attribute[ATR_DEXTERITY] + points;
* * * *// если ловкость >= 90 и НПС не владеет акробатикой
* * * *if(oth.attribute[ATR_DEXTERITY] >= 90) && (Npc_GetTalentSkill(oth,NPC_TALENT_ACROBAT) == 0)
* * * *{
* * * * * *// научить акробатике
* * * * * *Npc_SetTalentSkill(oth,NPC_TALENT_ACROBAT,1);
* * * * * *// вывод текста: "Акробатика-Бонус!"
* * * * * *PrintScreen(PRINT_Addon_AcrobatBonus,-1,55,FONT_Screen,2);
* * * *};
* * * *// вывод текста: "Ловкость + " + points
* * * *concatText = ConcatStrings(PRINT_LearnDEX,IntToString(points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// макс. мана
* *if(attrib == ATR_MANA_MAX) * * * * *
* *{
* * * *// повысить макс. ману
* * * *oth.attribute[ATR_MANA_MAX] = oth.attribute[ATR_MANA_MAX] + points;
* * * *// вывод текста: "Мана + " + points
* * * *concatText = ConcatStrings(PRINT_LearnMANA_MAX,IntToString(poin ts));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// макс. жизнь
* *if(attrib == ATR_HITPOINTS_MAX) * * * *
* *{ *
* * * *// повысить макс. жизнь
* * * *oth.attribute[ATR_HITPOINTS_MAX] = oth.attribute[ATR_HITPOINTS_MAX] + points;
* * * *// вывод текста: "Жизнь + " + points
* * * *concatText = ConcatStrings(PRINT_Learnhitpoints_MAX,IntToString (points));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* *};
* *// повысить реальный атрибут
* *B_RaiseRealAttributeLearnCounter(oth,attrib,point s);
};


* *24. Функции изменения боевых навыков НПС.

Файл B_RaiseFightTalent.d

// ************************************************** **************
// Функции изменения боевых навыков НПС
// ************************************************** **************

// Повышение реальных боевых навыков НПС
// Аргументы: oth - НПС, talent - навык, percent - пункты изменения
func void B_RaiseRealFightTalentPercent(var C_NPC oth,var int talent,var int percent)
{
* *// владение одноручником
* *if(talent == NPC_TALENT_1H)
* *{
* * * *oth.aivar[REAL_TALENT_1H] = oth.aivar[REAL_TALENT_1H] + percent;
* *}
* *// владение двуручником
* *else if(talent == NPC_TALENT_2H)
* *{
* * * *oth.aivar[REAL_TALENT_2H] = oth.aivar[REAL_TALENT_2H] + percent;
* *}
* *// владение луком
* *else if(talent == NPC_TALENT_BOW)
* *{
* * * *oth.aivar[REAL_TALENT_BOW] = oth.aivar[REAL_TALENT_BOW] + percent;
* *}
* *// владение арбалетом
* *else if(talent == NPC_TALENT_CROSSBOW)
* *{
* * * *oth.aivar[REAL_TALENT_CROSSBOW] = oth.aivar[REAL_TALENT_CROSSBOW] + percent;
* *};
};

// Повышение боевых навыков НПС
// Аргументы: oth - НПС, talent - навык, percent - пункты изменения
func void B_RaiseFightTalent(var C_NPC oth,var int talent,var int percent)
{
* *// повысить реальный навык
* *B_RaiseRealFightTalentPercent(oth,talent,percent) ;
* *// задать уровень владения оружием
* *B_AddFightSkill(oth,talent,percent);
};


* *25. Удалить НПС из игры.

Файл B_RemoveNpc.d

// ************************************************** **************
// Удалить НПС из игры
// ************************************************** **************
// Аргументы: npcInstance - ссылка на НПС

// Внимание: аргумент npcInstance является переопределенным типом (C_NPC -> int)

func void B_RemoveNpc(var int npcInstance)
{
* *var C_NPC npc;
* *// получить НПС
* *npc = Hlp_GetNpc(npcInstance);
* *// если НПС существует и жив
* *if(Hlp_IsValidNpc(npc) && !Npc_IsDead(npc))
* *{ *
* * * *// сброс флагов
* * * *npc.flags = 0;
* * * *// телепортировать НПС на кладбище
* * * *AI_Teleport(npc,"TOT");
* * * *// задать распорядок дня загробной жизни
* * * *B_StartOtherRoutine(npc,"TOT");
* * * *// убить НПС
* * * *Npc_ChangeAttribute(npc,ATR_HITPOINTS,-npc.attribute[ATR_HITPOINTS_MAX]);
* * * *// и для надежности ещё раз послать на кладбище
* * * *AI_Teleport(npc,"TOT");
* *};
};


* *26. Функция изменения распорядка дня НПС.

Файл B_StartOtherRoutine.d

// ************************************************** **************
// Функция изменения распорядка дня НПС
// ************************************************** **************
// Аргументы: slf - НПС, newRoutine - сокращенное имя функции нового распорядка дня

// self - глобальная переменная, текущий инициализированный НПС

func void B_StartOtherRoutine(var C_NPC slf,var string newRoutine)
{
* *// встать
* *AI_StandUp(slf);
* *// если НПС не self
* *if(Hlp_GetInstanceID(self) != Hlp_GetInstanceID(slf))
* *{
* * * *// если НПС существует и жив
* * * *if(Hlp_IsValidNpc(slf) && !Npc_IsDead(slf))
* * * *{
* * * * * *// изменить распорядок дня
* * * * * *Npc_ExchangeRoutine(slf,newRoutine);
* * * * * *// начать выполнение
* * * * * *AI_ContinueRoutine(slf);
* * * *}; *
* *}
* *else // иначе (self)
* *{
* * * *// изменить распорядок дня
* * * *Npc_ExchangeRoutine(slf,newRoutine);
* *};
};

Ответить с цитированием
Старый 15.08.2005, 16:47   #233
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *27. Функция повышения атрибутов НПС учителями.

Файл B_TeachAttributePoints.d

// ************************************************** **************
// Функция повышения атрибутов НПС учителями
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), attrib - атрибут, points - пункты изменения, teacherMAX - возможность учителя
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachAttributePoints(var C_NPC slf,var C_NPC oth,var int attrib,var int points,var int teacherMAX)
{
* *var string concatText;
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = (B_GetLearnCostAttribute (oth, attrib) * points);
* *// если не правильный атрибут
* *if(attrib != ATR_STRENGTH) && (attrib != ATR_DEXTERITY) && (attrib != ATR_MANA_MAX)
* *{
* * * *Print("*** ERROR: Wrong Parameter ***");
* * * *return FALSE;
* *};
* *var int realAttribute;
* *// получить реальное значение изменяемого атрибута (без учета разных бонусов)
* *if * * (attrib == ATR_STRENGTH) * * { realAttribute = oth.attribute[ATR_STRENGTH]; }
* *else if(attrib == ATR_DEXTERITY) * *{ realAttribute = oth.attribute[ATR_DEXTERITY];}
* *else if(attrib == ATR_MANA_MAX) * * { realAttribute = oth.attribute[ATR_MANA_MAX]; };
* *// если значение атрибута выше способности учителя
* *if(realAttribute >= teacherMAX)
* *{
* * * *// вывод текста: "Максимум учителя составляет " + teacherMAX
* * * *concatText = ConcatStrings(PRINT_NoLearnOverPersonalMAX,IntToSt ring(teacherMAX));
* * * *PrintScreen(concatText,-1,-1,FONT_Screen,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ обучен по максимуму"
* * * *// Примечание: корявый перевод, можно заменить на подходящий.
* * * *B_Say(slf,oth,"$NOLEARNYOUREBETTER");
* * * *return FALSE;
* *};
* *// если новое значение атрибута будет выше способности учителя
* *if((realAttribute + points) > teacherMAX)
* *{
* * * *// вывод текста: "Максимум учителя составляет " + teacherMAX
* * * *concatText = ConcatStrings(PRINT_NoLearnOverPersonalMAX,IntToSt ring(teacherMAX));
* * * *PrintScreen(concatText,-1,-1,FONT_Screen,2);
* * * *// учитель говорит ученику (SVM фраза) "учитель не способен обучить ГГ"
* * * *// Примечание: корявый перевод, можно заменить на подходящий.
* * * *B_Say(slf,oth,"$NOLEARNOVERPERSONALMAX");
* * * *return FALSE;
* *};
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLP,-1,-1,FONT_Screen,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *// Примечание: корявый перевод, можно заменить на подходящий.
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// повысить нужный атрибут
* *B_RaiseAttribute(oth,attrib,points);
* *return TRUE;
};


* *28. Функция повышения боевых навыков учителями.

Файл B_TeachFightTalentPercent.d

// ************************************************** **************
// Функция повышения боевых навыков учителями
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), talent - навык, percent - пункты изменения, teacherMAX - возможность учителя
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachFightTalentPercent(var C_NPC slf,var C_NPC oth,var int talent,var int percent,var int teacherMAX)
{
* *var string concatText;
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = (B_GetLearnCostTalent(oth,talent,1) * percent);
* *// если не правильный навык
* *if(talent != NPC_TALENT_1H) && (talent != NPC_TALENT_2H) && (talent != NPC_TALENT_BOW) && (talent != NPC_TALENT_CROSSBOW)
* *{
* * * *Print ("*** ERROR: Wrong Parameter ***");
* * * *return FALSE;
* *};
* *var int realHitChance;
* *// получить реальное значение изменяемого навыка (без учета разных бонусов)
* *if * * (talent == NPC_TALENT_1H) * * * *{ realHitChance = oth.HitChance[NPC_TALENT_1H]; * * }
* *else if(talent == NPC_TALENT_2H) * * * *{ realHitChance = oth.HitChance[NPC_TALENT_2H]; * * }
* *else if(talent == NPC_TALENT_BOW) * * * { realHitChance = oth.HitChance[NPC_TALENT_BOW]; * *}
* *else if(talent == NPC_TALENT_CROSSBOW) *{ realHitChance = oth.HitChance[NPC_TALENT_CROSSBOW];};
* *// если значение навыка выше способности учителя
* *if(realHitChance >= teacherMAX)
* *{
* * * *// вывод текста: "Максимум учителя составляет " + teacherMAX
* * * *concatText = ConcatStrings(PRINT_NoLearnOverPersonalMAX,IntToSt ring(teacherMAX));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ обучен по максимуму"
* * * *B_Say(slf,oth,"$NOLEARNYOUREBETTER");
* * * *return FALSE;
* *};
* *// если новое значение навыка будет выше способности учителя
* *if((realHitChance + percent) > teacherMAX)
* *{
* * * *// вывод текста: "Максимум учителя составляет " + teacherMAX
* * * *concatText = ConcatStrings(PRINT_NoLearnOverPersonalMAX,IntToSt ring(teacherMAX));
* * * *PrintScreen(concatText,-1,-1,FONT_SCREEN,2);
* * * *// учитель говорит ученику (SVM фраза) "учитель не способен обучить ГГ"
* * * *B_Say(slf,oth,"$NOLEARNOVERPERSONALMAX");
* * * *return FALSE;
* *};
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLP,-1,-1,FONT_Screen,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// если одноручник
* *if(talent == NPC_TALENT_1H) * * * *
* *{ *
* * * *// повысить навык
* * * *B_RaiseFightTalent(oth,NPC_TALENT_1H,percent);
* * * *// если владение одноручником на 30 превышает владение двуручником
* * * *if(oth.aivar[REAL_TALENT_1H] >= (oth.aivar[REAL_TALENT_2H] + 30))
* * * *{
* * * * * *// повысить навык двуручника
* * * * * *B_RaiseFightTalent(oth,NPC_TALENT_2H,percent);
* * * * * *// вывод текста: "Улучшить: Борьба одно- и двуручным оружием"
* * * * * *PrintScreen(PRINT_Learn1H_and_2H,-1,-1,FONT_Screen,2);
* * * *}
* * * *else
* * * *{
* * * * * *// вывод текста: "Улучшить: Одноручное оружие"
* * * * * *PrintScreen(PRINT_Learn1H,-1,-1,FONT_Screen,2);
* * * *};
* *};
* *// аналогично, если двуручник
* *else if(talent == NPC_TALENT_2H) * * * * * *
* *{ *
* * * *B_RaiseFightTalent(oth,NPC_TALENT_2H,percent);
* * * *if(oth.aivar[REAL_TALENT_2H] >= (oth.aivar[REAL_TALENT_1H] + 30))
* * * *{
* * * * * *B_RaiseFightTalent(oth,NPC_TALENT_1H,percent);
* * * * * *PrintScreen(PRINT_Learn2H_and_1H,-1,-1,FONT_Screen,2);
* * * *}
* * * *else
* * * *{
* * * * * *PrintScreen(PRINT_Learn2H,-1,-1,FONT_Screen,2);
* * * *};
* *};
* *// аналогично, если лук
* *else if(talent == NPC_TALENT_BOW) * * * * *
* *{ *
* * * *B_RaiseFightTalent(oth,NPC_TALENT_BOW,percent);
* * * *if(oth.aivar[REAL_TALENT_BOW] >= (oth.aivar[REAL_TALENT_CROSSBOW] + 30))
* * * *{
* * * * * *B_RaiseFightTalent(oth,NPC_TALENT_CROSSBOW,percen t);
* * * * * *PrintScreen(PRINT_LearnBow_and_Crossbow,-1,-1,FONT_Screen,2);
* * * *}
* * * *else
* * * *{
* * * * * *PrintScreen(PRINT_LearnBow,-1,-1,FONT_Screen,2);
* * * *};
* *};
* *// аналогично, если арбалет
* *else if(talent == NPC_TALENT_CROSSBOW) * * * * *
* *{ *
* * * *B_RaiseFightTalent(oth,NPC_TALENT_CROSSBOW,percen t);
* * * *if(oth.aivar[REAL_TALENT_CROSSBOW] >= (oth.aivar[REAL_TALENT_BOW] + 30))
* * * *{
* * * * * *B_RaiseFightTalent(oth,NPC_TALENT_BOW,percent);
* * * * * *PrintScreen(PRINT_LearnCrossbow_and_Bow,-1,-1,FONT_Screen,2);
* * * *}
* * * *else
* * * *{
* * * * * *PrintScreen(PRINT_LearnCrossbow,-1,-1,FONT_Screen,2);
* * * *};
* *};
* *return TRUE;
};


* *29. Функция повышения круга магии НПС учителями.

Файл B_TeachMagicCircle.d

// ************************************************** **************
// Функция повышения круга магии НПС учителями
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), circle - круг магии
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachMagicCircle(var C_NPC slf,var C_NPC oth,var int circle)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_MAGE,circle);
* *// если не правильный круг
* *if(circle < 1) ¦¦ (circle > 6)
* *{
* * * *Print("*** ERROR: Wrong Parameter ***");
* * * *return FALSE;
* *};
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLP,-1,-1,FONT_Screen,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_MAGE,circle);
* *// создать в дневнике тему "Круги магии"
* *Log_CreateTopic(TOPIC_TalentMagicCircle,LOG_NOTE) ;
* *// сделать запись
* *B_LogEntry(TOPIC_TalentMagicCircle,"Доступные мне магические руны разделены на Круги. Формулами заклинаний более высокого Круга, чем доступный мне, я не владею.");
* *// круг 1
* *if(circle == 1)
* *{
* * * *// вывод текста: "Обучение: 1 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_1,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 1 магического Круга: свет, огненная стрела, молния, лечить легкое ранение и вызвать скелет гоблина.");
* * * *return TRUE;
* *};
* *// круг 2
* *if(circle == 2)
* *{
* * * *// вывод текста: "Обучение: 2 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_2,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 2 магического Круга: огненный шар, ледяная стрела, вызвать волка, порыв ветра и сон.");
* * * *return TRUE;
* *};
* *// круг 3
* *if (circle == 3)
* *{
* * * *// вывод текста: "Обучение: 3 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_3,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 3 магического Круга: лечить среднее ранение, шаровая молния, огненная буря, вызвать скелет, страх и ледяная глыба.");
* * * *return TRUE;
* *};
* *// круг 4
* *if (circle == 4)
* *{
* * * *// вывод текста: "Обучение: 4 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_4,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 4 магического Круга: удар молнии, вызвать голема, уничтожить нежить и большой огненный шар.");
* * * *return TRUE;
* *};
* *// круг 5
* *if (circle == 5)
* *{
* * * *// вывод текста: "Обучение: 5 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_5,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 5 магического Круга: большая огненная буря, ледяная волна, вызвать демона и лечить сильное ранение.");
* * * *return TRUE;
* *};
* *// круг 6
* *if (circle == 6)
* *{
* * * *// вывод текста: "Обучение: 6 Круг магии"
* * * *PrintScreen(PRINT_LearnCircle_6,-1,-1,FONT_Screen,2);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentMagicCircle,"Заклинания 6 магического Круга: огненный дождь, дым смерти, волна смерти, армия тьмы и уменьшить монстра.");
* * * *return TRUE;
* *};
};


* *30. Функция повышения таланта алхимии учителями.

Файл B_TeachPlayerTalentAlchemy.d

// ************************************************** **************
// Функция повышения таланта алхимии учителями
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), potion - изготовляемый напиток
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachPlayerTalentAlchemy(var C_NPC slf,var C_NPC oth,var int potion)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_ALCHEMY,potion );
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Напитки"
* *Log_CreateTopic(TOPIC_TalentAlchemy,LOG_NOTE);
* *// сделать запись
* *B_LogEntry(TOPIC_TalentAlchemy,"Для приготовления напитка мне нужна лабороторная колба и некоторые ингредиенты для желаемого напитка. С помощью этих ингредиентов на алхимическом столе можно изготовить желаемый напиток.");
* *// если Лечебная эссенция
* *if(potion == POTION_Health_01)
* *{
* * * *// освоить навык
* * * *PLAYER_TALENT_ALCHEMY[POTION_Health_01] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЛЕЧЕБНАЯ ЭССЕНЦИЯ': 2 лечебных растения и 1 полевое растение.");
* *};
* *// для остальных напитков аналогично
* *if(potion == POTION_Health_02)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Health_02] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЛЕЧЕБНЫЙ ЭКСТРАКТ': 2 лечебные травы и 1 полевое растение.");
* *};
* *if(potion == POTION_Health_03)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Health_03] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЛЕЧЕБНЫЙ ЭЛИКСИР': 2 лечебных корня и 1 полевое растение.");
* *};
* *if(potion == POTION_Mana_01)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Mana_01] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭССЕНЦИЯ МАНЫ': 2 огненные крапивы и 1 полевое растение.");
* *};
* *if(potion == POTION_Mana_02)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Mana_02] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭКСТРАКТ МАНЫ': 2 огненные травы и 1 полевое растение.");
* *};
* *if(potion == POTION_Mana_03)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Mana_03] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭЛИКСИР МАНЫ': 2 огненных корня и 1 полевое растение.");
* *};
* *if(potion == POTION_Speed)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Speed] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'НАПИТОК УСКОРЕНИЯ': 1 трава глорха и 1 полевое растение.");
* *};
* *if(potion == POTION_Perm_STR)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Perm_STR] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭЛИКСИР СИЛЫ': 1 драконий корень и 1 коронное растение.");
* *};
* *if(potion == POTION_Perm_DEX)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Perm_DEX] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭЛИКСИР ЛОВКОСТИ': 1 ягода гоблина и 1 коронное растение.");
* *};
* *if(potion == POTION_Perm_Mana)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Perm_Mana] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭЛИКСИР ДУХА': 1 огненный корень и 1 коронное растение.");
* *};
* *if(potion == POTION_Perm_Health)
* *{
* * * *PLAYER_TALENT_ALCHEMY[POTION_Perm_Health] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для напитка 'ЭЛИКСИР ЖИЗНИ': 1 лечебный корень и 1 коронное растение.");
* *};
* *// вывод текста: "Обучение: Приготовление напитка"
* *PrintScreen(PRINT_LearnAlchemy,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_ALCHEMY,1);
* *return TRUE;
};


* *31. Функция обучения иностранным языкам.

Файл B_TeachPlayerTalentForeignLanguage.d

// ************************************************** **************
// Функция обучения иностранным языкам
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), Language - уровень владения языком
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachPlayerTalentForeignLanguage(var C_NPC slf,var C_NPC oth,var int Language)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_FOREIGNLANGUAG E,Language);
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Язык строителей"
* *Log_CreateTopic(TOPIC_Language,LOG_NOTE);
* *// первый уровень языка
* *if(Language == LANGUAGE_1)
* *{
* * * *// освоить навык
* * * *PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_1] = TRUE;
* * * *// сделать запись "Я владею Языком Крестьян. Это был обычный язык Строителей."
* * * *B_LogEntry(TOPIC_Language,LogText_Addon_Language_ 1);
* *};
* *// для остальных уровней аналогично
* *if(Language == LANGUAGE_2)
* *{
* * * *PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_2] = TRUE;
* * * *// запись "Я владею Языком Воинов."
* * * *B_LogEntry(TOPIC_Language,LogText_Addon_Language_ 2);
* *}; *
* *if(Language == LANGUAGE_3)
* *{
* * * *PLAYER_TALENT_FOREIGNLANGUAGE[LANGUAGE_3] = TRUE;
* * * *// сделать запись "Я владею Языком Жрецов."
* * * *B_LogEntry(TOPIC_Language,LogText_Addon_Language_ 3);
* *}; *
* *// вывод текста: "Учится: язык строителей"
* *PrintScreen(PRINT_LearnForeignLanguage,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_FOREIGNLANGUAGE ,1);
* *return TRUE;
};

Ответить с цитированием
Старый 16.08.2005, 11:27   #234
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *32. Функция обучения изготовлению рун.

Файл B_TeachPlayerTalentRunes.d

// ************************************************** **************
// Функция обучения изготовлению рун
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), spell - заклинание
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachPlayerTalentRunes(var C_NPC slf,var C_NPC oth,var int spell)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_RUNES,spell);
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Руны"
* *Log_CreateTopic(TOPIC_TalentRunes,LOG_NOTE);
* *// сделать запись
* *B_LogEntry(TOPIC_TalentRunes,"Для создания магической руны, кроме необходимого заклинания мне еще нужны некоторые составляющие. С помощью этих составляющих и рунического камня я могу создать необходимую руну на руническом столе.");
* *var C_NPC ScrollTrader;
* *// у кого ГГ может приобрести свитки заклинаний
* *if(Npc_IsDead(Gorax) == FALSE)
* *{
* * * *ScrollTrader = Hlp_GetNpc(Gorax); * * * // Горакс
* *}
* *else if(Npc_IsDead(Isgaroth) == FALSE)
* *{
* * * *ScrollTrader = Hlp_GetNpc(Isgaroth); * *// Исгарот
* *}
* *else if(Npc_IsDead(Engor) == FALSE)
* *{
* * * *ScrollTrader = Hlp_GetNpc(Engor); * * * // Енгор
* *}
* *else if(Npc_IsDead(Orlan) == FALSE)
* *{
* * * *ScrollTrader = Hlp_GetNpc(Orlan); * * * // Орлан
* *}
* *else if(Npc_IsDead(Cronos_ADW) == FALSE)
* *{
* * * *ScrollTrader = Hlp_GetNpc(Cronos_ADW); *// Кронос
* *};
* *// освоить соответствующую руну
* *if(spell == SPL_PalLight) * * * * * { PLAYER_TALENT_RUNES[SPL_PalLight] * * * * = TRUE; };
* *if(spell == SPL_PalLightHeal) * * * { PLAYER_TALENT_RUNES[SPL_PalLightHeal] * * = TRUE; };
* *if(spell == SPL_PalHolyBolt) * * * *{ PLAYER_TALENT_RUNES[SPL_PalHolyBolt] * * *= TRUE; };
* *if(spell == SPL_PalMediumHeal) * * *{ PLAYER_TALENT_RUNES[SPL_PalMediumHeal] * *= TRUE; };
* *if(spell == SPL_PalRepelEvil) * * * { PLAYER_TALENT_RUNES[SPL_PalRepelEvil] * * = TRUE; };
* *if(spell == SPL_PalFullHeal) * * * *{ PLAYER_TALENT_RUNES[SPL_PalFullHeal] * * *= TRUE; };
* *if(spell == SPL_PalDestroyEvil) * * { PLAYER_TALENT_RUNES[SPL_PalDestroyEvil] * = TRUE; };
* *if(spell == SPL_PalTeleportSecret) *{ PLAYER_TALENT_RUNES[SPL_PalTeleportSecret]= TRUE; };
* *if(spell == SPL_TeleportSeaport) * *{ PLAYER_TALENT_RUNES[SPL_TeleportSeaport] *= TRUE; };
* *if(spell == SPL_TeleportMonastery) *{ PLAYER_TALENT_RUNES[SPL_TeleportMonastery]= TRUE; };
* *if(spell == SPL_TeleportFarm) * * * { PLAYER_TALENT_RUNES[SPL_TeleportFarm] * * = TRUE; };
* *if(spell == SPL_TeleportXardas) * * { PLAYER_TALENT_RUNES[SPL_TeleportXardas] * = TRUE; };
* *if(spell == SPL_TeleportPassNW) * * { PLAYER_TALENT_RUNES[SPL_TeleportPassNW] * = TRUE; };
* *if(spell == SPL_TeleportPassOW) * * { PLAYER_TALENT_RUNES[SPL_TeleportPassOW] * = TRUE; };
* *if(spell == SPL_TeleportOC) * * * * { PLAYER_TALENT_RUNES[SPL_TeleportOC] * * * = TRUE; };
* *// освоить соответствующую руну
* *if(spell == SPL_LIGHT)
* *{
* * * *// освоить изготовление
* * * *PLAYER_TALENT_RUNES[SPL_LIGHT] = TRUE;
* * * *// создать свиток заклинания у торговца
* * * *CreateInvItems(ScrollTrader,ItSc_LIGHT,1);
* * * *// сделать запись
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'СВЕТ': 1 золотая монета.");
* *};
* *if(spell == SPL_Firebolt)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Firebolt] = TRUE;
* * * *CreateInvItems (ScrollTrader,ItSc_Firebolt,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ОГНЕННАЯ СТРЕЛА': 1 сера.");
* *};
* *if(spell == SPL_Icebolt)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Icebolt] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Icebolt,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕДЯНАЯ СТРЕЛА': 1 кварц.");
* *};
* *if(spell == SPL_LightHeal)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_LightHeal] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_LightHeal,1); * * * * * * *
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕЧИТЬ ЛЕГКОЕ РАНЕНИЕ': 1 лечебное растение.");
* *};
* *if(spell == SPL_SummonGoblinSkeleton)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_SummonGoblinSkeleton] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_SumGobSkel,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВЫЗВАТЬ СКЕЛЕТ ГОБЛИНА': 1 кость гоблина.");
* *};
* *if(spell == SPL_InstantFireball)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_InstantFireball] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_InstantFireball, 1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ОГНЕННЫЙ ШАР': 1 смола.");
* *};
* *if(spell == SPL_Zap)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Zap] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Zap,1); * * * * * * * * * * * *
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'МОЛНИЯ': 1 горный хрусталь.");
* *};
* *if(spell == SPL_SummonWolf)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_SummonWolf] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_SumWolf,1); * * * * * * * * * *
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВЫЗВАТЬ ВОЛКА': 1 шкура волка.");
* *};
* *if(spell == SPL_WINDFIST)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_WINDFIST] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_WINDFIST,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ПОРЫВ ВЕТРА': 1 уголь.");
* *};
* *if(spell == SPL_Sleep)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Sleep] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Sleep,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'СОН': 1 болотник.");
* *};
* *if(spell == SPL_MediumHeal)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_MediumHeal] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_MediumHeal,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕЧИТЬ СРЕДНЕЕ РАНЕНИЕ': 1 лечебная трава.");
* *};
* *if(spell == SPL_LightningFlash)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_LightningFlash] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_LightningFlash,1 );
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'УДАР МОЛНИИ': 1 горный хрусталь и 1 кварц.");
* *};
* *if(spell == SPL_ChargeFireball)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_ChargeFireball] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_ChargeFireball,1 );
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'БОЛЬШОЙ ОГНЕННЫЙ ШАР': 1 сера и 1 смола.");
* *};
* *if(spell == SPL_SummonSkeleton)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_SummonSkeleton] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_SumSkel,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВЫЗВАТЬ СКЕЛЕТ': 1 кость скелета.");
* *}; * * *
* *if(spell == SPL_Fear)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Fear] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Fear,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'СТРАХ': 1 черный жемчуг.");
* *};
* *if(spell == SPL_IceCube)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_IceCube] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_IceCube,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕДЯНАЯ ГЛЫБА': 1 кварц и 1 аквамарин.");
* *};
* *if(spell == SPL_ChargeZap)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_ChargeZap] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_ThunderBall,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ШАРОВАЯ МОЛНИЯ': 1 сера и 1 горный хрусталь.");
* *};
* *if(spell == SPL_SummonGolem)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_SummonGolem] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_SumGol,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВЫЗВАТЬ ГОЛЕМА': 1 сердце каменного голема.");
* *};
* *if(spell == SPL_DestroyUndead)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_DestroyUndead] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_HarmUndead,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'УНИЧТОЖИТЬ НЕЖИТЬ': 1 святая вода.");
* *};
* *if(spell == SPL_Pyrokinesis)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Pyrokinesis] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Pyrokinesis,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'БОЛЬШАЯ ОГНЕННАЯ БУРЯ': 1 сера и 1 огненный язык.");
* *};
* *if(spell == SPL_Firestorm)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Firestorm] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Firestorm,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ОГНЕННАЯ БУРЯ': 1 сера и 1 смола.");
* *};
* *if(spell == SPL_IceWave)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_IceWave] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_IceWave,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕДЯНАЯ ВОЛНА': 1 кварц и 1 аквамарин.");
* *};
* *if(spell == SPL_SummonDemon)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_SummonDemon] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_SumDemon,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВЫЗВАТЬ ДЕМОНА': 1 сердце демона.");
* *};
* *if(spell == SPL_FullHeal)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_FullHeal] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_FullHeal,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ЛЕЧИТЬ СИЛЬНОЕ РАНЕНИЕ': 1 лечебный корень.");
* *};
* *if(spell == SPL_Firerain)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Firerain] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Firerain,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ОГНЕННЫЙ ДОЖДЬ': 1 смола и 1 огненный язык.");
* *};
* *if(spell == SPL_BreathOfDeath)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_BreathOfDeath] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_BreathOfDeath,1) ;
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ДЫМ СМЕРТИ': 1 уголь и 1 черный жемчуг.");
* *};
* *if(spell == SPL_MassDeath)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_MassDeath] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_MassDeath,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'ВОЛНА СМЕРТИ': 1 кость скелета и 1 черный жемчуг.");
* *};
* *if(spell == SPL_ArmyOfDarkness)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_ArmyOfDarkness] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_ArmyOfDarkness,1 );
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'АРМИЯ МРАКА': 1 кость скелета, 1 черный жемчуг, 1 сердце каменного голема и 1 сердце демона.");
* *};
* *if(spell == SPL_Shrink)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Shrink] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Shrink,1);
* * * *B_LogEntry(TOPIC_TalentRunes,"Составляющие для руны 'УМЕНЬШИТЬ МОНСТРА': 1 кость гоблина и 1 клык тролля.");
* *};
* *if(spell == SPL_Whirlwind)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Whirlwind] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Whirlwind,1);
* * * *// "Ингредиенты для руны "Смерч": 1 крыло"
* * * *B_LogEntry(TOPIC_TalentRunes,Log_Text_Addon_Talen tRune_Whirlwind);
* *};
* *if(spell == SPL_WaterFist)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_WaterFist] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Waterfist,1);
* * * *// "Ингредиенты для руны "Водный кулак": 1 Аквамарин и 1 горный кристалл"
* * * *B_LogEntry(TOPIC_TalentRunes,Log_Text_Addon_Talen tRune_Waterfist);
* *};
* *if(spell == SPL_IceLance)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_IceLance] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Icelance,1);
* * * *// "Ингредиенты для руны "Ледяное копье": 1 Ледниковый кварц"
* * * *B_LogEntry(TOPIC_TalentRunes,Log_Text_Addon_Talen tRune_Icelance);
* *};
* *if(spell == SPL_Geyser)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Geyser] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Geyser,1);
* * * *// "Ингредиенты для руны "Гейзер": 1 Аквамарин"
* * * *B_LogEntry(TOPIC_TalentRunes,Log_Text_Addon_Talen tRune_Geyser);
* *};
* *if(spell == SPL_Thunderstorm)
* *{
* * * *PLAYER_TALENT_RUNES[SPL_Thunderstorm] = TRUE;
* * * *CreateInvItems(ScrollTrader,ItSc_Thunderstorm,1);
* * * *// "Ингредиенты для руны "Непогода": 1 ледниковый кварц и 1 крыло"
* * * *B_LogEntry(TOPIC_TalentRunes,Log_Text_Addon_Talen tRune_Thunderstorm);
* *};
* *// вывод текста: "Обучение: Создание руны"
* *PrintScreen(PRINT_LearnRunes,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_RUNES,1);
* *return TRUE;
};


* *33. Функция обучения кузнечному ремеслу.

Файл B_TeachPlayerTalentSmith.d

// ************************************************** **************
// Функция обучения кузнечному ремеслу
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), waffe - умение ковать
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachPlayerTalentSmith(var C_NPC slf,var C_NPC oth,var int waffe)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_SMITH,waffe);
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Ковка"
* *Log_CreateTopic(TOPIC_TalentSmith,LOG_NOTE);
* *// сделать запись
* *B_LogEntry(TOPIC_TalentSmith,"Для того, чтобы ковать оружие, мне необходимо немного сырой стали. Сначала я должен накалить сталь на огне, а затем придать необходимую форму. Для качественного оружия необходимы также некоторые составляющие, которые придадут оружию особенные свойства.");
* *// выучить соответствующее умение
* *if(waffe == WEAPON_Common)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_Common] = TRUE; *
* * * *B_LogEntry(TOPIC_TalentSmith,"Для простого самокованного меча не требуется никаких дополнительных составляющих.");
* *};
* *if(waffe == WEAPON_1H_Special_01)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Special_01] = TRUE; *
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 1 части руды позволяет выковать меч: 'ДЛИННЫЙ РУДНЫЙ МЕЧ'.");
* *};
* *if(waffe == WEAPON_2H_Special_01)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_2H_Special_01] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 2 части руды позволяет выковать меч: 'РУДНЫЙ ДВУРУЧНИК'.");
* *};
* *if(waffe == WEAPON_1H_Special_02)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Special_02] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 2 части руды позволяет выковать меч: 'РУДНЫЙ МЕЧ ЧУДОВИЩА'.");
* *};
* *if(waffe == WEAPON_2H_Special_02)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_2H_Special_02] = TRUE; *
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 3 части руды позволяет выковать меч: 'ТЯЖЕЛЫЙ ДВУРУЧНИК'.");
* *};
* *if(waffe == WEAPON_1H_Special_03)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Special_03] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 3 части руды позволяет выковать меч: 'РУДНЫЙ БОЕВОЙ КЛИНОК'.");
* *};
* *if(waffe == WEAPON_2H_Special_03)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_2H_Special_03] = TRUE; *
* * * *B_LogEntry(TOPIC_TalentSmith,"Добавление 4 части руды позволяет выковать меч: 'ТЯЖЕЛЫЙ РУДНЫЙ БОЕВОЙ КЛИНОК'.");
* *};
* *if(waffe == WEAPON_1H_Special_04)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Special_04] = TRUE; *
* * * *B_LogEntry(TOPIC_TalentSmith,"Если я добавлю 4 части руды и 5 частей крови дракона, то я выкую 'РУДНОГО УБИЙЦУ ДРАКОНОВ'.");
* *};
* *if(waffe == WEAPON_2H_Special_04)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_2H_Special_04] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Если я добавлю 5 частей руды и 5 частей крови дракона, то я выкую 'БОЛЬШОГО РУДНОГО УБИЙЦУ ДРАКОНОВ'.");
* *};
* *if(waffe == WEAPON_1H_Harad_01)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Harad_01] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Я могу теперь выковать благородный меч.");
* *};
* *if(waffe == WEAPON_1H_Harad_02)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Harad_02] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Я могу теперь выковать благородный длинный меч.");
* *};
* *if(waffe == WEAPON_1H_Harad_03)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Harad_03] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Я могу теперь даже выковать рубиновый клинок.");
* *};
* *if(waffe == WEAPON_1H_Harad_04)
* *{
* * * *PLAYER_TALENT_SMITH[WEAPON_1H_Harad_04] = TRUE;
* * * *B_LogEntry(TOPIC_TalentSmith,"Харальд научил меня ковать "Эль Бастардо" - одно из лучших одноручных оружий!");
* *};
* *// вывод текста: "Обучение: Кузнечное дело"
* *PrintScreen(PRINT_LearnSmith,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_SMITH,1);
* *return TRUE;
};


* *34. Функция обучения добыче трофеев.

Файл B_TeachPlayerTalentTakeAnimalTrophy.d

// ************************************************** **************
// Функция обучения добыче трофеев
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый (ГГ), trophy - умение добыть трофей
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachPlayerTalentTakeAnimalTrophy(var C_NPC slf,var C_NPC oth,var int trophy)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,NPC_TALENT_TAKEANIMALTROP HY,trophy);
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Животные"
* *Log_CreateTopic(TOPIC_TalentAnimalTrophy,LOG_NOTE );
* *// сделать запись
* *B_LogEntry(TOPIC_TalentAnimalTrophy,"Теперь я умею:");
* *// выучить соответствующее умение
* *if(trophy == TROPHY_Teeth)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Teeth] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...вырывать зубы.");
* *};
* *if(trophy == TROPHY_Claws)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Claws] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...ломать когти.");
* *};
* *if(trophy == TROPHY_Fur)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Fur] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...снимать шкуры.");
* *};
* *if(trophy == TROPHY_ReptileSkin)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_ReptileSkin] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"... Сдирать кожу с рептилий");
* *};
* *if(trophy == TROPHY_Heart)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Heart] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...вырезать сердца у големов и демонов.");
* *};
* *if(trophy == TROPHY_ShadowHorn)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_ShadowHorn] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...отламыват ь рог у мракорисов.");
* *};
* *if(trophy == TROPHY_FireTongue)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_FireTongue] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...вырезать огненный язык у огненных ящериц.");
* *};
* *if(trophy == TROPHY_BFWing)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_BFWing] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...отрезать крылья у кровяных шершней.");
* *};
* *if(trophy == TROPHY_BFSting)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_BFSting] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...вырезать жало у кровяных шершней.");
* *};
* *if(trophy == TROPHY_Mandibles)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_Mandibles] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...вырезать жвало у ползунов и полевых жуков.");
* *};
* *if(trophy == TROPHY_CrawlerPlate)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_CrawlerPlate] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...снимать панцирь с ползунов.");
* *};
* *if(trophy == TROPHY_DrgSnapperHorn)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DrgSnapperHorn] = TRUE;
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...отламыват ь рог у остеров.");
* *};
* *if(trophy == TROPHY_DragonScale)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DragonScale] = TRUE;
* * * *CreateInvItems(Swampdragon,ItAt_DragonScale,12);
* * * *CreateInvItems(Rockdragon,ItAt_DragonScale,12);
* * * *CreateInvItems(Firedragon,ItAt_DragonScale,12);
* * * *CreateInvItems(Icedragon,ItAt_DragonScale,12);
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...снимать чашую с драконов.");
* *};
* *if(trophy == TROPHY_DragonBlood)
* *{
* * * *PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_DragonBlood] = TRUE;
* * * *CreateInvItems(Swampdragon,ItAt_DragonBlood,2);
* * * *CreateInvItems(Rockdragon,ItAt_DragonBlood,2);
* * * *CreateInvItems(Firedragon,ItAt_DragonBlood,2);
* * * *CreateInvItems(Icedragon,ItAt_DragonBlood,2);
* * * *B_LogEntry(TOPIC_TalentAnimalTrophy,"...сцеживать кровь с драконов.");
* *};
* *// вывод текста: "Обучение: Разделка зверей"
* *PrintScreen(PRINT_LearnTakeAnimalTrophy,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_TAKEANIMALTROPH Y,1);
* *return TRUE;
};


Ответить с цитированием
Старый 17.08.2005, 14:49   #235
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

* *35. Функции обучения Ищущего огонька.

Файл B_TeachPlayerTalentWispDetector.d

// ************************************************** **************
// Функции обучения Ищущего огонька
// ************************************************** **************

// Эффекты при обучении
// -----------------------------------------------------------------
// Аргументы: Teacher - учитель
func void B_WISPDETECTOR_LearnEffect(var C_NPC Teacher)
{
* *AI_PlayAni(Teacher,"T_PRACTICEMAGIC5");
* *Wld_PlayEffect("spellFX_HealShrine",hero,hero,0,0 ,0,FALSE);
* *Wld_PlayEffect("spellFX_INCOVATION_BLUE",hero,her o,0,0,0,FALSE);
* *Snd_Play("WSP_Dead_A1");
};

// Обучение Ищущего огонька
// -----------------------------------------------------------------
// Аргументы: slf - учитель, oth - обучаемый, WispSkill - умение поиска
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно
func int B_TeachPlayerTalentWispDetector(var C_NPC slf,var C_NPC oth,var int WispSkill)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth, NPC_TALENT_WISPDETECTOR, WispSkill);
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// создать в дневнике тему "Ищущий Огонек"
* *Log_CreateTopic(TOPIC_WispDetector,LOG_NOTE);
* *// сделать запись "Мой Огонек может искать для меня следующие вещи:"
* *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned);
* *// выучить соответствующее умение
* *if(WispSkill == WISPSKILL_FF)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_FF] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Оружие дальнего боя и амуниция"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_FF);
* *};
* *if(WispSkill == WISPSKILL_NONE)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_NONE] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Золото, ключи и предметы обихода"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_NONE);
* *};
* *if(WispSkill == WISPSKILL_RUNE)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_RUNE] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Руны и свитки"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_RUNE);
* *};
* *if(WispSkill == WISPSKILL_MAGIC)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_MAGIC] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Кольца и амулеты"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_MAGIC);
* *};
* *if(WispSkill == WISPSKILL_FOOD)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_FOOD] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Еда и растения"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_FOOD);
* *};
* *if(WispSkill == WISPSKILL_POTIONS)
* *{
* * * *PLAYER_TALENT_WISPDETECTOR[WISPSKILL_POTIONS] = TRUE;
* * * *B_WISPDETECTOR_LearnEffect(slf);
* * * *// "Магические и другие напитки"
* * * *B_LogEntry(TOPIC_WispDetector,LogText_Addon_WispL earned_POTIONS);
* *};
* *// вывод текста: "Огонек научился"
* *PrintScreen(PRINT_LearnWispDetector,-1,-1,FONT_Screen,2);
* *// отобразить в окне характеристик
* *Npc_SetTalentSkill(oth,NPC_TALENT_WISPDETECTOR,1) ;
* *return TRUE;
};


* *36. Функция обучения воровству, отмычкам, подкрадаванию и акробатике.

Файл B_TeachThiefTalent.d

// ************************************************** **************
// Функция обучения воровству, отмычкам, подкрадаванию и акробатике
// ************************************************** **************
// Аргументы: slf - учитель, oth - обучаемый, talent - умение
// Возвращаемое значение: TRUE - обучение успешно, FALSE - обучение невозможно

func int B_TeachThiefTalent(var C_NPC slf,var C_NPC oth,var int talent)
{
* *var int kosten;
* *// получить стоимость обучения в LP
* *kosten = B_GetLearnCostTalent(oth,talent,1);
* *// если не правильный навык
* *if(talent != NPC_TALENT_PICKLOCK) && (talent != NPC_TALENT_SNEAK)
* * * *&& (talent != NPC_TALENT_ACROBAT) && (talent != NPC_TALENT_PICKPOCKET)
* *{
* * * *Print("*** ERROR: Wrong Parameter ***");
* * * *return FALSE;
* *};
* *// если очков обучения недостаточно
* *if(oth.lp < kosten)
* *{
* * * *// вывод текста: "Недостаточное количество оч. обучения!"
* * * *PrintScreen(PRINT_NotEnoughLearnPoints,-1,-1,FONT_ScreenSmall,2);
* * * *// учитель говорит ученику (SVM фраза) "ГГ не хватает опыта"
* * * *B_Say(slf,oth,"$NOLEARNNOPOINTS");
* * * *return FALSE;
* *};
* *// использовать очки обучения
* *oth.lp = oth.lp - kosten;
* *// отмычки
* *if(talent == NPC_TALENT_PICKLOCK)
* *{
* * * *// отобразить в окне характеристик
* * * *Npc_SetTalentSkill(oth,NPC_TALENT_PICKLOCK,1);
* * * *// вывод текста: "Обучение: Вскрытие замков"
* * * *PrintScreen(PRINT_LearnPicklock,-1,-1,FONT_Screen,2);
* *};
* *// подкрадывание
* *else if(talent == NPC_TALENT_SNEAK)
* *{
* * * *Npc_SetTalentSkill(oth,NPC_TALENT_SNEAK,1);
* * * *// вывод текста: "Обучение: Подкрадывание"
* * * *PrintScreen(PRINT_LearnSneak,-1,-1,FONT_Screen,2);
* *};
* *// акробатика
* *else if(talent == NPC_TALENT_ACROBAT)
* *{
* * * *Npc_SetTalentSkill(oth,NPC_TALENT_ACROBAT,1);
* * * *// вывод текста: "Учится: акробатика"
* * * *PrintScreen(PRINT_LearnAcrobat,-1,-1,FONT_Screen,2);
* *};
* *// карманная кража
* *else if(talent == NPC_TALENT_PICKPOCKET)
* *{
* * * *Npc_SetTalentSkill(oth,NPC_TALENT_PICKPOCKET,1);
* * * *// вывод текста: "Обучение: Карманная кража"
* * * *PrintScreen(PRINT_LearnPickpocket,-1,-1,FONT_Screen,2);
* *};
* *return TRUE;
};


* *37. Функция чтения писем или записок при передаче.

Файл B_UseFakeScroll.d

// ************************************************** **************
// Функция чтения писем или записок при передаче
// ************************************************** **************
// self - НПС получивший записку
// hero - как всегда ГГ

func void B_UseFakeScroll()
{
* *// если НПС сидит
* *if(C_BodystateContains(self,BS_SIT))
* *{
* * * *// встает
* * * *AI_StandUp(self);
* * * *// поворачивается к ГГ
* * * *B_TurnToNpc(self,hero);
* *};
* *// прячет оружие
* *AI_RemoveWeapon(self);
* *// создается в инвентаре НПС записка
* *CreateInvItem(self,Fakescroll);
* *var C_NPC target;
* *// инициализировать target = hero
* *target = Npc_GetLookAtTarget(self);
* *// если target существует
* *if(Hlp_IsValidNpc(target))
* *{
* * * *// НПС перестает смотреть на ГГ
* * * *B_StopLookAt(self);
* * * *// читает записку
* * * *AI_UseItemToState(self,Fakescroll,1);
* * * *// таймаут
* * * *AI_Wait(self,1);
* * * *// закончить чтение
* * * *AI_UseItemToState(self,Fakescroll,-1);
* * * *// смотреть на ГГ
* * * *B_LookAtNpc(self,hero);
* *}
* *else // если ГГ отсутствует
* *{
* * * *// просто прочитать записку
* * * *AI_UseItemToState(self,Fakescroll,1);
* * * *AI_Wait(self,1);
* * * *AI_UseItemToState(self, Fakescroll,-1);
* *};
};


* *38. Функция использования предмета.

Файл B_UseItem.d

// ************************************************** **************
// Функция использования предмета
// ************************************************** **************
// Аргументы: slf - НПС, использующий предмет, itmInstance - предмет

// Внимание: аргумент itemInstance является переопределенным типом (C_Item -> int)

func void B_UseItem(var C_NPC slf,var int itmInstance)
{
* *// если НПС сидит
* *if(C_BodyStateContains(slf,BS_SIT))
* *{
* * * *return;
* *};
* *var C_NPC target;
* *// получить target (НПС, на которого смотрит наш НПС)
* *target = Npc_GetLookAtTarget(slf);
* *// если target существует
* *if(Hlp_IsValidNpc(target))
* *{
* * * *// перестать смотреть на цель
* * * *B_StopLookAt(slf);
* * * *// использовать предмет
* * * *AI_UseItem(slf,itmInstance);
* * * *// смотреть на цель
* * * *B_LookAtNpc(slf,target);
* *}
* *else // цель отсутствует
* *{
* * * *// просто использовать предмет
* * * *AI_UseItem(slf,itmInstance);
* *};
};


* *39. Проверка, как далеко находится ГГ от конкретной точки.

Файл C_DiegoTooFar.d

// ************************************************** **************
// Проверка, как далеко находится ГГ от конкретной точки
// ************************************************** **************
// Аргументы: tolerance - коэффициент удаления
// Возвращаемое значение: FALSE - далеко, или индекс конкретной точки

// индексы точек
const int LOC_ANGAR * * * * = 1;
const int LOC_ICE * * * * * = 2;
const int LOC_SWAMP * * * * = 4;
const int LOC_FIRE * * * * *= 3;
const int LOC_LAKE * * * * *= 5;
const int LOC_XARDAS * * * *= 6;
const int LOC_FAJETHMINE * *= 7;
const int LOC_SILVESTROMINE = 8;
const int LOC_GRIMESMINE * *= 9;
const int LOC_BURG * * * * *= 10;
const int LOC_ORCBARRIER * *= 11;
const int LOC_ORCBARRIER_FAR = 12;

func int C_DiegoTooFar(var int tolerance)
{
* *// если ГГ находится от указанной точки не далее заданного значения
* *if(Npc_GetDistToWP(hero,"SPAWN_OW_SHADOWBEAST_10_ 01") < (4000 + tolerance))
* *{
* * * *// возвращается индекс точки
* * * *return LOC_ANGAR;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_ICEREGION_ENTRANCE_01" ) < (3000 + tolerance))
* *{
* * * *return LOC_ICE;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_PATH_046") < (1800 + tolerance))
* *{
* * * *return LOC_SWAMP;
* *}
* *else if(Npc_GetDistToWP(hero,"CASTLE_5") < (1500 + tolerance))
* *{
* * * *return LOC_FIRE;
* *}
* *else if(Npc_GetDistToWP(hero,"MT16") < (6500 + tolerance))
* *¦¦ (Npc_GetDistToWP(hero,"MT13") < (5500 + tolerance))
* *{
* * * *return LOC_LAKE;
* *}
* *else if(Npc_GetDistToWP(hero,"DT_MAINGATE") < (500 + tolerance))
* *¦¦ (Wld_GetPlayerPortalGuild() == GIL_DMT)
* *¦¦ ((Npc_GetDistToWP(hero,"DT_E3_03") < 1000) && (Npc_GetHeightToNpc(self,hero) > 1000))
* *{
* * * *return LOC_XARDAS;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_NEWMINE_03") < (2500 + tolerance))
* *¦¦ (Npc_GetDistToWP(hero,"OW_NEWMINE_03_B") < (2500 + tolerance))
* *{
* * * *return LOC_FAJETHMINE;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_MINE3_OUT") < (1200 + tolerance))
* *{
* * * *return LOC_SILVESTROMINE;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_PATH_266") < (3000 + tolerance))
* *{
* * * *return LOC_GRIMESMINE;
* *}
* *else if(Npc_GetDistToWP(hero,"OC_CENTER_02") < (12000 + tolerance))
* *¦¦ (Npc_GetDistToWP(hero,"OC_CENTER_05") < (12000 + tolerance))
* *{
* * * *return LOC_BURG;
* *}
* *else if(Npc_GetDistToWP(hero,"OC_ORCBARRIER_08") < (5000 + tolerance))
* *¦¦ (Npc_GetDistToWP(hero,"PATH_OC_PSI_01") < (5000 + tolerance))
* *{
* * * *return LOC_ORCBARRIER;
* *}
* *else if(Npc_GetDistToWP(hero,"OW_PATH_BLOODFLY01_SPAWN0 1") < (5000 + tolerance))
* *{
* * * *return LOC_ORCBARRIER_FAR;
* *};
* *// далеко от любой точки
* *return FALSE;
};


* *40. Функции проверяющие положение НПС в Хоринисе.

Файл C_NpcIsInQuarter.d

// ************************************************** **************
// Функции проверяющие положение НПС в Хоринисе
// ************************************************** **************

// Получить расстояние от НПС до центра квартала города
// ----------------------------------------------------------------
// Аргументы: slf - НПС, quarter - квартал города
// Возвращаемое значение: расстояние
func int C_GetDistToCenter(var C_NPC slf,var int quarter)
{
* *var int dist;
* *// казармы
* *if(quarter == Q_KASERNE)
* *{
* * * *// выдать расстояние до ближайшей точки казарм
* * * *if(Npc_GetDistToWP(slf,"NW_CITY_HABOUR_KASERN_CEN TRE_03") < Npc_GetDistToWP(slf,"NW_CITY_KASERN_ARMORY_SHARP") )
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_KASERN_CENTRE_ 03");
* * * *}
* * * *else
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_KASERN_ARMORY_SHARP") ;
* * * *};
* *}
* *// виселица
* *else if(quarter == Q_GALGEN)
* *{
* * * *// расстояние до виселицы
* * * *dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_PATH_33_B");
* * * *// предел
* * * *if(dist > 1900)
* * * *{
* * * * * *dist = 100000;
* * * *};
* *}
* *// рынок
* *else if (quarter == Q_MARKT)
* *{
* * * *dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_PATH_36");
* * * *if(dist > 2300)
* * * *{
* * * * * *dist = 100000;
* * * *};
* *}
* *// храм
* *else if(quarter == Q_TEMPEL)
* *{
* * * *dist = Npc_GetDistToWP(slf,"NW_CITY_MERCHANT_TEMPLE_FRONT ");
* *}
* *// нижний город
* *else if (quarter == Q_UNTERSTADT)
* *{
* * * *dist = Npc_GetDistToWP(slf,"NW_CITY_MAINSTREET_05");
* *}
* *// гавань
* *else if (quarter == Q_HAFEN)
* *{
* * * *if(Npc_GetDistToWP(slf,"NW_CITY_HABOUR_POOR_AREA_ PATH_07") < Npc_GetDistToWP(slf,"NW_CITY_HABOUR_SMALLTALK_02") )
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_POOR_AREA_PATH _07");
* * * *}
* * * *else
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_HABOUR_SMALLTALK_02") ;
* * * *};
* *}
* *// верхний город
* *else if (quarter == Q_OBERSTADT)
* *{
* * * *if(Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16"))
* * * *&& (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18"))
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04");
* * * *};
* *
* * * *if(Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04"))
* * * *&& (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18"))
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16");
* * * *};
* * * *
* * * *if(Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_04"))
* * * *&& (Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18") < Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_16"))
* * * *{
* * * * * *dist = Npc_GetDistToWP(slf,"NW_CITY_UPTOWN_PATH_18");
* * * *};
* *}
* *return dist;
};

// Является ли расстояние от НПС до указанного квартала наименьшим
// ----------------------------------------------------------------
// Аргументы: slf - НПС, quarter - квартал города
// Возвращаемое значение: TRUE - да, FALSE - нет
func int C_IsQuarterNearest(var C_NPC slf,var int quart)
{
* *var int quartDist;
* *// расстояние от НПС до нужного квартала
* *quartDist = C_GetDistToCenter(slf,quart);
* *// если оно наименьшее, то возвращаем TRUE
* *if (quartDist <= C_GetDistToCenter(slf,Q_KASERNE))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_GALGEN))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_MARKT))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_TEMPEL))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_UNTERSTADT))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_HAFEN))
* *&& (quartDist <= C_GetDistToCenter(slf,Q_OBERSTADT))
* *{
* * * *return TRUE;
* *}
* *return FALSE;
};

// Получить наиближайший к НПС квартал города
// ----------------------------------------------------------------
// Аргументы: slf - НПС
// Возвращаемое значение: квартал
func int C_NpcIsInQuarter (var C_NPC slf)
{
* *// казармы
* *if(C_IsQuarterNearest(slf,Q_KASERNE))
* *{
* * * *return Q_KASERNE;
* *};
* *// виселица
* *if(C_IsQuarterNearest(slf,Q_GALGEN))
* *{
* * * *return Q_GALGEN;
* *};
* *// рынок
* *if(C_IsQuarterNearest(slf,Q_MARKT))
* *{
* * * *return Q_MARKT;
* *};
* *// храм
* *if(C_IsQuarterNearest(slf,Q_TEMPEL))
* *{
* * * *return Q_TEMPEL;
* *};
* *// нижний город
* *if(C_IsQuarterNearest(slf,Q_UNTERSTADT))
* *{
* * * *return Q_UNTERSTADT;
* *};
* *// гавань
* *if(C_IsQuarterNearest(slf,Q_HAFEN))
* *{
* * * *return Q_HAFEN;
* *};
* *// верхний город
* *if(C_IsQuarterNearest(slf,Q_OBERSTADT))
* *{
* * * *return Q_OBERSTADT;
* *};
};

Ответить с цитированием
Старый 17.08.2005, 17:01   #236
DimaD

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

прослойка        

Добавление от 08/17/05, в 17:21:30
немного покромсал тему. посмотрите, не прибил ли я чего лишнего. Резервную копию на всякий случай я сделал ;)
Ответить с цитированием
Старый 18.08.2005, 11:17   #237
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

12. Функции организации диалогов с МОВами (Move Object).

Директория размещения файлов функций - B_Dialog_Mobsis

* *1. Функции использования предметов "горячими" клавишами.

Файл B_OnHotKey.d

// ************************************************** **************
// Функции вызова карты мира при нажатии "горячей" клавиши
// ************************************************** **************

// Найти наилучшую карту текущего уровня имеющуюся у ГГ
// ----------------------------------------------------------------
// Возвращаемое значение: ссылка на карту

// Внимание: Возвращаемое значение является переопределенным типом (C_Item -> int)

func int B_GetBestPlayerMap()
{
* *// Описание функции: если ГГ имеет карту текущего уровня, то возвращается ссылка на неё.
* *// Последовательность опроса существующих карт уровня идет в порядке от подробных к частичным
* *if(CurrentLevel == NEWWORLD_ZEN)
* *{
* * * *if(Npc_HasItems(hero,ItWr_Map_NewWorld) >= 1)
* * * *{
* * * * * *return ItWr_Map_NewWorld;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_Shrine_MIS) >= 1)
* * * *{
* * * * * *return ItWr_Map_Shrine_MIS;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_Caves_MIS) >= 1)
* * * *{
* * * * * *return ItWr_Map_Caves_MIS;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_Ornaments_A ddon) >= 1)
* * * *{
* * * * * *return ItWr_Map_NewWorld_Ornaments_Addon;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_Dexter) >= 1)
* * * *{
* * * * * *return ItWr_Map_NewWorld_Dexter;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_ShatteredGolem_MIS) >= 1)
* * * *{
* * * * * *return ItWr_ShatteredGolem_MIS;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_Orcelite_MIS) >= 1)
* * * *{
* * * * * *return ItWr_Map_Orcelite_MIS;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_City) >= 1)
* * * *{
* * * * * *return ItWr_Map_NewWorld_City;
* * * *};
* *}
* *else if(CurrentLevel == OLDWORLD_ZEN)
* *{
* * * *if(Npc_HasItems(hero,ItWr_Map_OldWorld) >= 1)
* * * *{
* * * * * *return ItWr_Map_OldWorld;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Map_OldWorld_Oremines_MI S) >= 1)
* * * *{
* * * * * *return ItWr_Map_OldWorld_Oremines_MIS;
* * * *};
* *}
* *else if(CurrentLevel == DRAGONISLAND_ZEN)
* *{
* *}
* *else if(CurrentLevel == ADDONWORLD_ZEN)
* *{
* * * *if(Npc_HasItems(hero,ItWr_Map_AddonWorld) >= 1)
* * * *{
* * * * * *return ItWr_Map_AddonWorld;
* * * *}
* * * *else if(Npc_HasItems(hero,ItWr_Addon_TreasureMap) >= 1)
* * * *{
* * * * * *return ItWr_Addon_TreasureMap;
* * * *};
* *};
* *return 0;
};

// Найти любую карту имеющуюся у ГГ
// ----------------------------------------------------------------
// Возвращаемое значение: ссылка на карту

// Внимание: Возвращаемое значение является переопределенным типом (C_Item -> int)

func int B_GetAnyPlayerMap()
{
* *// Описание функции: если ГГ имеет любую карту, то возвращается ссылка на неё.
* *// Последовательность опроса существующих карт идет в порядке от подробных к частичным
* *if(Npc_HasItems(hero,ItWr_Map_NewWorld) >= 1)
* *{
* * * *return ItWr_Map_NewWorld;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_Shrine_MIS) >= 1)
* *{
* * * *return ItWr_Map_Shrine_MIS;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_Caves_MIS) >= 1)
* *{
* * * *return ItWr_Map_Caves_MIS;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_Ornaments_A ddon) >= 1)
* *{
* * * *return ItWr_Map_NewWorld_Ornaments_Addon;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_Dexter) >= 1)
* *{
* * * *return ItWr_Map_NewWorld_Dexter;
* *}
* *else if(Npc_HasItems(hero,ItWr_ShatteredGolem_MIS) >= 1)
* *{
* * * *return ItWr_ShatteredGolem_MIS;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_Orcelite_MIS) >= 1)
* *{
* * * *return ItWr_Map_Orcelite_MIS;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_NewWorld_City) >= 1)
* *{
* * * *return ItWr_Map_NewWorld_City;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_OldWorld) >= 1)
* *{
* * * *return ItWr_Map_OldWorld;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_OldWorld_Oremines_MI S) >= 1)
* *{
* * * *return ItWr_Map_OldWorld_Oremines_MIS;
* *}
* *else if(Npc_HasItems(hero,ItWr_Map_AddonWorld) >= 1)
* *{
* * * *return ItWr_Map_AddonWorld;
* *}
* *else if(Npc_HasItems(hero,ItWr_Addon_TreasureMap) >= 1)
* *{
* * * *return ItWr_Addon_TreasureMap;
* *};
* *return 0;
};

// Функция выбора карты мира, вызываемой "горячей" клавишей
// ----------------------------------------------------------------
// Возвращаемое значение: ссылка на карту, которая вызывается "горячей" клавишей
// Примечание: Вызывается только экзешником.
func int PLAYER_HOTKEY_SCREEN_MAP()
{
* *
* *// Внимание: переменная OldInstance является переопределенным типом (C_Item -> int)
* *var int OldInstance;
* *// получить ссылку на последнюю просмотренную карту (далее - старая ссылка)
* *OldInstance = B_GetPlayerMap();
* *// если карта существует и ГГ её не имеет
* *if((OldInstance > 0) && (Npc_HasItems(hero,OldInstance) < 1))
* *{
* * * *// удалить ссылку
* * * *OldInstance = 0;
* *};
* *// очистить глобальную ссылку на карту
* *B_SetPlayerMap(OldInstance);
* *// Внимание: переменная NewInstance является переопределенным типом (C_Item -> int)
* *var int NewInstance;
* *// созранить ссылку на последнюю просмотренную карту (далее - новая ссылка)
* *NewInstance = OldInstance;
* *// если текущий уровень не Новый мир
* *if(CurrentLevel != NEWWORLD_ZEN)
* *{
* * * *// если старая ссылка является одной из карт Нового мира
* * * *if((OldInstance == ItWr_Map_Caves_MIS)
* * * *¦¦ (OldInstance == ItWr_Map_NewWorld)
* * * *¦¦ (OldInstance == ItWr_Map_NewWorld_City)
* * * *¦¦ (OldInstance == ItWr_Map_NewWorld_Dexter)
* * * *¦¦ (OldInstance == ItWr_Map_NewWorld_Ornaments_Addon)
* * * *¦¦ (OldInstance == ItWr_Map_Orcelite_MIS)
* * * *¦¦ (OldInstance == ItWr_Map_Shrine_MIS)
* * * *¦¦ (OldInstance == ItWr_ShatteredGolem_MIS))
* * * *{
* * * * * *// очистить новую ссылку
* * * * * *NewInstance = 0;
* * * *};
* *};
* *// если текущий уровень не Миненталь
* *if(CurrentLevel != OLDWORLD_ZEN)
* *{
* * * *// если старая ссылка является одной из карт Миненталя
* * * *if((OldInstance == ItWr_Map_OldWorld) ¦¦ (OldInstance == ItWr_Map_OldWorld_Oremines_MIS))
* * * *{
* * * * * *// очистить новую ссылку
* * * * * *NewInstance = 0;
* * * *};
* *};
* *// если текущий уровень не Ирдорат
* *// Примечание: этот блок можно удалить - карт для него нет
* *if(CurrentLevel != DRAGONISLAND_ZEN)
* *{
* *};
* *// если текущий уровень не Яркендар
* *if(CurrentLevel != ADDONWORLD_ZEN)
* *{
* * * *// аналогично
* * * *if((OldInstance == ItWr_Map_AddonWorld) ¦¦ (OldInstance == ItWr_Addon_TreasureMap))
* * * *{
* * * * * *NewInstance = 0;
* * * *};
* *};
* *// если новая ссылка отсутствует
* *if(NewInstance <= 0)
* *{
* * * *// найти наилучшую карту текущего уровня имеющуюся у ГГ
* * * *NewInstance = B_GetBestPlayerMap();
* *};
* *// если новая и старая ссылки отсутствуют
* *if((NewInstance <= 0) && (OldInstance <= 0))
* *{
* * * *// найти любую карту имеющуюся у ГГ
* * * *NewInstance = B_GetAnyPlayerMap();
* *};
* *// если новая ссылка инициализирована
* *if(NewInstance > 0)
* *{
* * * *// установить глобальную ссылку на эту карту
* * * *B_SetPlayerMap(NewInstance);
* * * *return NewInstance;
* *}
* *return OldInstance;
};

// Звук выпивания пузырька
func void B_LameSchlork()
{
* *Snd_Play("DRINKBOTTLE");
};

// ************************************************** **************
// Функция употребления напитка повышения маны при нажатии "горячей" клавиши
// ************************************************** **************
// Примечание: Вызывается только экзешником.

func void PLAYER_HOTKEY_LAME_POTION()
{
* *// если ГГ жив
* *if(Npc_IsInState(hero,ZS_Dead) == FALSE)
* *{ *
* * * *// если ГГ имеет соответствующий напиток и при его выпивании мана не превысит максимальную
* * * *if(Npc_HasItems(hero,ItPo_Mana_03))
* * * *&& (((hero.attribute[ATR_MANA_MAX])-(hero.attribute[ATR_MANA])) >= Mana_Elixier)
* * * *{
* * * * * *// увеличить ману
* * * * * *Npc_ChangeAttribute(hero,ATR_MANA,Mana_Elixier);
* * * * * *// удалить напиток
* * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_03);
* * * * * *// звук выпивания
* * * * * *B_LameSchlork();
* * * *}
* * * *// аналогично
* * * *else if(Npc_HasItems (hero,ItPo_Mana_02))
* * * *&& (((hero.attribute[ATR_MANA_MAX])-(hero.attribute[ATR_MANA])) >= MANA_Extrakt)
* * * *{
* * * * * *Npc_ChangeAttribute(hero,ATR_MANA,MANA_Extrakt);
* * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_02);
* * * * * *B_LameSchlork();
* * * *}
* * * *else if(Npc_HasItems(hero,ItPo_Mana_01))
* * * *&& (((hero.attribute[ATR_MANA_MAX])-(hero.attribute[ATR_MANA])) >= MANA_Essenz)
* * * *{
* * * * * *Npc_ChangeAttribute(hero,ATR_MANA,MANA_Essenz);
* * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_01);
* * * * * *B_LameSchlork();
* * * *}
* * * *// если текущая мана не равна максимальной
* * * *else if(hero.attribute[ATR_MANA_MAX] != hero.attribute[ATR_MANA])
* * * *{
* * * * * *// если ГГ имеет напиток
* * * * * *if(Npc_HasItems(hero,ItPo_Mana_01))
* * * * * *{
* * * * * * * *Npc_ChangeAttribute(hero,ATR_MANA,Mana_Essenz);
* * * * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_01);
* * * * * * * *B_LameSchlork();
* * * * * *}
* * * * * *else if(Npc_HasItems(hero,ItPo_Mana_02))
* * * * * *{
* * * * * * * *Npc_ChangeAttribute(hero,ATR_MANA,MANA_Extrakt);
* * * * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_02);
* * * * * * * *B_LameSchlork();
* * * * * *}
* * * * * *else if(Npc_HasItems(hero,ItPo_Mana_03))
* * * * * *{
* * * * * * * *Npc_ChangeAttribute(hero,ATR_MANA,MANA_Elixier);
* * * * * * * *Npc_RemoveInvItem(hero,ItPo_Mana_03);
* * * * * * * *B_LameSchlork();
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * *Print("Нет напитка маны!");
* * * * * *};
* * * *}
* * * *else
* * * *{
* * * * * *Print("Максимум маны!");
* * * *};
* *};
};

// ************************************************** **************
// Функция употребления напитка повышения жизни при нажатии "горячей" клавиши
// ************************************************** **************
// Примечание: Вызывается только экзешником.

// Все аналогично употреблению напитков маны
func void PLAYER_HOTKEY_LAME_HEAL()
{
* *if(Npc_IsInState(hero,ZS_Dead)==FALSE)
* *{ *
* * * *if(Npc_HasItems(hero,ItPo_HEALTH_03))
* * * *&& (((hero.attribute[ATR_HITPOINTS_MAX])-(hero.attribute[ATR_HITPOINTS])) >= HP_Elixier)
* * * *{
* * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier );
* * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_03);
* * * * * *B_LameSchlork();
* * * *}
* * * *else if(Npc_HasItems(hero,ItPo_HEALTH_02))
* * * *&& (((hero.attribute[ATR_HITPOINTS_MAX])-(hero.attribute[ATR_HITPOINTS])) >= HP_Extrakt)
* * * *{
* * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt );
* * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_02);
* * * * * *B_LameSchlork();
* * * *}
* * * *else if(Npc_HasItems(hero,ItPo_HEALTH_01))
* * * *&& (((hero.attribute[ATR_HITPOINTS_MAX])-(hero.attribute[ATR_HITPOINTS])) >= HP_Essenz)
* * * *{
* * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz) ;
* * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_01);
* * * * * *B_LameSchlork();
* * * *}
* * * *else if((hero.attribute[ATR_HITPOINTS_MAX]) != (hero.attribute[ATR_HITPOINTS]))
* * * *{
* * * * * * * *if(Npc_HasItems(hero,ItPo_HEALTH_01))
* * * * * * * *{
* * * * * * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz) ;
* * * * * * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_01);
* * * * * * * * * *B_LameSchlork();
* * * * * * * *}
* * * * * * * *else if(Npc_HasItems(hero,ItPo_HEALTH_02))
* * * * * * * *{
* * * * * * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt );
* * * * * * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_02);
* * * * * * * * * *B_LameSchlork();
* * * * * * * *}
* * * * * * * *else if(Npc_HasItems(hero,ItPo_HEALTH_03))
* * * * * * * *{
* * * * * * * * * *Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier );
* * * * * * * * * *Npc_RemoveInvItem(hero,ItPo_HEALTH_03);
* * * * * * * * * *B_LameSchlork();
* * * * * * * *}
* * * * * * * *else
* * * * * * * *{
* * * * * * * * * *Print("Нет лечебного напитка!");
* * * * * * * *};
* * * * }
* * * * else
* * * * {
* * * * * * * *Print("Максимум жизненной энергии!");
* * * * };
* *};
};


* *2. Функции инициализации и получения ссылки на последнюю просмотренную карту.

Файл B_PlayerMap.d

// ************************************************** **************
// Функции инициализации и получения ссылки на последнюю просмотренную карту
// ************************************************** **************

// Внимание: переменная PlayerMapInstance является переопределенным типом (C_Item -> int)
var int PlayerMapInstance; * * *// ссылка на карту

// Функция получения ссылки на карту
// ----------------------------------------------------------------
// Возвращаемое значение: ссылка на карту

// Внимание: Возвращаемое значение является переопределенным типом (C_Item -> int)

func int B_GetPlayerMap()
{
* *return PlayerMapInstance;
};

// Функция инициализации ссылки на карту
// ----------------------------------------------------------------
// Аргумент: MapInstance - последняя просмотренная карта
// Возвращаемое значение: ссылка на карту

// Внимание: Возвращаемое значение и аргумент MapInstance являются переопределенными типами (C_Item -> int)

func int B_SetPlayerMap(var int MapInstance)
{
* *PlayerMapInstance = MapInstance;
* *return PlayerMapInstance;
};


* *3. Функции неудачного использования МОВов.

Файл B_RefuseAction.d

// ************************************************** **************
// Функции неудачного использования МОВов
// ************************************************** **************
// Примечание: Все эти функции вызываются только экзешником

// ГГ не имеет ключа или отмычки
func void PLAYER_MOB_MISSING_KEY_OR_LOCKPICK()
{
* *// вывод текста "Мне нужен ключ или отмычка"
* *Print(PRINT_Picklock_or_KeyMissing);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
* *// ГГ говорит сам себе (SVM фраза) "Гм, у меня нет ни ключа, ни отмычки."
* *B_Say_Overlay(self,self,"$PICKLOCKORKEYMISSING");
};

// ГГ не имеет ключа
func void PLAYER_MOB_MISSING_KEY()
{
* *// вывод текста "Мне нужен ключ от этого замка"
* *Print(PRINT_KeyMissing);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
* *// ГГ говорит сам себе (SVM фраза) "Без настоящего ключа я не открою!"
* *B_Say_Overlay(self,self,"$KEYMISSING");
};

// ГГ не имеет отмычки
func void PLAYER_MOB_MISSING_LOCKPICK()
{
* *// если ГГ не обучен работе с отмычками
* *if(Npc_GetTalentSkill(hero,NPC_TALENT_PICKLOCK) == FALSE)
* *{
* * * *// вывод текста "У меня нехватает таланта"
* * * *Print(PRINT_NoPicklockTalent);
* * * *// ГГ пожимает плечами
* * * *AI_PlayAni(self,"T_DONTKNOW");
* * * *// ГГ говорит сам себе (SVM фраза) "Я не умею взламывать замки ..."
* * * *B_Say_Overlay(self,self,"$NOPICKLOCKTALENT");
* *}
* *else
* *{
* * * *// вывод текста "Мне нужна отмычка"
* * * *Print(PRINT_PicklockMissing);
* * * *// ГГ пожимает плечами
* * * *AI_PlayAni(self,"T_DONTKNOW");
* * * *// ГГ говорит сам себе (SVM фраза) "Пара отмычек помогли бы!"
* * * *B_Say_Overlay(self,self,"$PICKLOCKMISSING");
* *};
};

// Попытка ГГ открыть неоткрываемый МОВ
func void PLAYER_MOB_NEVER_OPEN()
{
* *// вывод текста "Я не могу ничего сделать"
* *Print(PRINT_NeverOpen);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
};

// ГГ не имеет соответствующего предмета для использования МОВа
func void PLAYER_MOB_MISSING_ITEM()
{
* *// вывод текста "У меня нет соответствующего предмета"
* *Print(PRINT_MissingItem);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
* *// ГГ говорит сам себе (SVM фраза) "Но чем?"
* *B_Say_Overlay(self,self,"$MISSINGITEM");
};

// Если МОВ уже используется другим НПС
func void PLAYER_MOB_ANOTHER_IS_USING()
{
* *// вывод текста "Это сейчас занято"
* *Print(PRINT_AnotherUser);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
};

// Если ГГ находится слишком далеко от МОВа
func void PLAYER_MOB_TOO_FAR_AWAY()
{
* *// вывод текста "Я нахожусь слишком далеко"
* *Print(PRINT_Toofar_Away);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
};

// Если ГГ подошел к МОВу не с той стороны
func void PLAYER_MOB_WRONG_SIDE()
{
* *// вывод текста "Я нахожусь с другой стороны"
* *Print(PRINT_WrongSide);
* *// ГГ пожимает плечами
* *AI_PlayAni(self,"T_DONTKNOW");
};

// ГГ не имеет денег для покупки предмета
func void PLAYER_TRADE_NOT_ENOUGH_GOLD()
{
* *// вывод текста "У вас недостаточно золота, чтобы купить это."
* *Print(PRINT_Trade_Not_Enough_Gold);
};


Ответить с цитированием
Старый 23.08.2005, 14:05   #238
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Ой, а где ещё две страницы? Их вроде как 12 было...

Пр-ка.
Ответить с цитированием
Старый 23.08.2005, 16:15   #239
DimaD

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

2Vendiga:
Ой, а где ещё две страницы? Их вроде как 12 было...
я же написал, что почистил ветку
Ответить с цитированием
Старый 09.09.2005, 14:57   #240
Vendiga

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Уроки скриптологии

Ой, а почему уроки прекратились? Что уже нечему учть? :(
Ответить с цитированием
Страница 6 из 8 123456 78


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 08:48. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2020

Яндекс.Метрика