74 lines
2.3 KiB
Plaintext
74 lines
2.3 KiB
Plaintext
// 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
|
|
}
|