Показать сообщение отдельно
Старый 08.08.2005, 09:28   #224
Vam

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

По умолчанию 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;
};

Ответить с цитированием