You can almost do "wander but not too far" in BG2.
IF
Global("StartPatrol","LOCALS",0)
THEN
RESPONSE #100
SetGlobal("StartPatrol","LOCALS",1)
SetGlobalTimer("Patrol","LOCALS",12)
SaveObjectLocation("LOCALS","DefaultLocation",Myself)
END
IF
GlobalTimerExpired("Patrol","LOCALS")
Global("StartPatrol","LOCALS",1)
THEN
RESPONSE #100
MoveToSavedLocationn("DefaultLocation","LOCALS")
SetGlobal("StartPatrol","LOCALS",0)
END
IF
GlobalTimerNotExpired("Patrol","LOCALS")
Global("StartPatrol","LOCALS",1)
THEN
RESPONSE #100
RandomWalkContinuous()
END
It depends on time rather than distance, so it probably still looks kind of fake, but whatever.