157 lines
5.3 KiB
Plaintext
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));
|
|
}
|