|
Re: Уроки скриптологии
7. НПС
Файлы скриптов, инициализацирующие конкретных НПС расположены в трёх директориях: * *NPC - люди * *NPC\Monster - монстры * *NPC\Orc - орки
В качестве примера рассмотрим по одному файлу из каждой директории, остальные файлы НПС подробно рассматривать не будем.
* *а). Люди.
Название файла, как правило, совпадает с именем инстанции, в которой производится инициализация параметров конкретного человека. Общий формат имени инстанции (файла) таков: XXX_ID_Name(Base), где - * *XXX - сокращенное название гильдии * *ID - идентификатор НПС * *Name - имя человека (или тип, если нет имени) * *Base - имя базового класса или прототипа
// Инициализация параметров Драгомира INSTANCE BAU_983_Dragomir(Npc_Default) { * *// имя * *name = "Драгомир"; * *// гильдия * *guild = GIL_OUT; * *// идентификатор * *id = 983; * *// номер голоса (используется при озвучке) * *voice = 12; * *// флаги * *flags = 0; * *// тип * *npctype = NPCTYPE_MAIN; * *// установка значений атрибутов в зависимости от главы игры * *B_SetAttributesToChapter(self,4); * * *// тактика сражения * *fight_tactic = FAI_HUMAN_STRONG; * * * *// индивидуальная инициализация инвентаря * *EquipItem(self,ItMw_1h_SLD_Sword); * *EquipItem(self,itRw_Mil_Crossbow); * *// инициализация инвентаря в зависимости от принадлежности к гильдии * *B_CreateAmbientInv(self); * *// визуализация (внешний вид) * *B_SetNpcVisual(self,MALE,"Hum_Head_Bald",Face_N_T ough_Lee_дhnlich,BodyTex_N,ITAR_Leather_L); * *// жирность тела * *Mdl_SetModelFatness(self,1); * *// модель поведения * *Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds"); * *// установить стандартный набор талантов (умений) * *B_GiveNpcTalents(self); * *// установить набор боевых навыков * *B_SetFightSkills(self,40); * *// стартовая функция распорядка дня * *daily_routine = Rtn_Start_983; };
// Функция распорядка дня func void Rtn_Start_983() { * * *// сидит на скамье * *TA_Sit_Bench(08,00,23,00,"NW_TAVERNE_TROLLAREA_MO NSTER_02_01"); * *TA_Sit_Bench(23,00,08,00,"NW_TAVERNE_TROLLAREA_MO NSTER_02_01"); };
* *б). Монстры
Файл инициализации параметров Огненного дракона Mst_Default_Dragon_Fire.d
// прототип монстра PROTOTYPE Mst_Default_Dragon_Fire(C_Npc) * * * * * * { * *// имя * *name * * * * * * * * * * * * * *= "Огненный дракон"; * *// гильдия * *guild * * * * * * * * * * * * * = GIL_DRAGON; * *// идентификатор * *aivar[AIV_MM_REAL_ID] * * * * * = ID_DRAGON_FIRE; * *// уровень * *level * * * * * * * * * * * * * = 500; * *// флаг прерывания действий НПС * *bodyStateInterruptableOverride *= TRUE; * *// аттрибуты * *attribute[ATR_STRENGTH] * * * * = 200; * *attribute[ATR_DEXTERITY] * * * *= 200; * *attribute[ATR_HITPOINTS_MAX] * *= 1000; * *attribute[ATR_HITPOINTS] * * * *= 1000; * *attribute[ATR_MANA_MAX] * * * * = 1000; * *attribute[ATR_MANA] * * * * * * = 1000; * *// защита * *protection[PROT_BLUNT] * * * * *= 170; * *protection[PROT_EDGE] * * * * * = 170; * *protection[PROT_POINT] * * * * *= 170; * * *protection[PROT_FIRE] * * * * * = 170; * *protection[PROT_FLY] * * * * * *= 170; * * *protection[PROT_MAGIC] * * * * *= 170; * *// типы и значения наносимых повреждений * *damagetype * * * * * * * * * * *= DAM_FIRE ¦ DAM_FLY; * *damage * * *[DAM_INDEX_FIRE] * *= 149; * *damage * * *[DAM_INDEX_FLY] * * = 1; * *// тактика сражения * *fight_tactic * * * * * * * * * *= FAI_DRAGON; * *// чувства и диапазон действия * *senses * * * * * * * * * * * * *= SENSE_HEAR ¦ SENSE_SEE ¦ SENSE_SMELL; * *senses_range * * * * * * * * * *= PERC_DIST_DRAGON_ACTIVE_MAX; * *// время преследования * *aivar[AIV_MM_FollowTime] * * * *= FOLLOWTIME_MEDIUM; * *// полезет ли монстр в воду * *aivar[AIV_MM_FollowInWater] * * = FALSE; * *// тактика нападения * *aivar[AIV_OriginalFightTactic] *= FAI_DRAGON; * *// функция распорядка дня * *start_aistate * * * * * * * * * = ZS_MM_Rtn_DragonRest; * *// время отдыха контролируется программой поведения монстра * *aivar[AIV_MM_RestStart] * * * * = OnlyRoutine; };
// Функция визуализации func void B_SetVisuals_Dragon_Fire() { * *// модель поведения * *Mdl_SetVisual(self,"Dragon.mds"); * *// визуализация тела * *Body-Mesh * * * * Body-Tex Skin-Color Head-MMS Head-Tex Teeth-Tex ARMOR * *Mdl_SetVisualBody(self,"Dragon_FIRE_Body",DEFAULT , DEFAULT, * "", * * *DEFAULT, DEFAULT, *-1); };
// Инициализация конкретного дракона INSTANCE Dragon_Fire(Mst_Default_Dragon_Fire) { * *// имя * *name = "Феоматар"; * *// визуализация * *B_SetVisuals_Dragon_Fire(); * *// режим сражения без оружия * *Npc_SetToFistMode(self); };
// Инициализация ещё одного конкретного дракона INSTANCE Dragon_Fire_Island(Mst_Default_Dragon_Fire) { * *// имя * *name = "Феодарон"; * *// флаги * *flags = NPC_FLAG_IMMORTAL; * *// визуализация * *B_SetVisuals_Dragon_Fire(); * *// режим сражения без оружия * *Npc_SetToFistMode(self); };
* *c). Орки
Файлы инициализации орков практически ничем не отличаются от файлов монстров (отдельно не рассматриваем).
|