93 lines
2.2 KiB
Plaintext
93 lines
2.2 KiB
Plaintext
objectdef MrNavigation
|
|
{
|
|
variable string autorun="num lock"
|
|
variable string forward=w
|
|
variable string backward=s
|
|
variable string strafeleft=q
|
|
variable string straferight=e
|
|
variable string turnleft=a
|
|
variable string turnright=d
|
|
|
|
method FollowPath(... path)
|
|
{
|
|
variable int index
|
|
for (index:Set[1]; ${index} < ${path.Size}; index:Inc)
|
|
{
|
|
variable point3f targetLocation
|
|
targetLocation:Set[${path[index]:Token[1,","]},${path[index]:Token[2,","]},${path[index]:Token[3,","]}]
|
|
echo ${targetLocation}
|
|
call This.MoveTo path[index]
|
|
}
|
|
}
|
|
|
|
|
|
function MoveTo(float x, float z, float percision)
|
|
{
|
|
if !${percision}
|
|
{
|
|
percision:Set[5]
|
|
}
|
|
|
|
variable float angle
|
|
echo "Moving to ${x}, ${z}"
|
|
press "${autorun}"
|
|
do
|
|
{
|
|
echo "${Math.Distance[${Me.X},${Me.Z}, x, z]} units away from target"
|
|
face ${x} ${z}
|
|
|
|
wait 5
|
|
|
|
}
|
|
while ${Math.Distance[${Me.X},${Me.Z}, locatoin.X, location.Z]} > ${percision}
|
|
press "${autorun}"
|
|
}
|
|
|
|
function Follow(int targetId)
|
|
{
|
|
echo "Following ${Actor[${targetId}].Name}"
|
|
if !${percision}
|
|
{
|
|
percision:Set[5]
|
|
}
|
|
|
|
variable float angle
|
|
variable point3f targetLocation
|
|
do
|
|
{
|
|
targetLocation:Set[${Actor[${targetId}].Loc}]
|
|
wait 5
|
|
if ${Actor[${targetId}].Distance} <= 3
|
|
{
|
|
if ${Me.IsMoving}
|
|
{
|
|
echo "Target is close enough"
|
|
press "${autorun}"
|
|
}
|
|
|
|
continue
|
|
}
|
|
else
|
|
{
|
|
if !${Me.IsMoving}
|
|
{
|
|
echo "Target is too far away"
|
|
press "${autorun}"
|
|
}
|
|
}
|
|
|
|
|
|
echo " ${Actor[${targetId}].Distance} units away from target"
|
|
face ${targetLocation.X} ${targetLocation.Z}
|
|
}
|
|
while TRUE
|
|
}
|
|
}
|
|
|
|
function main()
|
|
{
|
|
variable int followTargetId = ${Me.Target.ID}
|
|
variable MrNavigation nav
|
|
|
|
call nav.Follow ${followTargetId}
|
|
} |