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

81 lines
2.5 KiB
Plaintext

// Onenter_eronia
#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("ERONIA_SPAWN"+IntToString(d6()));
int nR;
string sRes="";
if (nNum>0)
{ // spawn
nR=d100();
if (nR<21) sRes="penguin002";
else if (nR<31) sRes="bearpolar002";
else if (nR<38) sRes="wolfwint002";
else if (nR<51) sRes="raptor002";
else if (nR<58) sRes="wyrmling_sil001";
else if (nR<62) sRes="drgsilv002";
else if (nR<64) sRes="drgsilv003";
else if (nR<66) sRes="drgsilv004";
else if (nR<83) sRes="chound002";
else if (nR<85) sRes="halfcel002";
else if (nR<90) sRes="clantern001";
else if (nR<92) sRes="movanicdeva";
else if (nR<94) sRes="monadicdeva";
else if (nR<96) sRes="astraldeva";
else if (nR<98) sRes="planetar";
else { sRes="solar"; }
oCr=CreateObject(OBJECT_TYPE_CREATURE,sRes,GetLocation(oWP));
SetLocalInt(oCr,"bEronia",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))
{ // PC entered
nC=1;
oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
while(GetIsObjectValid(oCr))
{ // count critters
if (GetLocalInt(oCr,"bEronia")) nCount++;
nC++;
oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
} // count critters
if (nCount<8) fnSpawn(8-nCount);
ExecuteScript("fb1_onenter",oPC);
ExecuteScript("area_visit",OBJECT_SELF);
} // PC entered
}