• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Не стесняюсь спросить....

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
const int GIL_EMPTY_X = 63;
const int GIL_EMPTY_Y = 64;
Эти две гильдии я использую для скелетов и призванных скелетов, они позволяют скелетам выбирать в бою оружие для ближнего или дальнего боя как и людям. Т.е. если ГГ далеко отбежит от скелета, тот зачехлит меч и начнет стрелять из лука. Скелеты с обычной гильдией не могут менять используемое оружие.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Эти две гильдии я использую для скелетов и призванных скелетов, они позволяют скелетам выбирать в бою оружие для ближнего или дальнего боя как и людям. Т.е. если ГГ далеко отбежит от скелета, тот зачехлит меч и начнет стрелять из лука. Скелеты с обычной гильдией не могут менять используемое оружие.

const int GIL_ATTITUDES[256] =
{
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_HOSTILE,ATT_NEUTRAL,ATT_HOSTILE,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_HOSTILE,ATT_NEUTRAL,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,ATT_FRIENDLY,ATT_NEUTRAL,
ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL,ATT_NEUTRAL
};

Нижняя строчка это пустая гильдия, как мне ясно стало.
Но вот в каком порядке гильдии находятся?

"Нет гильдии",
"Паладин",
"Ополчение",
"Гражданин",
"Маг",
"Послушник",
"Охотник на драконов",
"Наемник",
"Фермер",
"Бандит",
"Каторжник",
"Ищущий",
"Land Dweller",
"Пират",
"Маг воды",
"D",

В таком порядке гильдии идут?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
В текстовом массиве названия гильдии идут в том же порядке что и в константах.

Итого выходит:
1 гильдия для людей пустая и 5 для монстров или орков (иных вариантов) остались.

Вот теперь выяснилось, что и для чего в Constants.d (пустоты) были оставлены. (Данные вещи нужно описывать, чтобы без этого кусочка информации в тупик не ставить) (Но урока с данной информацией не лежит. А она важная, если люди хотят начать дополнять AI игры)
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
Извините за тупой вопрос - каким образом назначение той или иной гильдии мешает каким-то там анимациям?
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Извините за тупой вопрос - каким образом назначение той или иной гильдии мешает каким-то там анимациям?

const int GIL_EMPTY_D = 15; - может использоваться только для людей или орков, любые монстры будут без анимации. А как пояснил Мухомор данная пустая гильдия входит в GIL_SEPERATOR_HUM. И GIL_SEPERATOR_HUM блокирует анимации отличные от людских или орков.

const int GIL_Empty_A = 53;
const int GIL_EMPTY_B = 56;
const int GIL_EMPTY_C = 57;
const int GIL_EMPTY_X = 63;
const int GIL_EMPTY_Y = 64;
const int GIL_EMPTY_Z = 65;

Данные пустые места только для монстров т.к. в Guilds.d место только для одной гильдии (про пустое место в Guilds.d в текстах DEDROIT были намёки). Даже если использовать перечисленные 6 мест для гильдий, каким образом прописать отношения их с 16 другими?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
1 гильдия для людей пустая
const int GIL_EMPTY_D = 15 ; // NICHT VERWENDEN! (НЕ ИСПОЛЬЗОВАТЬ!)
В комментарии разработчиков указано не использовать эту гильдию, скорее всего потому, что ее номер такой же как у const int GIL_PUBLIC = 15, а эта гильдия используется в скриптах с принадлежностью порталов в помещениях.

Извините за тупой вопрос - каким образом назначение той или иной гильдии мешает каким-то там анимациям?
Видимо на уровне движка есть ограничения, про скелетов я уже написал, также и орки в Г1 со стандартной гильдией орка не могут зачехлить оружие после боя.

Данные пустые места только для монстров т.к. в Guilds.d место только для одной гильдии. Даже если использовать перечисленные 6 мест для гильдий, каким образом прописать отношения их с 16 другими?
Ai\Monster\B_monster\B_InitMonsterAttitudes.d - в этом скрипте описываются взаимоотношения монстров с любой другой гильдией, в том числе и с людьми.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Где ещё искать?
Зачем тебе вариант с наряжением человека волком, я вообще не понял ?!

