DMH-Online

Dungeon Masters Helper · Est. 2005

Npcs Scripts

NWN Script: tag.htm

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

⌂ All Scripts ← PreviousNext → 👁 Category List

All Npcs Scripts

📄 ambient_animations 📄 barmaid 📄 barmaid002 📄 barmaid003 📄 barmaid003a 📄 barmaid004 📄 bitch_slap 📄 blacksmith 📄 blacksmith_001 📄 blacksmith_002 📄 blacksmith_003 📄 bounty_hunter 📄 check 📄 check_pc_item 📄 check_pc_item_002 📄 cheer_pcs 📄 cook 📄 daily_activity 📄 day_merchant 📄 determine_armed 📄 drunk 📄 equip_dequip 📄 equip_dequip_002 📄 escort 📄 flee 📄 flee_001 📄 force_pc_sit 📄 gate_guard 📄 get_nearest 📄 guard_dog_002 📄 guard_patrol 📄 healer 📄 impersonation 📄 item_guardian 📄 item_guardian_002 📄 jail_cell 📄 janitor 📄 janitor_002 📄 living_statues 📄 misc_activity 📄 monolouge 📄 multi_converse 📄 night_watch 📄 npc_brawls 📄 npc_pick_pocket 📄 npc_speak_onperception 📄 npc_start_conv 📄 npc_start_conv_002 📄 npc_start_conv_003 📄 npc_start_conv_004 📄 npc_start_conv_005 📄 open_door 📄 polymorph 📄 prostitute 📄 protect_items 📄 protect_items_002 📄 random_speak 📄 random_speak_002 📄 random_speak_003 📄 random_speak_004 📄 random_speak_005 📄 random_walk2 📄 reinforcements 📄 reinforcements_002 📄 remember_conv 📄 rowdy 📄 sheath_weapons 📄 sit_and_talk 📄 sit_and_talk_002 📄 sit_in_nearest_chair 📄 smart_npc 📄 smart_sitting 📄 streetfight 📄 tag 📄 tag_001a 📄 teleport_away 📄 teleport_away_002 📄 teleport_away_003 📄 town_crier 📄 trivia_bot 📄 walk_after 📄 woodcutter 📄 worker 📄 worker_002 📄 workstation 📄 wrestling_game