Script Name: Random Walk With Tether
What the script does:
Enables any creature that uses this script to walk randomly within a
specified distance of a point.
The point will either be a specifically named waypoint, or if no such
waypoint exists, it will use the starting position of the creature.
It uses a variable to control whether the creature should do this (the
variable name is: iDoTether)
if you want the creature to do it as soon as it spawns, just add:
NWScript: SetLocalInt(OBJECT_SELF, "iDoTether", 1);
to the creatures' OnSpawn script
Anyway, here's the script:
NWScript:
void main()
{
int nUserEvent = GetUserDefinedEventNumber();
object oSelf = OBJECT_SELF;
if(nUserEvent == 1001)
{
if (GetLocalInt(oSelf,"iDoTether")){
int iMaxDistance = 9;
location lTether;
string sTether = "TETHER_" + GetTag(oSelf);
object oTetherWaypoint = GetWaypointByTag( sTether );
if (!(GetLocalInt(oSelf, "iHasTether"))){
if (GetIsObjectValid( oTetherWaypoint ))
{
lTether = GetLocation( oTetherWaypoint );
} else {
lTether = GetLocation( oSelf );
}
SetLocalLocation(oSelf, "lTether", lTether);
SetLocalInt(oSelf, "iHasTether", 1);
}
lTether = GetLocalLocation(oSelf, "lTether");
vector vLocationVector = GetPositionFromLocation(lTether);
vLocationVector.x += (Random(iMaxDistance) - Random(iMaxDistance)) ;
vLocationVector.y += (Random(iMaxDistance) - Random(iMaxDistance)) ;
location lWalkTo = Location(GetArea(oSelf), vLocationVector, Random(361) * 1.0);
SetLocalLocation(oSelf, "WalkTo", lWalkTo);
ActionMoveToLocation(lWalkTo);
}
}
return;
}
Place it in the userdefined event to use it.
|