forked from mirror/openmw-tes3mp
AI: return back after pursuit
This commit is contained in:
parent
3d0631cfcc
commit
74a2cbe696
2 changed files with 23 additions and 20 deletions
|
@ -308,6 +308,29 @@ void AiSequence::stack (const AiPackage& package, const MWWorld::Ptr& actor, boo
|
|||
if (isActualAiPackage(package.getTypeId()))
|
||||
stopCombat();
|
||||
|
||||
// we should return a wandering actor back after combat or pursuit
|
||||
// the same thing for actors without AI packages
|
||||
int currentTypeId = getTypeId();
|
||||
int newTypeId = package.getTypeId();
|
||||
if (currentTypeId <= MWMechanics::AiPackage::TypeIdWander
|
||||
&& (newTypeId <= MWMechanics::AiPackage::TypeIdCombat
|
||||
|| newTypeId == MWMechanics::AiPackage::TypeIdPursue))
|
||||
{
|
||||
osg::Vec3f dest;
|
||||
if (currentTypeId == MWMechanics::AiPackage::TypeIdWander)
|
||||
{
|
||||
AiPackage* activePackage = getActivePackage();
|
||||
dest = activePackage->getDestination(actor);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest = actor.getRefData().getPosition().asVec3();
|
||||
}
|
||||
|
||||
MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z(), true);
|
||||
stack(travelPackage, actor, false);
|
||||
}
|
||||
|
||||
// remove previous packages if required
|
||||
if (cancelOther && package.shouldCancelPreviousAi())
|
||||
{
|
||||
|
|
|
@ -1604,26 +1604,6 @@ namespace MWMechanics
|
|||
if (aiSequence.isInCombat(target))
|
||||
return;
|
||||
|
||||
// we should return a wandering actor back after combat
|
||||
// the same thing for actors without AI packages
|
||||
if (aiSequence.getTypeId() <= MWMechanics::AiPackage::TypeIdWander)
|
||||
{
|
||||
int typeId = aiSequence.getTypeId();
|
||||
osg::Vec3f dest;
|
||||
if (typeId == MWMechanics::AiPackage::TypeIdNone)
|
||||
{
|
||||
dest = ptr.getRefData().getPosition().asVec3();
|
||||
}
|
||||
else if (typeId == MWMechanics::AiPackage::TypeIdWander)
|
||||
{
|
||||
AiPackage* activePackage = aiSequence.getActivePackage();
|
||||
dest = activePackage->getDestination(ptr);
|
||||
}
|
||||
|
||||
MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z(), true);
|
||||
aiSequence.stack(travelPackage, ptr, false);
|
||||
}
|
||||
|
||||
aiSequence.stack(MWMechanics::AiCombat(target), ptr);
|
||||
if (target == getPlayer())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue