Есть ли плагин/патч для Г2, чтобы всех нпс людей, вне зависимости от враждебности, можно было убить только с помощью отдельного действия добивания, как в первой игре?
Т.к. я не разбираюсь в том как это все работает, то не знаю можно ли будет реализовать эти идеи в рамках одного плагина, или надо 2 разных, будут ли они совместимы и т.д.класс oCNpc, методы что-то типа oCNpc::Equip, oCNpc::UnEquip. Учти, что обычные оверлеи при применении ставятся в очередь. Чем новее, тем выше у него приоритет над остальными. Плюс в движке где-то зашиты проверки на текущие уровни владения, что при создании пероснажа сразу задает или обновляет текущие боевые оверлеи. Можно как вариант переписать еще этот метод для надежности.
Много геморроя, чтобы сделать качественно. Если делать абы как, то можно и быстро.Либо геморроя много
Круто, работает! Благодарю!Много геморроя, чтобы сделать качественно. Если делать абы как, то можно и быстро.
В скриптах лишь пример, если что.
instance ItMw_1h_Nov_Mace(C_Item)
{
name = "Боевой посох";
mainflag = ITEM_KAT_NF;
flags = ITEM_2HD_AXE;
material = MAT_WOOD;
value = Value_NovMace;
damageTotal = Damage_NovMace;
damagetype = DAM_BLUNT;
range = Range_NovMace;
cond_atr[2] = ATR_STRENGTH;
cond_value[2] = Condition_NovMace;
visual = "ItMw_020_2h_Nov_Staff_01.3DS";
zSmoothAniTransitions стоит? Надо поставить.2. Оверлей задействуется сразу же, без анимации доставания оружия, это никак не исправить?
Не знаю, у меня нет такого,1. Если выйти из игры, выдает ошибку :
Проверяй строки item.name и item.visual3.Какая функция применяется для проверки названия оружия в игре и для проверки названия визуала?
Попробуйте с той сборкой, что я прикрепил к сообщениюНе знаю, у меня нет такого,
нету у меня вылетаПопробуйте с той сборкой, что я прикрепил к сообщению
как это будет выглядеть в скрипте?Проверяй строки item.name и item.visual
Скорее так:if Str_Contains(item.name, "_AXE")
if Str_Contains(Str_ToUpper(item.name), "ТОПОР")
я рли ноль в программировании
Так правильно?Скорее так:if Str_Contains(Str_ToUpper(item.name), "ТОПОР")
// **Новая проверка: по названию ИЛИ по визуальной модели на "Посох"**
if (Str_Contains(Str_ToUpper(item.name), "Посох")) || (Str_Contains(Str_ToUpper(item.visual), "staff"))
{
ReapplyOverlay(npc, "HUMANS_SPST2.MDS"); // Применяем overlay для "Посоха"
}
else
// **Проверки на топоры
if (Str_Contains(name, "_AXE")
{
ReapplyOverlay(npc, "HUMANS_AXEST2.MDS");
}
else
{
ReapplyOverlay(npc, "HUMANS_1X2ST3.MDS");
};
Нет, Str_ToUpper возводит текст в верхний регистр. Сравнивать надо с ПОСОХ или STAFF.if (Str_Contains(Str_ToUpper(item.name), "Посох")) || (Str_Contains(Str_ToUpper(item.visual), "staff"))
Посох и Staff надо большими буквами писатьТак правильно?
ИспользуйЕще подскажите, как добавить условие на уровень владения оружием?
Npc_GetTalentSkill(npc,NPC_TALENT_1H)
. Значения будут 0, 1, 2if item.flags & ITEM_SWD {};
Тут надо проверять все значения item.cond_atr[0 или 1 или 2]требуемый атрибут =ловкость
Сомневаюсь, что среди тех четырех человек, что скачают этот плагин будут поляки/немцыВообще не вижу смысла проверять поле item.name. Языков куча, а работать будет только в английском и русском??
Правильно?ИспользуйNpc_GetTalentSkill(npc,NPC_TALENT_1H)
. Значения будут 0, 1, 2
// **Проверка: по названию ИЛИ по визуальной модели на "Посох" - ПЕРВАЯ ПРОВЕРКА**
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 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_SPADA_ST1.MDS"); // Оверлей ST1 для шпаг (одноручных мечей, требующих ловкость)
}
else if (skillLevel_1H == 2)
{
ReapplyOverlay(npc, "HUMANS_SPADA_ST2.MDS"); // Оверлей ST2 для шпаг (одноручных мечей, требующих ловкость)
}
else
{
// **Ничего не делаем при уровне 0 и других уровнях, кроме 1 и 2 для шпаг**
};
}
// **Если меч НЕ требует ловкости (ни в одном из первых трех элементов cond_atr), то ничего не делаем, игра использует стандартные анимации**
else
{
// **Не накладываем overlay, игра использует стандартные анимации для одноручных мечей, не требующих ловкости**
};
}