Core/SAI: Fixed SMART_ACTION_MOVE_TO_POS and SMART_ACTION_JUMP_TO_POS using target coordinates as destination if requested WorldObject target was not found
Port From (https://github.com/TrinityCore/TrinityCore/commit/888ccd1e4421b83411cb00365c26b19234e1e46e)
This commit is contained in:
@@ -1372,31 +1372,11 @@ namespace Game.AI
|
|||||||
|
|
||||||
WorldObject target = null;
|
WorldObject target = null;
|
||||||
|
|
||||||
/*if (e.GetTargetType() == SmartTargets.CreatureRange || e.GetTargetType() == SmartTargets.CreatureGuid ||
|
// we want to move to random element
|
||||||
e.GetTargetType() == SmartTargets.CreatureDistance || e.GetTargetType() == SmartTargets.GameobjectRange ||
|
if (!targets.Empty())
|
||||||
e.GetTargetType() == SmartTargets.GameobjectGuid || e.GetTargetType() == SmartTargets.GameobjectDistance ||
|
target = targets.SelectRandom();
|
||||||
e.GetTargetType() == SmartTargets.ClosestCreature || e.GetTargetType() == SmartTargets.ClosestGameobject ||
|
|
||||||
e.GetTargetType() == SmartTargets.OwnerOrSummoner || e.GetTargetType() == SmartTargets.ActionInvoker ||
|
|
||||||
e.GetTargetType() == SmartTargets.ClosestEnemy || e.GetTargetType() == SmartTargets.ClosestFriendly)*/
|
|
||||||
{
|
|
||||||
// we want to move to random element
|
|
||||||
if (!targets.Empty())
|
|
||||||
target = targets.SelectRandom();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target == null)
|
if (target != null)
|
||||||
{
|
|
||||||
Position dest = new(e.Target.x, e.Target.y, e.Target.z);
|
|
||||||
if (e.Action.moveToPos.transport != 0)
|
|
||||||
{
|
|
||||||
ITransport trans = _me.GetDirectTransport();
|
|
||||||
if (trans != null)
|
|
||||||
trans.CalculatePassengerPosition(ref dest.posX, ref dest.posY, ref dest.posZ, ref dest.Orientation);
|
|
||||||
}
|
|
||||||
|
|
||||||
_me.GetMotionMaster().MovePoint(e.Action.moveToPos.pointId, dest, e.Action.moveToPos.disablePathfinding == 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
target.GetPosition(out x, out y, out z);
|
target.GetPosition(out x, out y, out z);
|
||||||
@@ -1404,6 +1384,19 @@ namespace Game.AI
|
|||||||
target.GetContactPoint(_me, out x, out y, out z, e.Action.moveToPos.contactDistance);
|
target.GetContactPoint(_me, out x, out y, out z, e.Action.moveToPos.contactDistance);
|
||||||
_me.GetMotionMaster().MovePoint(e.Action.moveToPos.pointId, x + e.Target.x, y + e.Target.y, z + e.Target.z, e.Action.moveToPos.disablePathfinding == 0);
|
_me.GetMotionMaster().MovePoint(e.Action.moveToPos.pointId, x + e.Target.x, y + e.Target.y, z + e.Target.z, e.Action.moveToPos.disablePathfinding == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (e.GetTargetType() != SmartTargets.Position)
|
||||||
|
break;
|
||||||
|
|
||||||
|
Position dest = new(e.Target.x, e.Target.y, e.Target.z);
|
||||||
|
if (e.Action.moveToPos.transport != 0)
|
||||||
|
{
|
||||||
|
var trans = _me.GetDirectTransport();
|
||||||
|
if (trans != null)
|
||||||
|
trans.CalculatePassengerPosition(ref dest.posX, ref dest.posY, ref dest.posZ, ref dest.Orientation);
|
||||||
|
}
|
||||||
|
|
||||||
|
_me.GetMotionMaster().MovePoint(e.Action.moveToPos.pointId, dest, e.Action.moveToPos.disablePathfinding == 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SmartActions.EnableTempGobj:
|
case SmartActions.EnableTempGobj:
|
||||||
@@ -1822,6 +1815,8 @@ namespace Game.AI
|
|||||||
target.GetContactPoint(_me, out x, out y, out z, e.Action.jump.ContactDistance);
|
target.GetContactPoint(_me, out x, out y, out z, e.Action.jump.ContactDistance);
|
||||||
pos = new Position(x + e.Target.x, y + e.Target.y, z + e.Target.z);
|
pos = new Position(x + e.Target.x, y + e.Target.y, z + e.Target.z);
|
||||||
}
|
}
|
||||||
|
else if (e.GetTargetType() != SmartTargets.Position)
|
||||||
|
break;
|
||||||
|
|
||||||
if (e.Action.jump.Gravity != 0 || e.Action.jump.UseDefaultGravity != 0)
|
if (e.Action.jump.Gravity != 0 || e.Action.jump.UseDefaultGravity != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user