|
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"); * * *//Ты прочитал письмо, это тебе с рук не сойдет! * * *}; Вот и все. ;)
|