HoS_PRC8/_mod/_module/nss/oe_belierin.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

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
}