Показать сообщение отдельно
Старый 12.08.2005, 18:44   #711
Finsernis

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

По умолчанию Re: Скриптинг в Готике

2Всем:
Прошу проверить (логически) то, что я напишу ниже, просто не уверен на все 100%

2DEDROIT:

Для того, чтобы проверить, читал ли ты письмо нужно ввести новую переменную. Для этого в начале скрипта, где описана инстанция твоего письма напиши:
*
Var Int Letter_Riding_For_Hero; // переменная-флаг

Далее тебе предстоит создать письмо:
*
instance ItWr_MyLetter_DontUse_MIS(C_Item)
{
* * *name = "Запечатанное письмо";
* * *mainflag = ITEM_KAT_DOCS;
* * *flags = ITEM_MISSION;
* * *value = 0;
* * *visual = "ItWr_Scroll_02.3DS";
* * *material = MAT_LEATHER;
* * *on_state[0] = UseMyLetterSealed; // читаем запечатанное письмо
* * *scemeName = "MAPSEALED"; //письмо исчезнет из инвентаря после прочтения
* * *description = name;
};

instance ItWr_MyLetter_Use_MIS(C_Item)
{
* * *name = "Открытое письмо";
* * *mainflag = ITEM_KAT_DOCS;
* * *flags = ITEM_MISSION;
* * *value = 0;
* * *visual = "ItWr_Scroll_01.3DS";
* * *material = MAT_LEATHER;
* * *on_state[0] = UseMyLetter; //читаем открытое письмо
* * *scemeName = "MAP";
* * *description = name;
};

Далее идет функция чтения открытого письма, тут все ясно:

func void UseMyLetter ()
{
** * *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_PrintLines (nDocID, 0, "Bla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla blaBla bla");
* * *Doc_Show (nDocID);
};

А вот функция чтения закрытого письма:

func void UseMyLetterSealed ()
{
// если NPC игрок и письмо еще небыло прочитано
If ((Npc_IsPlayer (self)) && (Letter_Riding_For_Hero == FALSE))
* * *{
* * * * * *// Создаем в инвентаре распечатанное письмо
* * * * * *CreateInvItems (self, ItWr_MyLetter_Use_MIS, 1);
* * * * * *Letter_Riding_For_Hero = TRUE; // устанавливаем флаг чтения письма
* * * * * *UseMyLetter (); // выводим на экран само письмо
* * *};
};

Потом вот что должно быть в диалоге для того, чтобы проверить, читал ли ГГ письмо:

AI_Output (other, self, "DIA_MyNPC_01_01"); * * *//У меня для тебя письмо.
* * *AI_Output (self, other, " DIA_MyNPC_01_02"); * * *//Для меня?
* * *// если письмо не читано
* * *if (Letter_Riding_For_Hero == FALSE)
* * *{
* * * * * *B_GivePlayerXP (200);
* * * * * *B_GiveInvItems (other, self, ItWr_MyLetter_DontUse_MIS, 1);
* * * * * *AI_Output (self, other, " DIA_MyNPC_01_03"); * * *//Ты не читал письмо, молодец!
* * *}
* * *else
* * *{
* * * * * *B_GivePlayerXP (150);
* * * * * *B_GiveInvItems (other, self, ItWr_MyLetter_Use_MIS, 1);
* * * * * *AI_Output (self, other, " DIA_MyNPC_01_04"); * * *//Ты прочитал письмо, это тебе с рук не сойдет!
* * *};

Вот и все. ;)
Ответить с цитированием