// Onenter_belierin
#include "antistuck_h"
void fnWander()
{
  object oWP=GetNearestObject(OBJECT_TYPE_WAYPOINT,OBJECT_SELF,d20());
  object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,OBJECT_SELF,1);
  object oEnemy=GetNearestCreature(CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY,OBJECT_SELF,1,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN,CREATURE_TYPE_IS_ALIVE,TRUE);
  int nRun=FALSE;
  effect eE;
  if (d4()==1) nRun=TRUE;
  if (GetIsObjectValid(oPC))
  { // PC in area
    if (!GetIsInCombat(OBJECT_SELF)&&!IsInConversation(OBJECT_SELF)&&!GetIsObjectValid(oEnemy))
    { // okay to mess with
      AssignCommand(OBJECT_SELF,ClearAllActions());
      if (!GetLocalInt(OBJECT_SELF,"bCanFly"))AssignCommand(OBJECT_SELF,ASActionMoveToObject(oWP,nRun,1.0));
      else { // fly
        eE=EffectDisappearAppear(GetLocation(oWP));
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eE,OBJECT_SELF,12.0);
      } // fly
    } // okay to mess with
    DelayCommand(30.0,fnWander());
  } // PC in area
  else { DestroyObject(OBJECT_SELF); } // despawn
}

void fnSpawn(int nNum)
{
  object oCr;
  object oWP=GetWaypointByTag("BELIERIN_SPAWN"+IntToString(d6()));
  int nR;
  string sRes="";
  if (nNum>0)
  { // spawn
    nR=d100();
    if (nR<21) sRes="bat001";
    else if (nR<31) sRes="jaguar002";
    else if (nR<38) sRes="basilisk002";
    else if (nR<51) sRes="ratdire003";
    else if (nR<58) sRes="planetar";
    else if (nR<62) sRes="solar";
    else if (nR<68) sRes="bulette002";
    else if (nR<78) sRes="hugeswampvipe001";
    else if (nR<98) sRes="lupinal";
    else { sRes="solar"; }
    oCr=CreateObject(OBJECT_TYPE_CREATURE,sRes,GetLocation(oWP));
    SetLocalInt(oCr,"bBelierin",TRUE);
    AssignCommand(oCr,fnWander());
    DelayCommand(1.0,fnSpawn(nNum-1));
  } // spawn
} // fnSpawn()


void main()
{
  object oPC=GetEnteringObject();
  int nCount;
  int nC;
  object oCr;
  if (GetIsPC(oPC))
  { // IS PC
    nC=1;
    oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
    while(GetIsObjectValid(oCr))
    { // count critters
      if (GetLocalInt(oCr,"bBelierin")) nCount++;
      nC++;
      oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
    } // count critters
    if (nCount<12) fnSpawn(12-nCount);
    ExecuteScript("area_visit",OBJECT_SELF);
  } // IS PC
}