//////////////////////////////////////////////////////////////////////////////// // rd_oe_area - Random Dungeon Area Enter // By Deva B. Winblood. November 16th, 2008. //////////////////////////////////////////////////////////////////////////////// #include "x3_inc_string" object fnSpawn(object oWP,string sRes) { // PURPOSE: Spawn if need be object oOb; oOb=GetLocalObject(oWP,"oCreature"); if (!GetIsObjectValid(oOb)) { // spawn oOb=CreateObject(OBJECT_TYPE_CREATURE,sRes,GetLocation(oWP)); SetLocalObject(oWP,"oCreature",oOb); AssignCommand(oOb,ActionRandomWalk()); } // spawn return oOb; } // fnSpawn() string fnGetRes(object oWP,string sResRef) { // PURPOSE: Return ResRef or use default string sRes; sRes=GetLocalString(oWP,"sRes"); if (GetStringLength(sRes)<1) { // set sRes=sResRef; SetLocalString(oWP,"sRes",sRes); } // set return sRes; } // fnGetRes() string fnGetALeader() { // PURPOSE: Return a random leader type object oMod=GetModule(); string sRet=""; int nR=d100(); while(GetStringLength(sRet)<1) { // find if (nR<41) { // hobgoblin sRet="rdhobchamp"; } // hobgoblin else if (nR<61) { // intellect devourer sRet="devour001"; } // intellect devourer else if (nR<71) { // elder stone giant sRet="rdgstone2"; } // elder stone giant else if (nR<76) { // ancient shadow dragon - unique if (!GetLocalInt(oMod,"bRDShadDrag")) { // okay to create SetLocalInt(oMod,"bRDShadDrag",TRUE); sRet="dragonshadow"; } // okay to create } // ancient shadow dragon - unique else if (nR<81) { // harys - unique if (!GetLocalInt(oMod,"bRDHarys")) { // okay to create SetLocalInt(oMod,"bRDHarys",TRUE); sRet="rdlharys"; } // okay to create } // harys - unique else if (nR<86) { // fell - unique if (!GetLocalInt(oMod,"bRDFell")) { // okay to create SetLocalInt(oMod,"bRDFell",TRUE); sRet="rdlfell"; } // okay to create } // fell - unique else if (nR<91) { // sormen - unique if (!GetLocalInt(oMod,"bRDSormen")) { // okay to create SetLocalInt(oMod,"bRDSormen",TRUE); sRet="rdlsormen"; } // okay to create } // sormen - unique else if (nR<96) { // hiril - unique if (!GetLocalInt(oMod,"bRDHiril")) { // okay to create SetLocalInt(oMod,"bRDHiril",TRUE); sRet="rdlhiril"; } // okay to create } // hiril - unique nR=d100(); } // find return sRet; } // fnGetALeader() string fnGetCommon() { // PURPOSE: Return Common int nR=d100(); string sRes=""; if(nR<6) sRes="rdcommon1"; else if (nR<11) sRes="rdcommon2"; else if (nR<14) sRes="rdcommon3"; else if (nR<17) sRes="rdcommon4"; else if (nR<21) sRes="rdcommon5"; else if (nR<24) sRes="btlfire002"; else if (nR<31) sRes="btlfire004"; else if (nR<41) sRes="hosstirge"; else if (nR<43) sRes="cockatrice001"; else if (nR<46) sRes="basilisk001"; else if (nR<51) sRes="deeprothe002"; else if (nR<61) sRes="gargoyle001"; else if (nR<76) { sRes="horror001"; } return sRes; } // fnGetCommon() string fnGetSecond(string sMain) { // PURPOSE: Return the second type of creature string sRes=""; if (sMain=="rdhobchamp") return "hobgoblin002"; else if (sMain=="devour001") return "hobgoblin003"; else if (sMain=="rdgstone2") return "rdgstone1"; else if (sMain=="dragonshadow") return "rdcommon2"; return sRes; } // fnGetSecond() void fnAreaRD2() { // PURPOSE: Handle area Beholder Caves Area object oCenter=GetWaypointByTag("AREA_RD2"); object oWP=GetNearestObjectByTag("RD_SPAWNL_A",oCenter); object oOb; int nN; int nR; string sRes; if (GetIsObjectValid(oWP)) { // spawn leader found - Group A sRes=fnGetRes(oWP,"rdbeholder3"); // G'Zorb oOb=fnSpawn(oWP,sRes); nN=1; oWP=GetNearestObjectByTag("RD_SPAWN_A",oCenter,nN); while(GetIsObjectValid(oWP)) { // spawn rest of group nR=d100(); if (nR<66) sRes=fnGetRes(oWP,"rdbeholder1"); // Eyeball else { sRes=fnGetRes(oWP,"rdbeholder2"); } // Beholder oOb=fnSpawn(oWP,sRes); nN++; oWP=GetNearestObjectByTag("RD_SPAWN_A",oCenter,nN); } // spawn rest of group } // spawn leader found - Group A oWP=GetNearestObjectByTag("RD_SPAWNL_B",oCenter); sRes=fnGetRes(oWP,""); if (GetStringLength(sRes)<1) { // get sRes=fnGetALeader(); sRes=fnGetRes(oWP,sRes); } // get if (GetStringLength(sRes)>0) { // leader found oOb=fnSpawn(oWP,sRes); sRes=fnGetSecond(sRes); if (GetStringLength(sRes)>0) { // spawn nN=1; oWP=GetNearestObjectByTag("RD_SPAWN_B",oCenter,nN); while(GetIsObjectValid(oWP)) { // spawn oOb=fnSpawn(oWP,sRes); nN++; oWP=GetNearestObjectByTag("RD_SPAWN_B",oCenter,nN); } // spawn } // spawn } // leader found else { // common sRes=fnGetCommon(); sRes=fnGetRes(oWP,sRes); if (GetStringLength(sRes)>0) { // spawn oOb=fnSpawn(oWP,sRes); } // spawn } // common oWP=GetNearestObjectByTag("RD_SPAWNL_C",oCenter); sRes=fnGetRes(oWP,""); if (GetStringLength(sRes)<1) { // get sRes=fnGetALeader(); sRes=fnGetRes(oWP,sRes); } // get if (GetStringLength(sRes)>0) { // leader found oOb=fnSpawn(oWP,sRes); sRes=fnGetSecond(sRes); if (GetStringLength(sRes)>0) { // spawn nN=1; oWP=GetNearestObjectByTag("RD_SPAWN_C",oCenter,nN); while(GetIsObjectValid(oWP)) { // spawn oOb=fnSpawn(oWP,sRes); nN++; oWP=GetNearestObjectByTag("RD_SPAWN_C",oCenter,nN); } // spawn } // spawn } // leader found else { // common sRes=fnGetCommon(); sRes=fnGetRes(oWP,sRes); if (GetStringLength(sRes)>0) { // spawn oOb=fnSpawn(oWP,sRes); } // spawn } // common oWP=GetNearestObjectByTag("RD_SPAWNL_D",oCenter); sRes=fnGetRes(oWP,""); if (GetStringLength(sRes)<1) { // get sRes=fnGetALeader(); sRes=fnGetRes(oWP,sRes); } // get if (GetStringLength(sRes)>0) { // leader found oOb=fnSpawn(oWP,sRes); sRes=fnGetSecond(sRes); if (GetStringLength(sRes)>0) { // spawn nN=1; oWP=GetNearestObjectByTag("RD_SPAWN_D",oCenter,nN); while(GetIsObjectValid(oWP)) { // spawn oOb=fnSpawn(oWP,sRes); nN++; oWP=GetNearestObjectByTag("RD_SPAWN_D",oCenter,nN); } // spawn } // spawn } // leader found else { // common sRes=fnGetCommon(); sRes=fnGetRes(oWP,sRes); if (GetStringLength(sRes)>0) { // spawn oOb=fnSpawn(oWP,sRes); } // spawn } // common } // fnAreaRD2() void fnAreaRDGeneral(string sTag) { // PURPOSE: Setup area object oCenter=GetWaypointByTag("AREA_"+sTag); object oWP; int nN; int nR; object oOb; string sRes; string sL; int nC=1; while(nC<5) { // spawn at each leader location if (nC==1) sL="A"; else if (nC==2) sL="B"; else if (nC==3) sL="C"; else if (nC==4) sL="D"; oWP=GetNearestObjectByTag("RD_SPAWNL_"+sL,oCenter); if (GetIsObjectValid(oWP)) { // leader waypoint found sRes=fnGetRes(oWP,""); if (GetStringLength(sRes)<1) { // get sRes=fnGetALeader(); sRes=fnGetRes(oWP,sRes); } // get if (GetStringLength(sRes)>0) { // leader to spawn oOb=fnSpawn(oWP,sRes); sRes=fnGetSecond(sRes); if (GetStringLength(sRes)>0) { // spawn nN=1; oWP=GetNearestObjectByTag("RD_SPAWN_"+sL,oCenter,nN); while(GetIsObjectValid(oWP)) { // spawn oOb=fnSpawn(oWP,sRes); nN++; oWP=GetNearestObjectByTag("RD_SPAWN_"+sL,oCenter,nN); } // spawn } // spawn } // leader to spawn else { // common sRes=fnGetCommon(); sRes=fnGetRes(oWP,sRes); if (GetStringLength(sRes)>0) { // spawn oOb=fnSpawn(oWP,sRes); } // spawn } // common } // leader waypoint found nC++; } // spawn at each leader location nN=1; oOb=GetNearestObjectByTag("RD_SPAWN",oCenter,nN); while(GetIsObjectValid(oOb)) { // PURPOSE: place normal spawn sRes=fnGetRes(oWP,""); if (GetStringLength(sRes)<1) { // find resref sRes=fnGetCommon(); sRes=fnGetRes(oWP,sRes); } // find resref if (GetStringLength(sRes)>1) { // Spawn oOb=fnSpawn(oWP,sRes); } // spawn nN++; oOb=GetNearestObjectByTag("RD_SPAWN",oCenter,nN); } // PURPOSE: place normal spawn } // fnAreaRDGeneral() /////////////////////////////////////////////////////////[ MAIN ]/////////////// void main() { object oArea=OBJECT_SELF; object oPC=GetEnteringObject(); if (GetIsPC(oPC)) { // PC int nABSDay=GetCalendarDay()+(GetCalendarMonth()*30)+(GetCalendarYear()*12*30); int nLast=GetLocalInt(oArea,"nLastSpawnDay"); if (nLast!=nABSDay) { // spawn okay SetLocalInt(oArea,"nLastSpawnDay",nABSDay); string sTag=GetTag(oArea); if (sTag=="RD2") fnAreaRD2(); else { fnAreaRDGeneral(sTag); } } // spawn okay ExecuteScript("area_visit",OBJECT_SELF); } // PC } /////////////////////////////////////////////////////////[ MAIN ]///////////////