// 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)); }