////////////////////////////////////////////////////////////////////////////////
//:: ITM_BookOfTownPortal.nss
////////////////////////////////////////////////////////////////////////////////

void main()
{
  object oItem       = GetItemActivated();
  object oPC         = GetItemActivator();
  object oTownPortal;

  if (GetTag(oItem) == "ITM_BookOfTownPortal")
  {
    if (GetTag(GetArea(oPC)) != "TRISTRAM")
      {
        if (GetTag(GetArea(oPC)) != "NOTOWNPORTAL")
          {
      // if player already has a town portal destroy it
      oTownPortal = GetLocalObject(oPC,"TownPortal");
      if (oTownPortal != OBJECT_INVALID) DestroyObject(oTownPortal);

      // create new town portal at player location
      oTownPortal = CreateObject(OBJECT_TYPE_PLACEABLE,"townportal",GetLocation(oPC));
      SetLocalObject(oPC,"TownPortal",oTownPortal);
      switch (d6())
      {
        case 1: AssignCommand(oTownPortal,PlaySound("sco_lgrinholy01")); break;
        case 2: AssignCommand(oTownPortal,PlaySound("sco_lgsprholy01")); break;
        case 3: AssignCommand(oTownPortal,PlaySound("sco_lgupholy01"));  break;
        case 4: AssignCommand(oTownPortal,PlaySound("sco_lgrinodd01"));  break;
        case 5: AssignCommand(oTownPortal,PlaySound("sco_lgsprodd01"));  break;
        case 6: AssignCommand(oTownPortal,PlaySound("sco_mehanodd03"));  break;
      }
      DelayCommand(0.3,
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SMOKE_PUFF),oTownPortal));
      DelayCommand(0.5,SignalEvent(oTownPortal,EventUserDefined(9000)));

      // if there is no town portal in Tristram create one
      oTownPortal = GetLocalObject(OBJECT_SELF,"TownPortal");
      if (!GetIsObjectValid(oTownPortal))
      {
        oTownPortal = CreateObject(OBJECT_TYPE_PLACEABLE,"townportal",GetLocation(GetObjectByTag("WP_TownPortal")));
        SetLocalObject(OBJECT_SELF,"TownPortal",oTownPortal);
        DelayCommand(0.6,SignalEvent(oTownPortal,EventUserDefined(9000)));
          }
        }
    else
    {
      FloatingTextStringOnCreature("The spell fizzles!  The town portal does not work here!", oPC);
      }
    }
    else
    {
      FloatingTextStringOnCreature("The spell fizzles!  You're already in town!", oPC);
      }
    }
ExecuteScript("dmfi_activate", OBJECT_SELF);
ExecuteScript("69_activateheal", OBJECT_SELF);
//ExecuteScript("s_apocalypse", OBJECT_SELF);
//ExecuteScript("s_teleport", OBJECT_SELF);
ExecuteScript(GetTag(GetItemActivated()), OBJECT_SELF);
}