Показать сообщение отдельно
Старый 14.06.2005, 15:55   #445
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию 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);
* };
};
Отправить личное сообщение для Ответить с цитированием