Дубинки, молотки боюсь тоже протиснутся в эту категориюпосох
Daedalus:if (item.damageType == DAM_BLUNT) && (item.flags & ITEM_2HD_AXE)
func void UpdateBattleOverlays(var C_NPC npc)
{
if Npc_GetTrueGuild(npc) >= GIL_SEPERATOR_HUM
{
return;
};
var C_ITEM item;
item = Npc_GetReadiedWeapon(npc);
if !Hlp_IsValidItem(item)
{
item = Npc_GetEquippedMeleeWeapon(npc);
};
if !Hlp_IsValidItem(item)
{
return;
};
// **Проверка: по имени или по визуалной модели на "Посох" - ПЕРВАЯ ПРОВЕРКА**
if (Str_Contains(Str_ToUpper(item.name), "ПОСОХ")) || (Str_Contains(Str_ToUpper(item.visual), "STAFF"))
{
var int skillLevel_2H;
skillLevel_2H = Npc_GetTalentSkill(npc, NPC_TALENT_2H);
if (skillLevel_2H == 1)
{
ReapplyOverlay(npc, "HUMANS_SPST1.MDS"); // Оверлей ST1 для Посохов
}
else if (skillLevel_2H == 2)
{
ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Оверлей ST2 для Посохов
}
else
{
// **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для Посохов**
};
}
// **Проверка на ТОПОР - ВТОРАЯ ПРОВЕРКА **
else if (Str_Contains(name, "_AXE"))
{
var int skillLevel_2H; // Переменная skillLevel_2H может быть переиспользована, так как она ограничена блоком else if
skillLevel_2H = Npc_GetTalentSkill(npc, NPC_TALENT_2H);
if (skillLevel_2H == 1)
{
ReapplyOverlay(npc, "HUMANS_AXEST1.MDS"); // Оверлей ST1 для Топоров
}
else if (skillLevel_2H == 2)
{
ReapplyOverlay(npc, "HUMANS_AXEST2.MDS"); // Оверлей ST2 для Топоров
}
else
{
// **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для Топоров**
};
}
// **Проверка на УНИКАЛЬНОЕ ОРУЖИЕ BELIAR - ТРЕТЬЯ ПРОВЕРКА (теперь без проверки навыка)**
else if (Str_Contains(name, "_BeliarWeapon"))
{
// **Удалена проверка уровня навыка, всегда применяем HUMANS_1X2ST3.MDS**
ReapplyOverlay(npc, "HUMANS_1X2ST3.MDS"); // Оверлей HUMANS_1X2ST3.MDS для Уникального оружия Beliar (без учета навыка)
}
// **Проверка на ОДНОРУЧНЫЙ МЕЧ - ЧЕТВЕРТАЯ ПРОВЕРКА (теперь с проверкой на атрибут ловкости по всем трем индексам)**
else if (item.flags & ITEM_SWD)
{
// **Проверяем, требует ли меч атрибут Ловкость (ATR_DEXTERITY) в любом из первых трех элементов cond_atr**
if ( (item.cond_atr[0] == ATR_DEXTERITY) || (item.cond_atr[1] == ATR_DEXTERITY) || (item.cond_atr[2] == ATR_DEXTERITY) )
{
var int skillLevel_1H; // Используем навык одноручного оружия
skillLevel_1H = Npc_GetTalentSkill(npc, NPC_TALENT_1H);
if (skillLevel_1H == 1)
{
ReapplyOverlay(npc, "HUMANS_RAPIER_ST1.MDS"); // Оверлей ST1 для рапир (одноручных мечей, требующих ловкость)
}
else if (skillLevel_1H == 2)
{
ReapplyOverlay(npc, "HUMANS_RAPIER_ST3.MDS"); // Оверлей ST2 для рапир (одноручных мечей, требующих ловкость)
}
else
{
// **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для рапир**
};
}
// **Если меч НЕ требует ловкости (ни в одном из первых трех элементов cond_atr), то ничего не делаем, игра использует стандартные анимации**
else
{
// **Не накладываем overlay, игра использует стандартные анимации для одноручных мечей, не требующих ловкости**
};
}
// **БЛОК ДЛЯ "ВСЕГО ОСТАЛЬНОГО ОРУЖИЯ" **
};
а есть двуручные дубины?Дубинки, молотки боюсь тоже протиснутся в эту категорию![]()
Gratt упоминал, что через On_equip,а если просто добавить в функцию экипировки?
Код:instance ItMw_Addon_Stab03(C_Item) { ... on_equip = Equip_ItMw_Addon_Stab03; ... }; func void Equip_ItMw_Addon_Stab03rstab() { ReapplyOverlay(self, "HUMANS_1HST2.MDS"); };
Вроде работает, кажется вы упростили скрипт. А что значит закомментированная часть?мне кажется смысла в этом мало. лучше делать через функцию экипировки для конкретных инстанций.
список напишиКак сделать так, чтобы анимации стандартной боевки выбирались случайным образом из списка предоставленных 3-4.
HUMANS_1HST2A.MDS, HUMANS_1HST2B.MDS
func void UpdateOverlays1hMDK(var C_NPC npc)
{
var int skillLevel; // Добавляем переменную для уровня навыка двуручного оружия
skillLevel = Npc_GetTalentSkill(npc, NPC_TALENT_1H); // Получаем уровень навыка
var string Overlay;
if (skillLevel == 1) { Overlay = "HUMANS_1HST1.MDS"; }
else if (skillLevel == 2)
{
var int rnd; rnd = Hlp_Random(2);
if (rnd == 0) { Overlay = "HUMANS_1HST2A.MDS"; }
else /*if (rnd == 1)*/ { Overlay = "HUMANS_1HST2B.MDS"; };
}
else { Overlay = "HUMANS_1HST0.MDS"; };
ReapplyOverlay(npc, Overlay);
};
Будет ролл от 0 до 1? а если Hlp_Random(4) то от 0 до 3? В общем от нуля и до (число в скобка-1), так?var int rnd; rnd = Hlp_Random(2);
func void UpdateOverlays1hMDK(var C_NPC npc)
{
var int skillLevel; // Добавляем переменную для уровня навыка двуручного оружия
skillLevel = Npc_GetTalentSkill(npc, NPC_TALENT_1H); // Получаем уровень навыка
var string Overlay;
if (skillLevel == 1) { Overlay = "HUMANS_1HST1.MDS"; }
else if (skillLevel == 2)
{
var int rnd; rnd = Hlp_Random(4);
if (rnd == 0) { Overlay = "HUMANS_1HST2A.MDS"; }
else if (rnd == 1) { Overlay = "HUMANS_1HST2B.MDS"; }
else if (rnd == 2) { Overlay = "HUMANS_1HST2C.MDS"; }
else if (rnd == 3) { Overlay = "HUMANS_1HST2D.MDS"; };
}
else { Overlay = "HUMANS_1HST0.MDS"; };
ReapplyOverlay(npc, Overlay);
};
// Двуручный посох
if (item.material == MAT_WOOD)
&& (item.range >= 110)
{
ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Название оверлея для шестов/посохов
return;
};
UpdateOverlays2hMDK(npc);
return;