|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2marazmus: Это все очень хорошо, но не мог бы ты нормально форматировать текст, а то очень сложно разбирать ::)
Добавление от 06/14/05, в 16:15:36 Вот-с, кой-чего подправил :)
const int MakeArrows_Value * *= 60; * //Сколько стрел будет произведено за 1 раз const int MakeBolts_Value * * = 30; * //Сколько болтов будет произведено за 1 раз
const int MakeArrows_Need_Raws * = 1; * *//Затраты на одноразовое производство стрел - Раскаленная Сталь const int MakeArrows_Need_Maces *= 10; * //Затраты на одноразовое производство стрел - Палки (10 штук)
//Для удобства //Описания пунктов выбора
const string ChoiceDesc_MakeArrows * *= "Сделать стрелы или арбалетные болты"; const string ChoiceDesc_MakeRaws * * *= "Сделать заготовки для оружия";
const string ChoiceDesc_MakeArrows_Bow * = "Стрелы (1 раск.сталь, 10 дерев.палок) = "; const string ChoiceDesc_MakeArrows_Arb * = "Болты (1 раск.сталь, 10 дерев.палок) = ";
var int IsEnterWCommon; * * //Зашли в диалог "КОВКА ОРУЖИЯ ИЗ ЗАГОТОВОК"
//************************************************** ***** // * * Основной диалог - ЗАКОНЧИТЬ //************************************************** ***** //Выход из всего диалога instance PC_SmithWeapon_End(c_info) { * npc * * * * = PC_Hero; * nr * * * * *= 999; * condition * = PC_SmithWeapon_End_Condition; * information = PC_SmithWeapon_End_Info; * permanent * = TRUE; * description = "ЗАКОНЧИТЬ КОВКУ"; };
func int PC_SmithWeapon_End_Condition() { * if(PLAYER_MOBSI_PRODUCTION == MOBSI_SMITHWEAPON) * { * * * *return TRUE; * }; };
func void PC_SmithWeapon_End_Info() {
* CreateInvItems(self,ItMiSwordRawHot,1); * //Возвращаем RAW * //Здесь "тонкость" - при использовании наковальни проверяется, * //есть ли у ГГ Раскаленная Сталь, если есть, то при начале * //диалога она автоматически "отбирается", поэтому ее надо вернуть скриптами * Print("Закончили ковку");
* B_ENDPRODUCTIONDIALOG(); * * * * //Скрипт окончания ковки };
//************************************************** ****** // * * Создаем поддиалог КОВАТЬ ОРУЖИЕ ИЗ ЗАГОТОВОК //************************************************** ****** // //!! Здесь непонятка лично для меня. //Если этот пункт назвать иначе, чем PC_Common, то он НЕ ОТОБРАЖАЕТСЯ //Буду рад, если кто разъяснит
instance PC_Common(c_info) { * npc * * * * = PC_Hero; * nr * * * * *= 1; * condition * = PC_Common_Condition; * information = PC_Common_Info; * permanent * = TRUE; * description = "КОВАТЬ ОРУЖИЕ ИЗ ЗАГОТОВОК ..."; };
func int PC_Common_Condition() { * * if(PLAYER_MOBSI_PRODUCTION == MOBSI_SMITHWEAPON) * { * * * *return TRUE; * }; };
var int IsMakeList; * * * * *//Находимся в основном списке выбора (УРОВЕНЬ Make) var int IsMakeListArrows; * *//Находимся в списке выбора "ДЕЛАТЬ СТРЕЛЫ" var int IsMakeListRaws; * * *//Находимся в списке выбора "ДЕЛАТЬ ЗАГОТОВКИ"
func void PC_Common_MakeChoiceList() { * //Формируем основной (корневой) список выборов (УРОВЕНЬ - Make) * //Для удобства формирование списка вынес в отдельную функцию (эту), чтобы не перегружать PR_Common_Info * * IsMakeList = TRUE; * * * * *//Флаг создания основного списка * IsMakeListArrows = FALSE; * //Флаги "подсписков" * IsMakeListRaws = FALSE; * * * Info_ClearChoices(PC_Common); * *//Т.к. при выборе пункта, созданного с помощью Info_AddChoice, * //этот пункт исчезает, то нужно списко очистить и создать заново * * //Этот пункт ("НАЗАД") создаем в любом случае, чтобы не "застрять" в меню * //Функция возврата PC_Common_BackFromChoices - одна на всех, так удобнее * * Info_AddChoice(PC_Common,"НАЗАД",PC_Common_BackFro mChoices); * * //Добавляем пункты выбора * * //Делать стрелы * * //Новые константы WEAPON_ARROW и т.п. описаны в CONSTANTS.D, * //массив PLAYER_TALENT_SMITH [] за счет них расширен (там же) * if(PLAYER_TALENT_SMITH[WEAPON_ARROW] == TRUE) * *//Умеем делать стрелы * { * * *Info_AddChoice(PC_Common,ChoiceDesc_MakeArrows,PC _Common_MakeArrows); * *//Если выбрали, "раскрываем" список создания стрел * };
* if(PLAYER_TALENT_SMITH[WEAPON_RAW_MELEE] == TRUE ¦¦ PLAYER_TALENT_SMITH[WEAPON_RAW_DISTANT] == TRUE) * *//Умеем делать заготовки для оружия * { * * *Info_AddChoice(PC_Common,ChoiceDesc_MakeRaws,PC_C ommon_MakeRaws); * *//Если выбрали, "раскрываем" список создания заготовок * }; };
func void PC_Common_MakeChoiceList_Arrows() { * //Т.к. будем создавать новый список (СозданиеСтрел), старый чистим * Info_ClearChoices(PC_Common); * Info_AddChoice(PC_Common,"НАЗАД",PC_Common_BackFro mChoices); * * //Делаем стрелы * * //Делаем стрелы для арбалета * if(PLAYER_TALENT_SMITH[WEAPON_ARROW] == TRUE) * *//Умеем делать стрелы * { * * *Info_AddChoice(PC_Common,ConcatStrings(ChoiceDesc _MakeArrows_Arb,intToStri ng(MakeBolts_Value)),PC_Common_MakeArrows_Arb); * * *//Если выбрали, делаем болты * };
* //Делаем стрелы для лука * if(PLAYER_TALENT_SMITH[WEAPON_ARROW] == TRUE ) * *//Умеем делать стрелы * { * * *Info_AddChoice(PC_Common,ConcatStrings(ChoiceDesc _MakeArrows_Bow,intToStri ng(MakeArrows_Value)),PC_Common_MakeArrows_Bow); * * *//Если выбрали, делаем стрелы * }; };
func void PC_Common_Info() { * IsEnterWCommon = TRUE; * * //После того, как выбрали пункт КОВКА ОРУЖИЯ ИЗ ЗАГОТОВОК, формируем новый список * PC_Common_MakeChoiceList(); };
func void PC_Common_BackFromChoices() { * Print("НАЗАД из списка ВЫБОРА"); * *Info_ClearChoices(PC_Common);
* if(IsMakeListArrows == TRUE ¦¦ IsMakeListRaws == TRUE) * { * * *PC_Common_MakeChoiceList(); * * *IsMakeListArrows = FALSE; * * *IsMakeListRaws = FALSE; * }; * };
func void PC_Common_MakeArrows() { * IsMakeListArrows = TRUE; * Print("Зашли в диалог ДЕЛАТЬ СТРЕЛЫ"); * PC_Common_MakeChoiceList_Arrows(); };
func void PC_Common_MakeArrows_Bow() { // * ItMw_1h_Bau_Mace - тяжелая палка, нужна для производства
* if((Npc_HasItems(hero,ItMw_1h_Bau_Mace) >= MakeArrows_Need_Maces) //Должна быть тяжелая палка * && (Npc_HasItems(hero,ItMiSwordrawhot) >= MakeArrows_Need_Raws)) *//Должно быть раскаленное железо * { * * * *//Убираем использованные предметы из инвентаря * * *Npc_RemoveInvItems(self,ItMw_1h_Bau_Mace,MakeArro ws_Need_Maces); * * *Npc_RemoveInvItems(self,ItMiSwordrawhot,MakeArrow s_Need_Raws); * * * * * *CreateInvItems(self,ItRw_Arrow,MakeArrows_Value); * //Даем стрелы для лука * * *Print(ConcatStrings(intToString(MakeArrows_Value) ," стрел изготовлено")); * } * else * { * * Print("Не хватает материалов..."); * }; * PC_Common_MakeChoiceList_Arrows(); };
func void PC_Common_MakeArrows_Arb() { * Print(ConcatStrings(intToString(MakeBolts_Value)," арбалетных болтов изготовлено")); * CreateInvItems(self,ItRw_Bolt,MakeBolts_Value); * //Даем арбалетные болты * PC_Common_MakeChoiceList_Arrows(); };
func void PC_Common_MakeChoiceList_Raws() { * Info_ClearChoices(PC_Common); * Info_AddChoice(PC_Common,"НАЗАД",PC_Common_BackFro mChoices); * * //Делаем заготовки * * //Делаем заготовки для ручного оружия * if(PLAYER_TALENT_SMITH[WEAPON_RAW_MELEE] == TRUE) * //Умеем делать заготовки для ручного оружия * { * * *Info_AddChoice(PC_Common,"Сделать заготовку для ручного оружия (1 раск.железо + 1 кварц = 1 стальная заготовка)",PC_Common_MakeRaws_Weapon); * };
* //Делаем заготовки для дистанционного оружия * if(PLAYER_TALENT_SMITH[WEAPON_RAW_DISTANT] == TRUE) * //Умеем делать заготовки для дистанционного оружия * { * * *Info_AddChoice(PC_Common,"Сделать заготовку для дистанционного оружия (1 дерево + 1 лечебная трава = 1 деревянная заготовка",PC_Common_MakeRaws_Dist); * }; };
func void PC_Common_MakeRaws() { * IsMakeListRaws = TRUE; * Print("Зашли в диалог ДЕЛАТЬ ЗАГОТОВКИ"); * PC_Common_MakeChoiceList_Raws(); * * *//"Родительский" список };
func void PC_Common_MakeRaws_Weapon() { * Print("Изготавливаем заготовки для ручного оружия"); * PC_Common_MakeChoiceList_Raws(); };
func void PC_Common_MakeRaws_Dist() { * Print("Изготавливаем заготовки для дистанционного оружия"); * PC_Common_MakeChoiceList_Raws(); };
//************************************************** ** //SMITHWEAPON_S1 //-------------- //Основная функция, которая вызывается при использовании наковальни //Необходимый предмет - РаскаленнаяСталь (SwordRawHot) //************************************************** ***
func void SMITHWEAPON_S1() { * var C_NPC her; * * * her = Hlp_GetNpc(PC_Hero); * if(Hlp_GetinstanceID(self)==Hlp_GetinstanceID(her) ) * { * * * *self.aivar[AIV_INVINCIBLE] = TRUE; * * *PLAYER_MOBSI_PRODUCTION = MOBSI_SMITHWEAPON; * * *Ai_ProcessInfos(self); * }; };
|