mrbot/utilities/MrNavigation.iss
2023-12-08 15:07:11 -06:00

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}
}