|
Re: Уроки скриптологии
// ************************************************ // Инициализация талантов (умений) // ------------------------------------------------ // Аргумент: slf - НПС // ************************************************
func void B_GiveNpcTalents(var C_NPC slf) { * *// НПС владеет 6 кругом магии * *Npc_SetTalentSkill(slf,NPC_TALENT_MAGE,6); * *// НПС умеет взламывать замки * *Npc_SetTalentSkill(slf,NPC_TALENT_PICKLOCK,1); * *// НПС умеет подкрадываться * *Npc_SetTalentSkill(slf,NPC_TALENT_SNEAK,1); * *// НПС не обучен акробатике * *Npc_SetTalentSkill(slf,NPC_TALENT_ACROBAT,0); * *// НПС не обучен карманной краже * *Npc_SetTalentSkill(slf,NPC_TALENT_PICKPOCKET,0); * *// НПС обучен кузнечному делу * *Npc_SetTalentSkill(slf,NPC_TALENT_SMITH,1); * *// НПС может создавать руны * *Npc_SetTalentSkill(slf,NPC_TALENT_RUNES,1); * *// НПС владеет алхимией * *Npc_SetTalentSkill(slf,NPC_TALENT_ALCHEMY,1); * *// НПС не может разделывать животных * *Npc_SetTalentSkill(slf,NPC_TALENT_TAKEANIMALTROPH Y,0); };
... ёще файл
// ************************************* // Установка значений атрибутов НПС // ------------------------------------- // Аргументы: // * * *slf - НПС // * * *kap - номер главы // *************************************
func void B_SetAttributesToChapter(var C_NPC slf,var int kap) { * *// НПС владеет 6 кругом магии (Примечание: в принципе здесь лишняя, есть в предыдущей функции) * *Npc_SetTalentSkill(slf,NPC_TALENT_MAGE,6); * *// начало игры * *if(kap == 0) * *{ * * * *// уровень * * * *slf.level = 3; * * * *// атрибуты * * * *slf.attribute[ATR_STRENGTH] * * * * = 10; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 10; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 10; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 10; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 40; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 40; * *}; * *// Глава 1 * *if(kap == 1) * *{ * * * *slf.level = 10; * * * *slf.attribute[ATR_STRENGTH] * * * * = 50; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 50; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 50; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 50; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 160; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 160; * *}; * *// Глава 2 * *if(kap == 2) * *{ * * * *slf.level = 20; * * * *slf.attribute[ATR_STRENGTH] * * * * = 100; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 100; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 100; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 100; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 280; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 280; * *}; * *// Глава 3 * *if(kap == 3) * *{ * * * *slf.level = 30; * * * *slf.attribute[ATR_STRENGTH] * * * * = 125; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 125; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 125; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 125; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 400; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 400; * *}; * *// Глава 4 * *if(kap == 4) * *{ * * * *slf.level = 40; * * * *slf.attribute[ATR_STRENGTH] * * * * = 150; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 150; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 150; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 150; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 520; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 520; * *}; * *// Глава 5 * *if(kap == 5) * *{ * * * *slf.level = 50; * * * *slf.attribute[ATR_STRENGTH] * * * * = 175; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 175; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 175; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 175; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 640; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 640; * *}; * *// Глава 6 * *if(kap >= 6) * *{ * * * *slf.level = 60; * * * *slf.attribute[ATR_STRENGTH] * * * * = 200; * * * *slf.aivar[REAL_STRENGTH] * * * * * *= 200; * * * *slf.attribute[ATR_DEXTERITY] * * * *= 200; * * * *slf.aivar[REAL_DEXTERITY] * * * * * = 200; * * * *slf.attribute[ATR_MANA_MAX] * * * * = 1000; * * * *slf.aivar[REAL_MANA_MAX] * * * * * *= 1000; * * * *slf.attribute[ATR_MANA] * * * * * * = 1000; * * * *slf.attribute[ATR_HITPOINTS_MAX] * *= 760; * * * *slf.attribute[ATR_HITPOINTS] * * * *= 760; * *}; * *// кол-во экспы * *slf.exp * * * * * * = (500*((slf.level+1)/2)*(slf.level+1)); * *slf.exp_next * * * *= (500*((slf.level+2)/2)*(slf.level+1)); };
... ёще файл
// ************************************* // Установка значений боевых навыков // ------------------------------------- // Аргументы: // * * *slf - НПС // * * *percent - процент умения // *************************************
func void B_SetFightSkills(var C_NPC slf,var int percent) { * *// установить владение одноручником * *B_RaiseFightTalent(slf,NPC_TALENT_1H,percent); * *// установить владение двуручником * *B_RaiseFightTalent(slf,NPC_TALENT_2H,percent); * *// установить владение луком * *B_RaiseFightTalent(slf,NPC_TALENT_BOW,percent); * *// установить владение арбалетом * *B_RaiseFightTalent(slf,NPC_TALENT_CROSSBOW,percen t); };
... ёще файл
// *********************************************** // Визуализация тела НПС // ----------------------------------------------- // Аргументы: // * * *slf - НПС // * * *gender - пол // * * *headMesh - файл изображения головы // * * *faceTex - номер текстуры лица // * * *bodyTex - номер текстуры тела // * * *armorInstance - ссылка на броню // ***********************************************
func void B_SetNpcVisual(var C_NPC slf,var int gender,var string headMesh,var int faceTex,var int bodyTex,var int armorInstance) { * *// установить пол НПС * *slf.aivar[AIV_Gender] = gender; * *// установить модель поведения * *Mdl_SetVisual(slf,"HUMANS.MDS"); * *// если мужчина * *if(gender == MALE) * *{ * * * *// построить изображение мужчины * * * *Mdl_SetVisualBody(slf,"hum_body_Naked0",bodyTex,0 ,headMesh,faceTex,0, armorInstance); * * * *// если сила < 50 * * * *if(slf.attribute[ATR_STRENGTH] < 50) * * * *{ * * * * * *// задать масштаб изображения (слабый мужчина уже) * * * * * *Mdl_SetModelScale(slf,0.9,1,1); * * * *}; * * * *// если сила > 100 * * * *if(slf.attribute[ATR_STRENGTH] > 100) * * * *{ * * * * * *// задать масштаб изображения (сильный мужчина шире) * * * * * *Mdl_SetModelScale(slf,1.1,1,1); * * * *}; * *} * *else // женщина * *{ * * * *// если текстура тела мужская * * * *if(bodyTex >= 0) && (bodyTex <= 3) * * * *{ * * * * * *// перейти на женскую текстуру * * * * * *bodyTex = bodyTex + 4; * * * *}; * * * *// построить изображение женщины * * * *Mdl_SetVisualBody(slf,"Hum_Body_Babe0",bodyTex,0, headMesh,faceTex,0,a rmorInstance); * *}; };
... ёще файл
// ******************** // Прототип НПС людей // ********************
prototype Npc_Default(C_NPC) { * *// инициализация атрибутов * *attribute * [ATR_STRENGTH] * * * * *= 10; * *aivar * * * [REAL_STRENGTH] * * * * = 10; * *attribute * [ATR_DEXTERITY] * * * * = 10; * *aivar * * * [REAL_DEXTERITY] * * * *= 10; * *attribute * [ATR_MANA_MAX] * * * * *= 10; * *aivar * * * [REAL_MANA_MAX] * * * * = 10; * *attribute * [ATR_MANA] * * * * * * *= 10; * *attribute * [ATR_HITPOINTS_MAX] * * = 40; * *attribute * [ATR_HITPOINTS] * * * * = 40; * *// инициализация талантов * *HitChance * [NPC_TALENT_1H] * * * * = 0; * *HitChance * [NPC_TALENT_2H] * * * * = 0; * *HitChance * [NPC_TALENT_BOW] * * * *= 0; * *HitChance * [NPC_TALENT_CROSSBOW] * = 0; * *// инициализация защиты * *protection *[PROT_EDGE] * * * * * * = 0; * *protection *[PROT_BLUNT] * * * * * *= 0; * *protection *[PROT_POINT] * * * * * *= 0; * *protection *[PROT_FIRE] * * * * * * = 0; * *protection *[PROT_MAGIC] * * * * * *= 0; * *// тип наносимого повреждения - тупое оружие (кулаки) * *damagetype * * * * * * * * * * * * *= DAM_BLUNT; * *// активные чувства и диапазон чувств * *senses * * * * *= * SENSE_HEAR ¦ SENSE_SEE; * *senses_range * *= * PERC_DIST_ACTIVE_MAX; * *// время преследования * *aivar[AIV_MM_FollowTime] = NPC_TIME_FOLLOW; * *// дистанция прекращения сражения * *aivar[AIV_FightDistCancel] = FIGHT_DIST_CANCEL; * *// действия НПС можно прерывать * *bodyStateInterruptableOverride = FALSE; };
|