|
|
17.06.2005, 09:20
|
#201
|
|
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, 09:23
|
#202
|
|
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, 12:52
|
#203
|
|
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, 12:53
|
#204
|
|
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, 11:53
|
#205
|
|
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, 11:52
|
#206
|
|
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; };
...продолжение следует
|
|
|
08.07.2005, 10:33
|
#212
|
|
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, 10:53
|
#213
|
|
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, 10:09
|
#214
|
|
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, 11:01
|
#215
|
|
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, 13:04
|
#216
|
|
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, 09:34
|
#217
|
|
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, 13:50
|
#218
|
|
|
|
|
*
Регистрация: 29.08.2004
Сообщений: 1
|
|
|
|
|
|
Re: Уроки скриптологии
2Vam:
// amount + "предметов принято"
|
Судя по всему используется не оригинальный немецкий скрипт - Должно быть // amount + " предметов принято" Пробел обязателен - иначе не проставляется количество предметов. Во многих местах надо обратиь на это внимание - типа получено/получен, принято/передано и т.д.
|
|
|
15.07.2005, 15:55
|
#219
|
|
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, 16:05
|
#220
|
|
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, 10:29
|
#221
|
|
Re: Уроки скриптологии
2Killer-XXX:
Ты ничем тут помочь не сможешь?
|
PFX систему подробно не изучал, могу предложить только ссылку, но нужен товарищ со знанием немецкого языка, чтобы перевести это. Других описаний не встречал, если у кого есть более полная информация, можете сообщить. Пока всё.
|
|
|
05.08.2005, 18:15
|
#222
|
|
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, 16:36
|
#223
|
|
Re: Уроки скриптологии
Скриптовая болванка 0,74 Мб. Построена на немецких исходниках и некоторых акелловских d-файлах. Удален почти весь Story и Items. Рабочая под Готику 2, глюки пока не обнаружены. На мой взгляд, болванка очень удобна для новичков, т.к. файлов меньше и скорость компиляции высокая. Вполне подойдет для тех, кто делает моды, а не аддоны. --- Vam: Большое спасибо за PFX.
|
|
|
08.08.2005, 10:28
|
#224
|
|
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, 10:32
|
#225
|
|
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, 10:16
|
#226
|
|
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, 10:31
|
#227
|
|
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, 14:00
|
#228
|
|
Re: Уроки скриптологии
2WSA:
На мой взгляд, болванка очень удобна для новичков, т.к. файлов меньше и скорость компиляции высокая. Вполне подойдет для тех, кто делает моды, а не аддоны.
|
"Скриптовая болванка" хороша, но не в таком же виде, в ней необходимо было поместить все подробные комментарии из Уроков скриптологии (или использовать файлы из них). Первое её предназначение - создать базу скриптов, которая затем расширяется и модернизируется под свои нужды, а без подробных комментариев с ней работать очень трудно, если сам не знаешь всех скриптовых особенностей. Но пока всё равно "плюс". ;)
|
|
|
11.08.2005, 15:35
|
#229
|
|
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, 10:24
|
#230
|
|
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, 10:10
|
#231
|
|
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, 09:56
|
#232
|
|
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, 17:47
|
#233
|
|
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, 12:27
|
#234
|
|
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, 15:49
|
#235
|
|
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; * *}; };
|
|
|
18.08.2005, 12:17
|
#237
|
|
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, 17:15
|
#239
|
|
Re: Уроки скриптологии
2Vendiga:
Ой, а где ещё две страницы? Их вроде как 12 было...
|
я же написал, что почистил ветку
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 15:38. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|