Стражник
Участник форума
- Регистрация
- 14 Фев 2009
- Сообщения
- 675
- Благодарности
- 101
- Баллы
- 220
А вот выбор оружия по ходу боя определяется в функции B_SelectWeapon.
Болты в инвентарь добавил, силы на арбалет хватает и НПС им экипирован.
Что нужно изменить в B_SelectWeapon?
Не совсем понятно что там править а косяк в этом файле может потом серьезно аукнуться в дальнейшем.
В файле Focus дистанция для стрелкового оружия вроде превышает дистанцию холодного оружия.
Нужно ли что добавлять самому НПС. Пытаюсь разобраться в оригинальной Г2 НВ немного меняя его.
Нужно чтобы НПС вначале использовали стрелковое оружие а при приближении врага уже оружие ближнего боя. Сейчас НПС видят меня на большой дистанции и бегут к ГГ с мечами.
Снизу содержимое этого файла.
func void B_SelectWeapon(var C_Npc slf,var C_Npc oth)
{
if(C_BodyStateContains(slf,BS_FALL) || C_BodyStateContains(slf,BS_SWIM) || C_BodyStateContains(slf,BS_DIVE))
{
return;
};
if(B_SelectSpell(slf,oth))
{
return;
};
if(Npc_IsInFightMode(slf,FMODE_MAGIC))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_IsInFightMode(slf,FMODE_FAR))
{
if((Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER) || !Npc_HasEquippedMeleeWeapon(slf))
{
return;
};
};
if(Npc_IsInFightMode(slf,FMODE_MELEE))
{
if((Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER) || !Npc_HasEquippedRangedWeapon(slf))
{
return;
};
};
if(Npc_HasEquippedMeleeWeapon(slf) && (Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_HasEquippedRangedWeapon(slf) && (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER) && C_NpcHasAttackReasonToKill(slf))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyRangedWeapon(slf);
return;
};
if(Npc_IsInFightMode(slf,FMODE_NONE))
{
if(Npc_HasEquippedMeleeWeapon(slf))
{
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_HasEquippedRangedWeapon(slf))
{
AI_ReadyRangedWeapon(slf);
return;
};
AI_ReadyMeleeWeapon(slf);
return;
};
};
{
if(C_BodyStateContains(slf,BS_FALL) || C_BodyStateContains(slf,BS_SWIM) || C_BodyStateContains(slf,BS_DIVE))
{
return;
};
if(B_SelectSpell(slf,oth))
{
return;
};
if(Npc_IsInFightMode(slf,FMODE_MAGIC))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_IsInFightMode(slf,FMODE_FAR))
{
if((Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER) || !Npc_HasEquippedMeleeWeapon(slf))
{
return;
};
};
if(Npc_IsInFightMode(slf,FMODE_MELEE))
{
if((Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER) || !Npc_HasEquippedRangedWeapon(slf))
{
return;
};
};
if(Npc_HasEquippedMeleeWeapon(slf) && (Npc_GetDistToNpc(slf,oth) <= FIGHT_DIST_RANGED_OUTER))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_HasEquippedRangedWeapon(slf) && (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_RANGED_INNER) && C_NpcHasAttackReasonToKill(slf))
{
if(!Npc_IsInFightMode(slf,FMODE_NONE))
{
AI_RemoveWeapon(slf);
};
AI_ReadyRangedWeapon(slf);
return;
};
if(Npc_IsInFightMode(slf,FMODE_NONE))
{
if(Npc_HasEquippedMeleeWeapon(slf))
{
AI_ReadyMeleeWeapon(slf);
return;
};
if(Npc_HasEquippedRangedWeapon(slf))
{
AI_ReadyRangedWeapon(slf);
return;
};
AI_ReadyMeleeWeapon(slf);
return;
};
};