Показать сообщение отдельно
Старый 23.05.2005, 13:56   #179
Vam

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

По умолчанию 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). Орки

Файлы инициализации орков практически ничем не отличаются от файлов монстров (отдельно не рассматриваем).
Ответить с цитированием