Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

157 lines
5.3 KiB
Plaintext

// place_underwater
const int TREASURE_LOCATIONS = 56;
object fnFindLocation(int bFindAlt=FALSE)
{ // PURPOSE: Return a waypoint UNDERWATER_TREASURE_# that is unused
object oRet=OBJECT_INVALID;
int nR;
string sNum;
oRet=GetWaypointByTag("UNDERWATER_TREASURE_"+IntToString((Random(TREASURE_LOCATIONS)+1)));
while(oRet==OBJECT_INVALID||GetLocalInt(oRet,"nUsed")==TRUE)
{ // keep looking
oRet=GetWaypointByTag("UNDERWATER_TREASURE_"+IntToString((Random(TREASURE_LOCATIONS)+1)));
} // keep looking
if (bFindAlt&&d100()<51)
{ // find alternate non-underwater location
nR=d4();
if (nR<3)
{ // standard areas
nR=Random(100);
if (nR>9) sNum=IntToString(nR);
else sNum="0"+IntToString(nR);
oRet=GetWaypointByTag("RL_"+sNum);
while(oRet==OBJECT_INVALID||GetLocalInt(oRet,"nUsed")==1)
{ // find random locations
nR=Random(100);
if (nR>9) sNum=IntToString(nR);
else sNum="0"+IntToString(nR);
oRet=GetWaypointByTag("RL_"+sNum);
} // find random locations
} // standard areas
else if (nR==3)
{ // desert
nR=Random(30)+1;
oRet=GetWaypointByTag("DESERT_TREASURE"+IntToString(nR));
while(oRet==OBJECT_INVALID||GetLocalInt(oRet,"nUsed"))
{ // find desert location
nR=Random(30)+1;
oRet=GetWaypointByTag("DESERT_TREASURE"+IntToString(nR));
} // find desert location
} // desert
else if (nR==4)
{ // frozen areas
nR=Random(63)+1;
oRet=GetWaypointByTag("NORTHERN_TREASURE"+IntToString(nR));
while(oRet==OBJECT_INVALID||GetLocalInt(oRet,"nUsed"))
{ // find northern frozen location
nR=Random(63)+1;
oRet=GetWaypointByTag("NORTHERN_TREASURE"+IntToString(nR));
} // find northern frozen location
} // frozen areas
} // find alternate non-underwater location
if (oRet!=OBJECT_INVALID) SetLocalInt(oRet,"nUsed",TRUE);
return oRet;
} // fnFindLocation()
void fnPlaceItem(string sRes,int bAlt=FALSE)
{ // PURPOSE: Place items
object oWP=fnFindLocation(bAlt);
string sGuardian;
int nR;
object oItem;
object oCreature;
string sResGuardian;
string sType=GetTag(oWP);
if (GetStringLeft(sType,3)=="RL_")
{ // standard area
nR=d6();
if (nR==1) sResGuardian="gnoll003";
else if (nR==2) sResGuardian="bandit006";
else if (nR==3) sResGuardian="yuan_ti002";
else if (nR==4) sResGuardian="invis_stalk001";
else if (nR==5) sResGuardian="willow_wisp001";
else if (nR==6) sResGuardian="krenshar001";
} // standard area
else if (GetStringLeft(sType,7)=="DESERT_")
{ // desert area
nR=d4();
if (nR==1) sResGuardian="desguardian1";
else if (nR==2) sResGuardian="desguardian2";
else if (nR==3) sResGuardian="desguardian3";
else if (nR==4) sResGuardian="desguardian6";
} // desert area
else if (GetStringLeft(sType,9)=="NORTHERN_")
{ // northern area
nR=d6();
sResGuardian="winguardian"+IntToString(nR);
} // northern area
else
{ // underwater area
nR=d6();
if (nR<3) sResGuardian="gruthage";
else if (nR==3) sResGuardian="waterdragon";
else if (nR==4) sResGuardian="slamlizard";
else if (nR==5) sResGuardian="waterelguard";
else if (nR==6) sResGuardian="drgblack002";
} // underwater area
oCreature=CreateObject(OBJECT_TYPE_CREATURE,sResGuardian,GetLocation(oWP));
SetLocalObject(oCreature,"oGuardPoint",oWP);
oItem=CreateObject(OBJECT_TYPE_ITEM,sRes,GetLocation(oWP));
SetLocalInt(oItem,"bNoClean",TRUE);
} // fnPlaceItem()
void fnPlaceHorseMerchant()
{ // PURPOSE: Place the Horse Merchant
object oMerchant;
int nCount=0;
int nN=0;
object oWP;
oWP=GetObjectByTag("HORSE_MERCHANT",nN);
while(GetIsObjectValid(oWP))
{ // count spawn locations
nCount++;
nN++;
oWP=GetObjectByTag("HORSE_MERCHANT",nN);
} // count spawn locations
if (nCount>0)
{ // found
nN=Random(nCount);
oWP=GetObjectByTag("HORSE_MERCHANT",nN);
oMerchant=CreateObject(OBJECT_TYPE_CREATURE,"horsemerchant",GetLocation(oWP));
//SendMessageToPC(GetFirstPC(),"Horse Merchant in '"+GetName(GetArea(oWP))+"'");
} // found
else
{ // error
PrintString("ERROR: place_underwater... no HORSE_MERCHANT waypoints found.");
} // error
} // fnPlaceHorseMerchant()
void main()
{
fnPlaceItem("rts_it_uw1",TRUE);
DelayCommand(3.0,fnPlaceItem("rts_it_uw2",FALSE));
DelayCommand(6.0,fnPlaceItem("rts_it_uw3",FALSE));
DelayCommand(9.0,fnPlaceItem("rts_it_uw4",FALSE));
DelayCommand(12.0,fnPlaceItem("rts_it_uw5",TRUE));
DelayCommand(15.0,fnPlaceItem("rts_it_uw6",TRUE));
DelayCommand(18.0,fnPlaceItem("rts_it_uw7",FALSE));
DelayCommand(21.0,fnPlaceItem("rts_it_uw8",FALSE));
DelayCommand(24.0,fnPlaceItem("rts_it_uw9",FALSE));
DelayCommand(27.0,fnPlaceItem("rts_it_uw10",TRUE));
DelayCommand(30.0,fnPlaceItem("rts_it_uw11",FALSE));
DelayCommand(33.0,fnPlaceItem("rts_it_uw12",TRUE));
DelayCommand(36.0,fnPlaceItem("rts_it_uw13",TRUE));
DelayCommand(39.0,fnPlaceItem("rts_it_uw14",TRUE));
DelayCommand(42.0,fnPlaceItem("rts_it_uw15",TRUE));
DelayCommand(45.0,fnPlaceItem("rts_it_uw16",TRUE));
DelayCommand(47.0,fnPlaceItem("rts_it_uw17",TRUE));
DelayCommand(49.0,fnPlaceItem("rts_it_uw18",TRUE));
DelayCommand(51.0,fnPlaceHorseMerchant());
DelayCommand(60.0,ExecuteScript("rd_ex_setup",OBJECT_SELF));
}