|
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; };
|