Вот, смотри как пример, что правилось/создавалось и/или изменялось когда-то для Глобала 2.0, в части некоторой живности:

Простые существа:
Gobbo Rider
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Gobbo Rider - новый вид монстра, наездника на скевенджере.
// Gobbo RiderBi - модификация наездника на скевенджере реализованная
// через оверлей для наездника гоблина на биттере. В качестве основного
// оружия могут использоваться двуручные посохи или копья(сделанные на
// их основе). После умерщвления монстра, оружие может использоваться Гг.
// Базируется на гильдии скевенджера.
//---------------------------------------------------------
// Добавлены файлы:
// - Mst_Glm_Gobbo_Rider.d
//---------------------------------------------------------
// Измененные файлы:
// - Species.d
//---------------------------------------------------------


prototype Mst_Default_Glm_Gobbo_Rider(C_Npc)
{
name[0] = "Гоблин - наездник";
guild = GIL_SCAVENGER;
aivar[AIV_MM_REAL_ID] = ID_SCAVENGER;
level = 15;
attribute[ATR_STRENGTH] = 100;
attribute[ATR_DEXTERITY] = 100;
attribute[ATR_HITPOINTS_MAX] = 120;
attribute[ATR_HITPOINTS] = 120;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 40;
protection[PROT_EDGE] = 40;
protection[PROT_POINT] = 20;
protection[PROT_FIRE] = 20;
protection[PROT_FLY] = 0;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_SCAVENGER;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
aivar[AIV_MM_Packhunter] = TRUE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RestStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Gobbo_Rider()
{
Mdl_SetVisual(self,"Glm_Gobbo_Rider.mds");
Mdl_SetVisualBody(self,"Glm_Gobbo_Rider_Body",1,DEFAULT,"",DEFAULT,DEFAULT,-1);
};

func void B_SetVisuals_Glm_Gobbo_RiderBi()
{
Mdl_SetVisual(self,"Glm_Gobbo_Rider.mds");
Mdl_SetVisualBody(self,"Glm_Gobbo_Rider_Biter_Body",0,DEFAULT,"",DEFAULT,DEFAULT,-1);
Mdl_ApplyOverlayMds(self,"Glm_Gobbo_Rider_Biter.mds");
};

instance Glm_Gobbo_Rider(Mst_Default_Glm_Gobbo_Rider)
{
B_SetVisuals_Glm_Gobbo_Rider();
Npc_SetToFightMode(self,ItMw_1h_Vlk_Mace);
CreateInvItems(self,ItFoMuttonRaw,2);
};

instance Glm_Gobbo_RiderBi(Mst_Default_Glm_Gobbo_Rider)
{
B_SetVisuals_Glm_Gobbo_RiderBi();
Npc_SetToFightMode(self,ItMw_1h_Vlk_Mace);
CreateInvItems(self,ItFoMuttonRaw,2);
};
Spider
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Spider - Новый вид монстра, паук, очень большое создание.
// Базируется на гильдии краулеров.
//---------------------------------------------------------
// Добавленные файлы:
// - Mst_Glm_Spider.d
//---------------------------------------------------------
// Измененные файлы: (нет)
//---------------------------------------------------------


prototype Mst_Default_Glm_Spider(C_Npc)
{
name[0] = "Паук - Карракурт";
guild = GIL_MINECRAWLER;
aivar[AIV_MM_REAL_ID] = ID_MINECRAWLER;
level = 33;
attribute[ATR_STRENGTH] = 145;
attribute[ATR_DEXTERITY] = 50;
attribute[ATR_HITPOINTS_MAX] = 500;
attribute[ATR_HITPOINTS] = 500;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 65;
protection[PROT_EDGE] = 70;
protection[PROT_POINT] = 85;
protection[PROT_FIRE] = 15;
protection[PROT_FLY] = IMMUNE;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_MINECRAWLER;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_WuselStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Spider()
{
Mdl_SetVisual(self,"Glm_Spider.mds");
Mdl_SetVisualBody(self,"Glm_Spider_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
//Mdl_SetModelScale(self,1.05,1.05,1.05);
};

instance Glm_Spider(Mst_Default_Glm_Spider)
{
B_SetVisuals_Glm_Spider();
Npc_SetToFistMode(self);
};
Wolf_Grey
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Wolf_Grey - Обновленный вид волка, изменен только скин.
// Базируется на стандартной гильдии.
//---------------------------------------------------------
// Добавленные файлы: (нет)
//---------------------------------------------------------
// Измененные файлы: (нет)
//---------------------------------------------------------


prototype Mst_Default_Glm_Wolf_Grey(C_Npc)
{
name[0] = "Серый волк";
guild = GIL_WOLF;
aivar[AIV_MM_REAL_ID] = ID_WOLF;
level = 6;
attribute[ATR_STRENGTH] = 70;
attribute[ATR_DEXTERITY] = 70;
attribute[ATR_HITPOINTS_MAX] = 120;
attribute[ATR_HITPOINTS] = 120;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 50;
protection[PROT_EDGE] = 50;
protection[PROT_POINT] = 0;
protection[PROT_FIRE] = 50;
protection[PROT_FLY] = 50;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_WOLF;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_LONG;
aivar[AIV_MM_FollowInWater] = TRUE;
aivar[AIV_MM_Packhunter] = TRUE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RoamStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Wolf_Grey()
{
Mdl_SetVisual(self,"Wolf.mds");
//только новое тело...
Mdl_SetVisualBody(self,"Glm_Wolf_Grey_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
};

instance Glm_Wolf_Grey(Mst_Default_Glm_Wolf_Grey)
{
B_SetVisuals_Glm_Wolf_Grey();
Npc_SetToFistMode(self);
CreateInvItems(self,ItFoMuttonRaw,1);
};

Сложные существа:
Orc Battle Shamane
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Orc Battle Shamane - новый вид монстра. Боевой шаман Орков в бою
// использует оружие ближнего боя - "топор", а также - "магию", одновременно... :)
// Базируется на гильдии Орков.
//---------------------------------------------------------
// Добавленные файлы:
// - Mst_Glm_Orc_BattleShamane.d
// - B_ApplyOverlayMDS.d
// - B_ApplyOverlayMDSChance.d
// - C_NpcHasOverlayMDS.d
// - C_WantToFight.d
// - ZS_MM_Heal.d
// - Mst_Glm_TargetForSpell.d
// - B_SpawnTargetForSpell.d
//---------------------------------------------------------
// Измененные файлы:
// - AI_Constants.d
// - B_RemoveWeapon.d
// - B_ReadySpell.d
// - B_SelectSpell.d
// - B_InitMonsterAttitudes.d
// - B_MM_AssessDamage.d
// - B_MM_AssessEnemy.d
// - ZS_MM_Attack.d
// - ZS_MM_Flee.d
//---------------------------------------------------------
// Проекты:
// - GOTHIC (Gothic.dat)
// - FAI (Fight.dat)
//---------------------------------------------------------


prototype Mst_Default_Glm_Orc_BattleShamane(C_Npc)
{
name[0] = "Орк - боевой шаман";
guild = GIL_ORC;
aivar[AIV_MM_REAL_ID] = ID_ORC_BATTLESHAMANE;
voice = 18;
level = 60;
attribute[ATR_STRENGTH] = 150;
attribute[ATR_DEXTERITY] = 200;
attribute[ATR_HITPOINTS_MAX] = 600;
attribute[ATR_HITPOINTS] = 600;
attribute[ATR_MANA_MAX] = 200;
attribute[ATR_MANA] = 200;
protection[PROT_BLUNT] = 180;
protection[PROT_EDGE] = 150;
protection[PROT_POINT] = 150;
protection[PROT_FIRE] = 100;
protection[PROT_FLY] = 100;
protection[PROT_MAGIC] = 100;
HitChance[NPC_TALENT_1H] = 80;
HitChance[NPC_TALENT_2H] = 100;
HitChance[NPC_TALENT_BOW] = 0;
HitChance[NPC_TALENT_CROSSBOW] = 30;
damagetype = DAM_EDGE;
fight_tactic = FAI_ORC_BATTLESHAMANE;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_ORC_ACTIVE_MAX;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
};

func void B_SetVisuals_Glm_Orc_BattleShamane()
{
Mdl_SetVisual(self,"Orc.mds");
Mdl_SetVisualBody(self,"Glm_Orc_BattleShamane_Body",DEFAULT,DEFAULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1);
};

instance Glm_Orc_BattleShamane(Mst_Default_Glm_Orc_BattleShamane)
{
B_SetVisuals_Glm_Orc_BattleShamane();
EquipItem(self,ItMw_2H_OrcAxe_03);
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RoamStart] = OnlyRoutine;
};
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
const int GIL_EMPTY_D = 15 ; // NICHT VERWENDEN! (НЕ ИСПОЛЬЗОВАТЬ!)
В комментарии разработчиков указано не использовать эту гильдию, скорее всего потому, что ее номер такой же как у const int GIL_PUBLIC = 15, а эта гильдия используется в скриптах с принадлежностью порталов в помещениях.


Видимо на уровне движка есть ограничения, про скелетов я уже написал, также и орки в Г1 со стандартной гильдией орка не могут зачехлить оружие после боя.


Ai\Monster\B_monster\B_InitMonsterAttitudes.d - в этом скрипте описываются взаимоотношения монстров с любой другой гильдией, в том числе и с людьми.

Если бы стояли такие комментарии. Их то и не стоит. Спасибо за информацию.

Мне надо отношения между гильдиями людей указывать, не между монстрами и людьми. Или через Ai\Monster\B_monster\B_InitMonsterAttitudes.d можно также указывать отношения между гильдиями людей? (Т.е. между GIL_PAL и гильдией охотников) и т.д.

Зачем тебе вариант с наряжением человека волком, я вообще не понял ?!

Вот, смотри как пример, что правилось/создавалось и/или изменялось когда-то для Глобала 2.0, в части некоторой живности:

Простые существа:
Gobbo Rider
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Gobbo Rider - новый вид монстра, наездника на скевенджере.
// Gobbo RiderBi - модификация наездника на скевенджере реализованная
// через оверлей для наездника гоблина на биттере. В качестве основного
// оружия могут использоваться двуручные посохи или копья(сделанные на
// их основе). После умерщвления монстра, оружие может использоваться Гг.
// Базируется на гильдии скевенджера.
//---------------------------------------------------------
// Добавлены файлы:
// - Mst_Glm_Gobbo_Rider.d
//---------------------------------------------------------
// Измененные файлы:
// - Species.d
//---------------------------------------------------------


prototype Mst_Default_Glm_Gobbo_Rider(C_Npc)
{
name[0] = "Гоблин - наездник";
guild = GIL_SCAVENGER;
aivar[AIV_MM_REAL_ID] = ID_SCAVENGER;
level = 15;
attribute[ATR_STRENGTH] = 100;
attribute[ATR_DEXTERITY] = 100;
attribute[ATR_HITPOINTS_MAX] = 120;
attribute[ATR_HITPOINTS] = 120;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 40;
protection[PROT_EDGE] = 40;
protection[PROT_POINT] = 20;
protection[PROT_FIRE] = 20;
protection[PROT_FLY] = 0;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_SCAVENGER;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
aivar[AIV_MM_Packhunter] = TRUE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RestStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Gobbo_Rider()
{
Mdl_SetVisual(self,"Glm_Gobbo_Rider.mds");
Mdl_SetVisualBody(self,"Glm_Gobbo_Rider_Body",1,DEFAULT,"",DEFAULT,DEFAULT,-1);
};

func void B_SetVisuals_Glm_Gobbo_RiderBi()
{
Mdl_SetVisual(self,"Glm_Gobbo_Rider.mds");
Mdl_SetVisualBody(self,"Glm_Gobbo_Rider_Biter_Body",0,DEFAULT,"",DEFAULT,DEFAULT,-1);
Mdl_ApplyOverlayMds(self,"Glm_Gobbo_Rider_Biter.mds");
};

instance Glm_Gobbo_Rider(Mst_Default_Glm_Gobbo_Rider)
{
B_SetVisuals_Glm_Gobbo_Rider();
Npc_SetToFightMode(self,ItMw_1h_Vlk_Mace);
CreateInvItems(self,ItFoMuttonRaw,2);
};

instance Glm_Gobbo_RiderBi(Mst_Default_Glm_Gobbo_Rider)
{
B_SetVisuals_Glm_Gobbo_RiderBi();
Npc_SetToFightMode(self,ItMw_1h_Vlk_Mace);
CreateInvItems(self,ItFoMuttonRaw,2);
};
Spider
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Spider - Новый вид монстра, паук, очень большое создание.
// Базируется на гильдии краулеров.
//---------------------------------------------------------
// Добавленные файлы:
// - Mst_Glm_Spider.d
//---------------------------------------------------------
// Измененные файлы: (нет)
//---------------------------------------------------------


prototype Mst_Default_Glm_Spider(C_Npc)
{
name[0] = "Паук - Карракурт";
guild = GIL_MINECRAWLER;
aivar[AIV_MM_REAL_ID] = ID_MINECRAWLER;
level = 33;
attribute[ATR_STRENGTH] = 145;
attribute[ATR_DEXTERITY] = 50;
attribute[ATR_HITPOINTS_MAX] = 500;
attribute[ATR_HITPOINTS] = 500;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 65;
protection[PROT_EDGE] = 70;
protection[PROT_POINT] = 85;
protection[PROT_FIRE] = 15;
protection[PROT_FLY] = IMMUNE;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_MINECRAWLER;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_WuselStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Spider()
{
Mdl_SetVisual(self,"Glm_Spider.mds");
Mdl_SetVisualBody(self,"Glm_Spider_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
//Mdl_SetModelScale(self,1.05,1.05,1.05);
};

instance Glm_Spider(Mst_Default_Glm_Spider)
{
B_SetVisuals_Glm_Spider();
Npc_SetToFistMode(self);
};
Wolf_Grey
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Wolf_Grey - Обновленный вид волка, изменен только скин.
// Базируется на стандартной гильдии.
//---------------------------------------------------------
// Добавленные файлы: (нет)
//---------------------------------------------------------
// Измененные файлы: (нет)
//---------------------------------------------------------


prototype Mst_Default_Glm_Wolf_Grey(C_Npc)
{
name[0] = "Серый волк";
guild = GIL_WOLF;
aivar[AIV_MM_REAL_ID] = ID_WOLF;
level = 6;
attribute[ATR_STRENGTH] = 70;
attribute[ATR_DEXTERITY] = 70;
attribute[ATR_HITPOINTS_MAX] = 120;
attribute[ATR_HITPOINTS] = 120;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 50;
protection[PROT_EDGE] = 50;
protection[PROT_POINT] = 0;
protection[PROT_FIRE] = 50;
protection[PROT_FLY] = 50;
protection[PROT_MAGIC] = 0;
damagetype = DAM_EDGE;
fight_tactic = FAI_WOLF;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_ThreatenBeforeAttack] = TRUE;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_LONG;
aivar[AIV_MM_FollowInWater] = TRUE;
aivar[AIV_MM_Packhunter] = TRUE;
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RoamStart] = OnlyRoutine;
};

func void B_SetVisuals_Glm_Wolf_Grey()
{
Mdl_SetVisual(self,"Wolf.mds");
//только новое тело...
Mdl_SetVisualBody(self,"Glm_Wolf_Grey_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
};

instance Glm_Wolf_Grey(Mst_Default_Glm_Wolf_Grey)
{
B_SetVisuals_Glm_Wolf_Grey();
Npc_SetToFistMode(self);
CreateInvItems(self,ItFoMuttonRaw,1);
};

Сложные существа:
Orc Battle Shamane
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXX GLOBAL MOD - Monster's (ver.2.0)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Orc Battle Shamane - новый вид монстра. Боевой шаман Орков в бою
// использует оружие ближнего боя - "топор", а также - "магию", одновременно... :)
// Базируется на гильдии Орков.
//---------------------------------------------------------
// Добавленные файлы:
// - Mst_Glm_Orc_BattleShamane.d
// - B_ApplyOverlayMDS.d
// - B_ApplyOverlayMDSChance.d
// - C_NpcHasOverlayMDS.d
// - C_WantToFight.d
// - ZS_MM_Heal.d
// - Mst_Glm_TargetForSpell.d
// - B_SpawnTargetForSpell.d
//---------------------------------------------------------
// Измененные файлы:
// - AI_Constants.d
// - B_RemoveWeapon.d
// - B_ReadySpell.d
// - B_SelectSpell.d
// - B_InitMonsterAttitudes.d
// - B_MM_AssessDamage.d
// - B_MM_AssessEnemy.d
// - ZS_MM_Attack.d
// - ZS_MM_Flee.d
//---------------------------------------------------------
// Проекты:
// - GOTHIC (Gothic.dat)
// - FAI (Fight.dat)
//---------------------------------------------------------


prototype Mst_Default_Glm_Orc_BattleShamane(C_Npc)
{
name[0] = "Орк - боевой шаман";
guild = GIL_ORC;
aivar[AIV_MM_REAL_ID] = ID_ORC_BATTLESHAMANE;
voice = 18;
level = 60;
attribute[ATR_STRENGTH] = 150;
attribute[ATR_DEXTERITY] = 200;
attribute[ATR_HITPOINTS_MAX] = 600;
attribute[ATR_HITPOINTS] = 600;
attribute[ATR_MANA_MAX] = 200;
attribute[ATR_MANA] = 200;
protection[PROT_BLUNT] = 180;
protection[PROT_EDGE] = 150;
protection[PROT_POINT] = 150;
protection[PROT_FIRE] = 100;
protection[PROT_FLY] = 100;
protection[PROT_MAGIC] = 100;
HitChance[NPC_TALENT_1H] = 80;
HitChance[NPC_TALENT_2H] = 100;
HitChance[NPC_TALENT_BOW] = 0;
HitChance[NPC_TALENT_CROSSBOW] = 30;
damagetype = DAM_EDGE;
fight_tactic = FAI_ORC_BATTLESHAMANE;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_ORC_ACTIVE_MAX;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
};

func void B_SetVisuals_Glm_Orc_BattleShamane()
{
Mdl_SetVisual(self,"Orc.mds");
Mdl_SetVisualBody(self,"Glm_Orc_BattleShamane_Body",DEFAULT,DEFAULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1);
};

instance Glm_Orc_BattleShamane(Mst_Default_Glm_Orc_BattleShamane)
{
B_SetVisuals_Glm_Orc_BattleShamane();
EquipItem(self,ItMw_2H_OrcAxe_03);
start_aistate = ZS_MM_AllScheduler;
aivar[AIV_MM_RoamStart] = OnlyRoutine;
};

Спасибо за информацию. Но тогда вопрос, как прописать магов гоблинов? Если есть шаманы у Орков, Гоблины чем хуже. (примерные наводки, можно получить. Новые гоблины прописаны, осталось понять как их заставить использовать магию)
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Мне надо отношения между гильдиями людей указывать, не между монстрами и людьми. Или через Ai\Monster\B_monster\B_InitMonsterAttitudes.d можно также указывать отношения между гильдиями людей? (Т.е. между GIL_PAL и гильдией охотников) и т.д.
Отношения внутри гильдий людей описываются в массиве Guilds.d
В B_InitMonsterAttitudes описывается отношение вообще всех людей GIL_SEPERATOR_HUM с монстрами.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Если бы стояли такие комментарии. Их то и не стоит. Спасибо за информацию.
У Вама в туторе указано что есть "сепараторы гильдий", т.е. разделители (!) между людьми/орками/ и монстрами.. Про отношения гильдий людей также в нем расписано, где и как. Читать нужно внимательнее, тогда и комменты в скриптах не потребуются. ;)
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Отношения внутри гильдий людей описываются в массиве Guilds.d
В B_InitMonsterAttitudes описывается отношение вообще всех людей GIL_SEPERATOR_HUM с монстрами.

Спасибо за информацию (хотя она уже была известна, про Guilds.d и B_InitMonsterAttitudes). Насчёт гоблинов шаманов вопрос всё ещё открытый.

У Вама в туторе указано что есть "сепараторы гильдий", т.е. разделители (!) между людьми/орками/ и монстрами.. Про отношения гильдий людей также в нем расписано, где и как. Читать нужно внимательнее, тогда и комменты в скриптах не потребуются. ;)

Полных данных о всех пустых гильдиях не указано. Когда будет описано подробно как в моей первой книге (в 8 лет):
B._Ya._Martuzan__Podruzhis_so_mnoj_kompyuter.jpg
Вот тогда и все вопросы будут сняты.
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Спасибо за информацию. Но тогда вопрос, как прописать магов гоблинов? Если есть шаманы у Орков, Гоблины чем хуже. (примерные наводки, можно получить. Новые гоблины прописаны, осталось понять как их заставить использовать магию)
Ответ в твоем же вопросе: Если есть шаманы у Орков.., то что мешает тебе посмотреть что для них используется и сделать по аналогии с ними?
Если Гоблинец не может пользоваться магией из-за ограничений движка, то пробуем прописать ему гильдию Орка или Человека, либо править через костыли..
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
GIL_SEPERATOR_HUM. И GIL_SEPERATOR_HUM блокирует анимации отличные от людских или орков.
У монстров есть анимации только для кулачного боя. Когда ты назначаешь монстру людскую гильдию, он не работает не потому, что движок его блочит, а потому, что скрипты переводят его в обычный бег, которого у монстров нет. Стоит добавить недостающие блоки анимаций любому монстру и о чудо - он начинает резво бегать в самых разных режимах.
Можно волка, например, научить у плиты стоять или танцевать - и это будет работать. Т.к. на уровне динамической модели нет разницы, человек это или нет.

Видимо на уровне движка есть ограничения, про скелетов я уже написал, также и орки в Г1 со стандартной гильдией орка не могут зачехлить оружие после боя.
Тут все несколько прозаичней: пирана-байтс экономили человеко-часы на анимировании монстров. В связи с этим, у них есть только кулачный бой в анимациях зверья (и ряд вспомогательных телодвижений). Функция:
void Npc_SetToFightMode (c_npc self, int weapon)
в случае с монстром переведет его в кулачный бой, несмотря на то, что тут прописывается оружие. Так сделаны гоблины, например, и скелеты в Готике 1. Для ползучих же гадов используется явная функция:
void Npc_SetToFistMode (c_npc self)

Немного особняком стоят орки, т.к. у них есть обычный бег, кулачный бой, 1H/2H боевка, а также арбалет.

Да, двиг блокирует выход из боевого режима для монстров (для орков только в Готике1, что правлено Керраксом в GE). Это сделано для исключения возможных залипаний модели, т.к. скрипты кишат строчками вроде RemoveWeapon или SetWalkMode. Нет нужных блоков анимаций - модель подвисает (в GE зависает игра в некоторых случаях). Такая вот перестраховка: по-немецки жёстко)))

Но стоит монстру добавить обычный бег, сделать аккуратный режим fist или даже 1H, то он сразу преображается. Я так делал гоблинов с гильдией орка, у которых есть нормальный меч, который они могут таскать за плечами. В обычном режиме они мирно греются у костерка сидя. При виде врага вскакивают, вытаскивают оружие. Если враг повержен, оружие убирают за спину и идут назад к родной кормушке. У них также работала анимация диалогов.
Так же расширен Drake в Dark Saga - у него основной режим боя не FIST, а 2H. В нем монстр сражается заметно резвее и разнообразнее. Есть также обычный бег, который используется до первого появления героя как врага. Для перевода монстра в 1H/2H режимы, или "шутерные" Bow/cbow используется невидимый итем соответствующего класса со смещением геометрии относительно нулевой координаты. При этом в скрипте пишется просто EqupItem: монстр сам достанет оружие при начале боя (но потом не сможет убрать).
При гибели монстра этот невидимый псевдо меч/лук/арбалет выпадает, но не попадает в фокус игрока и его нельзя взять. Зато выглядит так, что монстр вдруг научился бить слева, справа, сериями: игрок охреневает - модостроитель доволен.
 
Последнее редактирование:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Да, двиг блокирует выход из боевого режима для монстров (для орков только в Готике1, что правлено Керраксом в GE).
В Г2(НВ) для скелетов со стандартной гильдией тоже самое - достал раз оружие и будет ходить до конца существования, но стоит поменять гильдию на свободную из конца массива или любую человеческую - сразу же преображается в универсальную боевую единицу.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Вот ещё вопрос: как реализовать волкодава, чтобы когда его атакуют переходил в атаку, но если его атакует человек то, чтобы волкодава защищали как овцу.
Не ясно почему так работает:
1. Если ударит любой NPC волкодава или ГГ, на волкодава все вокруг кидаются и забивают. Хотя отношения между гильдиями стоят в разделе людей: B_SetMonsterAttitude(GIL_SEPERATOR_HUM,ATT_FRIENDLY,GIL_WOLKODAV); в разделе волкодава: B_SetMonsterAttitude(GIL_WOLKODAV,ATT_FRIENDLY,GIL_SEPERATOR_HUM);
2. Если ударишь овцу все кругом кидаются ГГ избивать.

По какой причине оба случая случаются поиски по GIL_SHEEP, ID_SHEEP, SHEEP ничего не дали.

Может прольёте свет на эти странные случаи?

Upd: вопрос снят, достаточно было внести изменения в B_AssessFightSound.d и B_AssessMurder.d (если только в один файл вносились изменения, срабатывал первый вопрос)
 
Последнее редактирование:

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
но стоит поменять гильдию на свободную из конца массива или любую человеческую - сразу же преображается в универсальную боевую единицу.
Конечно: в Г2НВ скелет построен на базе Humans.MDS, где есть все мыслимые персонажные анимациии игры. Стоит любому монстру сделать полный набор run/walk+fist и он будет себя вести нормально на пустых гильдиях, которые не входят в исключения движка.

Вот ещё вопрос: как реализовать волкодава, чтобы когда его атакуют переходил в атаку, но если его атакует человек то, чтобы волкодава защищали как овцу.
По-моему, можно через Aivar сделать, чтобы по отношению к людям он был другом, а по отношению к НЕлюдям врагом.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.187
Баллы
525
Да, двиг блокирует выход из боевого режима для монстров (для орков только в Готике1, что правлено Керраксом в GE). Это сделано для исключения возможных залипаний модели, т.к. скрипты кишат строчками вроде RemoveWeapon или SetWalkMode. Нет нужных блоков анимаций - модель подвисает (в GE зависает игра в некоторых случаях). Такая вот перестраховка: по-немецки жёстко)))

Есть ли мысли, как можно обойти эти движковые ограничения в Г1 без вмешательства в движок? Хотелось бы починить орков и скелетов. Назначение им человеческой гильдии помогло бы исправить ситуацию с анимациями, но создало бы существенные проблемы с отношениями и магией.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
Есть ли мысли, как можно обойти эти движковые ограничения в Г1 без вмешательства в движок?
В Готике 1 скелетов придется делать также, как в Готике2: в Г1 они построены на своем MDS.
Что до движка, то надо спрашивать кудесников кода и киллеров багов, т.е. авторов системпака.
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Кстати да, у орков есть скрытые анимации которые заблокированы и не используются, они даже подкрадываться могут, проверял. И кстати в анимации раннего НПС humans использовалась анимации орка но применимая к модели humans.mds. на видео e 1999 чётко видно как гг пьёт зелье как орк и бьёт мечем как орк с замахом из за головы. Все это смотрелось очень интересно
 
Сверху Снизу