the difference is that with the way Lee has it set up is that you could still avoid obstacles and such even with models that move during their animation whereas without it you will clip through obstacles and then port back to the "hidden" ai's position on looping the animation, so it is a nice feature if you have models that really must move with their animations.
you could always build the process in your script into 1 function/command and call it with the one line if you wanted anyway... something like this
MoveForwardWhileAnimating(e,g_PlayerPosX,g_PlayerPosZ,5) --call this line in your script (5 is the animation number to play)
then in the global have the function (or at the bottom -outside- of any scripts that need it)
function MoveForwardWhileAnimating(ent,tx,tz,pa)
AIObjNo = g_Entity[ent]['obj']
CharacterControlManual(ent)
AISetEntityControl(AIObjNo,AI_MANUAL)
AIEntityGoToPosition(AIObjNo,tx,tz)
MoveForward(ent,AIGetEntitySpeed(AIObjNo))
SetRotation(ent,0,AIGetEntityAngleY(AIObjNo),0)
AISetEntityPosition(AIObjNo,GetEntityPositionX(ent),GetEntityPositionY(ent),GetEntityPositionZ(ent))
if g_Entity[ent]['animating'] == 0 then
SetAnimation(pa)
PlayAnimation(ent)
g_Entity[ent]['animating'] = pa
end
end
untested but should work fine.