Author Sticky: Post Working Scripts Here
Uthoroc Posted: Wednesday, 17 July 09:03AM
Tag-playing kids

Want some action on your town/city streets? Here is the code for some kids playing "tag".

You need two or more kids with the tag "TAGCHILD" in your area, which have the spawn in condition NW_FLAG_HEARBEAT_EVENT set in their OnSpawn script. Exactly one of them needs to have the local variable "nChasing" set to 1 in the same script:
SetLocalInt(OBJECT_SELF, "nChasing", 1);

In the custom OnUserDefined script insert the following code in the HEARTBEAT section (nUser==1001).

If you don't want them to play the whole time, you can encapsulate the code in some starting condition.

NWScript:
//tag-playing children by Ralf Schemmann

//July 17th, 2002

//

//if owner is chasing

       if (GetLocalInt(OBJECT_SELF, "nChasing") == 1)

       {

          //Find kid to chase

          object oChased = GetNearestObjectByTag("TAGCHILD");

          //Is owner close enough to tag?

          if (GetDistanceToObject(oChased) < 1.0f )

          {

              //Tag and switch roles

              SpeakString("Tag!");

              AssignCommand(oChased, ClearAllActions());

              SetLocalInt(OBJECT_SELF, "nChasing", 0);

              SetLocalInt(oChased, "nTagged", 1);

              ClearAllActions();

              ActionMoveAwayFromObject(oChased, TRUE);

          }

          //if still too far away, move after target

          else

          {

              ActionForceMoveToObject(oChased, TRUE, 0.0f);

          }

       }

       //owner is being chased

       else

       {

          //If kid has been tagged, wait a hearbeat then start chasing

          if (GetLocalInt(OBJECT_SELF, "nTagged") == 1)

          {

              SetLocalInt(OBJECT_SELF, "nTagged", 0);

              SetLocalInt(OBJECT_SELF, "nChasing", 1);

          }

          //if not been tagged, run away from chaser or move closer to other kids

          else

          {

            //Find Nearest tag-playing child

            object oChaser = GetNearestObjectByTag("TAGCHILD");

            //if this is the chaser

            if (GetLocalInt(oChaser, "nChasing") == 1)

              //run away from chaser

              ActionMoveAwayFromObject(oChaser, TRUE);

            else

              //run after other kid

              ActionForceMoveToObject(oChaser, TRUE, 8.0f);

          }

       }



Be careful with this code, as it places some overhead on you Heartbeat Events, adding too many kids can affect performance.

Also, this kiddies go all over the place, even opening doors. Make sure they can't get into dangerous areas, unless you want some awful atrocities.

Have fun, Uthoroc